diff --git a/README.md b/README.md index 27c7daa7..40529bcd 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ Code Factor - - + Go Report Card @@ -25,8 +25,8 @@ Coverage - - + GoDoc

@@ -51,7 +51,7 @@ See [GoDoc](https://godoc.org/github.com/berty/go-orbit-db). Constraints: * `go-orbit-db` currently only works with **go1.16** and later -* You need to use the canonical import: `berty.tech/go-orbit-db` instead of `github.com/berty/go-orbit-db` +* You need to use the canonical import: `github.com/stateless-minds/go-orbit-db` instead of `github.com/berty/go-orbit-db` * If you have `410 gone` errors, make sure that you use a reliable `$GOPROXY` or disable it completely Example: @@ -59,7 +59,7 @@ Example: ```console $ go version go version go1.17.3 darwin/amd64 -$ go get berty.tech/go-orbit-db +$ go get github.com/stateless-minds/go-orbit-db [...] $ ``` diff --git a/accesscontroller/doc.go b/accesscontroller/doc.go index ee4c4aa5..498f4aab 100644 --- a/accesscontroller/doc.go +++ b/accesscontroller/doc.go @@ -1,2 +1,2 @@ // accesscontroller is a package handling permissions for OrbitDB stores -package accesscontroller // import "berty.tech/go-orbit-db/accesscontroller" +package accesscontroller // import "github.com/stateless-minds/go-orbit-db/accesscontroller" diff --git a/accesscontroller/interface.go b/accesscontroller/interface.go index 304a7d23..21efc8d8 100644 --- a/accesscontroller/interface.go +++ b/accesscontroller/interface.go @@ -3,8 +3,9 @@ package accesscontroller import ( "context" - "berty.tech/go-ipfs-log/accesscontroller" - "berty.tech/go-ipfs-log/iface" + "github.com/stateless-minds/go-ipfs-log/accesscontroller" + "github.com/stateless-minds/go-ipfs-log/iface" + "github.com/stateless-minds/go-orbit-db/address" "go.uber.org/zap" ) @@ -19,6 +20,8 @@ type Interface interface { // Type Returns the type of the store as a string Type() string + Address() address.Address + // GetAuthorizedByRole Returns the list of keys authorized for a given role GetAuthorizedByRole(role string) ([]string, error) diff --git a/accesscontroller/ipfs/accesscontroller_ipfs.go b/accesscontroller/ipfs/accesscontroller_ipfs.go index 7462d029..082d92c9 100644 --- a/accesscontroller/ipfs/accesscontroller_ipfs.go +++ b/accesscontroller/ipfs/accesscontroller_ipfs.go @@ -6,16 +6,16 @@ import ( "fmt" "sync" - logac "berty.tech/go-ipfs-log/accesscontroller" - "berty.tech/go-ipfs-log/identityprovider" - "berty.tech/go-ipfs-log/io" - "berty.tech/go-orbit-db/accesscontroller" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/iface" cid "github.com/ipfs/go-cid" cbornode "github.com/ipfs/go-ipld-cbor" coreiface "github.com/ipfs/kubo/core/coreiface" "github.com/polydawn/refmt/obj/atlas" + logac "github.com/stateless-minds/go-ipfs-log/accesscontroller" + "github.com/stateless-minds/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-ipfs-log/io" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/iface" "go.uber.org/zap" ) @@ -137,7 +137,7 @@ func (i *ipfsAccessController) Close() error { } // NewIPFSAccessController Returns an access controller for IPFS -func NewIPFSAccessController(_ context.Context, db iface.BaseOrbitDB, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (accesscontroller.Interface, error) { +func NewIPFSAccessController(_ context.Context, db iface.OrbitDB, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (accesscontroller.Interface, error) { if params == nil { return &ipfsAccessController{}, fmt.Errorf("an options object must be passed") } diff --git a/accesscontroller/ipfs/doc.go b/accesscontroller/ipfs/doc.go index 93623294..18cf4cac 100644 --- a/accesscontroller/ipfs/doc.go +++ b/accesscontroller/ipfs/doc.go @@ -1,2 +1,2 @@ // ipfs is an access controller -package ipfs // import "berty.tech/go-orbit-db/accesscontroller/ipfs" +package ipfs // import "github.com/stateless-minds/go-orbit-db/accesscontroller/ipfs" diff --git a/accesscontroller/manifest.go b/accesscontroller/manifest.go index 5284d380..ba8dd858 100644 --- a/accesscontroller/manifest.go +++ b/accesscontroller/manifest.go @@ -6,11 +6,11 @@ import ( "strings" "sync" - "berty.tech/go-ipfs-log/io" cid "github.com/ipfs/go-cid" cbornode "github.com/ipfs/go-ipld-cbor" coreiface "github.com/ipfs/kubo/core/coreiface" "github.com/polydawn/refmt/obj/atlas" + "github.com/stateless-minds/go-ipfs-log/io" "go.uber.org/zap" ) diff --git a/accesscontroller/orbitdb-selfenroll/accesscontroller_orbitdb.go b/accesscontroller/orbitdb-selfenroll/accesscontroller_orbitdb.go new file mode 100644 index 00000000..183974b1 --- /dev/null +++ b/accesscontroller/orbitdb-selfenroll/accesscontroller_orbitdb.go @@ -0,0 +1,330 @@ +package orbitdb_selfenroll + +import ( + "context" + "encoding/json" + "fmt" + "sync" + + logac "github.com/stateless-minds/go-ipfs-log/accesscontroller" + "github.com/stateless-minds/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/accesscontroller/utils" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores" + + cid "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p/core/event" + "github.com/libp2p/go-libp2p/p2p/host/eventbus" + "go.uber.org/zap" +) + +var Events = []interface{}{ + new(EventUpdated), +} + +// CreateDBOptions An alias for iface.CreateDBOptions +type CreateDBOptions = iface.CreateDBOptions + +// EventUpdated An event sent when the access controller has been updated +type EventUpdated struct{} + +type selfEnrollAccessController struct { + emitterEvtUpdated event.Emitter + orbitdb iface.OrbitDB + kvStore iface.KeyValueStore + options accesscontroller.ManifestParams + lock sync.RWMutex + logger *zap.Logger +} + +func (o *selfEnrollAccessController) SetLogger(logger *zap.Logger) { + o.lock.Lock() + defer o.lock.Unlock() + + o.logger = logger +} + +func (o *selfEnrollAccessController) Logger() *zap.Logger { + o.lock.RLock() + defer o.lock.RUnlock() + + return o.logger +} + +func (o *selfEnrollAccessController) Type() string { + return "orbitdb_selfenroll" +} + +func (o *selfEnrollAccessController) Address() address.Address { + return o.kvStore.Address() +} + +func (o *selfEnrollAccessController) GetAuthorizedByRole(role string) ([]string, error) { + authorizations, err := o.getAuthorizations() + + if err != nil { + return nil, fmt.Errorf("unable to get authorizations: %w", err) + } + + return authorizations[role], nil +} + +func (o *selfEnrollAccessController) getAuthorizations() (map[string][]string, error) { + authorizations := map[string]map[string]struct{}{} + + if o.kvStore == nil { + return map[string][]string{}, nil + } + + for role, keyBytes := range o.kvStore.All() { + var authorizedKeys []string + authorizations[role] = map[string]struct{}{} + + if err := json.Unmarshal(keyBytes, &authorizedKeys); err != nil { + return nil, fmt.Errorf("unable to unmarshal json: %w", err) + } + + for _, key := range authorizedKeys { + authorizations[role][key] = struct{}{} + } + } + + if _, ok := authorizations["write"]; ok { + if _, ok := authorizations["admin"]; !ok { + authorizations["admin"] = map[string]struct{}{} + } + + for authorized := range authorizations["write"] { + authorizations["admin"][authorized] = struct{}{} + } + } + + authorizationsLists := map[string][]string{} + + for permissionName, authorizationMap := range authorizations { + authorizationsLists[permissionName] = []string{} + for authorized := range authorizationMap { + authorizationsLists[permissionName] = append(authorizationsLists[permissionName], authorized) + } + } + + return authorizationsLists, nil +} + +func (o *selfEnrollAccessController) CanAppend(entry logac.LogEntry, p identityprovider.Interface, _ accesscontroller.CanAppendAdditionalContext) error { + // writeAccess, err := o.GetAuthorizedByRole("write") + // if err != nil { + // return fmt.Errorf("unable to get keys with write access: %w", err) + // } + + // adminAccess, err := o.GetAuthorizedByRole("admin") + // if err != nil { + // return fmt.Errorf("unable to get keys with admin access: %w", err) + // } + + // access := append(writeAccess, adminAccess...) + + // for _, k := range access { + // if k == entry.GetIdentity().ID || k == "*" { + // return p.VerifyIdentity(entry.GetIdentity()) + // } + // } + + // return fmt.Errorf("unauthorized") + + return p.VerifyIdentity(entry.GetIdentity()) +} + +func (o *selfEnrollAccessController) Grant(ctx context.Context, capability string, keyID string) error { + capabilities, err := o.GetAuthorizedByRole(capability) + if err != nil { + return fmt.Errorf("unable to fetch capabilities: %w", err) + } + + capabilities = append(capabilities, keyID) + + capabilitiesJSON, err := json.Marshal(capabilities) + if err != nil { + return fmt.Errorf("unable to marshal capabilities: %w", err) + } + + _, err = o.kvStore.Put(ctx, capability, capabilitiesJSON) + if err != nil { + return fmt.Errorf("unable to put data in store: %w", err) + } + + return nil +} + +func (o *selfEnrollAccessController) Revoke(ctx context.Context, capability string, keyID string) error { + capabilities, err := o.GetAuthorizedByRole(capability) + if err != nil { + return fmt.Errorf("unable to get capability: %w", err) + } + + for idx, existingKeyID := range capabilities { + if existingKeyID == keyID { + capabilities = append(capabilities[:idx], capabilities[idx+1:]...) + break + } + } + + if len(capabilities) > 0 { + capabilitiesJSON, err := json.Marshal(capabilities) + if err != nil { + return fmt.Errorf("unable to marshal capabilities: %w", err) + } + + _, err = o.kvStore.Put(ctx, capability, capabilitiesJSON) + if err != nil { + return fmt.Errorf("unable to persist capabilities: %w", err) + } + } else { + _, err := o.kvStore.Delete(ctx, capability) + if err != nil { + return fmt.Errorf("unable to remove capabilities: %w", err) + } + } + + return nil +} + +func (o *selfEnrollAccessController) Load(ctx context.Context, address string) error { + if o.kvStore != nil { + err := o.kvStore.Close() + if err != nil { + return fmt.Errorf("unable to close opened store: %w", err) + } + } + + grants, ok := utils.GetCachedGrants("_access") + + // Force '
/_access' naming for the database + // writeAccess := o.options.GetAccess("admin") + writeAccess := grants + if len(writeAccess) == 0 { + writeAccess = []string{o.orbitdb.Identity().ID} + } + + ipfsAccessController := accesscontroller.NewManifestParams(cid.Cid{}, true, "ipfs") + ipfsAccessController.SetAccess("write", writeAccess) + + store, err := o.orbitdb.KeyValue(ctx, utils.EnsureAddress(address), &CreateDBOptions{ + AccessController: ipfsAccessController, + }) + if err != nil { + return fmt.Errorf("unable to open key value store for access controller: %w", err) + } + + o.kvStore = store + + if ok { + for _, writeAccess := range grants { + if err := o.Grant(ctx, "write", writeAccess); err != nil { + return fmt.Errorf("unable to grant write access: %w", err) + } + } + } + + // utils.DeleteCachedGrants("_access") + + sub, err := o.kvStore.EventBus().Subscribe([]interface{}{ + new(stores.EventWrite), + new(stores.EventReady), + new(stores.EventReplicated), + }, eventbus.Name("odb/load")) + if err != nil { + return fmt.Errorf("unable subscribe to store events: %w", err) + } + + go func() { + defer sub.Close() + + var evt interface{} + for { + select { + case <-ctx.Done(): + return + case evt = <-sub.Out(): + } + + switch evt.(type) { + case stores.EventReady, stores.EventWrite, stores.EventReplicated: + o.onUpdate(ctx) + } + } + }() + + err = o.kvStore.Load(ctx, -1) + if err != nil { + return fmt.Errorf("unable to fetch store data: %w", err) + } + + return nil +} + +func (o *selfEnrollAccessController) Save(_ context.Context) (accesscontroller.ManifestParams, error) { + return accesscontroller.NewManifestParams(o.kvStore.Address().GetRoot(), false, "orbitdb_selfenroll"), nil +} + +func (o *selfEnrollAccessController) Close() error { + if err := o.kvStore.Close(); err != nil { + return fmt.Errorf("error while closing store: %w", err) + } + + return nil +} + +func (o *selfEnrollAccessController) onUpdate(_ context.Context) { + if err := o.emitterEvtUpdated.Emit(EventUpdated{}); err != nil { + o.logger.Warn("unable to emit event updated", zap.Error(err)) + } +} + +// NewIPFSAccessController Returns a default access controller for OrbitDB database +func NewSelfEnrollAccessController(ctx context.Context, db iface.OrbitDB, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (accesscontroller.Interface, error) { + if db == nil { + return &selfEnrollAccessController{}, fmt.Errorf("an OrbitDB instance is required") + } + + kvDB, ok := db.(iface.OrbitDBKVStoreProvider) + if !ok { + return &selfEnrollAccessController{}, fmt.Errorf("the OrbitDB instance must provide a key value store") + } + + addr := "default-access-controller" + if params.GetAddress().Defined() { + addr = params.GetAddress().String() + } else if params.GetName() != "" { + addr = params.GetName() + grants := params.GetAccess("write") + utils.CacheGrants("_access", grants) + } + + kvStore, err := kvDB.KeyValue(ctx, addr, nil) + if err != nil { + return nil, fmt.Errorf("unable to init key value store: %w", err) + } + + emitter, err := db.EventBus().Emitter(new(EventUpdated)) + if err != nil { + return nil, fmt.Errorf("unable to init emitter: %w", err) + } + + controller := &selfEnrollAccessController{ + orbitdb: db, + emitterEvtUpdated: emitter, + kvStore: kvStore, + options: params, + } + + for _, o := range options { + o(controller) + } + + return controller, nil +} + +var _ accesscontroller.Interface = &selfEnrollAccessController{} diff --git a/accesscontroller/orbitdb-selfenroll/doc.go b/accesscontroller/orbitdb-selfenroll/doc.go new file mode 100644 index 00000000..211c4fbd --- /dev/null +++ b/accesscontroller/orbitdb-selfenroll/doc.go @@ -0,0 +1,2 @@ +// orbitdb is an access controller for OrbitDB stores +package orbitdb_selfenroll // import "github.com/stateless-minds/go-orbit-db/accesscontroller/orbitdb" diff --git a/accesscontroller/orbitdb/accesscontroller_orbitdb.go b/accesscontroller/orbitdb/accesscontroller_orbitdb.go index f9e40d28..885f6dfa 100644 --- a/accesscontroller/orbitdb/accesscontroller_orbitdb.go +++ b/accesscontroller/orbitdb/accesscontroller_orbitdb.go @@ -6,13 +6,13 @@ import ( "fmt" "sync" - logac "berty.tech/go-ipfs-log/accesscontroller" - "berty.tech/go-ipfs-log/identityprovider" - "berty.tech/go-orbit-db/accesscontroller" - "berty.tech/go-orbit-db/accesscontroller/utils" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores" + logac "github.com/stateless-minds/go-ipfs-log/accesscontroller" + "github.com/stateless-minds/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/accesscontroller/utils" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores" cid "github.com/ipfs/go-cid" "github.com/libp2p/go-libp2p/core/event" @@ -196,8 +196,15 @@ func (o *orbitDBAccessController) Load(ctx context.Context, address string) erro } } + grants, ok := utils.GetCachedGrants("_access") + + if !ok { + return fmt.Errorf("unable to get grants") + } + // Force '
/_access' naming for the database - writeAccess := o.options.GetAccess("admin") + // writeAccess := o.options.GetAccess("admin") + writeAccess := grants if len(writeAccess) == 0 { writeAccess = []string{o.orbitdb.Identity().ID} } @@ -214,6 +221,14 @@ func (o *orbitDBAccessController) Load(ctx context.Context, address string) erro o.kvStore = store + for _, writeAccess := range grants { + if err := o.Grant(ctx, "write", writeAccess); err != nil { + return fmt.Errorf("unable to grant write access: %w", err) + } + } + + utils.DeleteCachedGrants("_access") + sub, err := o.kvStore.EventBus().Subscribe([]interface{}{ new(stores.EventWrite), new(stores.EventReady), @@ -262,13 +277,13 @@ func (o *orbitDBAccessController) Close() error { } func (o *orbitDBAccessController) onUpdate(_ context.Context) { - if err := o.emitterEvtUpdated.Emit(&EventUpdated{}); err != nil { + if err := o.emitterEvtUpdated.Emit(EventUpdated{}); err != nil { o.logger.Warn("unable to emit event updated", zap.Error(err)) } } // NewIPFSAccessController Returns a default access controller for OrbitDB database -func NewOrbitDBAccessController(ctx context.Context, db iface.BaseOrbitDB, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (accesscontroller.Interface, error) { +func NewOrbitDBAccessController(ctx context.Context, db iface.OrbitDB, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (accesscontroller.Interface, error) { if db == nil { return &orbitDBAccessController{}, fmt.Errorf("an OrbitDB instance is required") } @@ -283,6 +298,8 @@ func NewOrbitDBAccessController(ctx context.Context, db iface.BaseOrbitDB, param addr = params.GetAddress().String() } else if params.GetName() != "" { addr = params.GetName() + grants := params.GetAccess("write") + utils.CacheGrants("_access", grants) } kvStore, err := kvDB.KeyValue(ctx, addr, nil) @@ -296,6 +313,7 @@ func NewOrbitDBAccessController(ctx context.Context, db iface.BaseOrbitDB, param } controller := &orbitDBAccessController{ + orbitdb: db, emitterEvtUpdated: emitter, kvStore: kvStore, options: params, @@ -305,12 +323,6 @@ func NewOrbitDBAccessController(ctx context.Context, db iface.BaseOrbitDB, param o(controller) } - for _, writeAccess := range params.GetAccess("write") { - if err := controller.Grant(ctx, "write", writeAccess); err != nil { - return nil, fmt.Errorf("unable to grant write access: %w", err) - } - } - return controller, nil } diff --git a/accesscontroller/orbitdb/doc.go b/accesscontroller/orbitdb/doc.go index c126bb2f..e2e8f421 100644 --- a/accesscontroller/orbitdb/doc.go +++ b/accesscontroller/orbitdb/doc.go @@ -1,2 +1,2 @@ // orbitdb is an access controller for OrbitDB stores -package orbitdb // import "berty.tech/go-orbit-db/accesscontroller/orbitdb" +package orbitdb // import "github.com/stateless-minds/go-orbit-db/accesscontroller/orbitdb" diff --git a/accesscontroller/simple/accesscontroller_simple.go b/accesscontroller/simple/accesscontroller_simple.go index fe8dd064..9a18b64e 100644 --- a/accesscontroller/simple/accesscontroller_simple.go +++ b/accesscontroller/simple/accesscontroller_simple.go @@ -5,12 +5,12 @@ import ( "fmt" "sync" - logac "berty.tech/go-ipfs-log/accesscontroller" - "berty.tech/go-ipfs-log/identityprovider" - "berty.tech/go-orbit-db/accesscontroller" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/iface" cid "github.com/ipfs/go-cid" + logac "github.com/stateless-minds/go-ipfs-log/accesscontroller" + "github.com/stateless-minds/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/iface" "go.uber.org/zap" ) @@ -77,7 +77,7 @@ func (o *simpleAccessController) CanAppend(e logac.LogEntry, _ identityprovider. } // NewSimpleAccessController Returns a non configurable access controller -func NewSimpleAccessController(_ context.Context, _ iface.BaseOrbitDB, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (accesscontroller.Interface, error) { +func NewSimpleAccessController(_ context.Context, _ iface.OrbitDB, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (accesscontroller.Interface, error) { if params == nil { return &simpleAccessController{}, fmt.Errorf("an options object is required") } diff --git a/accesscontroller/simple/doc.go b/accesscontroller/simple/doc.go index f028a5cd..bc59c900 100644 --- a/accesscontroller/simple/doc.go +++ b/accesscontroller/simple/doc.go @@ -1,2 +1,2 @@ // simple is an access controller without any persistence -package simple // import "berty.tech/go-orbit-db/accesscontroller/simple" +package simple // import "github.com/stateless-minds/go-orbit-db/accesscontroller/simple" diff --git a/accesscontroller/utils/doc.go b/accesscontroller/utils/doc.go index 784614ef..91ef9853 100644 --- a/accesscontroller/utils/doc.go +++ b/accesscontroller/utils/doc.go @@ -1,2 +1,2 @@ // utils is a package containing tools related to access controllers -package utils // import "berty.tech/go-orbit-db/accesscontroller/utils" +package utils // import "github.com/stateless-minds/go-orbit-db/accesscontroller/utils" diff --git a/accesscontroller/utils/utils.go b/accesscontroller/utils/utils.go index 43ca17a8..40a23d17 100644 --- a/accesscontroller/utils/utils.go +++ b/accesscontroller/utils/utils.go @@ -3,14 +3,37 @@ package utils import ( "context" "fmt" + "sync" - "berty.tech/go-orbit-db/accesscontroller" - "berty.tech/go-orbit-db/iface" cid "github.com/ipfs/go-cid" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/iface" ) +var grantsCache = make(map[string][]string) +var grantsCacheMutex sync.Mutex + +func CacheGrants(dbName string, grants []string) { + grantsCacheMutex.Lock() + grantsCache[dbName] = grants + grantsCacheMutex.Unlock() +} + +func GetCachedGrants(dbName string) ([]string, bool) { + grantsCacheMutex.Lock() + grants, ok := grantsCache[dbName] + grantsCacheMutex.Unlock() + return grants, ok +} + +func DeleteCachedGrants(dbName string) { + grantsCacheMutex.Lock() + delete(grantsCache, dbName) + grantsCacheMutex.Unlock() +} + // Create Creates a new access controller and returns the manifest CID -func Create(ctx context.Context, db iface.BaseOrbitDB, controllerType string, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (cid.Cid, error) { +func Create(ctx context.Context, db iface.OrbitDB, controllerType string, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (cid.Cid, error) { AccessController, ok := db.GetAccessControllerType(controllerType) if !ok { return cid.Cid{}, fmt.Errorf("unrecognized access controller on create") @@ -34,7 +57,7 @@ func Create(ctx context.Context, db iface.BaseOrbitDB, controllerType string, pa } // Resolve Resolves an access controller using its manifest address -func Resolve(ctx context.Context, db iface.BaseOrbitDB, manifestAddress string, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (accesscontroller.Interface, error) { +func Resolve(ctx context.Context, db iface.OrbitDB, manifestAddress string, params accesscontroller.ManifestParams, options ...accesscontroller.Option) (accesscontroller.Interface, error) { manifest, err := accesscontroller.ResolveManifest(ctx, db.IPFS(), manifestAddress, params) if err != nil { return nil, fmt.Errorf("unable to resolve manifest: %w", err) diff --git a/address/doc.go b/address/doc.go index 386f8895..1e21471e 100644 --- a/address/doc.go +++ b/address/doc.go @@ -1,2 +1,2 @@ // Package address is a package for managing OrbitDB addresses -package address // import "berty.tech/go-orbit-db/address" +package address // import "github.com/stateless-minds/go-orbit-db/address" diff --git a/baseorbitdb/doc.go b/baseorbitdb/doc.go deleted file mode 100644 index 4190d1b5..00000000 --- a/baseorbitdb/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -// baseorbitdb package containing the base implementation of OrbitDB -package baseorbitdb // import "berty.tech/go-orbit-db/baseorbitdb" diff --git a/baseorbitdb/orbitdb.go b/baseorbitdb/orbitdb.go deleted file mode 100644 index 0c0ee94b..00000000 --- a/baseorbitdb/orbitdb.go +++ /dev/null @@ -1,869 +0,0 @@ -package baseorbitdb - -import ( - "context" - "fmt" - "path" - "strings" - "sync" - "time" - - idp "berty.tech/go-ipfs-log/identityprovider" - "berty.tech/go-ipfs-log/io" - "berty.tech/go-ipfs-log/keystore" - "berty.tech/go-orbit-db/accesscontroller" - acutils "berty.tech/go-orbit-db/accesscontroller/utils" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/cache" - "berty.tech/go-orbit-db/cache/cacheleveldown" - "berty.tech/go-orbit-db/iface" - _ "berty.tech/go-orbit-db/internal/buildconstraints" // fail for bad go version - "berty.tech/go-orbit-db/messagemarshaler" - "berty.tech/go-orbit-db/pubsub" - "berty.tech/go-orbit-db/pubsub/oneonone" - "berty.tech/go-orbit-db/utils" - cid "github.com/ipfs/go-cid" - datastore "github.com/ipfs/go-datastore" - leveldb "github.com/ipfs/go-ds-leveldb" - cbornode "github.com/ipfs/go-ipld-cbor" - coreiface "github.com/ipfs/kubo/core/coreiface" - "github.com/libp2p/go-libp2p/core/event" - peer "github.com/libp2p/go-libp2p/core/peer" - "github.com/libp2p/go-libp2p/p2p/host/eventbus" - "go.opentelemetry.io/otel/trace" - tracenoop "go.opentelemetry.io/otel/trace/noop" - "go.uber.org/zap" -) - -// OrbitDB An alias of the type defined in the iface package -type BaseOrbitDB = iface.BaseOrbitDB - -// Store An alias of the type defined in the iface package -type Store = iface.Store - -// EventLogStore An alias of the type defined in the iface package -type EventLogStore = iface.EventLogStore - -// KeyValueStore An alias of the type defined in the iface package -type KeyValueStore = iface.KeyValueStore - -// StoreIndex An alias of the type defined in the iface package -type StoreIndex = iface.StoreIndex - -// StoreConstructor An alias of the type defined in the iface package -type StoreConstructor = iface.StoreConstructor - -// IndexConstructor An alias of the type defined in the iface package -type IndexConstructor = iface.IndexConstructor - -// OnWritePrototype An alias of the type defined in the iface package -type OnWritePrototype = iface.OnWritePrototype - -// StreamOptions An alias of the type defined in the iface package -type StreamOptions = iface.StreamOptions - -// CreateDBOptions An alias of the type defined in the iface package -type CreateDBOptions = iface.CreateDBOptions - -// DetermineAddressOptions An alias of the type defined in the iface package -type DetermineAddressOptions = iface.DetermineAddressOptions - -// DirectChannelFactory An alias of the type defined in the iface package -type DirectChannelFactory = iface.DirectChannelFactory - -func boolPtr(val bool) *bool { - return &val -} - -const CBORReadDefaultTimeout = time.Second * 30 - -// NewOrbitDBOptions Options for a new OrbitDB instance -type NewOrbitDBOptions struct { - ID *string - PeerID peer.ID - Directory *string - Keystore keystore.Interface - Cache cache.Interface - Identity *idp.Identity - CloseKeystore func() error - Logger *zap.Logger - Tracer trace.Tracer - DirectChannelFactory iface.DirectChannelFactory - PubSub iface.PubSubInterface - MessageMarshaler iface.MessageMarshaler - EventBus event.Bus -} - -type orbitDB struct { - ctx context.Context - cancel context.CancelFunc - storeTypes map[string]iface.StoreConstructor - accessControllerTypes map[string]iface.AccessControllerConstructor - ipfs coreiface.CoreAPI - identity *idp.Identity - id peer.ID - pubsub iface.PubSubInterface - keystore keystore.Interface - closeKeystore func() error - stores map[string]Store - eventBus event.Bus - directory string - cache cache.Interface - logger *zap.Logger - tracer trace.Tracer - directChannel iface.DirectChannel - messageMarshaler iface.MessageMarshaler - - // emitters - emitters struct { - newHeads event.Emitter - } - - muStoreTypes sync.RWMutex - muStores sync.RWMutex - muIdentity sync.RWMutex - muID sync.RWMutex - muIPFS sync.RWMutex - muKeyStore sync.RWMutex - muCaches sync.RWMutex - muAccessControllerTypes sync.RWMutex -} - -func (o *orbitDB) Logger() *zap.Logger { - return o.logger -} - -func (o *orbitDB) Tracer() trace.Tracer { - return o.tracer -} - -func (o *orbitDB) IPFS() coreiface.CoreAPI { - o.muIPFS.RLock() - defer o.muIPFS.RUnlock() - - return o.ipfs -} - -func (o *orbitDB) Identity() *idp.Identity { - o.muIdentity.RLock() - defer o.muIdentity.RUnlock() - - return o.identity -} - -func (o *orbitDB) PeerID() peer.ID { - o.muID.RLock() - defer o.muID.RUnlock() - - return o.id -} - -func (o *orbitDB) KeyStore() keystore.Interface { - // TODO: check why o.keystore is never set - o.muKeyStore.RLock() - defer o.muKeyStore.RUnlock() - - return o.keystore -} - -func (o *orbitDB) CloseKeyStore() func() error { - // TODO: check why o.closeKeystore is never set - o.muKeyStore.RLock() - defer o.muKeyStore.RUnlock() - - return o.closeKeystore -} - -func (o *orbitDB) setStore(address string, store iface.Store) { - o.muStores.Lock() - defer o.muStores.Unlock() - - o.stores[address] = store -} - -func (o *orbitDB) deleteStore(address string) { - o.muStores.Lock() - defer o.muStores.Unlock() - - delete(o.stores, address) -} - -func (o *orbitDB) getStore(address string) (iface.Store, bool) { - o.muStores.RLock() - defer o.muStores.RUnlock() - - store, ok := o.stores[address] - - return store, ok -} - -func (o *orbitDB) closeAllStores() { - stores := []Store{} - - o.muStores.Lock() - for _, store := range o.stores { - stores = append(stores, store) - } - o.muStores.Unlock() - - for _, store := range stores { - if err := store.Close(); err != nil { - o.logger.Error("unable to close store", zap.Error(err)) - } - } -} - -func (o *orbitDB) closeCache() { - o.muCaches.Lock() - defer o.muCaches.Unlock() - - if err := o.cache.Close(); err != nil { - o.logger.Error("unable to close cache", zap.Error(err)) - } -} - -func (o *orbitDB) closeDirectConnections() { - if err := o.directChannel.Close(); err != nil { - o.logger.Error("unable to close connection", zap.Error(err)) - } -} - -func (o *orbitDB) closeKeyStore() { - o.muKeyStore.Lock() - defer o.muKeyStore.Unlock() - - if o.closeKeystore != nil { - if err := o.closeKeystore(); err != nil { - o.logger.Error("unable to close key store", zap.Error(err)) - } - } -} - -// GetAccessControllerType Gets an access controller type -func (o *orbitDB) GetAccessControllerType(controllerType string) (iface.AccessControllerConstructor, bool) { - o.muAccessControllerTypes.RLock() - defer o.muAccessControllerTypes.RUnlock() - - acType, ok := o.accessControllerTypes[controllerType] - - return acType, ok -} - -func (o *orbitDB) UnregisterAccessControllerType(controllerType string) { - o.muAccessControllerTypes.Lock() - defer o.muAccessControllerTypes.Unlock() - - delete(o.accessControllerTypes, controllerType) -} - -func (o *orbitDB) RegisterAccessControllerType(constructor iface.AccessControllerConstructor) error { - o.muAccessControllerTypes.Lock() - defer o.muAccessControllerTypes.Unlock() - - if constructor == nil { - return fmt.Errorf("accessController class needs to be given as an option") - } - - controller, _ := constructor(context.Background(), nil, nil) - - controllerType := controller.Type() - - if controller.Type() == "" { - panic("controller type cannot be empty") - } - - o.accessControllerTypes[controllerType] = constructor - - return nil - -} - -// RegisterStoreType Registers a new store type which can be used by its name -func (o *orbitDB) RegisterStoreType(storeType string, constructor iface.StoreConstructor) { - o.muStoreTypes.Lock() - defer o.muStoreTypes.Unlock() - - o.storeTypes[storeType] = constructor -} - -// UnregisterStoreType Unregisters a store type by its name -func (o *orbitDB) UnregisterStoreType(storeType string) { - o.muStoreTypes.Lock() - defer o.muStoreTypes.Unlock() - - delete(o.storeTypes, storeType) -} - -func (o *orbitDB) storeTypesNames() []string { - o.muStoreTypes.RLock() - defer o.muStoreTypes.RUnlock() - - names := make([]string, len(o.storeTypes)) - i := 0 - - for k := range o.storeTypes { - names[i] = k - i++ - } - - return names -} - -func (o *orbitDB) getStoreConstructor(s string) (iface.StoreConstructor, bool) { - o.muStoreTypes.RLock() - defer o.muStoreTypes.RUnlock() - - constructor, ok := o.storeTypes[s] - return constructor, ok -} - -func newOrbitDB(ctx context.Context, is coreiface.CoreAPI, identity *idp.Identity, options *NewOrbitDBOptions) (BaseOrbitDB, error) { - if is == nil { - return nil, fmt.Errorf("ipfs is a required argument") - } - - if identity == nil { - return nil, fmt.Errorf("identity is a required argument") - } - - if options == nil { - options = &NewOrbitDBOptions{} - } - - if options.Logger == nil { - options.Logger = zap.NewNop() - } - - if options.Tracer == nil { - options.Tracer = tracenoop.NewTracerProvider().Tracer("") - } - - if options.EventBus == nil { - options.EventBus = eventbus.NewBus() - } - - if options.DirectChannelFactory == nil { - options.DirectChannelFactory = oneonone.NewChannelFactory(is) - } - directConnections, err := makeDirectChannel(ctx, options.EventBus, options.DirectChannelFactory, &iface.DirectChannelOptions{ - Logger: options.Logger, - }) - if err != nil { - return nil, fmt.Errorf("unable to create a direct connection with peer: %w", err) - } - - k, err := is.Key().Self(ctx) - if err != nil { - return nil, err - } - - if options.PeerID.Validate() == peer.ErrEmptyPeerID { - id := k.ID() - options.PeerID = id - } - - if options.MessageMarshaler == nil { - options.MessageMarshaler = &messagemarshaler.JSONMarshaler{} - } - - if options.Cache == nil { - options.Cache = cacheleveldown.New(&cache.Options{Logger: options.Logger}) - } - - if options.Directory == nil { - options.Directory = &cacheleveldown.InMemoryDirectory - } - - ctx, cancel := context.WithCancel(ctx) - odb := &orbitDB{ - ctx: ctx, - cancel: cancel, - ipfs: is, - identity: identity, - id: options.PeerID, - pubsub: options.PubSub, - cache: options.Cache, - directory: *options.Directory, - eventBus: options.EventBus, - stores: map[string]Store{}, - directChannel: directConnections, - closeKeystore: options.CloseKeystore, - storeTypes: map[string]iface.StoreConstructor{}, - accessControllerTypes: map[string]iface.AccessControllerConstructor{}, - logger: options.Logger, - tracer: options.Tracer, - messageMarshaler: options.MessageMarshaler, - } - - // set new heads as stateful, so newly subscriber can replay last event in case they missed it - odb.emitters.newHeads, err = options.EventBus.Emitter(new(EventExchangeHeads), eventbus.Stateful) - if err != nil { - return nil, fmt.Errorf("unable to create global emitter: %w", err) - } - - if err := odb.monitorDirectChannel(ctx, options.EventBus); err != nil { - return nil, fmt.Errorf("unable to monitor direct channel: %w", err) - } - - return odb, nil -} - -// NewOrbitDB Creates a new OrbitDB instance -func NewOrbitDB(ctx context.Context, ipfs coreiface.CoreAPI, options *NewOrbitDBOptions) (BaseOrbitDB, error) { - if ipfs == nil { - return nil, fmt.Errorf("ipfs is a required argument") - } - - k, err := ipfs.Key().Self(ctx) - if err != nil { - return nil, err - } - - id := k.ID() - - if options == nil { - options = &NewOrbitDBOptions{} - } - - if options.Directory == nil { - options.Directory = &cacheleveldown.InMemoryDirectory - } - - if options.Keystore == nil { - var err error - var ds *leveldb.Datastore - - // create new datastore - if *options.Directory == cacheleveldown.InMemoryDirectory { - ds, err = leveldb.NewDatastore("", nil) - } else { - ds, err = leveldb.NewDatastore(path.Join(*options.Directory, id.String(), "/keystore"), nil) - } - - if err != nil { - return nil, fmt.Errorf("unable to create data store used by keystore: %w", err) - } - - ks, err := keystore.NewKeystore(ds) - if err != nil { - return nil, fmt.Errorf("unable to create keystore: %w", err) - } - - options.Keystore = ks - options.CloseKeystore = ds.Close - } - - if options.ID == nil { - id := id.String() - options.ID = &id - } - - if options.Identity == nil { - identity, err := idp.CreateIdentity(ctx, &idp.CreateIdentityOptions{ - Keystore: options.Keystore, - Type: "orbitdb", - ID: *options.ID, - }) - - if err != nil { - return nil, err - } - - options.Identity = identity - } - - return newOrbitDB(ctx, ipfs, options.Identity, options) -} - -func (o *orbitDB) Close() error { - o.closeAllStores() - o.closeDirectConnections() - o.closeCache() - o.closeKeyStore() - - if err := o.emitters.newHeads.Close(); err != nil { - o.logger.Warn("unable to close emitter", zap.Error(err)) - } - - o.cancel() - return nil -} - -func (o *orbitDB) Create(ctx context.Context, name string, storeType string, options *CreateDBOptions) (Store, error) { - o.logger.Debug("Create()") - - if options == nil { - options = &CreateDBOptions{} - } - - // The directory to look databases from can be passed in as an option - if options.Directory == nil { - options.Directory = &o.directory - } - - o.logger.Debug(fmt.Sprintf("Creating database '%s' as %s in '%s'", name, storeType, o.directory)) - - // Create the database address - dbAddress, err := o.DetermineAddress(ctx, name, storeType, &DetermineAddressOptions{AccessController: options.AccessController}) - if err != nil { - return nil, err - } - - // Load the locally saved database information - c, err := o.loadCache(o.directory, dbAddress) - if err != nil { - return nil, fmt.Errorf("unable to load cache: %w", err) - } - - // Check if we have the database locally - haveDB := o.haveLocalData(ctx, c, dbAddress) - - if haveDB && (options.Overwrite == nil || !*options.Overwrite) { - return nil, fmt.Errorf("database %s already exists", dbAddress) - } - - // Save the database locally - if err := o.addManifestToCache(ctx, o.directory, dbAddress); err != nil { - return nil, fmt.Errorf("unable to add manifest to cache: %w", err) - } - - o.logger.Debug(fmt.Sprintf("Created database '%s'", dbAddress)) - - // Open the database - return o.Open(ctx, dbAddress.String(), options) -} - -// Open opens a OrbitDB store. During this operation, ctx can be used to cancel or expire this method. Once this function returns, the cancellation and expiration of ctx will be noop. Users should call Store.Close to close the store after this function returns. -func (o *orbitDB) Open(ctx context.Context, dbAddress string, options *CreateDBOptions) (Store, error) { - o.logger.Debug("open orbitdb store", zap.String("address", dbAddress)) - - if options == nil { - options = &CreateDBOptions{} - } - - if options.Timeout == 0 { - options.Timeout = CBORReadDefaultTimeout - } - - if options.LocalOnly == nil { - options.LocalOnly = boolPtr(false) - } - - if options.Create == nil { - options.Create = boolPtr(false) - } - - if options.IO == nil { - options.IO = io.CBOR() - } - - o.logger.Debug("Open database ", zap.String("dbAddress", dbAddress)) - - directory := o.directory - if options.Directory != nil { - directory = *options.Directory - } - - o.logger.Debug("Look from ", zap.String("directory", directory)) - - if err := address.IsValid(dbAddress); err != nil { - o.logger.Warn("open: invalid OrbitDB address", zap.String("address", dbAddress)) - if !*options.Create { - return nil, fmt.Errorf("'options.Create' set to 'false'. If you want to create a database, set 'options.Create' to 'true'") - } else if *options.Create && (options.StoreType == nil || *options.StoreType == "") { - return nil, fmt.Errorf("database type not provided! Provide a type with 'options.StoreType' (%s)", strings.Join(o.storeTypesNames(), "|")) - } - - options.Overwrite = boolPtr(true) - return o.Create(ctx, dbAddress, *options.StoreType, options) - } - - parsedDBAddress, err := address.Parse(dbAddress) - if err != nil { - return nil, fmt.Errorf("unable to parse address: %w", err) - } - - dbCache, err := o.loadCache(directory, parsedDBAddress) - if err != nil { - return nil, fmt.Errorf("unable to acquire cache: %w", err) - } - - haveDB := o.haveLocalData(ctx, dbCache, parsedDBAddress) - if *options.LocalOnly && !haveDB { - return nil, fmt.Errorf("database doesn't exist: %s", dbAddress) - } - - readctx, cancel := context.WithTimeout(ctx, options.Timeout) - defer cancel() - - manifestNode, err := io.ReadCBOR(readctx, o.IPFS(), parsedDBAddress.GetRoot()) - if err != nil { - return nil, fmt.Errorf("unable to fetch database manifest: %w", err) - } - - manifest := &utils.Manifest{} - if err := cbornode.DecodeInto(manifestNode.RawData(), manifest); err != nil { - return nil, fmt.Errorf("unable to unmarshal manifest: %w", err) - } - - o.logger.Debug("Creating store instance") - - options.AccessControllerAddress = manifest.AccessController - - store, err := o.createStore(ctx, manifest.Type, parsedDBAddress, options) - if err != nil { - return nil, fmt.Errorf("unable to create store: %w", err) - } - - return store, nil -} - -func (o *orbitDB) DetermineAddress(ctx context.Context, name string, storeType string, options *DetermineAddressOptions) (address.Address, error) { - var err error - - if options == nil { - options = &DetermineAddressOptions{} - } - - if options.OnlyHash == nil { - t := true - options.OnlyHash = &t - } - - if _, ok := o.getStoreConstructor(storeType); !ok { - return nil, fmt.Errorf("invalid database type") - } - - if err := address.IsValid(name); err == nil { - return nil, fmt.Errorf("given database name is an address, give only the name of the database") - } - - if options.AccessController == nil { - options.AccessController = accesscontroller.NewEmptyManifestParams() - } - - if options.AccessController.GetName() == "" { - options.AccessController.SetName(name) - } - - if options.AccessController.GetType() == "" { - options.AccessController.SetType("ipfs") - } - - accessControllerAddress, err := acutils.Create(ctx, o, options.AccessController.GetType(), options.AccessController, accesscontroller.WithLogger(o.logger)) - if err != nil { - return nil, fmt.Errorf("unable to create access controller: %w", err) - } - - // Save the manifest to IPFS - manifestHash, err := utils.CreateDBManifest(ctx, o.IPFS(), name, storeType, accessControllerAddress.String()) - if err != nil { - return nil, fmt.Errorf("unable to save manifest on ipfs: %w", err) - } - - // Create the database address - return address.Parse(path.Join("/orbitdb", manifestHash.String(), name)) -} - -func (o *orbitDB) loadCache(directory string, dbAddress address.Address) (datastore.Datastore, error) { - db, err := o.cache.Load(directory, dbAddress) - if err != nil { - return nil, fmt.Errorf("unable to load cache: %w", err) - } - - return db, nil -} - -func (o *orbitDB) haveLocalData(ctx context.Context, c datastore.Datastore, dbAddress address.Address) bool { - if c == nil { - o.logger.Debug("haveLocalData: no cache provided") - return false - } - - cacheKey := datastore.NewKey(path.Join(dbAddress.String(), "_manifest")) - - data, err := c.Get(ctx, cacheKey) - if err != nil { - if err != datastore.ErrNotFound { - o.logger.Error("haveLocalData: error while getting value from cache", zap.Error(err)) - } - - return false - } - - return data != nil -} - -func (o *orbitDB) addManifestToCache(ctx context.Context, directory string, dbAddress address.Address) error { - c, err := o.loadCache(directory, dbAddress) - if err != nil { - return fmt.Errorf("unable to load existing cache: %w", err) - } - - cacheKey := datastore.NewKey(path.Join(dbAddress.String(), "_manifest")) - - if err := c.Put(ctx, cacheKey, []byte(dbAddress.GetRoot().String())); err != nil { - return fmt.Errorf("unable to set cache: %w", err) - } - - return nil -} - -func (o *orbitDB) createStore(ctx context.Context, storeType string, parsedDBAddress address.Address, options *CreateDBOptions) (Store, error) { - var err error - storeFunc, ok := o.getStoreConstructor(storeType) - if !ok { - return nil, fmt.Errorf("store type %s is not supported", storeType) - } - - var accessController accesscontroller.Interface - options.AccessControllerAddress = strings.TrimPrefix(options.AccessControllerAddress, "/ipfs/") - - if options.AccessControllerAddress != "" { - o.logger.Debug(fmt.Sprintf("Access controller address is %s", options.AccessControllerAddress)) - - c, _ := cid.Decode(options.AccessControllerAddress) - - ac := options.AccessController - if ac == nil { - ac = accesscontroller.NewEmptyManifestParams() - } else { - ac = accesscontroller.CloneManifestParams(options.AccessController) - } - ac.SetAddress(c) - - accessController, err = acutils.Resolve(ctx, o, options.AccessControllerAddress, ac, accesscontroller.WithLogger(o.logger)) - if err != nil { - return nil, fmt.Errorf("unable to acquire an access controller: %w", err) - } - } - - o.logger.Debug(fmt.Sprintf("loading cache for db %s", parsedDBAddress.String())) - - c, err := o.loadCache(o.directory, parsedDBAddress) - if err != nil { - return nil, fmt.Errorf("unable to acquire a cache instance: %w", err) - } - - if options.Replicate == nil { - options.Replicate = boolPtr(true) - } - - // options.AccessController = accessController - options.Keystore = o.KeyStore() - options.Cache = c - - identity := o.Identity() - if options.Identity != nil { - identity = options.Identity - } - - if options.Directory == nil { - options.Directory = &o.directory - } - - if options.EventBus == nil { - if o.EventBus() != nil { - options.EventBus = o.EventBus() - } else { - options.EventBus = eventbus.NewBus() - } - } - - if options.Logger == nil { - options.Logger = o.logger - } - - if options.CloseFunc == nil { - options.CloseFunc = func() {} - } - closeFunc := func() { - options.CloseFunc() - o.deleteStore(parsedDBAddress.String()) - } - - store, err := storeFunc(o.IPFS(), identity, parsedDBAddress, &iface.NewStoreOptions{ - EventBus: options.EventBus, - AccessController: accessController, - Cache: options.Cache, - Replicate: options.Replicate, - Directory: *options.Directory, - SortFn: options.SortFn, - CacheDestroy: func() error { return o.cache.Destroy(o.directory, parsedDBAddress) }, - Logger: options.Logger, - Tracer: o.tracer, - IO: options.IO, - StoreSpecificOpts: options.StoreSpecificOpts, - PubSub: o.pubsub, - MessageMarshaler: o.messageMarshaler, - PeerID: o.id, - DirectChannel: o.directChannel, - CloseFunc: closeFunc, - }) - if err != nil { - return nil, fmt.Errorf("unable to instantiate store: %w", err) - } - - o.setStore(parsedDBAddress.String(), store) - - return store, nil -} - -func (o *orbitDB) EventBus() event.Bus { - return o.eventBus -} - -func (o *orbitDB) monitorDirectChannel(ctx context.Context, bus event.Bus) error { - sub, err := bus.Subscribe(new(iface.EventPubSubPayload), - eventbus.BufSize(128), eventbus.Name("odb/monitor-direct-channel")) - if err != nil { - return fmt.Errorf("unable to init pubsub subscriber: %w", err) - } - - go func() { - for { - var e interface{} - select { - case <-ctx.Done(): - return - case e = <-sub.Out(): - } - - evt := e.(iface.EventPubSubPayload) - - msg := iface.MessageExchangeHeads{} - if err := o.messageMarshaler.Unmarshal(evt.Payload, &msg); err != nil { - o.logger.Error("unable to unmarshal message payload", zap.Error(err)) - continue - } - - store, ok := o.getStore(msg.Address) - if !ok { - o.logger.Error("unable to get store from address", zap.Error(err)) - continue - } - - if err := o.handleEventExchangeHeads(ctx, &msg, store); err != nil { - o.logger.Error("unable to handle pubsub payload", zap.Error(err)) - continue - } - - if err := o.emitters.newHeads.Emit(NewEventExchangeHeads(evt.Peer, &msg)); err != nil { - o.logger.Warn("unable to emit new heads", zap.Error(err)) - } - } - }() - - return nil -} - -func makeDirectChannel(ctx context.Context, bus event.Bus, df iface.DirectChannelFactory, opts *iface.DirectChannelOptions) (iface.DirectChannel, error) { - emitter, err := pubsub.NewPayloadEmitter(bus) - if err != nil { - return nil, fmt.Errorf("unable to init pubsub emitter: %w", err) - } - - return df(ctx, emitter, opts) -} - -var _ BaseOrbitDB = &orbitDB{} diff --git a/cache/cacheleveldown/doc.go b/cache/cacheleveldown/doc.go index de93c255..7e196c19 100644 --- a/cache/cacheleveldown/doc.go +++ b/cache/cacheleveldown/doc.go @@ -1,2 +1,2 @@ // cacheleveldown is a package returning level db data stores for OrbitDB -package cacheleveldown // import "berty.tech/go-orbit-db/cache/cacheleveldown" +package cacheleveldown // import "github.com/stateless-minds/go-orbit-db/cache/cacheleveldown" diff --git a/cache/cacheleveldown/leveldown.go b/cache/cacheleveldown/leveldown.go index 84003675..b5288130 100644 --- a/cache/cacheleveldown/leveldown.go +++ b/cache/cacheleveldown/leveldown.go @@ -7,8 +7,8 @@ import ( "path" "sync" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/cache" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/cache" datastore "github.com/ipfs/go-datastore" "github.com/ipfs/go-datastore/query" leveldb "github.com/ipfs/go-ds-leveldb" diff --git a/cache/doc.go b/cache/doc.go index 1bed0f23..93ea3822 100644 --- a/cache/doc.go +++ b/cache/doc.go @@ -1,2 +1,2 @@ // cache is a package defining the interface of cache factories -package cache // import "berty.tech/go-orbit-db/cache" +package cache // import "github.com/stateless-minds/go-orbit-db/cache" diff --git a/cache/interface.go b/cache/interface.go index 7963e796..70a0e40c 100644 --- a/cache/interface.go +++ b/cache/interface.go @@ -1,7 +1,7 @@ package cache import ( - "berty.tech/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/address" datastore "github.com/ipfs/go-datastore" "go.uber.org/zap" ) diff --git a/doc.go b/doc.go index c75fc7b3..ce2badeb 100644 --- a/doc.go +++ b/doc.go @@ -1,2 +1,2 @@ // orbitdb implements the OrbitDB interface -package orbitdb // import "berty.tech/go-orbit-db" +package orbitdb // import "github.com/stateless-minds/go-orbit-db" diff --git a/baseorbitdb/events.go b/events.go similarity index 82% rename from baseorbitdb/events.go rename to events.go index e49969a6..00244956 100644 --- a/baseorbitdb/events.go +++ b/events.go @@ -1,8 +1,8 @@ -package baseorbitdb +package orbitdb import ( - "berty.tech/go-orbit-db/iface" "github.com/libp2p/go-libp2p/core/peer" + "github.com/stateless-minds/go-orbit-db/iface" ) type EventExchangeHeads struct { diff --git a/events/doc.go b/events/doc.go index da4d6488..246b72d4 100644 --- a/events/doc.go +++ b/events/doc.go @@ -1,3 +1,3 @@ // events defines an event subscriber and dispatcher // Deprecated: use EventBus instead -package events // import "berty.tech/go-orbit-db/events" +package events // import "github.com/stateless-minds/go-orbit-db/events" diff --git a/baseorbitdb/events_handler.go b/events_handler.go similarity index 82% rename from baseorbitdb/events_handler.go rename to events_handler.go index d5dad130..f0fd2905 100644 --- a/baseorbitdb/events_handler.go +++ b/events_handler.go @@ -1,11 +1,11 @@ -package baseorbitdb +package orbitdb import ( "context" "fmt" - ipfslog "berty.tech/go-ipfs-log" - "berty.tech/go-orbit-db/iface" + ipfslog "github.com/stateless-minds/go-ipfs-log" + "github.com/stateless-minds/go-orbit-db/iface" ) func (o *orbitDB) handleEventExchangeHeads(ctx context.Context, e *iface.MessageExchangeHeads, store iface.Store) error { diff --git a/go.mod b/go.mod index 5775a997..1d16d20f 100644 --- a/go.mod +++ b/go.mod @@ -1,225 +1,237 @@ -module berty.tech/go-orbit-db +module github.com/stateless-minds/go-orbit-db -go 1.22 +go 1.24 -toolchain go1.22.5 +toolchain go1.24.4 require ( - berty.tech/go-ipfs-log v1.10.3-0.20240719141234-29e2d26e2aeb - github.com/ipfs/boxo v0.20.0 - github.com/ipfs/go-cid v0.4.1 - github.com/ipfs/go-datastore v0.6.0 - github.com/ipfs/go-ds-leveldb v0.5.0 - github.com/ipfs/go-ipld-cbor v0.1.0 + github.com/ipfs/boxo v0.32.0 + github.com/ipfs/go-cid v0.5.0 + github.com/ipfs/go-datastore v0.8.2 + github.com/ipfs/go-ds-leveldb v0.5.2 + github.com/ipfs/go-ipld-cbor v0.2.0 github.com/ipfs/go-libipfs v0.6.2 - github.com/ipfs/kubo v0.29.0 - github.com/libp2p/go-libp2p v0.34.1 - github.com/libp2p/go-libp2p-pubsub v0.11.0 + github.com/ipfs/kubo v0.36.0-rc1 + github.com/libp2p/go-libp2p v0.42.0-alpha-2 + github.com/libp2p/go-libp2p-pubsub v0.13.1 github.com/pkg/errors v0.9.1 github.com/polydawn/refmt v0.89.0 - github.com/stretchr/testify v1.9.0 - go.opentelemetry.io/otel v1.26.0 - go.opentelemetry.io/otel/trace v1.26.0 + github.com/stateless-minds/go-ipfs-log v1.10.5 + github.com/stretchr/testify v1.10.0 + go.opentelemetry.io/otel v1.35.0 + go.opentelemetry.io/otel/trace v1.35.0 go.uber.org/goleak v1.3.0 go.uber.org/zap v1.27.0 - golang.org/x/sync v0.10.0 + golang.org/x/sync v0.15.0 ) require ( bazil.org/fuse v0.0.0-20200117225306-7b5117fecadc // indirect github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect + github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e // indirect github.com/Jorropo/jsync v1.0.1 // indirect - github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect + github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b // indirect github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 // indirect github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/btcsuite/btcd v0.22.1 // indirect + github.com/caddyserver/certmagic v0.21.6 // indirect + github.com/caddyserver/zerossl v0.1.3 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/ceramicnetwork/go-dag-jose v0.1.0 // indirect - github.com/cespare/xxhash v1.1.0 // indirect + github.com/ceramicnetwork/go-dag-jose v0.1.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/containerd/cgroups v1.1.0 // indirect - github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/crackcomm/go-gitignore v0.0.0-20231225121904-e25f5bc08668 // indirect + github.com/cockroachdb/crlib v0.0.0-20241015224233-894974b3ad94 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect + github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/pebble/v2 v2.0.3 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect + github.com/cockroachdb/swiss v0.0.0-20250327203710-2932b022f6df // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect + github.com/crackcomm/go-gitignore v0.0.0-20241020182519-7843d2ba8fdf // indirect github.com/cskr/pubsub v1.0.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect github.com/dgraph-io/badger v1.6.2 // indirect - github.com/dgraph-io/ristretto v0.0.3 // indirect - github.com/docker/go-units v0.5.0 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/elastic/gosigar v0.14.2 // indirect github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/filecoin-project/go-clock v0.1.0 // indirect github.com/flynn/noise v1.1.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect + github.com/gammazero/chanqueue v1.1.0 // indirect + github.com/gammazero/deque v1.0.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect + github.com/go-jose/go-jose/v4 v4.0.5 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.2.4 // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e // indirect github.com/google/gopacket v1.1.19 // indirect - github.com/google/pprof v0.0.0-20240509144519-723abb6459b7 // indirect + github.com/google/pprof v0.0.0-20250501235452-c0086092b71a // indirect github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/websocket v1.5.1 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/huin/goupnp v1.3.0 // indirect - github.com/ipfs-shipyard/nopfs v0.0.12 // indirect - github.com/ipfs-shipyard/nopfs/ipfs v0.13.2-0.20231027223058-cde3b5ba964c // indirect + github.com/ipfs-shipyard/nopfs v0.0.14 // indirect + github.com/ipfs-shipyard/nopfs/ipfs v0.25.0 // indirect github.com/ipfs/bbloom v0.0.4 // indirect github.com/ipfs/go-bitfield v1.1.0 // indirect - github.com/ipfs/go-block-format v0.2.0 // indirect - github.com/ipfs/go-blockservice v0.5.2 // indirect + github.com/ipfs/go-block-format v0.2.1 // indirect github.com/ipfs/go-cidutil v0.1.0 // indirect - github.com/ipfs/go-ds-badger v0.3.0 // indirect - github.com/ipfs/go-ds-flatfs v0.5.1 // indirect - github.com/ipfs/go-ds-measure v0.2.0 // indirect - github.com/ipfs/go-fs-lock v0.0.7 // indirect - github.com/ipfs/go-ipfs-blockstore v1.3.1 // indirect - github.com/ipfs/go-ipfs-cmds v0.11.0 // indirect + github.com/ipfs/go-ds-badger v0.3.4 // indirect + github.com/ipfs/go-ds-flatfs v0.5.5 // indirect + github.com/ipfs/go-ds-measure v0.2.2 // indirect + github.com/ipfs/go-ds-pebble v0.5.0 // indirect + github.com/ipfs/go-fs-lock v0.1.1 // indirect + github.com/ipfs/go-ipfs-cmds v0.15.0 // indirect github.com/ipfs/go-ipfs-delay v0.0.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-pq v0.0.3 // indirect - github.com/ipfs/go-ipfs-redirects-file v0.1.1 // indirect - github.com/ipfs/go-ipfs-util v0.0.3 // indirect - github.com/ipfs/go-ipld-format v0.6.0 // indirect + github.com/ipfs/go-ipfs-redirects-file v0.1.2 // indirect + github.com/ipfs/go-ipld-format v0.6.1 // indirect github.com/ipfs/go-ipld-git v0.1.1 // indirect github.com/ipfs/go-ipld-legacy v0.2.1 // indirect - github.com/ipfs/go-log v1.0.5 // indirect - github.com/ipfs/go-log/v2 v2.5.1 // indirect - github.com/ipfs/go-merkledag v0.11.0 // indirect - github.com/ipfs/go-metrics-interface v0.0.1 // indirect - github.com/ipfs/go-peertaskqueue v0.8.1 // indirect - github.com/ipfs/go-unixfsnode v1.9.0 // indirect - github.com/ipfs/go-verifcid v0.0.3 // indirect - github.com/ipld/go-car v0.6.2 // indirect - github.com/ipld/go-car/v2 v2.13.1 // indirect - github.com/ipld/go-codec-dagpb v1.6.0 // indirect + github.com/ipfs/go-log/v2 v2.6.0 // indirect + github.com/ipfs/go-metrics-interface v0.3.0 // indirect + github.com/ipfs/go-peertaskqueue v0.8.2 // indirect + github.com/ipfs/go-unixfsnode v1.10.1 // indirect + github.com/ipld/go-car/v2 v2.14.3 // indirect + github.com/ipld/go-codec-dagpb v1.7.0 // indirect github.com/ipld/go-ipld-prime v0.21.0 // indirect + github.com/ipshipyard/p2p-forge v0.5.2-0.20250616211529-2c25ee655b22 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect - github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.7 // indirect - github.com/koron/go-ssdp v0.0.4 // indirect + github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/cpuid/v2 v2.2.10 // indirect + github.com/koron/go-ssdp v0.0.5 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/libdns/libdns v0.2.2 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect - github.com/libp2p/go-doh-resolver v0.4.0 // indirect - github.com/libp2p/go-flow-metrics v0.1.0 // indirect + github.com/libp2p/go-doh-resolver v0.5.0 // indirect + github.com/libp2p/go-flow-metrics v0.2.0 // indirect github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect - github.com/libp2p/go-libp2p-kad-dht v0.25.2 // indirect - github.com/libp2p/go-libp2p-kbucket v0.6.3 // indirect + github.com/libp2p/go-libp2p-kad-dht v0.33.1 // indirect + github.com/libp2p/go-libp2p-kbucket v0.7.0 // indirect github.com/libp2p/go-libp2p-pubsub-router v0.6.0 // indirect - github.com/libp2p/go-libp2p-record v0.2.0 // indirect - github.com/libp2p/go-libp2p-routing-helpers v0.7.3 // 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-libp2p-testing v0.12.0 // indirect github.com/libp2p/go-libp2p-xor v0.1.0 // indirect github.com/libp2p/go-msgio v0.3.0 // indirect - github.com/libp2p/go-nat v0.2.0 // indirect - github.com/libp2p/go-netroute v0.2.1 // indirect + github.com/libp2p/go-netroute v0.2.2 // indirect github.com/libp2p/go-reuseport v0.4.0 // indirect - github.com/libp2p/go-yamux/v4 v4.0.1 // indirect + github.com/libp2p/go-yamux/v5 v5.0.0 // indirect github.com/libp2p/zeroconf/v2 v2.2.0 // indirect github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/miekg/dns v1.1.59 // indirect + github.com/mholt/acmez/v3 v3.0.0 // indirect + github.com/miekg/dns v1.1.66 // indirect github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect github.com/minio/sha256-simd v1.0.1 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mr-tron/base58 v1.2.0 // indirect github.com/multiformats/go-base32 v0.1.0 // indirect github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr v0.12.4 // indirect - github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect + github.com/multiformats/go-multiaddr v0.16.0 // indirect + github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect github.com/multiformats/go-multibase v0.2.0 // indirect - github.com/multiformats/go-multicodec v0.9.0 // indirect + github.com/multiformats/go-multicodec v0.9.1 // indirect github.com/multiformats/go-multihash v0.2.3 // indirect - github.com/multiformats/go-multistream v0.5.0 // indirect + github.com/multiformats/go-multistream v0.6.1 // indirect github.com/multiformats/go-varint v0.0.7 // indirect - github.com/onsi/ginkgo/v2 v2.17.3 // indirect - github.com/opencontainers/runtime-spec v1.2.0 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/onsi/ginkgo/v2 v2.23.4 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/openzipkin/zipkin-go v0.4.3 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 // indirect - github.com/pion/datachannel v1.5.6 // indirect - github.com/pion/dtls/v2 v2.2.11 // indirect - github.com/pion/ice/v2 v2.3.24 // indirect - github.com/pion/interceptor v0.1.29 // indirect - github.com/pion/logging v0.2.2 // indirect - github.com/pion/mdns v0.0.12 // indirect + github.com/pion/datachannel v1.5.10 // indirect + github.com/pion/dtls/v2 v2.2.12 // indirect + github.com/pion/dtls/v3 v3.0.4 // indirect + github.com/pion/ice/v4 v4.0.8 // indirect + github.com/pion/interceptor v0.1.37 // indirect + github.com/pion/logging v0.2.3 // indirect + github.com/pion/mdns/v2 v2.0.7 // indirect github.com/pion/randutil v0.1.0 // indirect - github.com/pion/rtcp v1.2.14 // indirect - github.com/pion/rtp v1.8.6 // indirect - github.com/pion/sctp v1.8.16 // indirect - github.com/pion/sdp/v3 v3.0.9 // indirect - github.com/pion/srtp/v2 v2.0.18 // indirect + github.com/pion/rtcp v1.2.15 // indirect + github.com/pion/rtp v1.8.13 // indirect + github.com/pion/sctp v1.8.37 // indirect + github.com/pion/sdp/v3 v3.0.11 // indirect + github.com/pion/srtp/v3 v3.0.4 // indirect github.com/pion/stun v0.6.1 // indirect - github.com/pion/transport/v2 v2.2.5 // indirect - github.com/pion/turn/v2 v2.1.6 // indirect - github.com/pion/webrtc/v3 v3.2.40 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.19.1 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.53.0 // indirect - github.com/prometheus/procfs v0.15.0 // indirect - github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/quic-go v0.44.0 // indirect - github.com/quic-go/webtransport-go v0.8.0 // indirect - github.com/raulk/go-watchdog v1.3.0 // indirect - github.com/samber/lo v1.39.0 // indirect + github.com/pion/stun/v3 v3.0.0 // indirect + github.com/pion/transport/v2 v2.2.10 // indirect + github.com/pion/transport/v3 v3.0.7 // indirect + github.com/pion/turn/v4 v4.0.0 // indirect + github.com/pion/webrtc/v4 v4.0.14 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus/client_golang v1.22.0 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.63.0 // indirect + github.com/prometheus/procfs v0.16.1 // indirect + github.com/quic-go/qpack v0.5.1 // indirect + github.com/quic-go/quic-go v0.52.0 // indirect + github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/samber/lo v1.47.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect - github.com/whyrusleeping/cbor-gen v0.1.1 // indirect + github.com/whyrusleeping/cbor-gen v0.1.2 // indirect github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f // indirect github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 // indirect + github.com/wlynxg/anet v0.0.5 // indirect + github.com/zeebo/blake3 v0.2.4 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/zipkin v1.26.0 // indirect - go.opentelemetry.io/otel/metric v1.26.0 // indirect - go.opentelemetry.io/otel/sdk v1.26.0 // indirect - go.opentelemetry.io/proto/otlp v1.2.0 // indirect - go.uber.org/atomic v1.11.0 // indirect - go.uber.org/dig v1.17.1 // indirect - go.uber.org/fx v1.21.1 // indirect - go.uber.org/mock v0.4.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0 // indirect + go.opentelemetry.io/otel/exporters/zipkin v1.31.0 // indirect + go.opentelemetry.io/otel/metric v1.35.0 // indirect + go.opentelemetry.io/otel/sdk v1.31.0 // indirect + go.opentelemetry.io/proto/otlp v1.3.1 // indirect + go.uber.org/automaxprocs v1.6.0 // indirect + go.uber.org/dig v1.18.0 // indirect + go.uber.org/fx v1.23.0 // indirect + go.uber.org/mock v0.5.2 // indirect go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap/exp v0.3.0 // indirect go4.org v0.0.0-20230225012048-214862532bf5 // indirect - golang.org/x/crypto v0.31.0 // indirect - golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.26.0 // indirect - golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.21.0 // indirect - golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect - gonum.org/v1/gonum v0.15.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240515191416-fc5f0ca64291 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect - google.golang.org/grpc v1.64.1 // indirect - google.golang.org/protobuf v1.34.1 // indirect - gopkg.in/square/go-jose.v2 v2.6.0 // indirect + golang.org/x/crypto v0.39.0 // indirect + golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476 // indirect + golang.org/x/mod v0.25.0 // indirect + golang.org/x/net v0.41.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.26.0 // indirect + golang.org/x/time v0.11.0 // indirect + golang.org/x/tools v0.34.0 // indirect + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect + gonum.org/v1/gonum v0.16.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 // indirect + google.golang.org/grpc v1.67.1 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - lukechampine.com/blake3 v1.3.0 // indirect + lukechampine.com/blake3 v1.4.1 // indirect ) diff --git a/go.sum b/go.sum index 14c07402..b38c517c 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,5 @@ bazil.org/fuse v0.0.0-20200117225306-7b5117fecadc h1:utDghgcjE8u+EBjHOgYT+dJPcnDF05KqWMBcjuJy510= bazil.org/fuse v0.0.0-20200117225306-7b5117fecadc/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= -berty.tech/go-ipfs-log v1.10.3-0.20240719141234-29e2d26e2aeb h1:FogPdtHCS/jQMX0iC9r/iQxVyYIFEpcoQvQrf6gxf0w= -berty.tech/go-ipfs-log v1.10.3-0.20240719141234-29e2d26e2aeb/go.mod h1:9iZx/jWL+Su7j5ALhljjKZN/QScM4ONGs7yqqlcb/Qg= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -31,19 +29,20 @@ github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIo github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= 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/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e h1:ZIWapoIRN1VqT8GR8jAwb1Ie9GyehWjVcGh32Y2MznE= +github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= 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/aclements/go-perfevent v0.0.0-20240301234650-f7843625020f h1:JjxwchlOepwsUWcQwD2mLUAGE9aCp0/ehy6yCHFBOvo= +github.com/aclements/go-perfevent v0.0.0-20240301234650-f7843625020f/go.mod h1:tMDTce/yLLN/SK8gMOxQfnyeMeCg8KGzp0D1cbECEeo= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs= -github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +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/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 h1:iW0a5ljuFxkLGPNem5Ui+KBjFJzKg4Fv2fnxe4dvzpM= github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h1:Y2QMoi1vgtOIfc+6DhrMOGkLoGzqSV2rKp4Sm+opsyA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -66,67 +65,79 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/caddyserver/certmagic v0.21.6 h1:1th6GfprVfsAtFNOu4StNMF5IxK5XiaI0yZhAHlZFPE= +github.com/caddyserver/certmagic v0.21.6/go.mod h1:n1sCo7zV1Ez2j+89wrzDxo4N/T1Ws/Vx8u5NvuBFabw= +github.com/caddyserver/zerossl v0.1.3 h1:onS+pxp3M8HnHpN5MMbOMyNjmTheJyWRaZYwn+YTAyA= +github.com/caddyserver/zerossl v0.1.3/go.mod h1:CxA0acn7oEGO6//4rtrRjYgEoa4MFw/XofZnrYwGqG4= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/ceramicnetwork/go-dag-jose v0.1.0 h1:yJ/HVlfKpnD3LdYP03AHyTvbm3BpPiz2oZiOeReJRdU= -github.com/ceramicnetwork/go-dag-jose v0.1.0/go.mod h1:qYA1nYt0X8u4XoMAVoOV3upUVKtrxy/I670Dg5F0wjI= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/ceramicnetwork/go-dag-jose v0.1.1 h1:7pObs22egc14vSS3AfCFfS1VmaL4lQUsAK7OGC3PlKk= +github.com/ceramicnetwork/go-dag-jose v0.1.1/go.mod h1:8ptnYwY2Z2y/s5oJnNBn/UCxLg6CpramNJ2ZXF/5aNY= 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= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 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/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= -github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= +github.com/cockroachdb/crlib v0.0.0-20241015224233-894974b3ad94 h1:bvJv505UUfjzbaIPdNS4AEkHreDqQk6yuNpsdRHpwFA= +github.com/cockroachdb/crlib v0.0.0-20241015224233-894974b3ad94/go.mod h1:Gq51ZeKaFCXk6QwuGM0w1dnaOqc/F5zKT2zA9D6Xeac= +github.com/cockroachdb/datadriven v1.0.3-0.20240530155848-7682d40af056 h1:slXychO2uDM6hYRu4c0pD0udNI8uObfeKN6UInWViS8= +github.com/cockroachdb/datadriven v1.0.3-0.20240530155848-7682d40af056/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895 h1:XANOgPYtvELQ/h4IrmPAohXqe2pWA8Bwhejr3VQoZsA= +github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895/go.mod h1:aPd7gM9ov9M8v32Yy5NJrDyOcD8z642dqs+F0CeNXfA= +github.com/cockroachdb/pebble/v2 v2.0.3 h1:YJ3Sc9jRN/q6OOCNyRHPbcpenbxL1DdgdpUqPlPus6o= +github.com/cockroachdb/pebble/v2 v2.0.3/go.mod h1:NgxgNcWwyG/uxkLUZGM2aelshaLIZvc0hCX7SCfaO8s= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/swiss v0.0.0-20250327203710-2932b022f6df h1:GUJ4KuZtbOcIfRlprHJFFvIqQ4irtQUl+1fJr+yNmPI= +github.com/cockroachdb/swiss v0.0.0-20250327203710-2932b022f6df/go.mod h1:yBRu/cnL4ks9bgy4vAASdjIW+/xMlFwuHKqtmh3GZQg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= 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= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/crackcomm/go-gitignore v0.0.0-20231225121904-e25f5bc08668 h1:ZFUue+PNxmHlu7pYv+IYMtqlaO/0VwaGEqKepZf9JpA= -github.com/crackcomm/go-gitignore v0.0.0-20231225121904-e25f5bc08668/go.mod h1:p1d6YEZWvFzEh4KLyvBcVSnrfNDDvK2zfK/4x2v/4pE= +github.com/crackcomm/go-gitignore v0.0.0-20241020182519-7843d2ba8fdf h1:dwGgBWn84wUS1pVikGiruW+x5XM4amhjaZO20vCjay4= +github.com/crackcomm/go-gitignore v0.0.0-20241020182519-7843d2ba8fdf/go.mod h1:p1d6YEZWvFzEh4KLyvBcVSnrfNDDvK2zfK/4x2v/4pE= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 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 v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= -github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= +github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= 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/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI= -github.com/dgraph-io/ristretto v0.0.3/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.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +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/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= -github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= -github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -135,39 +146,50 @@ github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 h1:BBso6MBKW github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5/go.mod h1:JpoxHjuQauoxiFMl1ie8Xc/7TfLuMZ5eOCONd1sUBHg= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +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/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= 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/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= 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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= +github.com/gammazero/chanqueue v1.1.0 h1:yiwtloc1azhgGLFo2gMloJtQvkYD936Ai7tBfa+rYJw= +github.com/gammazero/chanqueue v1.1.0/go.mod h1:fMwpwEiuUgpab0sH4VHiVcEoji1pSi+EIzeG4TPeKPc= +github.com/gammazero/deque v1.0.0 h1:LTmimT8H7bXkkCy6gZX7zNLtkbz4NdS2z8LZuor3j34= +github.com/gammazero/deque v1.0.0/go.mod h1:iflpYvtGfM3U8S8j+sZEKIak3SAKYpA5/SQewgfXDKo= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9 h1:r5GgOLGbza2wVHRzK7aAj6lWZjfbAwiu/RDCVOKjRyM= +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= -github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= @@ -175,6 +197,8 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= +github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -197,11 +221,14 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= 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.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e h1:4bw4WeyTYPp0smaXiJZCNnLrvVBqirQVreixayXezGc= +github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e/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= @@ -209,12 +236,11 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= @@ -223,12 +249,12 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20240509144519-723abb6459b7 h1:velgFPYr1X9TDwLIfkV7fWqsFlf7TeP11M/7kPd/dVI= -github.com/google/pprof v0.0.0-20240509144519-723abb6459b7/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20250501235452-c0086092b71a h1:rDA3FfmxwXR+BVKKdz55WwMJ1pD2hJQNW31d+l3mPk4= +github.com/google/pprof v0.0.0-20250501235452-c0086092b71a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= @@ -240,19 +266,14 @@ github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f h1:KMlcu9X58lhTA github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= -github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +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/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= @@ -264,81 +285,69 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO 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= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/ipfs-shipyard/nopfs v0.0.12 h1:mvwaoefDF5VI9jyvgWCmaoTJIJFAfrbyQV5fJz35hlk= -github.com/ipfs-shipyard/nopfs v0.0.12/go.mod h1:mQyd0BElYI2gB/kq/Oue97obP4B3os4eBmgfPZ+hnrE= -github.com/ipfs-shipyard/nopfs/ipfs v0.13.2-0.20231027223058-cde3b5ba964c h1:7UynTbtdlt+w08ggb1UGLGaGjp1mMaZhoTZSctpn5Ak= -github.com/ipfs-shipyard/nopfs/ipfs v0.13.2-0.20231027223058-cde3b5ba964c/go.mod h1:6EekK/jo+TynwSE/ZOiOJd4eEvRXoavEC3vquKtv4yI= +github.com/ipfs-shipyard/nopfs v0.0.14 h1:HFepJt/MxhZ3/GsLZkkAPzIPdNYKaLO1Qb7YmPbWIKk= +github.com/ipfs-shipyard/nopfs v0.0.14/go.mod h1:mQyd0BElYI2gB/kq/Oue97obP4B3os4eBmgfPZ+hnrE= +github.com/ipfs-shipyard/nopfs/ipfs v0.25.0 h1:OqNqsGZPX8zh3eFMO8Lf8EHRRnSGBMqcdHUd7SDsUOY= +github.com/ipfs-shipyard/nopfs/ipfs v0.25.0/go.mod h1:BxhUdtBgOXg1B+gAPEplkg/GpyTZY+kCMSfsJvvydqU= 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.20.0 h1:umUl7q1v5g5AX8FPLTnZBvvagLmT+V0Tt61EigP81ec= -github.com/ipfs/boxo v0.20.0/go.mod h1:mwttn53Eibgska2DhVIj7ln3UViq7MVHRxOMb+ehSDM= +github.com/ipfs/boxo v0.32.0 h1:rBs3P53Wt9bFW9WJwVdkzLtzYCXAj2bMjM7+1nrazZw= +github.com/ipfs/boxo v0.32.0/go.mod h1:VEtO3gOmr+sXGodalaTV9Vvsp3qVYegc4Rcu08Iw+wM= 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.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk= -github.com/ipfs/go-block-format v0.2.0 h1:ZqrkxBA2ICbDRbK8KJs/u0O3dlp6gmAuuXUJNiW1Ycs= -github.com/ipfs/go-block-format v0.2.0/go.mod h1:+jpL11nFx5A/SPpsoBn6Bzkra/zaArfSmsknbPMYgzM= -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-block-format v0.2.1 h1:96kW71XGNNa+mZw/MTzJrCpMhBWCrd9kBLoKm9Iip/Q= +github.com/ipfs/go-block-format v0.2.1/go.mod h1:frtvXHMQhM6zn7HvEQu+Qz5wSTj+04oEH/I+NjDgEjk= github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= github.com/ipfs/go-cid v0.0.4/go.mod h1:4LLaPOQwmk5z9LBgQnpkivrx8BJjUyGwTXCd5Xfj6+M= github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= -github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= +github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg= +github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk= github.com/ipfs/go-cidutil v0.1.0 h1:RW5hO7Vcf16dplUU60Hs0AKDkQAVPVplr7lk97CFL+Q= github.com/ipfs/go-cidutil v0.1.0/go.mod h1:e7OEVBMIv9JaOxt9zaGEmAoSlXW9jdFZ5lP/0PwcfpA= github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= github.com/ipfs/go-datastore v0.1.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw= -github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= -github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk= -github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8= +github.com/ipfs/go-datastore v0.8.2 h1:Jy3wjqQR6sg/LhyY0NIePZC3Vux19nLtg7dx0TVqr6U= +github.com/ipfs/go-datastore v0.8.2/go.mod h1:W+pI1NsUsz3tcsAACMtfC+IZdnQTnC/7VfPoJBQuts0= 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-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk= -github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro= -github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= -github.com/ipfs/go-ds-flatfs v0.5.1 h1:ZCIO/kQOS/PSh3vcF1H6a8fkRGS7pOfwfPdx4n/KJH4= -github.com/ipfs/go-ds-flatfs v0.5.1/go.mod h1:RWTV7oZD/yZYBKdbVIFXTX2fdY2Tbvl94NsWqmoyAX4= +github.com/ipfs/go-ds-badger v0.3.4 h1:MmqFicftE0KrwMC77WjXTrPuoUxhwyFsjKONSeWrlOo= +github.com/ipfs/go-ds-badger v0.3.4/go.mod h1:HfqsKJcNnIr9ZhZ+rkwS1J5PpaWjJjg6Ipmxd7KPfZ8= +github.com/ipfs/go-ds-flatfs v0.5.5 h1:lkx5C99pFBMI7T1sYF7y3v7xIYekNVNMp/95Gm9Y3tY= +github.com/ipfs/go-ds-flatfs v0.5.5/go.mod h1:bM7+m7KFUyv5dp3RBKTr3+OHgZ6h8ydCQkO7tjeO9Z4= github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8= -github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= -github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= -github.com/ipfs/go-ds-measure v0.2.0 h1:sG4goQe0KDTccHMyT45CY1XyUbxe5VwTKpg2LjApYyQ= -github.com/ipfs/go-ds-measure v0.2.0/go.mod h1:SEUD/rE2PwRa4IQEC5FuNAmjJCyYObZr9UvVh8V3JxE= -github.com/ipfs/go-fs-lock v0.0.7 h1:6BR3dajORFrFTkb5EpCUFIAypsoxpGpDSVUdFwzgL9U= -github.com/ipfs/go-fs-lock v0.0.7/go.mod h1:Js8ka+FNYmgQRLrRXzU3CB/+Csr1BwrRilEcvYrHhhc= +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-ds-measure v0.2.2 h1:4kwvBGbbSXNYe4ANlg7qTIYoZU6mNlqzQHdVqICkqGI= +github.com/ipfs/go-ds-measure v0.2.2/go.mod h1:b/87ak0jMgH9Ylt7oH0+XGy4P8jHx9KG09Qz+pOeTIs= +github.com/ipfs/go-ds-pebble v0.5.0 h1:lXffYCAKVD7nLLPqwJ9D8IxgO7Kz8woiX021tezdsIM= +github.com/ipfs/go-ds-pebble v0.5.0/go.mod h1:aiCRVcj3K60sxc6k5C+HO9C6rouqiSkjR/WKnbTcMfQ= +github.com/ipfs/go-fs-lock v0.1.1 h1:TecsP/Uc7WqYYatasreZQiP9EGRy4ZnKoG4yXxR33nw= +github.com/ipfs/go-fs-lock v0.1.1/go.mod h1:2goSXMCw7QfscHmSe09oXiR34DQeUdm+ei+dhonqly0= 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-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7NapWLY8= -github.com/ipfs/go-ipfs-chunker v0.0.5/go.mod h1:jhgdF8vxRHycr00k13FM8Y0E+6BoalYeobXmUyTreP8= -github.com/ipfs/go-ipfs-cmds v0.11.0 h1:6AsTKwbVxwzrOkq2x89e6jYMGxzYqjt/WbAam69HZQE= -github.com/ipfs/go-ipfs-cmds v0.11.0/go.mod h1:DHp7YfJlOK+2IS07nk+hFmbKHK52tc29W38CaAgWHpk= +github.com/ipfs/go-ipfs-cmds v0.15.0 h1:nQDgKadrzyiFyYoZMARMIoVoSwe3gGTAfGvrWLeAQbQ= +github.com/ipfs/go-ipfs-cmds v0.15.0/go.mod h1:VABf/mv/wqvYX6hLG6Z+40eNAEw3FQO0bSm370Or3Wk= github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= 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-redirects-file v0.1.1 h1:Io++k0Vf/wK+tfnhEh63Yte1oQK5VGT2hIEYpD0Rzx8= -github.com/ipfs/go-ipfs-redirects-file v0.1.1/go.mod h1:tAwRjCV0RjLTjH8DR/AU7VYvfQECg+lpUy2Mdzv7gyk= -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-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-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= 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.1.0 h1:dx0nS0kILVivGhfWuB6dUpMa/LAwElHPw1yOGYopoYs= -github.com/ipfs/go-ipld-cbor v0.1.0/go.mod h1:U2aYlmVrJr2wsUBU67K4KgepApSZddGRDWBYR0H4sCk= -github.com/ipfs/go-ipld-format v0.6.0 h1:VEJlA2kQ3LqFSIm5Vu6eIlSxD/Ze90xtc4Meten1F5U= -github.com/ipfs/go-ipld-format v0.6.0/go.mod h1:g4QVMTn3marU3qXchwjpKPKgJv+zF+OlaKMyhJ4LHPg= +github.com/ipfs/go-ipld-cbor v0.2.0 h1:VHIW3HVIjcMd8m4ZLZbrYpwjzqlVUfjLM7oK4T5/YF0= +github.com/ipfs/go-ipld-cbor v0.2.0/go.mod h1:Cp8T7w1NKcu4AQJLqK0tWpd1nkgTxEVB5C6kVpLW6/0= +github.com/ipfs/go-ipld-format v0.6.1 h1:lQLmBM/HHbrXvjIkrydRXkn+gc0DE5xO5fqelsCKYOQ= +github.com/ipfs/go-ipld-format v0.6.1/go.mod h1:8TOH1Hj+LFyqM2PjSqI2/ZnyO0KlfhHbJLkbxFa61hs= github.com/ipfs/go-ipld-git v0.1.1 h1:TWGnZjS0htmEmlMFEkA3ogrNCqWjIxwr16x1OsdhG+Y= github.com/ipfs/go-ipld-git v0.1.1/go.mod h1:+VyMqF5lMcJh4rwEppV0e6g4nCCHXThLYYDpKUkJubI= github.com/ipfs/go-ipld-legacy v0.2.1 h1:mDFtrBpmU7b//LzLSypVrXsD8QxkEWxu5qVxN99/+tk= @@ -346,44 +355,33 @@ github.com/ipfs/go-ipld-legacy v0.2.1/go.mod h1:782MOUghNzMO2DER0FlBR94mllfdCJCk github.com/ipfs/go-libipfs v0.6.2 h1:QUf3kS3RrCjgtE0QW2d18PFFfOLeEt24Ft892ipLzRI= github.com/ipfs/go-libipfs v0.6.2/go.mod h1:FmhKgxMOQA572TK5DA3MZ5GL44ZqsMHIrkgK4gLn4A8= github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A= 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.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= -github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -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.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg= -github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY= -github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVztekOF0pg= -github.com/ipfs/go-peertaskqueue v0.8.1/go.mod h1:Oxxd3eaK279FxeydSPPVGHzbwVeHjatZ2GA8XD+KbPU= -github.com/ipfs/go-unixfs v0.4.5 h1:wj8JhxvV1G6CD7swACwSKYa+NgtdWC1RUit+gFnymDU= -github.com/ipfs/go-unixfs v0.4.5/go.mod h1:BIznJNvt/gEx/ooRMI4Us9K8+qeGO7vx1ohnbk8gjFg= -github.com/ipfs/go-unixfsnode v1.9.0 h1:ubEhQhr22sPAKO2DNsyVBW7YB/zA8Zkif25aBvz8rc8= -github.com/ipfs/go-unixfsnode v1.9.0/go.mod h1:HxRu9HYHOjK6HUqFBAi++7DVoWAHn0o4v/nZ/VA+0g8= -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/ipfs/kubo v0.29.0 h1:J5G5le0/gYkx8qLN/zxDl0LcEXKbHZyMh4FCuQN1nVo= -github.com/ipfs/kubo v0.29.0/go.mod h1:mLhuve/44BxEX5ujEihviRXiaxdlrja3kjJgEs2WhK0= -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.13.1 h1:KnlrKvEPEzr5IZHKTXLAEub+tPrzeAFQVRlSQvuxBO4= -github.com/ipld/go-car/v2 v2.13.1/go.mod h1:QkdjjFNGit2GIkpQ953KBwowuoukoM75nP/JI1iDJdo= -github.com/ipld/go-codec-dagpb v1.6.0 h1:9nYazfyu9B1p3NAgfVdpRco3Fs2nFC72DqVsMj6rOcc= -github.com/ipld/go-codec-dagpb v1.6.0/go.mod h1:ANzFhfP2uMJxRBr8CE+WQWs5UsNa0pYtmKZ+agnUw9s= +github.com/ipfs/go-log/v2 v2.6.0 h1:2Nu1KKQQ2ayonKp4MPo6pXCjqw1ULc9iohRqWV5EYqg= +github.com/ipfs/go-log/v2 v2.6.0/go.mod h1:p+Efr3qaY5YXpx9TX7MoLCSEZX5boSWj9wh86P5HJa8= +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-test v0.2.2 h1:1yjYyfbdt1w93lVzde6JZ2einh3DIV40at4rVoyEcE8= +github.com/ipfs/go-test v0.2.2/go.mod h1:cmLisgVwkdRCnKu/CFZOk2DdhOcwghr5GsHeqwexoRA= +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/kubo v0.36.0-rc1 h1:6I/0F1tFoUg8Mql4gZ7WtdZs93CJlH31+bk4XzghD78= +github.com/ipfs/kubo v0.36.0-rc1/go.mod h1:yYJQT+2OJwNPVpxkHM/DpKhMLnk/t9ByGDrKGmq9AXk= +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/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.11.0/go.mod h1:+WIAkokurHmZ/KwzDOMUuoeJgaRQktHtEaLglS3ZeV8= -github.com/ipld/go-ipld-prime v0.14.1/go.mod h1:QcE4Y9n/ZZr8Ijg5bGPT0GqYWgZ1704nH0RDcQtgTP0= github.com/ipld/go-ipld-prime v0.21.0 h1:n4JmcpOlPDIxBcY037SVfpd1G+Sj1nKZah0m6QH9C2E= github.com/ipld/go-ipld-prime v0.21.0/go.mod h1:3RLqy//ERg/y5oShXXdx5YIp50cFGOanyMctpPjsvxQ= 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/ipshipyard/p2p-forge v0.5.2-0.20250616211529-2c25ee655b22 h1:J9UVOPm9gSOKM9BurRyHLRVpG5d5TPsYaSwZe1iTNqQ= +github.com/ipshipyard/p2p-forge v0.5.2-0.20250616211529-2c25ee655b22/go.mod h1:eCkvoEuBwYJpPjMaBtVwLuIU9dzMWiO2hej3zfpbu+4= 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-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= 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= @@ -406,19 +404,17 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL 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/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +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/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= -github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= +github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0= -github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk= +github.com/koron/go-ssdp v0.0.5 h1:E1iSMxIs4WqxTbIBLtmNBeOOC+1sCIXQeqTWVnpmwhk= +github.com/koron/go-ssdp v0.0.5/go.mod h1:Qm59B7hpKpDqfyRNWRNr00jGwLdXjDyZh6y7rH6VS0w= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -426,38 +422,40 @@ github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/libdns/libdns v0.2.2 h1:O6ws7bAfRPaBsgAYt8MDe2HcNBGC29hkZ9MX2eUSX3s= +github.com/libdns/libdns v0.2.2/go.mod h1:4Bj9+5CQiNMVGf87wjX4CY3HQJypUHRuLvlsfsZqLWQ= github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= -github.com/libp2p/go-doh-resolver v0.4.0 h1:gUBa1f1XsPwtpE1du0O+nnZCUqtG7oYi7Bb+0S7FQqw= -github.com/libp2p/go-doh-resolver v0.4.0/go.mod h1:v1/jwsFusgsWIGX/c6vCRrnJ60x7bhTiq/fs2qt0cAg= +github.com/libp2p/go-doh-resolver v0.5.0 h1:4h7plVVW+XTS+oUBw2+8KfoM1jF6w8XmO7+skhePFdE= +github.com/libp2p/go-doh-resolver v0.5.0/go.mod h1:aPDxfiD2hNURgd13+hfo29z9IC22fv30ee5iM31RzxU= github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= -github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro= -github.com/libp2p/go-libp2p v0.34.1 h1:fxn9vyLo7vJcXQRNvdRbyPjbzuQgi2UiqC8hEbn8a18= -github.com/libp2p/go-libp2p v0.34.1/go.mod h1:snyJQix4ET6Tj+LeI0VPjjxTtdWpeOhYt5lEY0KirkQ= +github.com/libp2p/go-flow-metrics v0.2.0 h1:EIZzjmeOE6c8Dav0sNv35vhZxATIXWZg6j/C08XmmDw= +github.com/libp2p/go-flow-metrics v0.2.0/go.mod h1:st3qqfu8+pMfh+9Mzqb2GTiwrAGjIPszEjZmtksN8Jc= +github.com/libp2p/go-libp2p v0.42.0-alpha-2 h1:/YdRlrtb/kNge0MszF8mMgO9tEaPBvD1ZGubYaliaBY= +github.com/libp2p/go-libp2p v0.42.0-alpha-2/go.mod h1:tp7K6LUZDruO2li9fK9cnQAGN8o3yTb8FwUd5AdKv+k= 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-core v0.2.4/go.mod h1:STh4fdfa5vDYr0/SzYYeqnt+E6KfEV5VxfIrm0bcI0g= github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-kad-dht v0.25.2 h1:FOIk9gHoe4YRWXTu8SY9Z1d0RILol0TrtApsMDPjAVQ= -github.com/libp2p/go-libp2p-kad-dht v0.25.2/go.mod h1:6za56ncRHYXX4Nc2vn8z7CZK0P4QiMcrn77acKLM2Oo= +github.com/libp2p/go-libp2p-kad-dht v0.33.1 h1:hKFhHMf7WH69LDjaxsJUWOU6qZm71uO47M/a5ijkiP0= +github.com/libp2p/go-libp2p-kad-dht v0.33.1/go.mod h1:CdmNk4VeGJa9EXM9SLNyNVySEvduKvb+5rSC/H4pLAo= github.com/libp2p/go-libp2p-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio= -github.com/libp2p/go-libp2p-kbucket v0.6.3 h1:p507271wWzpy2f1XxPzCQG9NiN6R6lHL9GiSErbQQo0= -github.com/libp2p/go-libp2p-kbucket v0.6.3/go.mod h1:RCseT7AH6eJWxxk2ol03xtP9pEHetYSPXOaJnOiD8i0= +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-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs= -github.com/libp2p/go-libp2p-pubsub v0.11.0 h1:+JvS8Kty0OiyUiN0i8H5JbaCgjnJTRnTHe4rU88dLFc= -github.com/libp2p/go-libp2p-pubsub v0.11.0/go.mod h1:QEb+hEV9WL9wCiUAnpY29FZR6W3zK8qYlaml8R4q6gQ= +github.com/libp2p/go-libp2p-pubsub v0.13.1 h1:tV3ttzzZSCk0EtEXnxVmWIXgjVxXx+20Jwjbs/Ctzjo= +github.com/libp2p/go-libp2p-pubsub v0.13.1/go.mod h1:MKPU5vMI8RRFyTP0HfdsF9cLmL1nHAeJm44AxJGJx44= github.com/libp2p/go-libp2p-pubsub-router v0.6.0 h1:D30iKdlqDt5ZmLEYhHELCMRj8b4sFAqrUcshIUvVP/s= github.com/libp2p/go-libp2p-pubsub-router v0.6.0/go.mod h1:FY/q0/RBTKsLA7l4vqC2cbRbOvyDotg8PJQ7j8FDudE= -github.com/libp2p/go-libp2p-record v0.2.0 h1:oiNUOCWno2BFuxt3my4i1frNrt7PerzB3queqa1NkQ0= -github.com/libp2p/go-libp2p-record v0.2.0/go.mod h1:I+3zMkvvg5m2OcSdoL0KPljyJyvNDFGKX7QdlpYUcwk= -github.com/libp2p/go-libp2p-routing-helpers v0.7.3 h1:u1LGzAMVRK9Nqq5aYDVOiq/HaB93U9WWczBzGyAC5ZY= -github.com/libp2p/go-libp2p-routing-helpers v0.7.3/go.mod h1:cN4mJAD/7zfPKXBcs9ze31JGYAZgzdABEm+q/hkswb8= +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= +github.com/libp2p/go-libp2p-routing-helpers v0.7.5/go.mod h1:3YaxrwP0OBPDD7my3D0KxfR89FlcX/IEbxDEDfAmj98= github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= github.com/libp2p/go-libp2p-xor v0.1.0 h1:hhQwT4uGrBcuAkUGXADuPltalOdpf9aag9kaYNT2tLA= @@ -465,16 +463,14 @@ github.com/libp2p/go-libp2p-xor v0.1.0/go.mod h1:LSTM5yRnjGZbWNTA/hRwq2gGFrvRIbQ github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= -github.com/libp2p/go-nat v0.2.0 h1:Tyz+bUFAYqGyJ/ppPPymMGbIgNRH+WqC5QrT5fKrrGk= -github.com/libp2p/go-nat v0.2.0/go.mod h1:3MJr+GRpRkyT65EpVPBstXLvOlAPzUVlG6Pwg9ohLJk= -github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU= -github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ= +github.com/libp2p/go-netroute v0.2.2 h1:Dejd8cQ47Qx2kRABg6lPwknU7+nBnFRpko45/fFPuZ8= +github.com/libp2p/go-netroute v0.2.2/go.mod h1:Rntq6jUAH0l9Gg17w5bFGhcC9a+vk4KNXs6s7IljKYE= github.com/libp2p/go-openssl v0.0.3/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= -github.com/libp2p/go-yamux/v4 v4.0.1 h1:FfDR4S1wj6Bw2Pqbc8Uz7pCxeRBPbwsBbEdfwiCypkQ= -github.com/libp2p/go-yamux/v4 v4.0.1/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4= +github.com/libp2p/go-yamux/v5 v5.0.0 h1:2djUh96d3Jiac/JpGkKs4TO49YhsfLopAoryfPmf+Po= +github.com/libp2p/go-yamux/v5 v5.0.0/go.mod h1:en+3cdX51U0ZslwRdRLrvQsdayFt3TSUKvBGErzpWbU= github.com/libp2p/zeroconf/v2 v2.2.0 h1:Cup06Jv6u81HLhIj1KasuNM/RHHrJ8T7wOTS4+Tv53Q= github.com/libp2p/zeroconf/v2 v2.2.0/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= @@ -487,17 +483,16 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/mholt/acmez/v3 v3.0.0 h1:r1NcjuWR0VaKP2BTjDK9LRFBw/WvURx3jlaEUl9Ht8E= +github.com/mholt/acmez/v3 v3.0.0/go.mod h1:L1wOU06KKvq7tswuMDwKdcHeKpFFgkppZy/y0DFxagQ= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/dns v1.1.59 h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs= -github.com/miekg/dns v1.1.59/go.mod h1:nZpewl5p6IvctfgrckopVx2OlSEHPRO/U4SYkRklrEk= +github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE= +github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= @@ -511,7 +506,6 @@ github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -530,11 +524,10 @@ github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a github.com/multiformats/go-multiaddr v0.1.0/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.12.4 h1:rrKqpY9h+n80EwhhC/kkcunCZZ7URIF8yN1WEUt2Hvc= -github.com/multiformats/go-multiaddr v0.12.4/go.mod h1:sBXrNzucqkFJhvKOiwwLyqamGa/P5EIXNPLovyhQCII= -github.com/multiformats/go-multiaddr-dns v0.3.0/go.mod h1:mNzQ4eTGDg0ll1N9jKPOUogZPoJ30W8a7zk66FQPpdQ= -github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= -github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= +github.com/multiformats/go-multiaddr v0.16.0 h1:oGWEVKioVQcdIOBlYM8BH1rZDWOGJSqr9/BKl6zQ4qc= +github.com/multiformats/go-multiaddr v0.16.0/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-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-multiaddr-net v0.1.1/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= @@ -542,48 +535,47 @@ github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/g github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= -github.com/multiformats/go-multicodec v0.3.0/go.mod h1:qGGaQmioCDh+TeFOnxrbU0DaIPw8yFgAZgFG0V7p1qQ= -github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= -github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= +github.com/multiformats/go-multicodec v0.9.1 h1:x/Fuxr7ZuR4jJV4Os5g444F7xC4XmyUaT/FWtE+9Zjo= +github.com/multiformats/go-multicodec v0.9.1/go.mod h1:LLWNMtyV5ithSBUo3vFIMaeDy+h3EbkMTek1m+Fybbo= github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84= github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= -github.com/multiformats/go-multistream v0.5.0 h1:5htLSLl7lvJk3xx3qT/8Zm9J4K8vEOf/QGkvOGQAyiE= -github.com/multiformats/go-multistream v0.5.0/go.mod h1:n6tMZiwiP2wUsR8DgfDWw1dydlEqV3l6N3/GBsX6ILA= +github.com/multiformats/go-multistream v0.6.1 h1:4aoX5v6T+yWmc2raBHsTvzmFhOI8WVOer28DeBBEYdQ= +github.com/multiformats/go-multistream v0.6.1/go.mod h1:ksQf6kqHAb6zIsyw7Zm+gAuVo57Qbq84E27YlYqavqw= github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= +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/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= -github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +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.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.17.3 h1:oJcvKpIb7/8uLpDDtnQuf18xVnwKp8DTD7DQ6gTd/MU= -github.com/onsi/ginkgo/v2 v2.17.3/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= +github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= 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.33.0 h1:snPCflnZrpMsy94p4lXVEkHo12lmPnc3vY5XBbreexE= -github.com/onsi/gomega v1.33.0/go.mod h1:+925n5YtiFsLzzafLUHzVMBpvvRAzrydIBiSIxjX3wY= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= -github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +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/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU= +github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= 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/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= @@ -594,88 +586,90 @@ github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhM github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 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/pion/datachannel v1.5.6 h1:1IxKJntfSlYkpUj8LlYRSWpYiTTC02nUrOE8T3DqGeg= -github.com/pion/datachannel v1.5.6/go.mod h1:1eKT6Q85pRnr2mHiWHxJwO50SfZRtWHTsNIVb/NfGW4= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +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/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= -github.com/pion/dtls/v2 v2.2.11 h1:9U/dpCYl1ySttROPWJgqWKEylUdT0fXp/xst6JwY5Ks= -github.com/pion/dtls/v2 v2.2.11/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= -github.com/pion/ice/v2 v2.3.24 h1:RYgzhH/u5lH0XO+ABatVKCtRd+4U1GEaCXSMjNr13tI= -github.com/pion/ice/v2 v2.3.24/go.mod h1:KXJJcZK7E8WzrBEYnV4UtqEZsGeWfHxsNqhVcVvgjxw= -github.com/pion/interceptor v0.1.29 h1:39fsnlP1U8gw2JzOFWdfCU82vHvhW9o0rZnZF56wF+M= -github.com/pion/interceptor v0.1.29/go.mod h1:ri+LGNjRUc5xUNtDEPzfdkmSqISixVTBF/z/Zms/6T4= -github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= +github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= +github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= +github.com/pion/dtls/v3 v3.0.4 h1:44CZekewMzfrn9pmGrj5BNnTMDCFwr+6sLH+cCuLM7U= +github.com/pion/dtls/v3 v3.0.4/go.mod h1:R373CsjxWqNPf6MEkfdy3aSe9niZvL/JaKlGeFphtMg= +github.com/pion/ice/v4 v4.0.8 h1:ajNx0idNG+S+v9Phu4LSn2cs8JEfTsA1/tEjkkAVpFY= +github.com/pion/ice/v4 v4.0.8/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw= +github.com/pion/interceptor v0.1.37 h1:aRA8Zpab/wE7/c0O3fh1PqY0AJI3fCSEM5lRWJVorwI= +github.com/pion/interceptor v0.1.37/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/mdns v0.0.12 h1:CiMYlY+O0azojWDmxdNr7ADGrnZ+V6Ilfner+6mSVK8= -github.com/pion/mdns v0.0.12/go.mod h1:VExJjv8to/6Wqm1FXK+Ii/Z9tsVk/F5sD/N70cnYFbk= +github.com/pion/logging v0.2.3 h1:gHuf0zpoh1GW67Nr6Gj4cv5Z9ZscU7g/EaoC/Ke/igI= +github.com/pion/logging v0.2.3/go.mod h1:z8YfknkquMe1csOrxK5kc+5/ZPAzMxbKLX5aXpbpC90= +github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM= +github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= -github.com/pion/rtcp v1.2.12/go.mod h1:sn6qjxvnwyAkkPzPULIbVqSKI5Dv54Rv7VG0kNxh9L4= -github.com/pion/rtcp v1.2.14 h1:KCkGV3vJ+4DAJmvP0vaQShsb0xkRfWkO540Gy102KyE= -github.com/pion/rtcp v1.2.14/go.mod h1:sn6qjxvnwyAkkPzPULIbVqSKI5Dv54Rv7VG0kNxh9L4= -github.com/pion/rtp v1.8.3/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= -github.com/pion/rtp v1.8.6 h1:MTmn/b0aWWsAzux2AmP8WGllusBVw4NPYPVFFd7jUPw= -github.com/pion/rtp v1.8.6/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= -github.com/pion/sctp v1.8.13/go.mod h1:YKSgO/bO/6aOMP9LCie1DuD7m+GamiK2yIiPM6vH+GA= -github.com/pion/sctp v1.8.16 h1:PKrMs+o9EMLRvFfXq59WFsC+V8mN1wnKzqrv+3D/gYY= -github.com/pion/sctp v1.8.16/go.mod h1:P6PbDVA++OJMrVNg2AL3XtYHV4uD6dvfyOovCgMs0PE= -github.com/pion/sdp/v3 v3.0.9 h1:pX++dCHoHUwq43kuwf3PyJfHlwIj4hXA7Vrifiq0IJY= -github.com/pion/sdp/v3 v3.0.9/go.mod h1:B5xmvENq5IXJimIO4zfp6LAe1fD9N+kFv+V/1lOdz8M= -github.com/pion/srtp/v2 v2.0.18 h1:vKpAXfawO9RtTRKZJbG4y0v1b11NZxQnxRl85kGuUlo= -github.com/pion/srtp/v2 v2.0.18/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= +github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo= +github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0= +github.com/pion/rtp v1.8.13 h1:8uSUPpjSL4OlwZI8Ygqu7+h2p9NPFB+yAZ461Xn5sNg= +github.com/pion/rtp v1.8.13/go.mod h1:8uMBJj32Pa1wwx8Fuv/AsFhn8jsgw+3rUC2PfoBZ8p4= +github.com/pion/sctp v1.8.37 h1:ZDmGPtRPX9mKCiVXtMbTWybFw3z/hVKAZgU81wcOrqs= +github.com/pion/sctp v1.8.37/go.mod h1:cNiLdchXra8fHQwmIoqw0MbLLMs+f7uQ+dGMG2gWebE= +github.com/pion/sdp/v3 v3.0.11 h1:VhgVSopdsBKwhCFoyyPmT1fKMeV9nLMrEKxNOdy3IVI= +github.com/pion/sdp/v3 v3.0.11/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E= +github.com/pion/srtp/v3 v3.0.4 h1:2Z6vDVxzrX3UHEgrUyIGM4rRouoC7v+NiF1IHtp9B5M= +github.com/pion/srtp/v3 v3.0.4/go.mod h1:1Jx3FwDoxpRaTh1oRV8A/6G1BnFL+QI82eK4ms8EEJQ= github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= +github.com/pion/stun/v3 v3.0.0 h1:4h1gwhWLWuZWOJIJR9s2ferRO+W3zA/b6ijOI6mKzUw= +github.com/pion/stun/v3 v3.0.0/go.mod h1:HvCN8txt8mwi4FBvS3EmDghW6aQJ24T+y+1TKjB5jyU= github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= -github.com/pion/transport/v2 v2.2.2/go.mod h1:OJg3ojoBJopjEeECq2yJdXH9YVrUJ1uQ++NjXLOUorc= -github.com/pion/transport/v2 v2.2.3/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= -github.com/pion/transport/v2 v2.2.5 h1:iyi25i/21gQck4hfRhomF6SktmUQjRsRW4WJdhfc3Kc= -github.com/pion/transport/v2 v2.2.5/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= -github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0= -github.com/pion/transport/v3 v3.0.2 h1:r+40RJR25S9w3jbA6/5uEPTzcdn7ncyU44RWCbHkLg4= -github.com/pion/transport/v3 v3.0.2/go.mod h1:nIToODoOlb5If2jF9y2Igfx3PFYWfuXi37m0IlWa/D0= -github.com/pion/turn/v2 v2.1.3/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= -github.com/pion/turn/v2 v2.1.6 h1:Xr2niVsiPTB0FPtt+yAWKFUkU1eotQbGgpTIld4x1Gc= -github.com/pion/turn/v2 v2.1.6/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= -github.com/pion/webrtc/v3 v3.2.40 h1:Wtfi6AZMQg+624cvCXUuSmrKWepSB7zfgYDOYqsSOVU= -github.com/pion/webrtc/v3 v3.2.40/go.mod h1:M1RAe3TNTD1tzyvqHrbVODfwdPGSXOUo/OgpoGGJqFY= +github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q= +github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E= +github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= +github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= +github.com/pion/turn/v4 v4.0.0 h1:qxplo3Rxa9Yg1xXDxxH8xaqcyGUtbHYw4QSCvmFWvhM= +github.com/pion/turn/v4 v4.0.0/go.mod h1:MuPDkm15nYSklKpN8vWJ9W2M0PlyQZqYt1McGuxG7mA= +github.com/pion/webrtc/v4 v4.0.14 h1:nyds/sFRR+HvmWoBa6wrL46sSfpArE0qR883MBW96lg= +github.com/pion/webrtc/v4 v4.0.14/go.mod h1:R3+qTnQTS03UzwDarYecgioNf7DYgTsldxnCXB821Kk= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= 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/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.0.0-20201211092308-30ac6d18308e/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= github.com/polydawn/refmt v0.89.0 h1:ADJTApkvkeBZsN0tBTx8QjpD9JkmxbKp0cxfr9qszm4= github.com/polydawn/refmt v0.89.0/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw= +github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +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.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.53.0 h1:U2pL9w9nmJwJDa4qqLQ3ZaePJ6ZTwt7cMD3AG3+aLCE= -github.com/prometheus/common v0.53.0/go.mod h1:BrxBKv3FWBIGXw89Mg1AeBq7FSyRzXWI3l3e7W3RN5U= +github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= +github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.15.0 h1:A82kmvXJq2jTu5YUhSGNlYoxh85zLnKgPz4bMZgI5Ek= -github.com/prometheus/procfs v0.15.0/go.mod h1:Y0RJ/Y5g5wJpkTisOtqwDSo4HwhGmLB4VQSw2sQJLHk= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/quic-go v0.44.0 h1:So5wOr7jyO4vzL2sd8/pD9Kesciv91zSk8BoFngItQ0= -github.com/quic-go/quic-go v0.44.0/go.mod h1:z4cx/9Ny9UtGITIPzmPTXh1ULfOyWh4qGQlpnPcWmek= -github.com/quic-go/webtransport-go v0.8.0 h1:HxSrwun11U+LlmwpgM1kEqIqH90IT4N8auv/cD7QFJg= -github.com/quic-go/webtransport-go v0.8.0/go.mod h1:N99tjprW432Ut5ONql/aUhSLT0YVSlwHohQsuac9WaM= -github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= -github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= +github.com/quic-go/quic-go v0.52.0 h1:/SlHrCRElyaU6MaEPKqKr9z83sBg2v4FLLvWM+Z47pA= +github.com/quic-go/quic-go v0.52.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= +github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 h1:4WFk6u3sOT6pLa1kQ50ZVdm8BQFgJNA117cepZxtLIg= +github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66/go.mod h1:Vp72IJajgeOL6ddqrAhmp7IM9zbTcgkQxD/YdxrVwMw= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= -github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA= -github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= +github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= +github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= @@ -701,7 +695,8 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/slok/go-http-metrics v0.13.0 h1:lQDyJJx9wKhmbliyUsZ2l6peGnXRHjsjoqPt5VYzcP8= +github.com/slok/go-http-metrics v0.13.0/go.mod h1:HIr7t/HbN2sJaunvnt9wKP9xoBBVZFo1/KiHU3b0w+4= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= @@ -722,6 +717,8 @@ github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb6 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= +github.com/stateless-minds/go-ipfs-log v1.10.5 h1:NX/rLawbg8/3uR9qNuT4H9nxlkQizVNKdYQPOZJku1s= +github.com/stateless-minds/go-ipfs-log v1.10.5/go.mod h1:GA3zzndpH183QbdF4yPjQWxoLieQUpy8B9AKOSFaie8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -731,32 +728,29 @@ github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/ 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= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= 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.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +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/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk= -github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= 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= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/wangjia184/sortedset v0.0.0-20160527075905-f5d03557ba30/go.mod h1:YkocrP2K2tcw938x9gCOmT5G5eCD6jsTz0SZuyAqwIE= -github.com/warpfork/go-testmark v0.3.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= -github.com/warpfork/go-testmark v0.9.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= 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-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= @@ -766,8 +760,8 @@ github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc h1:BCPnHtcboa github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc/go.mod h1:r45hJU7yEoA81k6MWNhpMj/kms0n14dkzkxYHoB96UM= github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 h1:5HZfQkwe0mIfyDmc1Em5GqlNRzcdtlv4HTNmdpt7XH0= github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ= -github.com/whyrusleeping/cbor-gen v0.1.1 h1:eKfcJIoxivjMtwfCfmJAqSF56MHcWqyIScXwaC1VBgw= -github.com/whyrusleeping/cbor-gen v0.1.1/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so= +github.com/whyrusleeping/cbor-gen v0.1.2 h1:WQFlrPhpcQl+M2/3dP5cvlTLWPVsL6LGBb9jJt6l/cA= +github.com/whyrusleeping/cbor-gen v0.1.2/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= @@ -775,12 +769,20 @@ github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= +github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= +github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= +github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY= +github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/blake3 v0.2.4 h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI= +github.com/zeebo/blake3 v0.2.4/go.mod h1:7eeQ6d2iXWRGF6npfaxl2CU+xy2Fjo2gxeyZGCRUjcE= +github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo= +github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -789,56 +791,49 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 h1:Xs2Ncz0gNihqu9iosIZ5SkBbWo5T8JhhLJFMQL1qmLI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0/go.mod h1:vy+2G/6NvVMpwGX/NyLqcC41fxepnuKHk16E6IZUcJc= -go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= -go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 h1:1u/AyyOqAWzy+SkPxDpahCNZParHV8Vid1RnI2clyDE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0/go.mod h1:z46paqbJ9l7c9fIPCXTqTGwhQZ5XoTIsfeFYWboizjs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 h1:Waw9Wfpo/IXzOI8bCB7DIk+0JZcqqsyn1JFnAc+iam8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0/go.mod h1:wnJIG4fOqyynOnnQF/eQb4/16VlX2EJAHhHgqIqWfAo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 h1:1wp/gyxsuYtuE/JFxsQRtcCDtMrO2qMvlfXALU5wkzI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0/go.mod h1:gbTHmghkGgqxMomVQQMur1Nba4M0MQ8AYThXDUjsJ38= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.26.0 h1:0W5o9SzoR15ocYHEQfvfipzcNog1lBxOLfnex91Hk6s= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.26.0/go.mod h1:zVZ8nz+VSggWmnh6tTsJqXQ7rU4xLwRtna1M4x5jq58= -go.opentelemetry.io/otel/exporters/zipkin v1.26.0 h1:sBk6A62GgcQRwcxcBwRMPkqeuSizcpHkXyZNyP281Fw= -go.opentelemetry.io/otel/exporters/zipkin v1.26.0/go.mod h1:fLzYtPUxPFzu7rSqhYsCxYheT2dNoPjtKovCLzLm07w= -go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= -go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= -go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= -go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= -go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= -go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= -go.opentelemetry.io/proto/otlp v1.2.0 h1:pVeZGk7nXDC9O2hncA6nHldxEjm6LByfA2aN8IOkz94= -go.opentelemetry.io/proto/otlp v1.2.0/go.mod h1:gGpR8txAl5M03pDhMC79G6SdqNV26naRm/KDsgaHD8A= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM= +go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= +go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 h1:K0XaT3DwHAcV4nKLzcQvwAgSyisUghWoY20I7huthMk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0/go.mod h1:B5Ki776z/MBnVha1Nzwp5arlzBbE3+1jk+pGmaP5HME= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 h1:lUsI2TYsQw2r1IASwoROaCnjdj2cvC2+Jbxvk6nHnWU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0/go.mod h1:2HpZxxQurfGxJlJDblybejHB6RX6pmExPNe517hREw4= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0 h1:UGZ1QwZWY67Z6BmckTU+9Rxn04m2bD3gD6Mk0OIOCPk= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0/go.mod h1:fcwWuDuaObkkChiDlhEpSq9+X1C0omv+s5mBtToAQ64= +go.opentelemetry.io/otel/exporters/zipkin v1.31.0 h1:CgucL0tj3717DJnni7HVVB2wExzi8c2zJNEA2BhLMvI= +go.opentelemetry.io/otel/exporters/zipkin v1.31.0/go.mod h1:rfzOVNiSwIcWtEC2J8epwG26fiaXlYvLySJ7bwsrtAE= +go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= +go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= +go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= +go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= +go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 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.17.1 h1:Tga8Lz8PcYNsWsyHMZ1Vm0OQOUaJNDyvPImgbAu9YSc= -go.uber.org/dig v1.17.1/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= -go.uber.org/fx v1.21.1 h1:RqBh3cYdzZS0uqwVeEjOX2p73dddLpym315myy/Bpb0= -go.uber.org/fx v1.21.1/go.mod h1:HT2M7d7RHo+ebKGh9NRcrsrHHfpZ60nW3QRubMRfv48= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= +go.uber.org/dig v1.18.0 h1:imUL1UiY0Mg4bqbFfsRQO5G4CGRBec/ZujWTvSVp3pw= +go.uber.org/dig v1.18.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= +go.uber.org/fx v1.23.0 h1:lIr/gYWQGfTwGcSXWXu4vP5Ws6iqnNEIY+F/aFzCKTg= +go.uber.org/fx v1.23.0/go.mod h1:o/D9n+2mLP6v1EG+qsdT1O8wKopYAsqZasju97SDFCU= 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.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= -go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -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/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= +go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= 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.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.uber.org/zap/exp v0.3.0 h1:6JYzdifzYkGmTdRR59oYH+Ng7k49H9qVpWwNSsGJj3U= +go.uber.org/zap/exp v0.3.0/go.mod h1:5I384qq7XGxYyByIhHm6jg5CHkGY0nsTfbDLgDDlgJQ= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg= go4.org v0.0.0-20230225012048-214862532bf5 h1:nifaUDeh+rPaBCMPMQHZmvJf+QdpLFnuQPwx+LxVmtc= go4.org v0.0.0-20230225012048-214862532bf5/go.mod h1:F57wTi5Lrj6WLyswp5EYV1ncrEbFGHD4hhz6S1ZYeaU= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= @@ -859,13 +854,10 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -874,8 +866,8 @@ golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476 h1:bsqhLWFR6G6xiQcb+JoGqdKdRU6WzPWmK8E0jxTjzo4= +golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -896,11 +888,10 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= +golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= 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= @@ -919,28 +910,25 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +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.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -959,9 +947,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -986,50 +973,38 @@ golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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-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.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1039,16 +1014,15 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 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.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= +golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1070,8 +1044,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-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1082,20 +1054,21 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= +golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= -gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ= -gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo= +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= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= @@ -1132,10 +1105,10 @@ google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto/googleapis/api v0.0.0-20240515191416-fc5f0ca64291 h1:4HZJ3Xv1cmrJ+0aFo304Zn79ur1HMxptAE7aCPNLSqc= -google.golang.org/genproto/googleapis/api v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 h1:T6rh4haD3GVYsgEfWExoCZA2o2FmbNyKpTuAxbEFPTg= +google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:wp2WsuBYj6j8wUdo3ToZsdxxixbvQNAHqVJrTgi5E5M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 h1:QCqS/PdaHTSWGvupk2F/ehwHtGc0/GYkT+3GAcR1CCc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -1148,8 +1121,8 @@ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= -google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= 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= @@ -1159,8 +1132,10 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1169,9 +1144,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV 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/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= -gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -1179,12 +1151,10 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD 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.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= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= @@ -1194,11 +1164,10 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= -lukechampine.com/blake3 v1.3.0 h1:sJ3XhFINmHSrYCgl958hscfIa3bw8x4DqMP3u1YvoYE= -lukechampine.com/blake3 v1.3.0/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= -pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= -pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= +lukechampine.com/blake3 v1.4.1 h1:I3Smz7gso8w4/TunLKec6K2fn+kyKtDxr/xcQEN84Wg= +lukechampine.com/blake3 v1.4.1/go.mod h1:QFosUxmjB8mnrWFSNwKmvxHpfY72bmD2tQ0kBMM3kwo= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= +pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/iface/doc.go b/iface/doc.go index c1087bcc..bb9b6c02 100644 --- a/iface/doc.go +++ b/iface/doc.go @@ -1,2 +1,2 @@ // iface package containing common structures and interfaces of orbitdb -package iface // import "berty.tech/go-orbit-db/iface" +package iface // import "github.com/stateless-minds/go-orbit-db/iface" diff --git a/iface/interface.go b/iface/interface.go index 9627efc3..22ec7bfd 100644 --- a/iface/interface.go +++ b/iface/interface.go @@ -4,21 +4,21 @@ import ( "context" "time" - ipfslog "berty.tech/go-ipfs-log" - "berty.tech/go-ipfs-log/entry" - "berty.tech/go-ipfs-log/identityprovider" - "berty.tech/go-ipfs-log/iface" - "berty.tech/go-ipfs-log/keystore" - "berty.tech/go-orbit-db/accesscontroller" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/events" - "berty.tech/go-orbit-db/stores/operation" - "berty.tech/go-orbit-db/stores/replicator" cid "github.com/ipfs/go-cid" datastore "github.com/ipfs/go-datastore" coreiface "github.com/ipfs/kubo/core/coreiface" "github.com/libp2p/go-libp2p/core/event" peer "github.com/libp2p/go-libp2p/core/peer" + ipfslog "github.com/stateless-minds/go-ipfs-log" + "github.com/stateless-minds/go-ipfs-log/entry" + "github.com/stateless-minds/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-ipfs-log/iface" + "github.com/stateless-minds/go-ipfs-log/keystore" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/events" + "github.com/stateless-minds/go-orbit-db/stores/operation" + "github.com/stateless-minds/go-orbit-db/stores/replicator" "go.opentelemetry.io/otel/trace" "go.uber.org/zap" ) @@ -155,11 +155,51 @@ type OrbitDBLogStoreProvider interface { // OrbitDB Provides an OrbitDB interface with the default access controllers and store types type OrbitDB interface { - BaseOrbitDB - OrbitDBKVStoreProvider OrbitDBLogStoreProvider OrbitDBDocumentStoreProvider + + // IPFS Returns the instance of the IPFS API used by the current DB + IPFS() coreiface.CoreAPI + + // Identity Returns the identity used by the current DB + Identity() *identityprovider.Identity + + // Open Opens an existing data store + Open(ctx context.Context, dbAddress string, options *CreateDBOptions) (Store, error) + + // Create Creates a new store + Create(ctx context.Context, name string, storeType string, options *CreateDBOptions) (Store, error) + + // Close Closes the current DB and all the related stores + Close() error + + // DetermineAddress Returns the store address for the given parameters + DetermineAddress(ctx context.Context, name string, storeType string, options *DetermineAddressOptions) (address.Address, error) + + // RegisterStoreType Registers a new store type + RegisterStoreType(storeType string, constructor StoreConstructor) + + // UnregisterStoreType Removes a store type + UnregisterStoreType(storeType string) + + // RegisterAccessControllerType Registers a new access controller type + RegisterAccessControllerType(AccessControllerConstructor) error + + // UnregisterAccessControllerType Unregisters an access controller type + UnregisterAccessControllerType(string) + + // GetAccessControllerType Retrieves an access controller type constructor if it exists + GetAccessControllerType(string) (AccessControllerConstructor, bool) + + // EventBus Returns the eventsBus + EventBus() event.Bus + + // Logger Returns the logger + Logger() *zap.Logger + + // Tracer Returns the tracer + Tracer() trace.Tracer } // StreamOptions Defines the parameters that can be given to the Stream function of an EventLogStore @@ -387,7 +427,7 @@ type IndexConstructor func(publicKey []byte) StoreIndex type OnWritePrototype func(ctx context.Context, addr cid.Cid, entry ipfslog.Entry, heads []cid.Cid) error // AccessControllerConstructor Required prototype for custom controllers constructors -type AccessControllerConstructor func(context.Context, BaseOrbitDB, accesscontroller.ManifestParams, ...accesscontroller.Option) (accesscontroller.Interface, error) +type AccessControllerConstructor func(context.Context, OrbitDB, accesscontroller.ManifestParams, ...accesscontroller.Option) (accesscontroller.Interface, error) // PubSubTopic is a pub sub subscription to a topic type PubSubTopic interface { diff --git a/messagemarshaler/doc.go b/messagemarshaler/doc.go index 27b64605..6e2c1410 100644 --- a/messagemarshaler/doc.go +++ b/messagemarshaler/doc.go @@ -1,2 +1,2 @@ // Package messagemarshaler is a package for marshal messages -package messagemarshaler // import "berty.tech/go-orbit-db/messagemarshaler" +package messagemarshaler // import "github.com/stateless-minds/go-orbit-db/messagemarshaler" diff --git a/messagemarshaler/json_marshaler.go b/messagemarshaler/json_marshaler.go index c48c1372..d4181e08 100644 --- a/messagemarshaler/json_marshaler.go +++ b/messagemarshaler/json_marshaler.go @@ -3,7 +3,7 @@ package messagemarshaler import ( "encoding/json" - "berty.tech/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/iface" ) type JSONMarshaler struct{} diff --git a/orbitdb.go b/orbitdb.go index 6cde441d..d99dc416 100644 --- a/orbitdb.go +++ b/orbitdb.go @@ -3,21 +3,81 @@ package orbitdb import ( "context" "fmt" - + "path" + "strings" + "sync" + "time" + + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + leveldb "github.com/ipfs/go-ds-leveldb" coreiface "github.com/ipfs/kubo/core/coreiface" - - "berty.tech/go-orbit-db/accesscontroller/ipfs" - "berty.tech/go-orbit-db/accesscontroller/orbitdb" - "berty.tech/go-orbit-db/accesscontroller/simple" - "berty.tech/go-orbit-db/baseorbitdb" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores/documentstore" - "berty.tech/go-orbit-db/stores/eventlogstore" - "berty.tech/go-orbit-db/stores/kvstore" + "github.com/libp2p/go-libp2p/core/event" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/p2p/host/eventbus" + "github.com/polydawn/refmt/obj/atlas" + idp "github.com/stateless-minds/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-ipfs-log/io" + "github.com/stateless-minds/go-ipfs-log/keystore" + "go.opentelemetry.io/otel/trace" + tracenoop "go.opentelemetry.io/otel/trace/noop" + "go.uber.org/zap" + + cbornode "github.com/ipfs/go-ipld-cbor" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + ipfsAccess "github.com/stateless-minds/go-orbit-db/accesscontroller/ipfs" + "github.com/stateless-minds/go-orbit-db/accesscontroller/orbitdb" + orbitdb_selfenroll "github.com/stateless-minds/go-orbit-db/accesscontroller/orbitdb-selfenroll" + "github.com/stateless-minds/go-orbit-db/accesscontroller/simple" + acutils "github.com/stateless-minds/go-orbit-db/accesscontroller/utils" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/cache" + "github.com/stateless-minds/go-orbit-db/cache/cacheleveldown" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/messagemarshaler" + "github.com/stateless-minds/go-orbit-db/pubsub" + "github.com/stateless-minds/go-orbit-db/pubsub/oneonone" + "github.com/stateless-minds/go-orbit-db/stores/documentstore" + "github.com/stateless-minds/go-orbit-db/stores/eventlogstore" + "github.com/stateless-minds/go-orbit-db/stores/kvstore" + "github.com/stateless-minds/go-orbit-db/utils" ) +const CBORReadDefaultTimeout = time.Second * 30 + type orbitDB struct { - baseorbitdb.BaseOrbitDB + ctx context.Context + cancel context.CancelFunc + storeTypes map[string]iface.StoreConstructor + accessControllerTypes map[string]iface.AccessControllerConstructor + ipfs coreiface.CoreAPI + identity *idp.Identity + id peer.ID + pubsub iface.PubSubInterface + keystore keystore.Interface + closeKeystore func() error + stores map[string]Store + eventBus event.Bus + directory string + cache cache.Interface + logger *zap.Logger + tracer trace.Tracer + directChannel iface.DirectChannel + messageMarshaler iface.MessageMarshaler + + // emitters + emitters struct { + newHeads event.Emitter + } + + muStoreTypes sync.RWMutex + muStores sync.RWMutex + muIdentity sync.RWMutex + muID sync.RWMutex + muIPFS sync.RWMutex + muKeyStore sync.RWMutex + muCaches sync.RWMutex + muAccessControllerTypes sync.RWMutex } // OrbitDB An alias of the type defined in the iface package @@ -60,27 +120,811 @@ type CreateDocumentDBOptions = iface.CreateDocumentDBOptions type DetermineAddressOptions = iface.DetermineAddressOptions // NewOrbitDBOptions Options for a new OrbitDB instance -type NewOrbitDBOptions = baseorbitdb.NewOrbitDBOptions +type NewOrbitDBOptions struct { + ID *string + PeerID peer.ID + Directory *string + Keystore keystore.Interface + Cache cache.Interface + Identity *idp.Identity + CloseKeystore func() error + Logger *zap.Logger + Tracer trace.Tracer + DirectChannelFactory iface.DirectChannelFactory + PubSub iface.PubSubInterface + MessageMarshaler iface.MessageMarshaler + EventBus event.Bus +} + +var AtlasManifestEnvelope = atlas.BuildEntry(utils.ManifestEnvelope{}). + StructMap(). + AddField("Manifest", atlas.StructMapEntry{SerialName: "manifest"}). + AddField("SkipManifest", atlas.StructMapEntry{SerialName: "skip_manifest"}). + AddField("Address", atlas.StructMapEntry{SerialName: "address"}). + AddField("ManifestType", atlas.StructMapEntry{SerialName: "manifest/type"}). + AddField("Type", atlas.StructMapEntry{SerialName: "type"}). + AddField("Name", atlas.StructMapEntry{SerialName: "name"}). + AddField("AccessController", atlas.StructMapEntry{SerialName: "access_controller"}). // Explicitly set CBOR key + Complete() + +func init() { + cbornode.RegisterCborType(AtlasManifestEnvelope) +} + +// RegisterStoreType Registers a new store type which can be used by its name +func (o *orbitDB) RegisterStoreType(storeType string, constructor iface.StoreConstructor) { + o.muStoreTypes.Lock() + defer o.muStoreTypes.Unlock() + + o.storeTypes[storeType] = constructor +} + +// UnregisterStoreType Unregisters a store type by its name +func (o *orbitDB) UnregisterStoreType(storeType string) { + o.muStoreTypes.Lock() + defer o.muStoreTypes.Unlock() + + delete(o.storeTypes, storeType) +} + +func (o *orbitDB) UnregisterAccessControllerType(controllerType string) { + o.muAccessControllerTypes.Lock() + defer o.muAccessControllerTypes.Unlock() + + delete(o.accessControllerTypes, controllerType) +} + +func (o *orbitDB) RegisterAccessControllerType(constructor iface.AccessControllerConstructor) error { + o.muAccessControllerTypes.Lock() + defer o.muAccessControllerTypes.Unlock() + + if constructor == nil { + return fmt.Errorf("accessController class needs to be given as an option") + } + + controller, _ := constructor(context.Background(), nil, nil) + + controllerType := controller.Type() + + if controller.Type() == "" { + panic("controller type cannot be empty") + } + + o.accessControllerTypes[controllerType] = constructor + + return nil + +} + +func (o *orbitDB) EventBus() event.Bus { + return o.eventBus +} + +// GetAccessControllerType Gets an access controller type +func (o *orbitDB) GetAccessControllerType(controllerType string) (iface.AccessControllerConstructor, bool) { + o.muAccessControllerTypes.RLock() + defer o.muAccessControllerTypes.RUnlock() + + acType, ok := o.accessControllerTypes[controllerType] + + return acType, ok +} + +func (o *orbitDB) Identity() *idp.Identity { + o.muIdentity.RLock() + defer o.muIdentity.RUnlock() + + return o.identity +} + +func (o *orbitDB) Logger() *zap.Logger { + return o.logger +} + +func (o *orbitDB) Tracer() trace.Tracer { + return o.tracer +} + +func makeDirectChannel(ctx context.Context, bus event.Bus, df iface.DirectChannelFactory, opts *iface.DirectChannelOptions) (iface.DirectChannel, error) { + emitter, err := pubsub.NewPayloadEmitter(bus) + if err != nil { + return nil, fmt.Errorf("unable to init pubsub emitter: %w", err) + } + + return df(ctx, emitter, opts) +} + +func (o *orbitDB) monitorDirectChannel(ctx context.Context, bus event.Bus) error { + sub, err := bus.Subscribe(new(iface.EventPubSubPayload), + eventbus.BufSize(128), eventbus.Name("odb/monitor-direct-channel")) + if err != nil { + return fmt.Errorf("unable to init pubsub subscriber: %w", err) + } + + go func() { + for { + var e interface{} + select { + case <-ctx.Done(): + return + case e = <-sub.Out(): + } + + evt := e.(iface.EventPubSubPayload) + + msg := iface.MessageExchangeHeads{} + if err := o.messageMarshaler.Unmarshal(evt.Payload, &msg); err != nil { + o.logger.Error("unable to unmarshal message payload", zap.Error(err)) + continue + } + + store, ok := o.getStore(msg.Address) + if !ok { + o.logger.Error("unable to get store from address", zap.Error(err)) + continue + } + + if err := o.handleEventExchangeHeads(ctx, &msg, store); err != nil { + o.logger.Error("unable to handle pubsub payload", zap.Error(err)) + continue + } + + if err := o.emitters.newHeads.Emit(NewEventExchangeHeads(evt.Peer, &msg)); err != nil { + o.logger.Warn("unable to emit new heads", zap.Error(err)) + } + } + }() + + return nil +} // NewOrbitDB Creates a new OrbitDB instance with default access controllers and store types -func NewOrbitDB(ctx context.Context, i coreiface.CoreAPI, options *NewOrbitDBOptions) (iface.OrbitDB, error) { - odb, err := baseorbitdb.NewOrbitDB(ctx, i, options) +func NewOrbitDB(ctx context.Context, ipfs coreiface.CoreAPI, options *NewOrbitDBOptions) (iface.OrbitDB, error) { + if ipfs == nil { + return nil, fmt.Errorf("ipfs is a required argument") + } + + k, err := ipfs.Key().Self(ctx) + if err != nil { + return nil, err + } + + id := k.ID() + + if options == nil { + options = &NewOrbitDBOptions{} + } + + if options.Directory == nil { + options.Directory = &cacheleveldown.InMemoryDirectory + } + + if options.Keystore == nil { + var err error + var ds *leveldb.Datastore + + // create new datastore + if *options.Directory == cacheleveldown.InMemoryDirectory { + ds, err = leveldb.NewDatastore("", nil) + } else { + ds, err = leveldb.NewDatastore(path.Join(*options.Directory, id.String(), "/keystore"), nil) + } + + if err != nil { + return nil, fmt.Errorf("unable to create data store used by keystore: %w", err) + } + + ks, err := keystore.NewKeystore(ds) + if err != nil { + return nil, fmt.Errorf("unable to create keystore: %w", err) + } + + options.Keystore = ks + options.CloseKeystore = ds.Close + } + + if options.ID == nil { + id := id.String() + options.ID = &id + } + + if options.Identity == nil { + identity, err := idp.CreateIdentity(ctx, &idp.CreateIdentityOptions{ + Keystore: options.Keystore, + Type: "orbitdb", + ID: *options.ID, + }) + + if err != nil { + return nil, err + } + + options.Identity = identity + } + + return newOrbitDB(ctx, ipfs, options.Identity, options) +} + +func newOrbitDB(ctx context.Context, is coreiface.CoreAPI, identity *idp.Identity, options *NewOrbitDBOptions) (iface.OrbitDB, error) { + if is == nil { + return nil, fmt.Errorf("ipfs is a required argument") + } + + if identity == nil { + return nil, fmt.Errorf("identity is a required argument") + } + + if options == nil { + options = &NewOrbitDBOptions{} + } + + if options.Logger == nil { + options.Logger = zap.NewNop() + } + + if options.Tracer == nil { + options.Tracer = tracenoop.NewTracerProvider().Tracer("") + } + + if options.EventBus == nil { + options.EventBus = eventbus.NewBus() + } + + if options.DirectChannelFactory == nil { + options.DirectChannelFactory = oneonone.NewChannelFactory(is) + } + directConnections, err := makeDirectChannel(ctx, options.EventBus, options.DirectChannelFactory, &iface.DirectChannelOptions{ + Logger: options.Logger, + }) + if err != nil { + return nil, fmt.Errorf("unable to create a direct connection with peer: %w", err) + } + + k, err := is.Key().Self(ctx) + if err != nil { + return nil, err + } + + if options.PeerID.Validate() == peer.ErrEmptyPeerID { + id := k.ID() + options.PeerID = id + } + + if options.MessageMarshaler == nil { + options.MessageMarshaler = &messagemarshaler.JSONMarshaler{} + } + + if options.Cache == nil { + options.Cache = cacheleveldown.New(&cache.Options{Logger: options.Logger}) + } + + if options.Directory == nil { + options.Directory = &cacheleveldown.InMemoryDirectory + } + + ctx, cancel := context.WithCancel(ctx) + orbit := &orbitDB{ + ctx: ctx, + cancel: cancel, + ipfs: is, + identity: identity, + id: options.PeerID, + pubsub: options.PubSub, + cache: options.Cache, + directory: *options.Directory, + eventBus: options.EventBus, + stores: map[string]Store{}, + directChannel: directConnections, + closeKeystore: options.CloseKeystore, + storeTypes: map[string]iface.StoreConstructor{}, + accessControllerTypes: map[string]iface.AccessControllerConstructor{}, + logger: options.Logger, + tracer: options.Tracer, + messageMarshaler: options.MessageMarshaler, + } + + orbit.RegisterStoreType("eventlog", eventlogstore.NewOrbitDBEventLogStore) + orbit.RegisterStoreType("keyvalue", kvstore.NewOrbitDBKeyValue) + orbit.RegisterStoreType("docstore", documentstore.NewOrbitDBDocumentStore) + + err = orbit.RegisterAccessControllerType(ipfsAccess.NewIPFSAccessController) + if err != nil { + return nil, err + } + err = orbit.RegisterAccessControllerType(orbitdb.NewOrbitDBAccessController) + if err != nil { + return nil, err + } + err = orbit.RegisterAccessControllerType(orbitdb_selfenroll.NewSelfEnrollAccessController) + if err != nil { + return nil, err + } + err = orbit.RegisterAccessControllerType(simple.NewSimpleAccessController) + if err != nil { + return nil, err + } + + // set new heads as stateful, so newly subscriber can replay last event in case they missed it + orbit.emitters.newHeads, err = options.EventBus.Emitter(new(EventExchangeHeads), eventbus.Stateful) + if err != nil { + return nil, fmt.Errorf("unable to create global emitter: %w", err) + } + + if err := orbit.monitorDirectChannel(ctx, options.EventBus); err != nil { + return nil, fmt.Errorf("unable to monitor direct channel: %w", err) + } + + return orbit, nil +} + +func (o *orbitDB) getStoreConstructor(s string) (iface.StoreConstructor, bool) { + o.muStoreTypes.RLock() + defer o.muStoreTypes.RUnlock() + + constructor, ok := o.storeTypes[s] + return constructor, ok +} + +func (o *orbitDB) IPFS() coreiface.CoreAPI { + o.muIPFS.RLock() + defer o.muIPFS.RUnlock() + + return o.ipfs +} + +func (o *orbitDB) PeerID() peer.ID { + o.muID.RLock() + defer o.muID.RUnlock() + + return o.id +} + +func (o *orbitDB) loadCache(directory string, dbAddress address.Address) (datastore.Datastore, error) { + db, err := o.cache.Load(directory, dbAddress) + if err != nil { + return nil, fmt.Errorf("unable to load cache: %w", err) + } + + return db, nil +} + +func (o *orbitDB) haveLocalData(ctx context.Context, c datastore.Datastore, dbAddress address.Address) bool { + if c == nil { + o.logger.Debug("haveLocalData: no cache provided") + return false + } + + cacheKey := datastore.NewKey(path.Join(dbAddress.String(), "_manifest")) + + data, err := c.Get(ctx, cacheKey) + if err != nil { + if err != datastore.ErrNotFound { + o.logger.Error("haveLocalData: error while getting value from cache", zap.Error(err)) + } + + return false + } + + return data != nil +} + +func (o *orbitDB) addManifestToCache(ctx context.Context, directory string, dbAddress address.Address) error { + c, err := o.loadCache(directory, dbAddress) + if err != nil { + return fmt.Errorf("unable to load existing cache: %w", err) + } + + cacheKey := datastore.NewKey(path.Join(dbAddress.String(), "_manifest")) + + if err := c.Put(ctx, cacheKey, []byte(dbAddress.GetRoot().String())); err != nil { + return fmt.Errorf("unable to set cache: %w", err) + } + + return nil +} + +func (o *orbitDB) storeTypesNames() []string { + o.muStoreTypes.RLock() + defer o.muStoreTypes.RUnlock() + + names := make([]string, len(o.storeTypes)) + i := 0 + + for k := range o.storeTypes { + names[i] = k + i++ + } + + return names +} + +func (o *orbitDB) Create(ctx context.Context, name string, storeType string, options *CreateDBOptions) (Store, error) { + o.logger.Debug("Create()") + + if options == nil { + options = &CreateDBOptions{} + } + + // The directory to look databases from can be passed in as an option + if options.Directory == nil { + options.Directory = &o.directory + } + + o.logger.Debug(fmt.Sprintf("Creating database '%s' as %s in '%s'", name, storeType, o.directory)) + // Create the database address + dbAddress, err := o.DetermineAddress(ctx, name, storeType, &DetermineAddressOptions{AccessController: options.AccessController}) if err != nil { return nil, err } - odb.RegisterStoreType("eventlog", eventlogstore.NewOrbitDBEventLogStore) - odb.RegisterStoreType("keyvalue", kvstore.NewOrbitDBKeyValue) - odb.RegisterStoreType("docstore", documentstore.NewOrbitDBDocumentStore) + // Load the locally saved database information + c, err := o.loadCache(o.directory, dbAddress) + if err != nil { + return nil, fmt.Errorf("unable to load cache: %w", err) + } + + // Check if we have the database locally + haveDB := o.haveLocalData(ctx, c, dbAddress) + + if haveDB && (options.Overwrite == nil || !*options.Overwrite) { + return nil, fmt.Errorf("database %s already exists", dbAddress) + } + + // Save the database locally + if err := o.addManifestToCache(ctx, o.directory, dbAddress); err != nil { + return nil, fmt.Errorf("unable to add manifest to cache: %w", err) + } + + o.logger.Debug(fmt.Sprintf("Created database '%s'", dbAddress)) + + // Open the database + return o.Open(ctx, dbAddress.String(), options) +} + +// Open opens a OrbitDB store. During this operation, ctx can be used to cancel or expire this method. Once this function returns, the cancellation and expiration of ctx will be noop. Users should call Store.Close to close the store after this function returns. +func (o *orbitDB) Open(ctx context.Context, dbAddress string, options *CreateDBOptions) (Store, error) { + o.logger.Debug("open orbitdb store", zap.String("address", dbAddress)) + + if options == nil { + options = &CreateDBOptions{} + } + + if options.Timeout == 0 { + options.Timeout = CBORReadDefaultTimeout + } + + if options.LocalOnly == nil { + options.LocalOnly = boolPtr(false) + } + + if options.Create == nil { + options.Create = boolPtr(false) + } + + if options.IO == nil { + options.IO = io.CBOR() + } + + o.logger.Debug("Open database ", zap.String("dbAddress", dbAddress)) + + directory := o.directory + if options.Directory != nil { + directory = *options.Directory + } + + o.logger.Debug("Look from ", zap.String("directory", directory)) + + if err := address.IsValid(dbAddress); err != nil { + o.logger.Warn("open: invalid OrbitDB address", zap.String("address", dbAddress)) + if !*options.Create { + return nil, fmt.Errorf("'options.Create' set to 'false'. If you want to create a database, set 'options.Create' to 'true'") + } else if *options.Create && (options.StoreType == nil || *options.StoreType == "") { + return nil, fmt.Errorf("database type not provided! Provide a type with 'options.StoreType' (%s)", strings.Join(o.storeTypesNames(), "|")) + } + + options.Overwrite = boolPtr(true) + return o.Create(ctx, dbAddress, *options.StoreType, options) + } + + parsedDBAddress, err := address.Parse(dbAddress) + if err != nil { + return nil, fmt.Errorf("unable to parse address: %w", err) + } + + dbCache, err := o.loadCache(directory, parsedDBAddress) + if err != nil { + return nil, fmt.Errorf("unable to acquire cache: %w", err) + } + + haveDB := o.haveLocalData(ctx, dbCache, parsedDBAddress) + if *options.LocalOnly && !haveDB { + return nil, fmt.Errorf("database doesn't exist: %s", dbAddress) + } + + readctx, cancel := context.WithTimeout(ctx, options.Timeout) + defer cancel() + + manifestNode, err := io.ReadCBOR(readctx, o.IPFS(), parsedDBAddress.GetRoot()) + if err != nil { + return nil, fmt.Errorf("unable to fetch database manifest: %w", err) + } + + manifest := utils.ManifestEnvelope{} + + if err := cbornode.DecodeInto(manifestNode.RawData(), &manifest); err != nil { + return nil, fmt.Errorf("unable to unmarshal manifest: %w", err) + } + + o.logger.Debug("Creating store instance") + + options.AccessControllerAddress = manifest.AccessController + + strn := o.storeTypesNames() + + var store Store + + for _, n := range strn { + if manifest.Type == n { + store, err = o.createStore(ctx, manifest.Type, parsedDBAddress, options) + if err != nil { + return nil, fmt.Errorf("unable to create store: %w", err) + } + + return store, nil + } + } + + store, err = o.createStore(ctx, *options.StoreType, parsedDBAddress, options) + if err != nil { + return nil, fmt.Errorf("unable to create store: %w", err) + } + + return store, nil +} + +func (o *orbitDB) closeAllStores() { + stores := []Store{} + + o.muStores.Lock() + for _, store := range o.stores { + stores = append(stores, store) + } + o.muStores.Unlock() + + for _, store := range stores { + if err := store.Close(); err != nil { + o.logger.Error("unable to close store", zap.Error(err)) + } + } +} + +func (o *orbitDB) closeCache() { + o.muCaches.Lock() + defer o.muCaches.Unlock() + + if err := o.cache.Close(); err != nil { + o.logger.Error("unable to close cache", zap.Error(err)) + } +} + +func (o *orbitDB) closeDirectConnections() { + if err := o.directChannel.Close(); err != nil { + o.logger.Error("unable to close connection", zap.Error(err)) + } +} + +func (o *orbitDB) closeKeyStore() { + o.muKeyStore.Lock() + defer o.muKeyStore.Unlock() + + if o.closeKeystore != nil { + if err := o.closeKeystore(); err != nil { + o.logger.Error("unable to close key store", zap.Error(err)) + } + } +} + +func (o *orbitDB) Close() error { + o.closeAllStores() + o.closeDirectConnections() + o.closeCache() + o.closeKeyStore() + + if err := o.emitters.newHeads.Close(); err != nil { + o.logger.Warn("unable to close emitter", zap.Error(err)) + } + + o.cancel() + return nil +} + +func (o *orbitDB) KeyStore() keystore.Interface { + // TODO: check why o.keystore is never set + o.muKeyStore.RLock() + defer o.muKeyStore.RUnlock() + + return o.keystore +} + +func (o *orbitDB) CloseKeyStore() func() error { + // TODO: check why o.closeKeystore is never set + o.muKeyStore.RLock() + defer o.muKeyStore.RUnlock() + + return o.closeKeystore +} + +func (o *orbitDB) setStore(address string, store iface.Store) { + o.muStores.Lock() + defer o.muStores.Unlock() + + o.stores[address] = store +} + +func (o *orbitDB) deleteStore(address string) { + o.muStores.Lock() + defer o.muStores.Unlock() + + delete(o.stores, address) +} - _ = odb.RegisterAccessControllerType(ipfs.NewIPFSAccessController) - _ = odb.RegisterAccessControllerType(orbitdb.NewOrbitDBAccessController) - _ = odb.RegisterAccessControllerType(simple.NewSimpleAccessController) +func (o *orbitDB) getStore(address string) (iface.Store, bool) { + o.muStores.RLock() + defer o.muStores.RUnlock() + + store, ok := o.stores[address] + + return store, ok +} + +func (o *orbitDB) createStore(ctx context.Context, storeType string, parsedDBAddress address.Address, options *CreateDBOptions) (Store, error) { + var err error + + storeFunc, ok := o.getStoreConstructor(storeType) + if !ok { + return nil, fmt.Errorf("store type %s is not supported", storeType) + } + + var accessController accesscontroller.Interface + options.AccessControllerAddress = strings.TrimPrefix(options.AccessControllerAddress, "/ipfs/") + + if options.AccessControllerAddress != "" { + o.logger.Debug(fmt.Sprintf("Access controller address is %s", options.AccessControllerAddress)) + + c, _ := cid.Decode(options.AccessControllerAddress) + + ac := options.AccessController + + if ac == nil { + ac = accesscontroller.NewEmptyManifestParams() + } else { + ac = accesscontroller.CloneManifestParams(options.AccessController) + } + ac.SetAddress(c) + + accessController, err = acutils.Resolve(ctx, o, options.AccessControllerAddress, ac, accesscontroller.WithLogger(o.logger)) + if err != nil { + return nil, fmt.Errorf("unable to acquire an access controller: %w", err) + } + } + + o.logger.Debug(fmt.Sprintf("loading cache for db %s", parsedDBAddress.String())) + + c, err := o.loadCache(o.directory, parsedDBAddress) + if err != nil { + return nil, fmt.Errorf("unable to acquire a cache instance: %w", err) + } + + if options.Replicate == nil { + options.Replicate = boolPtr(true) + } + + // options.AccessController = accessController + options.Keystore = o.KeyStore() + options.Cache = c + + identity := o.Identity() + if options.Identity != nil { + identity = options.Identity + } + + if options.Directory == nil { + options.Directory = &o.directory + } + + if options.EventBus == nil { + if o.EventBus() != nil { + options.EventBus = o.EventBus() + } else { + options.EventBus = eventbus.NewBus() + } + } + + if options.Logger == nil { + options.Logger = o.logger + } + + if options.CloseFunc == nil { + options.CloseFunc = func() {} + } + closeFunc := func() { + options.CloseFunc() + o.deleteStore(parsedDBAddress.String()) + } + + store, err := storeFunc(o.IPFS(), identity, parsedDBAddress, &iface.NewStoreOptions{ + EventBus: options.EventBus, + AccessController: accessController, + Cache: options.Cache, + Replicate: options.Replicate, + Directory: *options.Directory, + SortFn: options.SortFn, + CacheDestroy: func() error { return o.cache.Destroy(o.directory, parsedDBAddress) }, + Logger: options.Logger, + Tracer: o.tracer, + IO: options.IO, + StoreSpecificOpts: options.StoreSpecificOpts, + PubSub: o.pubsub, + MessageMarshaler: o.messageMarshaler, + PeerID: o.id, + DirectChannel: o.directChannel, + CloseFunc: closeFunc, + }) + if err != nil { + return nil, fmt.Errorf("unable to instantiate store: %w", err) + } + + o.setStore(parsedDBAddress.String(), store) + + return store, nil +} + +func (o *orbitDB) DetermineAddress(ctx context.Context, name string, storeType string, options *DetermineAddressOptions) (address.Address, error) { + var err error + + if options == nil { + options = &DetermineAddressOptions{} + } + + if options.OnlyHash == nil { + t := true + options.OnlyHash = &t + } + + if _, ok := o.getStoreConstructor(storeType); !ok { + return nil, fmt.Errorf("invalid database type") + } + + if err := address.IsValid(name); err == nil { + return nil, fmt.Errorf("given database name is an address, give only the name of the database") + } + + if options.AccessController == nil { + options.AccessController = accesscontroller.NewEmptyManifestParams() + } + + if options.AccessController.GetName() == "" { + options.AccessController.SetName(name) + } + + if options.AccessController.GetType() == "" { + options.AccessController.SetType("ipfs") + } + + accessControllerAddress, err := acutils.Create(ctx, o, options.AccessController.GetType(), options.AccessController, accesscontroller.WithLogger(o.logger)) + if err != nil { + return nil, fmt.Errorf("unable to create access controller: %w", err) + } + + // Save the manifest to IPFS + manifestHash, err := utils.CreateDBManifest(ctx, o.IPFS(), name, storeType, accessControllerAddress.String()) + if err != nil { + return nil, fmt.Errorf("unable to save manifest on ipfs: %w", err) + } - return &orbitDB{ - BaseOrbitDB: odb, - }, nil + // Create the database address + return address.Parse(path.Join("/orbitdb", manifestHash.String(), name)) } func (o *orbitDB) Log(ctx context.Context, address string, options *CreateDBOptions) (EventLogStore, error) { diff --git a/pubsub/directchannel/channel.go b/pubsub/directchannel/channel.go index f1af0960..5fbde566 100644 --- a/pubsub/directchannel/channel.go +++ b/pubsub/directchannel/channel.go @@ -7,8 +7,8 @@ import ( "fmt" "io" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/pubsub" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/pubsub" "github.com/libp2p/go-libp2p/core/host" "github.com/libp2p/go-libp2p/core/network" "github.com/libp2p/go-libp2p/core/peer" diff --git a/pubsub/directchannel/channel_test.go b/pubsub/directchannel/channel_test.go index 405f4c9b..d618a68e 100644 --- a/pubsub/directchannel/channel_test.go +++ b/pubsub/directchannel/channel_test.go @@ -7,8 +7,8 @@ import ( "testing" "time" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/pubsub" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/pubsub" "github.com/libp2p/go-libp2p/p2p/host/eventbus" "github.com/libp2p/go-libp2p/core/event" "github.com/libp2p/go-libp2p/core/host" diff --git a/pubsub/doc.go b/pubsub/doc.go index aac50672..b419e2d1 100644 --- a/pubsub/doc.go +++ b/pubsub/doc.go @@ -1,2 +1,2 @@ // pubsub a publish subscribe client for IPFS PubSub -package pubsub // import "berty.tech/go-orbit-db/pubsub" +package pubsub // import "github.com/stateless-minds/go-orbit-db/pubsub" diff --git a/pubsub/event.go b/pubsub/event.go index b146f2d3..73cbfa21 100644 --- a/pubsub/event.go +++ b/pubsub/event.go @@ -5,7 +5,7 @@ import ( "github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/p2p/host/eventbus" - "berty.tech/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/iface" ) type Event interface{} diff --git a/pubsub/oneonone/channel.go b/pubsub/oneonone/channel.go index 075febe6..c88ebb54 100644 --- a/pubsub/oneonone/channel.go +++ b/pubsub/oneonone/channel.go @@ -13,8 +13,8 @@ import ( peer "github.com/libp2p/go-libp2p/core/peer" "go.uber.org/zap" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/pubsub" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/pubsub" ) const ( diff --git a/pubsub/oneonone/doc.go b/pubsub/oneonone/doc.go index bf0e3bbc..791519dc 100644 --- a/pubsub/oneonone/doc.go +++ b/pubsub/oneonone/doc.go @@ -1,2 +1,2 @@ // oneonone is a pubsub channel for communication between two peers -package oneonone // import "berty.tech/go-orbit-db/pubsub/oneonone" +package oneonone // import "github.com/stateless-minds/go-orbit-db/pubsub/oneonone" diff --git a/pubsub/pubsubcoreapi/pubsub.go b/pubsub/pubsubcoreapi/pubsub.go index e3741763..5bd51664 100644 --- a/pubsub/pubsubcoreapi/pubsub.go +++ b/pubsub/pubsubcoreapi/pubsub.go @@ -12,9 +12,9 @@ import ( tracenoop "go.opentelemetry.io/otel/trace/noop" "go.uber.org/zap" - "berty.tech/go-orbit-db/events" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/pubsub" + "github.com/stateless-minds/go-orbit-db/events" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/pubsub" ) type psTopic struct { diff --git a/pubsub/pubsubraw/pubsub.go b/pubsub/pubsubraw/pubsub.go index 4e568d06..7df0d189 100644 --- a/pubsub/pubsubraw/pubsub.go +++ b/pubsub/pubsubraw/pubsub.go @@ -10,9 +10,9 @@ import ( tracernoop "go.opentelemetry.io/otel/trace/noop" "go.uber.org/zap" - "berty.tech/go-orbit-db/events" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/pubsub" + "github.com/stateless-minds/go-orbit-db/events" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/pubsub" ) type psTopic struct { diff --git a/stores/basestore/base_index.go b/stores/basestore/base_index.go index 7abab2a6..b2fd4007 100644 --- a/stores/basestore/base_index.go +++ b/stores/basestore/base_index.go @@ -3,9 +3,9 @@ package basestore import ( "sync" - ipfslog "berty.tech/go-ipfs-log" + ipfslog "github.com/stateless-minds/go-ipfs-log" - "berty.tech/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/iface" ) type baseIndex struct { diff --git a/stores/basestore/base_store.go b/stores/basestore/base_store.go index f338a47a..1ee478f4 100644 --- a/stores/basestore/base_store.go +++ b/stores/basestore/base_store.go @@ -8,26 +8,26 @@ import ( "sync" "time" - ipfslog "berty.tech/go-ipfs-log" - logac "berty.tech/go-ipfs-log/accesscontroller" - "berty.tech/go-ipfs-log/entry" - "berty.tech/go-ipfs-log/identityprovider" - ifacelog "berty.tech/go-ipfs-log/iface" - "berty.tech/go-orbit-db/accesscontroller" - "berty.tech/go-orbit-db/accesscontroller/simple" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/events" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/messagemarshaler" - "berty.tech/go-orbit-db/pubsub/pubsubcoreapi" - "berty.tech/go-orbit-db/stores" - "berty.tech/go-orbit-db/stores/operation" - "berty.tech/go-orbit-db/stores/replicator" + ipfslog "github.com/stateless-minds/go-ipfs-log" + logac "github.com/stateless-minds/go-ipfs-log/accesscontroller" + "github.com/stateless-minds/go-ipfs-log/entry" + "github.com/stateless-minds/go-ipfs-log/identityprovider" + ifacelog "github.com/stateless-minds/go-ipfs-log/iface" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/accesscontroller/simple" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/events" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/messagemarshaler" + "github.com/stateless-minds/go-orbit-db/pubsub/pubsubcoreapi" + "github.com/stateless-minds/go-orbit-db/stores" + "github.com/stateless-minds/go-orbit-db/stores/operation" + "github.com/stateless-minds/go-orbit-db/stores/replicator" + coreiface "github.com/ipfs/kubo/core/coreiface" "github.com/ipfs/boxo/path" + files "github.com/ipfs/go-libipfs/files" cid "github.com/ipfs/go-cid" datastore "github.com/ipfs/go-datastore" - files "github.com/ipfs/go-libipfs/files" - coreiface "github.com/ipfs/kubo/core/coreiface" "github.com/libp2p/go-libp2p/core/event" "github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/p2p/host/eventbus" diff --git a/stores/basestore/doc.go b/stores/basestore/doc.go index d4cf9db4..3414ce2e 100644 --- a/stores/basestore/doc.go +++ b/stores/basestore/doc.go @@ -1,2 +1,2 @@ // basestore defines a set of operations common to the different store types -package basestore // import "berty.tech/go-orbit-db/stores/basestore" +package basestore // import "github.com/stateless-minds/go-orbit-db/stores/basestore" diff --git a/stores/basestore/noop_index.go b/stores/basestore/noop_index.go index 5766b51d..667c89ef 100644 --- a/stores/basestore/noop_index.go +++ b/stores/basestore/noop_index.go @@ -1,9 +1,9 @@ package basestore import ( - ipfslog "berty.tech/go-ipfs-log" + ipfslog "github.com/stateless-minds/go-ipfs-log" - "berty.tech/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/iface" ) type noopIndex struct{} diff --git a/stores/basestore/utils.go b/stores/basestore/utils.go index 73c540e9..7e41e3c8 100644 --- a/stores/basestore/utils.go +++ b/stores/basestore/utils.go @@ -6,11 +6,11 @@ import ( "encoding/json" "fmt" - "berty.tech/go-ipfs-log/entry" - "berty.tech/go-orbit-db/iface" + "github.com/stateless-minds/go-ipfs-log/entry" + "github.com/stateless-minds/go-orbit-db/iface" + files "github.com/ipfs/boxo/files" cid "github.com/ipfs/go-cid" datastore "github.com/ipfs/go-datastore" - files "github.com/ipfs/go-libipfs/files" ) func SaveSnapshot(ctx context.Context, b iface.Store) (cid.Cid, error) { diff --git a/stores/doc.go b/stores/doc.go index bab0cd07..2aa44171 100644 --- a/stores/doc.go +++ b/stores/doc.go @@ -1,2 +1,2 @@ // stores registers constructors for OrbitDB stores -package stores // import "berty.tech/go-orbit-db/stores" +package stores // import "github.com/stateless-minds/go-orbit-db/stores" diff --git a/stores/documentstore/doc.go b/stores/documentstore/doc.go index 3e348d6b..b9ab33f5 100644 --- a/stores/documentstore/doc.go +++ b/stores/documentstore/doc.go @@ -1,2 +1,2 @@ // documentstore a document store for OrbitDB -package documentstore // import "berty.tech/go-orbit-db/stores/documentstore" +package documentstore // import "github.com/stateless-minds/go-orbit-db/stores/documentstore" diff --git a/stores/documentstore/document.go b/stores/documentstore/document.go index 3edb8de9..d1c26d03 100644 --- a/stores/documentstore/document.go +++ b/stores/documentstore/document.go @@ -6,11 +6,11 @@ import ( "fmt" "strings" - "berty.tech/go-ipfs-log/identityprovider" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores/basestore" - "berty.tech/go-orbit-db/stores/operation" + "github.com/stateless-minds/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores/basestore" + "github.com/stateless-minds/go-orbit-db/stores/operation" coreiface "github.com/ipfs/kubo/core/coreiface" ) diff --git a/stores/documentstore/index.go b/stores/documentstore/index.go index b7452737..5b0c2c7f 100644 --- a/stores/documentstore/index.go +++ b/stores/documentstore/index.go @@ -4,9 +4,9 @@ import ( "fmt" "sync" - ipfslog "berty.tech/go-ipfs-log" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores/operation" + ipfslog "github.com/stateless-minds/go-ipfs-log" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores/operation" ) type documentIndex struct { diff --git a/stores/eventlogstore/doc.go b/stores/eventlogstore/doc.go index 4a086972..fec257ee 100644 --- a/stores/eventlogstore/doc.go +++ b/stores/eventlogstore/doc.go @@ -1,2 +1,2 @@ // eventlogstore an event log store for OrbitDB -package eventlogstore // import "berty.tech/go-orbit-db/stores/eventlogstore" +package eventlogstore // import "github.com/stateless-minds/go-orbit-db/stores/eventlogstore" diff --git a/stores/eventlogstore/index.go b/stores/eventlogstore/index.go index 304612a6..8d96f8c4 100644 --- a/stores/eventlogstore/index.go +++ b/stores/eventlogstore/index.go @@ -3,8 +3,8 @@ package eventlogstore import ( "sync" - ipfslog "berty.tech/go-ipfs-log" - "berty.tech/go-orbit-db/iface" + ipfslog "github.com/stateless-minds/go-ipfs-log" + "github.com/stateless-minds/go-orbit-db/iface" ) type eventIndex struct { diff --git a/stores/eventlogstore/log.go b/stores/eventlogstore/log.go index 22e56a50..a602faa2 100644 --- a/stores/eventlogstore/log.go +++ b/stores/eventlogstore/log.go @@ -4,12 +4,12 @@ import ( "context" "fmt" - ipfslog "berty.tech/go-ipfs-log" - "berty.tech/go-ipfs-log/identityprovider" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores/basestore" - "berty.tech/go-orbit-db/stores/operation" + ipfslog "github.com/stateless-minds/go-ipfs-log" + "github.com/stateless-minds/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores/basestore" + "github.com/stateless-minds/go-orbit-db/stores/operation" cid "github.com/ipfs/go-cid" coreiface "github.com/ipfs/kubo/core/coreiface" ) diff --git a/stores/events.go b/stores/events.go index 0b935f57..77cbadbf 100644 --- a/stores/events.go +++ b/stores/events.go @@ -1,9 +1,9 @@ package stores import ( - ipfslog "berty.tech/go-ipfs-log" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/stores/replicator" + ipfslog "github.com/stateless-minds/go-ipfs-log" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/stores/replicator" cid "github.com/ipfs/go-cid" peer "github.com/libp2p/go-libp2p/core/peer" ) diff --git a/stores/kvstore/doc.go b/stores/kvstore/doc.go index 698e5eb0..4a329d77 100644 --- a/stores/kvstore/doc.go +++ b/stores/kvstore/doc.go @@ -1,2 +1,2 @@ // kvstore a key value store for OrbitDB -package kvstore // import "berty.tech/go-orbit-db/stores/kvstore" +package kvstore // import "github.com/stateless-minds/go-orbit-db/stores/kvstore" diff --git a/stores/kvstore/index.go b/stores/kvstore/index.go index f8eefda1..86a48de3 100644 --- a/stores/kvstore/index.go +++ b/stores/kvstore/index.go @@ -4,9 +4,9 @@ import ( "fmt" "sync" - ipfslog "berty.tech/go-ipfs-log" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores/operation" + ipfslog "github.com/stateless-minds/go-ipfs-log" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores/operation" ) type kvIndex struct { diff --git a/stores/kvstore/keyvalue.go b/stores/kvstore/keyvalue.go index 774f503b..22f1ae5c 100644 --- a/stores/kvstore/keyvalue.go +++ b/stores/kvstore/keyvalue.go @@ -4,13 +4,13 @@ import ( "context" "fmt" - "berty.tech/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-ipfs-log/identityprovider" coreiface "github.com/ipfs/kubo/core/coreiface" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores/basestore" - "berty.tech/go-orbit-db/stores/operation" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores/basestore" + "github.com/stateless-minds/go-orbit-db/stores/operation" ) type orbitDBKeyValue struct { diff --git a/stores/operation/doc.go b/stores/operation/doc.go index 09f96895..0b4298bb 100644 --- a/stores/operation/doc.go +++ b/stores/operation/doc.go @@ -1,2 +1,2 @@ // operation a serializable operation that can be appended to IPFS log -package operation // import "berty.tech/go-orbit-db/stores/operation" +package operation // import "github.com/stateless-minds/go-orbit-db/stores/operation" diff --git a/stores/operation/interface.go b/stores/operation/interface.go index 2c4ffde7..9c86bd35 100644 --- a/stores/operation/interface.go +++ b/stores/operation/interface.go @@ -1,7 +1,7 @@ package operation import ( - ipfslog "berty.tech/go-ipfs-log" + ipfslog "github.com/stateless-minds/go-ipfs-log" ) type OpDoc interface { diff --git a/stores/operation/operation.go b/stores/operation/operation.go index 351b1dc0..13822023 100644 --- a/stores/operation/operation.go +++ b/stores/operation/operation.go @@ -4,7 +4,7 @@ import ( "encoding/json" "fmt" - ipfslog "berty.tech/go-ipfs-log" + ipfslog "github.com/stateless-minds/go-ipfs-log" ) type opDoc struct { diff --git a/stores/replicator/doc.go b/stores/replicator/doc.go index da91bb0d..01068ff6 100644 --- a/stores/replicator/doc.go +++ b/stores/replicator/doc.go @@ -1,2 +1,2 @@ // replicator is a package managing the replication of data among peers -package replicator // import "berty.tech/go-orbit-db/stores/replicator" +package replicator // import "github.com/stateless-minds/go-orbit-db/stores/replicator" diff --git a/stores/replicator/events.go b/stores/replicator/events.go index 202726b7..0d2c07ca 100644 --- a/stores/replicator/events.go +++ b/stores/replicator/events.go @@ -1,7 +1,7 @@ package replicator import ( - ipfslog "berty.tech/go-ipfs-log" + ipfslog "github.com/stateless-minds/go-ipfs-log" cid "github.com/ipfs/go-cid" ) diff --git a/stores/replicator/interface.go b/stores/replicator/interface.go index 9accd780..9b9ac18c 100644 --- a/stores/replicator/interface.go +++ b/stores/replicator/interface.go @@ -3,9 +3,9 @@ package replicator import ( "context" - ipfslog "berty.tech/go-ipfs-log" - "berty.tech/go-ipfs-log/identityprovider" - "berty.tech/go-orbit-db/accesscontroller" + ipfslog "github.com/stateless-minds/go-ipfs-log" + "github.com/stateless-minds/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-orbit-db/accesscontroller" cid "github.com/ipfs/go-cid" coreiface "github.com/ipfs/kubo/core/coreiface" "github.com/libp2p/go-libp2p/core/event" diff --git a/stores/replicator/queue.go b/stores/replicator/queue.go index effaafe5..3fb7474c 100644 --- a/stores/replicator/queue.go +++ b/stores/replicator/queue.go @@ -1,7 +1,7 @@ package replicator import ( - "berty.tech/go-ipfs-log/iface" + "github.com/stateless-minds/go-ipfs-log/iface" cid "github.com/ipfs/go-cid" ) diff --git a/stores/replicator/replicator.go b/stores/replicator/replicator.go index 1be932f0..d6799b87 100644 --- a/stores/replicator/replicator.go +++ b/stores/replicator/replicator.go @@ -7,8 +7,8 @@ import ( "strings" "sync" - ipfslog "berty.tech/go-ipfs-log" - "berty.tech/go-ipfs-log/iface" + ipfslog "github.com/stateless-minds/go-ipfs-log" + "github.com/stateless-minds/go-ipfs-log/iface" cid "github.com/ipfs/go-cid" "github.com/libp2p/go-libp2p/core/event" "github.com/libp2p/go-libp2p/p2p/host/eventbus" diff --git a/tests/bench_test.go b/tests/bench_test.go index cb00b923..72414c93 100644 --- a/tests/bench_test.go +++ b/tests/bench_test.go @@ -7,12 +7,12 @@ import ( "testing" "time" - orbitdb "berty.tech/go-orbit-db" - "berty.tech/go-orbit-db/iface" + orbitdb "github.com/stateless-minds/go-orbit-db" + "github.com/stateless-minds/go-orbit-db/iface" "github.com/stretchr/testify/require" ) -// go test -benchmem -run='^$' -bench '^BenchmarkKeyValueStore$' berty.tech/go-orbit-db/tests -v -count=1 -benchtime=1000x +// go test -benchmem -run='^$' -bench '^BenchmarkKeyValueStore$' github.com/stateless-minds/go-orbit-db/tests -v -count=1 -benchtime=1000x func BenchmarkKeyValueStore(b *testing.B) { tmpDir, clean := testingTempDirB(b, "db-keystore") defer clean() @@ -29,7 +29,7 @@ func BenchmarkKeyValueStore(b *testing.B) { } } -// go test -benchmem -run='^$' -bench '^BenchmarkKeyValueStorePB$' berty.tech/go-orbit-db/tests -v -count=1 -benchtime=1000x +// go test -benchmem -run='^$' -bench '^BenchmarkKeyValueStorePB$' github.com/stateless-minds/go-orbit-db/tests -v -count=1 -benchtime=1000x func BenchmarkKeyValueStorePB(b *testing.B) { tmpDir, clean := testingTempDirB(b, "db-keystore") defer clean() diff --git a/tests/create_open_test.go b/tests/create_open_test.go index e5a46462..ae3498d9 100644 --- a/tests/create_open_test.go +++ b/tests/create_open_test.go @@ -8,19 +8,20 @@ import ( "strings" "testing" - "berty.tech/go-ipfs-log/identityprovider" - "berty.tech/go-ipfs-log/io" - "berty.tech/go-ipfs-log/keystore" - orbitdb "berty.tech/go-orbit-db" - "berty.tech/go-orbit-db/accesscontroller" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores/operation" - "berty.tech/go-orbit-db/utils" datastore "github.com/ipfs/go-datastore" leveldb "github.com/ipfs/go-ds-leveldb" "github.com/polydawn/refmt/cbor" "github.com/polydawn/refmt/obj/atlas" + "github.com/stateless-minds/go-ipfs-log/identityprovider" + "github.com/stateless-minds/go-ipfs-log/io" + "github.com/stateless-minds/go-ipfs-log/keystore" + orbitdb "github.com/stateless-minds/go-orbit-db" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores/operation" + "github.com/stateless-minds/go-orbit-db/utils" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -230,17 +231,24 @@ func TestCreateOpen(t *testing.T) { t.Run("creates an access controller and adds writers", func(t *testing.T) { defer subSetup(t)() + // Assert that the OrbitDB instance implements iface.OrbitDBKVStoreProvider + _, ok := orbit.(iface.OrbitDBKVStoreProvider) + assert.True(t, ok, "OrbitDB instance does not implement KeyValue") + access := &accesscontroller.CreateAccessControllerOptions{ + Type: "orbitdb", Access: map[string][]string{ "write": {"another-key", "yet-another-key", orbit.Identity().ID}, }, } overwrite := true + // storeType := "docstore" - db, err := orbit.Create(ctx, "fourth", "eventlog", &orbitdb.CreateDBOptions{ + db, err := orbit.Create(ctx, "fourth", "docstore", &orbitdb.CreateDBOptions{ AccessController: access, Overwrite: &overwrite, + // StoreType: &storeType, }) require.NoError(t, err) @@ -248,9 +256,70 @@ func TestCreateOpen(t *testing.T) { defer db.Close() accessController := db.AccessController() + + allowed, err := accessController.GetAuthorizedByRole("write") + + require.NoError(t, err) + require.ElementsMatch(t, allowed, []string{"another-key", "yet-another-key", orbit.Identity().ID}) + }) + + t.Run("creates a custom access controller and self-enrolls", func(t *testing.T) { + defer subSetup(t)() + + // Assert that the OrbitDB instance implements iface.OrbitDBKVStoreProvider + _, ok := orbit.(iface.OrbitDBKVStoreProvider) + assert.True(t, ok, "OrbitDB instance does not implement KeyValue") + + access := &accesscontroller.CreateAccessControllerOptions{ + Type: "orbitdb_selfenroll", + Access: map[string][]string{ + "write": {orbit.Identity().ID}, + }, + } + + overwrite := true + + opts := orbitdb.CreateDBOptions{ + AccessController: access, + Overwrite: &overwrite, + } + + db, err := orbit.Create(ctx, "fourth", "docstore", &opts) + require.NoError(t, err) + + store, err := orbit.Docs(ctx, db.Address().String(), &opts) + require.NoError(t, err) + + defer db.Drop() + defer db.Close() + + accessController := store.AccessController() + + acAddress := accessController.Address().String() + + require.Contains(t, acAddress, "_access") + + require.Equal(t, "orbitdb_selfenroll", accessController.Type()) + + idDS, err := leveldb.NewDatastore("", nil) + require.NoError(t, err) + + defer idDS.Close() + + idKeystore, err := keystore.NewKeystore(idDS) + require.NoError(t, err) + + identity, err := identityprovider.CreateIdentity(ctx, &identityprovider.CreateIdentityOptions{ID: "test-id", Keystore: idKeystore, Type: "orbitdb"}) + require.NoError(t, err) + require.NotNil(t, identity) + + accessController.Grant(ctx, "write", identity.ID) + require.NoError(t, err) + allowed, err := accessController.GetAuthorizedByRole("write") require.NoError(t, err) - require.Equal(t, allowed, []string{"another-key", "yet-another-key", orbit.Identity().ID}) + + require.ElementsMatch(t, allowed, []string{identity.ID, orbit.Identity().ID}) }) t.Run("creates an access controller and doesn't add read access keys", func(t *testing.T) { diff --git a/tests/docs_test.go b/tests/docs_test.go index 021991a8..229f37ef 100644 --- a/tests/docs_test.go +++ b/tests/docs_test.go @@ -7,9 +7,9 @@ import ( "github.com/stretchr/testify/require" - orbitdb2 "berty.tech/go-orbit-db" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores/documentstore" + orbitdb2 "github.com/stateless-minds/go-orbit-db" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores/documentstore" ) func TestDocumentsStore(t *testing.T) { diff --git a/tests/eventlog_test.go b/tests/eventlog_test.go index e33bd823..86c9353a 100644 --- a/tests/eventlog_test.go +++ b/tests/eventlog_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - orbitdb "berty.tech/go-orbit-db" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores/operation" + orbitdb "github.com/stateless-minds/go-orbit-db" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores/operation" cid "github.com/ipfs/go-cid" "github.com/stretchr/testify/require" ) diff --git a/tests/keyvalue_test.go b/tests/keyvalue_test.go index e156a014..35aedbaa 100644 --- a/tests/keyvalue_test.go +++ b/tests/keyvalue_test.go @@ -4,8 +4,8 @@ import ( "context" "testing" - orbitdb "berty.tech/go-orbit-db" - "berty.tech/go-orbit-db/iface" + orbitdb "github.com/stateless-minds/go-orbit-db" + "github.com/stateless-minds/go-orbit-db/iface" "github.com/stretchr/testify/require" ) diff --git a/tests/orbit_db_address_test.go b/tests/orbit_db_address_test.go index 993485ba..8136a8e2 100644 --- a/tests/orbit_db_address_test.go +++ b/tests/orbit_db_address_test.go @@ -4,7 +4,7 @@ import ( "strings" "testing" - "berty.tech/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/address" "github.com/stretchr/testify/require" ) diff --git a/tests/persistence_test.go b/tests/persistence_test.go index 005f9df6..6fb91dc0 100644 --- a/tests/persistence_test.go +++ b/tests/persistence_test.go @@ -7,12 +7,12 @@ import ( "testing" "time" - orbitdb "berty.tech/go-orbit-db" - "berty.tech/go-orbit-db/address" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores" - "berty.tech/go-orbit-db/stores/basestore" - "berty.tech/go-orbit-db/stores/operation" + orbitdb "github.com/stateless-minds/go-orbit-db" + "github.com/stateless-minds/go-orbit-db/address" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores" + "github.com/stateless-minds/go-orbit-db/stores/basestore" + "github.com/stateless-minds/go-orbit-db/stores/operation" "github.com/stretchr/testify/require" ) diff --git a/tests/replicate_automatically_test.go b/tests/replicate_automatically_test.go index 96b6926c..a8c0875c 100644 --- a/tests/replicate_automatically_test.go +++ b/tests/replicate_automatically_test.go @@ -7,11 +7,11 @@ import ( "testing" "time" - orbitdb "berty.tech/go-orbit-db" - "berty.tech/go-orbit-db/accesscontroller" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores" - "berty.tech/go-orbit-db/stores/operation" + orbitdb "github.com/stateless-minds/go-orbit-db" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores" + "github.com/stateless-minds/go-orbit-db/stores/operation" cid "github.com/ipfs/go-cid" "github.com/ipfs/kubo/core" "github.com/libp2p/go-libp2p/core/peer" diff --git a/tests/replicate_test.go b/tests/replicate_test.go index f069a7a5..559a5d07 100644 --- a/tests/replicate_test.go +++ b/tests/replicate_test.go @@ -8,13 +8,13 @@ import ( "testing" "time" - ipfslog "berty.tech/go-ipfs-log" - orbitdb "berty.tech/go-orbit-db" - "berty.tech/go-orbit-db/accesscontroller" - "berty.tech/go-orbit-db/pubsub/directchannel" - "berty.tech/go-orbit-db/pubsub/pubsubraw" - orbitstores "berty.tech/go-orbit-db/stores" - "berty.tech/go-orbit-db/stores/operation" + ipfslog "github.com/stateless-minds/go-ipfs-log" + orbitdb "github.com/stateless-minds/go-orbit-db" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/pubsub/directchannel" + "github.com/stateless-minds/go-orbit-db/pubsub/pubsubraw" + orbitstores "github.com/stateless-minds/go-orbit-db/stores" + "github.com/stateless-minds/go-orbit-db/stores/operation" "github.com/libp2p/go-libp2p/p2p/host/eventbus" "github.com/libp2p/go-libp2p/core/event" mocknet "github.com/libp2p/go-libp2p/p2p/net/mock" diff --git a/tests/replication_status_test.go b/tests/replication_status_test.go index 53f71bbd..ab0983db 100644 --- a/tests/replication_status_test.go +++ b/tests/replication_status_test.go @@ -5,10 +5,10 @@ import ( "testing" "time" - orbitdb "berty.tech/go-orbit-db" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores" - "berty.tech/go-orbit-db/stores/basestore" + orbitdb "github.com/stateless-minds/go-orbit-db" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores" + "github.com/stateless-minds/go-orbit-db/stores/basestore" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/tests/write_permissions_test.go b/tests/write_permissions_test.go index 9f2d6686..57fb36b0 100644 --- a/tests/write_permissions_test.go +++ b/tests/write_permissions_test.go @@ -5,10 +5,10 @@ import ( "testing" "time" - orbitdb "berty.tech/go-orbit-db" - "berty.tech/go-orbit-db/accesscontroller" - "berty.tech/go-orbit-db/iface" - "berty.tech/go-orbit-db/stores" + orbitdb "github.com/stateless-minds/go-orbit-db" + "github.com/stateless-minds/go-orbit-db/accesscontroller" + "github.com/stateless-minds/go-orbit-db/iface" + "github.com/stateless-minds/go-orbit-db/stores" "github.com/stretchr/testify/require" ) diff --git a/utils/create_db_manifest.go b/utils/create_db_manifest.go index cf7b96a7..d43ae353 100644 --- a/utils/create_db_manifest.go +++ b/utils/create_db_manifest.go @@ -5,18 +5,34 @@ import ( "fmt" "path" - "berty.tech/go-ipfs-log/io" cid "github.com/ipfs/go-cid" cbornode "github.com/ipfs/go-ipld-cbor" coreiface "github.com/ipfs/kubo/core/coreiface" "github.com/polydawn/refmt/obj/atlas" + "github.com/stateless-minds/go-ipfs-log/io" ) -// Manifest defines a database manifest describing its type and access controller +type ManifestEnvelope struct { + Manifest Manifest `cbor:"manifest"` + SkipManifest interface{} `cbor:"skip_manifest,omitempty"` + Address interface{} `cbor:"manifest/address,omitempty"` + ManifestType interface{} `cbor:"manifest/type,omitempty"` + + // // Fields for keys at this level + Type string `cbor:"type"` + Name string `cbor:"name,omitempty"` + AccessController string `cbor:"access_controller,omitempty"` +} + +// Manifest struct for nodes with "name", "type", and "access_controller" type Manifest struct { - Name string - Type string - AccessController string + SkipManifest interface{} `cbor:"manifest/skip_manifest,omitempty"` + Address interface{} `cbor:"manifest/address,omitempty"` + ManifestType interface{} `cbor:"manifest/type,omitempty"` + + Name string `cbor:"name"` + Type string `cbor:"type"` + AccessController string `cbor:"access_controller"` } // CreateDBManifest creates a new database manifest and saves it on IPFS @@ -38,6 +54,9 @@ func CreateDBManifest(ctx context.Context, ipfs coreiface.CoreAPI, name string, // AtlasManifest defines how a manifest is serialized var AtlasManifest = atlas.BuildEntry(Manifest{}). StructMap(). + AddField("SkipManifest", atlas.StructMapEntry{SerialName: "skip_manifest"}). + AddField("Address", atlas.StructMapEntry{SerialName: "address"}). + AddField("ManifestType", atlas.StructMapEntry{SerialName: "manifest/type"}). AddField("Name", atlas.StructMapEntry{SerialName: "name"}). AddField("Type", atlas.StructMapEntry{SerialName: "type"}). AddField("AccessController", atlas.StructMapEntry{SerialName: "access_controller"}). diff --git a/utils/doc.go b/utils/doc.go index 035c0eee..06a7eff6 100644 --- a/utils/doc.go +++ b/utils/doc.go @@ -1,2 +1,2 @@ // utils contains functions that are useful in some context -package utils // import "berty.tech/go-orbit-db/utils" +package utils // import "github.com/stateless-minds/go-orbit-db/utils"