diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 5bcc09a..1a30d7b 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -243,14 +243,14 @@ Total distributed third-party packages: 234 - [github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil](https://github.com/prometheus/client_golang/blob/v1.24.1/internal/github.com/golang/gddo/LICENSE) - [github.com/spaolacci/murmur3](https://github.com/spaolacci/murmur3/blob/v1.1.0/LICENSE) - [github.com/wlynxg/anet](https://github.com/wlynxg/anet/blob/v0.0.5/LICENSE) -- [golang.org/x/crypto](https://cs.opensource.google/go/x/crypto/+/v0.54.0:LICENSE) +- [golang.org/x/crypto](https://cs.opensource.google/go/x/crypto/+/v0.55.0:LICENSE) - [golang.org/x/exp](https://cs.opensource.google/go/x/exp/+/74f9aab9:LICENSE) - [golang.org/x/net](https://cs.opensource.google/go/x/net/+/v0.57.0:LICENSE) - [golang.org/x/oauth2](https://cs.opensource.google/go/x/oauth2/+/v0.36.0:LICENSE) - [golang.org/x/sync/errgroup](https://cs.opensource.google/go/x/sync/+/v0.22.0:LICENSE) - [golang.org/x/sys](https://cs.opensource.google/go/x/sys/+/v0.47.0:LICENSE) - [golang.org/x/term](https://cs.opensource.google/go/x/term/+/v0.45.0:LICENSE) -- [golang.org/x/text](https://cs.opensource.google/go/x/text/+/v0.40.0:LICENSE) +- [golang.org/x/text](https://cs.opensource.google/go/x/text/+/v0.41.0:LICENSE) - [golang.org/x/time/rate](https://cs.opensource.google/go/x/time/+/v0.15.0:LICENSE) - [gonum.org/v1/gonum/mathext](https://github.com/gonum/gonum/blob/v0.17.0/LICENSE) - [google.golang.org/api](https://github.com/googleapis/google-api-go-client/blob/v0.272.0/LICENSE) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 0d94cec..a3bf783 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,16 +1,29 @@ # Optimum Gateway - Version History & Changelog -**Latest Release:** [v1.1.1](./versions/v1.1.1/release_notes.md) -**Latest Docs:** [v1.1.1 Documentation](./versions/v1.1.1/index.md) +**Latest Release:** [v1.2.0](./versions/v1.2.0/release_notes.md) +**Latest Docs:** [v1.2.0 Documentation](./versions/v1.2.0/index.md) ## Supported Versions | Version | Status | Docker Image | | ------- | --------------------- | --------------------------- | -| v1.1.1 | CURRENT — recommended | `getoptimum/gateway:v1.1.1` | -| v1.0.2 | Previous — supported | `getoptimum/gateway:v1.0.2` | +| v1.2.0 | CURRENT — recommended | `getoptimum/gateway:v1.2.0` | +| v1.1.1 | Previous — supported | `getoptimum/gateway:v1.1.1` | -## v1.1.1 (Current) +## v1.2.0 (Current) + +**Docker Image:** `getoptimum/gateway:v1.2.0` + +Recommended upgrade for everyone on v1.1.1. Networking and CL peering are unchanged — same ports and firewall rules. + +### Highlights + +* **Consumer block stream.** Opt-in WebSocket + gRPC feed of decoded beacon blocks (`stream_enable: true`). Consumers use `osc_` keys from the [Partner Console](https://console.getoptimum.io/) (Hoodi and Mainnet). See [Consumer Block Stream](./versions/v1.2.0/06_block_stream.md). +* **Stream metrics.** `mump2p_stream_*` series on the telemetry port when the stream is enabled. See [Metrics](./versions/v1.2.0/metrics.md#consumer-block-stream). + +[Full release notes](./versions/v1.2.0/release_notes.md) · [Documentation](./versions/v1.2.0/index.md) + +## v1.1.1 **Docker Image:** `getoptimum/gateway:v1.1.1` @@ -25,30 +38,17 @@ Recommended upgrade for everyone on v1.0.2. Networking and CL peering are unchan [Full release notes](./versions/v1.1.1/release_notes.md) · [Documentation](./versions/v1.1.1/index.md) -## v1.0.2 - -**Docker Image:** `getoptimum/gateway:v1.0.2` - -Required upgrade that replaces all earlier releases. - -### Highlights - -* **API-key authentication.** Each gateway authenticates with an `ogw_live_...` key set via the `OPT_API_KEY` environment variable; the key drives `gateway_id`, `chain`, and validator scope (no per-network YAML). -* **More consensus clients.** Adds Nimbus and Lodestar alongside Prysm, Lighthouse, and Teku. -* **Lighthouse / PeerDAS compatibility.** Advertises a custody group count of 8 in libp2p metadata so PeerDAS-aware clients keep the gateway as a peer. -* **Health endpoints.** Structured `GET /health` (200/503 with `cl_peers`, `mump2p_peers`, `subscribed_topics`, `last_block_age_sec`, `cl_health`, `mump2p_health`) plus a lightweight `GET /` liveness probe. -* **Attestation subnet carry + metrics.** Subscribes to all 64 subnets and forwards partner-validator attestations over mump2p, with inclusion and propagation metrics. -* **Metric namespace.** Gateway metrics are now prefixed `mump2p_gateway_` (previously `optp2p_gateway_optimum_gateway_`) — update saved Prometheus/Grafana queries. -* **Simpler config + security hardening.** Removed `enable_aggregation`, the baked-in topic list, the sidecar port, and separate push credentials; bounded JWT lifetime and more frequent JWKS refresh. +## v1.0.2 (Deprecated) -[Full release notes](./versions/v1.0.2/release_notes.md) · [Documentation](./versions/v1.0.2/index.md) +**v1.0.2 is deprecated.** Docs for this release have been removed. Partners still on v1.0.2 should upgrade to **[v1.2.0](./versions/v1.2.0/release_notes.md)** (`getoptimum/gateway:v1.2.0`). v1.1.1 remains supported as a previous release. ## Important: Deprecated Versions -**The following versions are deprecated and no longer supported. Upgrade to v1.1.1.** +**The following versions are deprecated and no longer supported. Upgrade to v1.2.0.** | Version | Status | | ----------- | ---------- | +| v1.0.2 | DEPRECATED | | v0.0.1-rc1 | DEPRECATED | | v0.0.1-rc2 | DEPRECATED | | v0.0.1-rc3 | DEPRECATED | @@ -69,7 +69,7 @@ recreate the container: ```bash export OPT_API_KEY=ogw_live_xxx -docker pull getoptimum/gateway:v1.1.1 +docker pull getoptimum/gateway:v1.2.0 docker rm -f optimum-gateway docker run --name optimum-gateway --rm \ -p 33212:33212/tcp \ @@ -78,7 +78,7 @@ docker run --name optimum-gateway --rm \ -v $(pwd)/config:/app/config \ -v $(pwd)/data/libp2p:/tmp/libp2p \ -v $(pwd)/data/mump2p:/tmp/mump2p \ - getoptimum/gateway:v1.1.1 \ + getoptimum/gateway:v1.2.0 \ -config=/app/config/app_conf.yml ``` diff --git a/docs/public/block_stream.png b/docs/public/block_stream.png deleted file mode 100644 index 18dbced..0000000 Binary files a/docs/public/block_stream.png and /dev/null differ diff --git a/docs/sbom-full.json b/docs/sbom-full.json index 6c7298e..ec9e356 100644 --- a/docs/sbom-full.json +++ b/docs/sbom-full.json @@ -11793,18 +11793,18 @@ } }, { - "bom-ref": "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "bom-ref": "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "type": "library", "name": "golang.org/x/crypto", - "version": "v0.54.0", + "version": "v0.55.0", "scope": "required", "hashes": [ { "alg": "SHA-256", - "content": "60b200e7d2b87e23731f38e766ddad50942342d5167d66de1c1a8ab64dde49cc" + "content": "f8a5878db80e68043ae9d87f625919287973f59525abad40162ac047d9ed3fc3" } ], - "purl": "pkg:golang/golang.org/x/crypto@v0.54.0?goarch=amd64&goos=linux&type=module", + "purl": "pkg:golang/golang.org/x/crypto@v0.55.0?goarch=amd64&goos=linux&type=module", "evidence": { "licenses": [ { @@ -11862,18 +11862,18 @@ } }, { - "bom-ref": "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "bom-ref": "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "type": "library", "name": "golang.org/x/mod", - "version": "v0.37.0", + "version": "v0.38.0", "scope": "required", "hashes": [ { "alg": "SHA-256", - "content": "bc5d438e9544b21708aa811a6aeb8779b68b9353b57e8af18f105a567f3ce094" + "content": "3040818ee6ed5c3ef28f81eb84851ccb035a19e35551d7d59f198f6a33a4e329" } ], - "purl": "pkg:golang/golang.org/x/mod@v0.37.0?goarch=amd64&goos=linux&type=module", + "purl": "pkg:golang/golang.org/x/mod@v0.38.0?goarch=amd64&goos=linux&type=module", "evidence": { "licenses": [ { @@ -11977,18 +11977,18 @@ } }, { - "bom-ref": "pkg:golang/golang.org/x/telemetry@v0.0.0-20260625142307-59b4966ccb57?type=module", + "bom-ref": "pkg:golang/golang.org/x/telemetry@v0.0.0-20260708182218-49f421fb7959?type=module", "type": "library", "name": "golang.org/x/telemetry", - "version": "v0.0.0-20260625142307-59b4966ccb57", + "version": "v0.0.0-20260708182218-49f421fb7959", "scope": "required", "hashes": [ { "alg": "SHA-256", - "content": "9f0199042b7e1675d4ac6b23e6f8f302c12691c685bddf3605b3a31028856197" + "content": "449866e65e85a38ae61087277710e594d8617ff7c0c7ca889b8b7a03bbe99b60" } ], - "purl": "pkg:golang/golang.org/x/telemetry@v0.0.0-20260625142307-59b4966ccb57?goarch=amd64&goos=linux&type=module", + "purl": "pkg:golang/golang.org/x/telemetry@v0.0.0-20260708182218-49f421fb7959?goarch=amd64&goos=linux&type=module", "evidence": { "licenses": [ { @@ -12023,18 +12023,18 @@ } }, { - "bom-ref": "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "bom-ref": "pkg:golang/golang.org/x/text@v0.41.0?type=module", "type": "library", "name": "golang.org/x/text", - "version": "v0.40.0", + "version": "v0.41.0", "scope": "required", "hashes": [ { "alg": "SHA-256", - "content": "51bd99ebfc63805d56ad8433da7b884ce11e80a16d888cbeae279127994764ab" + "content": "bf3fec780d259d7f3b3ad86ed9fff42f6e11720ad70fdfd81534ae1a38f7ac7f" } ], - "purl": "pkg:golang/golang.org/x/text@v0.40.0?goarch=amd64&goos=linux&type=module", + "purl": "pkg:golang/golang.org/x/text@v0.41.0?goarch=amd64&goos=linux&type=module", "evidence": { "licenses": [ { @@ -12069,18 +12069,18 @@ } }, { - "bom-ref": "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "bom-ref": "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "type": "library", "name": "golang.org/x/tools", - "version": "v0.47.0", + "version": "v0.48.0", "scope": "required", "hashes": [ { "alg": "SHA-256", - "content": "eca9f9c7f775b2fc7f3f3af24eca9ea193784d9c2a787e691968de7e12e2ff54" + "content": "dfe84294cd5a2cbe668cc2a6e68be8930f5ea604573eebb6b482e08ac98ce911" } ], - "purl": "pkg:golang/golang.org/x/tools@v0.47.0?goarch=amd64&goos=linux&type=module", + "purl": "pkg:golang/golang.org/x/tools@v0.48.0?goarch=amd64&goos=linux&type=module", "evidence": { "licenses": [ { @@ -12719,17 +12719,17 @@ { "ref": "pkg:golang/4d63.com/gocheckcompilerdirectives@v1.3.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/4d63.com/gochecknoglobals@v0.2.2?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -12809,7 +12809,7 @@ "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -12840,7 +12840,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -12861,7 +12861,7 @@ "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -12925,12 +12925,12 @@ "pkg:golang/go.opentelemetry.io/otel@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/metric@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/trace@v1.43.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", @@ -12968,9 +12968,9 @@ { "ref": "pkg:golang/codeberg.org/polyfloyd/go-errorlint@v1.9.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13006,9 +13006,9 @@ "pkg:golang/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -13035,7 +13035,7 @@ "ref": "pkg:golang/filippo.io/keygen@v0.0.0-20260114151900-8e2790ea4c5b?type=module", "dependsOn": [ "pkg:golang/filippo.io/bigmod@v0.1.1-0.20260103110540-f8a47775ebe5?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module" ] }, @@ -13046,58 +13046,58 @@ "pkg:golang/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/Abirdcfly/dupword@v0.1.7?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/AdminBenni/iota-mixing@v1.0.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/AlwxSin/noinlineerr@v1.0.5?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/Antonboom/errname@v1.1.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/Antonboom/nilnil@v1.1.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/Antonboom/testifylint@v1.6.4?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13108,7 +13108,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -13125,10 +13125,10 @@ "pkg:golang/github.com/pkg/browser@v0.0.0-20240102092130-5ac0b6a4141c?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -13146,10 +13146,10 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/rogpeppe/go-internal@v1.14.1?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -13171,17 +13171,17 @@ "ref": "pkg:golang/github.com/ClickHouse/clickhouse-go-linter@v1.2.0?type=module", "dependsOn": [ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/Djarvur/go-err113@v0.1.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13205,9 +13205,9 @@ "ref": "pkg:golang/github.com/Microsoft/go-winio@v0.6.2?type=module", "dependsOn": [ "pkg:golang/github.com/sirupsen/logrus@v1.9.4?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13223,11 +13223,11 @@ "pkg:golang/github.com/rivo/uniseg@v0.4.7?type=module", "pkg:golang/github.com/xo/terminfo@v0.0.0-20220910002029-abceb7e1c41e?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -13237,9 +13237,9 @@ "pkg:golang/github.com/BurntSushi/toml@v1.6.0?type=module", "pkg:golang/github.com/gobwas/glob@v0.2.3?type=module", "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -13254,9 +13254,9 @@ "ref": "pkg:golang/github.com/alecthomas/go-check-sumtype@v0.3.1?type=module", "dependsOn": [ "pkg:golang/github.com/hexops/gotextdiff@v1.0.3?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13268,18 +13268,18 @@ { "ref": "pkg:golang/github.com/alexkohler/nakedret/v2@v2.0.6?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/alexkohler/prealloc@v1.1.0?type=module", "dependsOn": [ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13288,17 +13288,17 @@ { "ref": "pkg:golang/github.com/alingse/asasalint@v0.0.11?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/alingse/nilnesserr@v0.2.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13318,18 +13318,18 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/ashanbrown/makezero/v2@v2.2.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13465,24 +13465,24 @@ { "ref": "pkg:golang/github.com/bkielbasa/cyclop@v1.2.3?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/blizzy78/varnamelen@v0.8.0?type=module", "dependsOn": [ "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/bombsimon/wsl/v4@v4.7.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13492,26 +13492,26 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/breml/bidichk@v0.3.3?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/breml/errchkjson@v0.4.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13595,15 +13595,15 @@ "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -13649,26 +13649,26 @@ "pkg:golang/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/butuzov/mirror@v1.3.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/catenacyber/perfsprint@v0.10.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13686,7 +13686,7 @@ { "ref": "pkg:golang/github.com/charithe/durationcheck@v0.0.11?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13752,11 +13752,11 @@ "ref": "pkg:golang/github.com/ckaznocha/intrange@v0.3.1?type=module", "dependsOn": [ "pkg:golang/github.com/hashicorp/go-version@v1.9.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13797,9 +13797,9 @@ { "ref": "pkg:golang/github.com/curioswitch/go-reassign@v0.3.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13815,18 +13815,18 @@ "pkg:golang/go.uber.org/atomic@v1.11.0?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/dave/dst@v0.27.3?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -13835,7 +13835,7 @@ { "ref": "pkg:golang/github.com/davidlazar/go-crypto@v0.0.0-20200604182044-b73af7476f6c?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module" ] }, @@ -13923,15 +13923,15 @@ { "ref": "pkg:golang/github.com/firefart/nonamedreturns@v1.0.6?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/flynn/noise@v1.1.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module" + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module" ] }, { @@ -14227,19 +14227,19 @@ "pkg:golang/go.uber.org/zap@v1.28.0?type=module", "pkg:golang/go.yaml.in/yaml/v2@v2.4.4?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/exp/typeparams@v0.0.0-20260209203927-2842357ff358?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/telemetry@v0.0.0-20260625142307-59b4966ccb57?type=module", + "pkg:golang/golang.org/x/telemetry@v0.0.0-20260708182218-49f421fb7959?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/google.golang.org/api@v0.272.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", @@ -14379,16 +14379,16 @@ "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", "pkg:golang/go.yaml.in/yaml/v2@v2.4.4?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/telemetry@v0.0.0-20260625142307-59b4966ccb57?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/telemetry@v0.0.0-20260708182218-49f421fb7959?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gonum.org/v1/gonum@v0.17.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", @@ -14403,7 +14403,7 @@ "dependsOn": [ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module" @@ -14413,9 +14413,9 @@ "ref": "pkg:golang/github.com/ghostiam/protogetter@v0.3.20?type=module", "dependsOn": [ "pkg:golang/github.com/gobwas/glob@v0.2.3?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -14435,9 +14435,9 @@ "pkg:golang/github.com/quasilyte/regex/syntax@v0.0.0-20210819130434-b3f0c404a727?type=module", "pkg:golang/github.com/quasilyte/stdinfo@v0.0.0-20220114132959-f7386bf02567?type=module", "pkg:golang/golang.org/x/exp/typeparams@v0.0.0-20260209203927-2842357ff358?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -14507,9 +14507,9 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -14532,10 +14532,10 @@ "pkg:golang/github.com/valyala/bytebufferpool@v1.0.0?type=module", "pkg:golang/github.com/valyala/fasthttp@v1.72.0?type=module", "pkg:golang/github.com/x448/float16@v0.8.4?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -14572,7 +14572,7 @@ "ref": "pkg:golang/github.com/gogo/protobuf@v1.3.2?type=module", "dependsOn": [ "pkg:golang/github.com/kisielk/errcheck@v1.10.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -14584,9 +14584,9 @@ { "ref": "pkg:golang/github.com/golangci/asciicheck@v0.5.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -14595,18 +14595,18 @@ { "ref": "pkg:golang/github.com/golangci/go-printf-func-name@v0.1.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/golangci/gofmt@v0.0.0-20250106114630-d62b90e6713d?type=module", "dependsOn": [ "pkg:golang/github.com/rogpeppe/go-internal@v1.14.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -14807,11 +14807,11 @@ "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/exp/typeparams@v0.0.0-20260209203927-2842357ff358?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v2@v2.4.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", @@ -14831,11 +14831,11 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/rogpeppe/go-internal@v1.14.1?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -14848,7 +14848,7 @@ { "ref": "pkg:golang/github.com/golangci/plugin-module-register@v0.1.2?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -14857,9 +14857,9 @@ { "ref": "pkg:golang/github.com/golangci/rowserrcheck@v0.0.0-20260419091836-c5f79b8a11ba?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -14868,19 +14868,19 @@ "pkg:golang/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/golangci/unconvert@v0.0.0-20250410112200-a129a6e6413e?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -14891,7 +14891,7 @@ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module" @@ -14935,11 +14935,11 @@ "pkg:golang/go.opentelemetry.io/otel/metric@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/trace@v1.43.0?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -14965,12 +14965,12 @@ "pkg:golang/go.opentelemetry.io/otel@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/metric@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/trace@v1.43.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/api@v0.272.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", @@ -14985,7 +14985,7 @@ { "ref": "pkg:golang/github.com/googleapis/enterprise-certificate-proxy@v0.3.14?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module" ] }, @@ -14995,7 +14995,7 @@ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/api@v0.272.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", @@ -15006,9 +15006,9 @@ { "ref": "pkg:golang/github.com/gordonklaus/ineffassign@v0.2.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -15021,7 +15021,7 @@ "ref": "pkg:golang/github.com/gostaticanalysis/analysisutil@v0.7.1?type=module", "dependsOn": [ "pkg:golang/github.com/gostaticanalysis/comment@v1.5.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -15029,28 +15029,28 @@ "dependsOn": [ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", "pkg:golang/github.com/hashicorp/go-version@v1.9.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/gostaticanalysis/forcetypeassert@v0.2.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/gostaticanalysis/nilerr@v0.1.2?type=module", "dependsOn": [ "pkg:golang/github.com/gostaticanalysis/comment@v1.5.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -15190,15 +15190,15 @@ "pkg:golang/go.uber.org/mock@v0.5.2?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gonum.org/v1/gonum@v0.17.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", @@ -15220,7 +15220,7 @@ "pkg:golang/github.com/multiformats/go-multihash@v0.2.3?type=module", "pkg:golang/github.com/multiformats/go-varint@v0.1.0?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/lukechampine.com/blake3@v1.4.1?type=module" ] @@ -15274,7 +15274,7 @@ "pkg:golang/github.com/polydawn/refmt@v0.89.1-0.20221221234430-40501e09de1f?type=module", "pkg:golang/github.com/rogpeppe/go-internal@v1.14.1?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v2@v2.4.0?type=module", "pkg:golang/lukechampine.com/blake3@v1.4.1?type=module" @@ -15295,9 +15295,9 @@ { "ref": "pkg:golang/github.com/jjti/go-spancheck@v0.6.5?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -15315,25 +15315,25 @@ { "ref": "pkg:golang/github.com/julz/importas@v0.2.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/karamaru-alpha/copyloopvar@v1.2.2?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/kisielk/errcheck@v1.10.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -15341,9 +15341,9 @@ "dependsOn": [ "pkg:golang/github.com/gostaticanalysis/analysisutil@v0.7.1?type=module", "pkg:golang/github.com/gostaticanalysis/comment@v1.5.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -15392,17 +15392,17 @@ { "ref": "pkg:golang/github.com/kulti/thelper@v0.7.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/kunwardeep/paralleltest@v1.0.15?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -15415,18 +15415,18 @@ "pkg:golang/github.com/go-toolsmith/astcast@v1.1.0?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/ldez/exptostd@v0.4.5?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -15436,8 +15436,8 @@ "pkg:golang/github.com/ldez/grignotin@v0.10.1?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -15447,7 +15447,7 @@ "pkg:golang/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -15467,24 +15467,24 @@ "pkg:golang/github.com/ettle/strcase@v0.2.0?type=module", "pkg:golang/github.com/hashicorp/go-immutable-radix/v2@v2.1.0?type=module", "pkg:golang/github.com/hashicorp/golang-lru/v2@v2.0.7?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/ldez/usetesting@v0.5.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/leonklingele/grouper@v1.1.2?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -15584,16 +15584,16 @@ "pkg:golang/go.uber.org/mock@v0.5.2?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/telemetry@v0.0.0-20260625142307-59b4966ccb57?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/telemetry@v0.0.0-20260708182218-49f421fb7959?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", "pkg:golang/lukechampine.com/blake3@v1.4.1?type=module" @@ -15707,14 +15707,14 @@ "pkg:golang/go.uber.org/mock@v0.5.2?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gonum.org/v1/gonum@v0.17.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", @@ -15751,7 +15751,7 @@ "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -15787,7 +15787,7 @@ "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -15874,15 +15874,15 @@ "pkg:golang/go.uber.org/mock@v0.5.2?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", "pkg:golang/lukechampine.com/blake3@v1.4.1?type=module" @@ -15906,7 +15906,7 @@ "pkg:golang/github.com/multiformats/go-multihash@v0.2.3?type=module", "pkg:golang/github.com/multiformats/go-varint@v0.1.0?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -15945,7 +15945,7 @@ "pkg:golang/go.opentelemetry.io/otel/trace@v1.43.0?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -16012,41 +16012,41 @@ { "ref": "pkg:golang/github.com/macabu/inamedparam@v0.2.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/manuelarte/embeddedstructfieldcheck@v0.4.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/manuelarte/funcorder@v0.6.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/maratori/testableexamples@v1.0.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/maratori/testpackage@v1.1.2?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -16092,22 +16092,22 @@ "pkg:golang/github.com/mattn/go-isatty@v0.0.22?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/spf13/afero@v1.15.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/miekg/dns@v1.1.72?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -16195,9 +16195,9 @@ "dependsOn": [ "pkg:golang/github.com/gostaticanalysis/analysisutil@v0.7.1?type=module", "pkg:golang/github.com/gostaticanalysis/comment@v1.5.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -16231,7 +16231,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", @@ -16253,7 +16253,7 @@ "pkg:golang/github.com/multiformats/go-multihash@v0.2.3?type=module", "pkg:golang/github.com/multiformats/go-varint@v0.1.0?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", @@ -16285,7 +16285,7 @@ "pkg:golang/github.com/mr-tron/base58@v1.3.0?type=module", "pkg:golang/github.com/multiformats/go-varint@v0.1.0?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/lukechampine.com/blake3@v1.4.1?type=module" ] @@ -16315,15 +16315,15 @@ { "ref": "pkg:golang/github.com/nishanths/exhaustive@v0.12.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/nishanths/predeclared@v0.2.2?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -16332,10 +16332,10 @@ "pkg:golang/github.com/go-toolsmith/astcopy@v1.1.0?type=module", "pkg:golang/github.com/rogpeppe/go-internal@v1.14.1?type=module", "pkg:golang/golang.org/x/exp/typeparams@v0.0.0-20260209203927-2842357ff358?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -16420,7 +16420,7 @@ "pkg:golang/go.uber.org/zap@v1.28.0?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -16472,7 +16472,7 @@ "pkg:golang/github.com/pion/transport/v4@v4.0.1?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" @@ -16493,7 +16493,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/github.com/wlynxg/anet@v0.0.5?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" @@ -16600,7 +16600,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/github.com/wlynxg/anet@v0.0.5?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] @@ -16644,7 +16644,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/github.com/wlynxg/anet@v0.0.5?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] @@ -16672,7 +16672,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/github.com/wlynxg/anet@v0.0.5?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" @@ -16714,7 +16714,7 @@ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module" ] }, @@ -16757,7 +16757,7 @@ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] @@ -16892,17 +16892,17 @@ "pkg:golang/go.uber.org/zap@v1.28.0?type=module", "pkg:golang/go.yaml.in/yaml/v2@v2.4.4?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/google.golang.org/api@v0.272.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", @@ -16957,7 +16957,7 @@ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v2@v2.4.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" @@ -16976,9 +16976,9 @@ "pkg:golang/github.com/quasilyte/gogrep@v0.5.0?type=module", "pkg:golang/github.com/quasilyte/stdinfo@v0.0.0-20220114132959-f7386bf02567?type=module", "pkg:golang/golang.org/x/exp/typeparams@v0.0.0-20260209203927-2842357ff358?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17017,13 +17017,13 @@ "pkg:golang/github.com/rogpeppe/go-internal@v1.14.1?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/go.uber.org/mock@v0.5.2?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -17036,20 +17036,20 @@ "pkg:golang/github.com/quic-go/qpack@v0.6.0?type=module", "pkg:golang/github.com/quic-go/quic-go@v0.60.0?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/raeperd/recvcheck@v0.2.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17058,9 +17058,9 @@ { "ref": "pkg:golang/github.com/rogpeppe/go-internal@v1.14.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17077,7 +17077,7 @@ "pkg:golang/github.com/mitchellh/go-homedir@v1.1.0?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -17088,56 +17088,56 @@ "pkg:golang/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/ryanrolds/sqlclosecheck@v0.6.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/sagikazarmark/locafero@v0.12.0?type=module", "dependsOn": [ "pkg:golang/github.com/spf13/afero@v1.15.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module" ] }, { "ref": "pkg:golang/github.com/sanposhiho/wastedassign/v2@v2.1.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/santhosh-tekuri/jsonschema/v6@v6.0.2?type=module", "dependsOn": [ "pkg:golang/github.com/dlclark/regexp2@v1.12.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module" ] }, { "ref": "pkg:golang/github.com/sashamelentyev/interfacebloat@v1.1.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/sashamelentyev/usestdlibvars@v1.29.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17170,13 +17170,13 @@ "pkg:golang/go.opentelemetry.io/otel/metric@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/trace@v1.43.0?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -17210,10 +17210,10 @@ "ref": "pkg:golang/github.com/sivchari/containedctx@v1.0.3?type=module", "dependsOn": [ "pkg:golang/github.com/hashicorp/go-version@v1.9.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17221,9 +17221,9 @@ "dependsOn": [ "pkg:golang/github.com/gostaticanalysis/analysisutil@v0.7.1?type=module", "pkg:golang/github.com/gostaticanalysis/comment@v1.5.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17238,7 +17238,7 @@ { "ref": "pkg:golang/github.com/spf13/afero@v1.15.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/text@v0.40.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module" ] }, { @@ -17277,22 +17277,22 @@ "pkg:golang/github.com/subosito/gotenv@v1.6.0?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, { "ref": "pkg:golang/github.com/ssgreg/nlreturn/v2@v2.2.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/stbenjam/no-sprintf-host-port@v0.3.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17319,7 +17319,7 @@ "pkg:golang/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -17342,7 +17342,7 @@ "ref": "pkg:golang/github.com/timakin/bodyclose@v0.0.0-20260129054331-73d1f95b84b4?type=module", "dependsOn": [ "pkg:golang/github.com/gostaticanalysis/analysisutil@v0.7.1?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17351,9 +17351,9 @@ "pkg:golang/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -17361,8 +17361,8 @@ "ref": "pkg:golang/github.com/tinylib/msgp@v1.6.4?type=module", "dependsOn": [ "pkg:golang/github.com/philhofer/fwd@v1.2.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17380,11 +17380,11 @@ "pkg:golang/github.com/spf13/viper@v1.21.0?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/github.com/subosito/gotenv@v1.6.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v2@v2.4.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] @@ -17394,39 +17394,39 @@ "dependsOn": [ "pkg:golang/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/ultraware/funlen@v0.2.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/ultraware/whitespace@v0.2.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/uudashr/gocognit@v1.2.1?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/github.com/uudashr/iface@v1.4.2?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17438,10 +17438,10 @@ "pkg:golang/github.com/andybalholm/brotli@v1.2.2?type=module", "pkg:golang/github.com/klauspost/compress@v1.19.1?type=module", "pkg:golang/github.com/valyala/bytebufferpool@v1.0.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module" ] }, { @@ -17456,10 +17456,10 @@ { "ref": "pkg:golang/github.com/xen0n/gosmopolitan@v1.3.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17471,9 +17471,9 @@ { "ref": "pkg:golang/github.com/yagipy/maintidx@v1.0.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17500,51 +17500,51 @@ "dependsOn": [ "pkg:golang/github.com/gostaticanalysis/comment@v1.5.0?type=module", "pkg:golang/github.com/hashicorp/go-version@v1.9.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/gitlab.com/bosi/decorder@v0.4.2?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/go-simpler.org/musttag@v0.14.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/go-simpler.org/sloglint@v0.12.0?type=module", "dependsOn": [ "pkg:golang/github.com/ettle/strcase@v0.2.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/go.augendre.info/arangolint@v0.4.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/go.augendre.info/fatcontext@v0.9.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -17725,7 +17725,7 @@ "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -17896,9 +17896,9 @@ "pkg:golang/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -17930,39 +17930,39 @@ "ref": "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module" }, { - "ref": "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "ref": "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "dependsOn": [ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module" ] }, { "ref": "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "dependsOn": [ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/golang.org/x/exp/typeparams@v0.0.0-20260209203927-2842357ff358?type=module" }, { - "ref": "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "ref": "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/golang.org/x/net@v0.57.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module" ] }, { @@ -17978,9 +17978,9 @@ "ref": "pkg:golang/golang.org/x/sys@v0.47.0?type=module" }, { - "ref": "pkg:golang/golang.org/x/telemetry@v0.0.0-20260625142307-59b4966ccb57?type=module", + "ref": "pkg:golang/golang.org/x/telemetry@v0.0.0-20260708182218-49f421fb7959?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module" ] @@ -17992,25 +17992,25 @@ ] }, { - "ref": "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "ref": "pkg:golang/golang.org/x/text@v0.41.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/golang.org/x/time@v0.15.0?type=module" }, { - "ref": "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "ref": "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "dependsOn": [ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/telemetry@v0.0.0-20260625142307-59b4966ccb57?type=module" + "pkg:golang/golang.org/x/telemetry@v0.0.0-20260708182218-49f421fb7959?type=module" ] }, { @@ -18018,10 +18018,10 @@ "dependsOn": [ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -18044,12 +18044,12 @@ "pkg:golang/go.opentelemetry.io/otel@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/metric@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/trace@v1.43.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", @@ -18061,7 +18061,7 @@ "dependsOn": [ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module" @@ -18091,7 +18091,7 @@ "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gonum.org/v1/gonum@v0.17.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/api@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", @@ -18103,7 +18103,7 @@ "dependsOn": [ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module" @@ -18130,10 +18130,10 @@ "pkg:golang/github.com/BurntSushi/toml@v1.6.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/exp/typeparams@v0.0.0-20260209203927-2842357ff358?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { @@ -18155,7 +18155,7 @@ "pkg:golang/go.yaml.in/yaml/v2@v2.4.4?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/inf.v0@v0.9.1?type=module", @@ -18195,7 +18195,7 @@ "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/inf.v0@v0.9.1?type=module", @@ -18233,12 +18233,12 @@ "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/go.yaml.in/yaml/v2@v2.4.4?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", + "pkg:golang/golang.org/x/tools@v0.48.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", "pkg:golang/k8s.io/klog/v2@v2.140.0?type=module", @@ -18268,30 +18268,30 @@ "dependsOn": [ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", "pkg:golang/github.com/rogpeppe/go-internal@v1.14.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/mvdan.cc/unparam@v0.0.0-20251027182757-5beb8c8f8f15?type=module", "dependsOn": [ "pkg:golang/github.com/rogpeppe/go-internal@v1.14.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { "ref": "pkg:golang/mvdan.cc/xurls/v2@v2.6.0?type=module", "dependsOn": [ "pkg:golang/github.com/rogpeppe/go-internal@v1.14.1?type=module", - "pkg:golang/golang.org/x/mod@v0.37.0?type=module", + "pkg:golang/golang.org/x/mod@v0.38.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/tools@v0.47.0?type=module" + "pkg:golang/golang.org/x/tools@v0.48.0?type=module" ] }, { diff --git a/docs/sbom.json b/docs/sbom.json index 26443a3..a046dd6 100644 --- a/docs/sbom.json +++ b/docs/sbom.json @@ -5520,18 +5520,18 @@ } }, { - "bom-ref": "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "bom-ref": "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "type": "library", "name": "golang.org/x/crypto", - "version": "v0.54.0", + "version": "v0.55.0", "scope": "required", "hashes": [ { "alg": "SHA-256", - "content": "60b200e7d2b87e23731f38e766ddad50942342d5167d66de1c1a8ab64dde49cc" + "content": "f8a5878db80e68043ae9d87f625919287973f59525abad40162ac047d9ed3fc3" } ], - "purl": "pkg:golang/golang.org/x/crypto@v0.54.0?goarch=amd64&goos=linux&type=module", + "purl": "pkg:golang/golang.org/x/crypto@v0.55.0?goarch=amd64&goos=linux&type=module", "evidence": { "licenses": [ { @@ -5681,18 +5681,18 @@ } }, { - "bom-ref": "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "bom-ref": "pkg:golang/golang.org/x/text@v0.41.0?type=module", "type": "library", "name": "golang.org/x/text", - "version": "v0.40.0", + "version": "v0.41.0", "scope": "required", "hashes": [ { "alg": "SHA-256", - "content": "51bd99ebfc63805d56ad8433da7b884ce11e80a16d888cbeae279127994764ab" + "content": "bf3fec780d259d7f3b3ad86ed9fff42f6e11720ad70fdfd81534ae1a38f7ac7f" } ], - "purl": "pkg:golang/golang.org/x/text@v0.40.0?goarch=amd64&goos=linux&type=module", + "purl": "pkg:golang/golang.org/x/text@v0.41.0?goarch=amd64&goos=linux&type=module", "evidence": { "licenses": [ { @@ -6208,12 +6208,12 @@ "pkg:golang/go.opentelemetry.io/otel@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/metric@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/trace@v1.43.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", @@ -6252,7 +6252,7 @@ "ref": "pkg:golang/filippo.io/keygen@v0.0.0-20260114151900-8e2790ea4c5b?type=module", "dependsOn": [ "pkg:golang/filippo.io/bigmod@v0.1.1-0.20260103110540-f8a47775ebe5?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module" ] }, @@ -6264,7 +6264,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -6281,10 +6281,10 @@ "pkg:golang/github.com/pkg/browser@v0.0.0-20240102092130-5ac0b6a4141c?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -6301,10 +6301,10 @@ "pkg:golang/github.com/pkg/browser@v0.0.0-20240102092130-5ac0b6a4141c?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -6481,7 +6481,7 @@ { "ref": "pkg:golang/github.com/davidlazar/go-crypto@v0.0.0-20200604182044-b73af7476f6c?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module" ] }, @@ -6518,7 +6518,7 @@ { "ref": "pkg:golang/github.com/flynn/noise@v1.1.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module" + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module" ] }, { @@ -6615,14 +6615,14 @@ "pkg:golang/go.uber.org/zap@v1.28.0?type=module", "pkg:golang/go.yaml.in/yaml/v2@v2.4.4?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/api@v0.272.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", @@ -6745,12 +6745,12 @@ "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", "pkg:golang/go.yaml.in/yaml/v2@v2.4.4?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/gonum.org/v1/gonum@v0.17.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", @@ -6766,7 +6766,7 @@ "dependsOn": [ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module" @@ -6806,10 +6806,10 @@ "pkg:golang/github.com/valyala/bytebufferpool@v1.0.0?type=module", "pkg:golang/github.com/valyala/fasthttp@v1.72.0?type=module", "pkg:golang/github.com/x448/float16@v0.8.4?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -6867,12 +6867,12 @@ "pkg:golang/go.opentelemetry.io/otel@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/metric@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/trace@v1.43.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/api@v0.272.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", @@ -6886,7 +6886,7 @@ { "ref": "pkg:golang/github.com/googleapis/enterprise-certificate-proxy@v0.3.14?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module" ] }, @@ -6896,7 +6896,7 @@ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/api@v0.272.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", @@ -7030,13 +7030,13 @@ "pkg:golang/go.uber.org/fx@v1.24.0?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gonum.org/v1/gonum@v0.17.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", @@ -7057,7 +7057,7 @@ "pkg:golang/github.com/multiformats/go-multihash@v0.2.3?type=module", "pkg:golang/github.com/multiformats/go-varint@v0.1.0?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/lukechampine.com/blake3@v1.4.1?type=module" ] @@ -7109,7 +7109,7 @@ "pkg:golang/github.com/multiformats/go-varint@v0.1.0?type=module", "pkg:golang/github.com/polydawn/refmt@v0.89.1-0.20221221234430-40501e09de1f?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v2@v2.4.0?type=module", "pkg:golang/lukechampine.com/blake3@v1.4.1?type=module" @@ -7272,12 +7272,12 @@ "pkg:golang/go.uber.org/goleak@v1.3.0?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", @@ -7390,12 +7390,12 @@ "pkg:golang/go.uber.org/fx@v1.24.0?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gonum.org/v1/gonum@v0.17.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", @@ -7431,7 +7431,7 @@ "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -7466,7 +7466,7 @@ "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -7552,12 +7552,12 @@ "pkg:golang/go.uber.org/fx@v1.24.0?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", @@ -7582,7 +7582,7 @@ "pkg:golang/github.com/multiformats/go-multihash@v0.2.3?type=module", "pkg:golang/github.com/multiformats/go-varint@v0.1.0?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -7620,7 +7620,7 @@ "pkg:golang/go.opentelemetry.io/otel/trace@v1.43.0?type=module", "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/go.uber.org/zap@v1.28.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -7769,7 +7769,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", @@ -7791,7 +7791,7 @@ "pkg:golang/github.com/multiformats/go-multihash@v0.2.3?type=module", "pkg:golang/github.com/multiformats/go-varint@v0.1.0?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", @@ -7823,7 +7823,7 @@ "pkg:golang/github.com/mr-tron/base58@v1.3.0?type=module", "pkg:golang/github.com/multiformats/go-varint@v0.1.0?type=module", "pkg:golang/github.com/spaolacci/murmur3@v1.1.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/lukechampine.com/blake3@v1.4.1?type=module" ] @@ -7961,7 +7961,7 @@ "pkg:golang/github.com/pion/transport/v4@v4.0.1?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" @@ -7982,7 +7982,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/github.com/wlynxg/anet@v0.0.5?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" @@ -8089,7 +8089,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/github.com/wlynxg/anet@v0.0.5?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] @@ -8133,7 +8133,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/github.com/wlynxg/anet@v0.0.5?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] @@ -8161,7 +8161,7 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", "pkg:golang/github.com/wlynxg/anet@v0.0.5?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" @@ -8203,7 +8203,7 @@ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module" ] }, @@ -8246,7 +8246,7 @@ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] @@ -8365,14 +8365,14 @@ "pkg:golang/go.uber.org/zap@v1.28.0?type=module", "pkg:golang/go.yaml.in/yaml/v2@v2.4.4?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/exp@v0.0.0-20260508232706-74f9aab9d74a?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/api@v0.272.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", @@ -8427,7 +8427,7 @@ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v2@v2.4.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" @@ -8453,11 +8453,11 @@ "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/github.com/quic-go/qpack@v0.6.0?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -8470,11 +8470,11 @@ "pkg:golang/github.com/quic-go/qpack@v0.6.0?type=module", "pkg:golang/github.com/quic-go/quic-go@v0.60.0?type=module", "pkg:golang/github.com/stretchr/testify@v1.11.1?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module" ] }, @@ -8504,10 +8504,10 @@ "pkg:golang/github.com/andybalholm/brotli@v1.2.2?type=module", "pkg:golang/github.com/klauspost/compress@v1.19.1?type=module", "pkg:golang/github.com/valyala/bytebufferpool@v1.0.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module" ] }, { @@ -8662,7 +8662,7 @@ "pkg:golang/go.uber.org/multierr@v1.11.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", @@ -8855,12 +8855,12 @@ "ref": "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module" }, { - "ref": "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "ref": "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "dependsOn": [ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module" ] }, { @@ -8873,10 +8873,10 @@ { "ref": "pkg:golang/golang.org/x/net@v0.57.0?type=module", "dependsOn": [ - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module" ] }, { @@ -8898,7 +8898,7 @@ ] }, { - "ref": "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "ref": "pkg:golang/golang.org/x/text@v0.41.0?type=module", "dependsOn": [ "pkg:golang/golang.org/x/sync@v0.22.0?type=module" ] @@ -8912,7 +8912,7 @@ "pkg:golang/github.com/google/go-cmp@v0.7.0?type=module", "pkg:golang/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module" + "pkg:golang/golang.org/x/text@v0.41.0?type=module" ] }, { @@ -8935,12 +8935,12 @@ "pkg:golang/go.opentelemetry.io/otel@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/metric@v1.43.0?type=module", "pkg:golang/go.opentelemetry.io/otel/trace@v1.43.0?type=module", - "pkg:golang/golang.org/x/crypto@v0.54.0?type=module", + "pkg:golang/golang.org/x/crypto@v0.55.0?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/grpc@v1.82.1?type=module", @@ -8970,7 +8970,7 @@ "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/gonum.org/v1/gonum@v0.17.0?type=module", "pkg:golang/google.golang.org/genproto/googleapis/rpc@v0.0.0-20260523011958-0a33c5d7ca68?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module" @@ -9008,7 +9008,7 @@ "pkg:golang/go.yaml.in/yaml/v2@v2.4.4?type=module", "pkg:golang/go.yaml.in/yaml/v3@v3.0.4?type=module", "pkg:golang/golang.org/x/net@v0.57.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/inf.v0@v0.9.1?type=module", @@ -9045,7 +9045,7 @@ "pkg:golang/golang.org/x/oauth2@v0.36.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", "pkg:golang/golang.org/x/term@v0.45.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/golang.org/x/time@v0.15.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/inf.v0@v0.9.1?type=module", @@ -9084,7 +9084,7 @@ "pkg:golang/golang.org/x/net@v0.57.0?type=module", "pkg:golang/golang.org/x/sync@v0.22.0?type=module", "pkg:golang/golang.org/x/sys@v0.47.0?type=module", - "pkg:golang/golang.org/x/text@v0.40.0?type=module", + "pkg:golang/golang.org/x/text@v0.41.0?type=module", "pkg:golang/google.golang.org/protobuf@v1.36.11?type=module", "pkg:golang/gopkg.in/yaml.v3@v3.0.1?type=module", "pkg:golang/k8s.io/klog/v2@v2.140.0?type=module", diff --git a/docs/versions/latest b/docs/versions/latest index 9cb4db9..0408c30 120000 --- a/docs/versions/latest +++ b/docs/versions/latest @@ -1 +1 @@ -v1.1.1 \ No newline at end of file +v1.2.0 \ No newline at end of file diff --git a/docs/versions/v1.0.2/release_notes.md b/docs/versions/v1.0.2/release_notes.md deleted file mode 100644 index 29c3544..0000000 --- a/docs/versions/v1.0.2/release_notes.md +++ /dev/null @@ -1,36 +0,0 @@ -# v1.0.2 - -> **Mandatory upgrade.** v1.0.2 is a **required** upgrade for all partners. It **replaces** all earlier releases — it does not supersede them side by side. Previous release candidates (rc11, rc12) are **no longer supported**. Move to v1.0.2 as soon as you have your API key. - -## Highlights - -* **API key authentication & onboarding.** Each gateway authenticates with an API key (`ogw_live_...`) generated in the [Optimum Partner Console](https://console.getoptimum.io/). Access is invite-only — the Optimum team onboards you first, then you sign in and generate a key. The key drives your `gateway_id`, `chain`, and validator scope, so there is no per-network YAML. **Set the key via the `OPT_API_KEY` environment variable, not in YAML.** Use a **separate key per gateway**. See [Quick Start -> Generate your API key](01_quick_start.md#generate-your-api-key). -* **Nimbus and Lodestar support.** Both consensus clients are now supported alongside Prysm, Lighthouse, and Teku. -* **Better Lighthouse / PeerDAS compatibility.** The gateway advertises a **custody group count of 8** (Fulu `VALIDATOR_CUSTODY_REQUIREMENT`) in its libp2p metadata so PeerDAS-aware clients keep the gateway as a useful peer. See the [Fulu p2p metadata spec](https://github.com/ethereum/consensus-specs/blob/master/specs/fulu/p2p-interface.md#metadata). -* **Improved health endpoints.** `GET /health` returns structured checks — `cl_peers`, `mump2p_peers`, `subscribed_topics`, `last_block_age_sec`, `cl_health`, `mump2p_health` — with 200/503 status. A new lightweight liveness endpoint `GET /` returns `{"status":"ok"}` for simple probes. -* **Attestation subnet carry + performance metrics.** The gateway subscribes to all 64 attestation subnets and forwards your partner validators' attestations across mump2p, with metrics for inclusion rate, packing, inclusion delay, and end-to-end propagation latency. -* **New metric namespace.** Gateway metrics are now prefixed **`mump2p_gateway_`** (previously `optp2p_gateway_optimum_gateway_`). Update any saved Prometheus queries or Grafana dashboards. Metrics also carry `org_id` and your API key's metadata labels (e.g. `gateway_label`). See [Metrics](metrics.md). -* **Simpler configuration.** Removed `enable_aggregation`, the `eth_topics_subscribe` list (topics are baked in), the sidecar port (`33211`), and the separate remote-push client ID/secret. Remote push now reuses the API-key JWT as its Bearer token. -* **Security hardening.** Verified JWT lifetime is bounded, JWKS refresh is more frequent, and tokens are routed by audience. - -## Upgrade - -1. Generate an API key in the [Partner Console](https://console.getoptimum.io/) (one per gateway). -2. Update your `app_conf.yml` to the v1.0.2 shape: drop `chain`, `gateway_id`, `partner_id`, `enable_aggregation`, `eth_topics_subscribe`, the `33211` port, and the remote-push client ID/secret. See [Configuration](02_configuration.md). -3. Set the key via the environment and pull/restart: - - ```bash - export OPT_API_KEY=ogw_live_xxx - docker pull getoptimum/gateway:v1.0.2 - docker restart optimum-gateway - ``` - -4. Update Prometheus/Grafana queries to the `mump2p_gateway_` prefix. - -## Version Status - -| Version | Status | -| ----------- | ---------------------- | -| v1.0.2 | **CURRENT — required** | -| v0.0.1-rc12 | REMOVED / unsupported | -| v0.0.1-rc11 | REMOVED / unsupported | diff --git a/docs/versions/v1.1.1/02_configuration.md b/docs/versions/v1.1.1/02_configuration.md index 42d2aec..811bc2e 100644 --- a/docs/versions/v1.1.1/02_configuration.md +++ b/docs/versions/v1.1.1/02_configuration.md @@ -13,7 +13,7 @@ log_level: info gateway_cluster_id: optimum_ethereum_hoodi_v0_1 # REQUIRED — assigned by Optimum agent_lib_p2p_port: 33212 -agent_mump2p_port: 43213 +agent_mump2p_port: 33213 telemetry_enable: true telemetry_port: 48123 identity_libp2p_dir: /tmp/libp2p @@ -110,7 +110,7 @@ The gateway receives automatic config updates from bootstrap. | `api_key` | `OPT_API_KEY` | *(required)* | Gateway API key (`ogw_live_...`). **Set via env, not YAML.** Drives gateway_id, chain, and validator scope | | `gateway_cluster_id` | `OPT_GATEWAY_CLUSTER_ID` | *(required)* | Cluster ID assigned by Optimum during onboarding | | `agent_lib_p2p_port` | `OPT_AGENT_LIB_P2P_PORT` | 33212 | CL clients connect here (inbound) | -| `agent_mump2p_port` | `OPT_AGENT_MUMP2P_PORT` | 33213 | mump2p agent port (outbound). Sample config uses `43213` | +| `agent_mump2p_port` | `OPT_AGENT_MUMP2P_PORT` | 33213 | mump2p agent port (inbound) | | `telemetry_enable` | `OPT_ENABLE_TELEMETRY` | false | Enable metrics / health endpoint | | `telemetry_port` | `OPT_TELEMETRY_PORT` | 48123 | Telemetry HTTP port (`/health`, `/metrics`, `/api/v1/self_info`) | | `identity_libp2p_dir` | `OPT_IDENTITY_LIBP2P_DIR` | /tmp/libp2p | libp2p identity dir — **persist as a volume** | @@ -118,17 +118,6 @@ The gateway receives automatic config updates from bootstrap. | `direct_cl_peers` | `OPT_DIRECT_CL_PEERS` | *(empty)* | CL node multiaddrs for auto-reconnect; when set, only listed peer IDs may stay connected | | `log_level` | `OPT_LOG_LEVEL` | debug | `debug` / `info` | | `remote_push_enable` | `OPT_REMOTE_PUSH_ENABLE` | false | Optional Loki/Mimir push (requires `telemetry_enable: true`) | -| `stream_enable` | `OPT_STREAM_ENABLE` | false | Enable the consumer block stream (WebSocket + gRPC) | -| `stream_only` | `OPT_STREAM_ONLY` | false | Skip CL host/ingest; never publishes. Requires `stream_enable` | -| `stream_addr` | `OPT_STREAM_ADDR` | 127.0.0.1:9600 | WebSocket listener (own port, off `/metrics`); loopback by default | -| `stream_grpc_addr` | `OPT_STREAM_GRPC_ADDR` | 127.0.0.1:9601 | gRPC listener; loopback by default | -| `stream_require_auth` | `OPT_STREAM_REQUIRE_AUTH` | true | Verify consumer JWTs; `false` only on a loopback bind | -| `stream_max_conns` | `OPT_STREAM_MAX_CONNS` | 256 | Global connection cap | -| `stream_max_conns_per_sub` | `OPT_STREAM_MAX_CONNS_PER_SUB` | 8 | Per-consumer-key connection cap | -| `stream_buffer_size` | `OPT_STREAM_BUFFER_SIZE` | 64 | Per-connection ring buffer (drop-on-overflow) | - -See [Consumer Block Stream](06_block_stream.md) for minting consumer tokens and -opening a stream. ## Validation @@ -143,7 +132,7 @@ docker logs optimum-gateway | grep "subscribed to topic" * **Wrong network** — Chain comes from the API key, not YAML. If `/api/v1/self_info` shows the wrong `chain`, you are using the wrong key. Get the right key from Optimum * **Missing `gateway_cluster_id`** — Required; use the ID assigned during onboarding * **API key in YAML / image** — Move it to `OPT_API_KEY` in the environment -* **Port conflicts** — Ensure 33212, 43213, 48123 are free +* **Port conflicts** — Ensure 33212, 33213, 48123 are free * **Peer ID changes after restart** — Persist `identity_libp2p_dir` and `identity_mump2p_dir` as volumes See [Troubleshooting](04_troubleshoot.md) for more. diff --git a/docs/versions/v1.1.1/04_troubleshoot.md b/docs/versions/v1.1.1/04_troubleshoot.md index ccf57ef..508de3f 100644 --- a/docs/versions/v1.1.1/04_troubleshoot.md +++ b/docs/versions/v1.1.1/04_troubleshoot.md @@ -20,7 +20,7 @@ This guide covers the operational issues you can hit running the Optimum Gateway | `gateway_cluster_id` | Must match onboarding (Hoodi vs Mainnet) | | `identity_libp2p_dir` / `identity_mump2p_dir` | **Persist as volumes** — without them, peer ID changes every restart | | `agent_lib_p2p_port` | Default `33212`; CL connects here | -| `agent_mump2p_port` | Default `43213`; mump2p egress | +| `agent_mump2p_port` | Default `33213`; Optimum network peers connect here (inbound) | | `telemetry_enable` / `telemetry_port` | Default port `48123` | | `direct_cl_peers` | Optional, **strongly recommended** for Lighthouse / Nimbus | | `remote_push_enable` | Optional; pushes logs/metrics to Optimum for support visibility | @@ -61,7 +61,7 @@ docker logs optimum-gateway --tail=50 | Failing check | What it means | Fix | | -------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | `cl_peers` | No CL client connected on `:33212` | Configure CL peering; add `direct_cl_peers`; open **33212 inbound**; use a reachable IP in the multiaddr; restart CL after a gateway restart | -| `mump2p_peers` | Not connected to the Optimum mesh | Check **43213 outbound** + HTTPS to bootstrap; verify `api_key` + `gateway_cluster_id`; wait 2-5 min after start | +| `mump2p_peers` | Not connected to the Optimum mesh | Check **33213 inbound** + HTTPS to bootstrap; verify `api_key` + `gateway_cluster_id`; wait 2-5 min after start | | `subscribed_topics` | Topic subscription failed (expect ~65) | Usually a chain/cluster mismatch (wrong API key for the network); check logs for subscribe errors | | `last_block_age_sec` | No beacon block in ~60s | CL is connected but **silent** — CL not synced, EL stuck, or CL OOM/restart; fix the CL first | | `cl_health` | No CL gossip traffic in the last 30s | Same as silent CL — peer count alone can be misleading | @@ -277,16 +277,17 @@ Lodestar is supported. Add the gateway as a trusted/direct peer in Lodestar, and | Port | Direction | Action | | ------- | --------- | --------------------------------------------------------------------------------------------------- | | `33212` | Inbound | CL clients connect here | +| `33213` | Inbound | Optimum network (mump2p) peers connect here | | `48123` | Localhost | `/health`, `/metrics`, `/api/v1/self_info` — see [Network Requirements](00_network_requirements.md) | -| `43213` | Outbound | mump2p mesh egress (no inbound rule needed) | | `443` | Outbound | auth, bootstrap, Loki, Mimir | ```bash -sudo lsof -i :33212 -i :43213 -i :48123 +sudo lsof -i :33212 -i :33213 -i :48123 sudo ufw allow 33212/tcp +sudo ufw allow 33213/tcp ``` -Only **33212** needs a public inbound firewall rule. **Docker tip:** `--network host` exposes all ports on the host network interface. +**33213** must be reachable from the internet for the mesh. **33212** is for your CL (usually private). **Docker tip:** `--network host` exposes all ports on the host network interface. ## Identity / persistence diff --git a/docs/versions/v1.1.1/06_block_stream.md b/docs/versions/v1.1.1/06_block_stream.md deleted file mode 100644 index 901f558..0000000 --- a/docs/versions/v1.1.1/06_block_stream.md +++ /dev/null @@ -1,224 +0,0 @@ -# Consumer Block Stream - -The consumer block stream lets a gateway expose the beacon blocks it already -decodes to your own downstream consumers, over **WebSocket** or **gRPC**. It is -read-only, opt-in, and off by default. Each consumer authenticates with its own -short-lived token, separate from the gateway's API key. - -![Consumer block-stream flow: mint an osc_ key, exchange it for a stream JWT, then connect over WebSocket or gRPC](/block_stream.png) - -## Enable it - -Add the stream fields to `config/app_conf.yml` and restart. Only `stream_enable` -is required; the rest have the defaults shown. - -```yaml -stream_enable: true # default: false -stream_only: false # default: false — skip CL; never publishes (requires stream_enable) -stream_addr: 127.0.0.1:9600 # default — WebSocket listener (own port, off /metrics) -stream_grpc_addr: 127.0.0.1:9601 # default — gRPC listener -stream_require_auth: true # verify consumer JWTs; false = loopback dev only -stream_max_conns: 256 # global connection cap -stream_max_conns_per_sub: 8 # per-consumer-key connection cap -stream_buffer_size: 64 # per-connection ring buffer (drop-on-overflow) -``` - -Set `stream_only: true` if you only want the stream and do not run a consensus -client. The gateway still joins the mesh but does not publish. - -The gateway verifies consumer tokens against the JWKS at your `remote_auth_url`, -so it must point at the same auth service that mints the stream tokens. - -> **Exposure.** Listeners default to loopback (`127.0.0.1:9600` / -> `127.0.0.1:9601`), separate from the `/metrics` and `/health` port. Enabling -> the stream does not bind every interface. A non-loopback bind is an operator -> choice and must sit behind a trusted TLS-terminating proxy — the gateway does -> not terminate TLS. Disabling auth is allowed only on a loopback bind. - -## Step 1 — mint a stream key (console) - -Open [dev-console.getoptimum.io](https://dev-console.getoptimum.io) and select -the operator you are minting for. **Check the network picker (top right) first** — -the key is minted for the selected chain. Open the API keys section (labelled -**Manage Gateways** for a customer-role login), choose the **Stream consumers** -tab, create a key, name it after the downstream consumer, and copy the value. - -* The raw `osc_` key is shown **once** and cannot be retrieved again — copy it - before dismissing the dialog. -* Mint **one key per consumer**. Revocation and the per-connection cap are both - per key, so a shared key cannot be cut off individually. - -## Step 2 — exchange the key for a JWT - -The consumer swaps its `osc_` key for a JWT. The key is the request body, so -there is no `Authorization` header on this call: - -```bash -curl -X POST https://dev-auth.getoptimum.io/api/v1/stream/token \ - -H "content-type: application/json" \ - -d '{"stream_key":"osc_test_..."}' -``` - -```json -{ - "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6...", - "token_type": "Bearer", - "expires_in": 3600, - "operator_id": "1" -} -``` - -The `access_token` is the stream JWT. Decoded, its claims look like this — the -gateway checks `aud=stream`, and caps and revocation key off `sub` -(`as_`): - -```json -{ - "aud": "stream", - "iss": "https://dev-auth.getoptimum.io", - "sub": "as_6772872d87e3e0e1f6a6c97630413fa9", - "operator_id": "1", - "chain_id": "560048", - "cluster_ids": ["optimum_hoodi_v0_2"], - "iat": 1786709057, - "exp": 1786712657 -} -``` - -Tokens are short-lived (default `3600s`, ceiling `21600s`). A real consumer -re-runs this call to refresh before expiry — the same way an OAuth client renews -a token. The gateway verifies the signature locally against the published JWKS -and never calls back to auth, so revoking a key stops **new** tokens immediately -but an already-issued token keeps working until it expires. Keep the lifetime -short so a cutoff takes effect quickly. - -## Step 3 — open a stream - -There are two payload modes: - -* **metadata** (default) — the decoded block event only: slot, proposer, roots, - size, source, timing. No block bytes. -* **raw** — the same event **plus** the verbatim `ssz_snappy` block bytes as a - base64 `raw` field. - -Set the token once, then connect. - -```bash -TOKEN=$(curl -s -X POST https://dev-auth.getoptimum.io/api/v1/stream/token \ - -H "content-type: application/json" \ - -d '{"stream_key":"osc_test_..."}' | jq -r .access_token) -``` - -### WebSocket - -```bash -wscat -H "Authorization: Bearer $TOKEN" \ - -c "ws://GATEWAY_HOST:9600/api/v1/stream/blocks?mode=metadata" -``` - -Each block arrives as one JSON frame (metadata mode): - -```json -{ - "type": "block", - "slot": 3706300, - "proposer_index": 535778, - "parent_root": "saTBS/MRxOtn3FMP5vZGLhMjcgDYoJo5ISec1nGpt8M=", - "state_root": "HgD2msizU7N6A6663xIsK5LiauwtPVGTY4Gnbc9mfIg=", - "block_size_bytes": 17365, - "topic": "/eth2/c6ecb76c/beacon_block/ssz_snappy", - "source": "mump2p", - "received_at_ms": 1786689003070, - "gateway_id": "ag_...", - "fork_digest": "c6ecb76c", - "stale": false -} -``` - -For **raw** mode, use `mode=raw`; the frame additionally carries the block bytes: - -```json -{ "type": "block", "slot": 3706300, "...": "...", "raw": "8gAA...base64 ssz_snappy..." } -``` - -Browsers cannot set request headers, so pass the token via the -`Sec-WebSocket-Protocol` header instead — offer two values, the marker -`optimum.stream.v1` and `bearer.`. The server negotiates only the marker -and never echoes the token. - -### gRPC - -```bash -grpcurl -plaintext \ - -import-path proto \ - -proto getoptimum/optimum_gateway/service/stream/v1/stream.proto \ - -H "authorization: Bearer $TOKEN" \ - -d '{"mode":"metadata"}' \ - GATEWAY_HOST:9601 \ - getoptimum.optimum_gateway.service.stream.v1.BlockStreamService/Subscribe -``` - -Each block is a `block` frame: - -```json -{ - "block": { - "slot": "3706300", - "proposerIndex": "535778", - "parentRoot": "saTBS/MRxOtn3FMP5vZGLhMjcgDYoJo5ISec1nGpt8M=", - "stateRoot": "HgD2msizU7N6A6663xIsK5LiauwtPVGTY4Gnbc9mfIg=", - "blockSizeBytes": "17365", - "topic": "/eth2/c6ecb76c/beacon_block/ssz_snappy", - "source": "mump2p", - "receivedAtMs": "1786689003070", - "gatewayId": "ag_...", - "forkDigest": "c6ecb76c" - } -} -``` - -The stream is open-ended, so stop it yourself: Ctrl-C for WebSocket, or -`-max-time ` for gRPC. A trailing gRPC `DeadlineExceeded` is your own -timeout expiring, not a server error. - -### Lag signal - -Each connection has a bounded buffer. If a consumer reads too slowly and the -buffer overflows, the gateway drops events and sends a lag frame with the -cumulative dropped count, then resumes. A slow consumer never stalls the gateway. - -```json -{ "type": "lagged", "dropped": 12 } -``` - -Over gRPC the same signal is a `lagged` frame: `{ "lagged": { "dropped": "12" } }`. - -## Errors - -| Condition | WebSocket | gRPC | -| --- | --- | --- | -| Missing / bad token | `401 Unauthorized` | `Unauthenticated` | -| Invalid `mode` | `400 Bad Request` | `InvalidArgument` | -| Connection cap reached | `503 Service Unavailable` | `ResourceExhausted` | -| Unknown / suspended / revoked key (at mint) | `401 invalid_key` | `401 invalid_key` | - -## Metrics - -The gateway exports these on the telemetry port (`telemetry_port`, default -`48123`): - -| Metric | Type | Meaning | -| --- | --- | --- | -| `mump2p_stream_connections` | gauge | currently open consumer connections | -| `mump2p_stream_events_sent_total` | counter | events written to consumers | -| `mump2p_stream_events_dropped_total` | counter | events dropped on buffer overflow (lag) | -| `mump2p_stream_auth_failures_total` | counter | connections rejected for bad/missing tokens | - -```bash -curl -s http://GATEWAY_HOST:48123/metrics | grep mump2p_stream_ -``` - -## Availability - -The stream token endpoint is available on **dev** only for now -(`https://dev-auth.getoptimum.io`). The production endpoint is not live yet. diff --git a/docs/versions/v1.1.1/release_notes.md b/docs/versions/v1.1.1/release_notes.md index 6893500..246018a 100644 --- a/docs/versions/v1.1.1/release_notes.md +++ b/docs/versions/v1.1.1/release_notes.md @@ -34,6 +34,6 @@ No firewall or CL peering changes are required. | Version | Status | | ----------- | ------------------------- | | v1.1.1 | **CURRENT - recommended** | -| v1.0.2 | Previous | +| v1.0.2 | DEPRECATED / unsupported | | v0.0.1-rc12 | REMOVED / unsupported | | v0.0.1-rc11 | REMOVED / unsupported | diff --git a/docs/versions/v1.0.2/00_network_requirements.md b/docs/versions/v1.2.0/00_network_requirements.md similarity index 51% rename from docs/versions/v1.0.2/00_network_requirements.md rename to docs/versions/v1.2.0/00_network_requirements.md index 00f68ac..d15a076 100644 --- a/docs/versions/v1.0.2/00_network_requirements.md +++ b/docs/versions/v1.2.0/00_network_requirements.md @@ -7,30 +7,34 @@ Before starting the Optimum Gateway, ensure your firewall allows these ports: | Port | Direction | Purpose | | ----- | --------- | ------------------------------------------------------------------- | | 33212 | Inbound | libp2p agent - CL clients connect here | -| 43213 | Outbound | mump2p agent - gateway connects to Optimum network | +| 33213 | Inbound | mump2p agent - Optimum network peers connect here | | 48123 | Localhost | Telemetry / Health / API — **local access only** (see Docker below) | ## Docker -Publish **33212** to the network so CL clients can connect. Bind **48123** to localhost only — metrics and health stay available on the host (e.g. local Grafana) but are not reachable from the public internet. Optimum receives telemetry via remote push; you do not need to expose 48123 externally. +Publish **33212** (CL clients) and **33213** (Optimum mump2p mesh) to the network. Bind **48123** to localhost only — metrics and health stay available on the host (e.g. local Grafana) but are not reachable from the public internet. Optimum receives telemetry via remote push; you do not need to expose 48123 externally. ```bash -docker run -p 33212:33212 -p 127.0.0.1:48123:48123 \ +docker run -p 33212:33212 -p 33213:33213 -p 127.0.0.1:48123:48123 \ --name optimum-gateway \ -e OPT_API_KEY=ogw_live_xxx \ - getoptimum/gateway:v1.0.2 + getoptimum/gateway:v1.2.0 ``` If Prometheus runs in another container on the same Docker network, omit the `48123` publish and scrape the gateway by container name instead. +## Consumer block stream (optional) + +Enabling `stream_enable` does **not** add public ports. Listeners default to loopback `127.0.0.1:9600` (WebSocket) and `127.0.0.1:9601` (gRPC). See [Consumer Block Stream](06_block_stream.md). + ## Verification ```bash # Check listening ports (Linux) -netstat -tlnp | grep -E "(33212|43213|48123)" +netstat -tlnp | grep -E "(33212|33213|48123)" # Check listening ports (macOS) -netstat -an | grep -E "(33212|43213|48123)" +netstat -an | grep -E "(33212|33213|48123)" ``` Test health: diff --git a/docs/versions/v1.0.2/01_quick_start.md b/docs/versions/v1.2.0/01_quick_start.md similarity index 92% rename from docs/versions/v1.0.2/01_quick_start.md rename to docs/versions/v1.2.0/01_quick_start.md index e5e9c54..27f8fc7 100644 --- a/docs/versions/v1.0.2/01_quick_start.md +++ b/docs/versions/v1.2.0/01_quick_start.md @@ -2,6 +2,8 @@ Get the Optimum Gateway running with Docker. +> **Running on Kubernetes?** See [Kubernetes (Helm)](05_kubernetes.md) for the official Helm chart. + > **Prerequisites:** [Requirements](index.md#requirements) and [Network Requirements](00_network_requirements.md). You also need an **API key** — see [Generate your API key](#generate-your-api-key) below. ## Hardware Requirements @@ -46,7 +48,7 @@ The gateway exchanges this key on startup at `auth.getoptimum.io/api/v1/auth/tok ## Installation ```sh -docker pull getoptimum/gateway:v1.0.2 +docker pull getoptimum/gateway:v1.2.0 ``` ## Configuration @@ -58,11 +60,11 @@ log_level: info gateway_cluster_id: optimum_ethereum_hoodi_v0_1 # assigned by Optimum during onboarding agent_lib_p2p_port: 33212 -agent_opt_p2p_port: 43213 +agent_mump2p_port: 33213 telemetry_enable: true telemetry_port: 48123 identity_libp2p_dir: /tmp/libp2p -identity_optp2p_dir: /tmp/optp2p +identity_mump2p_dir: /tmp/mump2p ``` > **Set your API key via the environment, not YAML.** Pass it as `OPT_API_KEY` so it never lives in a config file or image layer. Your `gateway_id`, `chain`, and validator scope are all derived from this key — do not set them in YAML. @@ -78,16 +80,17 @@ mkdir -p config data/libp2p data/mump2p docker run --name optimum-gateway --rm \ -p 33212:33212/tcp \ + -p 33213:33213/tcp \ -p 127.0.0.1:48123:48123/tcp \ -e OPT_API_KEY=$OPT_API_KEY \ -v $(pwd)/config:/app/config \ -v $(pwd)/data/libp2p:/tmp/libp2p \ - -v $(pwd)/data/mump2p:/tmp/optp2p \ - getoptimum/gateway:v1.0.2 \ + -v $(pwd)/data/mump2p:/tmp/mump2p \ + getoptimum/gateway:v1.2.0 \ -config=/app/config/app_conf.yml ``` -> Persist the identity volumes (`/tmp/libp2p`, `/tmp/optp2p`) across restarts — otherwise the gateway's peer ID changes on every run and your CL client config breaks. +> Persist the identity volumes (`/tmp/libp2p`, `/tmp/mump2p`) across restarts — otherwise the gateway's peer ID changes on every run and your CL client config breaks. ## Verify @@ -101,7 +104,7 @@ curl http://localhost:48123/health { "status": "healthy", "gateway_id": "optimum-dev-hoodi-kubernetes-validator-lighthouse", - "version": "v1.0.2", + "version": "v1.2.0", "commit_hash": "a0b2bc1", "uptime_seconds": 1639, "checks": { @@ -163,7 +166,7 @@ curl -s http://localhost:48123/api/v1/self_info Use `libp2p.multiaddrs[0]` (or another reachable multiaddr) for IP and `peer_id` for peer ID. -> **Recommended CL versions:** Use **Prysm v7.1.4** or later. For Teku use **v26.4.0+**. See [Troubleshooting](04_troubleshoot.md) for client-specific PeerDAS flags. +> **Recommended CL versions:** Use **Prysm v7.1.8** or later. For Teku use **v26.6.0+** (minimum v26.4.0). See [Troubleshooting](04_troubleshoot.md) for client-specific PeerDAS flags. ### Prysm @@ -222,5 +225,6 @@ Lodestar is supported. Point it at the gateway as a trusted/direct peer and add ## Next Steps * [Configuration](02_configuration.md) - Ports, direct peers, advanced settings +* [Consumer Block Stream](06_block_stream.md) - Opt-in WebSocket / gRPC feed of decoded blocks * [Troubleshooting](04_troubleshoot.md) - Gateway diagnosis and common issues * [Metrics](metrics.md) - Gateway and mesh metrics diff --git a/docs/versions/v1.0.2/02_configuration.md b/docs/versions/v1.2.0/02_configuration.md similarity index 85% rename from docs/versions/v1.0.2/02_configuration.md rename to docs/versions/v1.2.0/02_configuration.md index b2e4d27..4803d2f 100644 --- a/docs/versions/v1.0.2/02_configuration.md +++ b/docs/versions/v1.2.0/02_configuration.md @@ -13,11 +13,11 @@ log_level: info gateway_cluster_id: optimum_ethereum_hoodi_v0_1 # REQUIRED — assigned by Optimum agent_lib_p2p_port: 33212 -agent_opt_p2p_port: 43213 +agent_mump2p_port: 33213 telemetry_enable: true telemetry_port: 48123 identity_libp2p_dir: /tmp/libp2p -identity_optp2p_dir: /tmp/optp2p +identity_mump2p_dir: /tmp/mump2p ``` > **API key via environment, not YAML.** Set `OPT_API_KEY=ogw_live_...` in the environment. Keep it out of the config file and image layers. The key determines your chain (Hoodi vs Mainnet), gateway ID, and validator list — there is **no** `chain` or `gateway_id` field for partners to set. @@ -86,7 +86,7 @@ This is fully automatic — no extra config. Until the first successful validato ## Remote Push -Remote push streams your gateway's logs to Optimum's Loki and metrics to Optimum's Mimir, giving the Optimum team visibility to help support you. Both `telemetry_enable` and `remote_push_enable` must be `true`. +Remote push streams your gateway's logs to Optimum's Loki and metrics to Optimum's Mimir, giving the Optimum team visibility to help support you. Both `telemetry_enable` and `remote_push_enable` must be `true`. v1.2.0 uses standard **Prometheus remote write** for metrics push — same setup as v1.1.1. ```yaml telemetry_enable: true @@ -110,14 +110,25 @@ The gateway receives automatic config updates from bootstrap. | `api_key` | `OPT_API_KEY` | *(required)* | Gateway API key (`ogw_live_...`). **Set via env, not YAML.** Drives gateway_id, chain, and validator scope | | `gateway_cluster_id` | `OPT_GATEWAY_CLUSTER_ID` | *(required)* | Cluster ID assigned by Optimum during onboarding | | `agent_lib_p2p_port` | `OPT_AGENT_LIB_P2P_PORT` | 33212 | CL clients connect here (inbound) | -| `agent_opt_p2p_port` | `OPT_AGENT_OPT_P2P_PORT` | 33213 | mump2p agent port (outbound). Sample config uses `43213` | +| `agent_mump2p_port` | `OPT_AGENT_MUMP2P_PORT` | 33213 | mump2p agent port (inbound) | | `telemetry_enable` | `OPT_ENABLE_TELEMETRY` | false | Enable metrics / health endpoint | | `telemetry_port` | `OPT_TELEMETRY_PORT` | 48123 | Telemetry HTTP port (`/health`, `/metrics`, `/api/v1/self_info`) | | `identity_libp2p_dir` | `OPT_IDENTITY_LIBP2P_DIR` | /tmp/libp2p | libp2p identity dir — **persist as a volume** | -| `identity_optp2p_dir` | `OPT_IDENTITY_OPT_P2P_DIR` | /tmp/optimum | mump2p identity dir — **persist as a volume** | +| `identity_mump2p_dir` | `OPT_IDENTITY_MUMP2P_DIR` | /tmp/mump2p | mump2p identity dir — **persist as a volume** | | `direct_cl_peers` | `OPT_DIRECT_CL_PEERS` | *(empty)* | CL node multiaddrs for auto-reconnect; when set, only listed peer IDs may stay connected | | `log_level` | `OPT_LOG_LEVEL` | debug | `debug` / `info` | | `remote_push_enable` | `OPT_REMOTE_PUSH_ENABLE` | false | Optional Loki/Mimir push (requires `telemetry_enable: true`) | +| `stream_enable` | `OPT_STREAM_ENABLE` | false | Enable the consumer block stream (WebSocket + gRPC) | +| `stream_only` | `OPT_STREAM_ONLY` | false | Skip CL host/ingest; never publishes. Requires `stream_enable` | +| `stream_addr` | `OPT_STREAM_ADDR` | 127.0.0.1:9600 | WebSocket listener (own port, off `/metrics`); loopback by default | +| `stream_grpc_addr` | `OPT_STREAM_GRPC_ADDR` | 127.0.0.1:9601 | gRPC listener; loopback by default | +| `stream_require_auth` | `OPT_STREAM_REQUIRE_AUTH` | true | Verify consumer JWTs; `false` only on a loopback bind | +| `stream_max_conns` | `OPT_STREAM_MAX_CONNS` | 256 | Global connection cap | +| `stream_max_conns_per_sub` | `OPT_STREAM_MAX_CONNS_PER_SUB` | 8 | Per-consumer-key connection cap | +| `stream_buffer_size` | `OPT_STREAM_BUFFER_SIZE` | 64 | Per-connection ring buffer (drop-on-overflow) | + +See [Consumer Block Stream](06_block_stream.md) for minting consumer tokens and +opening a stream. ## Validation @@ -132,7 +143,7 @@ docker logs optimum-gateway | grep "subscribed to topic" * **Wrong network** — Chain comes from the API key, not YAML. If `/api/v1/self_info` shows the wrong `chain`, you are using the wrong key. Get the right key from Optimum * **Missing `gateway_cluster_id`** — Required; use the ID assigned during onboarding * **API key in YAML / image** — Move it to `OPT_API_KEY` in the environment -* **Port conflicts** — Ensure 33212, 43213, 48123 are free -* **Peer ID changes after restart** — Persist `identity_libp2p_dir` and `identity_optp2p_dir` as volumes +* **Port conflicts** — Ensure 33212, 33213, 48123 are free +* **Peer ID changes after restart** — Persist `identity_libp2p_dir` and `identity_mump2p_dir` as volumes See [Troubleshooting](04_troubleshoot.md) for more. diff --git a/docs/versions/v1.0.2/03_telemetry.md b/docs/versions/v1.2.0/03_telemetry.md similarity index 98% rename from docs/versions/v1.0.2/03_telemetry.md rename to docs/versions/v1.2.0/03_telemetry.md index 1ec2041..2bc4ab7 100644 --- a/docs/versions/v1.0.2/03_telemetry.md +++ b/docs/versions/v1.2.0/03_telemetry.md @@ -20,7 +20,7 @@ { "status": "healthy", "gateway_id": "optimum-dev-hoodi-kubernetes-validator-lighthouse", - "version": "v1.0.2", + "version": "v1.2.0", "commit_hash": "a0b2bc1", "uptime_seconds": 1639, "checks": { @@ -41,6 +41,8 @@ If any check fails, `status` becomes `"degraded"` and the failing checks are listed in `"failing"`. +**Propagation:** `mump2p_gateway_propagation_state` reports whether the gateway is relaying mump2p traffic to your CL (`1` = on, `0` = disabled via Optimum dynamic config). The same state appears as `propagation_enabled` in `/api/v1/self_info`. + ## Self Info `GET /api/v1/self_info` returns gateway identity and peer information for CL client connection and operational visibility. @@ -49,7 +51,7 @@ If any check fails, `status` becomes `"degraded"` and the failing checks are lis ```json { - "propagation_disabled": false, + "propagation_enabled": true, "chain": "hoodi", "commit_hash": "a0b2bc1", "fork_digest": "c6ecb76c", @@ -57,7 +59,7 @@ If any check fails, `status` becomes `"degraded"` and the failing checks are lis "gateway_id": "optimum-dev-hoodi-kubernetes-validator-lighthouse", "paired_with": "partner", "remote_url": "bootstrap.getoptimum.io", - "version": "v1.0.2", + "version": "v1.2.0", "skip_messages_from_self": true, "peer_id": "12D3KooWNKZuPvVw5Sfnbq3nvyukxmhBBPZUXHeqzwcehmmwnKcR", "libp2p": { @@ -98,7 +100,7 @@ Use a multiaddr from `libp2p.multiaddrs` that is reachable from your CL host and **Endpoint:** `GET /metrics` -Metrics are labeled with `gateway_id` and `gateway_cluster_id`. See [Metrics Reference](metrics.md) for the full list. +Metrics are labeled with `gateway_id` and `gateway_cluster_id`. See [Metrics Reference](metrics.md) for the full list. Consumer block-stream series (`mump2p_stream_*`) appear when `stream_enable` is true. **CL connected:** When a CL client connects, `mump2p_gateway_cl_peers` goes from 0 to >=1. Messages flow on both block and attestation topics. @@ -280,7 +282,7 @@ providers: Copy the JSON below into `grafana-dashboards/partner-dashboard.json`:
-Click to expand: Partner Dashboard JSON (v1.0.2) +Click to expand: Partner Dashboard JSON (v1.2.0) ```json { @@ -300,7 +302,7 @@ Copy the JSON below into `grafana-dashboards/partner-dashboard.json`: } ] }, - "description": "Partner-facing dashboard for Optimum Gateway v1.0.2. All metrics sourced from the gateway /metrics endpoint. Select your Prometheus datasource and Network (Hoodi or Mainnet), then your gateway (by gateway_label).", + "description": "Partner-facing dashboard for Optimum Gateway v1.2.0. All metrics sourced from the gateway /metrics endpoint. Select your Prometheus datasource and Network (Hoodi or Mainnet), then your gateway (by gateway_label).", "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 1, @@ -738,16 +740,16 @@ Copy the JSON below into `grafana-dashboards/partner-dashboard.json`: "uid": "${ds_prometheus}" }, "editorMode": "code", - "expr": "vector(1)", + "expr": "mump2p_gateway_propagation_state{gateway_label=\"$gateway\"}", "instant": true, - "legendFormat": "__auto", + "legendFormat": "propagation", "range": false, "refId": "A" } ], "title": "Propagation", "type": "stat", - "description": "Propagation of messages (blocks / attestations) from the mump2p network to the libp2p (CL) network. Enabled by default in v1." + "description": "Whether this gateway is propagating mump2p messages to CL (from mump2p_gateway_propagation_state: 1=enabled, 0=disabled via Optimum dynamic config)." }, { "datasource": { @@ -1763,7 +1765,7 @@ Copy the JSON below into `grafana-dashboards/partner-dashboard.json`: "tags": [ "optimum", "partner", - "v1.0.2" + "v1.2.0" ], "templating": { "list": [ @@ -1844,7 +1846,7 @@ Copy the JSON below into `grafana-dashboards/partner-dashboard.json`: }, "timepicker": {}, "timezone": "browser", - "title": "Optimum Gateway - Partner Dashboard (v1.0.2)", + "title": "Optimum Gateway - Partner Dashboard (v1.2.0)", "uid": "partner-gateway-v1" } ``` diff --git a/docs/versions/v1.0.2/04_troubleshoot.md b/docs/versions/v1.2.0/04_troubleshoot.md similarity index 95% rename from docs/versions/v1.0.2/04_troubleshoot.md rename to docs/versions/v1.2.0/04_troubleshoot.md index c6c06b3..5b6034d 100644 --- a/docs/versions/v1.0.2/04_troubleshoot.md +++ b/docs/versions/v1.2.0/04_troubleshoot.md @@ -18,9 +18,9 @@ This guide covers the operational issues you can hit running the Optimum Gateway | --------------------------------------------- | -------------------------------------------------------------------------- | | `api_key` (env `OPT_API_KEY`) | Wrong/revoked key -> gateway crashes at startup. **Set via env, not YAML** | | `gateway_cluster_id` | Must match onboarding (Hoodi vs Mainnet) | -| `identity_libp2p_dir` / `identity_optp2p_dir` | **Persist as volumes** — without them, peer ID changes every restart | +| `identity_libp2p_dir` / `identity_mump2p_dir` | **Persist as volumes** — without them, peer ID changes every restart | | `agent_lib_p2p_port` | Default `33212`; CL connects here | -| `agent_opt_p2p_port` | Default `43213`; mump2p egress | +| `agent_mump2p_port` | Default `33213`; Optimum network peers connect here (inbound) | | `telemetry_enable` / `telemetry_port` | Default port `48123` | | `direct_cl_peers` | Optional, **strongly recommended** for Lighthouse / Nimbus | | `remote_push_enable` | Optional; pushes logs/metrics to Optimum for support visibility | @@ -61,7 +61,7 @@ docker logs optimum-gateway --tail=50 | Failing check | What it means | Fix | | -------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | `cl_peers` | No CL client connected on `:33212` | Configure CL peering; add `direct_cl_peers`; open **33212 inbound**; use a reachable IP in the multiaddr; restart CL after a gateway restart | -| `mump2p_peers` | Not connected to the Optimum mesh | Check **43213 outbound** + HTTPS to bootstrap; verify `api_key` + `gateway_cluster_id`; wait 2-5 min after start | +| `mump2p_peers` | Not connected to the Optimum mesh | Check **33213 inbound** + HTTPS to bootstrap; verify `api_key` + `gateway_cluster_id`; wait 2-5 min after start | | `subscribed_topics` | Topic subscription failed (expect ~65) | Usually a chain/cluster mismatch (wrong API key for the network); check logs for subscribe errors | | `last_block_age_sec` | No beacon block in ~60s | CL is connected but **silent** — CL not synced, EL stuck, or CL OOM/restart; fix the CL first | | `cl_health` | No CL gossip traffic in the last 30s | Same as silent CL — peer count alone can be misleading | @@ -75,7 +75,7 @@ docker logs optimum-gateway --tail=50 { "status": "healthy", "gateway_id": "optimum-eu-hoodi-01", - "version": "v1.0.2", + "version": "v1.2.0", "uptime_seconds": 1639, "checks": { "cl_peers": {"status": "ok", "value": 1}, @@ -116,7 +116,7 @@ Read the `failing[]` list first — it names which checks to fix next. | `libp2p.total_peers` / `direct_peers` | CL connectivity detail | | `mump2p.total_peers` | Mesh connectivity | | `libp2p.peers_per_topic` | Which topics have CL peers when the CL is healthy | -| `propagation_disabled` | Optimum dynamic config; can explain "not propagating" | +| `propagation_enabled` | Optimum dynamic config; `false` can explain "not propagating". Same state as `mump2p_gateway_propagation_state=0` | | `paired_with` | Gateway type from the API key: `partner`, `hermes`, or `relay` — only `partner` forwards attestations | > For support tickets, attach the full output of `curl -s http://localhost:48123/api/v1/self_info | jq`. @@ -172,7 +172,7 @@ curl -s http://localhost:48123/api/v1/self_info | jq '.chain, .fork_digest' | Prysm shows connected but no blocks | Silent CL / EL not synced. Prysm can follow in optimistic sync while Geth catches up — `cl_peers` OK but `last_block_age_sec` / `cl_health` fail. Check EL logs; wait for EL, then Prysm `/healthz` goes 200 | | Docker NAT / wrong IP in multiaddr | CL on host + gateway in bridge network -> use the host IP or `--network host` | -> **Recommended:** Prysm **v7.1.4**; Teku **v26.4.0+**. +> **Recommended:** Prysm **v7.1.8**; Lighthouse **v8.2.1+**; Teku **v26.6.0+** (minimum v26.4.0); Nimbus **v26.7.0+**. ### Getting the gateway's peer info for the CL @@ -196,7 +196,7 @@ The gateway advertises a **custody group count of 8** (Fulu `VALIDATOR_CUSTODY_R ### Lighthouse v8.x PeerDAS Configuration (Important) -Use Lighthouse **v8.2.0+** with: +Use Lighthouse **v8.2.1+** with: ```yaml command: @@ -277,28 +277,29 @@ Lodestar is supported. Add the gateway as a trusted/direct peer in Lodestar, and | Port | Direction | Action | | ------- | --------- | --------------------------------------------------------------------------------------------------- | | `33212` | Inbound | CL clients connect here | +| `33213` | Inbound | Optimum network (mump2p) peers connect here | | `48123` | Localhost | `/health`, `/metrics`, `/api/v1/self_info` — see [Network Requirements](00_network_requirements.md) | -| `43213` | Outbound | mump2p mesh egress (no inbound rule needed) | | `443` | Outbound | auth, bootstrap, Loki, Mimir | ```bash -sudo lsof -i :33212 -i :43213 -i :48123 +sudo lsof -i :33212 -i :33213 -i :48123 sudo ufw allow 33212/tcp +sudo ufw allow 33213/tcp ``` -Only **33212** needs a public inbound firewall rule. **Docker tip:** `--network host` exposes all ports on the host network interface. +**33213** must be reachable from the internet for the mesh. **33212** is for your CL (usually private). **Docker tip:** `--network host` exposes all ports on the host network interface. ## Identity / persistence | Issue | What you see | Fix | | ----------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------- | -| CL config "suddenly wrong" after redeploy | `peer_id` changed in `self_info` | New libp2p identity each run. Persist `identity_libp2p_dir` and `identity_optp2p_dir` as volumes | +| CL config "suddenly wrong" after redeploy | `peer_id` changed in `self_info` | New libp2p identity each run. Persist `identity_libp2p_dir` and `identity_mump2p_dir` as volumes | | Auth/mesh issues after a wipe | — | New mump2p peer_id in the mint payload. Persist the identity dir; Optimum may need to re-link the key | | Two gateways with the same identity | — | Copied volume. One identity per gateway instance | ```bash -docker exec optimum-gateway ls -la /tmp/libp2p /tmp/optp2p +docker exec optimum-gateway ls -la /tmp/libp2p /tmp/mump2p ``` @@ -326,7 +327,7 @@ curl -s http://localhost:48123/metrics | grep mump2p_gateway | Blocks not faster than baseline | CL or mesh unhealthy | Fix `/health` first | | Attestations not on the mesh | Validators not yet in the JWT list | Wait for sync. Only `partner` gateways forward attestations (`self_info.paired_with`). Check `mump2p_gateway_known_validators_total` — 0 means no validators synced from auth | | Attestations dropped (expected) | Non-partner validators on the same CL | Normal — only your own validators are forwarded | -| `propagation_disabled: true` in `self_info` | Optimum dynamic config | Not a partner YAML knob | +| `propagation_enabled: false` in `self_info` | Optimum dynamic config | Not a partner YAML knob. Metrics: `mump2p_gateway_propagation_state=0` | ## Bootstrap / mesh (partner-visible symptoms only) @@ -345,7 +346,7 @@ curl -s http://localhost:48123/metrics | grep mump2p_gateway | -------------- | ----------------------------------- | -------------------------------------------------------------------------- | | Lighthouse | No reconnect after gateway restart | `direct_cl_peers` + `--boot-nodes` / trusted peer | | Lighthouse v8+ | Goodbye / custody metadata mismatch | Updated gateway + PeerDAS flags (`--semi-supernode`, `--target-peers=500`) | -| Prysm | Connected but no gossip | EL sync; restart beacon node. Use v7.1.4+ | +| Prysm | Connected but no gossip | EL sync; restart beacon node. Use v7.1.8+ | | Teku | `NoSuchElementException` metadata | Upgrade to v26.4.0+ | | Teku | Gateway peer pruned | Use `--p2p-direct-peers` (not just `--p2p-static-peers`) | | Nimbus | Privileged peer fails | Stable `--netkey-file` + public IP in `direct_cl_peers` | @@ -356,7 +357,7 @@ curl -s http://localhost:48123/metrics | grep mump2p_gateway | Issue | Fix | | ------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -| Wrong Docker image tag | Use `getoptimum/gateway:v1.0.2` | +| Wrong Docker image tag | Use `getoptimum/gateway:v1.2.0` | | Config edited but container not restarted | `docker restart optimum-gateway` | | Running hoodi + mainnet on the same ports | The second instance needs different ports + its own config + its own API key | | Duplicate gateway (same API key, two hosts) | One key -> one gateway; generate a second key | diff --git a/docs/versions/v1.2.0/05_kubernetes.md b/docs/versions/v1.2.0/05_kubernetes.md new file mode 100644 index 0000000..cf8780f --- /dev/null +++ b/docs/versions/v1.2.0/05_kubernetes.md @@ -0,0 +1,250 @@ +# Kubernetes (Helm) + +Run the Optimum Gateway on Kubernetes with the official Helm chart. The gateway +sits beside your Ethereum consensus-layer (CL) client and bridges it into the +Optimum network. + +**One Helm release = one gateway = one CL client.** + +> **Running on bare metal or Docker instead?** See [Quick Start (Docker)](./01_quick_start.md). + +## What you need from Optimum + +Three things — none of them belong in a file you commit: + +| | example | +|---|---| +| API key | `ogw_live_…` | +| cluster ID | `optimum_ethereum_mainnet_v0_1` | +| image digest | `sha256:943f6bd4df92…` | + +You generate the API key yourself from the Partner Console — see +[Generate your API key](./01_quick_start.md#generate-your-api-key). Ask Optimum +for a **digest**, not a tag: a tag can be repointed, a digest cannot. + +## Requirements + +* **Kubernetes 1.25+**, **Helm 3.8+** +* A node with a **public IP** +* Inbound **TCP 33213** open to that node from the internet — this is the + Optimum network (mump2p) port and the gateway is unusable without it +* The CL client able to reach the gateway on **TCP 33212** (usually in-cluster; + no public firewall hole needed for this) +* A namespace permitting `hostNetwork` and `hostPort`. Under Pod Security + Admission that means **`privileged`** — `baseline` blocks both +* A default StorageClass supporting `ReadWriteOnce` (two small volumes hold the + gateway's identities) +* Outbound HTTPS to `bootstrap.getoptimum.io` and `auth.getoptimum.io` + +Resource use: requests `150m` CPU / `2Gi` memory, limit `4Gi` memory. + +## Networking: why `hostNetwork` is required + +The gateway advertises the addresses it detects **in its own network namespace** +to the Optimum bootstrap registry, and has **no announce-address override** +(there is no equivalent of Lighthouse's `--enr-address` / `--nat=extip`). + +On a normal pod network it would detect and advertise the internal **pod IP**, +register as "reachable," and then silently receive **no inbound mump2p peers** — +a NodePort or LoadBalancer in front does not help, because there is no way to +tell the gateway to announce that external address. Reachability comes from +`hostNetwork`, not from a Service. + +So the chart defaults to `networking.hostNetwork: true` (the K8s equivalent of +Docker host-mode) and one gateway per node via anti-affinity, since it binds host +ports. Schedule it on a node with a public IP and open inbound **33213**. + +## Install + +```bash +export CHART=oci://registry-1.docker.io/getoptimum/optimum-gateway +export VER=$(helm show chart $CHART | awk '/^version:/{print $2}') + +kubectl create namespace optimum +kubectl label namespace optimum pod-security.kubernetes.io/enforce=privileged + +# the API key, out of band — never in your values file +kubectl -n optimum create secret generic optimum-gateway-api-key \ + --from-literal=api-key='' + +helm show values $CHART --version $VER > my-values.yaml +# fill in the four values below + +helm install gateway $CHART --version $VER -n optimum -f my-values.yaml +``` + +## The four values you must set + +The chart refuses to install without these, rather than starting a gateway that +does nothing. + +```yaml +image: + digest: sha256:… # from Optimum + +gateway: + clusterId: optimum_… # from Optimum + directClPeers: + - /dns4/..svc.cluster.local/tcp//p2p/ + # CL outside the cluster: /ip4//tcp//p2p/ + +apiKey: + existingSecret: optimum-gateway-api-key +``` + +`directClPeers` is an **allowlist** — the gateway closes any connection from a +peer not on it. A wrong peer ID or port means it talks to nothing. + +Get your client's peer ID: + +```bash +curl -s localhost:5052/eth/v1/node/identity | jq -r .data.peer_id # lighthouse / nimbus +curl -s localhost:3500/eth/v1/node/identity | jq -r .data.peer_id # prysm +curl -s localhost:5051/eth/v1/node/identity | jq -r .data.peer_id # teku +``` + +Use the client's **P2P** port in the multiaddr — prysm `13000`, others `9000` — +not the HTTP port you just queried. + +> `apiKey.existingSecret` is the one under the top-level `apiKey:` block. + +## Point your CL client at the gateway + +**Peering is two-way.** The step above tells the gateway about your client. Your +client must **also** be told about the gateway, or it drops the connection and +`cl_peers` stays at 0. + +Get the gateway's identity once it is running: + +```bash +kubectl -n optimum port-forward svc/gateway-optimum-gateway 48123:48123 +curl -s localhost:48123/api/v1/self_info | jq -r '.peer_id, .libp2p.multiaddrs[]' +``` + +Build the multiaddr from the **public** address and port `33212`: + +```text +/ip4//tcp/33212/p2p/ +``` + +Add it to your client and restart it: + +| client | flag | +|---|---| +| Prysm | `--peer=` | +| Lighthouse | `--libp2p-addresses=` and `--trusted-peers=` | +| Teku | `--p2p-direct-peers=` | +| Nimbus | `--direct-peer=` | + +> **Nimbus** ignores the direct-peer list when its network key is +> auto-generated. Give Nimbus a persistent netkey or it silently skips the +> gateway. + +The gateway's peer ID is stable across restarts. Its **IP is not** — if the pod +moves to a different node, update this multiaddr. + +## Check it works + +A `Running` pod proves nothing on its own — the gateway can start, register, and +peer with no one. + +```bash +kubectl -n optimum port-forward svc/gateway-optimum-gateway 48123:48123 + +curl -s localhost:48123/health | jq '{status, cl: .checks.cl_health.status, cl_peers: .checks.cl_peers.value, mump2p: .checks.mump2p_health.status, mump2p_peers: .checks.mump2p_peers.value}' +curl -s localhost:48123/api/v1/self_info | jq '{peer_id, multiaddrs: .libp2p.multiaddrs}' +``` + +Healthy looks like: `status: "healthy"`, `cl: "ok"`, `cl_peers: 1`, and +`mump2p_peers` in the tens. Expect this **within a couple of minutes** of the pod +going ready. + +In `self_info`, `multiaddrs` must contain a **public IP**. If it only shows a +private or pod address (`10.x`), nothing outside your cluster can dial you and +`mump2p_peers` will stay at 0. + +For the full meaning of each `/health` and `self_info` field, see +[Telemetry & Monitoring](./03_telemetry.md). + +## Upgrade, rollback, uninstall + +When Optimum sends a new image digest, put it in `image.digest` in your values +file, then: + +```bash +helm upgrade gateway $CHART --version $VER -n optimum -f my-values.yaml +helm history gateway -n optimum +helm rollback gateway -n optimum +helm uninstall gateway -n optimum +``` + +The deployment strategy is `Recreate`, not `RollingUpdate` — two pods must never +hold the same identity volume. Expect a brief gap on every upgrade. + +Uninstall **keeps** the identity volumes, so reinstalling keeps the same peer IDs +and your CL client's configured multiaddr still matches. To discard them: + +```bash +kubectl -n optimum delete pvc -l app.kubernetes.io/instance=gateway +``` + +That is permanent. The gateway returns as a new peer and you must update your CL +client. + +## Optional + +**Send telemetry to Optimum** — lets us help you debug. Authenticated with a +token derived from your API key, so it needs no extra credentials: + +```yaml +gateway: + remotePush: + enabled: true +``` + +**Scrape it yourself** — if you run the Prometheus Operator: + +```yaml +podMonitor: + enabled: true +``` + +Metrics are on `:48123/metrics`. Keep `gateway.logLevel: info`; `debug` is very +noisy. Propagation (forwarding Optimum messages into the CL network) is managed +by Optimum centrally — you do not need to configure it. + +**Consumer block stream** is off by default. Enable it in gateway config if you +need a local WebSocket/gRPC feed of decoded blocks; listeners bind loopback. +See [Consumer Block Stream](06_block_stream.md). + +## When it doesn't work + +Kubernetes-specific symptoms below. For gateway behaviour that isn't K8s-specific +(CL peering, PeerDAS, identity, log noise), see +[Troubleshooting](./04_troubleshoot.md). + +| Symptom | Cause | +|---|---| +| `helm install` fails naming a value | That value is required — the message says which | +| `helm install` says deployed but there are no pods | Pod Security is rejecting them. `kubectl -n optimum describe rs -l app.kubernetes.io/instance=gateway` — if it mentions `violates PodSecurity`, the namespace needs `privileged` | +| `CrashLoopBackOff` immediately | Usually a rejected API key — `kubectl logs` will show `api key not recognized (401)` | +| `cl_peers: 0` | `directClPeers` wrong, **or** your CL client was never pointed at the gateway (see above) | +| `mump2p_peers: 0` after a few minutes | Inbound **33213** is not reachable from the internet | +| `multiaddrs` shows only private IPs | The node has no public IP, or `networking.hostNetwork` was disabled — it must stay `true` | +| Pod stuck `Pending` | No node with capacity; the chart also keeps one gateway per node | + +## Getting help + +Send us this — it answers most of the first round of questions: + +```bash +helm get values gateway -n optimum # safe: contains no secret +kubectl -n optimum get pods,pvc +kubectl -n optimum logs -l app.kubernetes.io/instance=gateway --tail=100 +curl -s localhost:48123/health +curl -s localhost:48123/api/v1/self_info +``` + +`helm get values` is safe to share — with `apiKey.existingSecret` the key is only +ever a reference, never a value in the release. Every setting is documented inline +in `helm show values`. diff --git a/docs/versions/v1.2.0/06_block_stream.md b/docs/versions/v1.2.0/06_block_stream.md new file mode 100644 index 0000000..82bdeea --- /dev/null +++ b/docs/versions/v1.2.0/06_block_stream.md @@ -0,0 +1,320 @@ +# Consumer Block Stream + +The consumer block stream lets a gateway expose the beacon blocks it already +decodes to your own downstream consumers, over **WebSocket** or **gRPC**. It is +read-only, opt-in, and off by default. Each consumer authenticates with its own +short-lived token, separate from the gateway's API key. + + + + + + + + + + mints + + + POST + /stream/token + + + issues + + + Bearer token + Authorization header + + + connect + + + valid + + + invalid + + + Onboarding + Partner Console + console.getoptimum.io + per-gateway scope + + + + Credential + osc_ key + stream scope + + + Auth service + auth + verifies osc_ key + signs stream JWT + + + + Token + Stream JWT + aud=stream · ~1h + + + Consumer + Client connects + WS :9600 + gRPC :9601 + + + Gateway + Optimum Gateway + + Reads Authorization header + + Verifies signature via JWKS + + Checks aud=stream · exp + + Admits or rejects the stream + + + Allowed + Block stream + blocks · blobs + + + Rejected + 401 + Unauthenticated + + +## Enable it + +Add the stream fields to `config/app_conf.yml` and restart. Only `stream_enable` +is required; the rest have the defaults shown. + +```yaml +stream_enable: true # default: false +stream_only: false # default: false — skip CL; never publishes (requires stream_enable) +stream_addr: 127.0.0.1:9600 # default — WebSocket listener (own port, off /metrics) +stream_grpc_addr: 127.0.0.1:9601 # default — gRPC listener +stream_require_auth: true # verify consumer JWTs; false = loopback only +stream_max_conns: 256 # global connection cap +stream_max_conns_per_sub: 8 # per-consumer-key connection cap +stream_buffer_size: 64 # per-connection ring buffer (drop-on-overflow) +``` + +Set `stream_only: true` if you only want the stream and do not run a consensus +client. The gateway still joins the mesh but does not publish. + +The gateway verifies consumer tokens against the JWKS at your `remote_auth_url`, +so it must point at the same auth service that mints the stream tokens. + +> **Exposure.** Listeners default to loopback (`127.0.0.1:9600` / +> `127.0.0.1:9601`), separate from the `/metrics` and `/health` port. Enabling +> the stream does not bind every interface. A non-loopback bind is an operator +> choice and must sit behind a trusted TLS-terminating proxy — the gateway does +> not terminate TLS. Disabling auth is allowed only on a loopback bind. + +## Step 1 — mint a stream key (console) + +Open the [Optimum Partner Console](https://console.getoptimum.io/) and select +the operator you are minting for. **Check the network picker (top right) first** — +the key is minted for the selected chain (Hoodi or Mainnet). Open the API keys +section (labelled **Manage Gateways** for a customer-role login), choose the +**Stream consumers** tab, create a key, name it after the downstream consumer, +and copy the value. + +* The raw `osc_` key is shown **once** and cannot be retrieved again — copy it + before dismissing the dialog. +* Mint **one key per consumer**. Revocation and the per-connection cap are both + per key, so a shared key cannot be cut off individually. +* Use a **Hoodi** key with a Hoodi gateway, and a **Mainnet** key with a + Mainnet gateway. The picker must match the gateway's chain, the same rule as + `ogw_live_` API keys. + +## Step 2 — exchange the key for a JWT + +The consumer swaps its `osc_` key for a JWT. The key is the request body, so +there is no `Authorization` header on this call: + +```bash +curl -X POST https://auth.getoptimum.io/api/v1/stream/token \ + -H "content-type: application/json" \ + -d '{"stream_key":"osc_live_..."}' +``` + +```json +{ + "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6...", + "token_type": "Bearer", + "expires_in": 3600, + "operator_id": "1" +} +``` + +The `access_token` is the stream JWT. Decoded, its claims look like this — the +gateway checks `aud=stream`, and caps and revocation key off `sub` +(`as_`). Hoodi example: + +```json +{ + "aud": "stream", + "iss": "https://auth.getoptimum.io", + "sub": "as_6772872d87e3e0e1f6a6c97630413fa9", + "operator_id": "1", + "chain_id": "560048", + "cluster_ids": ["optimum_ethereum_hoodi_v0_1"], + "iat": 1786709057, + "exp": 1786712657 +} +``` + +A Mainnet token uses `chain_id` `"1"` and +`cluster_ids: ["optimum_ethereum_mainnet_v0_1"]` (or the Mainnet cluster ID +Optimum assigned you at onboarding). + +Tokens are short-lived (default `3600s`, ceiling `21600s`). A real consumer +re-runs this call to refresh before expiry — the same way an OAuth client renews +a token. The gateway verifies the signature locally against the published JWKS +and never calls back to auth, so revoking a key stops **new** tokens immediately +but an already-issued token keeps working until it expires. Keep the lifetime +short so a cutoff takes effect quickly. + +## Step 3 — open a stream + +There are two payload modes: + +* **metadata** (default) — the decoded block event only: slot, proposer, roots, + size, source, timing. No block bytes. +* **raw** — the same event **plus** the verbatim `ssz_snappy` block bytes as a + base64 `raw` field. + +Set the token once, then connect. + +```bash +TOKEN=$(curl -s -X POST https://auth.getoptimum.io/api/v1/stream/token \ + -H "content-type: application/json" \ + -d '{"stream_key":"osc_live_..."}' | jq -r .access_token) +``` + +### WebSocket + +```bash +wscat -H "Authorization: Bearer $TOKEN" \ + -c "ws://GATEWAY_HOST:9600/api/v1/stream/blocks?mode=metadata" +``` + +Each block arrives as one JSON frame (metadata mode): + +```json +{ + "type": "block", + "slot": 3706300, + "proposer_index": 535778, + "parent_root": "saTBS/MRxOtn3FMP5vZGLhMjcgDYoJo5ISec1nGpt8M=", + "state_root": "HgD2msizU7N6A6663xIsK5LiauwtPVGTY4Gnbc9mfIg=", + "block_size_bytes": 17365, + "topic": "/eth2/c6ecb76c/beacon_block/ssz_snappy", + "source": "mump2p", + "received_at_ms": 1786689003070, + "gateway_id": "ag_...", + "fork_digest": "c6ecb76c", + "stale": false +} +``` + +For **raw** mode, use `mode=raw`; the frame additionally carries the block bytes: + +```json +{ "type": "block", "slot": 3706300, "...": "...", "raw": "8gAA...base64 ssz_snappy..." } +``` + +Browsers cannot set request headers, so pass the token via the +`Sec-WebSocket-Protocol` header instead — offer two values, the marker +`optimum.stream.v1` and `bearer.`. The server negotiates only the marker +and never echoes the token. + +### gRPC + +```bash +grpcurl -plaintext \ + -import-path proto \ + -proto getoptimum/optimum_gateway/service/stream/v1/stream.proto \ + -H "authorization: Bearer $TOKEN" \ + -d '{"mode":"metadata"}' \ + GATEWAY_HOST:9601 \ + getoptimum.optimum_gateway.service.stream.v1.BlockStreamService/Subscribe +``` + +Each block is a `block` frame: + +```json +{ + "block": { + "slot": "3706300", + "proposerIndex": "535778", + "parentRoot": "saTBS/MRxOtn3FMP5vZGLhMjcgDYoJo5ISec1nGpt8M=", + "stateRoot": "HgD2msizU7N6A6663xIsK5LiauwtPVGTY4Gnbc9mfIg=", + "blockSizeBytes": "17365", + "topic": "/eth2/c6ecb76c/beacon_block/ssz_snappy", + "source": "mump2p", + "receivedAtMs": "1786689003070", + "gatewayId": "ag_...", + "forkDigest": "c6ecb76c" + } +} +``` + +The stream is open-ended, so stop it yourself: Ctrl-C for WebSocket, or +`-max-time ` for gRPC. A trailing gRPC `DeadlineExceeded` is your own +timeout expiring, not a server error. + +### Lag signal + +Each connection has a bounded buffer. If a consumer reads too slowly and the +buffer overflows, the gateway drops events and sends a lag frame with the +cumulative dropped count, then resumes. A slow consumer never stalls the gateway. + +```json +{ "type": "lagged", "dropped": 12 } +``` + +Over gRPC the same signal is a `lagged` frame: `{ "lagged": { "dropped": "12" } }`. + +## Errors + +Connection-time (gateway WebSocket / gRPC): + +| Condition | WebSocket | gRPC | +| --- | --- | --- | +| Missing / bad token | `401 Unauthorized` | `Unauthenticated` | +| Invalid `mode` | `400 Bad Request` | `InvalidArgument` | +| Connection cap reached | `503 Service Unavailable` | `ResourceExhausted` | + +Token exchange (`POST /api/v1/stream/token` on the auth service) is a different call. Unknown, suspended, or revoked `osc_` keys fail there as `401 invalid_key` — the gateway never sees that status on the stream. + +## Metrics + +Consumer stream series are exported on the telemetry port (`telemetry_port`, +default `48123`) when `stream_enable` is true. See +[Metrics — Consumer Block Stream](metrics.md#consumer-block-stream) for names +and types (`mump2p_stream_*`). + +```bash +curl -s http://localhost:48123/metrics | grep mump2p_stream_ +``` + +## Availability + +The stream is live on **Hoodi and Mainnet**. Mint the consumer key in the +[Partner Console](https://console.getoptimum.io/) with the matching network +selected, and exchange it at `https://auth.getoptimum.io/api/v1/stream/token`. + +| Network | Console picker | Cluster ID (typical) | +| --- | --- | --- | +| Hoodi | Hoodi | `optimum_ethereum_hoodi_v0_1` | +| Mainnet | Mainnet | `optimum_ethereum_mainnet_v0_1` | + +Use the cluster ID Optimum assigned you at onboarding if it differs from the +table. diff --git a/docs/versions/v1.0.2/index.md b/docs/versions/v1.2.0/index.md similarity index 96% rename from docs/versions/v1.0.2/index.md rename to docs/versions/v1.2.0/index.md index 17127e9..4e0ceaa 100644 --- a/docs/versions/v1.0.2/index.md +++ b/docs/versions/v1.2.0/index.md @@ -1,8 +1,8 @@ # Optimum Gateway - User Guide -> **Required upgrade:** v1.0.2 is a **mandatory** upgrade for all partners. It **replaces** every earlier release — previous release candidates (rc11, rc12) are no longer supported. Upgrade as soon as you receive your API key. +> **Recommended upgrade:** v1.2.0 is the current release. Partners on v1.1.1 should upgrade when convenient — networking and CL peering are unchanged. This release adds the opt-in [consumer block stream](06_block_stream.md). -> **Release Notes:** [What's new in v1.0.2](./release_notes.md) +> **Release Notes:** [What's new in v1.2.0](./release_notes.md) > **Security audit:** ProbeLab, 2026 - [Full report](https://cdn.probelab.io/media/documents/2026-08-ProbeLab-Security_Audit_Report_Optimum_Gateway.pdf) @@ -13,6 +13,7 @@ The **Optimum Gateway** bridges your **Ethereum Consensus Layer (CL) client** wi * **Problem**: Validators rely on CL gossip (libp2p) for block and attestation propagation. Latency variance hurts performance. * **Gateway Role**: Bridges your local CL client to the **mump2p** network for both blocks and attestations. * **Result**: Faster block and attestation propagation, reduced latency, improved validator rewards. +* **Consumer block stream** (opt-in): expose decoded beacon blocks to your own consumers over WebSocket or gRPC. See [Consumer Block Stream](06_block_stream.md). ## Architecture @@ -75,7 +76,7 @@ The **Optimum Gateway** bridges your **Ethereum Consensus Layer (CL) client** wi * The Gateway subscribes to ETH CL topics (beacon_block + all 64 attestation subnets) and forwards messages to the Optimum mump2p network. * **Peer discovery and fork digest** are handled automatically. The gateway connects to the Optimum network on startup. -* **Identity, chain, and validator scope** all come from your **API key** — there is no per-network YAML to edit. +* **Identity, chain, and validator scope** all come from your **API key** - there is no per-network YAML to edit. * **Config:** See [Quick Start](01_quick_start.md) and [Configuration](02_configuration.md). ## Requirements diff --git a/docs/versions/v1.0.2/metrics.md b/docs/versions/v1.2.0/metrics.md similarity index 89% rename from docs/versions/v1.0.2/metrics.md rename to docs/versions/v1.2.0/metrics.md index d42eb89..08f1105 100644 --- a/docs/versions/v1.0.2/metrics.md +++ b/docs/versions/v1.2.0/metrics.md @@ -4,7 +4,7 @@ When `telemetry_enable: true`, metrics are exposed at `http://localhost:48123/me All gateway metrics carry these global labels: `gateway_id`, `gateway_cluster_id`, and `org_id`. Gateways also inherit the metadata labels set on your API key (for example `gateway_label`, and any Region / Consensus Client / Hosting Provider details you selected when generating the key). -> **Metric prefix:** all gateway metrics are prefixed `mump2p_gateway_`. (Earlier releases used the `optp2p_gateway_optimum_gateway_` prefix — update any saved dashboards or queries.) +> **Metric prefix:** most gateway metrics are prefixed `mump2p_gateway_`. Consumer block-stream metrics use `mump2p_stream_`. (Earlier releases used the `optp2p_gateway_optimum_gateway_` prefix — update any saved dashboards or queries.) ## Build & Identity @@ -17,8 +17,9 @@ All gateway metrics carry these global labels: `gateway_id`, `gateway_cluster_id | Metric | Type | Description | | ------------------------------------- | ----- | ------------------------------------------------------------------- | -| `mump2p_gateway_cl_health_status` | Gauge | CL health: 1 = healthy (gossip seen in last 30s), 0 = degraded | +| `mump2p_gateway_cl_health_status` | Gauge | CL health: 1 = healthy (CL path activity in last 30s), 0 = degraded | | `mump2p_gateway_mump2p_health_status` | Gauge | mump2p health: 1 = healthy (mesh traffic in last 30s), 0 = degraded | +| `mump2p_gateway_propagation_state` | Gauge | Propagation to CL: 1 = propagating, 0 = disabled (dynamic config) | ## Peers @@ -95,6 +96,17 @@ All gateway metrics carry these global labels: `gateway_id`, `gateway_cluster_id | `mump2p_gateway_auth_token_mint_total` | Counter | result | JWT mint outcomes (result: success, unknown_key, revoked, suspended, forbidden, bad_status, network_error, empty_token, verify_failed) | | `mump2p_gateway_auth_token_expires_at_seconds` | Gauge | — | Unix timestamp at which the current JWT expires (0 if never minted) | +## Consumer Block Stream + +These series appear when `stream_enable: true`. They use the `mump2p_stream_` prefix (not `mump2p_gateway_`). See [Consumer Block Stream](06_block_stream.md) for enablement, tokens, and connecting. + +| Metric | Type | Description | +| --------------------------------------- | ------- | -------------------------------------------------------- | +| `mump2p_stream_connections` | Gauge | Currently open consumer connections | +| `mump2p_stream_events_sent_total` | Counter | Events written to consumers | +| `mump2p_stream_events_dropped_total` | Counter | Events dropped on buffer overflow (lag) | +| `mump2p_stream_auth_failures_total` | Counter | Connections rejected for bad or missing tokens | + ## mump2p Trace (debug) These are populated only when the corresponding trace flags are enabled (`OPT_TRACE_MESH`, `OPT_TRACE_RPC`, `OPT_TRACE_SHARD`). All labels are bounded — per-peer and per-message identifiers are deliberately not used. @@ -120,3 +132,9 @@ curl -s http://localhost:48123/metrics | grep mump2p_gateway ``` With a CL connected: `mump2p_gateway_cl_peers` ≥ 1, `mump2p_gateway_mump2p_peers` ≥ 1, and `/health` reports `subscribed_topics` = 65 (1 block + 64 attestation subnets). + +With the consumer stream enabled (`stream_enable: true`): + +```sh +curl -s http://localhost:48123/metrics | grep mump2p_stream_ +``` diff --git a/docs/versions/v1.0.2/metrics_methodology.md b/docs/versions/v1.2.0/metrics_methodology.md similarity index 94% rename from docs/versions/v1.0.2/metrics_methodology.md rename to docs/versions/v1.2.0/metrics_methodology.md index 2002215..a1b6f4e 100644 --- a/docs/versions/v1.0.2/metrics_methodology.md +++ b/docs/versions/v1.2.0/metrics_methodology.md @@ -74,6 +74,10 @@ Counters per topic (libp2p, mump2p) to isolate heavy topics. * **gap_to_best_ms** - Delay vs best observed first-seen time in the gateway population (independent of proposer publish timing) * **mum_spread_ms** - Delay from first mump2p publish to receiver (Optimum transport quality) +### Propagation state + +* **`propagation_state`** — runtime gauge (`1` = propagating mump2p → CL, `0` = disabled via Optimum dynamic config). Matches `propagation_enabled` in `/api/v1/self_info`. Distinct from attestation propagation latency below. + ### Attestation KPIs * **Inclusion rate** - `forwarded / evaluated` — what fraction of CL attestations pass the router filter diff --git a/docs/versions/v1.2.0/release_notes.md b/docs/versions/v1.2.0/release_notes.md new file mode 100644 index 0000000..b2d1721 --- /dev/null +++ b/docs/versions/v1.2.0/release_notes.md @@ -0,0 +1,37 @@ +# v1.2.0 + +> **Recommended upgrade.** v1.2.0 is the current release for all partners on v1.1.1. Networking and CL peering are unchanged — same ports and firewall rules as v1.1.1. + +## Highlights + +* **Consumer block stream.** Opt-in, read-only WebSocket and gRPC feed of the beacon blocks the gateway already decodes. Off by default (`stream_enable: false`). Consumers authenticate with their own `osc_` keys from the [Partner Console](https://console.getoptimum.io/), exchanged for a short-lived stream JWT. Live on **Hoodi and Mainnet**. See [Consumer Block Stream](06_block_stream.md). +* **Stream metrics.** When the stream is enabled, the telemetry port exports `mump2p_stream_*` series (open connections, events sent, events dropped on lag, auth failures). See [Metrics](metrics.md#consumer-block-stream). + +## Upgrade from v1.1.1 + +1. Pull and restart: + + ```bash + export OPT_API_KEY=ogw_live_xxx + docker pull getoptimum/gateway:v1.2.0 + docker restart optimum-gateway + ``` + +2. Confirm health and mesh: + + ```bash + curl -s http://localhost:48123/health | jq '.status, .checks' + curl -s http://localhost:48123/api/v1/self_info | jq '.mump2p.total_peers, .chain' + ``` + +No firewall or CL peering changes are required. To enable the consumer stream, add `stream_enable: true` and follow [Consumer Block Stream](06_block_stream.md). Listeners default to loopback (`127.0.0.1:9600` / `127.0.0.1:9601`). + +## Version Status + +| Version | Status | +| ----------- | ------------------------- | +| v1.2.0 | **CURRENT - recommended** | +| v1.1.1 | Previous | +| v1.0.2 | DEPRECATED / unsupported | +| v0.0.1-rc12 | REMOVED / unsupported | +| v0.0.1-rc11 | REMOVED / unsupported | diff --git a/go.mod b/go.mod index 8d33e1e..d7ef33e 100644 --- a/go.mod +++ b/go.mod @@ -438,19 +438,19 @@ require ( go.uber.org/zap v1.28.0 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.54.0 // indirect + golang.org/x/crypto v0.55.0 // indirect golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a // indirect golang.org/x/exp/typeparams v0.0.0-20260209203927-2842357ff358 // indirect - golang.org/x/mod v0.37.0 // indirect + golang.org/x/mod v0.38.0 // indirect golang.org/x/net v0.57.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect - golang.org/x/telemetry v0.0.0-20260625142307-59b4966ccb57 // indirect + golang.org/x/telemetry v0.0.0-20260708182218-49f421fb7959 // indirect golang.org/x/term v0.45.0 // indirect - golang.org/x/text v0.40.0 // indirect + golang.org/x/text v0.41.0 // indirect golang.org/x/time v0.15.0 // indirect - golang.org/x/tools v0.47.0 // indirect + golang.org/x/tools v0.48.0 // indirect gonum.org/v1/gonum v0.17.0 // indirect google.golang.org/api v0.272.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68 // indirect diff --git a/go.sum b/go.sum index 42b2373..3db8f73 100644 --- a/go.sum +++ b/go.sum @@ -1160,8 +1160,8 @@ golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= -golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk= +golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M= +golang.org/x/crypto v0.55.0/go.mod h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis= golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a h1:+3jdDGGB8NGb1Zktc737jlt3/A5f6UlwSzmvqUuufxw= golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a/go.mod h1:d2fgXJLVs4dYDHUk5lwMIfzRzSrWCfGZb0ZqeLa/Vcw= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= @@ -1178,8 +1178,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= -golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= +golang.org/x/mod v0.38.0 h1:MECBjubtXD7yj4HrhIUcywNaGeNVUdfVnxmPajOk4yk= +golang.org/x/mod v0.38.0/go.mod h1:V6Xz0pq8TQ3dGqVQ1FVHuelZpAL0uNhSkk9ogYP3c40= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1221,8 +1221,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20260625142307-59b4966ccb57 h1:nwGZBCt+FnXUrGsj5vjzAsEmkcaFvd82BbOjECiFYZc= -golang.org/x/telemetry v0.0.0-20260625142307-59b4966ccb57/go.mod h1:3AWMyWHS+caVoiEXpiq6+tzKA40J4vQT3MYr80ZtQpc= +golang.org/x/telemetry v0.0.0-20260708182218-49f421fb7959 h1:RJhm5l6Fo4rmEIcndxDllNhhf/fAx8qIm4t6A7vpm2A= +golang.org/x/telemetry v0.0.0-20260708182218-49f421fb7959/go.mod h1:LV7u5Oco+Z/g6XI7PqN+EUUUGGkEcmB1uj2ceI0fOVg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -1234,8 +1234,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= -golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= +golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1255,8 +1255,8 @@ golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0t golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= -golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= +golang.org/x/tools v0.48.0 h1:3+hClM1aLL5mjMKm5ovokw9epgRXPuu2tILgismM6RE= +golang.org/x/tools v0.48.0/go.mod h1:08xX0orndb/F7jJxGDicx061tyd5pcMto75YMAXr6lk= golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM= golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= diff --git a/integration/ethereum/config/sample.app_conf.yml b/integration/ethereum/config/sample.app_conf.yml index 8f23d37..c4fdef2 100644 --- a/integration/ethereum/config/sample.app_conf.yml +++ b/integration/ethereum/config/sample.app_conf.yml @@ -2,7 +2,7 @@ log_level: debug gateway_cluster_id: optimum_hoodi_v0_2 agent_lib_p2p_port: 33212 -agent_mump2p_port: 43213 +agent_mump2p_port: 33213 telemetry_enable: true telemetry_port: 48123 identity_libp2p_dir: /tmp/libp2p diff --git a/integration/ethereum/docker-compose.yml b/integration/ethereum/docker-compose.yml index a8f81b2..92eebdb 100644 --- a/integration/ethereum/docker-compose.yml +++ b/integration/ethereum/docker-compose.yml @@ -10,7 +10,7 @@ services: profiles: ["lite", "full", "geth", "nethermind", "teku", "prysm", "lighthouse", "nimbus", "lodestar"] ports: - "33212:33212" # libp2p port (CL clients connect here) - - "43213:43213" # mump2p agent port + - "33213:33213" # mump2p agent port - "48123:48123" # Telemetry/metrics port volumes: - ./config:/app/config # Config directory (must contain app_conf.yml) diff --git a/integration/obol/.env.optimum.sample b/integration/obol/.env.optimum.sample index c3d309c..88fcae7 100644 --- a/integration/obol/.env.optimum.sample +++ b/integration/obol/.env.optimum.sample @@ -9,5 +9,5 @@ OPT_API_KEY=ogw_live_... # Optional port overrides (defaults shown): # GATEWAY_PORT_LIBP2P=33212 -# GATEWAY_PORT_MUMP2P=43213 +# GATEWAY_PORT_MUMP2P=33213 # GATEWAY_PORT_TELEMETRY=48123 diff --git a/integration/obol/compose-optimum.yml b/integration/obol/compose-optimum.yml index 648ae29..f9f92e4 100644 --- a/integration/obol/compose-optimum.yml +++ b/integration/obol/compose-optimum.yml @@ -8,7 +8,7 @@ services: restart: unless-stopped ports: - "${GATEWAY_PORT_LIBP2P:-33212}:33212" - - "${GATEWAY_PORT_MUMP2P:-43213}:43213" + - "${GATEWAY_PORT_MUMP2P:-33213}:33213" - "${GATEWAY_PORT_TELEMETRY:-48123}:48123" volumes: - ./optimum/config:/app/config diff --git a/integration/obol/config/sample.app_conf.yml b/integration/obol/config/sample.app_conf.yml index 288baf4..ed03d6d 100644 --- a/integration/obol/config/sample.app_conf.yml +++ b/integration/obol/config/sample.app_conf.yml @@ -2,7 +2,7 @@ log_level: info gateway_cluster_id: optimum_hoodi_v0_2 agent_lib_p2p_port: 33212 -agent_mump2p_port: 43213 +agent_mump2p_port: 33213 telemetry_enable: true telemetry_port: 48123 identity_libp2p_dir: /tmp/libp2p