@cryptotaxi247 / kubo / commits / a22efea6f

provider: clear provide queue when reprovide strategy changes (#10863)

* provider: clear reprovide queue when reprovide strategy changes When the currently configured reprovide strategy does not match the previous strategy read from the datastore, then clear the reprovide queue and update the reprovide strategy that is stored in the datastore. Depends on https://github.com/ipfs/boxo/pull/978 Closes #10829 * Update docs/changelogs/v0.36.md Co-authored-by: Guillaume Michel <guillaumemichel@users.noreply.github.com> * update log message * update boxo * Move change log to v0.37.md * Add `provide clear` command to clear provide queue The `provide clear` command clears all items from the provide queue and prints out the number of items removed from the queue. The `quiet` option tells the command not to print output. * refactor(cmds): ipfs provide clear moving to new namespace to avoid conflicts, and also document other commands * docs: clarify Reprovider.Strategy * chore: remove undesired md link

Andrew Gillis committed Jul 16, 2025 at 01:28 UTC a22efea6f337c6e6fc30265fb52fb083f629e154
14 files changed +343 -114
core/commands/commands_test.go
+2
@@ -163,6 +163,8 @@ func TestCommands(t *testing.T) {
163 "/pin/update",
164 "/pin/verify",
165 "/ping",
166 + "/provide",
167 + "/provide/clear",
168 "/pubsub",
169 "/pubsub/ls",
170 "/pubsub/peers",
core/commands/provide.go new
+82
@@ -0,0 +1,82 @@
1 +package commands
2 +
3 +import (
4 + "fmt"
5 + "io"
6 +
7 + cmds "github.com/ipfs/go-ipfs-cmds"
8 + cmdenv "github.com/ipfs/kubo/core/commands/cmdenv"
9 +)
10 +
11 +const (
12 + provideQuietOptionName = "quiet"
13 +)
14 +
15 +var ProvideCmd = &cmds.Command{
16 + Status: cmds.Experimental,
17 + Helptext: cmds.HelpText{
18 + Tagline: "Control providing operations",
19 + ShortDescription: `
20 +Control providing operations.
21 +
22 +NOTE: This command is experimental and not all provide-related commands have
23 +been migrated to this namespace yet. For example, 'ipfs routing
24 +provide|reprovide' are still under the routing namespace, 'ipfs stats
25 +reprovide' provides statistics. Additionally, 'ipfs bitswap reprovide' and
26 +'ipfs stats provide' are deprecated.
27 +`,
28 + },
29 +
30 + Subcommands: map[string]*cmds.Command{
31 + "clear": ProvideClearCmd,
32 + },
33 +}
34 +
35 +var ProvideClearCmd = &cmds.Command{
36 + Status: cmds.Experimental,
37 + Helptext: cmds.HelpText{
38 + Tagline: "Clear all CIDs from the provide queue.",
39 + ShortDescription: `
40 +Clear all CIDs from the reprovide queue.
41 +
42 +Note: Kubo will automatically clear the queue when it detects a change of
43 +Reprovider.Strategy upon a restart. For more information about reprovider
44 +strategies, see:
45 +https://github.com/ipfs/kubo/blob/master/docs/config.md#reproviderstrategy
46 +`,
47 + },
48 + Options: []cmds.Option{
49 + cmds.BoolOption(provideQuietOptionName, "q", "Do not write output."),
50 + },
51 + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error {
52 + n, err := cmdenv.GetNode(env)
53 + if err != nil {
54 + return err
55 + }
56 +
57 + quiet, _ := req.Options[provideQuietOptionName].(bool)
58 + if n.Provider == nil {
59 + return nil
60 + }
61 +
62 + cleared := n.Provider.Clear()
63 + if quiet {
64 + return nil
65 + }
66 + _ = re.Emit(cleared)
67 +
68 + return nil
69 + },
70 + Type: int(0),
71 + Encoders: cmds.EncoderMap{
72 + cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, cleared int) error {
73 + quiet, _ := req.Options[provideQuietOptionName].(bool)
74 + if quiet {
75 + return nil
76 + }
77 +
78 + _, err := fmt.Fprintf(w, "removed %d items from provide queue\n", cleared)
79 + return err
80 + }),
81 + },
82 +}
core/commands/root.go
+2
@@ -65,6 +65,7 @@ ADVANCED COMMANDS
65 p2p Libp2p stream mounting (experimental)
66 filestore Manage the filestore (experimental)
67 mount Mount an IPFS read-only mount point (experimental)
68 + provide Control providing operations
69
70 NETWORK COMMANDS
71 id Show info about IPFS peers
@@ -133,6 +134,7 @@ var rootSubcommands = map[string]*cmds.Command{
134 "files": FilesCmd,
135 "filestore": FileStoreCmd,
136 "get": GetCmd,
137 + "provide": ProvideCmd,
138 "pubsub": PubsubCmd,
139 "repo": RepoCmd,
140 "stats": StatsCmd,
core/node/provider.go
+33 -3
@@ -2,6 +2,7 @@ package node
2
3 import (
4 "context"
5 + "errors"
6 "fmt"
7 "time"
8
@@ -11,6 +12,7 @@ import (
12 pin "github.com/ipfs/boxo/pinning/pinner"
13 provider "github.com/ipfs/boxo/provider"
14 "github.com/ipfs/go-cid"
15 + "github.com/ipfs/go-datastore"
16 "github.com/ipfs/kubo/repo"
17 irouting "github.com/ipfs/kubo/routing"
18 "go.uber.org/fx"
@@ -21,7 +23,10 @@ import (
23 // and in 'ipfs stats provide' report.
24 const sampledBatchSize = 1000
25
24 -func ProviderSys(reprovideInterval time.Duration, acceleratedDHTClient bool, provideWorkerCount int) fx.Option {
26 +// Datastore key used to store previous reprovide strategy.
27 +const reprovideStrategyKey = "/reprovideStrategy"
28 +
29 +func ProviderSys(reprovideInterval time.Duration, acceleratedDHTClient bool, provideWorkerCount int, reprovideStrategy string) fx.Option {
30 return fx.Provide(func(lc fx.Lifecycle, cr irouting.ProvideManyRouter, keyProvider provider.KeyChanFunc, repo repo.Repo, bs blockstore.Blockstore) (provider.System, error) {
31 opts := []provider.Option{
32 provider.Online(cr),
@@ -114,10 +119,35 @@ https://github.com/ipfs/kubo/blob/master/docs/config.md#routingaccelerateddhtcli
119 return false
120 }, sampledBatchSize))
121 }
117 - sys, err := provider.New(repo.Datastore(), opts...)
122 +
123 + var strategyChanged bool
124 + ctx := context.Background()
125 + ds := repo.Datastore()
126 + strategyKey := datastore.NewKey(reprovideStrategyKey)
127 +
128 + prev, err := ds.Get(ctx, strategyKey)
129 + if err != nil && !errors.Is(err, datastore.ErrNotFound) {
130 + logger.Error("cannot read previous reprovide strategy", "err", err)
131 + } else if string(prev) != reprovideStrategy {
132 + strategyChanged = true
133 + }
134 +
135 + sys, err := provider.New(ds, opts...)
136 if err != nil {
137 return nil, err
138 }
139 + if strategyChanged {
140 + logger.Infow("Reprovider.Strategy changed, clearing provide queue", "previous", string(prev), "current", reprovideStrategy)
141 + sys.Clear()
142 + if reprovideStrategy == "" {
143 + err = ds.Delete(ctx, strategyKey)
144 + } else {
145 + err = ds.Put(ctx, strategyKey, []byte(reprovideStrategy))
146 + }
147 + if err != nil {
148 + logger.Error("cannot update reprovide strategy", "err", err)
149 + }
150 + }
151
152 lc.Append(fx.Hook{
153 OnStop: func(ctx context.Context) error {
@@ -147,7 +177,7 @@ func OnlineProviders(provide bool, reprovideStrategy string, reprovideInterval t
177
178 return fx.Options(
179 keyProvider,
150 - ProviderSys(reprovideInterval, acceleratedDHTClient, provideWorkerCount),
180 + ProviderSys(reprovideInterval, acceleratedDHTClient, provideWorkerCount, reprovideStrategy),
181 )
182 }
183
docs/changelogs/v0.36.md
+1 -1
@@ -215,7 +215,7 @@ The `ipfs config edit` command did not correctly handle the `EDITOR` environment
215 - chore: update to boxo merkledag package
216 - feat: car debug handles the zero length block ([ipld/go-car#569](https://github.com/ipld/go-car/pull/569))
217 - chore(deps): bump github.com/rogpeppe/go-internal from 1.13.1 to 1.14.1 in /cmd ([ipld/go-car#566](https://github.com/ipld/go-car/pull/566))
218 - - Add a concatination cli utility ([ipld/go-car#565](https://github.com/ipld/go-car/pull/565))
218 + - Add a concatenation cli utility ([ipld/go-car#565](https://github.com/ipld/go-car/pull/565))
219 - github.com/ipld/go-codec-dagpb (v1.6.0 -> v1.7.0):
220 - chore: v1.7.0 bump
221 - github.com/libp2p/go-flow-metrics (v0.2.0 -> v0.3.0):
docs/changelogs/v0.37.md
+15 -1
@@ -10,7 +10,8 @@ This release was brought to you by the [Interplanetary Shipyard](https://ipship
10
11 - [Overview](#overview)
12 - [🔦 Highlights](#-highlights)
13 - - [📦️ Important dependency updates](#-important-dependency-updates)
13 + - [Clear provide queue when reprovide strategy changes](#clear-provide-queue-when-reprovide-strategy-changes)
14 +- [📦️ Important dependency updates](#-important-dependency-updates)
15 - [📝 Changelog](#-changelog)
16 - [👨‍👩‍👧‍👦 Contributors](#-contributors)
17
@@ -18,8 +19,21 @@ This release was brought to you by the [Interplanetary Shipyard](https://ipship
19
20 ### 🔦 Highlights
21
22 +#### Clear provide queue when reprovide strategy changes
23 +
24 +Your content sharing strategy changes now take effect cleanly, without interference from previously queued items.
25 +
26 +When you change [`Reprovider.Strategy`](https://github.com/ipfs/kubo/blob/master/docs/config.md#reproviderstrategy) and restart Kubo, the provide queue is automatically cleared. This ensures only content matching your new strategy will be announced to the network.
27 +
28 +A new `ipfs provide clear` command also allows manual queue clearing for debugging purposes.
29 +
30 +> [!NOTE]
31 +> Upgrading to Kubo 0.37 will automatically clear any preexisting provide queue. The next time `Reprovider.Interval` hits, `Reprovider.Strategy` will be executed on a clean slate, ensuring consistent behavior with your current configuration.
32 +
33 #### 📦️ Important dependency updates
34
35 +- update `boxo` to [v0.34.0](https://github.com/ipfs/boxo/releases/tag/v0.34.0)
36 +
37 ### 📝 Changelog
38
39 ### 👨‍👩‍👧‍👦 Contributors
docs/config.md
+7 -4
@@ -1839,10 +1839,13 @@ Tells reprovider what should be announced. Valid strategies are:
1839 - Order: first `pinned` and then the locally available part of `mfs`.
1840 - `"flat"` - same as `all`, announce all CIDs of stored blocks, but without prioritizing anything.
1841
1842 -> [!IMPORTANT]
1843 -> Reproviding larger pinsets using the `all`, `mfs`, `pinned`, `pinned+mfs` or `roots` strategies requires additional memory, with an estimated ~1 GiB of RAM per 20 million items for reproviding to the Amino DHT.
1844 -> This is due to the use of a buffered provider, which avoids holding a lock on the entire pinset during the reprovide cycle.
1845 -> The `flat` strategy can be used to lower memory requirements, but only recommended if memory utilization is too high, prioritization of pins is not necessary, and it is acceptable to announce every block cached in the local repository.
1842 +**Strategy changes automatically clear the provide queue.** When you change `Reprovider.Strategy` and restart Kubo, the provide queue is automatically cleared to ensure only content matching your new strategy is announced. You can also manually clear the queue using `ipfs provide clear`.
1843 +
1844 +**Memory requirements:**
1845 +
1846 +- Reproviding larger pinsets using the `all`, `mfs`, `pinned`, `pinned+mfs` or `roots` strategies requires additional memory, with an estimated ~1 GiB of RAM per 20 million items for reproviding to the Amino DHT.
1847 +- This is due to the use of a buffered provider, which avoids holding a lock on the entire pinset during the reprovide cycle.
1848 +- The `flat` strategy can be used to lower memory requirements, but only recommended if memory utilization is too high, prioritization of pins is not necessary, and it is acceptable to announce every block cached in the local repository.
1849
1850 Default: `"all"`
1851
docs/examples/kubo-as-a-library/go.mod
+16 -16
@@ -7,7 +7,7 @@ go 1.24
7 replace github.com/ipfs/kubo => ./../../..
8
9 require (
10 - github.com/ipfs/boxo v0.33.0
10 + github.com/ipfs/boxo v0.33.1-0.20250710085426-6cfa79448bb1
11 github.com/ipfs/kubo v0.0.0-00010101000000-000000000000
12 github.com/libp2p/go-libp2p v0.42.0
13 github.com/multiformats/go-multiaddr v0.16.0
@@ -26,6 +26,7 @@ require (
26 github.com/caddyserver/certmagic v0.23.0 // indirect
27 github.com/caddyserver/zerossl v0.1.3 // indirect
28 github.com/cenkalti/backoff/v4 v4.3.0 // indirect
29 + github.com/cenkalti/backoff/v5 v5.0.2 // indirect
30 github.com/ceramicnetwork/go-dag-jose v0.1.1 // indirect
31 github.com/cespare/xxhash/v2 v2.3.0 // indirect
32 github.com/cockroachdb/crlib v0.0.0-20241015224233-894974b3ad94 // indirect
@@ -49,7 +50,7 @@ require (
50 github.com/flynn/noise v1.1.0 // indirect
51 github.com/francoispqt/gojay v1.2.13 // indirect
52 github.com/fsnotify/fsnotify v1.7.0 // indirect
52 - github.com/gabriel-vasile/mimetype v1.4.6 // indirect
53 + github.com/gabriel-vasile/mimetype v1.4.9 // indirect
54 github.com/gammazero/chanqueue v1.1.0 // indirect
55 github.com/gammazero/deque v1.0.0 // indirect
56 github.com/getsentry/sentry-go v0.27.0 // indirect
@@ -65,7 +66,7 @@ require (
66 github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a // indirect
67 github.com/google/uuid v1.6.0 // indirect
68 github.com/gorilla/websocket v1.5.3 // indirect
68 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
69 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect
70 github.com/hashicorp/golang-lru v1.0.2 // indirect
71 github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
72 github.com/huin/goupnp v1.3.0 // indirect
@@ -128,7 +129,7 @@ require (
129 github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
130 github.com/mattn/go-isatty v0.0.20 // indirect
131 github.com/mholt/acmez/v3 v3.1.2 // indirect
131 - github.com/miekg/dns v1.1.66 // indirect
132 + github.com/miekg/dns v1.1.67 // indirect
133 github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect
134 github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
135 github.com/minio/sha256-simd v1.0.1 // indirect
@@ -177,7 +178,6 @@ require (
178 github.com/quic-go/quic-go v0.52.0 // indirect
179 github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 // indirect
180 github.com/rogpeppe/go-internal v1.13.1 // indirect
180 - github.com/samber/lo v1.47.0 // indirect
181 github.com/spaolacci/murmur3 v1.1.0 // indirect
182 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
183 github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect
@@ -191,17 +191,17 @@ require (
191 github.com/zeebo/blake3 v0.2.4 // indirect
192 go.opencensus.io v0.24.0 // indirect
193 go.opentelemetry.io/auto/sdk v1.1.0 // indirect
194 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect
194 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect
195 go.opentelemetry.io/otel v1.37.0 // indirect
196 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 // indirect
197 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 // indirect
198 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 // indirect
199 - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0 // indirect
200 - go.opentelemetry.io/otel/exporters/zipkin v1.31.0 // indirect
196 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect
197 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect
198 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 // indirect
199 + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0 // indirect
200 + go.opentelemetry.io/otel/exporters/zipkin v1.37.0 // indirect
201 go.opentelemetry.io/otel/metric v1.37.0 // indirect
202 - go.opentelemetry.io/otel/sdk v1.31.0 // indirect
202 + go.opentelemetry.io/otel/sdk v1.37.0 // indirect
203 go.opentelemetry.io/otel/trace v1.37.0 // indirect
204 - go.opentelemetry.io/proto/otlp v1.3.1 // indirect
204 + go.opentelemetry.io/proto/otlp v1.7.0 // indirect
205 go.uber.org/automaxprocs v1.6.0 // indirect
206 go.uber.org/dig v1.19.0 // indirect
207 go.uber.org/fx v1.24.0 // indirect
@@ -221,9 +221,9 @@ require (
221 golang.org/x/tools v0.34.0 // indirect
222 golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
223 gonum.org/v1/gonum v0.16.0 // indirect
224 - google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect
225 - google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 // indirect
226 - google.golang.org/grpc v1.67.1 // indirect
224 + google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect
225 + google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
226 + google.golang.org/grpc v1.73.0 // indirect
227 google.golang.org/protobuf v1.36.6 // indirect
228 gopkg.in/yaml.v3 v3.0.1 // indirect
229 lukechampine.com/blake3 v1.4.1 // indirect
docs/examples/kubo-as-a-library/go.sum
+34 -32
@@ -67,6 +67,8 @@ github.com/caddyserver/zerossl v0.1.3 h1:onS+pxp3M8HnHpN5MMbOMyNjmTheJyWRaZYwn+Y
67 github.com/caddyserver/zerossl v0.1.3/go.mod h1:CxA0acn7oEGO6//4rtrRjYgEoa4MFw/XofZnrYwGqG4=
68 github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
69 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
70 +github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
71 +github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
72 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
73 github.com/ceramicnetwork/go-dag-jose v0.1.1 h1:7pObs22egc14vSS3AfCFfS1VmaL4lQUsAK7OGC3PlKk=
74 github.com/ceramicnetwork/go-dag-jose v0.1.1/go.mod h1:8ptnYwY2Z2y/s5oJnNBn/UCxLg6CpramNJ2ZXF/5aNY=
@@ -157,8 +159,8 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4
159 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
160 github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
161 github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
160 -github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc=
161 -github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc=
162 +github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY=
163 +github.com/gabriel-vasile/mimetype v1.4.9/go.mod h1:WnSQhFKJuBlRyLiKohA/2DtIlPFAbguNaG7QCHcyGok=
164 github.com/gammazero/chanqueue v1.1.0 h1:yiwtloc1azhgGLFo2gMloJtQvkYD936Ai7tBfa+rYJw=
165 github.com/gammazero/chanqueue v1.1.0/go.mod h1:fMwpwEiuUgpab0sH4VHiVcEoji1pSi+EIzeG4TPeKPc=
166 github.com/gammazero/deque v1.0.0 h1:LTmimT8H7bXkkCy6gZX7zNLtkbz4NdS2z8LZuor3j34=
@@ -266,8 +268,8 @@ github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aN
268 github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
269 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
270 github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
269 -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
270 -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
271 +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww=
272 +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90=
273 github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU=
274 github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48=
275 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
@@ -289,8 +291,8 @@ github.com/ipfs-shipyard/nopfs/ipfs v0.25.0 h1:OqNqsGZPX8zh3eFMO8Lf8EHRRnSGBMqcd
291 github.com/ipfs-shipyard/nopfs/ipfs v0.25.0/go.mod h1:BxhUdtBgOXg1B+gAPEplkg/GpyTZY+kCMSfsJvvydqU=
292 github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
293 github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
292 -github.com/ipfs/boxo v0.33.0 h1:9ow3chwkDzMj0Deq4AWRUEI7WnIIV7SZhPTzzG2mmfw=
293 -github.com/ipfs/boxo v0.33.0/go.mod h1:3IPh7YFcCIcKp6o02mCHovrPntoT5Pctj/7j4syh/RM=
294 +github.com/ipfs/boxo v0.33.1-0.20250710085426-6cfa79448bb1 h1:ZzGKxEqait8lqsEiZ7/esJKELW1/+/Y8swpRgjOZHK0=
295 +github.com/ipfs/boxo v0.33.1-0.20250710085426-6cfa79448bb1/go.mod h1:Cvy+GW4Noex2jaoTsOM+RYQdXhjNAk09s313vkOyYmA=
296 github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA=
297 github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU=
298 github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk=
@@ -479,8 +481,8 @@ github.com/mholt/acmez/v3 v3.1.2 h1:auob8J/0FhmdClQicvJvuDavgd5ezwLBfKuYmynhYzc=
481 github.com/mholt/acmez/v3 v3.1.2/go.mod h1:L1wOU06KKvq7tswuMDwKdcHeKpFFgkppZy/y0DFxagQ=
482 github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
483 github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
482 -github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE=
483 -github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE=
484 +github.com/miekg/dns v1.1.67 h1:kg0EHj0G4bfT5/oOys6HhZw4vmMlnoZ+gDu8tJ/AlI0=
485 +github.com/miekg/dns v1.1.67/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
486 github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8=
487 github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms=
488 github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc=
@@ -656,8 +658,6 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN
658 github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
659 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
660 github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
659 -github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=
660 -github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
661 github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
662 github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY=
663 github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM=
@@ -779,28 +779,30 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
779 go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
780 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
781 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
782 -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s=
783 -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM=
782 +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU=
783 +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY=
784 go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
785 go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
786 -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 h1:K0XaT3DwHAcV4nKLzcQvwAgSyisUghWoY20I7huthMk=
787 -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0/go.mod h1:B5Ki776z/MBnVha1Nzwp5arlzBbE3+1jk+pGmaP5HME=
788 -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU=
789 -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o=
790 -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 h1:lUsI2TYsQw2r1IASwoROaCnjdj2cvC2+Jbxvk6nHnWU=
791 -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0/go.mod h1:2HpZxxQurfGxJlJDblybejHB6RX6pmExPNe517hREw4=
792 -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0 h1:UGZ1QwZWY67Z6BmckTU+9Rxn04m2bD3gD6Mk0OIOCPk=
793 -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0/go.mod h1:fcwWuDuaObkkChiDlhEpSq9+X1C0omv+s5mBtToAQ64=
794 -go.opentelemetry.io/otel/exporters/zipkin v1.31.0 h1:CgucL0tj3717DJnni7HVVB2wExzi8c2zJNEA2BhLMvI=
795 -go.opentelemetry.io/otel/exporters/zipkin v1.31.0/go.mod h1:rfzOVNiSwIcWtEC2J8epwG26fiaXlYvLySJ7bwsrtAE=
786 +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM=
787 +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M=
788 +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc=
789 +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI=
790 +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 h1:bDMKF3RUSxshZ5OjOTi8rsHGaPKsAt76FaqgvIUySLc=
791 +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0/go.mod h1:dDT67G/IkA46Mr2l9Uj7HsQVwsjASyV9SjGofsiUZDA=
792 +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0 h1:SNhVp/9q4Go/XHBkQ1/d5u9P/U+L1yaGPoi0x+mStaI=
793 +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0/go.mod h1:tx8OOlGH6R4kLV67YaYO44GFXloEjGPZuMjEkaaqIp4=
794 +go.opentelemetry.io/otel/exporters/zipkin v1.37.0 h1:Z2apuaRnHEjzDAkpbWNPiksz1R0/FCIrJSjiMA43zwI=
795 +go.opentelemetry.io/otel/exporters/zipkin v1.37.0/go.mod h1:ofGu/7fG+bpmjZoiPUUmYDJ4vXWxMT57HmGoegx49uw=
796 go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
797 go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
798 -go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
799 -go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
798 +go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
799 +go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
800 +go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
801 +go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
802 go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
803 go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
802 -go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
803 -go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
804 +go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os=
805 +go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo=
806 go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
807 go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
808 go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
@@ -1091,10 +1093,10 @@ google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvx
1093 google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
1094 google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
1095 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
1094 -google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 h1:T6rh4haD3GVYsgEfWExoCZA2o2FmbNyKpTuAxbEFPTg=
1095 -google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:wp2WsuBYj6j8wUdo3ToZsdxxixbvQNAHqVJrTgi5E5M=
1096 -google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 h1:QCqS/PdaHTSWGvupk2F/ehwHtGc0/GYkT+3GAcR1CCc=
1097 -google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
1096 +google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 h1:oWVWY3NzT7KJppx2UKhKmzPq4SRe0LdCijVRwvGeikY=
1097 +google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822/go.mod h1:h3c4v36UTKzUiuaOKQ6gr3S+0hovBtUrXzTG/i3+XEc=
1098 +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE=
1099 +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
1100 google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
1101 google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
1102 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
@@ -1107,8 +1109,8 @@ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
1109 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
1110 google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
1111 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
1110 -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E=
1111 -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=
1112 +google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
1113 +google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc=
1114 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
1115 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
1116 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
go.mod
+16 -16
@@ -22,7 +22,7 @@ require (
22 github.com/hashicorp/go-version v1.7.0
23 github.com/ipfs-shipyard/nopfs v0.0.14
24 github.com/ipfs-shipyard/nopfs/ipfs v0.25.0
25 - github.com/ipfs/boxo v0.33.0
25 + github.com/ipfs/boxo v0.33.1-0.20250710085426-6cfa79448bb1
26 github.com/ipfs/go-block-format v0.2.2
27 github.com/ipfs/go-cid v0.5.0
28 github.com/ipfs/go-cidutil v0.1.0
@@ -77,10 +77,10 @@ require (
77 github.com/whyrusleeping/go-sysinfo v0.0.0-20190219211824-4a357d4b90b1
78 github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7
79 go.opencensus.io v0.24.0
80 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0
80 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0
81 go.opentelemetry.io/contrib/propagators/autoprop v0.46.1
82 go.opentelemetry.io/otel v1.37.0
83 - go.opentelemetry.io/otel/sdk v1.31.0
83 + go.opentelemetry.io/otel/sdk v1.37.0
84 go.opentelemetry.io/otel/trace v1.37.0
85 go.uber.org/dig v1.19.0
86 go.uber.org/fx v1.24.0
@@ -103,6 +103,7 @@ require (
103 github.com/benbjohnson/clock v1.3.5 // indirect
104 github.com/beorn7/perks v1.0.1 // indirect
105 github.com/caddyserver/zerossl v0.1.3 // indirect
106 + github.com/cenkalti/backoff/v5 v5.0.2 // indirect
107 github.com/cespare/xxhash v1.1.0 // indirect
108 github.com/cespare/xxhash/v2 v2.3.0 // indirect
109 github.com/cockroachdb/crlib v0.0.0-20241015224233-894974b3ad94 // indirect
@@ -124,7 +125,7 @@ require (
125 github.com/felixge/httpsnoop v1.0.4 // indirect
126 github.com/flynn/noise v1.1.0 // indirect
127 github.com/francoispqt/gojay v1.2.13 // indirect
127 - github.com/gabriel-vasile/mimetype v1.4.6 // indirect
128 + github.com/gabriel-vasile/mimetype v1.4.9 // indirect
129 github.com/gammazero/chanqueue v1.1.0 // indirect
130 github.com/gammazero/deque v1.0.0 // indirect
131 github.com/getsentry/sentry-go v0.27.0 // indirect
@@ -142,7 +143,7 @@ require (
143 github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a // indirect
144 github.com/gorilla/mux v1.8.1 // indirect
145 github.com/gorilla/websocket v1.5.3 // indirect
145 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
146 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect
147 github.com/hashicorp/golang-lru v1.0.2 // indirect
148 github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
149 github.com/huin/goupnp v1.3.0 // indirect
@@ -177,7 +178,7 @@ require (
178 github.com/mattn/go-runewidth v0.0.15 // indirect
179 github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
180 github.com/mholt/acmez/v3 v3.1.2 // indirect
180 - github.com/miekg/dns v1.1.66 // indirect
181 + github.com/miekg/dns v1.1.67 // indirect
182 github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect
183 github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
184 github.com/minio/sha256-simd v1.0.1 // indirect
@@ -223,7 +224,6 @@ require (
224 github.com/rivo/uniseg v0.4.4 // indirect
225 github.com/rogpeppe/go-internal v1.13.1 // indirect
226 github.com/rs/cors v1.11.1 // indirect
226 - github.com/samber/lo v1.47.0 // indirect
227 github.com/slok/go-http-metrics v0.13.0 // indirect
228 github.com/spaolacci/murmur3 v1.1.0 // indirect
229 github.com/texttheater/golang-levenshtein v1.0.1 // indirect
@@ -242,13 +242,13 @@ require (
242 go.opentelemetry.io/contrib/propagators/b3 v1.21.1 // indirect
243 go.opentelemetry.io/contrib/propagators/jaeger v1.21.1 // indirect
244 go.opentelemetry.io/contrib/propagators/ot v1.21.1 // indirect
245 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 // indirect
246 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 // indirect
247 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 // indirect
248 - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0 // indirect
249 - go.opentelemetry.io/otel/exporters/zipkin v1.31.0 // indirect
245 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect
246 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect
247 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 // indirect
248 + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0 // indirect
249 + go.opentelemetry.io/otel/exporters/zipkin v1.37.0 // indirect
250 go.opentelemetry.io/otel/metric v1.37.0 // indirect
251 - go.opentelemetry.io/proto/otlp v1.3.1 // indirect
251 + go.opentelemetry.io/proto/otlp v1.7.0 // indirect
252 go.uber.org/automaxprocs v1.6.0 // indirect
253 go.uber.org/mock v0.5.2 // indirect
254 go.uber.org/zap/exp v0.3.0 // indirect
@@ -261,9 +261,9 @@ require (
261 golang.org/x/tools v0.34.0 // indirect
262 golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
263 gonum.org/v1/gonum v0.16.0 // indirect
264 - google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect
265 - google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 // indirect
266 - google.golang.org/grpc v1.67.1 // indirect
264 + google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect
265 + google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
266 + google.golang.org/grpc v1.73.0 // indirect
267 gopkg.in/yaml.v2 v2.4.0 // indirect
268 gopkg.in/yaml.v3 v3.0.1 // indirect
269 lukechampine.com/blake3 v1.4.1 // indirect
go.sum
+34 -32
@@ -94,6 +94,8 @@ github.com/caddyserver/zerossl v0.1.3 h1:onS+pxp3M8HnHpN5MMbOMyNjmTheJyWRaZYwn+Y
94 github.com/caddyserver/zerossl v0.1.3/go.mod h1:CxA0acn7oEGO6//4rtrRjYgEoa4MFw/XofZnrYwGqG4=
95 github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
96 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
97 +github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
98 +github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
99 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
100 github.com/ceramicnetwork/go-dag-jose v0.1.1 h1:7pObs22egc14vSS3AfCFfS1VmaL4lQUsAK7OGC3PlKk=
101 github.com/ceramicnetwork/go-dag-jose v0.1.1/go.mod h1:8ptnYwY2Z2y/s5oJnNBn/UCxLg6CpramNJ2ZXF/5aNY=
@@ -195,8 +197,8 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4
197 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
198 github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
199 github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
198 -github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc=
199 -github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc=
200 +github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY=
201 +github.com/gabriel-vasile/mimetype v1.4.9/go.mod h1:WnSQhFKJuBlRyLiKohA/2DtIlPFAbguNaG7QCHcyGok=
202 github.com/gammazero/chanqueue v1.1.0 h1:yiwtloc1azhgGLFo2gMloJtQvkYD936Ai7tBfa+rYJw=
203 github.com/gammazero/chanqueue v1.1.0/go.mod h1:fMwpwEiuUgpab0sH4VHiVcEoji1pSi+EIzeG4TPeKPc=
204 github.com/gammazero/deque v1.0.0 h1:LTmimT8H7bXkkCy6gZX7zNLtkbz4NdS2z8LZuor3j34=
@@ -331,8 +333,8 @@ github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aN
333 github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
334 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
335 github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
334 -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
335 -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
336 +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww=
337 +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90=
338 github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU=
339 github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48=
340 github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
@@ -356,8 +358,8 @@ github.com/ipfs-shipyard/nopfs/ipfs v0.25.0 h1:OqNqsGZPX8zh3eFMO8Lf8EHRRnSGBMqcd
358 github.com/ipfs-shipyard/nopfs/ipfs v0.25.0/go.mod h1:BxhUdtBgOXg1B+gAPEplkg/GpyTZY+kCMSfsJvvydqU=
359 github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
360 github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
359 -github.com/ipfs/boxo v0.33.0 h1:9ow3chwkDzMj0Deq4AWRUEI7WnIIV7SZhPTzzG2mmfw=
360 -github.com/ipfs/boxo v0.33.0/go.mod h1:3IPh7YFcCIcKp6o02mCHovrPntoT5Pctj/7j4syh/RM=
361 +github.com/ipfs/boxo v0.33.1-0.20250710085426-6cfa79448bb1 h1:ZzGKxEqait8lqsEiZ7/esJKELW1/+/Y8swpRgjOZHK0=
362 +github.com/ipfs/boxo v0.33.1-0.20250710085426-6cfa79448bb1/go.mod h1:Cvy+GW4Noex2jaoTsOM+RYQdXhjNAk09s313vkOyYmA=
363 github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA=
364 github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU=
365 github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk=
@@ -578,8 +580,8 @@ github.com/mholt/acmez/v3 v3.1.2 h1:auob8J/0FhmdClQicvJvuDavgd5ezwLBfKuYmynhYzc=
580 github.com/mholt/acmez/v3 v3.1.2/go.mod h1:L1wOU06KKvq7tswuMDwKdcHeKpFFgkppZy/y0DFxagQ=
581 github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
582 github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
581 -github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE=
582 -github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE=
583 +github.com/miekg/dns v1.1.67 h1:kg0EHj0G4bfT5/oOys6HhZw4vmMlnoZ+gDu8tJ/AlI0=
584 +github.com/miekg/dns v1.1.67/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
585 github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8=
586 github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms=
587 github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc=
@@ -790,8 +792,6 @@ github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU
792 github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
793 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
794 github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
793 -github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=
794 -github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
795 github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
796 github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY=
797 github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM=
@@ -935,8 +935,8 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
935 go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
936 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
937 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
938 -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s=
939 -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM=
938 +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU=
939 +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY=
940 go.opentelemetry.io/contrib/propagators/autoprop v0.46.1 h1:cXTYcMjY0dsYokAuo8LbNBQxpF8VgTHdiHJJ1zlIXl4=
941 go.opentelemetry.io/contrib/propagators/autoprop v0.46.1/go.mod h1:WZxgny1/6+j67B1s72PLJ4bGjidoWFzSmLNfJKVt2bo=
942 go.opentelemetry.io/contrib/propagators/aws v1.21.1 h1:uQIQIDWb0gzyvon2ICnghpLAf9w7ADOCUiIiwCQgR2o=
@@ -949,24 +949,26 @@ go.opentelemetry.io/contrib/propagators/ot v1.21.1 h1:3TN5vkXjKYWp0YdMcnUEC/A+pB
949 go.opentelemetry.io/contrib/propagators/ot v1.21.1/go.mod h1:oy0MYCbS/b3cqUDW37wBWtlwBIsutngS++Lklpgh+fc=
950 go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
951 go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
952 -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 h1:K0XaT3DwHAcV4nKLzcQvwAgSyisUghWoY20I7huthMk=
953 -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0/go.mod h1:B5Ki776z/MBnVha1Nzwp5arlzBbE3+1jk+pGmaP5HME=
954 -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU=
955 -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o=
956 -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 h1:lUsI2TYsQw2r1IASwoROaCnjdj2cvC2+Jbxvk6nHnWU=
957 -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0/go.mod h1:2HpZxxQurfGxJlJDblybejHB6RX6pmExPNe517hREw4=
958 -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0 h1:UGZ1QwZWY67Z6BmckTU+9Rxn04m2bD3gD6Mk0OIOCPk=
959 -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0/go.mod h1:fcwWuDuaObkkChiDlhEpSq9+X1C0omv+s5mBtToAQ64=
960 -go.opentelemetry.io/otel/exporters/zipkin v1.31.0 h1:CgucL0tj3717DJnni7HVVB2wExzi8c2zJNEA2BhLMvI=
961 -go.opentelemetry.io/otel/exporters/zipkin v1.31.0/go.mod h1:rfzOVNiSwIcWtEC2J8epwG26fiaXlYvLySJ7bwsrtAE=
952 +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM=
953 +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M=
954 +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc=
955 +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI=
956 +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 h1:bDMKF3RUSxshZ5OjOTi8rsHGaPKsAt76FaqgvIUySLc=
957 +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0/go.mod h1:dDT67G/IkA46Mr2l9Uj7HsQVwsjASyV9SjGofsiUZDA=
958 +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0 h1:SNhVp/9q4Go/XHBkQ1/d5u9P/U+L1yaGPoi0x+mStaI=
959 +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0/go.mod h1:tx8OOlGH6R4kLV67YaYO44GFXloEjGPZuMjEkaaqIp4=
960 +go.opentelemetry.io/otel/exporters/zipkin v1.37.0 h1:Z2apuaRnHEjzDAkpbWNPiksz1R0/FCIrJSjiMA43zwI=
961 +go.opentelemetry.io/otel/exporters/zipkin v1.37.0/go.mod h1:ofGu/7fG+bpmjZoiPUUmYDJ4vXWxMT57HmGoegx49uw=
962 go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
963 go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
964 -go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
965 -go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
964 +go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
965 +go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
966 +go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
967 +go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
968 go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
969 go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
968 -go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
969 -go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
970 +go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os=
971 +go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo=
972 go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
973 go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
974 go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
@@ -1348,10 +1350,10 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc
1350 google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
1351 google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
1352 google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
1351 -google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 h1:T6rh4haD3GVYsgEfWExoCZA2o2FmbNyKpTuAxbEFPTg=
1352 -google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:wp2WsuBYj6j8wUdo3ToZsdxxixbvQNAHqVJrTgi5E5M=
1353 -google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 h1:QCqS/PdaHTSWGvupk2F/ehwHtGc0/GYkT+3GAcR1CCc=
1354 -google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
1353 +google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 h1:oWVWY3NzT7KJppx2UKhKmzPq4SRe0LdCijVRwvGeikY=
1354 +google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822/go.mod h1:h3c4v36UTKzUiuaOKQ6gr3S+0hovBtUrXzTG/i3+XEc=
1355 +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE=
1356 +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
1357 google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
1358 google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
1359 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
@@ -1368,8 +1370,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
1370 google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
1371 google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
1372 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
1371 -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E=
1372 -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=
1373 +google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
1374 +google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc=
1375 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
1376 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
1377 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
test/cli/provider_test.go
+95
@@ -2,6 +2,7 @@ package cli
2
3 import (
4 "bytes"
5 + "encoding/json"
6 "testing"
7 "time"
8
@@ -219,4 +220,98 @@ func TestProvider(t *testing.T) {
220 expectProviders(t, cidBarDir, nodes[0].PeerID().String(), nodes[1:]...)
221 })
222
223 + t.Run("provide clear command removes items from provide queue", func(t *testing.T) {
224 + t.Parallel()
225 +
226 + nodes := harness.NewT(t).NewNodes(1).Init()
227 + nodes.ForEachPar(func(n *harness.Node) {
228 + n.SetIPFSConfig("Provider.Enabled", true)
229 + n.SetIPFSConfig("Reprovider.Interval", "22h")
230 + n.SetIPFSConfig("Reprovider.Strategy", "all")
231 + })
232 + nodes.StartDaemons()
233 + defer nodes.StopDaemons()
234 +
235 + // Clear the provide queue first time - works regardless of queue state
236 + res1 := nodes[0].IPFS("provide", "clear")
237 + require.NoError(t, res1.Err)
238 +
239 + // Should report cleared items and proper message format
240 + assert.Contains(t, res1.Stdout.String(), "removed")
241 + assert.Contains(t, res1.Stdout.String(), "items from provide queue")
242 +
243 + // Clear the provide queue second time - should definitely report 0 items
244 + res2 := nodes[0].IPFS("provide", "clear")
245 + require.NoError(t, res2.Err)
246 +
247 + // Should report 0 items cleared since queue was already cleared
248 + assert.Contains(t, res2.Stdout.String(), "removed 0 items from provide queue")
249 + })
250 +
251 + t.Run("provide clear command with quiet option", func(t *testing.T) {
252 + t.Parallel()
253 +
254 + nodes := harness.NewT(t).NewNodes(1).Init()
255 + nodes.ForEachPar(func(n *harness.Node) {
256 + n.SetIPFSConfig("Provider.Enabled", true)
257 + n.SetIPFSConfig("Reprovider.Interval", "22h")
258 + n.SetIPFSConfig("Reprovider.Strategy", "all")
259 + })
260 + nodes.StartDaemons()
261 + defer nodes.StopDaemons()
262 +
263 + // Clear the provide queue with quiet option
264 + res := nodes[0].IPFS("provide", "clear", "-q")
265 + require.NoError(t, res.Err)
266 +
267 + // Should have no output when quiet
268 + assert.Empty(t, res.Stdout.String())
269 + })
270 +
271 + t.Run("provide clear command works when provider is disabled", func(t *testing.T) {
272 + t.Parallel()
273 +
274 + nodes := harness.NewT(t).NewNodes(1).Init()
275 + nodes.ForEachPar(func(n *harness.Node) {
276 + n.SetIPFSConfig("Provider.Enabled", false)
277 + n.SetIPFSConfig("Reprovider.Interval", "22h")
278 + n.SetIPFSConfig("Reprovider.Strategy", "all")
279 + })
280 + nodes.StartDaemons()
281 + defer nodes.StopDaemons()
282 +
283 + // Clear should succeed even when provider is disabled
284 + res := nodes[0].IPFS("provide", "clear")
285 + require.NoError(t, res.Err)
286 + })
287 +
288 + t.Run("provide clear command returns JSON with removed item count", func(t *testing.T) {
289 + t.Parallel()
290 +
291 + nodes := harness.NewT(t).NewNodes(1).Init()
292 + nodes.ForEachPar(func(n *harness.Node) {
293 + n.SetIPFSConfig("Provider.Enabled", true)
294 + n.SetIPFSConfig("Reprovider.Interval", "22h")
295 + n.SetIPFSConfig("Reprovider.Strategy", "all")
296 + })
297 + nodes.StartDaemons()
298 + defer nodes.StopDaemons()
299 +
300 + // Clear the provide queue with JSON encoding
301 + res := nodes[0].IPFS("provide", "clear", "--enc=json")
302 + require.NoError(t, res.Err)
303 +
304 + // Should return valid JSON with the number of removed items
305 + output := res.Stdout.String()
306 + assert.NotEmpty(t, output)
307 +
308 + // Parse JSON to verify structure
309 + var result int
310 + err := json.Unmarshal([]byte(output), &result)
311 + require.NoError(t, err, "Output should be valid JSON")
312 +
313 + // Should be a non-negative integer (0 or positive)
314 + assert.GreaterOrEqual(t, result, 0)
315 + })
316 +
317 }
test/dependencies/go.mod
+2 -3
@@ -130,7 +130,7 @@ require (
130 github.com/huin/goupnp v1.3.0 // indirect
131 github.com/inconshreveable/mousetrap v1.1.0 // indirect
132 github.com/ipfs/bbloom v0.0.4 // indirect
133 - github.com/ipfs/boxo v0.33.0 // indirect
133 + github.com/ipfs/boxo v0.33.1-0.20250710085426-6cfa79448bb1 // indirect
134 github.com/ipfs/go-bitfield v1.1.0 // indirect
135 github.com/ipfs/go-block-format v0.2.2 // indirect
136 github.com/ipfs/go-cid v0.5.0 // indirect
@@ -189,7 +189,7 @@ require (
189 github.com/mattn/go-shellwords v1.0.12 // indirect
190 github.com/mgechev/revive v1.3.9 // indirect
191 github.com/mholt/acmez/v3 v3.1.2 // indirect
192 - github.com/miekg/dns v1.1.66 // indirect
192 + github.com/miekg/dns v1.1.67 // indirect
193 github.com/minio/sha256-simd v1.0.1 // indirect
194 github.com/mitchellh/go-homedir v1.1.0 // indirect
195 github.com/mitchellh/mapstructure v1.5.0 // indirect
@@ -254,7 +254,6 @@ require (
254 github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect
255 github.com/sagikazarmark/locafero v0.6.0 // indirect
256 github.com/sagikazarmark/slog-shim v0.1.0 // indirect
257 - github.com/samber/lo v1.47.0 // indirect
257 github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect
258 github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect
259 github.com/sashamelentyev/interfacebloat v1.1.0 // indirect
test/dependencies/go.sum
+4 -6
@@ -319,8 +319,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
319 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
320 github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
321 github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
322 -github.com/ipfs/boxo v0.33.0 h1:9ow3chwkDzMj0Deq4AWRUEI7WnIIV7SZhPTzzG2mmfw=
323 -github.com/ipfs/boxo v0.33.0/go.mod h1:3IPh7YFcCIcKp6o02mCHovrPntoT5Pctj/7j4syh/RM=
322 +github.com/ipfs/boxo v0.33.1-0.20250710085426-6cfa79448bb1 h1:ZzGKxEqait8lqsEiZ7/esJKELW1/+/Y8swpRgjOZHK0=
323 +github.com/ipfs/boxo v0.33.1-0.20250710085426-6cfa79448bb1/go.mod h1:Cvy+GW4Noex2jaoTsOM+RYQdXhjNAk09s313vkOyYmA=
324 github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA=
325 github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU=
326 github.com/ipfs/go-block-format v0.2.2 h1:uecCTgRwDIXyZPgYspaLXoMiMmxQpSx2aq34eNc4YvQ=
@@ -483,8 +483,8 @@ github.com/mgechev/revive v1.3.9/go.mod h1:+uxEIr5UH0TjXWHTno3xh4u7eg6jDpXKzQccA
483 github.com/mholt/acmez/v3 v3.1.2 h1:auob8J/0FhmdClQicvJvuDavgd5ezwLBfKuYmynhYzc=
484 github.com/mholt/acmez/v3 v3.1.2/go.mod h1:L1wOU06KKvq7tswuMDwKdcHeKpFFgkppZy/y0DFxagQ=
485 github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
486 -github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE=
487 -github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE=
486 +github.com/miekg/dns v1.1.67 h1:kg0EHj0G4bfT5/oOys6HhZw4vmMlnoZ+gDu8tJ/AlI0=
487 +github.com/miekg/dns v1.1.67/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
488 github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc=
489 github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU=
490 github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc=
@@ -660,8 +660,6 @@ github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3
660 github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0=
661 github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
662 github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
663 -github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=
664 -github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
663 github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc=
664 github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI=
665 github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4=