diff --git a/.github/workflows/workspace-test.yml b/.github/workflows/workspace-test.yml new file mode 100644 index 0000000..3777641 --- /dev/null +++ b/.github/workflows/workspace-test.yml @@ -0,0 +1,16 @@ +name: Workspace Test + +on: + pull_request: + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: workspace-test-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + workspace-test: + uses: fil-forge/libforge/.github/workflows/go-workspace-test.yml@v1 diff --git a/Dockerfile b/Dockerfile index 08553f8..2c92a17 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Build stage — native platform for fast cross-compilation -FROM --platform=$BUILDPLATFORM golang:1.25-bookworm AS build +FROM --platform=$BUILDPLATFORM golang:1.26-bookworm AS build ARG TARGETARCH ARG TARGETOS=linux diff --git a/Dockerfile.dev b/Dockerfile.dev index a37d452..a1377d1 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -3,7 +3,7 @@ # Run: docker run -p 2345:2345 guppy:dev [args...] # Connect debugger to localhost:2345 -FROM --platform=$BUILDPLATFORM golang:1.25-bookworm AS build +FROM --platform=$BUILDPLATFORM golang:1.26-bookworm AS build ARG TARGETARCH ARG TARGETOS=linux diff --git a/cmd/gateway/serve.go b/cmd/gateway/serve.go index f49d058..9787d6e 100644 --- a/cmd/gateway/serve.go +++ b/cmd/gateway/serve.go @@ -15,7 +15,7 @@ import ( contentcmds "github.com/fil-forge/libforge/commands/content" "github.com/fil-forge/ucantone/did" - uted25519 "github.com/fil-forge/ucantone/principal/ed25519" + uted25519 "github.com/fil-forge/ucantone/multikey/ed25519" "github.com/fil-forge/ucantone/ucan" "github.com/ipfs/boxo/blockservice" "github.com/ipfs/boxo/blockstore" @@ -101,7 +101,6 @@ var serveCmd = &cobra.Command{ "Spaces can be specified by DID or by name.", 80), RunE: func(cmd *cobra.Command, args []string) error { - cfg, err := config.Load[config.Config]() if err != nil { return fmt.Errorf("loading config: %w", err) @@ -115,11 +114,10 @@ var serveCmd = &cobra.Command{ c := cmdutil.MustGetClient(cfg) - edSigner, ok := c.Issuer().(uted25519.Signer) - if !ok { - return fmt.Errorf("agent key is not ed25519") + if c.Issuer().Code() != uted25519.Code { + return fmt.Errorf("agent key is not ed25519 (got %s)", c.Issuer().Code()) } - goKey := ed25519.NewKeyFromSeed(edSigner.Raw()) + goKey := ed25519.NewKeyFromSeed(c.Issuer().Raw()) pub, err := crypto.UnmarshalEd25519PublicKey(goKey.Public().(ed25519.PublicKey)) cobra.CheckErr(err) peerID, err := peer.IDFromPublicKey(pub) diff --git a/cmd/identity/generate.go b/cmd/identity/generate.go index a769e06..a28ff4b 100644 --- a/cmd/identity/generate.go +++ b/cmd/identity/generate.go @@ -5,7 +5,7 @@ import ( "os" "github.com/fil-forge/libforge/identity" - "github.com/fil-forge/ucantone/principal/ed25519" + "github.com/fil-forge/ucantone/multikey/ed25519" "github.com/spf13/cobra" ) @@ -20,17 +20,17 @@ The DID is printed to stderr for convenience. `, Example: "guppy identity generate > my-key.pem", RunE: func(cmd *cobra.Command, args []string) error { - signer, err := ed25519.Generate() + issuer, err := ed25519.GenerateIssuer() if err != nil { return fmt.Errorf("generating ed25519 key: %w", err) } - pem, err := identity.EncodeEd25519SignerToPEM(signer) + pem, err := identity.EncodeSignerToPEM(issuer) if err != nil { return fmt.Errorf("encoding key to PEM: %w", err) } cmd.SetOut(os.Stdout) cmd.SetErr(os.Stderr) - cmd.PrintErrf("# %s\n", signer.DID()) + cmd.PrintErrf("# %s\n", issuer.DID()) cmd.Print(string(pem)) return nil }, diff --git a/cmd/internal/upload/demo/demo.go b/cmd/internal/upload/demo/demo.go index f544c31..16498b7 100644 --- a/cmd/internal/upload/demo/demo.go +++ b/cmd/internal/upload/demo/demo.go @@ -15,7 +15,8 @@ import ( uploadcmds "github.com/fil-forge/libforge/commands/upload" "github.com/fil-forge/libforge/digestutil" "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/principal/ed25519" + "github.com/fil-forge/ucantone/multikey" + "github.com/fil-forge/ucantone/multikey/ed25519" "github.com/ipfs/go-cid" "github.com/multiformats/go-multihash" @@ -200,9 +201,9 @@ func Demo(ctx context.Context, repo *sqlrepo.Repo, spaceName string, alterMetada if err != nil { return fmt.Errorf("creating space key: %w", err) } - spaceDID := space.DID() + spaceDID := space.KeyDID() - service, err := ed25519.Generate() + service, err := ed25519.GenerateIssuer() if err != nil { return fmt.Errorf("creating service key: %w", err) } @@ -244,7 +245,7 @@ func Demo(ctx context.Context, repo *sqlrepo.Repo, spaceName string, alterMetada // so the demo can exercise the full scan -> DAG -> shard -> upload pipeline // without real credentials or a service. type demoClient struct { - service ed25519.Signer + service multikey.Issuer } var _ storacha.Client = (*demoClient)(nil) diff --git a/cmd/login.go b/cmd/login.go index f2cf2c0..53b0a9b 100644 --- a/cmd/login.go +++ b/cmd/login.go @@ -12,7 +12,7 @@ import ( "github.com/fil-forge/guppy/internal/cmdutil" "github.com/fil-forge/guppy/pkg/config" - "github.com/fil-forge/guppy/pkg/didmailto" + "github.com/fil-forge/libforge/attestation/didmailto" ) var loginCmd = &cobra.Command{ @@ -36,7 +36,7 @@ var loginCmd = &cobra.Command{ ctx := cmd.Context() email := cmd.Flags().Arg(0) - accountDid, err := didmailto.FromEmail(email) + accountDid, err := didmailto.New(email) if err != nil { cmd.SilenceUsage = false return err diff --git a/cmd/root.go b/cmd/root.go index 5adab6e..e107f91 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -12,6 +12,7 @@ import ( "github.com/fil-forge/guppy/cmd/blob" "github.com/fil-forge/guppy/cmd/unixfs" "github.com/fil-forge/guppy/pkg/presets" + "github.com/fil-forge/ucantone/multikey/ed25519" logging "github.com/ipfs/go-log/v2" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -26,7 +27,6 @@ import ( "github.com/fil-forge/guppy/cmd/space" "github.com/fil-forge/guppy/cmd/upload" libid "github.com/fil-forge/libforge/identity" - "github.com/fil-forge/ucantone/principal/ed25519" ) var ( @@ -151,7 +151,7 @@ func initConfig() { if err != nil { log.Fatalf("failed to generate identity: %v", err) } - pem, err := libid.EncodeEd25519SignerToPEM(signer) + pem, err := libid.EncodeSignerToPEM(signer) if err != nil { log.Fatalf("failed to encode identity to PEM: %v", err) } diff --git a/cmd/space/generate.go b/cmd/space/generate.go index 9fcce4b..fef65c3 100644 --- a/cmd/space/generate.go +++ b/cmd/space/generate.go @@ -14,7 +14,8 @@ import ( "github.com/fil-forge/guppy/pkg/config" "github.com/fil-forge/guppy/pkg/didmailto" "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/principal/ed25519" + "github.com/fil-forge/ucantone/multikey/ed25519" + "github.com/fil-forge/ucantone/ucan" "github.com/fil-forge/ucantone/ucan/command" "github.com/fil-forge/ucantone/ucan/delegation" ) @@ -42,7 +43,7 @@ var generateCmd = &cobra.Command{ "local store.", 80), RunE: func(cmd *cobra.Command, args []string) error { - space, err := ed25519.Generate() + space, err := ed25519.GenerateIssuer() if err != nil { cmd.SilenceUsage = false return fmt.Errorf("generating signer for space: %w", err) @@ -129,7 +130,7 @@ func pickAccount(cmd *cobra.Command, accounts []did.DID, flagValue, flagName str // grant delegates full access to the space to both the agent (so it can act on // the space locally) and the account (stored on the service via access/delegate), // recording the space's name in the delegation metadata. -func grant(ctx context.Context, c *client.Client, space ed25519.Signer, account did.DID, name string) error { +func grant(ctx context.Context, c *client.Client, space ucan.Issuer, account did.DID, name string) error { opts := []delegation.Option{delegation.WithNoExpiration()} if name != "" { opts = append(opts, delegation.WithMetadata(client.SpaceNameMetadata(name))) diff --git a/cmd/whoami.go b/cmd/whoami.go index 3af608a..250b85f 100644 --- a/cmd/whoami.go +++ b/cmd/whoami.go @@ -23,11 +23,11 @@ var whoamiCmd = &cobra.Command{ if err != nil { return err } - id, err := identity.DecodeEd25519SignerFromPEM(pem) + id, err := identity.DecodeSignerFromPEM(pem) if err != nil { return err } - cmd.Println(id.DID()) + cmd.Println(id.KeyDID()) return nil }, } diff --git a/examples/byoidentity/byoidentity.go b/examples/byoidentity/byoidentity.go index 1517456..16fbca5 100644 --- a/examples/byoidentity/byoidentity.go +++ b/examples/byoidentity/byoidentity.go @@ -10,14 +10,16 @@ import ( "github.com/fil-forge/guppy/pkg/tokenstore" uploadcmds "github.com/fil-forge/libforge/commands/upload" "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/principal/ed25519" + "github.com/fil-forge/ucantone/multikey" + "github.com/fil-forge/ucantone/multikey/ed25519" "github.com/fil-forge/ucantone/ucan/container" ) func main() { // private key to sign invocation UCAN with keybytes, _ := os.ReadFile("path/to/private.key") - agent, _ := ed25519.FromRaw(keybytes) + agentSigner, _ := ed25519.FromRaw(keybytes) + agent := multikey.KeyIssuer(agentSigner) // UCAN proof that signer can list uploads in this space (a delegation chain) prfContainerBytes, _ := os.ReadFile("path/to/proof.ucan") diff --git a/examples/loginflow/loginflow.go b/examples/loginflow/loginflow.go index acf6604..0083809 100644 --- a/examples/loginflow/loginflow.go +++ b/examples/loginflow/loginflow.go @@ -8,7 +8,7 @@ import ( "github.com/fil-forge/guppy/pkg/presets" uploadcmds "github.com/fil-forge/libforge/commands/upload" "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/principal/ed25519" + "github.com/fil-forge/ucantone/multikey/ed25519" ) // Error handling omitted for brevity. @@ -16,7 +16,7 @@ import ( func main() { ctx := context.Background() - agent, _ := ed25519.Generate() + agent, _ := ed25519.GenerateIssuer() // space to list uploads from space, _ := did.Parse("did:key:z6MkwDuRThQcyWjqNsK54yKAmzfsiH6BTkASyiucThMtHt1y") diff --git a/go.mod b/go.mod index dfef86f..8fac779 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/fil-forge/guppy -go 1.25.7 +go 1.26.1 require ( github.com/asaskevich/EventBus v0.0.0-20200907212545-49d423059eef @@ -11,9 +11,9 @@ require ( github.com/charmbracelet/lipgloss v1.1.0 github.com/dgraph-io/badger v1.6.2 github.com/dustin/go-humanize v1.0.1 - github.com/fil-forge/indexing-service v1.13.5-0.20260522094121-1edae9728a14 - github.com/fil-forge/libforge v0.0.0-20260527182359-ebb22552c348 - github.com/fil-forge/ucantone v0.0.0-20260522152152-eda937bc2684 + github.com/fil-forge/indexing-service v1.13.5-0.20260619142411-efe3f5fab717 + github.com/fil-forge/libforge v0.0.0-20260619083649-eb26d871cda1 + github.com/fil-forge/ucantone v0.0.0-20260619013642-7985ec010b88 github.com/filecoin-project/go-data-segment v0.0.1 github.com/filecoin-project/go-fil-commcid v0.3.1 github.com/filecoin-project/go-fil-commp-hashhash v0.2.0 @@ -22,16 +22,16 @@ require ( github.com/grafana/otel-profiling-go v0.5.1 github.com/grafana/pyroscope-go v1.2.7 github.com/hashicorp/golang-lru/v2 v2.0.7 - github.com/ipfs/boxo v0.34.0 + github.com/ipfs/boxo v0.37.0 github.com/ipfs/go-block-format v0.2.3 github.com/ipfs/go-cid v0.6.1 github.com/ipfs/go-datastore v0.9.1 github.com/ipfs/go-ipld-cbor v0.2.1 github.com/ipfs/go-ipld-format v0.6.3 github.com/ipfs/go-log/v2 v2.9.1 - github.com/ipfs/go-unixfsnode v1.10.1 - github.com/ipld/go-car v0.6.2 - github.com/ipld/go-car/v2 v2.14.3 + github.com/ipfs/go-unixfsnode v1.10.3 + github.com/ipld/go-car v0.6.3 + github.com/ipld/go-car/v2 v2.16.0 github.com/ipld/go-codec-dagpb v1.7.0 github.com/ipld/go-ipld-prime v0.23.0 github.com/jmoiron/sqlx v1.4.0 @@ -43,110 +43,119 @@ require ( github.com/multiformats/go-multihash v0.2.3 github.com/multiformats/go-varint v0.1.0 github.com/spf13/afero v1.15.0 - github.com/spf13/cobra v1.9.1 + github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 github.com/spf13/viper v1.21.0 github.com/storacha/go-ds-arc v0.0.1 github.com/stretchr/testify v1.11.1 github.com/wordgen/wordlists/eff v0.3.0 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 - go.opentelemetry.io/otel v1.40.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 - go.opentelemetry.io/otel/sdk v1.38.0 - go.opentelemetry.io/otel/trace v1.40.0 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 + go.opentelemetry.io/otel v1.43.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 + go.opentelemetry.io/otel/sdk v1.43.0 + go.opentelemetry.io/otel/trace v1.43.0 golang.org/x/sync v0.20.0 - modernc.org/sqlite v1.38.2 + modernc.org/sqlite v1.46.1 ) require ( - filippo.io/edwards25519 v1.1.0 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect - github.com/ClickHouse/ch-go v0.67.0 // indirect - github.com/ClickHouse/clickhouse-go/v2 v2.40.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 // indirect + github.com/ClickHouse/ch-go v0.71.0 // indirect + github.com/ClickHouse/clickhouse-go/v2 v2.43.0 // indirect github.com/Jorropo/jsync v1.0.1 // indirect - github.com/alanshaw/dag-json-gen v0.0.5 // indirect + github.com/alanshaw/dag-json-gen v0.0.6 // indirect github.com/andybalholm/brotli v1.2.0 // indirect - github.com/antlr4-go/antlr/v4 v4.13.0 // indirect + github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/charmbracelet/harmonica v0.2.0 // indirect - github.com/coder/websocket v1.8.12 // indirect - github.com/dgraph-io/ristretto v0.0.2 // indirect + github.com/clipperhouse/uax29/v2 v2.6.0 // indirect + github.com/coder/websocket v1.8.14 // indirect + github.com/dgraph-io/ristretto v0.2.0 // indirect github.com/elastic/go-sysinfo v1.15.4 // indirect github.com/elastic/go-windows v1.0.2 // indirect github.com/fil-forge/automobile v0.0.1 // indirect - github.com/filecoin-project/go-state-types v0.18.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.12 // indirect + github.com/gabriel-vasile/mimetype v1.4.13 // indirect + github.com/gammazero/chanqueue v1.1.2 // indirect github.com/go-faster/city v1.0.1 // indirect github.com/go-faster/errors v0.7.1 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-sql-driver/mysql v1.9.3 // indirect - github.com/go-viper/mapstructure/v2 v2.4.0 // indirect + github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/golang-jwt/jwt/v4 v4.5.2 // indirect github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect github.com/golang/protobuf v1.5.4 // indirect + github.com/golang/snappy v1.0.0 // indirect github.com/google/gopacket v1.1.19 // indirect github.com/hashicorp/golang-lru/arc/v2 v2.0.7 // indirect + github.com/ipfs/go-cidutil v0.1.1 // indirect + github.com/ipfs/go-dsqueue v0.2.0 // indirect github.com/ipfs/go-ipfs-redirects-file v0.1.2 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.7.5 // indirect + github.com/jackc/pgx/v5 v5.8.0 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/joho/godotenv v1.5.1 // indirect github.com/jonboulle/clockwork v0.5.0 // indirect - github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/compress v1.18.5 // indirect github.com/labstack/gommon v0.4.2 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect github.com/libp2p/go-doh-resolver v0.5.0 // indirect github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect - github.com/libp2p/go-libp2p-kad-dht v0.34.0 // indirect - github.com/libp2p/go-libp2p-kbucket v0.7.0 // indirect + github.com/libp2p/go-libp2p-kad-dht v0.38.0 // indirect + github.com/libp2p/go-libp2p-kbucket v0.8.0 // indirect github.com/libp2p/go-libp2p-record v0.3.1 // indirect github.com/libp2p/go-libp2p-routing-helpers v0.7.5 // indirect github.com/libp2p/go-msgio v0.3.0 // indirect github.com/libp2p/go-netroute v0.4.0 // indirect + github.com/mattn/go-sqlite3 v1.14.34 // indirect github.com/mfridman/interpolate v0.0.2 // indirect github.com/mfridman/xflag v0.1.0 // indirect - github.com/microsoft/go-mssqldb v1.9.2 // indirect - github.com/miekg/dns v1.1.68 // indirect - github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect + github.com/microsoft/go-mssqldb v1.9.6 // indirect + github.com/miekg/dns v1.1.72 // indirect + github.com/multiformats/go-multiaddr-dns v0.5.0 // indirect github.com/multiformats/go-multibase v0.3.0 // indirect github.com/multiformats/go-multistream v0.6.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/paulmach/orb v0.11.1 // indirect + github.com/paulmach/orb v0.12.0 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect - github.com/pierrec/lz4/v4 v4.1.22 // indirect - github.com/prometheus/client_golang v1.23.0 // indirect + github.com/pierrec/lz4/v4 v4.1.25 // indirect + github.com/pion/rtp v1.8.21 // indirect + github.com/pion/srtp/v3 v3.0.7 // indirect + github.com/pion/turn/v4 v4.1.1 // indirect + github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.65.0 // indirect - github.com/prometheus/procfs v0.17.0 // indirect + github.com/prometheus/common v0.67.4 // indirect + github.com/prometheus/procfs v0.19.2 // indirect github.com/sagikazarmark/locafero v0.11.0 // indirect - github.com/segmentio/asm v1.2.0 // indirect + github.com/segmentio/asm v1.2.1 // indirect github.com/sethvargo/go-retry v0.3.0 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect github.com/spf13/cast v1.10.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/tursodatabase/libsql-client-go v0.0.0-20240902231107-85af5b9d094d // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc // indirect github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect - github.com/vertica/vertica-sql-go v1.3.3 // indirect + github.com/vertica/vertica-sql-go v1.3.5 // indirect github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect - github.com/ydb-platform/ydb-go-genproto v0.0.0-20241112172322-ea1f63298f77 // indirect - github.com/ydb-platform/ydb-go-sdk/v3 v3.108.1 // indirect + github.com/ydb-platform/ydb-go-genproto v0.0.0-20260128080146-c4ed16b24b37 // indirect + github.com/ydb-platform/ydb-go-sdk/v3 v3.127.0 // indirect github.com/ziutek/mymysql v1.5.4 // indirect - gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect - gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect + go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/time v0.14.0 // indirect - gonum.org/v1/gonum v0.16.0 // indirect + golang.org/x/time v0.15.0 // indirect + gonum.org/v1/gonum v0.17.0 // indirect howett.net/plist v1.0.1 // indirect pitr.ca/jsontokenizer v0.3.0 // indirect ) @@ -160,42 +169,33 @@ require ( github.com/charmbracelet/x/term v0.2.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/crackcomm/go-gitignore v0.0.0-20241020182519-7843d2ba8fdf // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect - github.com/fatih/color v1.7.0 // indirect + github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/gammazero/deque v1.2.1 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gobwas/glob v0.2.3 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect + github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6 // indirect github.com/grafana/pyroscope-go/godeltaprof v0.1.9 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/hannahhoward/cbor-gen-for v0.0.0-20230214144701-5d17c9d5243c // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/ipfs/bbloom v0.0.4 // indirect github.com/ipfs/go-bitfield v1.1.0 // indirect - github.com/ipfs/go-blockservice v0.5.2 // indirect - github.com/ipfs/go-ipfs-blockstore v1.3.1 // indirect - github.com/ipfs/go-ipfs-ds-help v1.1.1 // indirect - github.com/ipfs/go-ipfs-exchange-interface v0.2.1 // indirect - github.com/ipfs/go-ipfs-util v0.0.3 // indirect github.com/ipfs/go-ipld-legacy v0.2.2 // indirect - github.com/ipfs/go-log v1.0.5 // indirect - github.com/ipfs/go-merkledag v0.11.0 // indirect github.com/ipfs/go-metrics-interface v0.3.0 // indirect - github.com/ipfs/go-verifcid v0.0.3 // indirect github.com/ipni/go-libipni v0.7.8 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.48.0 - github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/lucasb-eyer/go-colorful v1.3.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-localereader v0.0.1 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/mattn/go-runewidth v0.0.19 // indirect github.com/minio/sha256-simd v1.0.1 github.com/mr-tron/base58 v1.3.0 // indirect github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect @@ -204,52 +204,46 @@ require ( github.com/multiformats/go-base32 v0.1.0 // indirect github.com/multiformats/go-base36 v0.2.0 // indirect github.com/multiformats/go-multiaddr v0.16.1 // indirect - github.com/ncruces/go-strftime v0.1.9 // indirect - github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/ncruces/go-strftime v1.0.0 // indirect github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 // indirect - github.com/pion/rtp v1.8.21 // indirect - github.com/pion/srtp/v3 v3.0.7 // indirect - github.com/pion/turn/v4 v4.1.1 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/polydawn/refmt v0.89.1-0.20231129105047-37766d95467a // indirect - github.com/pressly/goose/v3 v3.26.0 + github.com/pressly/goose/v3 v3.27.0 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/storacha/go-fil-commp-hashhash v0.0.0-20251204184521-dc48123eb846 - github.com/stretchr/objx v0.5.2 // indirect + github.com/stretchr/objx v0.5.3 // indirect github.com/urfave/cli/v2 v2.27.7 // indirect github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect github.com/whyrusleeping/cbor-gen v0.3.1 github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect + github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect - go.opentelemetry.io/otel/metric v1.40.0 // indirect - go.opentelemetry.io/proto/otlp v1.7.0 // indirect - go.uber.org/atomic v1.11.0 // indirect - go.uber.org/mock v0.6.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.27.1 + go.uber.org/zap v1.28.0 golang.org/x/crypto v0.50.0 // indirect golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect golang.org/x/mod v0.34.0 // indirect - golang.org/x/net v0.52.0 // indirect + golang.org/x/net v0.53.0 // indirect golang.org/x/sys v0.43.0 // indirect golang.org/x/term v0.42.0 // indirect golang.org/x/text v0.36.0 // indirect golang.org/x/tools v0.43.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect - google.golang.org/grpc v1.75.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68 // indirect + google.golang.org/grpc v1.81.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/blake3 v1.4.1 // indirect - modernc.org/libc v1.66.3 // indirect + modernc.org/libc v1.68.0 // indirect modernc.org/mathutil v1.7.1 // indirect modernc.org/memory v1.11.0 // indirect ) diff --git a/go.sum b/go.sum index 4f8160b..e8629df 100644 --- a/go.sum +++ b/go.sum @@ -39,43 +39,43 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/bigmod v0.1.1-0.20260103110540-f8a47775ebe5 h1:JA0fFr+kxpqTdxR9LOBiTWpGNchqmkcsgmdeJZRclZ0= filippo.io/bigmod v0.1.1-0.20260103110540-f8a47775ebe5/go.mod h1:OjOXDNlClLblvXdwgFFOQFJEocLhhtai8vGLy0JCZlI= -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= filippo.io/keygen v0.0.0-20260114151900-8e2790ea4c5b h1:REI1FbdW71yO56Are4XAxD+OS/e+BQsB3gE4mZRQEXY= filippo.io/keygen v0.0.0-20260114151900-8e2790ea4c5b/go.mod h1:9nnw1SlYHYuPSo/3wjQzNjSbeHlq2NsKo5iEtfJPWP0= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 h1:B+blDbyVIG3WaikNxPnhPiJ1MThR03b3vKGtER95TP4= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1/go.mod h1:JdM5psgjfBf5fo2uWOZhflPWyDBZ/O/CNAH9CtsuZE4= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0 h1:JXg2dwJUmPB9JmtVmdEB16APJ7jurfbY5jnfXpJoRMc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0/go.mod h1:YD5h/ldMsG0XiIw7PdyNhLxaM317eFh5yNLccNfGdyw= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 h1:Hk5QBxZQC1jb2Fwj6mpzme37xbCDdNTxU7O9eb5+LB4= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1/go.mod h1:IYus9qsFobWIc2YVwe/WPjcnyCkPKtnHAqUYeebc8z0= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDozdmndjTm8DXdpCzPajMgA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2/go.mod h1:XtLgD3ZD34DAaVIIAyG3objl5DynM3CQ/vMcbBNJZGI= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.1 h1:Wgf5rZba3YZqeTNJPtvqZoBu1sBN/L4sry+u2U3Y75w= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.1/go.mod h1:xxCBG/f/4Vbmh2XQJBsOmNdxWUY5j/s27jujKPbQf14= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 h1:bFWuoEKg+gImo7pvkiQEFAc8ocibADgXeiLAxWhWmkI= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1/go.mod h1:Vih/3yc6yac2JzU4hzpaDupBJP0Flaia9rXXrU8xyww= -github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs= -github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 h1:XRzhVemXdgvJqCH0sFfrBUTnUJSBrBf7++ypk+twtRs= +github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ClickHouse/ch-go v0.67.0 h1:18MQF6vZHj+4/hTRaK7JbS/TIzn4I55wC+QzO24uiqc= -github.com/ClickHouse/ch-go v0.67.0/go.mod h1:2MSAeyVmgt+9a2k2SQPPG1b4qbTPzdGDpf1+bcHh+18= -github.com/ClickHouse/clickhouse-go/v2 v2.40.1 h1:PbwsHBgqXRydU7jKULD1C8CHmifczffvQqmFvltM2W4= -github.com/ClickHouse/clickhouse-go/v2 v2.40.1/go.mod h1:GDzSBLVhladVm8V01aEB36IoBOVLLICfyeuiIp/8Ezc= +github.com/ClickHouse/ch-go v0.71.0 h1:bUdZ/EZj/LcVHsMqaRUP2holqygrPWQKeMjc6nZoyRM= +github.com/ClickHouse/ch-go v0.71.0/go.mod h1:NwbNc+7jaqfY58dmdDUbG4Jl22vThgx1cYjBw0vtgXw= +github.com/ClickHouse/clickhouse-go/v2 v2.43.0 h1:fUR05TrF1GyvLDa/mAQjkx7KbgwdLRffs2n9O3WobtE= +github.com/ClickHouse/clickhouse-go/v2 v2.43.0/go.mod h1:o6jf7JM/zveWC/PP277BLxjHy5KjnGX/jfljhM4s34g= github.com/Jorropo/jsync v1.0.1 h1:6HgRolFZnsdfzRUj+ImB9og1JYOxQoReSywkHOGSaUU= github.com/Jorropo/jsync v1.0.1/go.mod h1:jCOZj3vrBCri3bSU3ErUYvevKlnbssrXeCivybS5ABQ= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/alanshaw/dag-json-gen v0.0.5 h1:jUOqsTrfZ7ddkBqAsx/xbCeJtpe70jrFL2Z+i4qQB1U= -github.com/alanshaw/dag-json-gen v0.0.5/go.mod h1:rXxWw0SItP9QjxpRMpkju66h0KumF7TPCtvHdOKS5lY= +github.com/alanshaw/dag-json-gen v0.0.6 h1:MiscvWVOhs6/ux7OUdPz2nDRA7GwklZyaAy4XWexpr0= +github.com/alanshaw/dag-json-gen v0.0.6/go.mod h1:rXxWw0SItP9QjxpRMpkju66h0KumF7TPCtvHdOKS5lY= github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b h1:mimo19zliBX/vSQ6PWWSL9lK8qwHozUj03+zLoEB8O0= github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs= github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= -github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= +github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= +github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= @@ -97,7 +97,6 @@ github.com/briandowns/spinner v1.23.2/go.mod h1:LaZeM4wm2Ywy6vO571mvhQNRcWfRUnXO github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -124,6 +123,8 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clipperhouse/uax29/v2 v2.6.0 h1:z0cDbUV+aPASdFb2/ndFnS9ts/WNXgTNNGFoKXuhpos= +github.com/clipperhouse/uax29/v2 v2.6.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -131,8 +132,8 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= -github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= +github.com/coder/websocket v1.8.14 h1:9L0p0iKiNOibykf283eHkKUHHrpG7f65OE3BhhO7v9g= +github.com/coder/websocket v1.8.14/go.mod h1:NX3SzP+inril6yawo5CQXx8+fk145lPDC6pumgx0mVg= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -149,8 +150,9 @@ github.com/crackcomm/go-gitignore v0.0.0-20241020182519-7843d2ba8fdf/go.mod h1:p github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= @@ -159,10 +161,12 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvw github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= -github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= +github.com/dgraph-io/ristretto v0.2.0 h1:XAfl+7cmoUDWW/2Lx8TGZQjjxIQ2Ley9DSf52dru4WE= +github.com/dgraph-io/ristretto v0.2.0/go.mod h1:8uBHCU/PBV4Ag0CJrP47b9Ofby5dqWNh4FicAdoqFNU= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dunglas/httpsfv v1.1.0 h1:Jw76nAyKWKZKFrpMMcL76y35tOpYHqQPzHQiwDvpe54= github.com/dunglas/httpsfv v1.1.0/go.mod h1:zID2mqw9mFsnt7YC3vYQ9/cjq30q41W+1AnDwH8TiMg= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -184,8 +188,9 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fil-forge/automobile v0.0.1 h1:9xB3yc4l5b9EdRJSJcNwudgBFNHoMPEAdcb7GfobLhA= @@ -194,12 +199,12 @@ github.com/fil-forge/go-ipni-tools v0.0.0-20260519194815-545b9421aec0 h1:HAfXUPv github.com/fil-forge/go-ipni-tools v0.0.0-20260519194815-545b9421aec0/go.mod h1:3NRV/7wc4/0uzzrGdI7NoN/yeF1UvqKRwMyjBqGc5s0= github.com/fil-forge/go-ucanto v0.0.0-20260507172450-5cb5d073f8ab h1:2J2cDThqTKP6/0k3SfdlSxfyPa3aLqjTYnmvbEcryfg= github.com/fil-forge/go-ucanto v0.0.0-20260507172450-5cb5d073f8ab/go.mod h1:lZF3UXZ2hGLKYmXdquG50JqI9pRlUrV6lubGtgOYfwc= -github.com/fil-forge/indexing-service v1.13.5-0.20260522094121-1edae9728a14 h1:KQaJv61CLzTMk35EfSQ1TuzIA5SmMvngjEcrHzIHdG4= -github.com/fil-forge/indexing-service v1.13.5-0.20260522094121-1edae9728a14/go.mod h1:6W1L7Lr9k95Hh5cWKdvrGSuP6HyUqGrjDB+C80v3WZ8= -github.com/fil-forge/libforge v0.0.0-20260527182359-ebb22552c348 h1:roYe4llNv0fpQnvXMontrdt/hy9kH5K/cnNsXmhqId4= -github.com/fil-forge/libforge v0.0.0-20260527182359-ebb22552c348/go.mod h1:1ytnrneNEeJcskEbsRDtNZY/Jvgo2Yw5szIUI/9EWPk= -github.com/fil-forge/ucantone v0.0.0-20260522152152-eda937bc2684 h1:kWJLKVltJXPXO7tKS1z0GhzA+c59gwhediGyByEXE0o= -github.com/fil-forge/ucantone v0.0.0-20260522152152-eda937bc2684/go.mod h1:XAVqsZwYoZ9vncjZoRUAJ+mL/ApLMFn9HHX7ipohVdY= +github.com/fil-forge/indexing-service v1.13.5-0.20260619142411-efe3f5fab717 h1:Wke8qgaDgy7DGaIS28VpHip+YHSdQP1hGNEZTrXXzb4= +github.com/fil-forge/indexing-service v1.13.5-0.20260619142411-efe3f5fab717/go.mod h1:wFcakLohOqpMRkJzWRdGFGHRFpGB+PpEMCm9wkt2cqU= +github.com/fil-forge/libforge v0.0.0-20260619083649-eb26d871cda1 h1:BZUTgenH/AawsAzH8xOx2tFyGXIhSacGiir4PwojX2M= +github.com/fil-forge/libforge v0.0.0-20260619083649-eb26d871cda1/go.mod h1:0kXihIQ4L2uZ00nR5XrZ/Y8Db7Ht/qQNuiWslwMJ95M= +github.com/fil-forge/ucantone v0.0.0-20260619013642-7985ec010b88 h1:N0gbL3Ik+XBYk4y/5BxTVymwbRGlxRXwC5eNWzi1bGI= +github.com/fil-forge/ucantone v0.0.0-20260619013642-7985ec010b88/go.mod h1:rTIRXz4xErI4U+YlBU9ZvhlTbr4Hs5tJhVMwereVkSg= github.com/filecoin-project/go-clock v0.1.0 h1:SFbYIM75M8NnFm1yMHhN9Ahy3W5bEZV9gd6MPfXbKVU= github.com/filecoin-project/go-clock v0.1.0/go.mod h1:4uB/O4PvOjlx1VCMdZ9MyDZXRm//gkj1ELEbxfI1AZs= github.com/filecoin-project/go-data-segment v0.0.1 h1:1wmDxOG4ubWQm3ZC1XI5nCon5qgSq7Ra3Rb6Dbu10Gs= @@ -208,18 +213,17 @@ github.com/filecoin-project/go-fil-commcid v0.3.1 h1:4EfxpHSlvtkOqa9weG2Yt5kxFmP github.com/filecoin-project/go-fil-commcid v0.3.1/go.mod h1:z7Ssf8d7kspF9QRAVHDbZ+43JK4mkhbGH5lyph1TnKY= github.com/filecoin-project/go-fil-commp-hashhash v0.2.0 h1:HYIUugzjq78YvV3vC6rL95+SfC/aSTVSnZSZiDV5pCk= github.com/filecoin-project/go-fil-commp-hashhash v0.2.0/go.mod h1:VH3fAFOru4yyWar4626IoS5+VGE8SfZiBODJLUigEo4= -github.com/filecoin-project/go-state-types v0.18.0 h1:oDcjihXRlf2cM176atZzllp79Zc+kcbiuQM9DPL/1a4= -github.com/filecoin-project/go-state-types v0.18.0/go.mod h1:CcyG4ZQRDWW+QUY2WDf1KtVDRN7W4twjsfgnGbQfJVI= github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw= -github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= +github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/gammazero/chanqueue v1.1.2 h1:dZEsxlyANZMyeTRemABqZF8QM9BnE4NBI43Oh3y5fIU= github.com/gammazero/chanqueue v1.1.2/go.mod h1:XDN1X/jjAbmSceNFOQbtKToeSkxtdVdpKu90LiEdBEE= github.com/gammazero/deque v1.2.1 h1:9fnQVFCCZ9/NOc7ccTNqzoKd1tCWOqeI05/lPqFPMGQ= @@ -249,18 +253,18 @@ github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5 github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= -github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= -github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= +github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= -github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= @@ -297,6 +301,9 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= +github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -331,8 +338,9 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6 h1:EEHtgt9IwisQ2AZ4pIsMjahcegHh6rmhqxzIRQIyepY= +github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6/go.mod h1:I6V7YzU0XDpsHqbsyrghnFZLO1gwK6NPTNvmetQIk9U= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -342,8 +350,8 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= -github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= -github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA= github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF3YH66t4qL8= github.com/grafana/otel-profiling-go v0.5.1/go.mod h1:ftN/t5A/4gQI19/8MoWurBEtC6gFw8Dns1sJZ9W4Tls= github.com/grafana/pyroscope-go v1.2.7 h1:VWBBlqxjyR0Cwk2W6UrE8CdcdD80GOFNutj0Kb1T8ac= @@ -351,8 +359,8 @@ github.com/grafana/pyroscope-go v1.2.7/go.mod h1:o/bpSLiJYYP6HQtvcoVKiE9s5RiNgjY github.com/grafana/pyroscope-go/godeltaprof v0.1.9 h1:c1Us8i6eSmkW+Ez05d3co8kasnuOY813tbMN8i/a3Og= github.com/grafana/pyroscope-go/godeltaprof v0.1.9/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= github.com/hannahhoward/cbor-gen-for v0.0.0-20230214144701-5d17c9d5243c h1:iiD+p+U0M6n/FsO6XIZuOgobnNa48FxtyYFfWwLttUQ= github.com/hannahhoward/cbor-gen-for v0.0.0-20230214144701-5d17c9d5243c/go.mod h1:jvfsLIxk0fY/2BKSQ1xf2406AKA5dwMmKKv0ADcOfN8= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= @@ -381,6 +389,7 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -390,92 +399,71 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0= -github.com/ipfs/boxo v0.34.0 h1:pMP9bAsTs4xVh8R0ZmxIWviV7kjDa60U24QrlGgHb1g= -github.com/ipfs/boxo v0.34.0/go.mod h1:kzdH/ewDybtO3+M8MCVkpwnIIc/d2VISX95DFrY4vQA= +github.com/ipfs/boxo v0.37.0 h1:2E3mZvydMI2t5IkAgtkmZ3sGsld0oS7o3I+xyzDk6uI= +github.com/ipfs/boxo v0.37.0/go.mod h1:8yyiRn54F2CsW13n0zwXEPrVsZix/gFj9SYIRYMZ6KE= github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= -github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= -github.com/ipfs/go-bitswap v0.11.0/go.mod h1:05aE8H3XOU+LXpTedeAS0OZpcO1WFsj5niYQH9a1Tmk= github.com/ipfs/go-block-format v0.2.3 h1:mpCuDaNXJ4wrBJLrtEaGFGXkferrw5eqVvzaHhtFKQk= github.com/ipfs/go-block-format v0.2.3/go.mod h1:WJaQmPAKhD3LspLixqlqNFxiZ3BZ3xgqxxoSR/76pnA= -github.com/ipfs/go-blockservice v0.5.2 h1:in9Bc+QcXwd1apOVM7Un9t8tixPKdaHQFdLSUM1Xgk8= -github.com/ipfs/go-blockservice v0.5.2/go.mod h1:VpMblFEqG67A/H2sHKAemeH9vlURVavlysbdUI632yk= github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= github.com/ipfs/go-cid v0.6.1 h1:T5TnNb08+ueovG76Z5gx1L4Y7QOaGTXHg1F6raWFxIc= github.com/ipfs/go-cid v0.6.1/go.mod h1:zrY0SwOhjrrIdfPQ/kf+k1sXyJ0QE7cMxfCployLBs0= +github.com/ipfs/go-cidutil v0.1.1 h1:COuby6H8C2ml0alvHYX3WdbFM4F07YtbY0UlT5j+sgI= +github.com/ipfs/go-cidutil v0.1.1/go.mod h1:SCoUftGEUgoXe5Hjeyw5CiLZF8cwYn/TbtpFQXJCP6k= github.com/ipfs/go-datastore v0.9.1 h1:67Po2epre/o0UxrmkzdS9ZTe2GFGODgTd2odx8Wh6Yo= github.com/ipfs/go-datastore v0.9.1/go.mod h1:zi07Nvrpq1bQwSkEnx3bfjz+SQZbdbWyCNvyxMh9pN0= github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ipfs-blockstore v1.3.1 h1:cEI9ci7V0sRNivqaOr0elDsamxXFxJMMMy7PTTDQNsQ= -github.com/ipfs/go-ipfs-blockstore v1.3.1/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE= -github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ= -github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk= +github.com/ipfs/go-ds-leveldb v0.5.2 h1:6nmxlQ2zbp4LCNdJVsmHfs9GP0eylfBNxpmY1csp0x0= +github.com/ipfs/go-ds-leveldb v0.5.2/go.mod h1:2fAwmcvD3WoRT72PzEekHBkQmBDhc39DJGoREiuGmYo= +github.com/ipfs/go-dsqueue v0.2.0 h1:MBi9w3oSiX98Xc+Y7NuJ9G8MI6mAT4IGdO9dHEMCZzU= +github.com/ipfs/go-dsqueue v0.2.0/go.mod h1:8FfNQC4DMF/KkzBXRNB9Rb3MKDW0Sh98HMtXYl1mLQE= github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ= github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-ds-help v1.1.1 h1:B5UJOH52IbcfS56+Ul+sv8jnIV10lbjLF5eOO0C66Nw= -github.com/ipfs/go-ipfs-ds-help v1.1.1/go.mod h1:75vrVCkSdSFidJscs8n4W+77AtTpCIAdDGAwjitJMIo= -github.com/ipfs/go-ipfs-exchange-interface v0.2.1 h1:jMzo2VhLKSHbVe+mHNzYgs95n0+t0Q69GQ5WhRDZV/s= -github.com/ipfs/go-ipfs-exchange-interface v0.2.1/go.mod h1:MUsYn6rKbG6CTtsDp+lKJPmVt3ZrCViNyH3rfPGsZ2E= -github.com/ipfs/go-ipfs-exchange-offline v0.3.0 h1:c/Dg8GDPzixGd0MC8Jh6mjOwU57uYokgWRFidfvEkuA= -github.com/ipfs/go-ipfs-exchange-offline v0.3.0/go.mod h1:MOdJ9DChbb5u37M1IcbrRB02e++Z7521fMxqCNRrz9s= -github.com/ipfs/go-ipfs-pq v0.0.3 h1:YpoHVJB+jzK15mr/xsWC574tyDLkezVrDNeaalQBsTE= -github.com/ipfs/go-ipfs-pq v0.0.3/go.mod h1:btNw5hsHBpRcSSgZtiNm/SLj5gYIZ18AKtv3kERkRb4= +github.com/ipfs/go-ipfs-pq v0.0.4 h1:U7jjENWJd1jhcrR8X/xHTaph14PTAK9O+yaLJbjqgOw= +github.com/ipfs/go-ipfs-pq v0.0.4/go.mod h1:9UdLOIIb99IFrgT0Fc53pvbvlJBhpUb4GJuAQf3+O2A= github.com/ipfs/go-ipfs-redirects-file v0.1.2 h1:QCK7VtL91FH17KROVVy5KrzDx2hu68QvB2FTWk08ZQk= github.com/ipfs/go-ipfs-redirects-file v0.1.2/go.mod h1:yIiTlLcDEM/8lS6T3FlCEXZktPPqSOyuY6dEzVqw7Fw= -github.com/ipfs/go-ipfs-routing v0.3.0 h1:9W/W3N+g+y4ZDeffSgqhgo7BsBSJwPMcyssET9OWevc= -github.com/ipfs/go-ipfs-routing v0.3.0/go.mod h1:dKqtTFIql7e1zYsEuWLyuOU+E0WJWW8JjbTPLParDWo= -github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0= -github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn17xAKWBvs= github.com/ipfs/go-ipld-cbor v0.2.1 h1:H05yEJbK/hxg0uf2AJhyerBDbjOuHX4yi+1U/ogRa7E= github.com/ipfs/go-ipld-cbor v0.2.1/go.mod h1:x9Zbeq8CoE5R2WicYgBMcr/9mnkQ0lHddYWJP2sMV3A= github.com/ipfs/go-ipld-format v0.6.3 h1:9/lurLDTotJpZSuL++gh3sTdmcFhVkCwsgx2+rAh4j8= github.com/ipfs/go-ipld-format v0.6.3/go.mod h1:74ilVN12NXVMIV+SrBAyC05UJRk0jVvGqdmrcYZvCBk= github.com/ipfs/go-ipld-legacy v0.2.2 h1:DThbqCPVLpWBcGtU23KDLiY2YRZZnTkXQyfz8aOfBkQ= github.com/ipfs/go-ipld-legacy v0.2.2/go.mod h1:hhkj+b3kG9b2BcUNw8IFYAsfeNo8E3U7eYlWeAOPyDU= -github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= -github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= github.com/ipfs/go-log/v2 v2.9.1 h1:3JXwHWU31dsCpvQ+7asz6/QsFJHqFr4gLgQ0FWteujk= github.com/ipfs/go-log/v2 v2.9.1/go.mod h1:evFx7sBiohUN3AG12mXlZBw5hacBQld3ZPHrowlJYoo= -github.com/ipfs/go-merkledag v0.11.0 h1:DgzwK5hprESOzS4O1t/wi6JDpyVQdvm9Bs59N/jqfBY= -github.com/ipfs/go-merkledag v0.11.0/go.mod h1:Q4f/1ezvBiJV0YCIXvt51W/9/kqJGH4I1LsA7+djsM4= github.com/ipfs/go-metrics-interface v0.3.0 h1:YwG7/Cy4R94mYDUuwsBfeziJCVm9pBMJ6q/JR9V40TU= github.com/ipfs/go-metrics-interface v0.3.0/go.mod h1:OxxQjZDGocXVdyTPocns6cOLwHieqej/jos7H4POwoY= -github.com/ipfs/go-peertaskqueue v0.8.2 h1:PaHFRaVFdxQk1Qo3OKiHPYjmmusQy7gKQUaL8JDszAU= -github.com/ipfs/go-peertaskqueue v0.8.2/go.mod h1:L6QPvou0346c2qPJNiJa6BvOibxDfaiPlqHInmzg0FA= +github.com/ipfs/go-peertaskqueue v0.8.3 h1:tBPpGJy+A92RqtRFq5amJn0Uuj8Pw8tXi0X3eHfHM8w= +github.com/ipfs/go-peertaskqueue v0.8.3/go.mod h1:OqVync4kPOcXEGdj/LKvox9DCB5mkSBeXsPczCxLtYA= github.com/ipfs/go-test v0.3.0 h1:0Y4Uve3tp9HI+2lIJjfOliOrOgv/YpXg/l1y3P4DEYE= github.com/ipfs/go-test v0.3.0/go.mod h1:JK+U8pRpATZb7lsYNSJlCj3WYB3cFfWIbI6nWRM/GFk= -github.com/ipfs/go-unixfsnode v1.10.1 h1:hGKhzuH6NSzZ4y621wGuDspkjXRNG3B+HqhlyTjSwSM= -github.com/ipfs/go-unixfsnode v1.10.1/go.mod h1:eguv/otvacjmfSbYvmamc9ssNAzLvRk0+YN30EYeOOY= -github.com/ipfs/go-verifcid v0.0.3 h1:gmRKccqhWDocCRkC+a59g5QW7uJw5bpX9HWBevXa0zs= -github.com/ipfs/go-verifcid v0.0.3/go.mod h1:gcCtGniVzelKrbk9ooUSX/pM3xlH73fZZJDzQJRvOUw= -github.com/ipld/go-car v0.6.2 h1:Hlnl3Awgnq8icK+ze3iRghk805lu8YNq3wlREDTF2qc= -github.com/ipld/go-car v0.6.2/go.mod h1:oEGXdwp6bmxJCZ+rARSkDliTeYnVzv3++eXajZ+Bmr8= -github.com/ipld/go-car/v2 v2.14.3 h1:1Mhl82/ny8MVP+w1M4LXbj4j99oK3gnuZG2GmG1IhC8= -github.com/ipld/go-car/v2 v2.14.3/go.mod h1:/vpSvPngOX8UnvmdFJ3o/mDgXa9LuyXsn7wxOzHDYQE= +github.com/ipfs/go-unixfsnode v1.10.3 h1:c8sJjuGNkxXAQH75P+f5ngPda/9T+DrboVA0TcDGvGI= +github.com/ipfs/go-unixfsnode v1.10.3/go.mod h1:2Jlc7DoEwr12W+7l8Hr6C7XF4NHST3gIkqSArLhGSxU= +github.com/ipld/go-car v0.6.3 h1:v9pWoNHu24aoC06CStvbH4mpNPdiOhc8rqFFw/C1/ss= +github.com/ipld/go-car v0.6.3/go.mod h1:jtFKq9ysYVpXiyssjvkQEQQT5fP1RrSUJ9UwHrpmfJo= +github.com/ipld/go-car/v2 v2.16.0 h1:LWe0vmN/QcQmUU4tr34W5Nv5mNraW+G6jfN2s+ndBco= +github.com/ipld/go-car/v2 v2.16.0/go.mod h1:RqFGWN9ifcXVmCrTAVnfnxiWZk1+jIx67SYhenlmL34= github.com/ipld/go-codec-dagpb v1.7.0 h1:hpuvQjCSVSLnTnHXn+QAMR0mLmb1gA6wl10LExo2Ts0= github.com/ipld/go-codec-dagpb v1.7.0/go.mod h1:rD3Zg+zub9ZnxcLwfol/OTQRVjaLzXypgy4UqHQvilM= github.com/ipld/go-ipld-prime v0.23.0 h1:csqdPZH60BsTC+AZrv7fpa27v+09I/oTqyHYYYE27eE= github.com/ipld/go-ipld-prime v0.23.0/go.mod h1:46YCFSFNFBJHPjB0pfMuv7Ly7df2eChpkpyPo5SE0bA= -github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20230102063945-1a409dc236dd h1:gMlw/MhNr2Wtp5RwGdsW23cs+yCuj9k2ON7i9MiJlRo= -github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20230102063945-1a409dc236dd/go.mod h1:wZ8hH8UxeryOs4kJEJaiui/s00hDSbE37OKsL47g+Sw= +github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20250821084354-a425e60cd714 h1:cqNk8PEwHnK0vqWln+U/YZhQc9h2NB3KjUjDPZo5Q2s= +github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20250821084354-a425e60cd714/go.mod h1:ZEUdra3CoqRVRYgAX/jAJO9aZGz6SKtKEG628fHHktY= github.com/ipni/go-libipni v0.7.8 h1:kPfgi9fNZC/wkzu/UegsaBa2e5F2GxIru/pHkyJXPDY= github.com/ipni/go-libipni v0.7.8/go.mod h1:T+QVg6kT/PizcKN4pKKd9NaUXA8BZaubfaG+M6/rixE= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.7.5 h1:JHGfMnQY+IEtGM63d+NGMjoRpysB2JBwDr5fsngwmJs= -github.com/jackc/pgx/v5 v5.7.5/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M= +github.com/jackc/pgx/v5 v5.8.0 h1:TYPDoleBBme0xGSAX3/+NujXXtpZn9HBONkQC7IEZSo= +github.com/jackc/pgx/v5 v5.8.0/go.mod h1:QVeDInX2m9VyzvNeiCJVjCkNFqzsNb43204HshNSZKw= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= @@ -492,8 +480,8 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/koron/go-ssdp v0.0.6 h1:Jb0h04599eq/CY7rB5YEqPS83HmRfHP2azkxMN2rFtU= @@ -530,10 +518,10 @@ github.com/libp2p/go-libp2p v0.48.0 h1:h2BrLAgrj7X8bEN05K7qmrjpNHYA+6tnsGRdprjTn github.com/libp2p/go-libp2p v0.48.0/go.mod h1:Q1fBZNdmC2Hf82husCTfkKJVfHm2we5zk+NWmOGEmWk= github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= -github.com/libp2p/go-libp2p-kad-dht v0.34.0 h1:yvJ/Vrt36GVjsqPxiGcuuwOloKuZLV9Aa7awIKyNXy0= -github.com/libp2p/go-libp2p-kad-dht v0.34.0/go.mod h1:JNbkES4W5tajS6uYivw6MPs0842cPHAwhgaPw8sQG4o= -github.com/libp2p/go-libp2p-kbucket v0.7.0 h1:vYDvRjkyJPeWunQXqcW2Z6E93Ywx7fX0jgzb/dGOKCs= -github.com/libp2p/go-libp2p-kbucket v0.7.0/go.mod h1:blOINGIj1yiPYlVEX0Rj9QwEkmVnz3EP8LK1dRKBC6g= +github.com/libp2p/go-libp2p-kad-dht v0.38.0 h1:NToFzwvICo6ghDfSwuTmROCtl9LDXSZT1VawEbm4NUs= +github.com/libp2p/go-libp2p-kad-dht v0.38.0/go.mod h1:g/CefQilAnCMyUH52A6tUGbe17NgQ8q26MaZCA968iI= +github.com/libp2p/go-libp2p-kbucket v0.8.0 h1:QAK7RzKJpYe+EuSEATAaaHYMYLkPDGC18m9jxPLnU8s= +github.com/libp2p/go-libp2p-kbucket v0.8.0/go.mod h1:JMlxqcEyKwO6ox716eyC0hmiduSWZZl6JY93mGaaqc4= github.com/libp2p/go-libp2p-record v0.3.1 h1:cly48Xi5GjNw5Wq+7gmjfBiG9HCzQVkiZOUZ8kUl+Fg= github.com/libp2p/go-libp2p-record v0.3.1/go.mod h1:T8itUkLcWQLCYMqtX7Th6r7SexyUJpIyPgks757td/E= github.com/libp2p/go-libp2p-routing-helpers v0.7.5 h1:HdwZj9NKovMx0vqq6YNPTh6aaNzey5zHD7HeLJtq6fI= @@ -548,8 +536,8 @@ github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQsc github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= github.com/libp2p/go-yamux/v5 v5.0.1 h1:f0WoX/bEF2E8SbE4c/k1Mo+/9z0O4oC/hWEA+nfYRSg= github.com/libp2p/go-yamux/v5 v5.0.1/go.mod h1:en+3cdX51U0ZslwRdRLrvQsdayFt3TSUKvBGErzpWbU= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag= +github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= @@ -564,19 +552,20 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= -github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= +github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.34 h1:3NtcvcUnFBPsuRcno8pUtupspG/GM+9nZ88zgJcp6Zk= +github.com/mattn/go-sqlite3 v1.14.34/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY= github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg= github.com/mfridman/xflag v0.1.0 h1:TWZrZwG1QklFX5S4j1vxfF1sZbZeZSGofMwPMLAF29M= github.com/mfridman/xflag v0.1.0/go.mod h1:/483ywM5ZO5SuMVjrIGquYNE5CzLrj5Ux/LxWWnjRaE= -github.com/microsoft/go-mssqldb v1.9.2 h1:nY8TmFMQOHpm2qVWo6y4I2mAmVdZqlGiMGAYt64Ibbs= -github.com/microsoft/go-mssqldb v1.9.2/go.mod h1:GBbW9ASTiDC+mpgWDGKdm3FnFLTUsLYN3iFL90lQ+PA= +github.com/microsoft/go-mssqldb v1.9.6 h1:1MNQg5UiSsokiPz3++K2KPx4moKrwIqly1wv+RyCKTw= +github.com/microsoft/go-mssqldb v1.9.6/go.mod h1:yYMPDufyoF2vVuVCUGtZARr06DKFIhMrluTcgWlXpr4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA= -github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps= +github.com/miekg/dns v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI= +github.com/miekg/dns v1.1.72/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs= github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= @@ -618,8 +607,8 @@ github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9 github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= github.com/multiformats/go-multiaddr v0.16.1 h1:fgJ0Pitow+wWXzN9do+1b8Pyjmo8m5WhGfzpL82MpCw= github.com/multiformats/go-multiaddr v0.16.1/go.mod h1:JSVUmXDjsVFiW7RjIFMP7+Ev+h1DTbiJgVeTV/tcmP0= -github.com/multiformats/go-multiaddr-dns v0.4.1 h1:whi/uCLbDS3mSEUMb1MsoT4uzUeZB0N32yzufqS0i5M= -github.com/multiformats/go-multiaddr-dns v0.4.1/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc= +github.com/multiformats/go-multiaddr-dns v0.5.0 h1:p/FTyHKX0nl59f+S+dEUe8HRK+i5Ow/QHMw8Nh3gPCo= +github.com/multiformats/go-multiaddr-dns v0.5.0/go.mod h1:yJ349b8TPIAANUyuOzn1oz9o22tV9f+06L+cCeMxC14= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= @@ -637,15 +626,24 @@ github.com/multiformats/go-varint v0.1.0 h1:i2wqFp4sdl3IcIxfAonHQV9qU5OsZ4Ts9IOo github.com/multiformats/go-varint v0.1.0/go.mod h1:5KVAVXegtfmNQQm/lCY+ATvDzvJJhSkUlGQV9wgObdI= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= -github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= +github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU= -github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU= +github.com/paulmach/orb v0.12.0 h1:z+zOwjmG3MyEEqzv92UN49Lg1JFYx0L9GpGKNVDKk1s= +github.com/paulmach/orb v0.12.0/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU= github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= @@ -655,8 +653,8 @@ github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0 github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk= github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw= -github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= -github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.25 h1:kocOqRffaIbU5djlIBr7Wh+cx82C0vtFb0fOurZHqD0= +github.com/pierrec/lz4/v4 v4.1.25/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o= github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M= github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= @@ -690,31 +688,32 @@ github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= github.com/pion/turn/v4 v4.1.1 h1:9UnY2HB99tpDyz3cVVZguSxcqkJ1DsTSZ+8TGruh4fc= github.com/pion/turn/v4 v4.1.1/go.mod h1:2123tHk1O++vmjI5VSD0awT50NywDAq5A2NNNU4Jjs8= -github.com/pion/webrtc/v4 v4.1.2 h1:mpuUo/EJ1zMNKGE79fAdYNFZBX790KE7kQQpLMjjR54= -github.com/pion/webrtc/v4 v4.1.2/go.mod h1:xsCXiNAmMEjIdFxAYU0MbB3RwRieJsegSB2JZsGN+8U= +github.com/pion/webrtc/v4 v4.1.4 h1:/gK1ACGHXQmtyVVbJFQDxNoODg4eSRiFLB7t9r9pg8M= +github.com/pion/webrtc/v4 v4.1.4/go.mod h1:Oab9npu1iZtQRMic3K3toYq5zFPvToe/QBw7dMI2ok4= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/polydawn/refmt v0.89.1-0.20231129105047-37766d95467a h1:cgqrm0F3zwf9IPzca7xN4w+Zy6MC9ZkPvAC8QEWa/iQ= github.com/polydawn/refmt v0.89.1-0.20231129105047-37766d95467a/go.mod h1:ocZfO/tLSHqfScRDNTJbAJR1by4D1lewauX9OwTaPuY= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/pressly/goose/v3 v3.26.0 h1:KJakav68jdH0WDvoAcj8+n61WqOIaPGgH0bJWS6jpmM= -github.com/pressly/goose/v3 v3.26.0/go.mod h1:4hC1KrritdCxtuFsqgs1R4AU5bWtTAf+cnWvfhf2DNY= -github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= -github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= +github.com/pressly/goose/v3 v3.27.0 h1:/D30gVTuQhu0WsNZYbJi4DMOsx1lNq+6SkLe+Wp59BM= +github.com/pressly/goose/v3 v3.27.0/go.mod h1:3ZBeCXqzkgIRvrEMDkYh1guvtoJTU5oMMuDdkutoM78= +github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= +github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= -github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= +github.com/prometheus/common v0.67.4 h1:yR3NqWO1/UyO1w2PhUvXlGQs/PtFmoveVO0KZ4+Lvsc= +github.com/prometheus/common v0.67.4/go.mod h1:gP0fq6YjjNCLssJCQp0yk4M8W6ikLURwkdd/YKtTbyI= github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= -github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= +github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws= +github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw= github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= @@ -725,7 +724,6 @@ github.com/rekby/fixenv v0.6.1 h1:jUFiSPpajT4WY2cYuc++7Y1zWrnCxnovGCIX72PZniM= github.com/rekby/fixenv v0.6.1/go.mod h1:/b5LRc06BYJtslRtHKxsPWFT/ySpHV+rWvzTg+XWk4c= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -740,8 +738,8 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= -github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= +github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0= +github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/sethvargo/go-retry v0.3.0 h1:EEt31A35QhrcRZtrYFDTBg91cqZVnFL2navjDrah2SE= github.com/sethvargo/go-retry v0.3.0/go.mod h1:mNX17F0C/HguQMyMyJxcnU471gOZGxCLyYaFyAZraas= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= @@ -772,13 +770,13 @@ github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= -github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= @@ -792,8 +790,9 @@ github.com/storacha/go-fil-commp-hashhash v0.0.0-20251204184521-dc48123eb846/go. github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4= +github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -801,6 +800,7 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= @@ -809,9 +809,11 @@ github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tursodatabase/libsql-client-go v0.0.0-20240902231107-85af5b9d094d h1:dOMI4+zEbDI37KGb0TI44GUAwxHF9cMsIoDTJ7UmgfU= -github.com/tursodatabase/libsql-client-go v0.0.0-20240902231107-85af5b9d094d/go.mod h1:l8xTsYB90uaVdMHXMCxKKLSgw5wLYBwBKKefNIUnm9s= +github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc h1:lzi/5fg2EfinRlh3v//YyIhnc4tY7BTqazQGwb1ar+0= +github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc/go.mod h1:08inkKyguB6CGGssc/JzhmQWwBgFQBgjlYFjxjRh7nU= github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb h1:Ywfo8sUltxogBpFuMOFRrrSifO788kAFxmvVw31PtQQ= github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb/go.mod h1:ikPs9bRWicNw3S7XpJ8sK/smGwU9WcSVU3dy9qahYBM= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= @@ -823,8 +825,8 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vertica/vertica-sql-go v1.3.3 h1:fL+FKEAEy5ONmsvya2WH5T8bhkvY27y/Ik3ReR2T+Qw= -github.com/vertica/vertica-sql-go v1.3.3/go.mod h1:jnn2GFuv+O2Jcjktb7zyc4Utlbu9YVqpHH/lx63+1M4= +github.com/vertica/vertica-sql-go v1.3.5 h1:IrfH2WIgzZ45yDHyjVFrXU2LuKNIjF5Nwi90a6cfgUI= +github.com/vertica/vertica-sql-go v1.3.5/go.mod h1:jnn2GFuv+O2Jcjktb7zyc4Utlbu9YVqpHH/lx63+1M4= github.com/warpfork/go-testmark v0.12.1 h1:rMgCpJfwy1sJ50x0M0NgyphxYYPMOODIJHhsXyEHU0s= github.com/warpfork/go-testmark v0.12.1/go.mod h1:kHwy7wfvGSPh1rQJYKayD4AbtNaeyZdcGi9tNJTaa5Y= github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ= @@ -850,14 +852,14 @@ github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgk github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= +github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 h1:FnBeRrxr7OU4VvAzt5X7s6266i6cSVkkFPS0TuXWbIg= +github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -github.com/ydb-platform/ydb-go-genproto v0.0.0-20241112172322-ea1f63298f77 h1:LY6cI8cP4B9rrpTleZk95+08kl2gF4rixG7+V/dwL6Q= -github.com/ydb-platform/ydb-go-genproto v0.0.0-20241112172322-ea1f63298f77/go.mod h1:Er+FePu1dNUieD+XTMDduGpQuCPssK5Q4BjF+IIXJ3I= -github.com/ydb-platform/ydb-go-sdk/v3 v3.108.1 h1:ixAiqjj2S/dNuJqrz4AxSqgw2P5OBMXp68hB5nNriUk= -github.com/ydb-platform/ydb-go-sdk/v3 v3.108.1/go.mod h1:l5sSv153E18VvYcsmr51hok9Sjc16tEC8AXGbwrk+ho= +github.com/ydb-platform/ydb-go-genproto v0.0.0-20260128080146-c4ed16b24b37 h1:kUXMT/fM/DpDT66WQgRUf3I8VOAWjypkMf52W5PChwA= +github.com/ydb-platform/ydb-go-genproto v0.0.0-20260128080146-c4ed16b24b37/go.mod h1:Er+FePu1dNUieD+XTMDduGpQuCPssK5Q4BjF+IIXJ3I= +github.com/ydb-platform/ydb-go-sdk/v3 v3.127.0 h1:OfHS9ZkZgCy6y/CJ9N8123DXrgaY2BPxWsQiQ8e3wC8= +github.com/ydb-platform/ydb-go-sdk/v3 v3.127.0/go.mod h1:stS1mQYjbJvwwYaYzKyFY9eMiuVXWWXQA6T+SpOLg9c= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -884,33 +886,30 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= -go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= -go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 h1:bDMKF3RUSxshZ5OjOTi8rsHGaPKsAt76FaqgvIUySLc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0/go.mod h1:dDT67G/IkA46Mr2l9Uj7HsQVwsjASyV9SjGofsiUZDA= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 h1:3iZJKlCZufyRzPzlQhUIWVmfltrXuGyfjREgGP3UUjc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0/go.mod h1:/G+nUPfhq2e+qiXMGxMwumDrP5jtzU+mWN7/sjT2rak= go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= -go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= -go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= -go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= -go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= -go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= -go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= -go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= -go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= +go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4= go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg= @@ -919,15 +918,14 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= -go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo= +go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q= +go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= +go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -988,6 +986,7 @@ golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1010,6 +1009,7 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -1022,12 +1022,15 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1057,6 +1060,7 @@ golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1068,9 +1072,11 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1091,6 +1097,7 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1103,6 +1110,8 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1134,8 +1143,8 @@ golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +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= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1152,8 +1161,6 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1185,6 +1192,7 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -1203,10 +1211,11 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1277,10 +1286,10 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY= -google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= +google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68 h1:WVVw1Nl19li0fMX++FJ3ye1z9+S1N35QODDy5qpnaXw= +google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:1dCETSCY2YKZNXQE3h4fun3TYwF5p8jejRKZgfWAgAY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68 h1:PvEgGJf9C/1u5CHkInMg7UFYYUoiaQmW2LbtH0pjB78= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1302,8 +1311,8 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= -google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= +google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1326,12 +1335,16 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -1350,18 +1363,20 @@ howett.net/plist v1.0.1 h1:37GdZ8tP09Q35o9ych3ehygcsL+HqKSwzctveSlarvM= howett.net/plist v1.0.1/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= lukechampine.com/blake3 v1.4.1 h1:I3Smz7gso8w4/TunLKec6K2fn+kyKtDxr/xcQEN84Wg= lukechampine.com/blake3 v1.4.1/go.mod h1:QFosUxmjB8mnrWFSNwKmvxHpfY72bmD2tQ0kBMM3kwo= -modernc.org/cc/v4 v4.26.2 h1:991HMkLjJzYBIfha6ECZdjrIYz2/1ayr+FL8GN+CNzM= -modernc.org/cc/v4 v4.26.2/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= -modernc.org/ccgo/v4 v4.28.0 h1:rjznn6WWehKq7dG4JtLRKxb52Ecv8OUGah8+Z/SfpNU= -modernc.org/ccgo/v4 v4.28.0/go.mod h1:JygV3+9AV6SmPhDasu4JgquwU81XAKLd3OKTUDNOiKE= -modernc.org/fileutil v1.3.8 h1:qtzNm7ED75pd1C7WgAGcK4edm4fvhtBsEiI/0NQ54YM= -modernc.org/fileutil v1.3.8/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= +modernc.org/cc/v4 v4.27.1 h1:9W30zRlYrefrDV2JE2O8VDtJ1yPGownxciz5rrbQZis= +modernc.org/cc/v4 v4.27.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.30.2 h1:4yPaaq9dXYXZ2V8s1UgrC3KIj580l2N4ClrLwnbv2so= +modernc.org/ccgo/v4 v4.30.2/go.mod h1:yZMnhWEdW0qw3EtCndG1+ldRrVGS+bIwyWmAWzS0XEw= +modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA= +modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo= +modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= -modernc.org/libc v1.66.3 h1:cfCbjTUcdsKyyZZfEUKfoHcP3S0Wkvz3jgSzByEWVCQ= -modernc.org/libc v1.66.3/go.mod h1:XD9zO8kt59cANKvHPXpx7yS2ELPheAey0vjIuZOhOU8= +modernc.org/libc v1.68.0 h1:PJ5ikFOV5pwpW+VqCK1hKJuEWsonkIJhhIXyuF/91pQ= +modernc.org/libc v1.68.0/go.mod h1:NnKCYeoYgsEqnY3PgvNgAeaJnso968ygU8Z0DxjoEc0= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= @@ -1370,8 +1385,8 @@ modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= -modernc.org/sqlite v1.38.2 h1:Aclu7+tgjgcQVShZqim41Bbw9Cho0y/7WzYptXqkEek= -modernc.org/sqlite v1.38.2/go.mod h1:cPTJYSlgg3Sfg046yBShXENNtPrWrDX8bsbAQBzgQ5E= +modernc.org/sqlite v1.46.1 h1:eFJ2ShBLIEnUWlLy12raN0Z1plqmFX9Qe3rjQTKt6sU= +modernc.org/sqlite v1.46.1/go.mod h1:CzbrU2lSB1DKUusvwGz7rqEKIq+NUd8GWuBBZDs9/nA= modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/internal/cmdutil/cmdutil.go b/internal/cmdutil/cmdutil.go index bf52110..78418af 100644 --- a/internal/cmdutil/cmdutil.go +++ b/internal/cmdutil/cmdutil.go @@ -20,21 +20,21 @@ import ( receiptclient "github.com/fil-forge/libforge/receipt" utclient "github.com/fil-forge/ucantone/client" "github.com/fil-forge/ucantone/did" - utd25519 "github.com/fil-forge/ucantone/principal/ed25519" - utucan "github.com/fil-forge/ucantone/ucan" + "github.com/fil-forge/ucantone/multikey" + uted25519 "github.com/fil-forge/ucantone/multikey/ed25519" "github.com/fil-forge/ucantone/ucan/container" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" ) // envSigner returns a signer from the environment variable GUPPY_PRIVATE_KEY, // if any. -func envSigner() (utucan.Signer, error) { +func envSigner() (multikey.Signer, error) { str := os.Getenv("GUPPY_PRIVATE_KEY") // use env var preferably if str == "" { return nil, nil // no signer in the environment } - s, err := utd25519.Parse(str) + s, err := uted25519.Parse(str) if err != nil { return nil, err } @@ -63,8 +63,8 @@ func MustGetClientForNetwork(cfg config.Config, flagName string, options ...clie if err != nil { log.Fatalf("reading key file: %s", err) } - var agent utucan.Signer - agent, err = identity.DecodeEd25519SignerFromPEM(pem) + var agentSigner multikey.Signer + agentSigner, err = identity.DecodeSignerFromPEM(pem) if err != nil { log.Fatalf("parsing key file: %s", err) } @@ -73,7 +73,7 @@ func MustGetClientForNetwork(cfg config.Config, flagName string, options ...clie if s, err := envSigner(); err != nil { log.Fatalf("parsing GUPPY_PRIVATE_KEY: %s", err) } else if s != nil { - agent = s + agentSigner = s } store, err := tokenstore.NewFsStore(cfg.Repo.Dir) @@ -81,6 +81,7 @@ func MustGetClientForNetwork(cfg config.Config, flagName string, options ...clie log.Fatalf("creating token store: %s", err) } + agent := multikey.KeyIssuer(agentSigner) network := MustGetNetworkConfig(cfg.Network, flagName) c, err := client.New( diff --git a/internal/testutil/blobindex.go b/internal/testutil/blobindex.go index 1d09395..fc87f63 100644 --- a/internal/testutil/blobindex.go +++ b/internal/testutil/blobindex.go @@ -19,8 +19,8 @@ func RandomShardedDagIndexView(t *testing.T, size int) (mh.Multihash, blobindex. index := blobindex.NewShardedDagIndex(size) var lastSlice mh.Multihash for range size { - shard := libtestutil.RandomMultihash(t) - slice := libtestutil.RandomMultihash(t) + shard := libtestutil.RandomDigest(t) + slice := libtestutil.RandomDigest(t) index.SetSlice(shard, slice, blobindex.Range{Start: 0, End: 99}) lastSlice = slice } diff --git a/internal/testutil/invocation.go b/internal/testutil/invocation.go index c5a83e6..b621281 100644 --- a/internal/testutil/invocation.go +++ b/internal/testutil/invocation.go @@ -16,9 +16,9 @@ import ( // has no libforge equivalent. func RandomLocationInvocation(t *testing.T) ucan.Invocation { t.Helper() - signer := libtestutil.RandomSigner(t) + signer := libtestutil.RandomIssuer(t) space := libtestutil.RandomDID(t) - digest := libtestutil.RandomMultihash(t) + digest := libtestutil.RandomDigest(t) storageURL := libtestutil.Must(url.Parse("https://storage.example/blob/" + digestutil.Format(digest)))(t) return libtestutil.Must(assertcmds.Location.Invoke( signer, diff --git a/pkg/client/accessdelegate.go b/pkg/client/accessdelegate.go index c158f24..b590fc0 100644 --- a/pkg/client/accessdelegate.go +++ b/pkg/client/accessdelegate.go @@ -22,17 +22,13 @@ func (c *Client) AccessDelegate(ctx context.Context, space did.DID, delegations } args := access.DelegateArguments{Delegations: delegationLinks} - proofs, proofLinks, err := c.ProofChain(ctx, c.signer.DID(), access.Delegate.Command, space) + proofs, proofLinks, err := c.ProofChain(ctx, c.issuer.DID(), access.Delegate.Command, space) if err != nil { return nil, fmt.Errorf("building proof chain: %w", err) } - attestations, err := c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return nil, fmt.Errorf("fetching proof attestations: %w", err) - } inv, err := access.Delegate.Invoke( - c.signer, + c.issuer, space, &args, invocation.WithAudience(c.serviceID), @@ -48,7 +44,6 @@ func (c *Client) AccessDelegate(ctx context.Context, space did.DID, delegations inv, execution.WithDelegations(proofs...), execution.WithDelegations(delegations...), - execution.WithInvocations(attestations...), ) if err != nil { return nil, fmt.Errorf("executing delegate invocation: %w", err) diff --git a/pkg/client/accessdelegate_test.go b/pkg/client/accessdelegate_test.go index 9c9080b..2032a98 100644 --- a/pkg/client/accessdelegate_test.go +++ b/pkg/client/accessdelegate_test.go @@ -20,7 +20,7 @@ import ( func TestAccessDelegate(t *testing.T) { t.Run("stores delegations via access/delegate", func(t *testing.T) { ctx := t.Context() - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) var receivedSubject did.DID var receivedDelegations []cid.Cid @@ -49,7 +49,7 @@ func TestAccessDelegate(t *testing.T) { t.Run("handles multiple delegations", func(t *testing.T) { ctx := t.Context() - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) var receivedDelegations []cid.Cid c := testutil.Must(ctestutil.Client(t, @@ -78,7 +78,7 @@ func TestAccessDelegate(t *testing.T) { t.Run("includes delegations as proofs in the invocation", func(t *testing.T) { ctx := t.Context() - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) var receivedProofLinks []cid.Cid c := testutil.Must(ctestutil.Client(t, @@ -112,7 +112,7 @@ func TestAccessDelegate(t *testing.T) { t.Run("returns error on failure", func(t *testing.T) { ctx := t.Context() - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) c := testutil.Must(ctestutil.Client(t, ctestutil.WithServerRoutes(func(deps ctestutil.RouteDeps) server.Route { diff --git a/pkg/client/accounts.go b/pkg/client/accounts.go index e0dbfdc..0627956 100644 --- a/pkg/client/accounts.go +++ b/pkg/client/accounts.go @@ -12,7 +12,7 @@ import ( func (c *Client) Accounts(ctx context.Context) ([]did.DID, error) { accounts := make(map[did.DID]struct{}) - for d, err := range c.tokenStore.ListDelegations(ctx, c.signer.DID(), command.Top(), did.Undef) { + for d, err := range c.tokenStore.ListDelegations(ctx, c.issuer.DID(), command.Top(), did.Undef) { if err != nil { return nil, err } diff --git a/pkg/client/blobadd.go b/pkg/client/blobadd.go index f0e2704..0b22a6f 100644 --- a/pkg/client/blobadd.go +++ b/pkg/client/blobadd.go @@ -21,7 +21,8 @@ import ( "github.com/fil-forge/ucantone/execution" "github.com/fil-forge/ucantone/ipld" "github.com/fil-forge/ucantone/ipld/datamodel" - "github.com/fil-forge/ucantone/principal/ed25519" + "github.com/fil-forge/ucantone/multikey" + "github.com/fil-forge/ucantone/multikey/ed25519" "github.com/fil-forge/ucantone/ucan" "github.com/fil-forge/ucantone/ucan/invocation" "github.com/fil-forge/ucantone/ucan/receipt" @@ -155,17 +156,13 @@ func (c *Client) BlobAdd(ctx context.Context, content io.Reader, space did.DID, } } - proofs, proofLinks, err := c.ProofChain(ctx, c.signer.DID(), blobcmds.Add.Command, space) + proofs, proofLinks, err := c.ProofChain(ctx, c.issuer.DID(), blobcmds.Add.Command, space) if err != nil { return AddedBlob{}, fmt.Errorf("building proof chain: %w", err) } - attestations, err := c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return AddedBlob{}, fmt.Errorf("fetching proof attestations: %w", err) - } inv, err := blobcmds.Add.Invoke( - c.signer, + c.issuer, space, &blobcmds.AddArguments{ Blob: blobcmds.Blob{ @@ -185,7 +182,6 @@ func (c *Client) BlobAdd(ctx context.Context, content io.Reader, space did.DID, c.ucanClient, inv, execution.WithDelegations(proofs...), - execution.WithInvocations(attestations...), ) if err != nil { return AddedBlob{}, fmt.Errorf("executing blob add: %w", err) @@ -361,14 +357,15 @@ func (c *Client) sendPutReceipt(ctx context.Context, putInv ucan.Invocation, opt if err != nil { return fmt.Errorf("decoding key for %q: %w", did, err) } - putRcpt, err := receipt.IssueOK(signer, putInv.Task().Link(), &httpcmds.PutOK{}, receipt.WithIssuedAt(ucan.Now())) + issuer := multikey.KeyIssuer(signer) + putRcpt, err := receipt.IssueOK(issuer, putInv.Task().Link(), &httpcmds.PutOK{}, receipt.WithIssuedAt(ucan.Now())) if err != nil { return fmt.Errorf("generating receipt: %w", err) } inv, err := ucancmds.Conclude.Invoke( - c.signer, - c.signer.DID(), + c.issuer, + c.issuer.DID(), &ucancmds.ConcludeArguments{ Receipt: putRcpt.Link(), }, diff --git a/pkg/client/blobadd_test.go b/pkg/client/blobadd_test.go index 3d53f0c..7265b1e 100644 --- a/pkg/client/blobadd_test.go +++ b/pkg/client/blobadd_test.go @@ -16,7 +16,7 @@ import ( func TestBlobAdd(t *testing.T) { t.Run("adds and PUTs the blob", func(t *testing.T) { ctx := t.Context() - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) putClient := ctestutil.NewPutClient() c := testutil.Must(ctestutil.Client(t, ctestutil.WithBlobAdd(t)))(t) @@ -39,7 +39,7 @@ func TestBlobAdd(t *testing.T) { t.Run("with a pre-existing http/put success receipt, does not PUT", func(t *testing.T) { ctx := t.Context() - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) putClient := ctestutil.NewPutClient() c := testutil.Must(ctestutil.Client(t, ctestutil.WithBlobAddPutReceipt(t)))(t) diff --git a/pkg/client/bloblist.go b/pkg/client/bloblist.go index fb8f43c..e688438 100644 --- a/pkg/client/bloblist.go +++ b/pkg/client/bloblist.go @@ -19,17 +19,13 @@ import ( // // The `args` are arguments required to perform an `/blob/list` invocation. func (c *Client) BlobList(ctx context.Context, space did.DID, args blobcmds.ListArguments) (*blobcmds.ListOK, error) { - proofs, proofLinks, err := c.ProofChain(ctx, c.signer.DID(), blobcmds.List.Command, space) + proofs, proofLinks, err := c.ProofChain(ctx, c.issuer.DID(), blobcmds.List.Command, space) if err != nil { return nil, fmt.Errorf("building proof chain: %w", err) } - attestations, err := c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return nil, fmt.Errorf("fetching proof attestations: %w", err) - } inv, err := blobcmds.List.Invoke( - c.signer, + c.issuer, space, &args, invocation.WithAudience(c.serviceID), @@ -44,7 +40,6 @@ func (c *Client) BlobList(ctx context.Context, space did.DID, args blobcmds.List c.ucanClient, inv, execution.WithDelegations(proofs...), - execution.WithInvocations(attestations...), ) if err != nil { return nil, fmt.Errorf("executing invocation: %w", err) diff --git a/pkg/client/bloblist_test.go b/pkg/client/bloblist_test.go index d0cec59..f4ae720 100644 --- a/pkg/client/bloblist_test.go +++ b/pkg/client/bloblist_test.go @@ -16,11 +16,11 @@ import ( func TestBlobList(t *testing.T) { t.Run("lists blobs in a space", func(t *testing.T) { ctx := t.Context() - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) results := []blobcmds.ListBlobItem{ { - Blob: blobcmds.Blob{Digest: testutil.RandomMultihash(t), Size: 32}, + Blob: blobcmds.Blob{Digest: testutil.RandomDigest(t), Size: 32}, InsertedAt: time.Now().Unix(), }, } diff --git a/pkg/client/claimaccess.go b/pkg/client/claimaccess.go index 2120b32..7d7dbe5 100644 --- a/pkg/client/claimaccess.go +++ b/pkg/client/claimaccess.go @@ -23,21 +23,16 @@ import ( func (c *Client) ClaimAccess(ctx context.Context, sub did.DID) ([]ucan.Delegation, []ucan.Invocation, error) { var proofs []ucan.Delegation var proofLinks []cid.Cid - var proofAttestations []ucan.Invocation var err error - if c.signer.DID() != sub { - proofs, proofLinks, err = c.ProofChain(ctx, c.signer.DID(), accesscmds.Claim.Command, sub) + if c.issuer.DID() != sub { + proofs, proofLinks, err = c.ProofChain(ctx, c.issuer.DID(), accesscmds.Claim.Command, sub) if err != nil { return nil, nil, fmt.Errorf("building proof chain: %w", err) } - proofAttestations, err = c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return nil, nil, fmt.Errorf("fetching attestations for proof chain: %w", err) - } } inv, err := accesscmds.Claim.Invoke( - c.signer, + c.issuer, sub, &accesscmds.ClaimArguments{}, invocation.WithAudience(c.serviceID), @@ -52,7 +47,6 @@ func (c *Client) ClaimAccess(ctx context.Context, sub did.DID) ([]ucan.Delegatio c.ucanClient, inv, execution.WithDelegations(proofs...), - execution.WithInvocations(proofAttestations...), ) if err != nil { return nil, nil, fmt.Errorf("executing claim invocation: %w", err) @@ -69,7 +63,7 @@ func (c *Client) ClaimAccess(ctx context.Context, sub did.DID) ([]ucan.Delegatio if inv.Command() != attestcmds.Proof.Command { continue } - if inv.Audience() == c.signer.DID() { + if inv.Audience() == c.issuer.DID() { attestations = append(attestations, inv) } } diff --git a/pkg/client/client.go b/pkg/client/client.go index e376597..d1a916e 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -15,6 +15,7 @@ import ( edm "github.com/fil-forge/ucantone/errors/datamodel" "github.com/fil-forge/ucantone/execution" "github.com/fil-forge/ucantone/ipld/datamodel" + "github.com/fil-forge/ucantone/multikey" "github.com/fil-forge/ucantone/ucan" "github.com/ipfs/go-cid" logging "github.com/ipfs/go-log/v2" @@ -30,7 +31,7 @@ var ( ) type Client struct { - signer ucan.Signer + issuer multikey.Issuer serviceID did.DID ucanClient *client.HTTPClient ucanOpts []client.HTTPOption @@ -39,9 +40,9 @@ type Client struct { retrievalOpts []retrieval.ClientOption } -func New(signer ucan.Signer, serviceID did.DID, serviceURL url.URL, options ...Option) (*Client, error) { +func New(issuer multikey.Issuer, serviceID did.DID, serviceURL url.URL, options ...Option) (*Client, error) { c := Client{ - signer: signer, + issuer: issuer, serviceID: serviceID, receiptsClient: receipt.NewClient(serviceURL.JoinPath("/receipt/")), } @@ -68,12 +69,12 @@ func New(signer ucan.Signer, serviceID did.DID, serviceURL url.URL, options ...O // DID returns the DID of the agent. func (c *Client) DID() did.DID { - return c.signer.DID() + return c.issuer.DID() } // Issuer returns the issuing signer of the agent. -func (c *Client) Issuer() ucan.Signer { - return c.signer +func (c *Client) Issuer() multikey.Issuer { + return c.issuer } // ServiceID returns the DID of the upload service this client is connected to. @@ -91,14 +92,6 @@ func (c *Client) ProofChain(ctx context.Context, aud did.DID, cmd ucan.Command, return c.tokenStore.ProofChain(ctx, aud, cmd, sub) } -// ProofAttestations returns a list of attestations for proofs that need them. -// i.e. if a proof is signed with a non-standard signature this function will -// fetch an attestation for it, and fail if it cannot. The authority parameter -// is the DID of the service we trust to be issuing attestations. -func (c *Client) ProofAttestations(ctx context.Context, proofs []ucan.Delegation, authority did.DID) ([]ucan.Invocation, error) { - return c.tokenStore.ProofAttestations(ctx, proofs, authority) -} - // AddProofs adds the given delegations to the client's token store. func (c *Client) AddProofs(ctx context.Context, delegations ...ucan.Delegation) error { return c.tokenStore.AddDelegations(ctx, delegations...) diff --git a/pkg/client/client_test.go b/pkg/client/client_test.go index 3fa3014..dd04d7d 100644 --- a/pkg/client/client_test.go +++ b/pkg/client/client_test.go @@ -21,7 +21,7 @@ import ( func TestReset(t *testing.T) { ctx := t.Context() - agent := testutil.RandomSigner(t) + agent := testutil.RandomMultikeyIssuer(t) store := tokenstore.NewMemStore() c := testutil.Must(client.New( agent, diff --git a/pkg/client/indexadd.go b/pkg/client/indexadd.go index 5cdd273..8aa69a1 100644 --- a/pkg/client/indexadd.go +++ b/pkg/client/indexadd.go @@ -17,7 +17,7 @@ import ( func (c *Client) IndexAdd(ctx context.Context, indexCID cid.Cid, space did.DID) error { retrievalAuth, err := contentcmds.Retrieve.Delegate( - c.signer, + c.issuer, c.serviceID, space, delegation.WithPolicyBuilder( @@ -27,25 +27,16 @@ func (c *Client) IndexAdd(ctx context.Context, indexCID cid.Cid, space did.DID) if err != nil { return fmt.Errorf("creating retrieval auth delegation: %w", err) } - retrievalProofs, retrievalProofLinks, err := c.ProofChain(ctx, c.signer.DID(), contentcmds.Retrieve.Command, space) + retrievalProofs, retrievalProofLinks, err := c.ProofChain(ctx, c.issuer.DID(), contentcmds.Retrieve.Command, space) if err != nil { return fmt.Errorf("building proof chain: %w", err) } - retrievalAttestations, err := c.ProofAttestations(ctx, retrievalProofs, c.serviceID) - if err != nil { - return fmt.Errorf("fetching proof attestations: %w", err) - } - - proofs, proofLinks, err := c.ProofChain(ctx, c.signer.DID(), indexcmds.Add.Command, space) + proofs, proofLinks, err := c.ProofChain(ctx, c.issuer.DID(), indexcmds.Add.Command, space) if err != nil { return fmt.Errorf("building proof chain: %w", err) } - attestations, err := c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return fmt.Errorf("fetching proof attestations: %w", err) - } inv, err := indexcmds.Add.Invoke( - c.signer, + c.issuer, space, &indexcmds.AddArguments{Index: indexCID}, invocation.WithAudience(c.serviceID), @@ -63,7 +54,6 @@ func (c *Client) IndexAdd(ctx context.Context, indexCID cid.Cid, space did.DID) c.ucanClient, inv, execution.WithDelegations(proofs...), - execution.WithInvocations(attestations...), execution.WithDelegations(retrievalProofs...), // The leaf delegation (guppy → upload) granting /content/retrieve // on this space must travel with the request — metadata.retrievalAuth @@ -71,7 +61,6 @@ func (c *Client) IndexAdd(ctx context.Context, indexCID cid.Cid, space did.DID) // can't reassemble the chain that sprue's PublishIndexClaim needs to // re-delegate to the indexer. execution.WithDelegations(retrievalAuth), - execution.WithInvocations(retrievalAttestations...), ) if err != nil { return fmt.Errorf("executing invocation: %w", err) diff --git a/pkg/client/indexadd_test.go b/pkg/client/indexadd_test.go index 9d07598..67d5170 100644 --- a/pkg/client/indexadd_test.go +++ b/pkg/client/indexadd_test.go @@ -23,7 +23,7 @@ import ( func TestIndexAdd(t *testing.T) { t.Run("invokes index/add for the given index", func(t *testing.T) { ctx := t.Context() - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) var capturedIndex cid.Cid var capturedSubject did.DID diff --git a/pkg/client/locator/indexlocator_test.go b/pkg/client/locator/indexlocator_test.go index 4d52443..1f8b82a 100644 --- a/pkg/client/locator/indexlocator_test.go +++ b/pkg/client/locator/indexlocator_test.go @@ -15,7 +15,6 @@ import ( "github.com/fil-forge/libforge/digestutil" libtestutil "github.com/fil-forge/libforge/testutil" "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/principal/ed25519" "github.com/fil-forge/ucantone/ucan" "github.com/fil-forge/ucantone/ucan/invocation" "github.com/ipfs/go-cid" @@ -43,7 +42,7 @@ func cborURLs(t *testing.T, strs ...string) []commands.CborURL { // locationClaim builds an assert/location commitment invocation, as the indexer // would return it. -func locationClaim(t *testing.T, provider ed25519.Signer, space did.DID, content mh.Multihash, urls ...string) ucan.Invocation { +func locationClaim(t *testing.T, provider ucan.Issuer, space did.DID, content mh.Multihash, urls ...string) ucan.Invocation { t.Helper() return libtestutil.Must(assertcmds.Location.Invoke( provider, @@ -60,7 +59,7 @@ func locationClaim(t *testing.T, provider ed25519.Signer, space did.DID, content // retrieval authorization handed to the indexer. func randomDelegation(t *testing.T) ucan.Delegation { t.Helper() - s := libtestutil.RandomSigner(t) + s := libtestutil.RandomIssuer(t) return libtestutil.Must(uploadcmds.Add.Delegate(s, s.DID(), s.DID()))(t) } @@ -77,12 +76,12 @@ func archiveIndex(t *testing.T, index blobindex.ShardedDagIndex) types.Block { func TestLocator(t *testing.T) { t.Run("locates block from indexer", func(t *testing.T) { - blockHash := libtestutil.RandomMultihash(t) - shardHash := libtestutil.RandomMultihash(t) + blockHash := libtestutil.RandomDigest(t) + shardHash := libtestutil.RandomDigest(t) - space := libtestutil.RandomSigner(t) - provider1 := libtestutil.RandomSigner(t) - provider2 := libtestutil.RandomSigner(t) + space := libtestutil.RandomPrincipal(t) + provider1 := libtestutil.RandomIssuer(t) + provider2 := libtestutil.RandomIssuer(t) claim1 := locationClaim(t, provider1, space.DID(), shardHash, "https://storage1.example.com/block/abc123", @@ -132,12 +131,12 @@ func TestLocator(t *testing.T) { }) t.Run("caches unrequested blocks", func(t *testing.T) { - block1Hash := libtestutil.RandomMultihash(t) - block2Hash := libtestutil.RandomMultihash(t) - shardHash := libtestutil.RandomMultihash(t) + block1Hash := libtestutil.RandomDigest(t) + block2Hash := libtestutil.RandomDigest(t) + shardHash := libtestutil.RandomDigest(t) - space := libtestutil.RandomSigner(t) - provider := libtestutil.RandomSigner(t) + space := libtestutil.RandomPrincipal(t) + provider := libtestutil.RandomIssuer(t) claim := locationClaim(t, provider, space.DID(), shardHash, "https://storage.example.com/shard/xyz") @@ -170,13 +169,13 @@ func TestLocator(t *testing.T) { }) t.Run("location-only query for block in cached index", func(t *testing.T) { - block1Hash := libtestutil.RandomMultihash(t) - block2Hash := libtestutil.RandomMultihash(t) - shard1Hash := libtestutil.RandomMultihash(t) - shard2Hash := libtestutil.RandomMultihash(t) + block1Hash := libtestutil.RandomDigest(t) + block2Hash := libtestutil.RandomDigest(t) + shard1Hash := libtestutil.RandomDigest(t) + shard2Hash := libtestutil.RandomDigest(t) - space := libtestutil.RandomSigner(t) - provider := libtestutil.RandomSigner(t) + space := libtestutil.RandomPrincipal(t) + provider := libtestutil.RandomIssuer(t) claim1 := locationClaim(t, provider, space.DID(), shard1Hash, "https://storage.example.com/shard1") @@ -210,12 +209,12 @@ func TestLocator(t *testing.T) { }) t.Run("cache is space-scoped", func(t *testing.T) { - blockHash := libtestutil.RandomMultihash(t) - shardHash := libtestutil.RandomMultihash(t) + blockHash := libtestutil.RandomDigest(t) + shardHash := libtestutil.RandomDigest(t) - space1 := libtestutil.RandomSigner(t) - space2 := libtestutil.RandomSigner(t) - provider := libtestutil.RandomSigner(t) + space1 := libtestutil.RandomPrincipal(t) + space2 := libtestutil.RandomPrincipal(t) + provider := libtestutil.RandomIssuer(t) claim1 := locationClaim(t, provider, space1.DID(), shardHash, "https://storage1.example.com/space1/block") claim2 := locationClaim(t, provider, space2.DID(), shardHash, "https://storage2.example.com/space2/block") @@ -243,15 +242,15 @@ func TestLocator(t *testing.T) { }) t.Run("supports multi space locating", func(t *testing.T) { - blockDigest1 := libtestutil.RandomMultihash(t) - blockDigest2 := libtestutil.RandomMultihash(t) - shardDigest1 := libtestutil.RandomMultihash(t) - shardDigest2 := libtestutil.RandomMultihash(t) + blockDigest1 := libtestutil.RandomDigest(t) + blockDigest2 := libtestutil.RandomDigest(t) + shardDigest1 := libtestutil.RandomDigest(t) + shardDigest2 := libtestutil.RandomDigest(t) - space1 := libtestutil.RandomSigner(t) - space2 := libtestutil.RandomSigner(t) - provider1 := libtestutil.RandomSigner(t) - provider2 := libtestutil.RandomSigner(t) + space1 := libtestutil.RandomPrincipal(t) + space2 := libtestutil.RandomPrincipal(t) + provider1 := libtestutil.RandomIssuer(t) + provider2 := libtestutil.RandomIssuer(t) claim1 := locationClaim(t, provider1, space1.DID(), shardDigest1, "https://storage1.example.com/block/abc123", @@ -310,14 +309,14 @@ func TestLocator(t *testing.T) { func TestLocateMany(t *testing.T) { t.Run("locates multiple digests at once across two shards", func(t *testing.T) { - block1Hash := libtestutil.RandomMultihash(t) - block2Hash := libtestutil.RandomMultihash(t) - block3Hash := libtestutil.RandomMultihash(t) - shard1Hash := libtestutil.RandomMultihash(t) - shard2Hash := libtestutil.RandomMultihash(t) + block1Hash := libtestutil.RandomDigest(t) + block2Hash := libtestutil.RandomDigest(t) + block3Hash := libtestutil.RandomDigest(t) + shard1Hash := libtestutil.RandomDigest(t) + shard2Hash := libtestutil.RandomDigest(t) - space := libtestutil.RandomSigner(t) - provider := libtestutil.RandomSigner(t) + space := libtestutil.RandomPrincipal(t) + provider := libtestutil.RandomIssuer(t) claim1 := locationClaim(t, provider, space.DID(), shard1Hash, "https://storage.example.com/shard1/abc") claim2 := locationClaim(t, provider, space.DID(), shard2Hash, "https://storage.example.com/shard2/def") @@ -363,12 +362,12 @@ func TestLocateMany(t *testing.T) { }) t.Run("returns partial results when some blocks not found", func(t *testing.T) { - block1Hash := libtestutil.RandomMultihash(t) - block2Hash := libtestutil.RandomMultihash(t) - shardHash := libtestutil.RandomMultihash(t) + block1Hash := libtestutil.RandomDigest(t) + block2Hash := libtestutil.RandomDigest(t) + shardHash := libtestutil.RandomDigest(t) - space := libtestutil.RandomSigner(t) - provider := libtestutil.RandomSigner(t) + space := libtestutil.RandomPrincipal(t) + provider := libtestutil.RandomIssuer(t) claim := locationClaim(t, provider, space.DID(), shardHash, "https://storage.example.com/shard/abc") @@ -396,14 +395,14 @@ func TestLocateMany(t *testing.T) { }) t.Run("batches queries for uncached blocks only", func(t *testing.T) { - block1Hash := libtestutil.RandomMultihash(t) - block2Hash := libtestutil.RandomMultihash(t) - block3Hash := libtestutil.RandomMultihash(t) - shard1Hash := libtestutil.RandomMultihash(t) - shard2Hash := libtestutil.RandomMultihash(t) - - space := libtestutil.RandomSigner(t) - provider := libtestutil.RandomSigner(t) + block1Hash := libtestutil.RandomDigest(t) + block2Hash := libtestutil.RandomDigest(t) + block3Hash := libtestutil.RandomDigest(t) + shard1Hash := libtestutil.RandomDigest(t) + shard2Hash := libtestutil.RandomDigest(t) + + space := libtestutil.RandomPrincipal(t) + provider := libtestutil.RandomIssuer(t) claim1 := locationClaim(t, provider, space.DID(), shard1Hash, "https://storage.example.com/shard1/abc") claim2 := locationClaim(t, provider, space.DID(), shard2Hash, "https://storage.example.com/shard2/def") diff --git a/pkg/client/pollclaim.go b/pkg/client/pollclaim.go index f97f209..5d8c723 100644 --- a/pkg/client/pollclaim.go +++ b/pkg/client/pollclaim.go @@ -54,7 +54,7 @@ func (c *Client) pollClaimWithTicker(ctx context.Context, requestOK *access.Requ case <-ctx.Done(): return nil, nil, fmt.Errorf("context canceled before delegations could be claimed: %w", ctxutil.Cause(ctx)) case <-tickChan: - dels, attestations, err := c.ClaimAccess(ctx, c.signer.DID()) + dels, attestations, err := c.ClaimAccess(ctx, c.issuer.DID()) if err != nil { return nil, nil, fmt.Errorf("failed to claim access: %w", err) } diff --git a/pkg/client/provideradd.go b/pkg/client/provideradd.go index 1fc269a..58d0bbf 100644 --- a/pkg/client/provideradd.go +++ b/pkg/client/provideradd.go @@ -13,17 +13,13 @@ import ( // ProviderAdd invokes the /provider/add capability to provision a space with a // customer account. func (c *Client) ProviderAdd(ctx context.Context, customerAccount did.DID, provider did.DID, consumer did.DID) (*providercmds.AddOK, error) { - proofs, proofLinks, err := c.ProofChain(ctx, c.signer.DID(), providercmds.Add.Command, customerAccount) + proofs, proofLinks, err := c.ProofChain(ctx, c.issuer.DID(), providercmds.Add.Command, customerAccount) if err != nil { return nil, fmt.Errorf("building proof chain: %w", err) } - attestations, err := c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return nil, fmt.Errorf("fetching proof attestations: %w", err) - } inv, err := providercmds.Add.Invoke( - c.signer, + c.issuer, customerAccount, &providercmds.AddArguments{ Provider: provider, @@ -41,7 +37,6 @@ func (c *Client) ProviderAdd(ctx context.Context, customerAccount did.DID, provi c.ucanClient, inv, execution.WithDelegations(proofs...), - execution.WithInvocations(attestations...), ) if err != nil { return nil, fmt.Errorf("executing provider add invocation: %w", err) diff --git a/pkg/client/requestaccess.go b/pkg/client/requestaccess.go index 8b8cdfb..c1eb17d 100644 --- a/pkg/client/requestaccess.go +++ b/pkg/client/requestaccess.go @@ -18,8 +18,8 @@ import ( // The [account] is the Account the Agent would like to act as. func (c *Client) RequestAccess(ctx context.Context, account did.DID) (*access.RequestOK, error) { inv, err := access.Request.Invoke( - c.signer, - c.signer.DID(), + c.issuer, + c.issuer.DID(), &access.RequestArguments{ Issuer: account, Attenuations: []access.CapabilityRequest{ diff --git a/pkg/client/retrieve.go b/pkg/client/retrieve.go index 8ac9594..6aa39a3 100644 --- a/pkg/client/retrieve.go +++ b/pkg/client/retrieve.go @@ -19,14 +19,10 @@ func (c *Client) Retrieve(ctx context.Context, location locator.Location) (io.Re urls := location.Commitment.Location url := urls[rand.Intn(len(urls))] - proofs, proofLinks, err := c.ProofChain(ctx, c.signer.DID(), contentcmds.Retrieve.Command, space) + proofs, proofLinks, err := c.ProofChain(ctx, c.issuer.DID(), contentcmds.Retrieve.Command, space) if err != nil { return nil, fmt.Errorf("building proof chain: %w", err) } - attestations, err := c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return nil, fmt.Errorf("fetching proof attestations: %w", err) - } inv, err := contentcmds.Retrieve.Invoke( c.Issuer(), @@ -55,7 +51,6 @@ func (c *Client) Retrieve(ctx context.Context, location locator.Location) (io.Re client, inv, execution.WithDelegations(proofs...), - execution.WithInvocations(attestations...), ) if err != nil { return nil, fmt.Errorf("executing invocation: %w", ctxutil.EnrichWithCause(err, ctx)) diff --git a/pkg/client/retrieve_test.go b/pkg/client/retrieve_test.go index 31dc0c8..2deea47 100644 --- a/pkg/client/retrieve_test.go +++ b/pkg/client/retrieve_test.go @@ -25,8 +25,8 @@ func TestRetrieve(t *testing.T) { dataHash, err := multihash.Sum(testData, multihash.SHA2_256, -1) require.NoError(t, err) - space := testutil.RandomSigner(t) - storageProvider := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) + storageProvider := testutil.RandomIssuer(t) // In-process retrieval server that serves testData. httpClient := ctestutil.NewRetrievalClient(t, storageProvider, testData) @@ -63,8 +63,8 @@ func TestRetrieve(t *testing.T) { dataHash, err := multihash.Sum(testData, multihash.SHA2_256, -1) require.NoError(t, err) - space := testutil.RandomSigner(t) - storageProvider := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) + storageProvider := testutil.RandomPrincipal(t) // A URL that will fail to connect (default HTTP client, no in-process server). badURL := testutil.Must(url.Parse("http://localhost:99999"))(t) diff --git a/pkg/client/spaceinfo.go b/pkg/client/spaceinfo.go index 0cc306f..626de5a 100644 --- a/pkg/client/spaceinfo.go +++ b/pkg/client/spaceinfo.go @@ -13,17 +13,13 @@ import ( // SpaceInfo invokes the /space/info capability to get information about a space, // including which providers are associated with it. func (c *Client) SpaceInfo(ctx context.Context, space did.DID) (*spacecmds.InfoOK, error) { - proofs, proofLinks, err := c.ProofChain(ctx, c.signer.DID(), spacecmds.Info.Command, space) + proofs, proofLinks, err := c.ProofChain(ctx, c.issuer.DID(), spacecmds.Info.Command, space) if err != nil { return nil, fmt.Errorf("building proof chain: %w", err) } - attestations, err := c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return nil, fmt.Errorf("fetching proof attestations: %w", err) - } inv, err := spacecmds.Info.Invoke( - c.signer, + c.issuer, space, &spacecmds.InfoArguments{}, invocation.WithAudience(c.serviceID), @@ -38,7 +34,6 @@ func (c *Client) SpaceInfo(ctx context.Context, space did.DID) (*spacecmds.InfoO c.ucanClient, inv, execution.WithDelegations(proofs...), - execution.WithInvocations(attestations...), ) if err != nil { return nil, fmt.Errorf("executing invocation: %w", err) diff --git a/pkg/client/spaces.go b/pkg/client/spaces.go index 4f399fa..0ed5fc9 100644 --- a/pkg/client/spaces.go +++ b/pkg/client/spaces.go @@ -102,7 +102,7 @@ func SpaceNameMetadata(name string) datamodel.Map { // delegation addressed to this agent is a space. func (c *Client) Spaces(ctx context.Context) ([]Space, error) { // Get direct delegations to the agent - dlgs, err := delegationsForAudience(ctx, c.tokenStore, c.signer.DID()) + dlgs, err := delegationsForAudience(ctx, c.tokenStore, c.issuer.DID()) if err != nil { return nil, fmt.Errorf("getting delegations for agent: %w", err) } diff --git a/pkg/client/spaces_test.go b/pkg/client/spaces_test.go index 60fdbf1..921d5fd 100644 --- a/pkg/client/spaces_test.go +++ b/pkg/client/spaces_test.go @@ -5,7 +5,6 @@ import ( blobcmds "github.com/fil-forge/libforge/commands/blob" "github.com/fil-forge/libforge/testutil" - "github.com/fil-forge/ucantone/principal/ed25519" "github.com/fil-forge/ucantone/ucan" "github.com/fil-forge/ucantone/ucan/command" "github.com/fil-forge/ucantone/ucan/delegation" @@ -21,7 +20,7 @@ import ( func newSpacesClient(t *testing.T) *client.Client { t.Helper() return testutil.Must(client.New( - testutil.RandomSigner(t), + testutil.RandomMultikeyIssuer(t), presets.DefaultNetwork.UploadID, presets.DefaultNetwork.UploadURL, client.WithTokenStore(tokenstore.NewMemStore()), @@ -30,7 +29,7 @@ func newSpacesClient(t *testing.T) *client.Client { // spaceGrant builds a delegation from the space to the client's agent (the way a // space grants access), optionally with options such as a name or expiry. -func spaceGrant(t *testing.T, c *client.Client, space ed25519.Signer, opts ...delegation.Option) ucan.Delegation { +func spaceGrant(t *testing.T, c *client.Client, space ucan.Issuer, opts ...delegation.Option) ucan.Delegation { t.Helper() return testutil.Must(delegation.Delegate(space, c.Issuer().DID(), space.DID(), blobcmds.Add.Command, opts...))(t) } @@ -44,7 +43,7 @@ func TestSpaces(t *testing.T) { t.Run("returns the space subject of a grant", func(t *testing.T) { c := newSpacesClient(t) - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) require.NoError(t, c.AddProofs(t.Context(), spaceGrant(t, c, space))) spaces, err := c.Spaces(t.Context()) @@ -55,8 +54,8 @@ func TestSpaces(t *testing.T) { t.Run("returns multiple unique spaces", func(t *testing.T) { c := newSpacesClient(t) - space1 := testutil.RandomSigner(t) - space2 := testutil.RandomSigner(t) + space1 := testutil.RandomIssuer(t) + space2 := testutil.RandomIssuer(t) require.NoError(t, c.AddProofs(t.Context(), spaceGrant(t, c, space1), spaceGrant(t, c, space2))) spaces, err := c.Spaces(t.Context()) @@ -70,11 +69,11 @@ func TestSpaces(t *testing.T) { t.Run("deduplicates a space from multiple grants", func(t *testing.T) { c := newSpacesClient(t) - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) // Two distinct grants (different issuers => different CIDs) for one space. require.NoError(t, c.AddProofs(t.Context(), spaceGrant(t, c, space), - testutil.Must(delegation.Delegate(testutil.RandomSigner(t), c.Issuer().DID(), space.DID(), blobcmds.Add.Command))(t), + testutil.Must(delegation.Delegate(testutil.RandomIssuer(t), c.Issuer().DID(), space.DID(), blobcmds.Add.Command))(t), )) spaces, err := c.Spaces(t.Context()) @@ -86,8 +85,8 @@ func TestSpaces(t *testing.T) { t.Run("skips ucan/attest delegations", func(t *testing.T) { c := newSpacesClient(t) - space := testutil.RandomSigner(t) - attestSpace := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) + attestSpace := testutil.RandomIssuer(t) require.NoError(t, c.AddProofs(t.Context(), spaceGrant(t, c, space), testutil.Must(delegation.Delegate(attestSpace, c.Issuer().DID(), attestSpace.DID(), command.MustParse("/ucan/attest")))(t), @@ -101,8 +100,8 @@ func TestSpaces(t *testing.T) { t.Run("excludes expired and not-yet-valid delegations", func(t *testing.T) { c := newSpacesClient(t) - expiredSpace := testutil.RandomSigner(t) - futureSpace := testutil.RandomSigner(t) + expiredSpace := testutil.RandomIssuer(t) + futureSpace := testutil.RandomIssuer(t) require.NoError(t, c.AddProofs(t.Context(), spaceGrant(t, c, expiredSpace, delegation.WithExpiration(ucan.Now()-100)), spaceGrant(t, c, futureSpace, delegation.WithNotBefore(ucan.Now()+100)), @@ -117,7 +116,7 @@ func TestSpaces(t *testing.T) { func TestSpace(t *testing.T) { t.Run("Names returns names from grant metadata", func(t *testing.T) { c := newSpacesClient(t) - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) require.NoError(t, c.AddProofs(t.Context(), spaceGrant(t, c, space, delegation.WithMetadata(client.SpaceNameMetadata("my cool space"))), )) @@ -130,7 +129,7 @@ func TestSpace(t *testing.T) { t.Run("Names is empty when no name metadata is present", func(t *testing.T) { c := newSpacesClient(t) - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) require.NoError(t, c.AddProofs(t.Context(), spaceGrant(t, c, space))) spaces, err := c.Spaces(t.Context()) @@ -141,7 +140,7 @@ func TestSpace(t *testing.T) { t.Run("AccessProofs returns the grants for a space", func(t *testing.T) { c := newSpacesClient(t) - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) grant := spaceGrant(t, c, space) require.NoError(t, c.AddProofs(t.Context(), grant)) @@ -157,7 +156,7 @@ func TestSpace(t *testing.T) { func TestSpaceNamed(t *testing.T) { t.Run("returns SpaceNotFoundError when no space has the name", func(t *testing.T) { c := newSpacesClient(t) - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) require.NoError(t, c.AddProofs(t.Context(), spaceGrant(t, c, space, delegation.WithMetadata(client.SpaceNameMetadata("some name"))))) _, err := c.SpaceNamed(t.Context(), "different name") @@ -168,7 +167,7 @@ func TestSpaceNamed(t *testing.T) { t.Run("returns the space with the matching name", func(t *testing.T) { c := newSpacesClient(t) - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) require.NoError(t, c.AddProofs(t.Context(), spaceGrant(t, c, space, delegation.WithMetadata(client.SpaceNameMetadata("my space"))))) result, err := c.SpaceNamed(t.Context(), "my space") @@ -178,8 +177,8 @@ func TestSpaceNamed(t *testing.T) { t.Run("returns MultipleSpacesFoundError when the name is ambiguous", func(t *testing.T) { c := newSpacesClient(t) - space1 := testutil.RandomSigner(t) - space2 := testutil.RandomSigner(t) + space1 := testutil.RandomIssuer(t) + space2 := testutil.RandomIssuer(t) require.NoError(t, c.AddProofs(t.Context(), spaceGrant(t, c, space1, delegation.WithMetadata(client.SpaceNameMetadata("shared"))), spaceGrant(t, c, space2, delegation.WithMetadata(client.SpaceNameMetadata("shared"))), diff --git a/pkg/client/testutil/blobadd.go b/pkg/client/testutil/blobadd.go index 8338a1b..af91d23 100644 --- a/pkg/client/testutil/blobadd.go +++ b/pkg/client/testutil/blobadd.go @@ -24,8 +24,7 @@ import ( "github.com/fil-forge/ucantone/binding" "github.com/fil-forge/ucantone/did" "github.com/fil-forge/ucantone/ipld/datamodel" - "github.com/fil-forge/ucantone/principal" - "github.com/fil-forge/ucantone/principal/ed25519" + "github.com/fil-forge/ucantone/multikey" "github.com/fil-forge/ucantone/server" "github.com/fil-forge/ucantone/transport" "github.com/fil-forge/ucantone/ucan" @@ -44,7 +43,7 @@ func executeAllocate( t *testing.T, allocateArgs *blobcmds.AllocateArguments, allocateInv ucan.Invocation, - storageProvider ucan.Signer, + storageProvider ucan.Issuer, blobSize uint64, ) ucan.Receipt { putBlobURL := testutil.Must(url.Parse(storageURLPrefix + digestutil.Format(allocateArgs.Blob.Digest)))(t) @@ -62,7 +61,7 @@ func executeAllocate( func invokePut( t *testing.T, - blobProvider principal.Signer, + blobProvider multikey.Issuer, blobDigest multihash.Multihash, blobSize uint64, allocateTask cid.Cid, @@ -93,8 +92,8 @@ func invokePut( func invokeAccept( t *testing.T, - serviceID ucan.Signer, - storageProvider ucan.Signer, + serviceID ucan.Issuer, + storageProvider ucan.Principal, space did.DID, blobDigest multihash.Multihash, blobSize uint64, @@ -118,8 +117,7 @@ func invokeAccept( func invokePDPAccept( t *testing.T, - service ucan.Signer, - storageProvider ucan.Signer, + storageProvider ucan.Issuer, blobDigest multihash.Multihash, ) ucan.Invocation { return testutil.Must( @@ -137,7 +135,7 @@ func invokePDPAccept( func executeAccept( t *testing.T, acceptInv ucan.Invocation, - storageProvider ucan.Signer, + storageProvider ucan.Issuer, space did.DID, blobDigest multihash.Multihash, pdpAcceptTask cid.Cid, @@ -173,7 +171,7 @@ func executeAccept( func executePDPAccept( t *testing.T, pdpAcceptInv ucan.Invocation, - storageProvider ucan.Signer, + storageProvider ucan.Issuer, blobDigest multihash.Multihash, ) ucan.Receipt { // Create mock piece links and inclusion proof for testing @@ -221,16 +219,15 @@ func executePDPAccept( // embedded in the response (simulating a blob that was already uploaded). func BlobAddHandler( t *testing.T, - serviceID ucan.Signer, + serviceID ucan.Issuer, rcptIssued func(task cid.Cid, ct ucan.Container), includePutReceipt bool, ) server.Route { - storageProvider := testutil.Must(ed25519.Generate())(t) + storageProvider := testutil.RandomIssuer(t) // TK: why? // random signer rather than the proper derived one - //blobProvider, err := ed25519signer.FromSeed([]byte(blobDigest)[len(blobDigest)-32:]) - blobProvider := testutil.Must(ed25519.Generate())(t) + blobProvider := testutil.RandomMultikeyIssuer(t) return blobcmds.Add.Route( func(req *binding.Request[*blobcmds.AddArguments], res *binding.Response[*blobcmds.AddOK]) error { @@ -274,7 +271,6 @@ func BlobAddHandler( pdpAcceptInv := invokePDPAccept( t, - serviceID, storageProvider, blobDigest, ) diff --git a/pkg/client/testutil/client.go b/pkg/client/testutil/client.go index 0362a1f..3d9e2db 100644 --- a/pkg/client/testutil/client.go +++ b/pkg/client/testutil/client.go @@ -12,7 +12,7 @@ import ( "github.com/fil-forge/libforge/testutil" uclient "github.com/fil-forge/ucantone/client" "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/principal/ed25519" + "github.com/fil-forge/ucantone/multikey/ed25519" "github.com/fil-forge/ucantone/server" "github.com/fil-forge/ucantone/ucan" ) @@ -24,7 +24,7 @@ type clientServerConfig struct { } type RouteDeps struct { - ServiceID ucan.Signer + ServiceID ucan.Issuer } type RouteBuilderFunc func(RouteDeps) server.Route @@ -59,10 +59,10 @@ func Client(t *testing.T, options ...Option) (*client.Client, error) { opt(config) } - signer := testutil.Must(ed25519.Generate())(t) + issuer := testutil.Must(ed25519.GenerateIssuer())(t) serviceID, srv := NewTestServer(t, config.serverOptions...) - deps := RouteDeps{ServiceID: signer} + deps := RouteDeps{ServiceID: issuer} for _, routeBuilder := range config.serverRoutes { route := routeBuilder(deps) srv.Handle(route.Command, route.Handler) @@ -76,7 +76,7 @@ func Client(t *testing.T, options ...Option) (*client.Client, error) { uclient.WithHTTPClient(&http.Client{Transport: srv}), ), ) - return client.New(signer, serviceID, *serviceURL, config.clientOptions...) + return client.New(issuer, serviceID, *serviceURL, config.clientOptions...) } // ComposeOptions combines multiple options into one. It's written generically diff --git a/pkg/client/testutil/retrievalclient.go b/pkg/client/testutil/retrievalclient.go index b5b69f7..1eae1d3 100644 --- a/pkg/client/testutil/retrievalclient.go +++ b/pkg/client/testutil/retrievalclient.go @@ -11,7 +11,7 @@ import ( "github.com/fil-forge/libforge/digestutil" "github.com/fil-forge/libforge/ucan/retrieval" "github.com/fil-forge/ucantone/binding" - "github.com/fil-forge/ucantone/principal" + "github.com/fil-forge/ucantone/ucan" "github.com/fil-forge/ucantone/ucan/container" "github.com/multiformats/go-multihash" "github.com/stretchr/testify/assert" @@ -38,7 +38,7 @@ func WithoutHashValidation() RetrievalClientOption { // By default it validates that the capability digest (and the URL path hash, when // present) match the actual data hash before serving. Use WithoutHashValidation() // to disable that for testing client-side validation. -func NewRetrievalClient(t *testing.T, service principal.Signer, testData []byte, opts ...RetrievalClientOption) *http.Client { +func NewRetrievalClient(t *testing.T, service ucan.Issuer, testData []byte, opts ...RetrievalClientOption) *http.Client { cfg := retrievalClientConfig{} for _, opt := range opts { opt(&cfg) diff --git a/pkg/client/testutil/server.go b/pkg/client/testutil/server.go index 818b815..ba573d2 100644 --- a/pkg/client/testutil/server.go +++ b/pkg/client/testutil/server.go @@ -5,8 +5,7 @@ import ( "github.com/fil-forge/libforge/testutil" "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/principal/ed25519" - "github.com/fil-forge/ucantone/principal/signer" + "github.com/fil-forge/ucantone/multikey" "github.com/fil-forge/ucantone/server" ) @@ -16,10 +15,10 @@ import ( // The server generates its own service principal. It has a `did:web:` DID for // realism and readability in errors and failures. func NewTestServer(t *testing.T, options ...server.HTTPOption) (did.DID, *server.HTTPServer) { - servicePrincipal := testutil.Must(signer.Wrap( - testutil.Must(ed25519.Generate())(t), + servicePrincipal := multikey.NewIssuer( testutil.Must(did.Parse("did:web:storage.example.com"))(t), - ))(t) + testutil.RandomMultikeySigner(t), + ) return servicePrincipal.DID(), server.NewHTTP(servicePrincipal, options...) } diff --git a/pkg/client/uploadadd.go b/pkg/client/uploadadd.go index ac089ea..68c5159 100644 --- a/pkg/client/uploadadd.go +++ b/pkg/client/uploadadd.go @@ -19,16 +19,12 @@ import ( // The `space` is the resource the invocation applies to. It is typically the // DID of a space. func (c *Client) UploadAdd(ctx context.Context, space did.DID, root cid.Cid, shards []cid.Cid, index *cid.Cid) (*uploadcmds.AddOK, error) { - proofs, proofLinks, err := c.ProofChain(ctx, c.signer.DID(), uploadcmds.Add.Command, space) + proofs, proofLinks, err := c.ProofChain(ctx, c.issuer.DID(), uploadcmds.Add.Command, space) if err != nil { return nil, fmt.Errorf("building proof chain: %w", err) } - attestations, err := c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return nil, fmt.Errorf("fetching proof attestations: %w", err) - } inv, err := uploadcmds.Add.Invoke( - c.signer, + c.issuer, space, &uploadcmds.AddArguments{ Root: root, @@ -47,7 +43,6 @@ func (c *Client) UploadAdd(ctx context.Context, space did.DID, root cid.Cid, sha c.ucanClient, inv, execution.WithDelegations(proofs...), - execution.WithInvocations(attestations...), ) if err != nil { return nil, fmt.Errorf("executing invocation: %w", err) diff --git a/pkg/client/uploadlist.go b/pkg/client/uploadlist.go index 1c757fa..91e79e4 100644 --- a/pkg/client/uploadlist.go +++ b/pkg/client/uploadlist.go @@ -17,16 +17,12 @@ import ( // The `space` is the resource the invocation applies to. It is typically the // DID of a space. func (c *Client) UploadList(ctx context.Context, space did.DID, args uploadcmds.ListArguments) (*uploadcmds.ListOK, error) { - proofs, proofLinks, err := c.ProofChain(ctx, c.signer.DID(), uploadcmds.Add.Command, space) + proofs, proofLinks, err := c.ProofChain(ctx, c.issuer.DID(), uploadcmds.Add.Command, space) if err != nil { return nil, fmt.Errorf("building proof chain: %w", err) } - attestations, err := c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return nil, fmt.Errorf("fetching proof attestations: %w", err) - } inv, err := uploadcmds.List.Invoke( - c.signer, + c.issuer, space, &args, invocation.WithAudience(c.serviceID), @@ -41,7 +37,6 @@ func (c *Client) UploadList(ctx context.Context, space did.DID, args uploadcmds. c.ucanClient, inv, execution.WithDelegations(proofs...), - execution.WithInvocations(attestations...), ) if err != nil { return nil, fmt.Errorf("executing invocation: %w", err) diff --git a/pkg/client/uploadshardlist.go b/pkg/client/uploadshardlist.go index 7b986b2..9d2cbb6 100644 --- a/pkg/client/uploadshardlist.go +++ b/pkg/client/uploadshardlist.go @@ -17,16 +17,12 @@ import ( // The `space` is the resource the invocation applies to. It is typically the // DID of a space. func (c *Client) UploadShardList(ctx context.Context, space did.DID, args shardcmds.ListArguments) (*shardcmds.ListOK, error) { - proofs, proofLinks, err := c.ProofChain(ctx, c.signer.DID(), shardcmds.List.Command, space) + proofs, proofLinks, err := c.ProofChain(ctx, c.issuer.DID(), shardcmds.List.Command, space) if err != nil { return nil, fmt.Errorf("building proof chain: %w", err) } - attestations, err := c.ProofAttestations(ctx, proofs, c.serviceID) - if err != nil { - return nil, fmt.Errorf("fetching proof attestations: %w", err) - } inv, err := shardcmds.List.Invoke( - c.signer, + c.issuer, space, &args, invocation.WithAudience(c.serviceID), @@ -41,7 +37,6 @@ func (c *Client) UploadShardList(ctx context.Context, space did.DID, args shardc c.ucanClient, inv, execution.WithDelegations(proofs...), - execution.WithInvocations(attestations...), ) if err != nil { return nil, fmt.Errorf("executing invocation: %w", err) diff --git a/pkg/client/uploadshardlist_test.go b/pkg/client/uploadshardlist_test.go index bf8db08..6dc3812 100644 --- a/pkg/client/uploadshardlist_test.go +++ b/pkg/client/uploadshardlist_test.go @@ -16,7 +16,7 @@ import ( func TestUploadShardList(t *testing.T) { t.Run("lists shards for an upload", func(t *testing.T) { ctx := t.Context() - space := testutil.RandomSigner(t) + space := testutil.RandomIssuer(t) results := []cid.Cid{testutil.RandomCID(t), testutil.RandomCID(t)} diff --git a/pkg/didmailto/didmailto.go b/pkg/didmailto/didmailto.go index baf4b29..4e99eb0 100644 --- a/pkg/didmailto/didmailto.go +++ b/pkg/didmailto/didmailto.go @@ -1,27 +1,17 @@ package didmailto import ( - "fmt" - "net/url" "strings" + "github.com/fil-forge/libforge/attestation/didmailto" "github.com/fil-forge/ucantone/did" ) -// FromEmail converts an email address to a `did:mailto:` DID. -func FromEmail(email string) (did.DID, error) { - parts := strings.Split(email, "@") - if len(parts) != 2 { - return did.DID{}, fmt.Errorf("invalid email address %q", email) - } - return did.Parse("did:mailto:" + parts[1] + ":" + url.QueryEscape(parts[0])) -} - // FromInput converts either a `did:mailto:` DID or an email address to a // `did:mailto:` DID. func FromInput(input string) (did.DID, error) { if strings.HasPrefix(input, "did:mailto:") { return did.Parse(input) } - return FromEmail(input) + return didmailto.New(input) } diff --git a/pkg/didmailto/didmailto_test.go b/pkg/didmailto/didmailto_test.go deleted file mode 100644 index df71176..0000000 --- a/pkg/didmailto/didmailto_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package didmailto_test - -import ( - "testing" - - "github.com/fil-forge/guppy/pkg/didmailto" - "github.com/stretchr/testify/require" -) - -func TestFromEmail(t *testing.T) { - t.Run("with valid email", func(t *testing.T) { - did, err := didmailto.FromEmail("alice@example.com") - require.NoError(t, err) - require.Equal(t, "did:mailto:example.com:alice", did.String()) - }) - - t.Run("with invalid email", func(t *testing.T) { - _, err := didmailto.FromEmail("invalid-email") - require.ErrorContains(t, err, "invalid email address") - }) - - t.Run("with escape-worthy characters", func(t *testing.T) { - did, err := didmailto.FromEmail("alice+test@example.com") - require.NoError(t, err) - require.Equal(t, "did:mailto:example.com:alice%2Btest", did.String()) - }) -} diff --git a/pkg/preparation/internal/mockclient/mockclient.go b/pkg/preparation/internal/mockclient/mockclient.go index 41e066f..d35a0ab 100644 --- a/pkg/preparation/internal/mockclient/mockclient.go +++ b/pkg/preparation/internal/mockclient/mockclient.go @@ -13,7 +13,6 @@ import ( "github.com/fil-forge/libforge/digestutil" "github.com/fil-forge/libforge/testutil" "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/principal/ed25519" "github.com/fil-forge/ucantone/ucan" "github.com/ipfs/go-cid" "github.com/multiformats/go-multihash" @@ -107,8 +106,7 @@ func (m *MockClient) BlobAdd(ctx context.Context, content io.Reader, space did.D ) require.NoError(m.T, err, "invoking Location command for BlobAdd") - dummyPrincipal, err := ed25519.Generate() - require.NoError(m.T, err) + dummyPrincipal := testutil.RandomIssuer(m.T) pdpAcceptInv, err := pdpcmds.Accept.Invoke( dummyPrincipal, diff --git a/pkg/preparation/preparation_test.go b/pkg/preparation/preparation_test.go index 8a0b29e..2dc0370 100644 --- a/pkg/preparation/preparation_test.go +++ b/pkg/preparation/preparation_test.go @@ -22,8 +22,8 @@ import ( libtestutil "github.com/fil-forge/libforge/testutil" "github.com/fil-forge/ucantone/binding" "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/principal/ed25519" "github.com/fil-forge/ucantone/server" + "github.com/fil-forge/ucantone/ucan" "github.com/ipfs/boxo/blockservice" "github.com/ipfs/boxo/files" "github.com/ipfs/boxo/ipld/merkledag" @@ -90,7 +90,7 @@ func (r *recordedInvocations) recordUpload(subject did.DID, args *uploadcmds.Add // service that handles blob/add (via the ctestutil harness), index/add, and // upload/add. PUTs go through putClient; index/add and upload/add invocations // are recorded into rec. -func prepareTestClient(t *testing.T, space ed25519.Signer, putClient *http.Client, rec *recordedInvocations) *ctestutil.ClientWithCustomPut { +func prepareTestClient(t *testing.T, space ucan.Issuer, putClient *http.Client, rec *recordedInvocations) *ctestutil.ClientWithCustomPut { t.Helper() c := &ctestutil.ClientWithCustomPut{ Client: libtestutil.Must(ctestutil.Client(t, @@ -140,7 +140,7 @@ func createUpload(t testing.TB, ctx context.Context, sourcePath string, repo *sq func TestExecuteUpload(t *testing.T) { t.Run("uploads", func(t *testing.T) { - space := libtestutil.RandomSigner(t) + space := libtestutil.RandomIssuer(t) db := testdb.CreateTestDB(t) _, err := db.ExecContext(t.Context(), "PRAGMA foreign_keys = ON;") @@ -200,7 +200,7 @@ func TestExecuteUpload(t *testing.T) { t.Run("after an error, can be retried safely", func(t *testing.T) { logging.SetLogLevel("preparation/uploads", "dpanic") - space := libtestutil.RandomSigner(t) + space := libtestutil.RandomIssuer(t) db := testdb.CreateTestDB(t) _, err := db.ExecContext(t.Context(), "PRAGMA foreign_keys = ON;") diff --git a/pkg/preparation/sqlrepo/dags_test.go b/pkg/preparation/sqlrepo/dags_test.go index a4f211c..938cf1c 100644 --- a/pkg/preparation/sqlrepo/dags_test.go +++ b/pkg/preparation/sqlrepo/dags_test.go @@ -16,11 +16,11 @@ import ( ) func randomDAGPBCID(t *testing.T) cid.Cid { - return cid.NewCidV1(cid.DagProtobuf, testutil.RandomMultihash(t)) + return cid.NewCidV1(cid.DagProtobuf, testutil.RandomDigest(t)) } func randomRawCID(t *testing.T) cid.Cid { - return cid.NewCidV1(cid.Raw, testutil.RandomMultihash(t)) + return cid.NewCidV1(cid.Raw, testutil.RandomDigest(t)) } func TestDAGScan(t *testing.T) { diff --git a/pkg/tokenstore/fs.go b/pkg/tokenstore/fs.go index 83fe11d..f65d04d 100644 --- a/pkg/tokenstore/fs.go +++ b/pkg/tokenstore/fs.go @@ -127,12 +127,6 @@ func (s *FsStore) AddReceipts(ctx context.Context, receipts ...ucan.Receipt) err return s.save() } -func (s *FsStore) ProofAttestations(ctx context.Context, proofs []ucan.Delegation, authority did.DID) ([]ucan.Invocation, error) { - s.mu.RLock() - defer s.mu.RUnlock() - return s.data.ProofAttestations(ctx, proofs, authority) -} - func (s *FsStore) ProofChain(ctx context.Context, aud did.DID, cmd ucan.Command, sub did.DID) ([]ucan.Delegation, []cid.Cid, error) { s.mu.RLock() defer s.mu.RUnlock() diff --git a/pkg/tokenstore/mem.go b/pkg/tokenstore/mem.go index 18b5ebd..2542e73 100644 --- a/pkg/tokenstore/mem.go +++ b/pkg/tokenstore/mem.go @@ -60,10 +60,6 @@ func (ms *MemStore) ProofChain(ctx context.Context, aud did.DID, cmd ucan.Comman return ucanlib.ProofChain(ctx, ms.matchDelegations, aud, cmd, sub) } -func (ms *MemStore) ProofAttestations(ctx context.Context, proofs []ucan.Delegation, authority did.DID) ([]ucan.Invocation, error) { - return ucanlib.ProofAttestations(ctx, ms.listInvocations, proofs, authority) -} - func (ms *MemStore) ListDelegations(ctx context.Context, aud did.DID, cmd ucan.Command, sub did.DID) iter.Seq2[ucan.Delegation, error] { return func(yield func(ucan.Delegation, error) bool) { ms.mu.RLock() @@ -92,20 +88,6 @@ func (ms *MemStore) matchDelegations(ctx context.Context, aud did.DID, cmd ucan. return ucanlib.NewDelegationMatcher(ms.ListDelegations)(ctx, aud, cmd, sub) } -func (ms *MemStore) listInvocations(ctx context.Context, aud did.DID, cmd ucan.Command, sub did.DID) iter.Seq2[ucan.Invocation, error] { - return func(yield func(ucan.Invocation, error) bool) { - ms.mu.RLock() - defer ms.mu.RUnlock() - for _, d := range ms.invs { - if d.Audience() == aud && d.Command() == cmd && d.Subject() == sub { - if !yield(d, nil) { - return - } - } - } - } -} - func (ms *MemStore) Reset(ctx context.Context) error { ms.mu.Lock() defer ms.mu.Unlock() diff --git a/pkg/tokenstore/store_test.go b/pkg/tokenstore/store_test.go index 58fa90c..43c9715 100644 --- a/pkg/tokenstore/store_test.go +++ b/pkg/tokenstore/store_test.go @@ -5,7 +5,6 @@ import ( "testing" "github.com/fil-forge/guppy/pkg/tokenstore" - "github.com/fil-forge/ucantone/principal/ed25519" "github.com/fil-forge/ucantone/testutil" "github.com/fil-forge/ucantone/ucan" "github.com/fil-forge/ucantone/ucan/command" @@ -63,15 +62,15 @@ func testDelegations(t *testing.T, newStore func(t *testing.T) tokenstore.Store) t.Run("empty initially", func(t *testing.T) { s := newStore(t) - signer := testutil.RandomSigner(t) - result := collectDelegations(t, s.ListDelegations(t.Context(), signer.DID(), cmd1, signer.DID())) + issuer := testutil.RandomIssuer(t) + result := collectDelegations(t, s.ListDelegations(t.Context(), issuer.DID(), cmd1, issuer.DID())) require.Empty(t, result) }) t.Run("add one delegation", func(t *testing.T) { s := newStore(t) - issuer := testutil.RandomSigner(t) - aud := testutil.RandomSigner(t) + issuer := testutil.RandomIssuer(t) + aud := testutil.RandomPrincipal(t) dlg, err := delegation.Delegate(issuer, aud.DID(), issuer.DID(), cmd1) require.NoError(t, err) @@ -85,8 +84,8 @@ func testDelegations(t *testing.T, newStore func(t *testing.T) tokenstore.Store) t.Run("add multiple delegations", func(t *testing.T) { s := newStore(t) - issuer := testutil.RandomSigner(t) - aud := testutil.RandomSigner(t) + issuer := testutil.RandomIssuer(t) + aud := testutil.RandomPrincipal(t) dlg1, err := delegation.Delegate(issuer, aud.DID(), issuer.DID(), cmd1) require.NoError(t, err) @@ -107,8 +106,8 @@ func testInvocations(t *testing.T, newStore func(t *testing.T) tokenstore.Store) t.Run("add invocation does not error", func(t *testing.T) { s := newStore(t) - issuer := testutil.RandomSigner(t) - sub := testutil.RandomSigner(t) + issuer := testutil.RandomIssuer(t) + sub := testutil.RandomPrincipal(t) inv, err := invocation.Invoke(issuer, sub.DID(), cmd1, testutil.RandomArgs(t)) require.NoError(t, err) @@ -118,8 +117,8 @@ func testInvocations(t *testing.T, newStore func(t *testing.T) tokenstore.Store) t.Run("add multiple invocations does not error", func(t *testing.T) { s := newStore(t) - issuer := testutil.RandomSigner(t) - sub := testutil.RandomSigner(t) + issuer := testutil.RandomIssuer(t) + sub := testutil.RandomPrincipal(t) inv1, err := invocation.Invoke(issuer, sub.DID(), cmd1, testutil.RandomArgs(t)) require.NoError(t, err) @@ -133,7 +132,7 @@ func testInvocations(t *testing.T, newStore func(t *testing.T) tokenstore.Store) func testReceipts(t *testing.T, newStore func(t *testing.T) tokenstore.Store) { t.Run("add receipt does not error", func(t *testing.T) { s := newStore(t) - executor := testutil.RandomSigner(t) + executor := testutil.RandomIssuer(t) ran := testutil.RandomCID(t) rcpt, err := receipt.IssueOK(executor, ran, testutil.RandomArgs(t)) @@ -144,7 +143,7 @@ func testReceipts(t *testing.T, newStore func(t *testing.T) tokenstore.Store) { t.Run("add multiple receipts does not error", func(t *testing.T) { s := newStore(t) - executor := testutil.RandomSigner(t) + executor := testutil.RandomIssuer(t) rcpt1, err := receipt.IssueOK(executor, testutil.RandomCID(t), testutil.RandomArgs(t)) require.NoError(t, err) @@ -163,9 +162,9 @@ func testListDelegations(t *testing.T, newStore func(t *testing.T) tokenstore.St t.Run("filters by audience", func(t *testing.T) { s := newStore(t) - issuer := testutil.RandomSigner(t) - aud1 := testutil.RandomSigner(t) - aud2 := testutil.RandomSigner(t) + issuer := testutil.RandomIssuer(t) + aud1 := testutil.RandomPrincipal(t) + aud2 := testutil.RandomPrincipal(t) dlg1, err := delegation.Delegate(issuer, aud1.DID(), issuer.DID(), cmd1) require.NoError(t, err) @@ -181,8 +180,8 @@ func testListDelegations(t *testing.T, newStore func(t *testing.T) tokenstore.St t.Run("filters by command", func(t *testing.T) { s := newStore(t) - issuer := testutil.RandomSigner(t) - aud := testutil.RandomSigner(t) + issuer := testutil.RandomIssuer(t) + aud := testutil.RandomPrincipal(t) dlg1, err := delegation.Delegate(issuer, aud.DID(), issuer.DID(), cmd1) require.NoError(t, err) @@ -198,9 +197,9 @@ func testListDelegations(t *testing.T, newStore func(t *testing.T) tokenstore.St t.Run("filters by subject", func(t *testing.T) { s := newStore(t) - issuer := testutil.RandomSigner(t) - aud := testutil.RandomSigner(t) - sub2 := testutil.RandomSigner(t) + issuer := testutil.RandomIssuer(t) + aud := testutil.RandomPrincipal(t) + sub2 := testutil.RandomPrincipal(t) dlg1, err := delegation.Delegate(issuer, aud.DID(), issuer.DID(), cmd1) require.NoError(t, err) @@ -227,8 +226,8 @@ func testReset(t *testing.T, newStore func(t *testing.T) tokenstore.Store) { t.Run("clears all delegations", func(t *testing.T) { s := newStore(t) - issuer := testutil.RandomSigner(t) - aud := testutil.RandomSigner(t) + issuer := testutil.RandomIssuer(t) + aud := testutil.RandomPrincipal(t) dlg, err := delegation.Delegate(issuer, aud.DID(), issuer.DID(), cmd1) require.NoError(t, err) @@ -250,10 +249,8 @@ func TestFsStorePersistence(t *testing.T) { dir := t.TempDir() - issuer, err := ed25519.Generate() - require.NoError(t, err) - aud, err := ed25519.Generate() - require.NoError(t, err) + issuer := testutil.RandomIssuer(t) + aud := testutil.RandomPrincipal(t) dlg, err := delegation.Delegate(issuer, aud.DID(), issuer.DID(), cmd1) require.NoError(t, err) diff --git a/pkg/verification/cache_test.go b/pkg/verification/cache_test.go index f5e1450..8dec59d 100644 --- a/pkg/verification/cache_test.go +++ b/pkg/verification/cache_test.go @@ -11,7 +11,6 @@ import ( assertcmds "github.com/fil-forge/libforge/commands/assert" "github.com/fil-forge/libforge/testutil" "github.com/fil-forge/ucantone/did" - "github.com/fil-forge/ucantone/principal/ed25519" "github.com/fil-forge/ucantone/ucan" "github.com/fil-forge/ucantone/ucan/invocation" "github.com/multiformats/go-multihash" @@ -22,7 +21,7 @@ func TestIndexCache(t *testing.T) { t.Run("returns false when looking up a slice that was never added", func(t *testing.T) { cache := verification.NewIndexCache() - unknownSlice := testutil.RandomMultihash(t) + unknownSlice := testutil.RandomDigest(t) _, found := cache.IndexForSlice(unknownSlice) require.False(t, found, "should not find an index for unknown slice") @@ -68,7 +67,7 @@ func TestLocationCache(t *testing.T) { t.Run("returns empty slice when looking up an unknown shard", func(t *testing.T) { cache := verification.NewLocationCache() - unknownShard := testutil.RandomMultihash(t) + unknownShard := testutil.RandomDigest(t) locations := cache.LocationsForShard(unknownShard) require.Empty(t, locations, "should return no locations for unknown shard") @@ -78,11 +77,11 @@ func TestLocationCache(t *testing.T) { cache := verification.NewLocationCache() // Create a location commitment - issuer := testutil.Must(ed25519.Generate())(t) - audience := testutil.Must(ed25519.Generate())(t) - space := testutil.Must(ed25519.Generate())(t) + issuer := testutil.RandomIssuer(t) + audience := testutil.RandomPrincipal(t) + space := testutil.RandomIssuer(t) - shardDigest := testutil.RandomMultihash(t) + shardDigest := testutil.RandomDigest(t) commitment := createLocationCommitment(t, issuer, audience, space.DID(), shardDigest) cache.Add(commitment) @@ -99,12 +98,12 @@ func TestLocationCache(t *testing.T) { cache := verification.NewLocationCache() // Two different storage providers (issuers) for the same shard - issuer1 := testutil.Must(ed25519.Generate())(t) - issuer2 := testutil.Must(ed25519.Generate())(t) - audience := testutil.Must(ed25519.Generate())(t) - space := testutil.Must(ed25519.Generate())(t) + issuer1 := testutil.RandomIssuer(t) + issuer2 := testutil.RandomIssuer(t) + audience := testutil.RandomPrincipal(t) + space := testutil.RandomPrincipal(t) - shardDigest := testutil.RandomMultihash(t) + shardDigest := testutil.RandomDigest(t) // Different storage providers make different commitments for the same shard commitment1 := createLocationCommitment(t, issuer1, audience, space.DID(), shardDigest) @@ -121,11 +120,11 @@ func TestLocationCache(t *testing.T) { t.Run("deduplicates identical commitments for the same shard", func(t *testing.T) { cache := verification.NewLocationCache() - issuer := testutil.Must(ed25519.Generate())(t) - audience := testutil.Must(ed25519.Generate())(t) - space := testutil.Must(ed25519.Generate())(t) + issuer := testutil.RandomIssuer(t) + audience := testutil.RandomPrincipal(t) + space := testutil.RandomPrincipal(t) - shardDigest := testutil.RandomMultihash(t) + shardDigest := testutil.RandomDigest(t) // Adding the same commitment twice should not create duplicates commitment := createLocationCommitment(t, issuer, audience, space.DID(), shardDigest) @@ -141,12 +140,12 @@ func TestLocationCache(t *testing.T) { t.Run("keeps locations for different shards separate", func(t *testing.T) { cache := verification.NewLocationCache() - issuer := testutil.Must(ed25519.Generate())(t) - audience := testutil.Must(ed25519.Generate())(t) - space := testutil.Must(ed25519.Generate())(t) + issuer := testutil.RandomIssuer(t) + audience := testutil.RandomPrincipal(t) + space := testutil.RandomPrincipal(t) - shard1 := testutil.RandomMultihash(t) - shard2 := testutil.RandomMultihash(t) + shard1 := testutil.RandomDigest(t) + shard2 := testutil.RandomDigest(t) commitment1 := createLocationCommitment(t, issuer, audience, space.DID(), shard1) commitment2 := createLocationCommitment(t, issuer, audience, space.DID(), shard2) @@ -171,7 +170,7 @@ func randomIndex(t *testing.T) (blobindex.ShardedDagIndex, multihash.Multihash) return index, slice } -func createLocationCommitment(t *testing.T, issuer, audience ucan.Signer, space did.DID, shardDigest multihash.Multihash) ucan.Invocation { +func createLocationCommitment(t *testing.T, issuer ucan.Issuer, audience ucan.Principal, space did.DID, shardDigest multihash.Multihash) ucan.Invocation { t.Helper() storageURL := testutil.Must(url.Parse("https://storage.example.com/blob/test"))(t) diff --git a/pkg/verification/retrieval.go b/pkg/verification/retrieval.go index c725d2f..a9329cf 100644 --- a/pkg/verification/retrieval.go +++ b/pkg/verification/retrieval.go @@ -59,7 +59,7 @@ type ShardFinder interface { // in which case no authorization will be sent for retrievals. func VerifyDAGRetrieval( ctx context.Context, - id ucan.Signer, + id ucan.Issuer, getProofs ContentRetrieveProofGetterFunc, indexer ShardFinder, root cid.Cid, @@ -128,7 +128,7 @@ type Slice struct { // indexer. It also performs integrity checks on the retrieved blocks. Note: // the getProofs function can be nil, in which case no authorization will be // sent for retrievals. -func StatBlocks(ctx context.Context, id ucan.Signer, getProofs ContentRetrieveProofGetterFunc, indexer ShardFinder, links []cid.Cid) iter.Seq2[BlockStat, error] { +func StatBlocks(ctx context.Context, id ucan.Issuer, getProofs ContentRetrieveProofGetterFunc, indexer ShardFinder, links []cid.Cid) iter.Seq2[BlockStat, error] { return func(yield func(BlockStat, error) bool) { shardLocations := bytemap.NewByteMap[multihash.Multihash, []Location](0) shardSlices := bytemap.NewByteMap[multihash.Multihash, bytemap.ByteMap[multihash.Multihash, blobindex.Range]](0) @@ -216,7 +216,7 @@ func StatBlocks(ctx context.Context, id ucan.Signer, getProofs ContentRetrievePr func batchFetchSlices( ctx context.Context, - id ucan.Signer, + id ucan.Issuer, getProofs ContentRetrieveProofGetterFunc, shard multihash.Multihash, locations []Location, @@ -329,7 +329,7 @@ func batchSlices(items bytemap.ByteMap[multihash.Multihash, blobindex.Range]) [] return batches } -func authorizedFetch(ctx context.Context, id ucan.Signer, getProofs ContentRetrieveProofGetterFunc, shard multihash.Multihash, shardLocation Location, byteRange contentcmds.Range) (io.ReadCloser, error) { +func authorizedFetch(ctx context.Context, id ucan.Issuer, getProofs ContentRetrieveProofGetterFunc, shard multihash.Multihash, shardLocation Location, byteRange contentcmds.Range) (io.ReadCloser, error) { if shardLocation.Arguments.Space == did.Undef { return nil, fmt.Errorf("missing space DID in location commitment for shard: %s", digestutil.Format(shard)) } diff --git a/pkg/verification/retrieval_test.go b/pkg/verification/retrieval_test.go index d409909..9b8f8a0 100644 --- a/pkg/verification/retrieval_test.go +++ b/pkg/verification/retrieval_test.go @@ -14,7 +14,6 @@ import ( assertcmds "github.com/fil-forge/libforge/commands/assert" "github.com/fil-forge/libforge/digestutil" "github.com/fil-forge/libforge/testutil" - "github.com/fil-forge/ucantone/principal/ed25519" "github.com/ipfs/go-cid" "github.com/multiformats/go-multihash" "github.com/stretchr/testify/require" @@ -34,8 +33,8 @@ func TestStatBlocks(t *testing.T) { require.NoError(t, err) block2CID := cid.NewCidV1(cid.Raw, block2Hash) - shard1Hash := testutil.RandomMultihash(t) - shard2Hash := testutil.RandomMultihash(t) + shard1Hash := testutil.RandomDigest(t) + shard2Hash := testutil.RandomDigest(t) position1 := blobindex.Range{Start: 0, End: int64(len(block1Data)) - 1} position2 := blobindex.Range{Start: 0, End: int64(len(block2Data)) - 1} @@ -105,8 +104,8 @@ func TestStatBlocks(t *testing.T) { tamperedData := []byte("tampered data") - shard1Hash := testutil.RandomMultihash(t) - shard2Hash := testutil.RandomMultihash(t) + shard1Hash := testutil.RandomDigest(t) + shard2Hash := testutil.RandomDigest(t) position1 := blobindex.Range{Start: 0, End: int64(len(block1Data)) - 1} position2 := blobindex.Range{Start: 0, End: int64(len(block2Data)) - 1} @@ -164,10 +163,10 @@ func TestStatBlocks(t *testing.T) { block1CID := cid.NewCidV1(cid.Raw, block1Hash) // Second block: shard not found - block2Hash := testutil.RandomMultihash(t) + block2Hash := testutil.RandomDigest(t) block2CID := cid.NewCidV1(cid.Raw, block2Hash) - shard1Hash := testutil.RandomMultihash(t) + shard1Hash := testutil.RandomDigest(t) position1 := blobindex.Range{Start: 0, End: int64(len(block1Data)) - 1} server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -218,8 +217,8 @@ func TestStatBlocks(t *testing.T) { require.NoError(t, err) block2CID := cid.NewCidV1(cid.Raw, block2Hash) - shard1Hash := testutil.RandomMultihash(t) - shard2Hash := testutil.RandomMultihash(t) + shard1Hash := testutil.RandomDigest(t) + shard2Hash := testutil.RandomDigest(t) position1 := blobindex.Range{Start: 0, End: int64(len(block1Data)) - 1} position2 := blobindex.Range{Start: 0, End: int64(len(block2Data)) - 1} @@ -266,7 +265,7 @@ func TestVerifyDAGRetrieval(t *testing.T) { blockHash, _ := multihash.Sum(blockData, multihash.SHA2_256, -1) rootCID := cid.NewCidV1(cid.Raw, blockHash) - shardHash := testutil.RandomMultihash(t) + shardHash := testutil.RandomDigest(t) position := blobindex.Range{Start: 0, End: int64(len(blockData)) - 1} server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -299,7 +298,7 @@ func TestVerifyDAGRetrieval(t *testing.T) { t.Run("stops on first error", func(t *testing.T) { ctx := t.Context() - blockHash := testutil.RandomMultihash(t) + blockHash := testutil.RandomDigest(t) rootCID := cid.NewCidV1(cid.Raw, blockHash) stub := &stubShardFinder{ @@ -348,8 +347,8 @@ func (s *stubShardFinder) FindLocations(ctx context.Context, shard multihash.Mul func createTestLocation(t *testing.T, shardHash multihash.Multihash, storageURL url.URL) verification.Location { t.Helper() - provider := testutil.Must(ed25519.Generate())(t) - space := testutil.Must(ed25519.Generate())(t) + provider := testutil.RandomIssuer(t) + space := testutil.RandomIssuer(t) commitment := testutil.Must(assertcmds.Location.Invoke( provider,