From 37982555b01658b1c9e12cd87be69cee0cdfa3ce Mon Sep 17 00:00:00 2001 From: Philippe d'Argent Date: Thu, 29 Jan 2026 23:13:05 +0900 Subject: [PATCH 1/5] add 8004 action provider --- .../src/action-providers/erc8004/abi.ts | 1327 +++++++++++++++++ .../src/action-providers/erc8004/constants.ts | 95 ++ .../erc8004IdentityActionProvider.test.ts | 522 +++++++ .../erc8004/erc8004IdentityActionProvider.ts | 439 ++++++ .../erc8004ReputationActionProvider.test.ts | 876 +++++++++++ .../erc8004ReputationActionProvider.ts | 445 ++++++ .../erc8004/identitySchemas.ts | 83 ++ .../src/action-providers/erc8004/index.ts | 42 + .../erc8004/reputationSchemas.ts | 212 +++ .../src/action-providers/erc8004/utils.ts | 150 ++ .../src/action-providers/erc8004/utils_id.ts | 84 ++ .../src/action-providers/erc8004/utils_rep.ts | 184 +++ .../agentkit/src/action-providers/index.ts | 1 + 13 files changed, 4460 insertions(+) create mode 100644 typescript/agentkit/src/action-providers/erc8004/abi.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/constants.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/index.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/utils.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/utils_id.ts create mode 100644 typescript/agentkit/src/action-providers/erc8004/utils_rep.ts diff --git a/typescript/agentkit/src/action-providers/erc8004/abi.ts b/typescript/agentkit/src/action-providers/erc8004/abi.ts new file mode 100644 index 000000000..716dd0d80 --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/abi.ts @@ -0,0 +1,1327 @@ +export const IDENTITY_REGISTRY_ABI = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [ + { + internalType: "address", + name: "target", + type: "address", + }, + ], + name: "AddressEmptyCode", + type: "error", + }, + { + inputs: [], + name: "ECDSAInvalidSignature", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + ], + name: "ECDSAInvalidSignatureLength", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + name: "ECDSAInvalidSignatureS", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "ERC1967InvalidImplementation", + type: "error", + }, + { + inputs: [], + name: "ERC1967NonPayable", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "ERC721IncorrectOwner", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "ERC721InsufficientApproval", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "approver", + type: "address", + }, + ], + name: "ERC721InvalidApprover", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + ], + name: "ERC721InvalidOperator", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "ERC721InvalidOwner", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "receiver", + type: "address", + }, + ], + name: "ERC721InvalidReceiver", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + ], + name: "ERC721InvalidSender", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "ERC721NonexistentToken", + type: "error", + }, + { + inputs: [], + name: "FailedCall", + type: "error", + }, + { + inputs: [], + name: "InvalidInitialization", + type: "error", + }, + { + inputs: [], + name: "NotInitializing", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "OwnableInvalidOwner", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "OwnableUnauthorizedAccount", + type: "error", + }, + { + inputs: [], + name: "UUPSUnauthorizedCallContext", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "slot", + type: "bytes32", + }, + ], + name: "UUPSUnsupportedProxiableUUID", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "approved", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "Approval", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "operator", + type: "address", + }, + { + indexed: false, + internalType: "bool", + name: "approved", + type: "bool", + }, + ], + name: "ApprovalForAll", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "_fromTokenId", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "_toTokenId", + type: "uint256", + }, + ], + name: "BatchMetadataUpdate", + type: "event", + }, + { + anonymous: false, + inputs: [], + name: "EIP712DomainChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint64", + name: "version", + type: "uint64", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + { + indexed: true, + internalType: "string", + name: "indexedMetadataKey", + type: "string", + }, + { + indexed: false, + internalType: "string", + name: "metadataKey", + type: "string", + }, + { + indexed: false, + internalType: "bytes", + name: "metadataValue", + type: "bytes", + }, + ], + name: "MetadataSet", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "_tokenId", + type: "uint256", + }, + ], + name: "MetadataUpdate", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + { + indexed: false, + internalType: "string", + name: "agentURI", + type: "string", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "Registered", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "Transfer", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + { + indexed: false, + internalType: "string", + name: "newURI", + type: "string", + }, + { + indexed: true, + internalType: "address", + name: "updatedBy", + type: "address", + }, + ], + name: "URIUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "UPGRADE_INTERFACE_VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "approve", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "eip712Domain", + outputs: [ + { + internalType: "bytes1", + name: "fields", + type: "bytes1", + }, + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "version", + type: "string", + }, + { + internalType: "uint256", + name: "chainId", + type: "uint256", + }, + { + internalType: "address", + name: "verifyingContract", + type: "address", + }, + { + internalType: "bytes32", + name: "salt", + type: "bytes32", + }, + { + internalType: "uint256[]", + name: "extensions", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + ], + name: "getAgentWallet", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "getApproved", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + { + internalType: "string", + name: "metadataKey", + type: "string", + }, + ], + name: "getMetadata", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getVersion", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "address", + name: "operator", + type: "address", + }, + ], + name: "isApprovedForAll", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "ownerOf", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "register", + outputs: [ + { + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "agentURI", + type: "string", + }, + { + components: [ + { + internalType: "string", + name: "metadataKey", + type: "string", + }, + { + internalType: "bytes", + name: "metadataValue", + type: "bytes", + }, + ], + internalType: "struct IdentityRegistryUpgradeable.MetadataEntry[]", + name: "metadata", + type: "tuple[]", + }, + ], + name: "register", + outputs: [ + { + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "agentURI", + type: "string", + }, + ], + name: "register", + outputs: [ + { + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "safeTransferFrom", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "safeTransferFrom", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + { + internalType: "string", + name: "newURI", + type: "string", + }, + ], + name: "setAgentURI", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + { + internalType: "address", + name: "newWallet", + type: "address", + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "setAgentWallet", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "bool", + name: "approved", + type: "bool", + }, + ], + name: "setApprovalForAll", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + { + internalType: "string", + name: "metadataKey", + type: "string", + }, + { + internalType: "bytes", + name: "metadataValue", + type: "bytes", + }, + ], + name: "setMetadata", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "tokenURI", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "agentId", + type: "uint256", + }, + ], + name: "unsetAgentWallet", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, +]; +export const REPUTATION_REGISTRY_ABI = [ + { inputs: [], stateMutability: "nonpayable", type: "constructor" }, + { + inputs: [{ internalType: "address", name: "target", type: "address" }], + name: "AddressEmptyCode", + type: "error", + }, + { + inputs: [{ internalType: "address", name: "implementation", type: "address" }], + name: "ERC1967InvalidImplementation", + type: "error", + }, + { inputs: [], name: "ERC1967NonPayable", type: "error" }, + { inputs: [], name: "FailedCall", type: "error" }, + { inputs: [], name: "InvalidInitialization", type: "error" }, + { inputs: [], name: "NotInitializing", type: "error" }, + { + inputs: [{ internalType: "address", name: "owner", type: "address" }], + name: "OwnableInvalidOwner", + type: "error", + }, + { + inputs: [{ internalType: "address", name: "account", type: "address" }], + name: "OwnableUnauthorizedAccount", + type: "error", + }, + { inputs: [], name: "UUPSUnauthorizedCallContext", type: "error" }, + { + inputs: [{ internalType: "bytes32", name: "slot", type: "bytes32" }], + name: "UUPSUnsupportedProxiableUUID", + type: "error", + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "uint256", name: "agentId", type: "uint256" }, + { indexed: true, internalType: "address", name: "clientAddress", type: "address" }, + { indexed: true, internalType: "uint64", name: "feedbackIndex", type: "uint64" }, + ], + name: "FeedbackRevoked", + type: "event", + }, + { + anonymous: false, + inputs: [{ indexed: false, internalType: "uint64", name: "version", type: "uint64" }], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "uint256", name: "agentId", type: "uint256" }, + { indexed: true, internalType: "address", name: "clientAddress", type: "address" }, + { indexed: false, internalType: "uint64", name: "feedbackIndex", type: "uint64" }, + { indexed: false, internalType: "int128", name: "value", type: "int128" }, + { indexed: false, internalType: "uint8", name: "valueDecimals", type: "uint8" }, + { indexed: true, internalType: "string", name: "indexedTag1", type: "string" }, + { indexed: false, internalType: "string", name: "tag1", type: "string" }, + { indexed: false, internalType: "string", name: "tag2", type: "string" }, + { indexed: false, internalType: "string", name: "endpoint", type: "string" }, + { indexed: false, internalType: "string", name: "feedbackURI", type: "string" }, + { indexed: false, internalType: "bytes32", name: "feedbackHash", type: "bytes32" }, + ], + name: "NewFeedback", + type: "event", + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "address", name: "previousOwner", type: "address" }, + { indexed: true, internalType: "address", name: "newOwner", type: "address" }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "uint256", name: "agentId", type: "uint256" }, + { indexed: true, internalType: "address", name: "clientAddress", type: "address" }, + { indexed: false, internalType: "uint64", name: "feedbackIndex", type: "uint64" }, + { indexed: true, internalType: "address", name: "responder", type: "address" }, + { indexed: false, internalType: "string", name: "responseURI", type: "string" }, + { indexed: false, internalType: "bytes32", name: "responseHash", type: "bytes32" }, + ], + name: "ResponseAppended", + type: "event", + }, + { + anonymous: false, + inputs: [{ indexed: true, internalType: "address", name: "implementation", type: "address" }], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "UPGRADE_INTERFACE_VERSION", + outputs: [{ internalType: "string", name: "", type: "string" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "uint256", name: "agentId", type: "uint256" }, + { internalType: "address", name: "clientAddress", type: "address" }, + { internalType: "uint64", name: "feedbackIndex", type: "uint64" }, + { internalType: "string", name: "responseURI", type: "string" }, + { internalType: "bytes32", name: "responseHash", type: "bytes32" }, + ], + name: "appendResponse", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [{ internalType: "uint256", name: "agentId", type: "uint256" }], + name: "getClients", + outputs: [{ internalType: "address[]", name: "", type: "address[]" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getIdentityRegistry", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "uint256", name: "agentId", type: "uint256" }, + { internalType: "address", name: "clientAddress", type: "address" }, + ], + name: "getLastIndex", + outputs: [{ internalType: "uint64", name: "", type: "uint64" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "uint256", name: "agentId", type: "uint256" }, + { internalType: "address", name: "clientAddress", type: "address" }, + { internalType: "uint64", name: "feedbackIndex", type: "uint64" }, + { internalType: "address[]", name: "responders", type: "address[]" }, + ], + name: "getResponseCount", + outputs: [{ internalType: "uint64", name: "count", type: "uint64" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "uint256", name: "agentId", type: "uint256" }, + { internalType: "address[]", name: "clientAddresses", type: "address[]" }, + { internalType: "string", name: "tag1", type: "string" }, + { internalType: "string", name: "tag2", type: "string" }, + ], + name: "getSummary", + outputs: [ + { internalType: "uint64", name: "count", type: "uint64" }, + { internalType: "int128", name: "summaryValue", type: "int128" }, + { internalType: "uint8", name: "summaryValueDecimals", type: "uint8" }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getVersion", + outputs: [{ internalType: "string", name: "", type: "string" }], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { internalType: "uint256", name: "agentId", type: "uint256" }, + { internalType: "int128", name: "value", type: "int128" }, + { internalType: "uint8", name: "valueDecimals", type: "uint8" }, + { internalType: "string", name: "tag1", type: "string" }, + { internalType: "string", name: "tag2", type: "string" }, + { internalType: "string", name: "endpoint", type: "string" }, + { internalType: "string", name: "feedbackURI", type: "string" }, + { internalType: "bytes32", name: "feedbackHash", type: "bytes32" }, + ], + name: "giveFeedback", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [{ internalType: "address", name: "identityRegistry_", type: "address" }], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "uint256", name: "agentId", type: "uint256" }, + { internalType: "address[]", name: "clientAddresses", type: "address[]" }, + { internalType: "string", name: "tag1", type: "string" }, + { internalType: "string", name: "tag2", type: "string" }, + { internalType: "bool", name: "includeRevoked", type: "bool" }, + ], + name: "readAllFeedback", + outputs: [ + { internalType: "address[]", name: "clients", type: "address[]" }, + { internalType: "uint64[]", name: "feedbackIndexes", type: "uint64[]" }, + { internalType: "int128[]", name: "values", type: "int128[]" }, + { internalType: "uint8[]", name: "valueDecimals", type: "uint8[]" }, + { internalType: "string[]", name: "tag1s", type: "string[]" }, + { internalType: "string[]", name: "tag2s", type: "string[]" }, + { internalType: "bool[]", name: "revokedStatuses", type: "bool[]" }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "uint256", name: "agentId", type: "uint256" }, + { internalType: "address", name: "clientAddress", type: "address" }, + { internalType: "uint64", name: "feedbackIndex", type: "uint64" }, + ], + name: "readFeedback", + outputs: [ + { internalType: "int128", name: "value", type: "int128" }, + { internalType: "uint8", name: "valueDecimals", type: "uint8" }, + { internalType: "string", name: "tag1", type: "string" }, + { internalType: "string", name: "tag2", type: "string" }, + { internalType: "bool", name: "isRevoked", type: "bool" }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "uint256", name: "agentId", type: "uint256" }, + { internalType: "uint64", name: "feedbackIndex", type: "uint64" }, + ], + name: "revokeFeedback", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [{ internalType: "address", name: "newOwner", type: "address" }], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "newImplementation", type: "address" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, +]; diff --git a/typescript/agentkit/src/action-providers/erc8004/constants.ts b/typescript/agentkit/src/action-providers/erc8004/constants.ts new file mode 100644 index 000000000..4a5cabbee --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/constants.ts @@ -0,0 +1,95 @@ +import { Hex } from "viem"; +import { NETWORK_ID_TO_CHAIN_ID, Network } from "../../network"; + +// Chain IDs for supported networks +export const SUPPORTED_CHAIN_IDS = { + ETHEREUM_MAINNET: 1, + ETHEREUM_SEPOLIA: 11155111, + BASE_MAINNET: 8453, + BASE_SEPOLIA: 84532, +} as const; + +// Registry addresses by chain ID +// ERC-8004 uses deterministic CREATE2 addresses across all networks +export const REGISTRY_ADDRESSES: Record = { + [SUPPORTED_CHAIN_IDS.ETHEREUM_MAINNET]: { + identity: "0x8004A818BFB912233c491871b3d84c89A494BD9e", + reputation: "0x8004B663056A597Dffe9eCcC1965A193B7388713", + }, + [SUPPORTED_CHAIN_IDS.ETHEREUM_SEPOLIA]: { + identity: "0x8004A818BFB912233c491871b3d84c89A494BD9e", + reputation: "0x8004B663056A597Dffe9eCcC1965A193B7388713", + }, + [SUPPORTED_CHAIN_IDS.BASE_MAINNET]: { + identity: "0x8004A818BFB912233c491871b3d84c89A494BD9e", + reputation: "0x8004B663056A597Dffe9eCcC1965A193B7388713", + }, + [SUPPORTED_CHAIN_IDS.BASE_SEPOLIA]: { + identity: "0x8004A818BFB912233c491871b3d84c89A494BD9e", + reputation: "0x8004B663056A597Dffe9eCcC1965A193B7388713", + }, +}; + +// Supported network IDs for ERC-8004 +export const SUPPORTED_NETWORK_IDS = [ + "ethereum-mainnet", + "ethereum-sepolia", + "base-mainnet", + "base-sepolia", +] as const; + +export type SupportedNetworkId = (typeof SUPPORTED_NETWORK_IDS)[number]; + +/** + * Gets the chain ID from a network object + * + * @param network - The network object + * @returns The chain ID as a number + * @throws Error if network is not supported + */ +export function getChainIdFromNetwork(network: Network): number { + const networkId = network.networkId; + if (!networkId) { + throw new Error("Network ID is not defined"); + } + + const chainIdStr = NETWORK_ID_TO_CHAIN_ID[networkId]; + if (!chainIdStr) { + throw new Error( + `Network ${networkId} is not supported. Supported networks: ${SUPPORTED_NETWORK_IDS.join(", ")}`, + ); + } + + return parseInt(chainIdStr, 10); +} + +/** + * Gets the registry address for a specific registry type and chain + * + * @param registry - The registry type ("identity" or "reputation") + * @param chainId - The chain ID + * @returns The registry address + * @throws Error if chain is not supported + */ +export function getRegistryAddress(registry: "identity" | "reputation", chainId: number): Hex { + const addresses = REGISTRY_ADDRESSES[chainId]; + if (!addresses) { + throw new Error( + `Chain ID ${chainId} is not supported for ERC-8004. Supported chain IDs: ${Object.keys(REGISTRY_ADDRESSES).join(", ")}`, + ); + } + + return addresses[registry]; +} + +/** + * Checks if a network is supported for ERC-8004 + * + * @param network - The network to check + * @returns True if the network is supported + */ +export function isNetworkSupported(network: Network): boolean { + const networkId = network.networkId; + if (!networkId) return false; + return SUPPORTED_NETWORK_IDS.includes(networkId as SupportedNetworkId); +} diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts new file mode 100644 index 000000000..4e8f378fd --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts @@ -0,0 +1,522 @@ +import { + erc8004IdentityActionProvider, + ERC8004IdentityActionProvider, +} from "./erc8004IdentityActionProvider"; +import { + RegisterAgentSchema, + SetAgentRegistrationSchema, + GetAgentIdentitySchema, + SetMetadataSchema, + GetMetadataSchema, + RegisterAgentCompleteSchema, +} from "./identitySchemas"; +import { EvmWalletProvider } from "../../wallet-providers"; + +const MOCK_AGENT_ID = "123"; +const MOCK_ADDRESS = "0x1234567890123456789012345678901234567890"; +const MOCK_URI = "ipfs://QmTest123456789"; +const TRANSACTION_HASH = "0xabcdef1234567890"; + +describe("Identity Schema Validation", () => { + describe("RegisterAgentSchema", () => { + it("should successfully parse empty input", () => { + const validInput = {}; + const result = RegisterAgentSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual({}); + }); + }); + + describe("SetAgentRegistrationSchema", () => { + it("should successfully parse valid input", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + name: "Test Agent", + description: "A test agent description", + image: "https://example.com/image.png", + }; + + const result = SetAgentRegistrationSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should successfully parse input without optional fields", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + name: "Test Agent", + }; + + const result = SetAgentRegistrationSchema.safeParse(validInput); + + expect(result.success).toBe(true); + }); + + it("should fail parsing empty name", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + name: "", + }; + + const result = SetAgentRegistrationSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + + it("should fail parsing name too long", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + name: "a".repeat(101), + }; + + const result = SetAgentRegistrationSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + + it("should fail parsing description too long", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + name: "Test Agent", + description: "a".repeat(501), + }; + + const result = SetAgentRegistrationSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + + it("should fail parsing empty input", () => { + const emptyInput = {}; + const result = SetAgentRegistrationSchema.safeParse(emptyInput); + + expect(result.success).toBe(false); + }); + }); + + describe("GetAgentIdentitySchema", () => { + it("should successfully parse valid input", () => { + const validInput = { agentId: MOCK_AGENT_ID }; + const result = GetAgentIdentitySchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should fail parsing empty input", () => { + const emptyInput = {}; + const result = GetAgentIdentitySchema.safeParse(emptyInput); + + expect(result.success).toBe(false); + }); + }); + + describe("SetMetadataSchema", () => { + it("should successfully parse valid input", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + key: "version", + value: "1.0.0", + }; + + const result = SetMetadataSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should fail parsing empty key", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + key: "", + value: "1.0.0", + }; + + const result = SetMetadataSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + + it("should fail parsing key too long", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + key: "a".repeat(101), + value: "1.0.0", + }; + + const result = SetMetadataSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + }); + + describe("GetMetadataSchema", () => { + it("should successfully parse valid input", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + key: "version", + }; + + const result = GetMetadataSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should fail parsing empty input", () => { + const emptyInput = {}; + const result = GetMetadataSchema.safeParse(emptyInput); + + expect(result.success).toBe(false); + }); + }); + + describe("RegisterAgentCompleteSchema", () => { + it("should successfully parse valid input", () => { + const validInput = { + name: "Test Agent", + description: "A test agent", + image: "https://example.com/image.png", + }; + + const result = RegisterAgentCompleteSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should successfully parse input without optional fields", () => { + const validInput = { + name: "Test Agent", + }; + + const result = RegisterAgentCompleteSchema.safeParse(validInput); + + expect(result.success).toBe(true); + }); + + it("should fail parsing empty name", () => { + const invalidInput = { + name: "", + }; + + const result = RegisterAgentCompleteSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + }); +}); + +describe("Register Agent Action", () => { + let mockWallet: jest.Mocked; + let actionProvider: ERC8004IdentityActionProvider; + + beforeEach(() => { + mockWallet = { + sendTransaction: jest.fn(), + waitForTransactionReceipt: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + getAddress: jest.fn().mockReturnValue(MOCK_ADDRESS), + } as unknown as jest.Mocked; + + actionProvider = erc8004IdentityActionProvider(); + }); + + it("should successfully register an agent", async () => { + mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); + mockWallet.waitForTransactionReceipt.mockResolvedValue({ + logs: [ + { + topics: [ + "0x1234", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000000000000000000000000000000000000000007b", + ], + data: "0x", + }, + ], + }); + + const response = await actionProvider.registerAgent(mockWallet, {}); + + expect(mockWallet.sendTransaction).toHaveBeenCalled(); + expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith(TRANSACTION_HASH); + expect(response).toContain("Agent registered successfully!"); + expect(response).toContain(TRANSACTION_HASH); + }); + + it("should handle error when registration fails", async () => { + mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); + + const response = await actionProvider.registerAgent(mockWallet, {}); + + expect(mockWallet.sendTransaction).toHaveBeenCalled(); + expect(response).toContain("Error registering agent"); + }); +}); + +describe("Set Agent Registration Action", () => { + let mockWallet: jest.Mocked; + let _actionProvider: ERC8004IdentityActionProvider; + + beforeEach(() => { + mockWallet = { + sendTransaction: jest.fn(), + waitForTransactionReceipt: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + _actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); + }); + + it("should fail without Pinata JWT", async () => { + const providerWithoutJwt = erc8004IdentityActionProvider(); + + const args = { + agentId: MOCK_AGENT_ID, + name: "Test Agent", + }; + + const response = await providerWithoutJwt.setAgentRegistration(mockWallet, args); + + expect(response).toContain("Error: PINATA_JWT is required"); + }); +}); + +describe("Get Agent Identity Action", () => { + let mockWallet: jest.Mocked; + let actionProvider: ERC8004IdentityActionProvider; + + beforeEach(() => { + mockWallet = { + readContract: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + actionProvider = erc8004IdentityActionProvider(); + }); + + it("should successfully get agent identity", async () => { + mockWallet.readContract.mockResolvedValueOnce(MOCK_ADDRESS).mockResolvedValueOnce(MOCK_URI); + + const args = { agentId: MOCK_AGENT_ID }; + + const response = await actionProvider.getAgentIdentity(mockWallet, args); + + expect(mockWallet.readContract).toHaveBeenCalledTimes(2); + expect(response).toContain("Agent Identity"); + expect(response).toContain(MOCK_AGENT_ID); + expect(response).toContain(MOCK_ADDRESS); + expect(response).toContain(MOCK_URI); + }); + + it("should handle non-existent agent", async () => { + mockWallet.readContract.mockRejectedValue(new Error("ERC721NonexistentToken")); + + const args = { agentId: MOCK_AGENT_ID }; + + const response = await actionProvider.getAgentIdentity(mockWallet, args); + + expect(response).toContain("does not exist"); + }); + + it("should handle other errors", async () => { + mockWallet.readContract.mockRejectedValue(new Error("Network error")); + + const args = { agentId: MOCK_AGENT_ID }; + + const response = await actionProvider.getAgentIdentity(mockWallet, args); + + expect(response).toContain("Error getting agent identity"); + }); +}); + +describe("Set Metadata Action", () => { + let mockWallet: jest.Mocked; + let actionProvider: ERC8004IdentityActionProvider; + + beforeEach(() => { + mockWallet = { + sendTransaction: jest.fn(), + waitForTransactionReceipt: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + actionProvider = erc8004IdentityActionProvider(); + }); + + it("should successfully set metadata", async () => { + mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); + mockWallet.waitForTransactionReceipt.mockResolvedValue({}); + + const args = { + agentId: MOCK_AGENT_ID, + key: "version", + value: "1.0.0", + }; + + const response = await actionProvider.setMetadata(mockWallet, args); + + expect(mockWallet.sendTransaction).toHaveBeenCalled(); + expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith(TRANSACTION_HASH); + expect(response).toContain("Metadata set successfully!"); + expect(response).toContain(MOCK_AGENT_ID); + expect(response).toContain("version"); + expect(response).toContain("1.0.0"); + expect(response).toContain(TRANSACTION_HASH); + }); + + it("should handle error when setting metadata fails", async () => { + mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); + + const args = { + agentId: MOCK_AGENT_ID, + key: "version", + value: "1.0.0", + }; + + const response = await actionProvider.setMetadata(mockWallet, args); + + expect(response).toContain("Error setting metadata"); + }); +}); + +describe("Get Metadata Action", () => { + let mockWallet: jest.Mocked; + let actionProvider: ERC8004IdentityActionProvider; + + beforeEach(() => { + mockWallet = { + readContract: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + actionProvider = erc8004IdentityActionProvider(); + }); + + it("should successfully get metadata", async () => { + const valueHex = "0x312e302e30"; // "1.0.0" in hex + mockWallet.readContract.mockResolvedValue(valueHex); + + const args = { + agentId: MOCK_AGENT_ID, + key: "version", + }; + + const response = await actionProvider.getMetadata(mockWallet, args); + + expect(mockWallet.readContract).toHaveBeenCalled(); + expect(response).toContain("Agent Metadata"); + expect(response).toContain(MOCK_AGENT_ID); + expect(response).toContain("version"); + expect(response).toContain("1.0.0"); + }); + + it("should handle empty metadata", async () => { + mockWallet.readContract.mockResolvedValue("0x"); + + const args = { + agentId: MOCK_AGENT_ID, + key: "nonexistent", + }; + + const response = await actionProvider.getMetadata(mockWallet, args); + + expect(response).toContain("(empty)"); + }); + + it("should handle error when getting metadata fails", async () => { + mockWallet.readContract.mockRejectedValue(new Error("Read failed")); + + const args = { + agentId: MOCK_AGENT_ID, + key: "version", + }; + + const response = await actionProvider.getMetadata(mockWallet, args); + + expect(response).toContain("Error getting metadata"); + }); +}); + +describe("Register Agent Complete Action", () => { + let mockWallet: jest.Mocked; + let _actionProvider: ERC8004IdentityActionProvider; + beforeEach(() => { + mockWallet = { + sendTransaction: jest.fn(), + waitForTransactionReceipt: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + _actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); + }); + + it("should fail without Pinata JWT", async () => { + const providerWithoutJwt = erc8004IdentityActionProvider(); + + const args = { + name: "Test Agent", + }; + + const response = await providerWithoutJwt.registerAgentComplete(mockWallet, args); + + expect(response).toContain("Error: PINATA_JWT is required"); + }); +}); + +describe("supportsNetwork", () => { + const actionProvider = erc8004IdentityActionProvider(); + + it("should return true for supported EVM networks", () => { + expect( + actionProvider.supportsNetwork({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + ).toBe(true); + }); + + it("should return false for non-EVM networks", () => { + expect( + actionProvider.supportsNetwork({ + protocolFamily: "solana", + }), + ).toBe(false); + }); + + it("should return false for unsupported EVM networks", () => { + expect( + actionProvider.supportsNetwork({ + protocolFamily: "evm", + networkId: "polygon-mainnet", + }), + ).toBe(false); + }); +}); diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts new file mode 100644 index 000000000..eaa9b98b7 --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts @@ -0,0 +1,439 @@ +import { z } from "zod"; +import { Hex, encodeFunctionData, toHex, decodeEventLog } from "viem"; +import { ActionProvider } from "../actionProvider"; +import { Network } from "../../network"; +import { CreateAction } from "../actionDecorator"; +import { EvmWalletProvider } from "../../wallet-providers"; +import { + RegisterAgentSchema, + SetAgentRegistrationSchema, + GetAgentIdentitySchema, + SetMetadataSchema, + GetMetadataSchema, + RegisterAgentCompleteSchema, +} from "./identitySchemas"; +import { getChainIdFromNetwork, getRegistryAddress, isNetworkSupported } from "./constants"; +import { IDENTITY_REGISTRY_ABI } from "./abi"; +import { PinataConfig, ipfsToHttpUrl } from "./utils"; +import { uploadAgentRegistration } from "./utils_id"; + +/** + * Configuration options for the ERC8004 Identity Action Provider + */ +export interface ERC8004IdentityActionProviderConfig { + pinataJwt?: string; +} + +/** + * ERC8004IdentityActionProvider provides actions for the ERC-8004 Identity Registry. + * This includes agent registration, URI management, and on-chain metadata. + */ +export class ERC8004IdentityActionProvider extends ActionProvider { + private pinataConfig?: PinataConfig; + + /** + * Constructor for the ERC8004IdentityActionProvider. + * + * @param config - Optional configuration including Pinata JWT for IPFS uploads + */ + constructor(config?: ERC8004IdentityActionProviderConfig) { + super("erc8004_identity", []); + if (config?.pinataJwt) { + this.pinataConfig = { jwt: config.pinataJwt }; + } + } + + /** + * Registers a new agent by minting an agent NFT. + * Use only when user provides no input at all. + * + * @param walletProvider - The wallet provider to use for the transaction + * @param _args - Empty args (no input required) + * @returns A message with the new agent ID + */ + @CreateAction({ + name: "register_agent", + description: ` +Registers a new agent on the ERC-8004 Identity Registry by minting an agent NFT. +USE ONLY when user provides no input at all (no name, description, or image). + +If the user provides any registration details (name, description, image), use register_agent_complete instead. + +After registration, you will receive an agentId. You can then use set_agent_registration +to upload metadata and set the URI on-chain. +`, + schema: RegisterAgentSchema, + }) + async registerAgent( + walletProvider: EvmWalletProvider, + _args: z.infer, + ): Promise { + try { + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("identity", chainId); + + const hash = await walletProvider.sendTransaction({ + to: registryAddress, + data: encodeFunctionData({ + abi: IDENTITY_REGISTRY_ABI, + functionName: "register", + args: [], + }), + }); + + const receipt = await walletProvider.waitForTransactionReceipt(hash); + + // Parse the Registered event to get the agentId + let agentId: string | undefined; + for (const log of receipt.logs) { + try { + const decoded = decodeEventLog({ + abi: IDENTITY_REGISTRY_ABI, + data: log.data, + topics: log.topics, + }); + if (decoded.eventName === "Registered") { + agentId = (decoded.args as unknown as { agentId: bigint }).agentId.toString(); + break; + } + } catch { + // Not the event we're looking for + } + } + + if (!agentId) { + return `Agent registered successfully! Transaction hash: ${hash}\nNote: Could not parse agentId from event logs. Check the transaction on a block explorer.`; + } + + return `Agent registered successfully!\n\nAgent ID: ${agentId}\nNetwork: ${network.networkId}\nTransaction hash: ${hash}\n\nNext step: Use set_agent_registration with agentId "${agentId}" to upload metadata and set the URI on-chain.`; + } catch (error) { + return `Error registering agent: ${error}`; + } + } + + /** + * Sets agent registration by uploading metadata to IPFS and setting the URI on-chain. + * + * @param walletProvider - The wallet provider to use for the transaction + * @param args - Registration details including agentId and name + * @returns A message with the registration details + */ + @CreateAction({ + name: "set_agent_registration", + description: ` +Uploads registration metadata to IPFS and sets the agent URI on-chain in one action. +Use when you already have an agentId (from register_agent) and want to set its metadata. + +Requires PINATA_JWT environment variable to be set. + +The registration JSON follows the ERC-8004 specification and includes: +- type: The ERC-8004 registration type URI +- name: Your agent's name +- description: (optional) Your agent's description +- image: (optional) Image URL +- registrations: Array containing your agentId and registry address +`, + schema: SetAgentRegistrationSchema, + }) + async setAgentRegistration( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + if (!this.pinataConfig) { + return "Error: PINATA_JWT is required for IPFS uploads. Please configure the provider with a Pinata JWT."; + } + + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("identity", chainId); + + // Step 1: Upload registration to IPFS + const ipfsUri = await uploadAgentRegistration(this.pinataConfig, { + agentId: parseInt(args.agentId, 10), + chainId, + registryAddress, + name: args.name, + description: args.description, + image: args.image, + }); + + // Step 2: Set agent URI on-chain + const hash = await walletProvider.sendTransaction({ + to: registryAddress, + data: encodeFunctionData({ + abi: IDENTITY_REGISTRY_ABI, + functionName: "setAgentURI", + args: [BigInt(args.agentId), ipfsUri], + }), + }); + + await walletProvider.waitForTransactionReceipt(hash); + + const httpUrl = ipfsToHttpUrl(ipfsUri); + + return `Agent registration set successfully!\n\nAgent ID: ${args.agentId}\nName: ${args.name}\nMetadata URI: ${ipfsUri}\nHTTP Gateway: ${httpUrl}\nTransaction hash: ${hash}`; + } catch (error) { + return `Error setting agent registration: ${error}`; + } + } + + /** + * Gets the identity information for an agent. + * + * @param walletProvider - The wallet provider to use for reading + * @param args - The agentId to look up + * @returns A message with the agent's owner and URI + */ + @CreateAction({ + name: "get_agent_identity", + description: ` +Gets the owner and metadata URI for an agent from the ERC-8004 Identity Registry. +This is a read-only operation that doesn't require gas. +`, + schema: GetAgentIdentitySchema, + }) + async getAgentIdentity( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("identity", chainId); + + const owner = await walletProvider.readContract({ + address: registryAddress, + abi: IDENTITY_REGISTRY_ABI, + functionName: "ownerOf", + args: [BigInt(args.agentId)], + }); + + const uri = await walletProvider.readContract({ + address: registryAddress, + abi: IDENTITY_REGISTRY_ABI, + functionName: "tokenURI", + args: [BigInt(args.agentId)], + }); + + const httpUrl = uri ? ipfsToHttpUrl(uri as string) : "Not set"; + + return `Agent Identity\n\nAgent ID: ${args.agentId}\nOwner: ${owner}\nURI: ${uri || "Not set"}\nHTTP Gateway: ${httpUrl}`; + } catch (error) { + const errorStr = String(error); + if (errorStr.includes("ERC721NonexistentToken")) { + return `Agent ID ${args.agentId} does not exist on this network.`; + } + return `Error getting agent identity: ${error}`; + } + } + + /** + * Sets an on-chain metadata key-value pair for an agent. + * + * @param walletProvider - The wallet provider to use for the transaction + * @param args - The agentId, key, and value + * @returns A message confirming the metadata was set + */ + @CreateAction({ + name: "set_agent_metadata", + description: ` +Sets an on-chain key-value metadata entry for an agent. +Only the agent owner can set metadata. +The value is stored as bytes on-chain and can be used for +arbitrary data like endpoints, capabilities, or version info. +`, + schema: SetMetadataSchema, + }) + async setMetadata( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("identity", chainId); + + const valueBytes = toHex(args.value); + + const hash = await walletProvider.sendTransaction({ + to: registryAddress, + data: encodeFunctionData({ + abi: IDENTITY_REGISTRY_ABI, + functionName: "setMetadata", + args: [BigInt(args.agentId), args.key, valueBytes], + }), + }); + + await walletProvider.waitForTransactionReceipt(hash); + + return `Metadata set successfully!\n\nAgent ID: ${args.agentId}\nKey: ${args.key}\nValue: ${args.value}\nTransaction hash: ${hash}`; + } catch (error) { + return `Error setting metadata: ${error}`; + } + } + + /** + * Gets an on-chain metadata value for an agent. + * + * @param walletProvider - The wallet provider to use for reading + * @param args - The agentId and key + * @returns A message with the metadata value + */ + @CreateAction({ + name: "get_agent_metadata", + description: ` +Gets an on-chain metadata value for an agent by key. +This is a read-only operation that doesn't require gas. +`, + schema: GetMetadataSchema, + }) + async getMetadata( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("identity", chainId); + + const valueBytes = await walletProvider.readContract({ + address: registryAddress, + abi: IDENTITY_REGISTRY_ABI, + functionName: "getMetadata", + args: [BigInt(args.agentId), args.key], + }); + + // Convert bytes back to string + let value = ""; + if (valueBytes && (valueBytes as Hex) !== "0x") { + const bytes = valueBytes as Hex; + // Remove 0x prefix and convert hex to string + const hexString = bytes.slice(2); + for (let i = 0; i < hexString.length; i += 2) { + const charCode = parseInt(hexString.slice(i, i + 2), 16); + if (charCode !== 0) { + value += String.fromCharCode(charCode); + } + } + } + + return `Agent Metadata\n\nAgent ID: ${args.agentId}\nKey: ${args.key}\nValue: ${value || "(empty)"}`; + } catch (error) { + return `Error getting metadata: ${error}`; + } + } + + /** + * Complete agent registration in one action (register + upload + set URI). + * + * @param walletProvider - The wallet provider to use + * @param args - The agent name and optional description/image + * @returns A message with the complete registration details + */ + @CreateAction({ + name: "register_agent_complete", + description: ` +Complete agent registration in one action: +1. Registers a new agent (mints NFT) +2. Generates and uploads registration JSON to IPFS +3. Sets the agent URI onchain +`, + schema: RegisterAgentCompleteSchema, + }) + async registerAgentComplete( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + if (!this.pinataConfig) { + return "Error: PINATA_JWT is required for complete registration. Please configure the provider with a Pinata JWT, or use register_agent followed by set_agent_registration."; + } + + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("identity", chainId); + + // Step 1: Register agent + const registerHash = await walletProvider.sendTransaction({ + to: registryAddress, + data: encodeFunctionData({ + abi: IDENTITY_REGISTRY_ABI, + functionName: "register", + args: [], + }), + }); + + const receipt = await walletProvider.waitForTransactionReceipt(registerHash); + + // Parse the Registered event to get the agentId + let agentId: string | undefined; + for (const log of receipt.logs) { + try { + const decoded = decodeEventLog({ + abi: IDENTITY_REGISTRY_ABI, + data: log.data, + topics: log.topics, + }); + if (decoded.eventName === "Registered") { + agentId = (decoded.args as unknown as { agentId: bigint }).agentId.toString(); + break; + } + } catch { + // Not the event we're looking for + } + } + + if (!agentId) { + return `Agent registered but could not parse agentId from event logs.\nRegister transaction: ${registerHash}\nPlease use get_agent_identity or check the transaction on a block explorer to find your agentId.`; + } + + // Step 2: Upload registration to IPFS + const ipfsUri = await uploadAgentRegistration(this.pinataConfig, { + agentId: parseInt(agentId, 10), + chainId, + registryAddress, + name: args.name, + description: args.description, + image: args.image, + }); + + // Step 3: Set agent URI + const setUriHash = await walletProvider.sendTransaction({ + to: registryAddress, + data: encodeFunctionData({ + abi: IDENTITY_REGISTRY_ABI, + functionName: "setAgentURI", + args: [BigInt(agentId), ipfsUri], + }), + }); + + await walletProvider.waitForTransactionReceipt(setUriHash); + + const httpUrl = ipfsToHttpUrl(ipfsUri); + + return `Agent registration complete!\n\nAgent ID: ${agentId}\nName: ${args.name}\nNetwork: ${network.networkId}\n\nMetadata URI: ${ipfsUri}\nHTTP Gateway: ${httpUrl}\n\nTransactions:\n- Register: ${registerHash}\n- Set URI: ${setUriHash}`; + } catch (error) { + return `Error during complete registration: ${error}`; + } + } + + /** + * Checks if the action provider supports the given network. + * + * @param network - The network to check + * @returns True if the network is supported for ERC-8004 + */ + supportsNetwork = (network: Network) => + network.protocolFamily === "evm" && isNetworkSupported(network); +} + +/** + * Factory function to create an ERC8004IdentityActionProvider + * + * @param config - Optional configuration including Pinata JWT + * @returns A new ERC8004IdentityActionProvider instance + */ +export const erc8004IdentityActionProvider = (config?: ERC8004IdentityActionProviderConfig) => + new ERC8004IdentityActionProvider(config); diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts new file mode 100644 index 000000000..3a0d57496 --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts @@ -0,0 +1,876 @@ +import { + erc8004ReputationActionProvider, + ERC8004ReputationActionProvider, +} from "./erc8004ReputationActionProvider"; +import { + GiveFeedbackSchema, + RevokeFeedbackSchema, + AppendResponseSchema, + GetReputationSummarySchema, + ReadFeedbackSchema, + GetClientsSchema, +} from "./reputationSchemas"; +import { EvmWalletProvider } from "../../wallet-providers"; +import * as utilsRep from "./utils_rep"; + +const MOCK_AGENT_ID = "123"; +const MOCK_ADDRESS = "0x1234567890123456789012345678901234567890"; +const MOCK_CLIENT_ADDRESS = "0x9876543210987654321098765432109876543210"; +const TRANSACTION_HASH = "0xabcdef1234567890"; +const MOCK_FEEDBACK_INDEX = "0"; +const MOCK_IPFS_HASH = "bafkreitest123456789"; +const MOCK_FEEDBACK_URI = `ipfs://${MOCK_IPFS_HASH}`; +const MOCK_FEEDBACK_HASH = "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"; + +describe("Reputation Schema Validation", () => { + describe("GiveFeedbackSchema", () => { + it("should successfully parse valid input", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + value: 85, + valueDecimals: 0, + tag1: "quality", + tag2: "response-time", + endpoint: "/api/v1/chat", + }; + + const result = GiveFeedbackSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should successfully parse input with defaults", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + value: 85, + }; + + const result = GiveFeedbackSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data?.valueDecimals).toBe(0); + }); + + it("should accept large values per ERC-8004 int128 spec", () => { + // Uptime 99.77% -> value=9977, valueDecimals=2 + const uptimeInput = { + agentId: MOCK_AGENT_ID, + value: 9977, + valueDecimals: 2, + tag1: "uptime", + }; + expect(GiveFeedbackSchema.safeParse(uptimeInput).success).toBe(true); + + // Response time 560ms + const responseTimeInput = { + agentId: MOCK_AGENT_ID, + value: 560, + valueDecimals: 0, + tag1: "responseTime", + }; + expect(GiveFeedbackSchema.safeParse(responseTimeInput).success).toBe(true); + + // Revenues $560 + const revenuesInput = { + agentId: MOCK_AGENT_ID, + value: 560, + valueDecimals: 0, + tag1: "revenues", + }; + expect(GiveFeedbackSchema.safeParse(revenuesInput).success).toBe(true); + }); + + it("should accept negative values for losses/negative yields", () => { + // Trading yield -3.2% + const yieldInput = { + agentId: MOCK_AGENT_ID, + value: -32, + valueDecimals: 1, + tag1: "tradingYield", + tag2: "week", + }; + expect(GiveFeedbackSchema.safeParse(yieldInput).success).toBe(true); + }); + + it("should accept optional MCP context", () => { + const inputWithMcp = { + agentId: MOCK_AGENT_ID, + value: 85, + mcp: { tool: "getWeather" }, + }; + + const result = GiveFeedbackSchema.safeParse(inputWithMcp); + expect(result.success).toBe(true); + expect(result.data?.mcp?.tool).toBe("getWeather"); + }); + + it("should accept optional A2A context", () => { + const inputWithA2a = { + agentId: MOCK_AGENT_ID, + value: 85, + a2a: { skills: ["skill1", "skill2"], taskId: "task-123" }, + }; + + const result = GiveFeedbackSchema.safeParse(inputWithA2a); + expect(result.success).toBe(true); + expect(result.data?.a2a?.skills).toHaveLength(2); + }); + + it("should fail parsing tag1 too long", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + value: 85, + tag1: "a".repeat(51), + }; + + const result = GiveFeedbackSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + + it("should fail parsing endpoint too long", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + value: 85, + endpoint: "a".repeat(201), + }; + + const result = GiveFeedbackSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + + it("should reject valueDecimals greater than 18", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + value: 85, + valueDecimals: 19, + }; + + const result = GiveFeedbackSchema.safeParse(invalidInput); + expect(result.success).toBe(false); + }); + }); + + describe("RevokeFeedbackSchema", () => { + it("should successfully parse valid input", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + feedbackIndex: MOCK_FEEDBACK_INDEX, + }; + + const result = RevokeFeedbackSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should fail parsing empty input", () => { + const emptyInput = {}; + const result = RevokeFeedbackSchema.safeParse(emptyInput); + + expect(result.success).toBe(false); + }); + }); + + describe("AppendResponseSchema", () => { + it("should successfully parse valid input", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + clientAddress: MOCK_CLIENT_ADDRESS, + feedbackIndex: MOCK_FEEDBACK_INDEX, + responseUri: "ipfs://QmResponse123", + }; + + const result = AppendResponseSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should accept optional responseHash for non-IPFS URIs", () => { + const inputWithHash = { + agentId: MOCK_AGENT_ID, + clientAddress: MOCK_CLIENT_ADDRESS, + feedbackIndex: MOCK_FEEDBACK_INDEX, + responseUri: "https://example.com/response.json", + responseHash: "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", + }; + + const result = AppendResponseSchema.safeParse(inputWithHash); + expect(result.success).toBe(true); + expect(result.data?.responseHash).toBe(inputWithHash.responseHash); + }); + + it("should reject invalid responseHash format", () => { + const invalidHashInput = { + agentId: MOCK_AGENT_ID, + clientAddress: MOCK_CLIENT_ADDRESS, + feedbackIndex: MOCK_FEEDBACK_INDEX, + responseUri: "ipfs://QmResponse123", + responseHash: "not-a-valid-hash", + }; + + const result = AppendResponseSchema.safeParse(invalidHashInput); + expect(result.success).toBe(false); + }); + + it("should fail parsing invalid client address", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + clientAddress: "invalid-address", + feedbackIndex: MOCK_FEEDBACK_INDEX, + responseUri: "ipfs://QmResponse123", + }; + + const result = AppendResponseSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + + it("should fail parsing empty input", () => { + const emptyInput = {}; + const result = AppendResponseSchema.safeParse(emptyInput); + + expect(result.success).toBe(false); + }); + }); + + describe("GetReputationSummarySchema", () => { + it("should successfully parse valid input with clientAddresses and tags", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + clientAddresses: [MOCK_CLIENT_ADDRESS], + tag1: "quality", + tag2: "speed", + }; + + const result = GetReputationSummarySchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should successfully parse input with only required fields", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + clientAddresses: [MOCK_CLIENT_ADDRESS], + }; + + const result = GetReputationSummarySchema.safeParse(validInput); + + expect(result.success).toBe(true); + }); + + it("should accept multiple client addresses", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + clientAddresses: [ + MOCK_CLIENT_ADDRESS, + "0xabcdef1234567890123456789012345678901234", + "0x1111111111111111111111111111111111111111", + ], + }; + + const result = GetReputationSummarySchema.safeParse(validInput); + expect(result.success).toBe(true); + expect(result.data?.clientAddresses).toHaveLength(3); + }); + + it("should fail parsing without clientAddresses (required per ERC-8004 spec)", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + tag1: "quality", + }; + + const result = GetReputationSummarySchema.safeParse(invalidInput); + expect(result.success).toBe(false); + }); + + it("should fail parsing with empty clientAddresses array", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + clientAddresses: [], + }; + + const result = GetReputationSummarySchema.safeParse(invalidInput); + expect(result.success).toBe(false); + }); + + it("should fail parsing with invalid client address format", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + clientAddresses: ["not-an-address"], + }; + + const result = GetReputationSummarySchema.safeParse(invalidInput); + expect(result.success).toBe(false); + }); + + it("should fail parsing empty input", () => { + const emptyInput = {}; + const result = GetReputationSummarySchema.safeParse(emptyInput); + + expect(result.success).toBe(false); + }); + }); + + describe("ReadFeedbackSchema", () => { + it("should successfully parse valid input", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + clientAddress: MOCK_CLIENT_ADDRESS, + feedbackIndex: MOCK_FEEDBACK_INDEX, + }; + + const result = ReadFeedbackSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should fail parsing invalid client address", () => { + const invalidInput = { + agentId: MOCK_AGENT_ID, + clientAddress: "not-an-address", + feedbackIndex: MOCK_FEEDBACK_INDEX, + }; + + const result = ReadFeedbackSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + }); + + describe("GetClientsSchema", () => { + it("should successfully parse valid input", () => { + const validInput = { agentId: MOCK_AGENT_ID }; + const result = GetClientsSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should fail parsing empty input", () => { + const emptyInput = {}; + const result = GetClientsSchema.safeParse(emptyInput); + + expect(result.success).toBe(false); + }); + }); +}); + +describe("Give Feedback Action", () => { + let mockWallet: jest.Mocked; + let actionProvider: ERC8004ReputationActionProvider; + let uploadFeedbackSpy: jest.SpyInstance; + + beforeEach(() => { + mockWallet = { + sendTransaction: jest.fn(), + waitForTransactionReceipt: jest.fn(), + readContract: jest.fn(), + getAddress: jest.fn().mockReturnValue(MOCK_ADDRESS), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + // Create provider with Pinata JWT configured + actionProvider = erc8004ReputationActionProvider({ pinataJwt: "test-jwt" }); + + // Mock the IPFS upload function + uploadFeedbackSpy = jest.spyOn(utilsRep, "uploadFeedbackToIPFS").mockResolvedValue({ + feedbackUri: MOCK_FEEDBACK_URI, + feedbackHash: MOCK_FEEDBACK_HASH as `0x${string}`, + feedbackFile: { + agentRegistry: "eip155:84532:0x8004A818BFB912233c491871b3d84c89A494BD9e", + agentId: 123, + clientAddress: `eip155:84532:${MOCK_ADDRESS}`, + createdAt: new Date().toISOString(), + value: 85, + valueDecimals: 0, + }, + }); + }); + + afterEach(() => { + uploadFeedbackSpy.mockRestore(); + }); + + it("should successfully submit feedback", async () => { + mockWallet.readContract.mockResolvedValue("0xdifferentowner1234567890123456789012345678"); + mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); + mockWallet.waitForTransactionReceipt.mockResolvedValue({}); + + const args = { + agentId: MOCK_AGENT_ID, + value: 85, + valueDecimals: 0, + tag1: "quality", + tag2: "speed", + endpoint: "/api/v1", + }; + + const response = await actionProvider.giveFeedback(mockWallet, args); + + expect(uploadFeedbackSpy).toHaveBeenCalled(); + expect(mockWallet.sendTransaction).toHaveBeenCalled(); + expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith(TRANSACTION_HASH); + expect(response).toContain("Feedback submitted successfully!"); + expect(response).toContain(MOCK_AGENT_ID); + expect(response).toContain("85"); + expect(response).toContain("quality"); + expect(response).toContain(MOCK_FEEDBACK_URI); + expect(response).toContain(TRANSACTION_HASH); + }); + + it("should successfully submit feedback with minimal input", async () => { + mockWallet.readContract.mockResolvedValue("0xdifferentowner1234567890123456789012345678"); + mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); + mockWallet.waitForTransactionReceipt.mockResolvedValue({}); + + const args = { + agentId: MOCK_AGENT_ID, + value: 85, + valueDecimals: 0, + tag1: "", + tag2: "", + endpoint: "", + }; + + const response = await actionProvider.giveFeedback(mockWallet, args); + + expect(uploadFeedbackSpy).toHaveBeenCalled(); + expect(mockWallet.sendTransaction).toHaveBeenCalled(); + expect(response).toContain("Feedback submitted successfully!"); + }); + + it("should fail without Pinata JWT", async () => { + const providerWithoutJwt = erc8004ReputationActionProvider(); + + const args = { + agentId: MOCK_AGENT_ID, + value: 85, + valueDecimals: 0, + tag1: "", + tag2: "", + endpoint: "", + }; + + const response = await providerWithoutJwt.giveFeedback(mockWallet, args); + + expect(response).toContain("PINATA_JWT is required"); + expect(mockWallet.sendTransaction).not.toHaveBeenCalled(); + }); + + it("should handle error when IPFS upload fails", async () => { + mockWallet.readContract.mockResolvedValue("0xdifferentowner1234567890123456789012345678"); + uploadFeedbackSpy.mockRejectedValue(new Error("IPFS upload failed")); + + const args = { + agentId: MOCK_AGENT_ID, + value: 85, + valueDecimals: 0, + tag1: "", + tag2: "", + endpoint: "", + }; + + const response = await actionProvider.giveFeedback(mockWallet, args); + + expect(response).toContain("Error giving feedback"); + expect(response).toContain("IPFS upload failed"); + }); + + it("should handle error when transaction fails", async () => { + mockWallet.readContract.mockResolvedValue("0xdifferentowner1234567890123456789012345678"); + mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); + + const args = { + agentId: MOCK_AGENT_ID, + value: 85, + valueDecimals: 0, + tag1: "", + tag2: "", + endpoint: "", + }; + + const response = await actionProvider.giveFeedback(mockWallet, args); + + expect(response).toContain("Error giving feedback"); + expect(response).toContain("Transaction failed"); + }); +}); + +describe("Revoke Feedback Action", () => { + let mockWallet: jest.Mocked; + let actionProvider: ERC8004ReputationActionProvider; + + beforeEach(() => { + mockWallet = { + sendTransaction: jest.fn(), + waitForTransactionReceipt: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + actionProvider = erc8004ReputationActionProvider(); + }); + + it("should successfully revoke feedback", async () => { + mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); + mockWallet.waitForTransactionReceipt.mockResolvedValue({}); + + const args = { + agentId: MOCK_AGENT_ID, + feedbackIndex: MOCK_FEEDBACK_INDEX, + }; + + const response = await actionProvider.revokeFeedback(mockWallet, args); + + expect(mockWallet.sendTransaction).toHaveBeenCalled(); + expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith(TRANSACTION_HASH); + expect(response).toContain("Feedback revoked successfully!"); + expect(response).toContain(MOCK_AGENT_ID); + expect(response).toContain(MOCK_FEEDBACK_INDEX); + expect(response).toContain(TRANSACTION_HASH); + }); + + it("should handle error when revoking feedback fails", async () => { + mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); + + const args = { + agentId: MOCK_AGENT_ID, + feedbackIndex: MOCK_FEEDBACK_INDEX, + }; + + const response = await actionProvider.revokeFeedback(mockWallet, args); + + expect(response).toContain("Error revoking feedback"); + }); +}); + +describe("Append Response Action", () => { + let mockWallet: jest.Mocked; + let actionProvider: ERC8004ReputationActionProvider; + + beforeEach(() => { + mockWallet = { + sendTransaction: jest.fn(), + waitForTransactionReceipt: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + actionProvider = erc8004ReputationActionProvider(); + }); + + it("should successfully append response", async () => { + mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); + mockWallet.waitForTransactionReceipt.mockResolvedValue({}); + + const args = { + agentId: MOCK_AGENT_ID, + clientAddress: MOCK_CLIENT_ADDRESS, + feedbackIndex: MOCK_FEEDBACK_INDEX, + responseUri: "ipfs://QmResponse", + }; + + const response = await actionProvider.appendResponse(mockWallet, args); + + expect(mockWallet.sendTransaction).toHaveBeenCalled(); + expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith(TRANSACTION_HASH); + expect(response).toContain("Response appended successfully!"); + expect(response).toContain(MOCK_AGENT_ID); + expect(response).toContain(MOCK_CLIENT_ADDRESS); + expect(response).toContain(MOCK_FEEDBACK_INDEX); + expect(response).toContain(TRANSACTION_HASH); + }); + + it("should handle error when appending response fails", async () => { + mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); + + const args = { + agentId: MOCK_AGENT_ID, + clientAddress: MOCK_CLIENT_ADDRESS, + feedbackIndex: MOCK_FEEDBACK_INDEX, + responseUri: "ipfs://QmResponse", + }; + + const response = await actionProvider.appendResponse(mockWallet, args); + + expect(response).toContain("Error appending response"); + }); +}); + +describe("Get Reputation Summary Action", () => { + let mockWallet: jest.Mocked; + let actionProvider: ERC8004ReputationActionProvider; + + beforeEach(() => { + mockWallet = { + readContract: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + actionProvider = erc8004ReputationActionProvider(); + }); + + it("should successfully get reputation summary with clientAddresses", async () => { + mockWallet.readContract.mockResolvedValue([BigInt(10), BigInt(850), 1]); + + const args = { + agentId: MOCK_AGENT_ID, + clientAddresses: [MOCK_CLIENT_ADDRESS], + tag1: "", + tag2: "", + }; + + const response = await actionProvider.getReputationSummary(mockWallet, args); + + expect(mockWallet.readContract).toHaveBeenCalled(); + expect(response).toContain("Reputation Summary"); + expect(response).toContain(MOCK_AGENT_ID); + expect(response).toContain("Feedback Count: 10"); + expect(response).toContain("85.0"); + expect(response).toContain("1 trusted address"); + }); + + it("should successfully get reputation summary with multiple clients and tag filters", async () => { + mockWallet.readContract.mockResolvedValue([BigInt(5), BigInt(90), 0]); + + const args = { + agentId: MOCK_AGENT_ID, + clientAddresses: [MOCK_CLIENT_ADDRESS, "0xabcdef1234567890123456789012345678901234"], + tag1: "quality", + tag2: "speed", + }; + + const response = await actionProvider.getReputationSummary(mockWallet, args); + + expect(mockWallet.readContract).toHaveBeenCalled(); + expect(response).toContain("2 trusted address"); + expect(response).toContain("quality"); + expect(response).toContain("speed"); + expect(response).toContain("Feedback Count: 5"); + }); + + it("should pass clientAddresses to the contract call", async () => { + mockWallet.readContract.mockResolvedValue([BigInt(5), BigInt(90), 0]); + + const args = { + agentId: MOCK_AGENT_ID, + clientAddresses: [MOCK_CLIENT_ADDRESS], + tag1: "", + tag2: "", + }; + + await actionProvider.getReputationSummary(mockWallet, args); + + expect(mockWallet.readContract).toHaveBeenCalledWith( + expect.objectContaining({ + functionName: "getSummary", + args: [BigInt(MOCK_AGENT_ID), [MOCK_CLIENT_ADDRESS], "", ""], + }), + ); + }); + + it("should handle error when getting summary fails", async () => { + mockWallet.readContract.mockRejectedValue(new Error("Read failed")); + + const args = { + agentId: MOCK_AGENT_ID, + clientAddresses: [MOCK_CLIENT_ADDRESS], + tag1: "", + tag2: "", + }; + + const response = await actionProvider.getReputationSummary(mockWallet, args); + + expect(response).toContain("Error getting reputation summary"); + }); +}); + +describe("Read Feedback Action", () => { + let mockWallet: jest.Mocked; + let actionProvider: ERC8004ReputationActionProvider; + + beforeEach(() => { + mockWallet = { + readContract: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + actionProvider = erc8004ReputationActionProvider(); + }); + + it("should successfully read feedback", async () => { + mockWallet.readContract.mockResolvedValue([BigInt(85), 0, "quality", "speed", false]); + + const args = { + agentId: MOCK_AGENT_ID, + clientAddress: MOCK_CLIENT_ADDRESS, + feedbackIndex: MOCK_FEEDBACK_INDEX, + }; + + const response = await actionProvider.readFeedback(mockWallet, args); + + expect(mockWallet.readContract).toHaveBeenCalled(); + expect(response).toContain("Feedback Entry"); + expect(response).toContain(MOCK_AGENT_ID); + expect(response).toContain(MOCK_CLIENT_ADDRESS); + expect(response).toContain("Value: 85"); + expect(response).toContain("quality"); + expect(response).toContain("speed"); + expect(response).toContain("Revoked: No"); + }); + + it("should show revoked status correctly", async () => { + mockWallet.readContract.mockResolvedValue([BigInt(85), 0, "quality", "", true]); + + const args = { + agentId: MOCK_AGENT_ID, + clientAddress: MOCK_CLIENT_ADDRESS, + feedbackIndex: MOCK_FEEDBACK_INDEX, + }; + + const response = await actionProvider.readFeedback(mockWallet, args); + + expect(response).toContain("Revoked: Yes"); + }); + + it("should handle feedback with decimals", async () => { + mockWallet.readContract.mockResolvedValue([BigInt(8550), 2, "quality", "", false]); + + const args = { + agentId: MOCK_AGENT_ID, + clientAddress: MOCK_CLIENT_ADDRESS, + feedbackIndex: MOCK_FEEDBACK_INDEX, + }; + + const response = await actionProvider.readFeedback(mockWallet, args); + + expect(response).toContain("85.50"); + }); + + it("should handle error when reading feedback fails", async () => { + mockWallet.readContract.mockRejectedValue(new Error("Read failed")); + + const args = { + agentId: MOCK_AGENT_ID, + clientAddress: MOCK_CLIENT_ADDRESS, + feedbackIndex: MOCK_FEEDBACK_INDEX, + }; + + const response = await actionProvider.readFeedback(mockWallet, args); + + expect(response).toContain("Error reading feedback"); + }); +}); + +describe("Get Clients Action", () => { + let mockWallet: jest.Mocked; + let actionProvider: ERC8004ReputationActionProvider; + + beforeEach(() => { + mockWallet = { + readContract: jest.fn(), + getName: jest.fn().mockReturnValue("evm_wallet_provider"), + getNetwork: jest.fn().mockReturnValue({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + } as unknown as jest.Mocked; + + actionProvider = erc8004ReputationActionProvider(); + }); + + it("should successfully get clients list", async () => { + const mockClients = [MOCK_CLIENT_ADDRESS, "0xabcdef1234567890123456789012345678901234"]; + mockWallet.readContract.mockResolvedValue(mockClients); + + const args = { + agentId: MOCK_AGENT_ID, + }; + + const response = await actionProvider.getClients(mockWallet, args); + + expect(mockWallet.readContract).toHaveBeenCalled(); + expect(response).toContain("Feedback Clients"); + expect(response).toContain(MOCK_AGENT_ID); + expect(response).toContain("Total: 2 clients"); + expect(response).toContain(MOCK_CLIENT_ADDRESS); + }); + + it("should handle empty clients list", async () => { + mockWallet.readContract.mockResolvedValue([]); + + const args = { + agentId: MOCK_AGENT_ID, + }; + + const response = await actionProvider.getClients(mockWallet, args); + + expect(response).toContain("has not received any feedback yet"); + }); + + it("should handle error when getting clients fails", async () => { + mockWallet.readContract.mockRejectedValue(new Error("Read failed")); + + const args = { + agentId: MOCK_AGENT_ID, + }; + + const response = await actionProvider.getClients(mockWallet, args); + + expect(response).toContain("Error getting clients"); + }); +}); + +describe("supportsNetwork", () => { + const actionProvider = erc8004ReputationActionProvider(); + + it("should return true for supported EVM networks", () => { + expect( + actionProvider.supportsNetwork({ + protocolFamily: "evm", + networkId: "base-sepolia", + }), + ).toBe(true); + }); + + it("should return false for non-EVM networks", () => { + expect( + actionProvider.supportsNetwork({ + protocolFamily: "solana", + }), + ).toBe(false); + }); + + it("should return false for unsupported EVM networks", () => { + expect( + actionProvider.supportsNetwork({ + protocolFamily: "evm", + networkId: "polygon-mainnet", + }), + ).toBe(false); + }); +}); diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts new file mode 100644 index 000000000..7efab3166 --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts @@ -0,0 +1,445 @@ +import { z } from "zod"; +import { Hex, encodeFunctionData, zeroHash } from "viem"; +import { ActionProvider } from "../actionProvider"; +import { Network } from "../../network"; +import { CreateAction } from "../actionDecorator"; +import { EvmWalletProvider } from "../../wallet-providers"; +import { + GiveFeedbackSchema, + RevokeFeedbackSchema, + AppendResponseSchema, + GetReputationSummarySchema, + ReadFeedbackSchema, + GetClientsSchema, +} from "./reputationSchemas"; +import { getChainIdFromNetwork, getRegistryAddress, isNetworkSupported } from "./constants"; +import { REPUTATION_REGISTRY_ABI, IDENTITY_REGISTRY_ABI } from "./abi"; +import { PinataConfig, ipfsToHttpUrl } from "./utils"; +import { uploadFeedbackToIPFS } from "./utils_rep"; + +/** + * Configuration options for the ERC8004 Reputation Action Provider + */ +export interface ERC8004ReputationActionProviderConfig { + pinataJwt?: string; +} + +/** + * ERC8004ReputationActionProvider provides actions for the ERC-8004 Reputation Registry. + * This includes giving feedback, revoking feedback, responding to feedback, and querying reputation. + */ +export class ERC8004ReputationActionProvider extends ActionProvider { + private pinataConfig?: PinataConfig; + + /** + * Constructor for the ERC8004ReputationActionProvider. + * + * @param config - Optional configuration including Pinata JWT for IPFS uploads + */ + constructor(config?: ERC8004ReputationActionProviderConfig) { + super("erc8004_reputation", []); + if (config?.pinataJwt) { + this.pinataConfig = { jwt: config.pinataJwt }; + } + } + + /** + * Gives feedback to an agent. + * + * @param walletProvider - The wallet provider to use for the transaction + * @param args - The feedback details + * @returns A message confirming the feedback submission + */ + @CreateAction({ + name: "give_feedback", + description: ` +Submits feedback for an agent on the ERC-8004 Reputation Registry. +The value + valueDecimals pair represents a signed fixed-point number. + +The feedback is automatically: +1. Generated as an ERC-8004 compliant JSON file +2. Uploaded to IPFS via Pinata +3. Submitted onchain with the IPFS URI and keccak256 hash + +Examples: +| tag1 | What it measures | Human value | value | valueDecimals | +|------------------|---------------------------|-------------|-------|---------------| +| starred | Quality rating (0-100) | 87/100 | 87 | 0 | +| reachable | Endpoint reachable (bool) | true | 1 | 0 | +| uptime | Endpoint uptime (%) | 99.77% | 9977 | 2 | +| successRate | Success rate (%) | 89% | 89 | 0 | +| responseTime | Response time (ms) | 560ms | 560 | 0 | +| revenues | Cumulative revenues (USD) | $560 | 560 | 0 | +| tradingYield | Yield (with tag2=period) | -3.2% | -32 | 1 | + +IMPORTANT: Always ignore optional fields: endpoint, mcp, a2a, oasf, proofOfPayment, and comment, unless you are explicitly asked to use them. Do not ask the user to provide them. +`, + schema: GiveFeedbackSchema, + }) + async giveFeedback( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + if (!this.pinataConfig) { + return "Error: PINATA_JWT is required for giving feedback. Please configure the provider with a Pinata JWT."; + } + + console.log("args", args); + + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const reputationRegistryAddress = getRegistryAddress("reputation", chainId); + const identityRegistryAddress = getRegistryAddress("identity", chainId); + const clientAddress = walletProvider.getAddress(); + + // Check that the client is not the owner of the agent (prevent self-feedback) + const agentOwner = await walletProvider.readContract({ + address: identityRegistryAddress, + abi: IDENTITY_REGISTRY_ABI, + functionName: "ownerOf", + args: [BigInt(args.agentId)], + }); + + if ((agentOwner as string).toLowerCase() === clientAddress.toLowerCase()) { + return "Error: You cannot give feedback to your own agent."; + } + + // Generate and upload feedback file to IPFS + const { feedbackUri, feedbackHash } = await uploadFeedbackToIPFS(this.pinataConfig, { + agentId: parseInt(args.agentId, 10), + chainId, + identityRegistryAddress, + clientAddress: clientAddress as Hex, + value: args.value, + valueDecimals: args.valueDecimals ?? 0, + tag1: args.tag1, + tag2: args.tag2, + endpoint: args.endpoint, + mcp: args.mcp, + a2a: args.a2a, + oasf: args.oasf, + proofOfPayment: args.proofOfPayment, + comment: args.comment, + }); + + // Submit feedback on-chain with IPFS URI and hash + const hash = await walletProvider.sendTransaction({ + to: reputationRegistryAddress, + data: encodeFunctionData({ + abi: REPUTATION_REGISTRY_ABI, + functionName: "giveFeedback", + args: [ + BigInt(args.agentId), + BigInt(args.value), + args.valueDecimals ?? 0, + args.tag1 ?? "", + args.tag2 ?? "", + args.endpoint ?? "", + feedbackUri, + feedbackHash, + ], + }), + }); + + await walletProvider.waitForTransactionReceipt(hash); + + const httpUrl = ipfsToHttpUrl(feedbackUri); + + const commentLine = args.comment ? `\nComment: ${args.comment}` : ""; + return `Feedback submitted successfully!\n\nAgent ID: ${args.agentId}\nValue: ${args.value}${args.valueDecimals ? ` (${args.valueDecimals} decimals)` : ""}\nTags: ${args.tag1 || "(none)"}${args.tag2 ? `, ${args.tag2}` : ""}\nEndpoint: ${args.endpoint || "(none)"}${commentLine}\n\nFeedback File:\n- IPFS URI: ${feedbackUri}\n- HTTP Gateway: ${httpUrl}\n- Hash: ${feedbackHash}\n\nTransaction hash: ${hash}`; + } catch (error) { + return `Error giving feedback: ${error}`; + } + } + + /** + * Revokes previously submitted feedback. + * + * @param walletProvider - The wallet provider to use for the transaction + * @param args - The agentId and feedbackIndex to revoke + * @returns A message confirming the revocation + */ + @CreateAction({ + name: "revoke_feedback", + description: ` +Revokes feedback that you previously submitted. + +You can only revoke feedback that you gave (from your address). +The feedback index is returned when you submit feedback, or can be +found by reading the feedback entries. +`, + schema: RevokeFeedbackSchema, + }) + async revokeFeedback( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("reputation", chainId); + + const hash = await walletProvider.sendTransaction({ + to: registryAddress, + data: encodeFunctionData({ + abi: REPUTATION_REGISTRY_ABI, + functionName: "revokeFeedback", + args: [BigInt(args.agentId), BigInt(args.feedbackIndex)], + }), + }); + + await walletProvider.waitForTransactionReceipt(hash); + + return `Feedback revoked successfully!\n\nAgent ID: ${args.agentId}\nFeedback Index: ${args.feedbackIndex}\nTransaction hash: ${hash}`; + } catch (error) { + return `Error revoking feedback: ${error}`; + } + } + + /** + * Appends a response to feedback received by an agent you own. + * + * @param walletProvider - The wallet provider to use for the transaction + * @param args - The feedback details and response URI + * @returns A message confirming the response was appended + */ + @CreateAction({ + name: "append_response", + description: ` +Appends a response to feedback on the ERC-8004 Reputation Registry. + +Per ERC-8004 spec, anyone can append responses to feedback: +- Agent owners can respond to client feedback (e.g., showing a refund) +- Data intelligence aggregators can tag feedback as spam +- Auditors can add verification notes + +Parameters: +- responseHash: Optional KECCAK-256 hash for non-IPFS URIs + +The response is stored as a URI pointing to off-chain content. +`, + schema: AppendResponseSchema, + }) + async appendResponse( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("reputation", chainId); + + const hash = await walletProvider.sendTransaction({ + to: registryAddress, + data: encodeFunctionData({ + abi: REPUTATION_REGISTRY_ABI, + functionName: "appendResponse", + args: [ + BigInt(args.agentId), + args.clientAddress as Hex, + BigInt(args.feedbackIndex), + args.responseUri, + (args.responseHash as Hex) ?? zeroHash, + ], + }), + }); + + await walletProvider.waitForTransactionReceipt(hash); + + return `Response appended successfully!\n\nAgent ID: ${args.agentId}\nClient: ${args.clientAddress}\nFeedback Index: ${args.feedbackIndex}\nResponse URI: ${args.responseUri}\n\nTransaction hash: ${hash}`; + } catch (error) { + return `Error appending response: ${error}`; + } + } + + /** + * Gets aggregated reputation statistics for an agent. + * + * @param walletProvider - The wallet provider to use for reading + * @param args - The agentId and optional tag filters + * @returns A message with the reputation summary + */ + @CreateAction({ + name: "get_reputation_summary", + description: ` +Gets aggregated reputation statistics for an agent from trusted clients. + +Per ERC-8004 spec, clientAddresses MUST be provided to mitigate Sybil/spam attacks. +Results without filtering by clientAddresses would be vulnerable to fake feedback. + +Returns: +- Total feedback count from specified clients +- Summary value (aggregated rating) +- Value decimals + +You can additionally filter by tag1 and/or tag2 for category-specific summaries. +This is a read-only operation that doesn't require gas. +`, + schema: GetReputationSummarySchema, + }) + async getReputationSummary( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("reputation", chainId); + + const result = await walletProvider.readContract({ + address: registryAddress, + abi: REPUTATION_REGISTRY_ABI, + functionName: "getSummary", + args: [ + BigInt(args.agentId), + args.clientAddresses as Hex[], + args.tag1 ?? "", + args.tag2 ?? "", + ], + }); + + const [count, summaryValue, summaryValueDecimals] = result as [bigint, bigint, number]; + + // Format the summary value with decimals + let formattedValue = summaryValue.toString(); + if (summaryValueDecimals > 0) { + const valueStr = summaryValue.toString().padStart(summaryValueDecimals + 1, "0"); + const intPart = valueStr.slice(0, -summaryValueDecimals) || "0"; + const decPart = valueStr.slice(-summaryValueDecimals); + formattedValue = `${intPart}.${decPart}`; + } + + const clientFilter = `\nClients: ${args.clientAddresses.length} trusted address(es)`; + const tagFilter = + args.tag1 || args.tag2 + ? `\nTags: ${args.tag1 || "(any)"}${args.tag2 ? ` / ${args.tag2}` : ""}` + : ""; + + return `Reputation Summary for Agent ${args.agentId}${clientFilter}${tagFilter}\n\nFeedback Count: ${count}\nSummary Value: ${formattedValue}${summaryValueDecimals > 0 ? ` (${summaryValueDecimals} decimals)` : ""}`; + } catch (error) { + return `Error getting reputation summary: ${error}`; + } + } + + /** + * Reads a specific feedback entry. + * + * @param walletProvider - The wallet provider to use for reading + * @param args - The agentId, clientAddress, and feedbackIndex + * @returns A message with the feedback details + */ + @CreateAction({ + name: "read_feedback", + description: ` +Reads a specific feedback entry from the Reputation Registry. + +Returns the feedback value, decimals, tags, and revocation status. +This is a read-only operation that doesn't require gas. +`, + schema: ReadFeedbackSchema, + }) + async readFeedback( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("reputation", chainId); + + const result = await walletProvider.readContract({ + address: registryAddress, + abi: REPUTATION_REGISTRY_ABI, + functionName: "readFeedback", + args: [BigInt(args.agentId), args.clientAddress as Hex, BigInt(args.feedbackIndex)], + }); + + const [value, valueDecimals, tag1, tag2, isRevoked] = result as [ + bigint, + number, + string, + string, + boolean, + ]; + + // Format the value with decimals + let formattedValue = value.toString(); + if (valueDecimals > 0) { + const valueStr = value.toString().padStart(valueDecimals + 1, "0"); + const intPart = valueStr.slice(0, -valueDecimals) || "0"; + const decPart = valueStr.slice(-valueDecimals); + formattedValue = `${intPart}.${decPart}`; + } + + return `Feedback Entry\n\nAgent ID: ${args.agentId}\nClient: ${args.clientAddress}\nFeedback Index: ${args.feedbackIndex}\n\nValue: ${formattedValue}${valueDecimals > 0 ? ` (${valueDecimals} decimals)` : ""}\nTag 1: ${tag1 || "(none)"}\nTag 2: ${tag2 || "(none)"}\nRevoked: ${isRevoked ? "Yes" : "No"}`; + } catch (error) { + return `Error reading feedback: ${error}`; + } + } + + /** + * Gets the list of clients who have given feedback to an agent. + * + * @param walletProvider - The wallet provider to use for reading + * @param args - The agentId to get clients for + * @returns A message with the list of client addresses + */ + @CreateAction({ + name: "get_feedback_clients", + description: ` +Gets the list of client addresses who have given feedback to an agent. + +This is useful for iterating through all feedback entries. +This is a read-only operation that doesn't require gas. +`, + schema: GetClientsSchema, + }) + async getClients( + walletProvider: EvmWalletProvider, + args: z.infer, + ): Promise { + try { + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("reputation", chainId); + + const clients = await walletProvider.readContract({ + address: registryAddress, + abi: REPUTATION_REGISTRY_ABI, + functionName: "getClients", + args: [BigInt(args.agentId)], + }); + + const clientList = clients as Hex[]; + + if (clientList.length === 0) { + return `Agent ${args.agentId} has not received any feedback yet.`; + } + + const clientListStr = clientList.map((c, i) => `${i + 1}. ${c}`).join("\n"); + + return `Feedback Clients for Agent ${args.agentId}\n\nTotal: ${clientList.length} clients\n\n${clientListStr}`; + } catch (error) { + return `Error getting clients: ${error}`; + } + } + + /** + * Checks if the action provider supports the given network. + * + * @param network - The network to check + * @returns True if the network is supported for ERC-8004 + */ + supportsNetwork = (network: Network) => + network.protocolFamily === "evm" && isNetworkSupported(network); +} + +/** + * Factory function to create an ERC8004ReputationActionProvider + * + * @param config - Optional configuration including Pinata JWT + * @returns A new ERC8004ReputationActionProvider instance + */ +export const erc8004ReputationActionProvider = (config?: ERC8004ReputationActionProviderConfig) => + new ERC8004ReputationActionProvider(config); diff --git a/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts b/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts new file mode 100644 index 000000000..3244a16e7 --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts @@ -0,0 +1,83 @@ +import { z } from "zod"; + +/** + * Input schema for registering an agent (mints agent NFT). + * Use only when user provides no input - just registers and returns agentId. + */ +export const RegisterAgentSchema = z + .object({}) + .strip() + .describe( + "Registers a new agent by minting an agent NFT. Returns the agentId. Use only when user provides no input at all.", + ); + +/** + * Input schema for setting agent registration (upload to IPFS + set URI on-chain). + * Use when you have an agentId and want to set its metadata. + */ +export const SetAgentRegistrationSchema = z + .object({ + agentId: z.string().describe("The agent ID to set registration for"), + name: z.string().min(1).max(100).describe("The name of the agent"), + description: z + .string() + .max(500) + .optional() + .describe("A description of the agent's capabilities"), + image: z.string().optional().describe("Optional image URL (https:// or ipfs://) for the agent"), + }) + .strip() + .describe( + "Uploads registration JSON to IPFS and sets the agent URI on-chain in one action. Use when you already have an agentId.", + ); + +/** + * Input schema for getting agent identity information. + */ +export const GetAgentIdentitySchema = z + .object({ + agentId: z.string().describe("The agent ID to look up"), + }) + .strip() + .describe("Gets the owner and URI for an agent"); + +/** + * Input schema for setting on-chain metadata. + */ +export const SetMetadataSchema = z + .object({ + agentId: z.string().describe("The agent ID to set metadata for"), + key: z.string().min(1).max(100).describe("The metadata key"), + value: z.string().describe("The metadata value (will be encoded as bytes)"), + }) + .strip() + .describe("Sets an on-chain key-value metadata entry for an agent"); + +/** + * Input schema for getting on-chain metadata. + */ +export const GetMetadataSchema = z + .object({ + agentId: z.string().describe("The agent ID to get metadata for"), + key: z.string().min(1).max(100).describe("The metadata key to retrieve"), + }) + .strip() + .describe("Gets an on-chain metadata value for an agent by key"); + +/** + * Input schema for complete agent registration (register + upload + set URI). + */ +export const RegisterAgentCompleteSchema = z + .object({ + name: z.string().min(1).max(100).describe("The name of the agent"), + description: z + .string() + .max(500) + .optional() + .describe("A description of the agent's capabilities"), + image: z.string().optional().describe("Optional image URL (https:// or ipfs://) for the agent"), + }) + .strip() + .describe( + "Complete agent registration: registers agent, uploads registration JSON to IPFS, and sets the agent URI", + ); diff --git a/typescript/agentkit/src/action-providers/erc8004/index.ts b/typescript/agentkit/src/action-providers/erc8004/index.ts new file mode 100644 index 000000000..7193e96b1 --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/index.ts @@ -0,0 +1,42 @@ +// ERC-8004 Action Providers +export * from "./erc8004IdentityActionProvider"; +export * from "./erc8004ReputationActionProvider"; + +// Schemas +export * from "./identitySchemas"; +export * from "./reputationSchemas"; + +// Constants +export { + SUPPORTED_CHAIN_IDS, + REGISTRY_ADDRESSES, + SUPPORTED_NETWORK_IDS, + getChainIdFromNetwork, + getRegistryAddress, + isNetworkSupported, +} from "./constants"; + +export type { SupportedNetworkId } from "./constants"; + +// Shared utilities +export { uploadJsonToIPFS, uploadFileToIPFS, ipfsToHttpUrl, formatCAIP10Address } from "./utils"; + +export type { PinataConfig } from "./utils"; + +// Identity utilities +export { generateAgentRegistration, uploadAgentRegistration } from "./utils_id"; + +export type { AgentRegistration, GenerateRegistrationParams } from "./utils_id"; + +// Reputation utilities +export { generateFeedbackFile, uploadFeedbackToIPFS, computeJsonHash } from "./utils_rep"; + +export type { + FeedbackFile, + GenerateFeedbackParams, + FeedbackUploadResult, + McpFeedbackContext, + A2aFeedbackContext, + OasfFeedbackContext, + ProofOfPayment, +} from "./utils_rep"; diff --git a/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts b/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts new file mode 100644 index 000000000..e8fdc9399 --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts @@ -0,0 +1,212 @@ +import { z } from "zod"; + +/** + * MCP context schema for feedback + */ +const McpContextSchema = z + .object({ + tool: z.string().optional().describe("The MCP tool name being rated"), + prompt: z.string().optional().describe("The MCP prompt name being rated"), + resource: z.string().optional().describe("The MCP resource name being rated"), + }) + .optional() + .describe("MCP-specific context for the feedback"); + +/** + * A2A context schema for feedback + */ +const A2aContextSchema = z + .object({ + skills: z.array(z.string()).optional().describe("A2A skill identifiers"), + contextId: z.string().optional().describe("A2A context identifier"), + taskId: z.string().optional().describe("A2A task identifier"), + }) + .optional() + .describe("A2A-specific context for the feedback"); + +/** + * OASF context schema for feedback + */ +const OasfContextSchema = z + .object({ + skills: z.array(z.string()).optional().describe("OASF skill identifiers"), + domains: z.array(z.string()).optional().describe("OASF domain identifiers"), + }) + .optional() + .describe("OASF-specific context for the feedback"); + +/** + * Proof of payment schema for feedback (e.g., x402) + */ +const ProofOfPaymentSchema = z + .object({ + fromAddress: z.string().describe("The address that sent payment"), + toAddress: z.string().describe("The address that received payment"), + chainId: z.string().describe("The chain ID where payment occurred"), + txHash: z.string().describe("The transaction hash of the payment"), + }) + .optional() + .describe("Proof of payment context (e.g., for x402)"); + +/** + * Input schema for giving feedback to an agent. + * + * The value + valueDecimals pair represents a signed fixed-point number (int128). + * Examples from ERC-8004 spec: + * - Quality rating 87/100: value=87, valueDecimals=0, tag1="starred" + * - Uptime 99.77%: value=9977, valueDecimals=2, tag1="uptime" + * - Response time 560ms: value=560, valueDecimals=0, tag1="responseTime" + * - Trading yield -3.2%: value=-32, valueDecimals=1, tag1="tradingYield" + * + * Feedback is automatically uploaded to IPFS and the URI + hash are included onchain. + */ +export const GiveFeedbackSchema = z + .object({ + agentId: z.string().describe("The agent ID to give feedback for"), + value: z + .number() + .int() + .describe( + "The feedback value as a signed integer (int128). Combined with valueDecimals to form a fixed-point number. Examples: 87 (rating 87/100), 9977 with decimals=2 (99.77%), 560 (560ms), -32 with decimals=1 (-3.2%)", + ), + valueDecimals: z + .number() + .int() + .min(0) + .max(18) + .optional() + .default(0) + .describe( + "Number of decimal places for the value (0-18, default: 0). E.g., valueDecimals=2 means value=9977 represents 99.77", + ), + tag1: z + .string() + .max(50) + .optional() + .default("") + .describe( + "Primary category tag indicating what is being measured. Examples: 'starred' (quality 0-100), 'reachable' (binary 0/1), 'uptime' (%), 'successRate' (%), 'responseTime' (ms), 'revenues' (USD), 'tradingYield' (%)", + ), + tag2: z + .string() + .max(50) + .optional() + .default("") + .describe( + "Secondary category tag for more specific categorization (e.g., 'day', 'week', 'month' for yield periods)", + ), + endpoint: z + .string() + .max(200) + .optional() + .default("") + .describe( + "The endpoint or service being rated (e.g., '/api/v1/chat', 'https://agent.example.com/GetPrice')", + ), + mcp: McpContextSchema, + a2a: A2aContextSchema, + oasf: OasfContextSchema, + proofOfPayment: ProofOfPaymentSchema, + comment: z + .string() + .max(500) + .optional() + .describe("Optional user review comment (max 500 characters)"), + }) + .strip() + .describe( + "Submits feedback for an agent on the ERC-8004 Reputation Registry. Feedback file is automatically uploaded to IPFS.", + ); + +/** + * Input schema for revoking feedback. + */ +export const RevokeFeedbackSchema = z + .object({ + agentId: z.string().describe("The agent ID the feedback was given to"), + feedbackIndex: z + .string() + .describe("The index of the feedback to revoke (from when you gave it)"), + }) + .strip() + .describe("Revokes previously submitted feedback"); + +/** + * Input schema for appending a response to feedback. + * Anyone can append responses (e.g., agent owner showing a refund, data intelligence aggregators tagging spam). + */ +export const AppendResponseSchema = z + .object({ + agentId: z.string().describe("The agent ID that received the feedback"), + clientAddress: z + .string() + .regex(/^0x[a-fA-F0-9]{40}$/, "Invalid Ethereum address format") + .describe("The address of the client who gave the feedback"), + feedbackIndex: z.string().describe("The index of the feedback to respond to"), + responseUri: z.string().describe("URI to the response content (e.g., ipfs://Qm... link)"), + responseHash: z + .string() + .regex(/^0x[a-fA-F0-9]{64}$/, "Invalid bytes32 hash format") + .optional() + .describe( + "Optional KECCAK-256 hash of the responseUri content for integrity verification. Not required for IPFS URIs (content-addressed).", + ), + }) + .strip() + .describe( + "Appends a response to feedback. Anyone can respond (agent owners, data aggregators, etc.)", + ); + +/** + * Input schema for getting reputation summary. + * Per ERC-8004 spec: clientAddresses MUST be provided (non-empty) to mitigate Sybil/spam attacks. + */ +export const GetReputationSummarySchema = z + .object({ + agentId: z.string().describe("The agent ID to get reputation summary for"), + clientAddresses: z + .array(z.string().regex(/^0x[a-fA-F0-9]{40}$/, "Invalid Ethereum address format")) + .min(1, "At least one client address is required to mitigate Sybil/spam attacks") + .describe( + "Array of client addresses to filter by. Required per ERC-8004 spec to prevent Sybil attacks.", + ), + tag1: z + .string() + .optional() + .default("") + .describe("Optional primary tag filter (e.g., 'starred', 'uptime', 'responseTime')"), + tag2: z + .string() + .optional() + .default("") + .describe("Optional secondary tag filter (e.g., 'day', 'week', 'month')"), + }) + .strip() + .describe( + "Gets aggregated reputation statistics for an agent, filtered by trusted client addresses", + ); + +/** + * Input schema for reading specific feedback. + */ +export const ReadFeedbackSchema = z + .object({ + agentId: z.string().describe("The agent ID to read feedback for"), + clientAddress: z + .string() + .regex(/^0x[a-fA-F0-9]{40}$/, "Invalid Ethereum address format") + .describe("The address of the client who gave the feedback"), + feedbackIndex: z.string().describe("The index of the feedback entry"), + }) + .strip() + .describe("Reads a specific feedback entry"); + +/** + * Input schema for getting clients who gave feedback. + */ +export const GetClientsSchema = z + .object({ + agentId: z.string().describe("The agent ID to get clients for"), + }) + .strip() + .describe("Gets the list of client addresses who have given feedback to an agent"); diff --git a/typescript/agentkit/src/action-providers/erc8004/utils.ts b/typescript/agentkit/src/action-providers/erc8004/utils.ts new file mode 100644 index 000000000..6acc5933a --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/utils.ts @@ -0,0 +1,150 @@ +/** + * Shared utilities for ERC-8004 action providers + */ + +/** + * Configuration for Pinata IPFS service + */ +export interface PinataConfig { + jwt: string; +} + +/** + * Upload response from Pinata + */ +interface PinataUploadResponse { + IpfsHash: string; + PinSize: number; + Timestamp: string; + isDuplicate?: boolean; +} + +/** + * Uploads JSON data to IPFS using Pinata + * + * @param pinataConfig - Pinata configuration with JWT + * @param json - The JSON object to upload + * @param name - Name for the pinned content + * @returns The IPFS hash (CID) + */ +export async function uploadJsonToIPFS( + pinataConfig: PinataConfig, + json: object, + name: string, +): Promise { + const requestBody = { + pinataOptions: { + cidVersion: 1, + }, + pinataMetadata: { + name: `${name}.json`, + }, + pinataContent: json, + }; + + const response = await fetch("https://api.pinata.cloud/pinning/pinJSONToIPFS", { + method: "POST", + headers: { + Authorization: `Bearer ${pinataConfig.jwt}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(requestBody), + }); + + if (!response.ok) { + const error = await response.json(); + throw new Error(`Failed to upload JSON to IPFS: ${error.message || response.statusText}`); + } + + const data: PinataUploadResponse = await response.json(); + return data.IpfsHash; +} + +/** + * Uploads a file to IPFS using Pinata + * + * @param pinataConfig - Pinata configuration with JWT + * @param fileData - Base64 encoded file data + * @param fileName - Name for the file + * @param mimeType - MIME type of the file + * @returns The IPFS hash (CID) + */ +export async function uploadFileToIPFS( + pinataConfig: PinataConfig, + fileData: string, + fileName: string, + mimeType: string, +): Promise { + const formData = new FormData(); + + // Convert base64 to Blob and then to File + const byteCharacters = atob(fileData); + const byteArrays: Uint8Array[] = []; + + for (let offset = 0; offset < byteCharacters.length; offset += 1024) { + const slice = byteCharacters.slice(offset, offset + 1024); + const byteNumbers = new Array(slice.length); + for (let i = 0; i < slice.length; i++) { + byteNumbers[i] = slice.charCodeAt(i); + } + const byteArray = new Uint8Array(byteNumbers); + byteArrays.push(byteArray); + } + + const blob = new Blob(byteArrays, { type: mimeType }); + const file = new File([blob], fileName, { type: mimeType }); + + formData.append("file", file); + + const pinataMetadata = { + name: fileName, + }; + formData.append("pinataMetadata", JSON.stringify(pinataMetadata)); + + const pinataOptions = { + cidVersion: 1, + }; + formData.append("pinataOptions", JSON.stringify(pinataOptions)); + + const response = await fetch("https://api.pinata.cloud/pinning/pinFileToIPFS", { + method: "POST", + headers: { + Authorization: `Bearer ${pinataConfig.jwt}`, + }, + body: formData, + }); + + if (!response.ok) { + const error = await response.json(); + throw new Error(`Failed to upload file to IPFS: ${error.message || response.statusText}`); + } + + const data: PinataUploadResponse = await response.json(); + return data.IpfsHash; +} + +/** + * Converts an IPFS URI to an HTTP gateway URL + * + * @param ipfsUri - The IPFS URI (ipfs://...) + * @param gateway - The gateway to use (default: ipfs.io) + * @returns The HTTP gateway URL + */ +export function ipfsToHttpUrl(ipfsUri: string, gateway = "ipfs.io"): string { + if (!ipfsUri.startsWith("ipfs://")) { + return ipfsUri; + } + const cid = ipfsUri.replace("ipfs://", ""); + return `https://${gateway}/ipfs/${cid}`; +} + +/** + * Formats a CAIP-10 address identifier + * + * @param chainId - The chain ID + * @param address - The address + * @returns CAIP-10 formatted string (e.g., "eip155:84532:0x1234...") + */ +export function formatCAIP10Address(chainId: number, address: string): string { + return `eip155:${chainId}:${address}`; +} diff --git a/typescript/agentkit/src/action-providers/erc8004/utils_id.ts b/typescript/agentkit/src/action-providers/erc8004/utils_id.ts new file mode 100644 index 000000000..926a19d86 --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/utils_id.ts @@ -0,0 +1,84 @@ +/** + * Identity-specific utilities for ERC-8004 Identity Registry + */ +import { Hex } from "viem"; +import { PinataConfig, uploadJsonToIPFS, formatCAIP10Address } from "./utils"; + +/** + * ERC-8004 Agent Registration structure + * + * @see https://eips.ethereum.org/EIPS/eip-8004#registration-v1 + */ +export interface AgentRegistration { + type: "https://eips.ethereum.org/EIPS/eip-8004#registration-v1"; + name: string; + description?: string; + image?: string; + registrations: Array<{ + agentId: number; + agentRegistry: string; // CAIP-10 format + }>; + supportedTrust: Array<"reputation" | "crypto-economic" | "tee-attestation">; +} + +/** + * Parameters for generating agent registration + */ +export interface GenerateRegistrationParams { + agentId: number; + chainId: number; + registryAddress: Hex; + name: string; + description?: string; + image?: string; +} + +/** + * Generates an ERC-8004 compliant agent registration JSON structure + * + * @param params - Registration parameters + * @returns The registration JSON object + */ +export function generateAgentRegistration(params: GenerateRegistrationParams): AgentRegistration { + const registration: AgentRegistration = { + type: "https://eips.ethereum.org/EIPS/eip-8004#registration-v1", + name: params.name, + registrations: [ + { + agentId: params.agentId, + agentRegistry: formatCAIP10Address(params.chainId, params.registryAddress), + }, + ], + supportedTrust: ["reputation"], + }; + + if (params.description) { + registration.description = params.description; + } + + if (params.image) { + registration.image = params.image; + } + + return registration; +} + +/** + * Generates and uploads an agent registration to IPFS + * + * @param pinataConfig - Pinata configuration with JWT + * @param params - Registration parameters + * @returns The IPFS URI (ipfs://...) + */ +export async function uploadAgentRegistration( + pinataConfig: PinataConfig, + params: GenerateRegistrationParams, +): Promise { + const registration = generateAgentRegistration(params); + const ipfsHash = await uploadJsonToIPFS( + pinataConfig, + registration, + `agent-${params.agentId}-registration`, + ); + return `ipfs://${ipfsHash}`; +} diff --git a/typescript/agentkit/src/action-providers/erc8004/utils_rep.ts b/typescript/agentkit/src/action-providers/erc8004/utils_rep.ts new file mode 100644 index 000000000..40ab8d879 --- /dev/null +++ b/typescript/agentkit/src/action-providers/erc8004/utils_rep.ts @@ -0,0 +1,184 @@ +/** + * Reputation-specific utilities for ERC-8004 Reputation Registry + */ +import { Hex, keccak256, toBytes } from "viem"; +import { PinataConfig, uploadJsonToIPFS, formatCAIP10Address } from "./utils"; + +/** + * MCP-specific context for feedback + */ +export interface McpFeedbackContext { + tool?: string; + prompt?: string; + resource?: string; +} + +/** + * A2A-specific context for feedback + */ +export interface A2aFeedbackContext { + skills?: string[]; + contextId?: string; + taskId?: string; +} + +/** + * OASF-specific context for feedback + */ +export interface OasfFeedbackContext { + skills?: string[]; + domains?: string[]; +} + +/** + * Proof of payment context (e.g., for x402) + */ +export interface ProofOfPayment { + fromAddress: string; + toAddress: string; + chainId: string; + txHash: string; +} + +/** + * ERC-8004 Feedback File structure + * + * @see https://eips.ethereum.org/EIPS/eip-8004#off-chain-feedback-file-structure + */ +export interface FeedbackFile { + // Required fields + agentRegistry: string; + agentId: number; + clientAddress: string; + createdAt: string; + value: number; + valueDecimals: number; + + // Optional fields + tag1?: string; + tag2?: string; + endpoint?: string; + mcp?: McpFeedbackContext; + a2a?: A2aFeedbackContext; + oasf?: OasfFeedbackContext; + proofOfPayment?: ProofOfPayment; + comment?: string; +} + +/** + * Parameters for generating feedback file + */ +export interface GenerateFeedbackParams { + agentId: number; + chainId: number; + identityRegistryAddress: Hex; + clientAddress: Hex; + value: number; + valueDecimals: number; + tag1?: string; + tag2?: string; + endpoint?: string; + mcp?: McpFeedbackContext; + a2a?: A2aFeedbackContext; + oasf?: OasfFeedbackContext; + proofOfPayment?: ProofOfPayment; + comment?: string; +} + +/** + * Result of uploading feedback to IPFS + */ +export interface FeedbackUploadResult { + feedbackUri: string; + feedbackHash: Hex; + feedbackFile: FeedbackFile; +} + +/** + * Computes the KECCAK-256 hash of a JSON object + * + * @param json - The JSON object to hash + * @returns The hash as a hex string + */ +export function computeJsonHash(json: object): Hex { + const jsonString = JSON.stringify(json); + return keccak256(toBytes(jsonString)); +} + +/** + * Generates an ERC-8004 compliant feedback file JSON structure + * + * @param params - Feedback parameters + * @returns The feedback file JSON object + */ +export function generateFeedbackFile(params: GenerateFeedbackParams): FeedbackFile { + const feedbackFile: FeedbackFile = { + agentRegistry: formatCAIP10Address(params.chainId, params.identityRegistryAddress), + agentId: params.agentId, + clientAddress: formatCAIP10Address(params.chainId, params.clientAddress), + createdAt: new Date().toISOString(), + value: params.value, + valueDecimals: params.valueDecimals, + }; + + if (params.tag1) { + feedbackFile.tag1 = params.tag1; + } + + if (params.tag2) { + feedbackFile.tag2 = params.tag2; + } + + if (params.endpoint) { + feedbackFile.endpoint = params.endpoint; + } + + if (params.mcp) { + feedbackFile.mcp = params.mcp; + } + + if (params.a2a) { + feedbackFile.a2a = params.a2a; + } + + if (params.oasf) { + feedbackFile.oasf = params.oasf; + } + + if (params.proofOfPayment) { + feedbackFile.proofOfPayment = params.proofOfPayment; + } + + if (params.comment) { + feedbackFile.comment = params.comment; + } + + return feedbackFile; +} + +/** + * Generates and uploads a feedback file to IPFS + * + * @param pinataConfig - Pinata configuration with JWT + * @param params - Feedback parameters + * @returns The IPFS URI, hash, and generated feedback file + */ +export async function uploadFeedbackToIPFS( + pinataConfig: PinataConfig, + params: GenerateFeedbackParams, +): Promise { + const feedbackFile = generateFeedbackFile(params); + const feedbackHash = computeJsonHash(feedbackFile); + + const ipfsHash = await uploadJsonToIPFS( + pinataConfig, + feedbackFile, + `agent-${params.agentId}-feedback-${Date.now()}`, + ); + + return { + feedbackUri: `ipfs://${ipfsHash}`, + feedbackHash, + feedbackFile, + }; +} diff --git a/typescript/agentkit/src/action-providers/index.ts b/typescript/agentkit/src/action-providers/index.ts index 7f2b0233a..cdcab78a8 100644 --- a/typescript/agentkit/src/action-providers/index.ts +++ b/typescript/agentkit/src/action-providers/index.ts @@ -15,6 +15,7 @@ export * from "./defillama"; export * from "./enso"; export * from "./erc20"; export * from "./erc721"; +export * from "./erc8004"; export * from "./farcaster"; export * from "./jupiter"; export * from "./messari"; From 78d1a007704dad072054509279f2a82f99ab968d Mon Sep 17 00:00:00 2001 From: Philippe d'Argent Date: Fri, 30 Jan 2026 13:09:13 +0900 Subject: [PATCH 2/5] use agent0 sdk for search --- typescript/agentkit/package.json | 1 + .../src/action-providers/erc8004/constants.ts | 9 +- .../erc8004IdentityActionProvider.test.ts | 546 +-- .../erc8004/erc8004IdentityActionProvider.ts | 606 +-- .../erc8004ReputationActionProvider.test.ts | 383 +- .../erc8004ReputationActionProvider.ts | 232 +- .../erc8004/identitySchemas.ts | 112 +- .../erc8004/reputationSchemas.ts | 126 +- .../src/action-providers/erc8004/utils.ts | 28 + .../src/action-providers/erc8004/utils_id.ts | 66 +- .../examples/langchain-cdp-chatbot/chatbot.ts | 4 + typescript/pnpm-lock.yaml | 3303 +++++++++++------ 12 files changed, 3126 insertions(+), 2290 deletions(-) diff --git a/typescript/agentkit/package.json b/typescript/agentkit/package.json index 58423bba1..6c78ef16f 100644 --- a/typescript/agentkit/package.json +++ b/typescript/agentkit/package.json @@ -40,6 +40,7 @@ ], "dependencies": { "@across-protocol/app-sdk": "^0.2.0", + "agent0-sdk": "^1.4.2", "@alloralabs/allora-sdk": "^0.1.0", "@base-org/account": "^2.2.0", "@coinbase/cdp-sdk": "^1.38.0", diff --git a/typescript/agentkit/src/action-providers/erc8004/constants.ts b/typescript/agentkit/src/action-providers/erc8004/constants.ts index 4a5cabbee..852de9465 100644 --- a/typescript/agentkit/src/action-providers/erc8004/constants.ts +++ b/typescript/agentkit/src/action-providers/erc8004/constants.ts @@ -10,19 +10,18 @@ export const SUPPORTED_CHAIN_IDS = { } as const; // Registry addresses by chain ID -// ERC-8004 uses deterministic CREATE2 addresses across all networks export const REGISTRY_ADDRESSES: Record = { [SUPPORTED_CHAIN_IDS.ETHEREUM_MAINNET]: { - identity: "0x8004A818BFB912233c491871b3d84c89A494BD9e", - reputation: "0x8004B663056A597Dffe9eCcC1965A193B7388713", + identity: "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432", + reputation: "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63", }, [SUPPORTED_CHAIN_IDS.ETHEREUM_SEPOLIA]: { identity: "0x8004A818BFB912233c491871b3d84c89A494BD9e", reputation: "0x8004B663056A597Dffe9eCcC1965A193B7388713", }, [SUPPORTED_CHAIN_IDS.BASE_MAINNET]: { - identity: "0x8004A818BFB912233c491871b3d84c89A494BD9e", - reputation: "0x8004B663056A597Dffe9eCcC1965A193B7388713", + identity: "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432", + reputation: "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63", }, [SUPPORTED_CHAIN_IDS.BASE_SEPOLIA]: { identity: "0x8004A818BFB912233c491871b3d84c89A494BD9e", diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts index 4e8f378fd..51521e1cc 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts @@ -4,205 +4,232 @@ import { } from "./erc8004IdentityActionProvider"; import { RegisterAgentSchema, - SetAgentRegistrationSchema, - GetAgentIdentitySchema, - SetMetadataSchema, - GetMetadataSchema, - RegisterAgentCompleteSchema, + UpdateAgentMetadataSchema, + SearchAgentsSchema, + GetAgentInfoSchema, } from "./identitySchemas"; import { EvmWalletProvider } from "../../wallet-providers"; +import { getAgent0SDK } from "./utils"; const MOCK_AGENT_ID = "123"; const MOCK_ADDRESS = "0x1234567890123456789012345678901234567890"; -const MOCK_URI = "ipfs://QmTest123456789"; -const TRANSACTION_HASH = "0xabcdef1234567890"; +const _MOCK_URI = "ipfs://QmTest123456789"; +const _TRANSACTION_HASH = "0xabcdef1234567890"; describe("Identity Schema Validation", () => { describe("RegisterAgentSchema", () => { - it("should successfully parse empty input", () => { + it("should successfully parse empty input (all fields optional)", () => { const validInput = {}; const result = RegisterAgentSchema.safeParse(validInput); expect(result.success).toBe(true); expect(result.data).toEqual({}); }); - }); - describe("SetAgentRegistrationSchema", () => { - it("should successfully parse valid input", () => { + it("should successfully parse input with all fields", () => { const validInput = { - agentId: MOCK_AGENT_ID, name: "Test Agent", - description: "A test agent description", + description: "A test agent", image: "https://example.com/image.png", }; - const result = SetAgentRegistrationSchema.safeParse(validInput); + const result = RegisterAgentSchema.safeParse(validInput); expect(result.success).toBe(true); expect(result.data).toEqual(validInput); }); - it("should successfully parse input without optional fields", () => { + it("should successfully parse input with only name", () => { const validInput = { - agentId: MOCK_AGENT_ID, name: "Test Agent", }; - const result = SetAgentRegistrationSchema.safeParse(validInput); + const result = RegisterAgentSchema.safeParse(validInput); expect(result.success).toBe(true); }); it("should fail parsing empty name", () => { const invalidInput = { - agentId: MOCK_AGENT_ID, name: "", }; - const result = SetAgentRegistrationSchema.safeParse(invalidInput); + const result = RegisterAgentSchema.safeParse(invalidInput); expect(result.success).toBe(false); }); it("should fail parsing name too long", () => { const invalidInput = { - agentId: MOCK_AGENT_ID, name: "a".repeat(101), }; - const result = SetAgentRegistrationSchema.safeParse(invalidInput); + const result = RegisterAgentSchema.safeParse(invalidInput); expect(result.success).toBe(false); }); it("should fail parsing description too long", () => { const invalidInput = { - agentId: MOCK_AGENT_ID, name: "Test Agent", description: "a".repeat(501), }; - const result = SetAgentRegistrationSchema.safeParse(invalidInput); - - expect(result.success).toBe(false); - }); - - it("should fail parsing empty input", () => { - const emptyInput = {}; - const result = SetAgentRegistrationSchema.safeParse(emptyInput); + const result = RegisterAgentSchema.safeParse(invalidInput); expect(result.success).toBe(false); }); }); - describe("GetAgentIdentitySchema", () => { - it("should successfully parse valid input", () => { - const validInput = { agentId: MOCK_AGENT_ID }; - const result = GetAgentIdentitySchema.safeParse(validInput); + describe("UpdateAgentMetadataSchema", () => { + it("should successfully parse valid input with all fields", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + name: "Updated Agent", + description: "Updated description", + image: "https://example.com/new-image.png", + }; + + const result = UpdateAgentMetadataSchema.safeParse(validInput); expect(result.success).toBe(true); expect(result.data).toEqual(validInput); }); - it("should fail parsing empty input", () => { - const emptyInput = {}; - const result = GetAgentIdentitySchema.safeParse(emptyInput); + it("should successfully parse input with only agentId (updates nothing)", () => { + const validInput = { + agentId: MOCK_AGENT_ID, + }; - expect(result.success).toBe(false); + const result = UpdateAgentMetadataSchema.safeParse(validInput); + + expect(result.success).toBe(true); }); - }); - describe("SetMetadataSchema", () => { - it("should successfully parse valid input", () => { + it("should successfully parse input with partial fields", () => { const validInput = { agentId: MOCK_AGENT_ID, - key: "version", - value: "1.0.0", + description: "New description only", }; - const result = SetMetadataSchema.safeParse(validInput); + const result = UpdateAgentMetadataSchema.safeParse(validInput); expect(result.success).toBe(true); - expect(result.data).toEqual(validInput); }); - it("should fail parsing empty key", () => { + it("should fail parsing empty name", () => { const invalidInput = { agentId: MOCK_AGENT_ID, - key: "", - value: "1.0.0", + name: "", }; - const result = SetMetadataSchema.safeParse(invalidInput); + const result = UpdateAgentMetadataSchema.safeParse(invalidInput); expect(result.success).toBe(false); }); - it("should fail parsing key too long", () => { + it("should fail parsing without agentId", () => { const invalidInput = { - agentId: MOCK_AGENT_ID, - key: "a".repeat(101), - value: "1.0.0", + name: "Test Agent", }; - const result = SetMetadataSchema.safeParse(invalidInput); + const result = UpdateAgentMetadataSchema.safeParse(invalidInput); expect(result.success).toBe(false); }); }); - describe("GetMetadataSchema", () => { - it("should successfully parse valid input", () => { + describe("SearchAgentsSchema", () => { + it("should successfully parse empty input (all fields optional)", () => { + const validInput = {}; + const result = SearchAgentsSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual({}); + }); + + it("should successfully parse input with all filters", () => { const validInput = { - agentId: MOCK_AGENT_ID, - key: "version", + name: "AI", + mcpTools: ["code_generation", "data_analysis"], + a2aSkills: ["python"], + oasfSkills: ["data_engineering/data_transformation_pipeline"], + oasfDomains: ["finance_and_business/investment_services"], + active: true, + x402support: true, + minReputation: 70, + maxReputation: 100, + limit: 10, + offset: 5, }; - const result = GetMetadataSchema.safeParse(validInput); + const result = SearchAgentsSchema.safeParse(validInput); expect(result.success).toBe(true); - expect(result.data).toEqual(validInput); + expect(result.data).toMatchObject(validInput); }); - it("should fail parsing empty input", () => { - const emptyInput = {}; - const result = GetMetadataSchema.safeParse(emptyInput); + it("should successfully parse input with only name filter", () => { + const validInput = { + name: "Trading Bot", + }; - expect(result.success).toBe(false); + const result = SearchAgentsSchema.safeParse(validInput); + + expect(result.success).toBe(true); }); - }); - describe("RegisterAgentCompleteSchema", () => { - it("should successfully parse valid input", () => { - const validInput = { - name: "Test Agent", - description: "A test agent", - image: "https://example.com/image.png", + it("should fail parsing limit below minimum", () => { + const invalidInput = { + limit: 0, }; - const result = RegisterAgentCompleteSchema.safeParse(validInput); + const result = SearchAgentsSchema.safeParse(invalidInput); - expect(result.success).toBe(true); - expect(result.data).toEqual(validInput); + expect(result.success).toBe(false); }); - it("should successfully parse input without optional fields", () => { - const validInput = { - name: "Test Agent", + it("should fail parsing limit above maximum", () => { + const invalidInput = { + limit: 100, }; - const result = RegisterAgentCompleteSchema.safeParse(validInput); + const result = SearchAgentsSchema.safeParse(invalidInput); - expect(result.success).toBe(true); + expect(result.success).toBe(false); }); - it("should fail parsing empty name", () => { + it("should fail parsing negative offset", () => { const invalidInput = { - name: "", + offset: -1, }; - const result = RegisterAgentCompleteSchema.safeParse(invalidInput); + const result = SearchAgentsSchema.safeParse(invalidInput); + + expect(result.success).toBe(false); + }); + }); + + describe("GetAgentInfoSchema", () => { + it("should successfully parse valid input with simple agentId", () => { + const validInput = { agentId: MOCK_AGENT_ID }; + const result = GetAgentInfoSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should successfully parse valid input with chainId:agentId format", () => { + const validInput = { agentId: "84532:123" }; + const result = GetAgentInfoSchema.safeParse(validInput); + + expect(result.success).toBe(true); + expect(result.data).toEqual(validInput); + }); + + it("should fail parsing empty input", () => { + const emptyInput = {}; + const result = GetAgentInfoSchema.safeParse(emptyInput); expect(result.success).toBe(false); }); @@ -211,7 +238,6 @@ describe("Identity Schema Validation", () => { describe("Register Agent Action", () => { let mockWallet: jest.Mocked; - let actionProvider: ERC8004IdentityActionProvider; beforeEach(() => { mockWallet = { @@ -224,59 +250,41 @@ describe("Register Agent Action", () => { }), getAddress: jest.fn().mockReturnValue(MOCK_ADDRESS), } as unknown as jest.Mocked; - - actionProvider = erc8004IdentityActionProvider(); }); - it("should successfully register an agent", async () => { - mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); - mockWallet.waitForTransactionReceipt.mockResolvedValue({ - logs: [ - { - topics: [ - "0x1234", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000000000000000000000000000000000000000007b", - ], - data: "0x", - }, - ], - }); + it("should fail without Pinata JWT", async () => { + const providerWithoutJwt = erc8004IdentityActionProvider(); - const response = await actionProvider.registerAgent(mockWallet, {}); + const response = await providerWithoutJwt.registerAgent(mockWallet, {}); - expect(mockWallet.sendTransaction).toHaveBeenCalled(); - expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith(TRANSACTION_HASH); - expect(response).toContain("Agent registered successfully!"); - expect(response).toContain(TRANSACTION_HASH); + expect(response).toContain("Error: PINATA_JWT is required"); }); it("should handle error when registration fails", async () => { + const actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); const response = await actionProvider.registerAgent(mockWallet, {}); expect(mockWallet.sendTransaction).toHaveBeenCalled(); - expect(response).toContain("Error registering agent"); + expect(response).toContain("Error during registration"); }); }); -describe("Set Agent Registration Action", () => { +describe("Update Agent Metadata Action", () => { let mockWallet: jest.Mocked; - let _actionProvider: ERC8004IdentityActionProvider; beforeEach(() => { mockWallet = { sendTransaction: jest.fn(), waitForTransactionReceipt: jest.fn(), + readContract: jest.fn(), getName: jest.fn().mockReturnValue("evm_wallet_provider"), getNetwork: jest.fn().mockReturnValue({ protocolFamily: "evm", networkId: "base-sepolia", }), } as unknown as jest.Mocked; - - _actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); }); it("should fail without Pinata JWT", async () => { @@ -284,210 +292,268 @@ describe("Set Agent Registration Action", () => { const args = { agentId: MOCK_AGENT_ID, - name: "Test Agent", + description: "New description", }; - const response = await providerWithoutJwt.setAgentRegistration(mockWallet, args); + const response = await providerWithoutJwt.updateAgentMetadata(mockWallet, args); expect(response).toContain("Error: PINATA_JWT is required"); }); -}); -describe("Get Agent Identity Action", () => { - let mockWallet: jest.Mocked; - let actionProvider: ERC8004IdentityActionProvider; + it("should fail when agent has no URI set", async () => { + const actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); + mockWallet.readContract.mockResolvedValue(null); - beforeEach(() => { - mockWallet = { - readContract: jest.fn(), - getName: jest.fn().mockReturnValue("evm_wallet_provider"), - getNetwork: jest.fn().mockReturnValue({ - protocolFamily: "evm", - networkId: "base-sepolia", - }), - } as unknown as jest.Mocked; - - actionProvider = erc8004IdentityActionProvider(); - }); - - it("should successfully get agent identity", async () => { - mockWallet.readContract.mockResolvedValueOnce(MOCK_ADDRESS).mockResolvedValueOnce(MOCK_URI); - - const args = { agentId: MOCK_AGENT_ID }; + const args = { + agentId: MOCK_AGENT_ID, + description: "New description", + }; - const response = await actionProvider.getAgentIdentity(mockWallet, args); + const response = await actionProvider.updateAgentMetadata(mockWallet, args); - expect(mockWallet.readContract).toHaveBeenCalledTimes(2); - expect(response).toContain("Agent Identity"); - expect(response).toContain(MOCK_AGENT_ID); - expect(response).toContain(MOCK_ADDRESS); - expect(response).toContain(MOCK_URI); + expect(response).toContain("has no registration URI set"); }); - it("should handle non-existent agent", async () => { - mockWallet.readContract.mockRejectedValue(new Error("ERC721NonexistentToken")); + it("should handle error when updating metadata fails", async () => { + const actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); + mockWallet.readContract.mockRejectedValue(new Error("Read failed")); - const args = { agentId: MOCK_AGENT_ID }; + const args = { + agentId: MOCK_AGENT_ID, + description: "New description", + }; - const response = await actionProvider.getAgentIdentity(mockWallet, args); + const response = await actionProvider.updateAgentMetadata(mockWallet, args); - expect(response).toContain("does not exist"); + expect(response).toContain("Error updating agent metadata"); }); +}); - it("should handle other errors", async () => { - mockWallet.readContract.mockRejectedValue(new Error("Network error")); - - const args = { agentId: MOCK_AGENT_ID }; - - const response = await actionProvider.getAgentIdentity(mockWallet, args); +// Mock the utils module +jest.mock("./utils", () => ({ + ...jest.requireActual("./utils"), + getAgent0SDK: jest.fn(), +})); - expect(response).toContain("Error getting agent identity"); - }); -}); +const mockGetAgent0SDK = getAgent0SDK as jest.MockedFunction; -describe("Set Metadata Action", () => { +describe("Search Agents Action", () => { let mockWallet: jest.Mocked; let actionProvider: ERC8004IdentityActionProvider; + let mockSdk: { searchAgents: jest.Mock }; beforeEach(() => { + mockSdk = { + searchAgents: jest.fn(), + }; + mockWallet = { - sendTransaction: jest.fn(), - waitForTransactionReceipt: jest.fn(), getName: jest.fn().mockReturnValue("evm_wallet_provider"), getNetwork: jest.fn().mockReturnValue({ protocolFamily: "evm", networkId: "base-sepolia", }), + getPublicClient: jest.fn().mockReturnValue({ + transport: { url: "https://rpc.example.com" }, + }), } as unknown as jest.Mocked; actionProvider = erc8004IdentityActionProvider(); + mockGetAgent0SDK.mockReturnValue(mockSdk as unknown as ReturnType); }); - it("should successfully set metadata", async () => { - mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); - mockWallet.waitForTransactionReceipt.mockResolvedValue({}); + it("should successfully search agents with no filters", async () => { + mockSdk.searchAgents.mockResolvedValue({ + items: [ + { + agentId: "123", + name: "Test Agent", + description: "A test agent", + mcpTools: ["code_generation"], + active: true, + }, + ], + nextCursor: undefined, + }); - const args = { - agentId: MOCK_AGENT_ID, - key: "version", - value: "1.0.0", - }; + const response = await actionProvider.searchAgents(mockWallet, {}); - const response = await actionProvider.setMetadata(mockWallet, args); + expect(mockSdk.searchAgents).toHaveBeenCalled(); + expect(response).toContain("Found 1 agent(s) total"); + expect(response).toContain("Test Agent"); + }); - expect(mockWallet.sendTransaction).toHaveBeenCalled(); - expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith(TRANSACTION_HASH); - expect(response).toContain("Metadata set successfully!"); - expect(response).toContain(MOCK_AGENT_ID); - expect(response).toContain("version"); - expect(response).toContain("1.0.0"); - expect(response).toContain(TRANSACTION_HASH); + it("should return no agents message when none found", async () => { + mockSdk.searchAgents.mockResolvedValue({ + items: [], + nextCursor: undefined, + }); + + const response = await actionProvider.searchAgents(mockWallet, {}); + + expect(response).toContain("No agents found"); }); - it("should handle error when setting metadata fails", async () => { - mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); + it("should paginate through SDK results and return limited results", async () => { + // First SDK call returns 2 items with a cursor + mockSdk.searchAgents + .mockResolvedValueOnce({ + items: [ + { agentId: "1", name: "Agent 1" }, + { agentId: "2", name: "Agent 2" }, + ], + nextCursor: "cursor1", + }) + // Second SDK call returns 1 more item, no more cursor + .mockResolvedValueOnce({ + items: [{ agentId: "3", name: "Agent 3" }], + nextCursor: undefined, + }); + + // Request with limit=2, should show first 2 of 3 total + const response = await actionProvider.searchAgents(mockWallet, { limit: 2 }); + + expect(mockSdk.searchAgents).toHaveBeenCalledTimes(2); + expect(response).toContain("Found 3 agent(s) total"); + expect(response).toContain("showing 1-2"); + expect(response).toContain("Agent 1"); + expect(response).toContain("Agent 2"); + expect(response).not.toContain("Agent 3"); + expect(response).toContain("More results available"); + expect(response).toContain("offset: 2"); + }); - const args = { - agentId: MOCK_AGENT_ID, - key: "version", - value: "1.0.0", - }; + it("should filter by name after fetching all SDK pages", async () => { + // SDK returns multiple pages, but only one agent matches the name filter + mockSdk.searchAgents + .mockResolvedValueOnce({ + items: [ + { agentId: "1", name: "Other Agent" }, + { agentId: "2", name: "myAwesomeAgent" }, + ], + nextCursor: "cursor1", + }) + .mockResolvedValueOnce({ + items: [{ agentId: "3", name: "Another Agent" }], + nextCursor: undefined, + }); + + const response = await actionProvider.searchAgents(mockWallet, { name: "awesome" }); + + expect(mockSdk.searchAgents).toHaveBeenCalledTimes(2); + // Name filter should NOT be passed to SDK (we filter ourselves) + expect(mockSdk.searchAgents).toHaveBeenCalledWith( + expect.not.objectContaining({ name: "awesome" }), + expect.anything(), + ); + expect(response).toContain("Found 1 agent(s) total"); + expect(response).toContain("myAwesomeAgent"); + expect(response).not.toContain("Other Agent"); + expect(response).not.toContain("Another Agent"); + }); - const response = await actionProvider.setMetadata(mockWallet, args); + it("should support offset for pagination", async () => { + mockSdk.searchAgents.mockResolvedValue({ + items: [ + { agentId: "1", name: "Agent 1" }, + { agentId: "2", name: "Agent 2" }, + { agentId: "3", name: "Agent 3" }, + ], + nextCursor: undefined, + }); + + // Request with offset=1, limit=1 + const response = await actionProvider.searchAgents(mockWallet, { offset: 1, limit: 1 }); + + expect(response).toContain("Found 3 agent(s) total"); + expect(response).toContain("showing 2-2"); + expect(response).toContain("Agent 2"); + expect(response).not.toContain("Agent 1"); + expect(response).not.toContain("Agent 3"); + }); + + it("should handle errors gracefully", async () => { + mockSdk.searchAgents.mockRejectedValue(new Error("Network error")); + + const response = await actionProvider.searchAgents(mockWallet, {}); - expect(response).toContain("Error setting metadata"); + expect(response).toContain("Error searching agents"); }); }); -describe("Get Metadata Action", () => { +describe("Get Agent Info Action", () => { let mockWallet: jest.Mocked; let actionProvider: ERC8004IdentityActionProvider; + let mockSdk: { getAgent: jest.Mock }; beforeEach(() => { + mockSdk = { + getAgent: jest.fn(), + }; + mockWallet = { - readContract: jest.fn(), getName: jest.fn().mockReturnValue("evm_wallet_provider"), getNetwork: jest.fn().mockReturnValue({ protocolFamily: "evm", networkId: "base-sepolia", }), + getPublicClient: jest.fn().mockReturnValue({ + transport: { url: "https://rpc.example.com" }, + }), } as unknown as jest.Mocked; actionProvider = erc8004IdentityActionProvider(); + mockGetAgent0SDK.mockReturnValue(mockSdk as unknown as ReturnType); }); - it("should successfully get metadata", async () => { - const valueHex = "0x312e302e30"; // "1.0.0" in hex - mockWallet.readContract.mockResolvedValue(valueHex); - - const args = { - agentId: MOCK_AGENT_ID, - key: "version", - }; + it("should successfully get agent info", async () => { + mockSdk.getAgent.mockResolvedValue({ + agentId: "123", + name: "Test Agent", + description: "A comprehensive test agent", + owners: [MOCK_ADDRESS], + mcp: true, + mcpTools: ["code_generation", "data_analysis"], + a2aSkills: ["python"], + active: true, + x402support: true, + }); - const response = await actionProvider.getMetadata(mockWallet, args); + const response = await actionProvider.getAgentInfo(mockWallet, { agentId: "123" }); - expect(mockWallet.readContract).toHaveBeenCalled(); - expect(response).toContain("Agent Metadata"); - expect(response).toContain(MOCK_AGENT_ID); - expect(response).toContain("version"); - expect(response).toContain("1.0.0"); + expect(mockSdk.getAgent).toHaveBeenCalledWith("84532:123"); + expect(response).toContain("Agent 123"); + expect(response).toContain("Test Agent"); + expect(response).toContain("code_generation"); + expect(response).toContain("Active: true"); }); - it("should handle empty metadata", async () => { - mockWallet.readContract.mockResolvedValue("0x"); - - const args = { - agentId: MOCK_AGENT_ID, - key: "nonexistent", - }; + it("should handle chainId:agentId format", async () => { + mockSdk.getAgent.mockResolvedValue({ + agentId: "11155111:456", + name: "Chain-specific Agent", + }); - const response = await actionProvider.getMetadata(mockWallet, args); + const response = await actionProvider.getAgentInfo(mockWallet, { agentId: "11155111:456" }); - expect(response).toContain("(empty)"); + expect(mockSdk.getAgent).toHaveBeenCalledWith("11155111:456"); + expect(response).toContain("Chain-specific Agent"); }); - it("should handle error when getting metadata fails", async () => { - mockWallet.readContract.mockRejectedValue(new Error("Read failed")); + it("should return not found for missing agent", async () => { + mockSdk.getAgent.mockResolvedValue(null); - const args = { - agentId: MOCK_AGENT_ID, - key: "version", - }; - - const response = await actionProvider.getMetadata(mockWallet, args); - - expect(response).toContain("Error getting metadata"); - }); -}); - -describe("Register Agent Complete Action", () => { - let mockWallet: jest.Mocked; - let _actionProvider: ERC8004IdentityActionProvider; - beforeEach(() => { - mockWallet = { - sendTransaction: jest.fn(), - waitForTransactionReceipt: jest.fn(), - getName: jest.fn().mockReturnValue("evm_wallet_provider"), - getNetwork: jest.fn().mockReturnValue({ - protocolFamily: "evm", - networkId: "base-sepolia", - }), - } as unknown as jest.Mocked; + const response = await actionProvider.getAgentInfo(mockWallet, { agentId: "999" }); - _actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); + expect(response).toContain("not found"); }); - it("should fail without Pinata JWT", async () => { - const providerWithoutJwt = erc8004IdentityActionProvider(); - - const args = { - name: "Test Agent", - }; + it("should handle errors gracefully", async () => { + mockSdk.getAgent.mockRejectedValue(new Error("Network error")); - const response = await providerWithoutJwt.registerAgentComplete(mockWallet, args); + const response = await actionProvider.getAgentInfo(mockWallet, { agentId: "123" }); - expect(response).toContain("Error: PINATA_JWT is required"); + expect(response).toContain("Error getting agent info"); }); }); diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts index eaa9b98b7..c70a5d046 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts @@ -1,21 +1,24 @@ import { z } from "zod"; -import { Hex, encodeFunctionData, toHex, decodeEventLog } from "viem"; +import { encodeFunctionData, decodeEventLog } from "viem"; import { ActionProvider } from "../actionProvider"; import { Network } from "../../network"; import { CreateAction } from "../actionDecorator"; import { EvmWalletProvider } from "../../wallet-providers"; import { RegisterAgentSchema, - SetAgentRegistrationSchema, - GetAgentIdentitySchema, - SetMetadataSchema, - GetMetadataSchema, - RegisterAgentCompleteSchema, + UpdateAgentMetadataSchema, + GetOwnedAgentsSchema, + SearchAgentsSchema, + GetAgentInfoSchema, } from "./identitySchemas"; import { getChainIdFromNetwork, getRegistryAddress, isNetworkSupported } from "./constants"; import { IDENTITY_REGISTRY_ABI } from "./abi"; -import { PinataConfig, ipfsToHttpUrl } from "./utils"; -import { uploadAgentRegistration } from "./utils_id"; +import { PinataConfig, ipfsToHttpUrl, getAgent0SDK } from "./utils"; +import { + uploadAgentRegistration, + fetchAgentRegistration, + updateAgentRegistration, +} from "./utils_id"; /** * Configuration options for the ERC8004 Identity Action Provider @@ -44,36 +47,128 @@ export class ERC8004IdentityActionProvider extends ActionProvider, + ): Promise { + try { + if (!this.pinataConfig) { + return "Error: PINATA_JWT is required for IPFS uploads. Please configure the provider with a Pinata JWT."; + } + + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + const registryAddress = getRegistryAddress("identity", chainId); -If the user provides any registration details (name, description, image), use register_agent_complete instead. + // Get current URI from on-chain + const currentUri = await walletProvider.readContract({ + address: registryAddress, + abi: IDENTITY_REGISTRY_ABI, + functionName: "tokenURI", + args: [BigInt(args.agentId)], + }); + + if (!currentUri) { + return `Error: Agent ${args.agentId} has no registration URI set. Use register_agent first.`; + } -After registration, you will receive an agentId. You can then use set_agent_registration -to upload metadata and set the URI on-chain. + // Fetch existing registration from IPFS + const existingRegistration = await fetchAgentRegistration(currentUri as string); + + // Update with new values + const updatedRegistration = updateAgentRegistration(existingRegistration, { + name: args.name, + description: args.description, + image: args.image, + }); + + // Upload updated registration to IPFS + const ipfsUri = await uploadAgentRegistration(this.pinataConfig, { + agentId: parseInt(args.agentId, 10), + chainId, + registryAddress, + name: updatedRegistration.name, + description: updatedRegistration.description, + image: updatedRegistration.image, + }); + + // Set new URI onchain + const hash = await walletProvider.sendTransaction({ + to: registryAddress, + data: encodeFunctionData({ + abi: IDENTITY_REGISTRY_ABI, + functionName: "setAgentURI", + args: [BigInt(args.agentId), ipfsUri], + }), + }); + + await walletProvider.waitForTransactionReceipt(hash); + + const httpUrl = ipfsToHttpUrl(ipfsUri); + + // Build update summary + const updates: string[] = []; + if (args.name !== undefined) updates.push(`Name: ${args.name}`); + if (args.description !== undefined) updates.push(`Description: ${args.description}`); + if (args.image !== undefined) updates.push(`Image: ${args.image}`); + + return `Agent metadata updated successfully!\n\nAgent ID: ${args.agentId}\nUpdated fields:\n${updates.length > 0 ? updates.map(u => `- ${u}`).join("\n") : "(no changes)"}\n\nNew Metadata URI: ${ipfsUri}\nHTTP Gateway: ${httpUrl}\nTransaction hash: ${hash}`; + } catch (error) { + return `Error updating agent metadata: ${error}`; + } + } + + /** + * Registers a new agent (register + upload + set URI). + * All fields are optional - defaults to "Agent " for name, empty for others. + * + * @param walletProvider - The wallet provider to use + * @param args - Optional agent name, description, and image + * @returns A message with the registration details + */ + @CreateAction({ + name: "register_agent", + description: ` +Registers a new agent on the ERC-8004 Identity Registry: +1. Mints an agent NFT +2. Generates and uploads registration JSON to IPFS +3. Sets the agent URI on-chain + +All fields are optional! Proceed if not provided, metadata can be updated later with 'update_agent_metadata' action. +Never choose values optional fields unless explicitly asked to do so. `, schema: RegisterAgentSchema, }) async registerAgent( walletProvider: EvmWalletProvider, - _args: z.infer, + args: z.infer, ): Promise { try { + if (!this.pinataConfig) { + return "Error: PINATA_JWT is required for registration. Please configure the provider with a Pinata JWT."; + } + console.log("args", args); + const network = walletProvider.getNetwork(); const chainId = getChainIdFromNetwork(network); const registryAddress = getRegistryAddress("identity", chainId); - const hash = await walletProvider.sendTransaction({ + // Register agent (mint NFT) + const registerHash = await walletProvider.sendTransaction({ to: registryAddress, data: encodeFunctionData({ abi: IDENTITY_REGISTRY_ABI, @@ -82,7 +177,7 @@ to upload metadata and set the URI on-chain. }), }); - const receipt = await walletProvider.waitForTransactionReceipt(hash); + const receipt = await walletProvider.waitForTransactionReceipt(registerHash); // Parse the Registered event to get the agentId let agentId: string | undefined; @@ -103,319 +198,340 @@ to upload metadata and set the URI on-chain. } if (!agentId) { - return `Agent registered successfully! Transaction hash: ${hash}\nNote: Could not parse agentId from event logs. Check the transaction on a block explorer.`; - } - - return `Agent registered successfully!\n\nAgent ID: ${agentId}\nNetwork: ${network.networkId}\nTransaction hash: ${hash}\n\nNext step: Use set_agent_registration with agentId "${agentId}" to upload metadata and set the URI on-chain.`; - } catch (error) { - return `Error registering agent: ${error}`; - } - } - - /** - * Sets agent registration by uploading metadata to IPFS and setting the URI on-chain. - * - * @param walletProvider - The wallet provider to use for the transaction - * @param args - Registration details including agentId and name - * @returns A message with the registration details - */ - @CreateAction({ - name: "set_agent_registration", - description: ` -Uploads registration metadata to IPFS and sets the agent URI on-chain in one action. -Use when you already have an agentId (from register_agent) and want to set its metadata. - -Requires PINATA_JWT environment variable to be set. - -The registration JSON follows the ERC-8004 specification and includes: -- type: The ERC-8004 registration type URI -- name: Your agent's name -- description: (optional) Your agent's description -- image: (optional) Image URL -- registrations: Array containing your agentId and registry address -`, - schema: SetAgentRegistrationSchema, - }) - async setAgentRegistration( - walletProvider: EvmWalletProvider, - args: z.infer, - ): Promise { - try { - if (!this.pinataConfig) { - return "Error: PINATA_JWT is required for IPFS uploads. Please configure the provider with a Pinata JWT."; + return `Agent registered but could not parse agentId from event logs.\nRegister transaction: ${registerHash}\nPlease use get_agent_info or check the transaction on a block explorer to find your agentId.`; } - const network = walletProvider.getNetwork(); - const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("identity", chainId); - - // Step 1: Upload registration to IPFS + // Upload registration to IPFS (using defaults if not provided) + const agentName = args.name || `Agent ${agentId}`; const ipfsUri = await uploadAgentRegistration(this.pinataConfig, { - agentId: parseInt(args.agentId, 10), + agentId: parseInt(agentId, 10), chainId, registryAddress, - name: args.name, - description: args.description, - image: args.image, + name: agentName, + description: args.description || "", + image: args.image || "", }); - // Step 2: Set agent URI on-chain - const hash = await walletProvider.sendTransaction({ + // Set agent URI onchain + const setUriHash = await walletProvider.sendTransaction({ to: registryAddress, data: encodeFunctionData({ abi: IDENTITY_REGISTRY_ABI, functionName: "setAgentURI", - args: [BigInt(args.agentId), ipfsUri], + args: [BigInt(agentId), ipfsUri], }), }); - await walletProvider.waitForTransactionReceipt(hash); + await walletProvider.waitForTransactionReceipt(setUriHash); const httpUrl = ipfsToHttpUrl(ipfsUri); - return `Agent registration set successfully!\n\nAgent ID: ${args.agentId}\nName: ${args.name}\nMetadata URI: ${ipfsUri}\nHTTP Gateway: ${httpUrl}\nTransaction hash: ${hash}`; + return `Agent registered successfully!\n\nAgent ID: ${agentId}\nName: ${agentName}\nDescription: ${args.description || "(empty)"}\nImage: ${args.image || "(empty)"}\nNetwork: ${network.networkId}\n\nMetadata URI: ${ipfsUri}\nHTTP Gateway: ${httpUrl}\n\nTransactions:\n- Register: ${registerHash}\n- Set URI: ${setUriHash}`; } catch (error) { - return `Error setting agent registration: ${error}`; + return `Error during registration: ${error}`; } } /** - * Gets the identity information for an agent. + * Gets all agents owned by a specified wallet address or the connected wallet. * * @param walletProvider - The wallet provider to use for reading - * @param args - The agentId to look up - * @returns A message with the agent's owner and URI + * @param args - Optional wallet address to query and pagination parameters + * @returns A message with the list of owned agents */ @CreateAction({ - name: "get_agent_identity", + name: "get_owned_agents", description: ` -Gets the owner and metadata URI for an agent from the ERC-8004 Identity Registry. -This is a read-only operation that doesn't require gas. +Gets all agent IDs owned by an address. If no address is provided, uses the connected wallet address. +Returns a list of agents with their IDs, names and descriptions. +Supports pagination. `, - schema: GetAgentIdentitySchema, + schema: GetOwnedAgentsSchema, }) - async getAgentIdentity( + async getOwnedAgents( walletProvider: EvmWalletProvider, - args: z.infer, + args: z.infer, ): Promise { try { const network = walletProvider.getNetwork(); const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("identity", chainId); - const owner = await walletProvider.readContract({ - address: registryAddress, - abi: IDENTITY_REGISTRY_ABI, - functionName: "ownerOf", - args: [BigInt(args.agentId)], - }); + // Use provided wallet address or fall back to connected wallet + const walletAddress = args.walletAddress || walletProvider.getAddress(); - const uri = await walletProvider.readContract({ - address: registryAddress, - abi: IDENTITY_REGISTRY_ABI, - functionName: "tokenURI", - args: [BigInt(args.agentId)], - }); + // Initialize agent0 SDK + const sdk = getAgent0SDK(walletProvider); - const httpUrl = uri ? ipfsToHttpUrl(uri as string) : "Not set"; + // Search for agents owned by the specified wallet + const result = await sdk.searchAgents( + { owners: [walletAddress] }, + { + pageSize: args.pageSize ?? 50, + cursor: args.cursor, + }, + ); - return `Agent Identity\n\nAgent ID: ${args.agentId}\nOwner: ${owner}\nURI: ${uri || "Not set"}\nHTTP Gateway: ${httpUrl}`; - } catch (error) { - const errorStr = String(error); - if (errorStr.includes("ERC721NonexistentToken")) { - return `Agent ID ${args.agentId} does not exist on this network.`; + if (result.items.length === 0) { + return `No agents found owned by ${walletAddress} on chain ${chainId}.`; } - return `Error getting agent identity: ${error}`; - } - } - /** - * Sets an on-chain metadata key-value pair for an agent. - * - * @param walletProvider - The wallet provider to use for the transaction - * @param args - The agentId, key, and value - * @returns A message confirming the metadata was set - */ - @CreateAction({ - name: "set_agent_metadata", - description: ` -Sets an on-chain key-value metadata entry for an agent. -Only the agent owner can set metadata. -The value is stored as bytes on-chain and can be used for -arbitrary data like endpoints, capabilities, or version info. -`, - schema: SetMetadataSchema, - }) - async setMetadata( - walletProvider: EvmWalletProvider, - args: z.infer, - ): Promise { - try { - const network = walletProvider.getNetwork(); - const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("identity", chainId); + // Format the response + const agentList = result.items + .map(agent => { + const name = agent.name || "Unnamed"; + const description = agent.description ? ` - ${agent.description.slice(0, 50)}...` : ""; + return `- Agent ID: ${agent.agentId}\n Name: ${name}${description}`; + }) + .join("\n\n"); - const valueBytes = toHex(args.value); + let response = `Found ${result.items.length} agent(s) owned by ${walletAddress}:\n\n${agentList}`; - const hash = await walletProvider.sendTransaction({ - to: registryAddress, - data: encodeFunctionData({ - abi: IDENTITY_REGISTRY_ABI, - functionName: "setMetadata", - args: [BigInt(args.agentId), args.key, valueBytes], - }), - }); - - await walletProvider.waitForTransactionReceipt(hash); + if (result.nextCursor) { + response += `\n\n(More results available. Use cursor: "${result.nextCursor}" to fetch next page)`; + } - return `Metadata set successfully!\n\nAgent ID: ${args.agentId}\nKey: ${args.key}\nValue: ${args.value}\nTransaction hash: ${hash}`; + return response; } catch (error) { - return `Error setting metadata: ${error}`; + return `Error retrieving owned agents: ${error}`; } } /** - * Gets an on-chain metadata value for an agent. + * Searches for agents by capabilities, attributes, or reputation. * * @param walletProvider - The wallet provider to use for reading - * @param args - The agentId and key - * @returns A message with the metadata value + * @param args - Search filters including name, tools, skills, reputation + * @returns A message with the list of matching agents */ @CreateAction({ - name: "get_agent_metadata", + name: "search_agents", description: ` -Gets an on-chain metadata value for an agent by key. -This is a read-only operation that doesn't require gas. +Search for registered agents by capabilities, attributes, or reputation. +All filters are optional. Results are filtered by capabilities first, then by reputation. + +Search filters: +- name: Substring match on agent name +- mcpTools: Filter by MCP tools the agent offers +- a2aSkills: Filter by A2A skills +- oasfSkills: Filter by OASF skill taxonomy +- oasfDomains: Filter by OASF domain taxonomy +- active: Only return active agents (default: true) +- x402support: Filter by x402 payment support +- minReputation / maxReputation: Filter by average reputation score + +Pagination: +- limit: Maximum results to return (default: 10, max: 50) +- offset: Number of results to skip (default: 0) + +This is a read-only operation using indexed data for fast queries. `, - schema: GetMetadataSchema, + schema: SearchAgentsSchema, }) - async getMetadata( + async searchAgents( walletProvider: EvmWalletProvider, - args: z.infer, + args: z.infer, ): Promise { try { - const network = walletProvider.getNetwork(); - const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("identity", chainId); - - const valueBytes = await walletProvider.readContract({ - address: registryAddress, - abi: IDENTITY_REGISTRY_ABI, - functionName: "getMetadata", - args: [BigInt(args.agentId), args.key], - }); + const sdk = getAgent0SDK(walletProvider); + + console.log("args", args); + // Fetch all matching agents by paginating through the SDK + const allAgents: Array<{ + agentId: string; + name: string; + description?: string; + mcpTools?: string[]; + a2aSkills?: string[]; + active?: boolean; + }> = []; + + const searchFilters = { + name: args.name, + mcpTools: args.mcpTools, + a2aSkills: args.a2aSkills, + active: args.active, + x402support: args.x402support, + }; + + // Paginate through all SDK results + let sdkCursor: string | undefined; + const sdkPageSize = 50; // SDK default + const maxPages = 20; // Safety limit to prevent infinite loops + let pageCount = 0; + + do { + const searchResult = await sdk.searchAgents(searchFilters, { + pageSize: sdkPageSize, + cursor: sdkCursor, + }); + + allAgents.push(...searchResult.items); + sdkCursor = searchResult.nextCursor; + pageCount++; + } while (sdkCursor && pageCount < maxPages); + + if (allAgents.length === 0) { + return "No agents found matching the specified criteria."; + } - // Convert bytes back to string - let value = ""; - if (valueBytes && (valueBytes as Hex) !== "0x") { - const bytes = valueBytes as Hex; - // Remove 0x prefix and convert hex to string - const hexString = bytes.slice(2); - for (let i = 0; i < hexString.length; i += 2) { - const charCode = parseInt(hexString.slice(i, i + 2), 16); - if (charCode !== 0) { - value += String.fromCharCode(charCode); - } - } + // Apply action-level pagination + const limit = args.limit ?? 10; + const offset = args.offset ?? 0; + const paginatedAgents = allAgents.slice(offset, offset + limit); + const totalFound = allAgents.length; + const hasMore = offset + limit < totalFound; + + // Format the response + const agentList = paginatedAgents + .map(agent => { + const name = agent.name || "Unnamed"; + const description = agent.description + ? `\n Description: ${agent.description.slice(0, 100)}${agent.description.length > 100 ? "..." : ""}` + : ""; + const tools = agent.mcpTools?.length ? `\n MCP Tools: ${agent.mcpTools.join(", ")}` : ""; + const skills = agent.a2aSkills?.length + ? `\n A2A Skills: ${agent.a2aSkills.join(", ")}` + : ""; + const status = agent.active !== undefined ? `\n Active: ${agent.active}` : ""; + + return `- Agent ID: ${agent.agentId}\n Name: ${name}${description}${tools}${skills}${status}`; + }) + .join("\n\n"); + + let response = `Found ${totalFound} agent(s) total, showing ${offset + 1}-${offset + paginatedAgents.length}:\n\n${agentList}`; + + if (hasMore) { + response += `\n\n(More results available. Use offset: ${offset + limit} to fetch next page)`; } - return `Agent Metadata\n\nAgent ID: ${args.agentId}\nKey: ${args.key}\nValue: ${value || "(empty)"}`; + return response; } catch (error) { - return `Error getting metadata: ${error}`; + return `Error searching agents: ${error}`; } } /** - * Complete agent registration in one action (register + upload + set URI). + * Gets comprehensive information about an agent including identity, endpoints, capabilities, and reputation. * - * @param walletProvider - The wallet provider to use - * @param args - The agent name and optional description/image - * @returns A message with the complete registration details + * @param walletProvider - The wallet provider to use for reading + * @param args - The agentId to look up + * @returns A message with comprehensive agent information */ @CreateAction({ - name: "register_agent_complete", + name: "get_agent_info", description: ` -Complete agent registration in one action: -1. Registers a new agent (mints NFT) -2. Generates and uploads registration JSON to IPFS -3. Sets the agent URI onchain +Gets comprehensive information about an agent including identity, endpoints, capabilities, and reputation. +Uses indexed data for fast retrieval. + +The agentId can be in either format: +- "123" - Uses the current network's chain ID +- "84532:123" - Explicitly specifies the chain ID + +Returns: +- Basic info: name, description, image +- Owner address +- Endpoints: MCP, A2A, ENS +- Capabilities: mcpTools, a2aSkills, oasfSkills/domains +- Reputation summary: averageValue, feedbackCount +- Status: active, x402support `, - schema: RegisterAgentCompleteSchema, + schema: GetAgentInfoSchema, }) - async registerAgentComplete( + async getAgentInfo( walletProvider: EvmWalletProvider, - args: z.infer, + args: z.infer, ): Promise { try { - if (!this.pinataConfig) { - return "Error: PINATA_JWT is required for complete registration. Please configure the provider with a Pinata JWT, or use register_agent followed by set_agent_registration."; - } - + const sdk = getAgent0SDK(walletProvider); const network = walletProvider.getNetwork(); const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("identity", chainId); - // Step 1: Register agent - const registerHash = await walletProvider.sendTransaction({ - to: registryAddress, - data: encodeFunctionData({ - abi: IDENTITY_REGISTRY_ABI, - functionName: "register", - args: [], - }), - }); + // Handle both "agentId" and "chainId:agentId" formats + const fullAgentId = args.agentId.includes(":") ? args.agentId : `${chainId}:${args.agentId}`; - const receipt = await walletProvider.waitForTransactionReceipt(registerHash); + const agent = await sdk.getAgent(fullAgentId); - // Parse the Registered event to get the agentId - let agentId: string | undefined; - for (const log of receipt.logs) { - try { - const decoded = decodeEventLog({ - abi: IDENTITY_REGISTRY_ABI, - data: log.data, - topics: log.topics, - }); - if (decoded.eventName === "Registered") { - agentId = (decoded.args as unknown as { agentId: bigint }).agentId.toString(); - break; - } - } catch { - // Not the event we're looking for - } + if (!agent) { + return `Agent ${args.agentId} not found.`; } - if (!agentId) { - return `Agent registered but could not parse agentId from event logs.\nRegister transaction: ${registerHash}\nPlease use get_agent_identity or check the transaction on a block explorer to find your agentId.`; + // Build comprehensive response + const sections: string[] = []; + + // Basic info + sections.push(`## Agent ${agent.agentId}`); + sections.push(`Name: ${agent.name || "Not set"}`); + if (agent.description) { + sections.push(`Description: ${agent.description}`); + } + if (agent.image) { + sections.push(`Image: ${agent.image}`); } - // Step 2: Upload registration to IPFS - const ipfsUri = await uploadAgentRegistration(this.pinataConfig, { - agentId: parseInt(agentId, 10), - chainId, - registryAddress, - name: args.name, - description: args.description, - image: args.image, - }); + // Ownership + if (agent.owners?.length) { + sections.push(`\n## Ownership`); + sections.push(`Owner(s): ${agent.owners.join(", ")}`); + } + if (agent.walletAddress) { + sections.push(`Wallet Address: ${agent.walletAddress}`); + } - // Step 3: Set agent URI - const setUriHash = await walletProvider.sendTransaction({ - to: registryAddress, - data: encodeFunctionData({ - abi: IDENTITY_REGISTRY_ABI, - functionName: "setAgentURI", - args: [BigInt(agentId), ipfsUri], - }), - }); + // Endpoints + const endpoints: string[] = []; + if (agent.mcp) endpoints.push(`MCP: Enabled`); + if (agent.a2a) endpoints.push(`A2A: Enabled`); + if (agent.ens) endpoints.push(`ENS: ${agent.ens}`); + if (agent.did) endpoints.push(`DID: ${agent.did}`); + if (endpoints.length > 0) { + sections.push(`\n## Endpoints`); + sections.push(endpoints.join("\n")); + } - await walletProvider.waitForTransactionReceipt(setUriHash); + // Capabilities + const capabilities: string[] = []; + if (agent.mcpTools?.length) { + capabilities.push(`MCP Tools: ${agent.mcpTools.join(", ")}`); + } + if (agent.mcpPrompts?.length) { + capabilities.push(`MCP Prompts: ${agent.mcpPrompts.join(", ")}`); + } + if (agent.mcpResources?.length) { + capabilities.push(`MCP Resources: ${agent.mcpResources.join(", ")}`); + } + if (agent.a2aSkills?.length) { + capabilities.push(`A2A Skills: ${agent.a2aSkills.join(", ")}`); + } + if (capabilities.length > 0) { + sections.push(`\n## Capabilities`); + sections.push(capabilities.join("\n")); + } - const httpUrl = ipfsToHttpUrl(ipfsUri); + // Status + sections.push(`\n## Status`); + sections.push(`Active: ${agent.active ?? "Unknown"}`); + if (agent.x402support !== undefined) { + sections.push(`x402 Support: ${agent.x402support}`); + } + + // Reputation + try { + const reputationSummary = await sdk.getReputationSummary(fullAgentId); + if (reputationSummary && reputationSummary.count > 0) { + sections.push(`\n## Reputation`); + sections.push(`Average Score: ${reputationSummary.averageValue}`); + sections.push(`Total Feedback: ${reputationSummary.count}`); + } else { + sections.push(`\n## Reputation`); + sections.push(`No feedback received yet`); + } + } catch { + // Reputation data not available - skip section + } - return `Agent registration complete!\n\nAgent ID: ${agentId}\nName: ${args.name}\nNetwork: ${network.networkId}\n\nMetadata URI: ${ipfsUri}\nHTTP Gateway: ${httpUrl}\n\nTransactions:\n- Register: ${registerHash}\n- Set URI: ${setUriHash}`; + return sections.join("\n"); } catch (error) { - return `Error during complete registration: ${error}`; + return `Error getting agent info: ${error}`; } } diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts index 3a0d57496..94d241145 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts @@ -6,12 +6,11 @@ import { GiveFeedbackSchema, RevokeFeedbackSchema, AppendResponseSchema, - GetReputationSummarySchema, - ReadFeedbackSchema, - GetClientsSchema, + GetAgentFeedbackSchema, } from "./reputationSchemas"; import { EvmWalletProvider } from "../../wallet-providers"; import * as utilsRep from "./utils_rep"; +import * as utils from "./utils"; const MOCK_AGENT_ID = "123"; const MOCK_ADDRESS = "0x1234567890123456789012345678901234567890"; @@ -31,7 +30,6 @@ describe("Reputation Schema Validation", () => { valueDecimals: 0, tag1: "quality", tag2: "response-time", - endpoint: "/api/v1/chat", }; const result = GiveFeedbackSchema.safeParse(validInput); @@ -93,30 +91,6 @@ describe("Reputation Schema Validation", () => { expect(GiveFeedbackSchema.safeParse(yieldInput).success).toBe(true); }); - it("should accept optional MCP context", () => { - const inputWithMcp = { - agentId: MOCK_AGENT_ID, - value: 85, - mcp: { tool: "getWeather" }, - }; - - const result = GiveFeedbackSchema.safeParse(inputWithMcp); - expect(result.success).toBe(true); - expect(result.data?.mcp?.tool).toBe("getWeather"); - }); - - it("should accept optional A2A context", () => { - const inputWithA2a = { - agentId: MOCK_AGENT_ID, - value: 85, - a2a: { skills: ["skill1", "skill2"], taskId: "task-123" }, - }; - - const result = GiveFeedbackSchema.safeParse(inputWithA2a); - expect(result.success).toBe(true); - expect(result.data?.a2a?.skills).toHaveLength(2); - }); - it("should fail parsing tag1 too long", () => { const invalidInput = { agentId: MOCK_AGENT_ID, @@ -129,18 +103,6 @@ describe("Reputation Schema Validation", () => { expect(result.success).toBe(false); }); - it("should fail parsing endpoint too long", () => { - const invalidInput = { - agentId: MOCK_AGENT_ID, - value: 85, - endpoint: "a".repeat(201), - }; - - const result = GiveFeedbackSchema.safeParse(invalidInput); - - expect(result.success).toBe(false); - }); - it("should reject valueDecimals greater than 18", () => { const invalidInput = { agentId: MOCK_AGENT_ID, @@ -237,124 +199,56 @@ describe("Reputation Schema Validation", () => { }); }); - describe("GetReputationSummarySchema", () => { - it("should successfully parse valid input with clientAddresses and tags", () => { + describe("GetAgentFeedbackSchema", () => { + it("should successfully parse valid input with all filters", () => { const validInput = { agentId: MOCK_AGENT_ID, - clientAddresses: [MOCK_CLIENT_ADDRESS], + reviewerAddresses: [MOCK_CLIENT_ADDRESS], + minValue: 50, + maxValue: 100, tag1: "quality", - tag2: "speed", + includeRevoked: false, + pageSize: 20, }; - const result = GetReputationSummarySchema.safeParse(validInput); + const result = GetAgentFeedbackSchema.safeParse(validInput); expect(result.success).toBe(true); expect(result.data).toEqual(validInput); }); - it("should successfully parse input with only required fields", () => { + it("should successfully parse input with only agentId", () => { const validInput = { agentId: MOCK_AGENT_ID, - clientAddresses: [MOCK_CLIENT_ADDRESS], }; - const result = GetReputationSummarySchema.safeParse(validInput); + const result = GetAgentFeedbackSchema.safeParse(validInput); expect(result.success).toBe(true); }); - it("should accept multiple client addresses", () => { - const validInput = { - agentId: MOCK_AGENT_ID, - clientAddresses: [ - MOCK_CLIENT_ADDRESS, - "0xabcdef1234567890123456789012345678901234", - "0x1111111111111111111111111111111111111111", - ], - }; - - const result = GetReputationSummarySchema.safeParse(validInput); - expect(result.success).toBe(true); - expect(result.data?.clientAddresses).toHaveLength(3); - }); - - it("should fail parsing without clientAddresses (required per ERC-8004 spec)", () => { - const invalidInput = { - agentId: MOCK_AGENT_ID, - tag1: "quality", - }; - - const result = GetReputationSummarySchema.safeParse(invalidInput); - expect(result.success).toBe(false); - }); - - it("should fail parsing with empty clientAddresses array", () => { - const invalidInput = { - agentId: MOCK_AGENT_ID, - clientAddresses: [], - }; - - const result = GetReputationSummarySchema.safeParse(invalidInput); - expect(result.success).toBe(false); - }); - - it("should fail parsing with invalid client address format", () => { - const invalidInput = { - agentId: MOCK_AGENT_ID, - clientAddresses: ["not-an-address"], - }; - - const result = GetReputationSummarySchema.safeParse(invalidInput); - expect(result.success).toBe(false); - }); - - it("should fail parsing empty input", () => { - const emptyInput = {}; - const result = GetReputationSummarySchema.safeParse(emptyInput); - - expect(result.success).toBe(false); - }); - }); - - describe("ReadFeedbackSchema", () => { - it("should successfully parse valid input", () => { + it("should accept agentId with chainId prefix", () => { const validInput = { - agentId: MOCK_AGENT_ID, - clientAddress: MOCK_CLIENT_ADDRESS, - feedbackIndex: MOCK_FEEDBACK_INDEX, + agentId: "84532:123", }; - const result = ReadFeedbackSchema.safeParse(validInput); - + const result = GetAgentFeedbackSchema.safeParse(validInput); expect(result.success).toBe(true); - expect(result.data).toEqual(validInput); }); - it("should fail parsing invalid client address", () => { + it("should reject pageSize greater than 50", () => { const invalidInput = { agentId: MOCK_AGENT_ID, - clientAddress: "not-an-address", - feedbackIndex: MOCK_FEEDBACK_INDEX, + pageSize: 51, }; - const result = ReadFeedbackSchema.safeParse(invalidInput); - + const result = GetAgentFeedbackSchema.safeParse(invalidInput); expect(result.success).toBe(false); }); - }); - - describe("GetClientsSchema", () => { - it("should successfully parse valid input", () => { - const validInput = { agentId: MOCK_AGENT_ID }; - const result = GetClientsSchema.safeParse(validInput); - - expect(result.success).toBe(true); - expect(result.data).toEqual(validInput); - }); it("should fail parsing empty input", () => { const emptyInput = {}; - const result = GetClientsSchema.safeParse(emptyInput); + const result = GetAgentFeedbackSchema.safeParse(emptyInput); expect(result.success).toBe(false); }); @@ -412,7 +306,6 @@ describe("Give Feedback Action", () => { valueDecimals: 0, tag1: "quality", tag2: "speed", - endpoint: "/api/v1", }; const response = await actionProvider.giveFeedback(mockWallet, args); @@ -439,7 +332,6 @@ describe("Give Feedback Action", () => { valueDecimals: 0, tag1: "", tag2: "", - endpoint: "", }; const response = await actionProvider.giveFeedback(mockWallet, args); @@ -458,7 +350,6 @@ describe("Give Feedback Action", () => { valueDecimals: 0, tag1: "", tag2: "", - endpoint: "", }; const response = await providerWithoutJwt.giveFeedback(mockWallet, args); @@ -477,7 +368,6 @@ describe("Give Feedback Action", () => { valueDecimals: 0, tag1: "", tag2: "", - endpoint: "", }; const response = await actionProvider.giveFeedback(mockWallet, args); @@ -496,7 +386,6 @@ describe("Give Feedback Action", () => { valueDecimals: 0, tag1: "", tag2: "", - endpoint: "", }; const response = await actionProvider.giveFeedback(mockWallet, args); @@ -613,13 +502,15 @@ describe("Append Response Action", () => { }); }); -describe("Get Reputation Summary Action", () => { +describe("Get Agent Feedback Action", () => { let mockWallet: jest.Mocked; let actionProvider: ERC8004ReputationActionProvider; + let mockSdk: { searchFeedback: jest.Mock }; + let getAgent0SDKSpy: jest.SpyInstance; beforeEach(() => { mockWallet = { - readContract: jest.fn(), + getPublicClient: jest.fn().mockReturnValue({ transport: { url: "https://rpc.example.com" } }), getName: jest.fn().mockReturnValue("evm_wallet_provider"), getNetwork: jest.fn().mockReturnValue({ protocolFamily: "evm", @@ -627,221 +518,129 @@ describe("Get Reputation Summary Action", () => { }), } as unknown as jest.Mocked; - actionProvider = erc8004ReputationActionProvider(); - }); - - it("should successfully get reputation summary with clientAddresses", async () => { - mockWallet.readContract.mockResolvedValue([BigInt(10), BigInt(850), 1]); - - const args = { - agentId: MOCK_AGENT_ID, - clientAddresses: [MOCK_CLIENT_ADDRESS], - tag1: "", - tag2: "", + mockSdk = { + searchFeedback: jest.fn(), }; - const response = await actionProvider.getReputationSummary(mockWallet, args); - - expect(mockWallet.readContract).toHaveBeenCalled(); - expect(response).toContain("Reputation Summary"); - expect(response).toContain(MOCK_AGENT_ID); - expect(response).toContain("Feedback Count: 10"); - expect(response).toContain("85.0"); - expect(response).toContain("1 trusted address"); + getAgent0SDKSpy = jest.spyOn(utils, "getAgent0SDK").mockReturnValue(mockSdk as never); + actionProvider = erc8004ReputationActionProvider(); }); - it("should successfully get reputation summary with multiple clients and tag filters", async () => { - mockWallet.readContract.mockResolvedValue([BigInt(5), BigInt(90), 0]); - - const args = { - agentId: MOCK_AGENT_ID, - clientAddresses: [MOCK_CLIENT_ADDRESS, "0xabcdef1234567890123456789012345678901234"], - tag1: "quality", - tag2: "speed", - }; - - const response = await actionProvider.getReputationSummary(mockWallet, args); - - expect(mockWallet.readContract).toHaveBeenCalled(); - expect(response).toContain("2 trusted address"); - expect(response).toContain("quality"); - expect(response).toContain("speed"); - expect(response).toContain("Feedback Count: 5"); + afterEach(() => { + getAgent0SDKSpy.mockRestore(); }); - it("should pass clientAddresses to the contract call", async () => { - mockWallet.readContract.mockResolvedValue([BigInt(5), BigInt(90), 0]); + it("should successfully get agent feedback", async () => { + mockSdk.searchFeedback.mockResolvedValue([ + { + reviewer: MOCK_CLIENT_ADDRESS, + value: 85, + tags: ["quality"], + isRevoked: false, + createdAt: 1700000000, + }, + ]); const args = { agentId: MOCK_AGENT_ID, - clientAddresses: [MOCK_CLIENT_ADDRESS], - tag1: "", - tag2: "", }; - await actionProvider.getReputationSummary(mockWallet, args); + const response = await actionProvider.getAgentFeedback(mockWallet, args); - expect(mockWallet.readContract).toHaveBeenCalledWith( - expect.objectContaining({ - functionName: "getSummary", - args: [BigInt(MOCK_AGENT_ID), [MOCK_CLIENT_ADDRESS], "", ""], - }), + expect(mockSdk.searchFeedback).toHaveBeenCalledWith( + { agentId: "84532:123", reviewers: undefined, includeRevoked: false }, + { minValue: undefined, maxValue: undefined }, ); - }); - - it("should handle error when getting summary fails", async () => { - mockWallet.readContract.mockRejectedValue(new Error("Read failed")); - - const args = { - agentId: MOCK_AGENT_ID, - clientAddresses: [MOCK_CLIENT_ADDRESS], - tag1: "", - tag2: "", - }; - - const response = await actionProvider.getReputationSummary(mockWallet, args); - - expect(response).toContain("Error getting reputation summary"); - }); -}); - -describe("Read Feedback Action", () => { - let mockWallet: jest.Mocked; - let actionProvider: ERC8004ReputationActionProvider; - - beforeEach(() => { - mockWallet = { - readContract: jest.fn(), - getName: jest.fn().mockReturnValue("evm_wallet_provider"), - getNetwork: jest.fn().mockReturnValue({ - protocolFamily: "evm", - networkId: "base-sepolia", - }), - } as unknown as jest.Mocked; - - actionProvider = erc8004ReputationActionProvider(); - }); - - it("should successfully read feedback", async () => { - mockWallet.readContract.mockResolvedValue([BigInt(85), 0, "quality", "speed", false]); - - const args = { - agentId: MOCK_AGENT_ID, - clientAddress: MOCK_CLIENT_ADDRESS, - feedbackIndex: MOCK_FEEDBACK_INDEX, - }; - - const response = await actionProvider.readFeedback(mockWallet, args); - - expect(mockWallet.readContract).toHaveBeenCalled(); - expect(response).toContain("Feedback Entry"); + expect(response).toContain("Feedback for Agent"); expect(response).toContain(MOCK_AGENT_ID); - expect(response).toContain(MOCK_CLIENT_ADDRESS); + expect(response).toContain("Reviewer:"); expect(response).toContain("Value: 85"); - expect(response).toContain("quality"); - expect(response).toContain("speed"); - expect(response).toContain("Revoked: No"); + expect(response).toContain("Tags: quality"); }); - it("should show revoked status correctly", async () => { - mockWallet.readContract.mockResolvedValue([BigInt(85), 0, "quality", "", true]); - - const args = { - agentId: MOCK_AGENT_ID, - clientAddress: MOCK_CLIENT_ADDRESS, - feedbackIndex: MOCK_FEEDBACK_INDEX, - }; - - const response = await actionProvider.readFeedback(mockWallet, args); - - expect(response).toContain("Revoked: Yes"); - }); - - it("should handle feedback with decimals", async () => { - mockWallet.readContract.mockResolvedValue([BigInt(8550), 2, "quality", "", false]); + it("should handle multiple feedback entries", async () => { + mockSdk.searchFeedback.mockResolvedValue([ + { reviewer: MOCK_CLIENT_ADDRESS, value: 85, tags: ["quality"], isRevoked: false }, + { + reviewer: "0xabcdef1234567890123456789012345678901234", + value: 90, + tags: ["speed"], + isRevoked: false, + }, + ]); const args = { agentId: MOCK_AGENT_ID, - clientAddress: MOCK_CLIENT_ADDRESS, - feedbackIndex: MOCK_FEEDBACK_INDEX, }; - const response = await actionProvider.readFeedback(mockWallet, args); + const response = await actionProvider.getAgentFeedback(mockWallet, args); - expect(response).toContain("85.50"); + expect(response).toContain("2 entries"); + expect(response).toContain("Value: 85"); + expect(response).toContain("Value: 90"); }); - it("should handle error when reading feedback fails", async () => { - mockWallet.readContract.mockRejectedValue(new Error("Read failed")); + it("should apply filters correctly", async () => { + mockSdk.searchFeedback.mockResolvedValue([]); const args = { agentId: MOCK_AGENT_ID, - clientAddress: MOCK_CLIENT_ADDRESS, - feedbackIndex: MOCK_FEEDBACK_INDEX, + reviewerAddresses: [MOCK_CLIENT_ADDRESS], + minValue: 50, + maxValue: 100, + includeRevoked: true, }; - const response = await actionProvider.readFeedback(mockWallet, args); + await actionProvider.getAgentFeedback(mockWallet, args); - expect(response).toContain("Error reading feedback"); - }); -}); - -describe("Get Clients Action", () => { - let mockWallet: jest.Mocked; - let actionProvider: ERC8004ReputationActionProvider; - - beforeEach(() => { - mockWallet = { - readContract: jest.fn(), - getName: jest.fn().mockReturnValue("evm_wallet_provider"), - getNetwork: jest.fn().mockReturnValue({ - protocolFamily: "evm", - networkId: "base-sepolia", - }), - } as unknown as jest.Mocked; - - actionProvider = erc8004ReputationActionProvider(); + expect(mockSdk.searchFeedback).toHaveBeenCalledWith( + { agentId: "84532:123", reviewers: [MOCK_CLIENT_ADDRESS], includeRevoked: true }, + { minValue: 50, maxValue: 100 }, + ); }); - it("should successfully get clients list", async () => { - const mockClients = [MOCK_CLIENT_ADDRESS, "0xabcdef1234567890123456789012345678901234"]; - mockWallet.readContract.mockResolvedValue(mockClients); + it("should handle agent with no feedback", async () => { + mockSdk.searchFeedback.mockResolvedValue([]); const args = { agentId: MOCK_AGENT_ID, }; - const response = await actionProvider.getClients(mockWallet, args); + const response = await actionProvider.getAgentFeedback(mockWallet, args); - expect(mockWallet.readContract).toHaveBeenCalled(); - expect(response).toContain("Feedback Clients"); - expect(response).toContain(MOCK_AGENT_ID); - expect(response).toContain("Total: 2 clients"); - expect(response).toContain(MOCK_CLIENT_ADDRESS); + expect(response).toContain("has no feedback yet"); }); - it("should handle empty clients list", async () => { - mockWallet.readContract.mockResolvedValue([]); + it("should respect pageSize limit", async () => { + const manyFeedback = Array(30).fill({ + reviewer: MOCK_CLIENT_ADDRESS, + value: 85, + tags: ["quality"], + isRevoked: false, + }); + mockSdk.searchFeedback.mockResolvedValue(manyFeedback); const args = { agentId: MOCK_AGENT_ID, + pageSize: 10, }; - const response = await actionProvider.getClients(mockWallet, args); + const response = await actionProvider.getAgentFeedback(mockWallet, args); - expect(response).toContain("has not received any feedback yet"); + expect(response).toContain("10 entries"); + expect(response).toContain("20 more results available"); }); - it("should handle error when getting clients fails", async () => { - mockWallet.readContract.mockRejectedValue(new Error("Read failed")); + it("should handle error when getting feedback fails", async () => { + mockSdk.searchFeedback.mockRejectedValue(new Error("SDK error")); const args = { agentId: MOCK_AGENT_ID, }; - const response = await actionProvider.getClients(mockWallet, args); + const response = await actionProvider.getAgentFeedback(mockWallet, args); - expect(response).toContain("Error getting clients"); + expect(response).toContain("Error getting agent feedback"); }); }); diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts index 7efab3166..9721126c6 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts @@ -8,13 +8,11 @@ import { GiveFeedbackSchema, RevokeFeedbackSchema, AppendResponseSchema, - GetReputationSummarySchema, - ReadFeedbackSchema, - GetClientsSchema, + GetAgentFeedbackSchema, } from "./reputationSchemas"; import { getChainIdFromNetwork, getRegistryAddress, isNetworkSupported } from "./constants"; import { REPUTATION_REGISTRY_ABI, IDENTITY_REGISTRY_ABI } from "./abi"; -import { PinataConfig, ipfsToHttpUrl } from "./utils"; +import { PinataConfig, ipfsToHttpUrl, getAgent0SDK } from "./utils"; import { uploadFeedbackToIPFS } from "./utils_rep"; /** @@ -59,7 +57,7 @@ The value + valueDecimals pair represents a signed fixed-point number. The feedback is automatically: 1. Generated as an ERC-8004 compliant JSON file 2. Uploaded to IPFS via Pinata -3. Submitted onchain with the IPFS URI and keccak256 hash +3. Submitted onchain with the IPFS URI Examples: | tag1 | What it measures | Human value | value | valueDecimals | @@ -71,8 +69,6 @@ Examples: | responseTime | Response time (ms) | 560ms | 560 | 0 | | revenues | Cumulative revenues (USD) | $560 | 560 | 0 | | tradingYield | Yield (with tag2=period) | -3.2% | -32 | 1 | - -IMPORTANT: Always ignore optional fields: endpoint, mcp, a2a, oasf, proofOfPayment, and comment, unless you are explicitly asked to use them. Do not ask the user to provide them. `, schema: GiveFeedbackSchema, }) @@ -93,7 +89,7 @@ IMPORTANT: Always ignore optional fields: endpoint, mcp, a2a, oasf, proofOfPayme const identityRegistryAddress = getRegistryAddress("identity", chainId); const clientAddress = walletProvider.getAddress(); - // Check that the client is not the owner of the agent (prevent self-feedback) + // Check that the client is not the owner of the agent const agentOwner = await walletProvider.readContract({ address: identityRegistryAddress, abi: IDENTITY_REGISTRY_ABI, @@ -115,15 +111,15 @@ IMPORTANT: Always ignore optional fields: endpoint, mcp, a2a, oasf, proofOfPayme valueDecimals: args.valueDecimals ?? 0, tag1: args.tag1, tag2: args.tag2, - endpoint: args.endpoint, - mcp: args.mcp, - a2a: args.a2a, - oasf: args.oasf, - proofOfPayment: args.proofOfPayment, + endpoint: undefined, + mcp: undefined, + a2a: undefined, + oasf: undefined, + proofOfPayment: undefined, comment: args.comment, }); - // Submit feedback on-chain with IPFS URI and hash + // Submit feedback onchain with IPFS URI and hash const hash = await walletProvider.sendTransaction({ to: reputationRegistryAddress, data: encodeFunctionData({ @@ -135,7 +131,7 @@ IMPORTANT: Always ignore optional fields: endpoint, mcp, a2a, oasf, proofOfPayme args.valueDecimals ?? 0, args.tag1 ?? "", args.tag2 ?? "", - args.endpoint ?? "", + "", feedbackUri, feedbackHash, ], @@ -147,7 +143,7 @@ IMPORTANT: Always ignore optional fields: endpoint, mcp, a2a, oasf, proofOfPayme const httpUrl = ipfsToHttpUrl(feedbackUri); const commentLine = args.comment ? `\nComment: ${args.comment}` : ""; - return `Feedback submitted successfully!\n\nAgent ID: ${args.agentId}\nValue: ${args.value}${args.valueDecimals ? ` (${args.valueDecimals} decimals)` : ""}\nTags: ${args.tag1 || "(none)"}${args.tag2 ? `, ${args.tag2}` : ""}\nEndpoint: ${args.endpoint || "(none)"}${commentLine}\n\nFeedback File:\n- IPFS URI: ${feedbackUri}\n- HTTP Gateway: ${httpUrl}\n- Hash: ${feedbackHash}\n\nTransaction hash: ${hash}`; + return `Feedback submitted successfully!\n\nAgent ID: ${args.agentId}\nValue: ${args.value}${args.valueDecimals ? ` (${args.valueDecimals} decimals)` : ""}\nTags: ${args.tag1 || "(none)"}${args.tag2 ? `, ${args.tag2}` : ""}${commentLine}\n\nFeedback File:\n- IPFS URI: ${feedbackUri}\n- HTTP Gateway: ${httpUrl}\n- Hash: ${feedbackHash}\n\nTransaction hash: ${hash}`; } catch (error) { return `Error giving feedback: ${error}`; } @@ -254,174 +250,84 @@ The response is stored as a URI pointing to off-chain content. } /** - * Gets aggregated reputation statistics for an agent. + * Gets feedback entries for an agent. * * @param walletProvider - The wallet provider to use for reading - * @param args - The agentId and optional tag filters - * @returns A message with the reputation summary + * @param args - The agentId and optional filters + * @returns A message with the list of feedback entries */ @CreateAction({ - name: "get_reputation_summary", + name: "get_agent_feedback", description: ` -Gets aggregated reputation statistics for an agent from trusted clients. - -Per ERC-8004 spec, clientAddresses MUST be provided to mitigate Sybil/spam attacks. -Results without filtering by clientAddresses would be vulnerable to fake feedback. +Gets feedback entries for an agent. Useful for: +- Viewing all feedback received by an agent +- Filtering by reviewer addresses, value range, or tags -Returns: -- Total feedback count from specified clients -- Summary value (aggregated rating) -- Value decimals - -You can additionally filter by tag1 and/or tag2 for category-specific summaries. -This is a read-only operation that doesn't require gas. +This is a read-only operation using indexed data for fast queries. `, - schema: GetReputationSummarySchema, + schema: GetAgentFeedbackSchema, }) - async getReputationSummary( + async getAgentFeedback( walletProvider: EvmWalletProvider, - args: z.infer, + args: z.infer, ): Promise { try { + const sdk = getAgent0SDK(walletProvider); const network = walletProvider.getNetwork(); const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("reputation", chainId); - - const result = await walletProvider.readContract({ - address: registryAddress, - abi: REPUTATION_REGISTRY_ABI, - functionName: "getSummary", - args: [ - BigInt(args.agentId), - args.clientAddresses as Hex[], - args.tag1 ?? "", - args.tag2 ?? "", - ], - }); - - const [count, summaryValue, summaryValueDecimals] = result as [bigint, bigint, number]; - // Format the summary value with decimals - let formattedValue = summaryValue.toString(); - if (summaryValueDecimals > 0) { - const valueStr = summaryValue.toString().padStart(summaryValueDecimals + 1, "0"); - const intPart = valueStr.slice(0, -summaryValueDecimals) || "0"; - const decPart = valueStr.slice(-summaryValueDecimals); - formattedValue = `${intPart}.${decPart}`; + // Handle agentId format - add chainId if not present + let agentId = args.agentId; + if (!agentId.includes(":")) { + agentId = `${chainId}:${agentId}`; } - const clientFilter = `\nClients: ${args.clientAddresses.length} trusted address(es)`; - const tagFilter = - args.tag1 || args.tag2 - ? `\nTags: ${args.tag1 || "(any)"}${args.tag2 ? ` / ${args.tag2}` : ""}` - : ""; - - return `Reputation Summary for Agent ${args.agentId}${clientFilter}${tagFilter}\n\nFeedback Count: ${count}\nSummary Value: ${formattedValue}${summaryValueDecimals > 0 ? ` (${summaryValueDecimals} decimals)` : ""}`; - } catch (error) { - return `Error getting reputation summary: ${error}`; - } - } - - /** - * Reads a specific feedback entry. - * - * @param walletProvider - The wallet provider to use for reading - * @param args - The agentId, clientAddress, and feedbackIndex - * @returns A message with the feedback details - */ - @CreateAction({ - name: "read_feedback", - description: ` -Reads a specific feedback entry from the Reputation Registry. - -Returns the feedback value, decimals, tags, and revocation status. -This is a read-only operation that doesn't require gas. -`, - schema: ReadFeedbackSchema, - }) - async readFeedback( - walletProvider: EvmWalletProvider, - args: z.infer, - ): Promise { - try { - const network = walletProvider.getNetwork(); - const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("reputation", chainId); - - const result = await walletProvider.readContract({ - address: registryAddress, - abi: REPUTATION_REGISTRY_ABI, - functionName: "readFeedback", - args: [BigInt(args.agentId), args.clientAddress as Hex, BigInt(args.feedbackIndex)], - }); - - const [value, valueDecimals, tag1, tag2, isRevoked] = result as [ - bigint, - number, - string, - string, - boolean, - ]; - - // Format the value with decimals - let formattedValue = value.toString(); - if (valueDecimals > 0) { - const valueStr = value.toString().padStart(valueDecimals + 1, "0"); - const intPart = valueStr.slice(0, -valueDecimals) || "0"; - const decPart = valueStr.slice(-valueDecimals); - formattedValue = `${intPart}.${decPart}`; + const feedbackItems = await sdk.searchFeedback( + { + agentId, + reviewers: args.reviewerAddresses, + includeRevoked: args.includeRevoked ?? false, + }, + { + minValue: args.minValue, + maxValue: args.maxValue, + }, + ); + + // Apply pageSize limit (SDK may return all results) + const pageSize = args.pageSize ?? 20; + const limitedItems = feedbackItems.slice(0, pageSize); + + if (limitedItems.length === 0) { + return `Agent ${args.agentId} has no feedback yet.`; } - return `Feedback Entry\n\nAgent ID: ${args.agentId}\nClient: ${args.clientAddress}\nFeedback Index: ${args.feedbackIndex}\n\nValue: ${formattedValue}${valueDecimals > 0 ? ` (${valueDecimals} decimals)` : ""}\nTag 1: ${tag1 || "(none)"}\nTag 2: ${tag2 || "(none)"}\nRevoked: ${isRevoked ? "Yes" : "No"}`; - } catch (error) { - return `Error reading feedback: ${error}`; - } - } - - /** - * Gets the list of clients who have given feedback to an agent. - * - * @param walletProvider - The wallet provider to use for reading - * @param args - The agentId to get clients for - * @returns A message with the list of client addresses - */ - @CreateAction({ - name: "get_feedback_clients", - description: ` -Gets the list of client addresses who have given feedback to an agent. - -This is useful for iterating through all feedback entries. -This is a read-only operation that doesn't require gas. -`, - schema: GetClientsSchema, - }) - async getClients( - walletProvider: EvmWalletProvider, - args: z.infer, - ): Promise { - try { - const network = walletProvider.getNetwork(); - const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("reputation", chainId); - - const clients = await walletProvider.readContract({ - address: registryAddress, - abi: REPUTATION_REGISTRY_ABI, - functionName: "getClients", - args: [BigInt(args.agentId)], - }); - - const clientList = clients as Hex[]; - - if (clientList.length === 0) { - return `Agent ${args.agentId} has not received any feedback yet.`; + // Format the response + const feedbackList = limitedItems + .map(feedback => { + const reviewer = feedback.reviewer ? `Reviewer: ${feedback.reviewer}` : ""; + const value = feedback.value !== undefined ? `\n Value: ${feedback.value}` : ""; + const tags = feedback.tags?.length ? `\n Tags: ${feedback.tags.join(", ")}` : ""; + const endpoint = feedback.endpoint ? `\n Endpoint: ${feedback.endpoint}` : ""; + const revoked = + feedback.isRevoked !== undefined ? `\n Revoked: ${feedback.isRevoked}` : ""; + const timestamp = feedback.createdAt + ? `\n Created: ${new Date(feedback.createdAt * 1000).toISOString()}` + : ""; + + return `- ${reviewer}${value}${tags}${endpoint}${revoked}${timestamp}`; + }) + .join("\n\n"); + + let response = `Feedback for Agent ${args.agentId} (${limitedItems.length} entries):\n\n${feedbackList}`; + + if (feedbackItems.length > pageSize) { + response += `\n\n(${feedbackItems.length - pageSize} more results available, increase pageSize to see more)`; } - const clientListStr = clientList.map((c, i) => `${i + 1}. ${c}`).join("\n"); - - return `Feedback Clients for Agent ${args.agentId}\n\nTotal: ${clientList.length} clients\n\n${clientListStr}`; + return response; } catch (error) { - return `Error getting clients: ${error}`; + return `Error getting agent feedback: ${error}`; } } diff --git a/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts b/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts index 3244a16e7..cbffceeee 100644 --- a/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts +++ b/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts @@ -1,83 +1,105 @@ import { z } from "zod"; /** - * Input schema for registering an agent (mints agent NFT). - * Use only when user provides no input - just registers and returns agentId. + * Input schema for registering a new agent. + * All fields are optional - if not provided, defaults will be used: + * - name: "Agent " + * - description: "" (empty) + * - image: "" (empty) */ export const RegisterAgentSchema = z - .object({}) - .strip() - .describe( - "Registers a new agent by minting an agent NFT. Returns the agentId. Use only when user provides no input at all.", - ); - -/** - * Input schema for setting agent registration (upload to IPFS + set URI on-chain). - * Use when you have an agentId and want to set its metadata. - */ -export const SetAgentRegistrationSchema = z .object({ - agentId: z.string().describe("The agent ID to set registration for"), - name: z.string().min(1).max(100).describe("The name of the agent"), + name: z.string().min(1).max(100).optional().describe("The name of the agent (optional)"), description: z .string() .max(500) .optional() - .describe("A description of the agent's capabilities"), - image: z.string().optional().describe("Optional image URL (https:// or ipfs://) for the agent"), + .describe("A description of the agent's capabilities (optional)"), + image: z + .string() + .optional() + .describe("Optional image URL (https:// or ipfs://) for the agent (optional)"), }) .strip() - .describe( - "Uploads registration JSON to IPFS and sets the agent URI on-chain in one action. Use when you already have an agentId.", - ); + .describe("Registers a new agent."); /** - * Input schema for getting agent identity information. + * Input schema for updating agent metadata (IPFS registration file). + * Retrieves existing JSON from IPFS, updates specified fields, uploads new JSON, and sets URI on-chain. */ -export const GetAgentIdentitySchema = z +export const UpdateAgentMetadataSchema = z .object({ - agentId: z.string().describe("The agent ID to look up"), + agentId: z.string().describe("The agent ID to update metadata for"), + name: z.string().min(1).max(100).optional().describe("New name for the agent (optional)"), + description: z + .string() + .max(500) + .optional() + .describe("New description for the agent (optional)"), + image: z.string().optional().describe("New image URL for the agent (optional)"), }) .strip() - .describe("Gets the owner and URI for an agent"); + .describe( + "Updates agent registration metadata: retrieves existing JSON from IPFS, updates specified fields, uploads new JSON to IPFS, and sets the new URI on-chain", + ); /** - * Input schema for setting on-chain metadata. + * Input schema for getting all agents owned by a wallet address. */ -export const SetMetadataSchema = z +export const GetOwnedAgentsSchema = z .object({ - agentId: z.string().describe("The agent ID to set metadata for"), - key: z.string().min(1).max(100).describe("The metadata key"), - value: z.string().describe("The metadata value (will be encoded as bytes)"), + walletAddress: z + .string() + .optional() + .describe("The wallet address to query (optional, defaults to the connected wallet address)"), + pageSize: z + .number() + .min(1) + .max(100) + .optional() + .describe("Number of results per page (default: 50, max: 100)"), + cursor: z.string().optional().describe("Pagination cursor from a previous result"), }) .strip() - .describe("Sets an on-chain key-value metadata entry for an agent"); + .describe( + "Gets all agent IDs owned by a wallet address using the agent0 SDK search functionality", + ); /** - * Input schema for getting on-chain metadata. + * Input schema for searching agents by capabilities, attributes, or reputation. + * Uses the agent0 SDK's indexed subgraph for fast queries. */ -export const GetMetadataSchema = z +export const SearchAgentsSchema = z .object({ - agentId: z.string().describe("The agent ID to get metadata for"), - key: z.string().min(1).max(100).describe("The metadata key to retrieve"), + name: z.string().optional().describe("Search by agent name (substring match)"), + mcpTools: z.array(z.string()).optional().describe("Filter by MCP tools the agent offers"), + a2aSkills: z.array(z.string()).optional().describe("Filter by A2A skills"), + oasfSkills: z.array(z.string()).optional().describe("Filter by OASF skill taxonomy"), + oasfDomains: z.array(z.string()).optional().describe("Filter by OASF domain taxonomy"), + active: z.boolean().optional().describe("Filter by active status (true=active only, false=inactive only, omit=all)"), + x402support: z.boolean().optional().describe("Filter by x402 payment support"), + minReputation: z.number().optional().describe("Minimum average reputation score"), + maxReputation: z.number().optional().describe("Maximum average reputation score"), + limit: z + .number() + .min(1) + .max(50) + .optional() + .describe("Maximum number of results to return (default: 10)"), + offset: z.number().min(0).optional().describe("Number of results to skip (default: 0)"), }) .strip() - .describe("Gets an on-chain metadata value for an agent by key"); + .describe("Searches for registered agents by capabilities, attributes, or reputation"); /** - * Input schema for complete agent registration (register + upload + set URI). + * Input schema for getting comprehensive agent information. + * Uses the agent0 SDK's indexed data for fast retrieval. */ -export const RegisterAgentCompleteSchema = z +export const GetAgentInfoSchema = z .object({ - name: z.string().min(1).max(100).describe("The name of the agent"), - description: z - .string() - .max(500) - .optional() - .describe("A description of the agent's capabilities"), - image: z.string().optional().describe("Optional image URL (https:// or ipfs://) for the agent"), + agentId: z.string().describe("The agent ID (format: agentId or chainId:agentId)"), }) .strip() .describe( - "Complete agent registration: registers agent, uploads registration JSON to IPFS, and sets the agent URI", + "Gets comprehensive information about an agent including identity, endpoints, capabilities, and reputation", ); diff --git a/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts b/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts index e8fdc9399..758026084 100644 --- a/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts +++ b/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts @@ -1,53 +1,5 @@ import { z } from "zod"; -/** - * MCP context schema for feedback - */ -const McpContextSchema = z - .object({ - tool: z.string().optional().describe("The MCP tool name being rated"), - prompt: z.string().optional().describe("The MCP prompt name being rated"), - resource: z.string().optional().describe("The MCP resource name being rated"), - }) - .optional() - .describe("MCP-specific context for the feedback"); - -/** - * A2A context schema for feedback - */ -const A2aContextSchema = z - .object({ - skills: z.array(z.string()).optional().describe("A2A skill identifiers"), - contextId: z.string().optional().describe("A2A context identifier"), - taskId: z.string().optional().describe("A2A task identifier"), - }) - .optional() - .describe("A2A-specific context for the feedback"); - -/** - * OASF context schema for feedback - */ -const OasfContextSchema = z - .object({ - skills: z.array(z.string()).optional().describe("OASF skill identifiers"), - domains: z.array(z.string()).optional().describe("OASF domain identifiers"), - }) - .optional() - .describe("OASF-specific context for the feedback"); - -/** - * Proof of payment schema for feedback (e.g., x402) - */ -const ProofOfPaymentSchema = z - .object({ - fromAddress: z.string().describe("The address that sent payment"), - toAddress: z.string().describe("The address that received payment"), - chainId: z.string().describe("The chain ID where payment occurred"), - txHash: z.string().describe("The transaction hash of the payment"), - }) - .optional() - .describe("Proof of payment context (e.g., for x402)"); - /** * Input schema for giving feedback to an agent. * @@ -95,18 +47,6 @@ export const GiveFeedbackSchema = z .describe( "Secondary category tag for more specific categorization (e.g., 'day', 'week', 'month' for yield periods)", ), - endpoint: z - .string() - .max(200) - .optional() - .default("") - .describe( - "The endpoint or service being rated (e.g., '/api/v1/chat', 'https://agent.example.com/GetPrice')", - ), - mcp: McpContextSchema, - a2a: A2aContextSchema, - oasf: OasfContextSchema, - proofOfPayment: ProofOfPaymentSchema, comment: z .string() .max(500) @@ -158,55 +98,31 @@ export const AppendResponseSchema = z ); /** - * Input schema for getting reputation summary. - * Per ERC-8004 spec: clientAddresses MUST be provided (non-empty) to mitigate Sybil/spam attacks. + * Input schema for getting an agent's feedback entries. + * Uses the agent0 SDK's indexed subgraph for fast queries. */ -export const GetReputationSummarySchema = z +export const GetAgentFeedbackSchema = z .object({ - agentId: z.string().describe("The agent ID to get reputation summary for"), - clientAddresses: z - .array(z.string().regex(/^0x[a-fA-F0-9]{40}$/, "Invalid Ethereum address format")) - .min(1, "At least one client address is required to mitigate Sybil/spam attacks") - .describe( - "Array of client addresses to filter by. Required per ERC-8004 spec to prevent Sybil attacks.", - ), - tag1: z + agentId: z .string() + .describe("The agent ID to get feedback for (format: agentId or chainId:agentId)"), + reviewerAddresses: z + .array(z.string()) .optional() - .default("") - .describe("Optional primary tag filter (e.g., 'starred', 'uptime', 'responseTime')"), - tag2: z - .string() + .describe("Filter by reviewer wallet addresses"), + minValue: z.number().optional().describe("Minimum feedback value"), + maxValue: z.number().optional().describe("Maximum feedback value"), + tag1: z.string().optional().describe("Filter by primary tag"), + includeRevoked: z + .boolean() .optional() - .default("") - .describe("Optional secondary tag filter (e.g., 'day', 'week', 'month')"), - }) - .strip() - .describe( - "Gets aggregated reputation statistics for an agent, filtered by trusted client addresses", - ); - -/** - * Input schema for reading specific feedback. - */ -export const ReadFeedbackSchema = z - .object({ - agentId: z.string().describe("The agent ID to read feedback for"), - clientAddress: z - .string() - .regex(/^0x[a-fA-F0-9]{40}$/, "Invalid Ethereum address format") - .describe("The address of the client who gave the feedback"), - feedbackIndex: z.string().describe("The index of the feedback entry"), - }) - .strip() - .describe("Reads a specific feedback entry"); - -/** - * Input schema for getting clients who gave feedback. - */ -export const GetClientsSchema = z - .object({ - agentId: z.string().describe("The agent ID to get clients for"), + .describe("Include revoked feedback entries (default: false)"), + pageSize: z + .number() + .min(1) + .max(50) + .optional() + .describe("Number of results per page (default: 20)"), }) .strip() - .describe("Gets the list of client addresses who have given feedback to an agent"); + .describe("Gets feedback entries for an agent with optional filters"); diff --git a/typescript/agentkit/src/action-providers/erc8004/utils.ts b/typescript/agentkit/src/action-providers/erc8004/utils.ts index 6acc5933a..f9d8e187e 100644 --- a/typescript/agentkit/src/action-providers/erc8004/utils.ts +++ b/typescript/agentkit/src/action-providers/erc8004/utils.ts @@ -2,6 +2,10 @@ * Shared utilities for ERC-8004 action providers */ +import { SDK as Agent0SDK } from "agent0-sdk"; +import { EvmWalletProvider } from "../../wallet-providers"; +import { getChainIdFromNetwork } from "./constants"; + /** * Configuration for Pinata IPFS service */ @@ -9,6 +13,30 @@ export interface PinataConfig { jwt: string; } +/** + * Creates an Agent0SDK instance from a wallet provider. + * + * @param walletProvider - The wallet provider to extract chain and RPC information from + * @returns An initialized Agent0SDK instance + * @throws Error if unable to determine RPC URL + */ +export function getAgent0SDK(walletProvider: EvmWalletProvider): Agent0SDK { + const network = walletProvider.getNetwork(); + const chainId = getChainIdFromNetwork(network); + + const publicClient = walletProvider.getPublicClient(); + const rpcUrl = publicClient.transport.url; + + if (!rpcUrl) { + throw new Error("Unable to determine RPC URL from wallet provider"); + } + + return new Agent0SDK({ + chainId, + rpcUrl, + }); +} + /** * Upload response from Pinata */ diff --git a/typescript/agentkit/src/action-providers/erc8004/utils_id.ts b/typescript/agentkit/src/action-providers/erc8004/utils_id.ts index 926a19d86..4e6bbad73 100644 --- a/typescript/agentkit/src/action-providers/erc8004/utils_id.ts +++ b/typescript/agentkit/src/action-providers/erc8004/utils_id.ts @@ -2,7 +2,7 @@ * Identity-specific utilities for ERC-8004 Identity Registry */ import { Hex } from "viem"; -import { PinataConfig, uploadJsonToIPFS, formatCAIP10Address } from "./utils"; +import { PinataConfig, uploadJsonToIPFS, formatCAIP10Address, ipfsToHttpUrl } from "./utils"; /** * ERC-8004 Agent Registration structure @@ -12,8 +12,8 @@ import { PinataConfig, uploadJsonToIPFS, formatCAIP10Address } from "./utils"; export interface AgentRegistration { type: "https://eips.ethereum.org/EIPS/eip-8004#registration-v1"; name: string; - description?: string; - image?: string; + description: string; + image: string; registrations: Array<{ agentId: number; agentRegistry: string; // CAIP-10 format @@ -28,7 +28,7 @@ export interface GenerateRegistrationParams { agentId: number; chainId: number; registryAddress: Hex; - name: string; + name?: string; description?: string; image?: string; } @@ -42,7 +42,9 @@ export interface GenerateRegistrationParams { export function generateAgentRegistration(params: GenerateRegistrationParams): AgentRegistration { const registration: AgentRegistration = { type: "https://eips.ethereum.org/EIPS/eip-8004#registration-v1", - name: params.name, + name: params.name || `Agent ${params.agentId}`, + description: params.description || "", + image: params.image || "", registrations: [ { agentId: params.agentId, @@ -52,14 +54,6 @@ export function generateAgentRegistration(params: GenerateRegistrationParams): A supportedTrust: ["reputation"], }; - if (params.description) { - registration.description = params.description; - } - - if (params.image) { - registration.image = params.image; - } - return registration; } @@ -82,3 +76,49 @@ export async function uploadAgentRegistration( ); return `ipfs://${ipfsHash}`; } + +/** + * Fetches an agent registration JSON from IPFS + * + * @param ipfsUri - The IPFS URI (ipfs://...) or HTTP gateway URL + * @returns The agent registration JSON + */ +export async function fetchAgentRegistration(ipfsUri: string): Promise { + const httpUrl = ipfsToHttpUrl(ipfsUri); + + const response = await fetch(httpUrl); + if (!response.ok) { + throw new Error(`Failed to fetch registration from IPFS: ${response.statusText}`); + } + + const registration = (await response.json()) as AgentRegistration; + + // Validate it's an ERC-8004 registration + if (registration.type !== "https://eips.ethereum.org/EIPS/eip-8004#registration-v1") { + throw new Error(`Invalid registration type: ${registration.type}`); + } + + return registration; +} + +/** + * Updates an existing agent registration with new values + * + * @param existing - The existing registration JSON + * @param updates - The fields to update (only non-undefined values are applied) + * @param updates.name - Optional new name for the agent + * @param updates.description - Optional new description for the agent + * @param updates.image - Optional new image URL for the agent + * @returns A new registration object with updates applied + */ +export function updateAgentRegistration( + existing: AgentRegistration, + updates: { name?: string; description?: string; image?: string }, +): AgentRegistration { + return { + ...existing, + name: updates.name !== undefined ? updates.name : existing.name, + description: updates.description !== undefined ? updates.description : existing.description, + image: updates.image !== undefined ? updates.image : existing.image, + }; +} diff --git a/typescript/examples/langchain-cdp-chatbot/chatbot.ts b/typescript/examples/langchain-cdp-chatbot/chatbot.ts index 8fa2d7b48..4c3c2d851 100644 --- a/typescript/examples/langchain-cdp-chatbot/chatbot.ts +++ b/typescript/examples/langchain-cdp-chatbot/chatbot.ts @@ -10,6 +10,8 @@ import { CdpSolanaWalletProvider, splActionProvider, x402ActionProvider, + erc8004IdentityActionProvider, + erc8004ReputationActionProvider, } from "@coinbase/agentkit"; import { getLangChainTools } from "@coinbase/agentkit-langchain"; import { HumanMessage } from "@langchain/core/messages"; @@ -136,6 +138,8 @@ async function initializeAgent() { erc20ActionProvider(), erc721ActionProvider(), x402ActionProvider(x402Config), + erc8004IdentityActionProvider({ pinataJwt: process.env.PINATA_JWT }), + erc8004ReputationActionProvider({ pinataJwt: process.env.PINATA_JWT }), ] : isSolanaWalletProvider(walletProvider) ? [splActionProvider(), x402ActionProvider(x402Config)] diff --git a/typescript/pnpm-lock.yaml b/typescript/pnpm-lock.yaml index 394575eb5..9a13bd8b1 100644 --- a/typescript/pnpm-lock.yaml +++ b/typescript/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: devDependencies: '@changesets/changelog-github': specifier: ^0.5.1 - version: 0.5.1 + version: 0.5.1(encoding@0.1.13) '@changesets/cli': specifier: ^2.28.1 version: 2.28.1 @@ -73,13 +73,13 @@ importers: version: 2.2.0(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2) '@coinbase/cdp-sdk': specifier: ^1.38.0 - version: 1.38.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + version: 1.38.1(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) '@coinbase/coinbase-sdk': specifier: ^0.20.0 version: 0.20.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) '@coinbase/x402': - specifier: ^2.1.0 - version: 2.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + specifier: ^0.6.3 + version: 0.6.4(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@ensofinance/sdk': specifier: ^2.0.6 version: 2.0.6 @@ -91,28 +91,28 @@ importers: version: 2.18.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@privy-io/server-auth': specifier: 1.18.4 - version: 1.18.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) + version: 1.18.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) '@solana/kit': specifier: ^2.1.1 version: 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/spl-token': specifier: ^0.4.12 - version: 0.4.13(@solana/web3.js@1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + version: 0.4.13(@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) '@solana/web3.js': specifier: ^1.98.1 - version: 1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + version: 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) '@vaultsfyi/sdk': specifier: ^2.1.9 - version: 2.1.9(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 2.1.9(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@x402/evm': - specifier: ^2.2.0 - version: 2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + specifier: ^2.0.0 + version: 2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) '@x402/fetch': - specifier: ^2.2.0 - version: 2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + specifier: ^2.0.0 + version: 2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) '@x402/svm': - specifier: ^2.2.0 - version: 2.2.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + specifier: ^2.0.0 + version: 2.0.0(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@zerodev/ecdsa-validator': specifier: ^5.4.5 version: 5.4.5(@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) @@ -128,6 +128,9 @@ importers: '@zoralabs/protocol-deployments': specifier: 0.6.1 version: 0.6.1 + agent0-sdk: + specifier: ^1.4.2 + version: 1.4.2(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) bs58: specifier: ^4.0.1 version: 4.0.1 @@ -136,7 +139,7 @@ importers: version: 2.1.0 clanker-sdk: specifier: ^4.1.18 - version: 4.1.19(@types/node@20.17.27)(typescript@5.8.2)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) + version: 4.1.19(@types/node@22.13.14)(typescript@5.8.2)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) decimal.js: specifier: ^10.5.0 version: 10.5.0 @@ -191,7 +194,7 @@ importers: version: 14.1.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.27)(ts-node@10.9.2(@types/node@20.17.27)(typescript@5.8.2)) + version: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) mock-fs: specifier: ^5.2.0 version: 5.5.0 @@ -209,7 +212,7 @@ importers: version: 2.4.2 ts-jest: specifier: ^29.2.5 - version: 29.3.0(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(jest@29.7.0(@types/node@20.17.27)(ts-node@10.9.2(@types/node@20.17.27)(typescript@5.8.2)))(typescript@5.8.2) + version: 29.3.0(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(jest@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)))(typescript@5.8.2) tsd: specifier: ^0.31.2 version: 0.31.2 @@ -270,13 +273,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -301,13 +304,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -335,13 +338,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: 0.3.30 - version: 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.39 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.16 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -366,13 +369,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -397,13 +400,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -428,16 +431,16 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/web3.js': specifier: ^1.98.0 - version: 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + version: 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) bs58: specifier: ^4.0.1 version: 4.0.1 @@ -465,13 +468,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -496,13 +499,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@xmtp/agent-sdk': specifier: ^1.1.4 version: 1.1.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) @@ -542,13 +545,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -600,6 +603,22 @@ importers: specifier: ^4.7.1 version: 4.19.3 + examples/register: + dependencies: + '@coinbase/agentkit': + specifier: latest + version: 0.10.4(@types/node@20.17.27)(abitype@1.2.3(typescript@5.8.2)(zod@3.25.56))(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(typescript@5.8.2)(utf-8-validate@5.0.10) + dotenv: + specifier: ^16.4.5 + version: 16.4.7 + viem: + specifier: ^2.21.19 + version: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + devDependencies: + tsx: + specifier: ^4.7.1 + version: 4.19.3 + examples/vercel-ai-sdk-smart-wallet-chatbot: dependencies: '@ai-sdk/openai': @@ -635,7 +654,7 @@ importers: dependencies: '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) zod: specifier: ^3.22.4 version: 3.24.2 @@ -904,6 +923,12 @@ packages: '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} + '@chainsafe/is-ip@2.1.0': + resolution: {integrity: sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w==} + + '@chainsafe/netmask@2.0.0': + resolution: {integrity: sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg==} + '@changesets/apply-release-plan@7.0.10': resolution: {integrity: sha512-wNyeIJ3yDsVspYvHnEz1xQDq18D9ifed3lI+wxRQRK4pArUcuHgCTrHv0QRnnwjhVCQACxZ+CBih3wgOct6UXw==} @@ -965,6 +990,9 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@coinbase/agentkit@0.10.4': + resolution: {integrity: sha512-1ZnjY6ohuBXqseZDUhrkFnlU+UjNBr9TeZjpa4wjR8pGQq2RhhVKXQSe5UOFpitgtK3z8ytsQXTHwKRohkExKw==} + '@coinbase/cdp-sdk@1.38.1': resolution: {integrity: sha512-UOGDjv8KM+bdKF3nl/CxLytcN2SNXgKlQVA6hfAvQNPSRBW3VE4sx7OdVszDqO7fkVcxNZu91Qwfi+ARE8H76g==} @@ -977,13 +1005,17 @@ packages: '@coinbase/wallet-sdk@4.3.6': resolution: {integrity: sha512-4q8BNG1ViL4mSAAvPAtpwlOs1gpC+67eQtgIwNvT3xyeyFFd+guwkc8bcX5rTmQhXpqnhzC4f0obACbP9CqMSA==} - '@coinbase/x402@2.1.0': - resolution: {integrity: sha512-aKeM+cz//+FjzPVu/zgz7830x0KLtKarwCyxoeC71QgCn+Xcf0NhFpn3Qyw0H496y5YOuR/IQ67gP8DZ/hXFqQ==} + '@coinbase/x402@0.6.4': + resolution: {integrity: sha512-T0tNU8/oZ64GaKC3dbGcOFHqYO0BjII/uZeC/tAS9HOqhWBvewhoa0rzPzaE8SHeKOIwX2YpbFXdG0Hyh0d4mw==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@dnsquery/dns-packet@6.1.1': + resolution: {integrity: sha512-WXTuFvL3G+74SchFAtz3FgIYVOe196ycvGsMgvSH/8Goptb1qpIQtIuM4SOK9G9lhMWYpHxnXyy544ZhluFOew==} + engines: {node: '>=6'} + '@ecies/ciphers@0.2.4': resolution: {integrity: sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==} engines: {bun: '>=1', deno: '>=2', node: '>=16'} @@ -1314,6 +1346,18 @@ packages: '@types/node': optional: true + '@ipld/dag-cbor@9.2.5': + resolution: {integrity: sha512-84wSr4jv30biui7endhobYhXBQzQE4c/wdoWlFrKcfiwH+ofaPg8fwsM8okX9cOzkkrsAsNdDyH3ou+kiLquwQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + '@ipld/dag-json@10.2.6': + resolution: {integrity: sha512-51yc5azhmkvc9mp2HV/vtJ8SlgFXADp55wAPuuAjQZ+yPurAYuTVddS3ke5vT4sjcd4DbE+DWjsMZGXjFB2cuA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + '@ipld/dag-pb@4.1.5': + resolution: {integrity: sha512-w4PZ2yPqvNmlAir7/2hsCRMqny1EY5jj26iZcSgxREJexmbAc2FI21jp26MqiNdfgAxvkCnf2N/TJI18GaDNwA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -1452,6 +1496,44 @@ packages: peerDependencies: '@langchain/core': '>=0.3.29 <0.4.0' + '@leichtgewicht/ip-codec@2.0.5': + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + + '@libp2p/interface-connection@4.0.0': + resolution: {integrity: sha512-6xx/NmEc84HX7QmsjSC3hHredQYjHv4Dkf4G27adAPf+qN+vnPxmQ7gaTnk243a0++DOFTbZ2gKX/15G2B6SRg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + '@libp2p/interface-keychain@2.0.5': + resolution: {integrity: sha512-mb7QNgn9fIvC7CaJCi06GJ+a6DN6RVT9TmEi0NmedZGATeCArPeWWG7r7IfxNVXb9cVOOE1RzV1swK0ZxEJF9Q==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + '@libp2p/interface-peer-id@2.0.2': + resolution: {integrity: sha512-9pZp9zhTDoVwzRmp0Wtxw0Yfa//Yc0GqBCJi3EznBDE6HGIAVvppR91wSh2knt/0eYg0AQj7Y35VSesUTzMCUg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + '@libp2p/interface-peer-info@1.0.10': + resolution: {integrity: sha512-HQlo8NwQjMyamCHJrnILEZz+YwEOXCB2sIIw3slIrhVUYeYlTaia1R6d9umaAeLHa255Zmdm4qGH8rJLRqhCcg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + '@libp2p/interface-pubsub@3.0.7': + resolution: {integrity: sha512-+c74EVUBTfw2sx1GE/z/IjsYO6dhur+ukF0knAppeZsRQ1Kgg6K5R3eECtT28fC6dBWLjFpAvW/7QGfiDAL4RA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + '@libp2p/interface@3.1.0': + resolution: {integrity: sha512-RE7/XyvC47fQBe1cHxhMvepYKa5bFCUyFrrpj8PuM0E7JtzxU7F+Du5j4VXbg2yLDcToe0+j8mB7jvwE2AThYw==} + + '@libp2p/interfaces@3.3.2': + resolution: {integrity: sha512-p/M7plbrxLzuQchvNwww1Was7ZeGE2NaOFulMaZBYIihU8z3fhaV+a033OqnC/0NTX/yhfdNOG7znhYq3XoR/g==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + '@libp2p/logger@2.1.1': + resolution: {integrity: sha512-2UbzDPctg3cPupF6jrv6abQnAUTrbLybNOj0rmmrdGm1cN2HJ1o/hBu0sXuq4KF9P1h/eVRn1HIRbVIEKnEJrA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + '@libp2p/peer-id@2.0.4': + resolution: {integrity: sha512-gcOsN8Fbhj6izIK+ejiWsqiqKeJ2yWPapi/m55VjOvDa52/ptQzZszxQP8jUk93u36de92ATFXDfZR/Bi6eeUQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + '@lit-labs/ssr-dom-shim@1.4.0': resolution: {integrity: sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==} @@ -1549,6 +1631,22 @@ packages: resolution: {integrity: sha512-e06W7SwrontJDHwCawNO5SGxG+nU9AAx+jpHHZqGl/WrDBdWOpvirC+s58VpJTB5QemI4jTRcjWT4Pt3Q1NPQQ==} engines: {node: '>=18'} + '@multiformats/dns@1.0.13': + resolution: {integrity: sha512-yr4bxtA3MbvJ+2461kYIYMsiiZj/FIqKI64hE4SdvWJUdWF9EtZLar38juf20Sf5tguXKFUruluswAO6JsjS2w==} + + '@multiformats/multiaddr-to-uri@9.0.8': + resolution: {integrity: sha512-4eiN5iEiQfy2A98BxekUfW410L/ivg0sgjYSgSqmklnrBhK+QyMz4yqgfkub8xDTXOc7O5jp4+LVyM3ZqMeWNw==} + + '@multiformats/multiaddr@11.6.1': + resolution: {integrity: sha512-doST0+aB7/3dGK9+U5y3mtF3jq85KGbke1QiH0KE1F5mGQ9y56mFebTeu2D9FNOm+OT6UHb8Ss8vbSnpGjeLNw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + '@multiformats/multiaddr@12.5.1': + resolution: {integrity: sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ==} + + '@multiformats/multiaddr@13.0.1': + resolution: {integrity: sha512-XToN915cnfr6Lr9EdGWakGJbPT0ghpg/850HvdC+zFX8XvpLZElwa8synCiwa8TuvKNnny6m8j8NVBNCxhIO3g==} + '@noble/ciphers@1.2.1': resolution: {integrity: sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==} engines: {node: ^14.21.3 || >=16} @@ -1803,11 +1901,6 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - '@solana-program/compute-budget@0.11.0': - resolution: {integrity: sha512-7f1ePqB/eURkTwTOO9TNIdUXZcyrZoX3Uy2hNo7cXMfNhPFWp9AVgIyRNBc2jf15sdUa9gNpW+PfP2iV8AYAaw==} - peerDependencies: - '@solana/kit': ^5.0 - '@solana-program/compute-budget@0.8.0': resolution: {integrity: sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ==} peerDependencies: @@ -1819,67 +1912,29 @@ packages: '@solana/kit': ^2.1.0 '@solana/sysvars': ^2.1.0 - '@solana-program/token-2022@0.6.1': - resolution: {integrity: sha512-Ex02cruDMGfBMvZZCrggVR45vdQQSI/unHVpt/7HPt/IwFYB4eTlXtO8otYZyqV/ce5GqZ8S6uwyRf0zy6fdbA==} - peerDependencies: - '@solana/kit': ^5.0 - '@solana/sysvars': ^5.0 - '@solana-program/token@0.5.1': resolution: {integrity: sha512-bJvynW5q9SFuVOZ5vqGVkmaPGA0MCC+m9jgJj1nk5m20I389/ms69ASnhWGoOPNcie7S9OwBX0gTj2fiyWpfag==} peerDependencies: '@solana/kit': ^2.1.0 - '@solana-program/token@0.9.0': - resolution: {integrity: sha512-vnZxndd4ED4Fc56sw93cWZ2djEeeOFxtaPS8SPf5+a+JZjKA/EnKqzbE1y04FuMhIVrLERQ8uR8H2h72eZzlsA==} - peerDependencies: - '@solana/kit': ^5.0 - '@solana/accounts@2.3.0': resolution: {integrity: sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/accounts@5.5.1': - resolution: {integrity: sha512-TfOY9xixg5rizABuLVuZ9XI2x2tmWUC/OoN556xwfDlhBHBjKfszicYYOyD6nbFmwTGYarCmyGIdteXxTXIdhQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/addresses@2.3.0': resolution: {integrity: sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/addresses@5.5.1': - resolution: {integrity: sha512-5xoah3Q9G30HQghu/9BiHLb5pzlPKRC3zydQDmE3O9H//WfayxTFppsUDCL6FjYUHqj/wzK6CWHySglc2RkpdA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/assertions@2.3.0': resolution: {integrity: sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/assertions@5.5.1': - resolution: {integrity: sha512-YTCSWAlGwSlVPnWtWLm3ukz81wH4j2YaCveK+TjpvUU88hTy6fmUqxi0+hvAMAe4zKXpJyj3Az7BrLJRxbIm4Q==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/buffer-layout-utils@0.2.0': resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} engines: {node: '>= 10'} @@ -1905,15 +1960,6 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-core@5.5.1': - resolution: {integrity: sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/codecs-data-structures@2.0.0-rc.1': resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} peerDependencies: @@ -1925,15 +1971,6 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-data-structures@5.5.1': - resolution: {integrity: sha512-97bJWGyUY9WvBz3mX1UV3YPWGDTez6btCfD0ip3UVEXJbItVuUiOkzcO5iFDUtQT5riKT6xC+Mzl+0nO76gd0w==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/codecs-numbers@2.0.0-rc.1': resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: @@ -1951,15 +1988,6 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-numbers@5.5.1': - resolution: {integrity: sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/codecs-strings@2.0.0-rc.1': resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} peerDependencies: @@ -1973,18 +2001,6 @@ packages: fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5.3.3' - '@solana/codecs-strings@5.5.1': - resolution: {integrity: sha512-7klX4AhfHYA+uKKC/nxRGP2MntbYQCR3N6+v7bk1W/rSxYuhNmt+FN8aoThSZtWIKwN6BEyR1167ka8Co1+E7A==} - engines: {node: '>=20.18.0'} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: ^5.0.0 - peerDependenciesMeta: - fastestsmallesttextencoderdecoder: - optional: true - typescript: - optional: true - '@solana/codecs@2.0.0-rc.1': resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} peerDependencies: @@ -1996,15 +2012,6 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs@5.5.1': - resolution: {integrity: sha512-Vea29nJub/bXjfzEV7ZZQ/PWr1pYLZo3z0qW0LQL37uKKVzVFRQlwetd7INk3YtTD3xm9WUYr7bCvYUk3uKy2g==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/errors@2.0.0-rc.1': resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} hasBin: true @@ -2025,124 +2032,42 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/errors@5.5.1': - resolution: {integrity: sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg==} - engines: {node: '>=20.18.0'} - hasBin: true - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/fast-stable-stringify@2.3.0': resolution: {integrity: sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/fast-stable-stringify@5.5.1': - resolution: {integrity: sha512-Ni7s2FN33zTzhTFgRjEbOVFO+UAmK8qi3Iu0/GRFYK4jN696OjKHnboSQH/EacQ+yGqS54bfxf409wU5dsLLCw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/functional@2.3.0': resolution: {integrity: sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/functional@5.5.1': - resolution: {integrity: sha512-tTHoJcEQq3gQx5qsdsDJ0LEJeFzwNpXD80xApW9o/PPoCNimI3SALkZl+zNW8VnxRrV3l3yYvfHWBKe/X3WG3w==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - - '@solana/instruction-plans@5.5.1': - resolution: {integrity: sha512-7z3CB7YMcFKuVvgcnNY8bY6IsZ8LG61Iytbz7HpNVGX2u1RthOs1tRW8luTzSG1MPL0Ox7afyAVMYeFqSPHnaQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/instructions@2.3.0': resolution: {integrity: sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/instructions@5.5.1': - resolution: {integrity: sha512-h0G1CG6S+gUUSt0eo6rOtsaXRBwCq1+Js2a+Ps9Bzk9q7YHNFA75/X0NWugWLgC92waRp66hrjMTiYYnLBoWOQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/keys@2.3.0': resolution: {integrity: sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/keys@5.5.1': - resolution: {integrity: sha512-KRD61cL7CRL+b4r/eB9dEoVxIf/2EJ1Pm1DmRYhtSUAJD2dJ5Xw8QFuehobOGm9URqQ7gaQl+Fkc1qvDlsWqKg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/kit@2.3.0': resolution: {integrity: sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/kit@5.5.1': - resolution: {integrity: sha512-irKUGiV2yRoyf+4eGQ/ZeCRxa43yjFEL1DUI5B0DkcfZw3cr0VJtVJnrG8OtVF01vT0OUfYOcUn6zJW5TROHvQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/nominal-types@2.3.0': resolution: {integrity: sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/nominal-types@5.5.1': - resolution: {integrity: sha512-I1ImR+kfrLFxN5z22UDiTWLdRZeKtU0J/pkWkO8qm/8WxveiwdIv4hooi8pb6JnlR4mSrWhq0pCIOxDYrL9GIQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - - '@solana/offchain-messages@5.5.1': - resolution: {integrity: sha512-g+xHH95prTU+KujtbOzj8wn+C7ZNoiLhf3hj6nYq3MTyxOXtBEysguc97jJveUZG0K97aIKG6xVUlMutg5yxhw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/options@2.0.0-rc.1': resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} peerDependencies: @@ -2154,129 +2079,48 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/options@5.5.1': - resolution: {integrity: sha512-eo971c9iLNLmk+yOFyo7yKIJzJ/zou6uKpy6mBuyb/thKtS/haiKIc3VLhyTXty3OH2PW8yOlORJnv4DexJB8A==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - - '@solana/plugin-core@5.5.1': - resolution: {integrity: sha512-VUZl30lDQFJeiSyNfzU1EjYt2QZvoBFKEwjn1lilUJw7KgqD5z7mbV7diJhT+dLFs36i0OsjXvq5kSygn8YJ3A==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/programs@2.3.0': resolution: {integrity: sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/programs@5.5.1': - resolution: {integrity: sha512-7U9kn0Jsx1NuBLn5HRTFYh78MV4XN145Yc3WP/q5BlqAVNlMoU9coG5IUTJIG847TUqC1lRto3Dnpwm6T4YRpA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/promises@2.3.0': resolution: {integrity: sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/promises@5.5.1': - resolution: {integrity: sha512-T9lfuUYkGykJmppEcssNiCf6yiYQxJkhiLPP+pyAc2z84/7r3UVIb2tNJk4A9sucS66pzJnVHZKcZVGUUp6wzA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-api@2.3.0': resolution: {integrity: sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-api@5.5.1': - resolution: {integrity: sha512-XWOQQPhKl06Vj0xi3RYHAc6oEQd8B82okYJ04K7N0Vvy3J4PN2cxeK7klwkjgavdcN9EVkYCChm2ADAtnztKnA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-parsed-types@2.3.0': resolution: {integrity: sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-parsed-types@5.5.1': - resolution: {integrity: sha512-HEi3G2nZqGEsa3vX6U0FrXLaqnUCg4SKIUrOe8CezD+cSFbRTOn3rCLrUmJrhVyXlHoQVaRO9mmeovk31jWxJg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-spec-types@2.3.0': resolution: {integrity: sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-spec-types@5.5.1': - resolution: {integrity: sha512-6OFKtRpIEJQs8Jb2C4OO8KyP2h2Hy1MFhatMAoXA+0Ik8S3H+CicIuMZvGZ91mIu/tXicuOOsNNLu3HAkrakrw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-spec@2.3.0': resolution: {integrity: sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-spec@5.5.1': - resolution: {integrity: sha512-m3LX2bChm3E3by4mQrH4YwCAFY57QBzuUSWqlUw7ChuZ+oLLOq7b2czi4i6L4Vna67j3eCmB3e+4tqy1j5wy7Q==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-subscriptions-api@2.3.0': resolution: {integrity: sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-subscriptions-api@5.5.1': - resolution: {integrity: sha512-5Oi7k+GdeS8xR2ly1iuSFkAv6CZqwG0Z6b1QZKbEgxadE1XGSDrhM2cn59l+bqCozUWCqh4c/A2znU/qQjROlw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-subscriptions-channel-websocket@2.3.0': resolution: {integrity: sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==} engines: {node: '>=20.18.0'} @@ -2284,120 +2128,48 @@ packages: typescript: '>=5.3.3' ws: ^8.18.0 - '@solana/rpc-subscriptions-channel-websocket@5.5.1': - resolution: {integrity: sha512-7tGfBBrYY8TrngOyxSHoCU5shy86iA9SRMRrPSyBhEaZRAk6dnbdpmUTez7gtdVo0BCvh9nzQtUycKWSS7PnFQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-subscriptions-spec@2.3.0': resolution: {integrity: sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-subscriptions-spec@5.5.1': - resolution: {integrity: sha512-iq+rGq5fMKP3/mKHPNB6MC8IbVW41KGZg83Us/+LE3AWOTWV1WT20KT2iH1F1ik9roi42COv/TpoZZvhKj45XQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-subscriptions@2.3.0': resolution: {integrity: sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-subscriptions@5.5.1': - resolution: {integrity: sha512-CTMy5bt/6mDh4tc6vUJms9EcuZj3xvK0/xq8IQ90rhkpYvate91RjBP+egvjgSayUg9yucU9vNuUpEjz4spM7w==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-transformers@2.3.0': resolution: {integrity: sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-transformers@5.5.1': - resolution: {integrity: sha512-OsWqLCQdcrRJKvHiMmwFhp9noNZ4FARuMkHT5us3ustDLXaxOjF0gfqZLnMkulSLcKt7TGXqMhBV+HCo7z5M8Q==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-transport-http@2.3.0': resolution: {integrity: sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-transport-http@5.5.1': - resolution: {integrity: sha512-yv8GoVSHqEV0kUJEIhkdOVkR2SvJ6yoWC51cJn2rSV7plr6huLGe0JgujCmB7uZhhaLbcbP3zxXxu9sOjsi7Fg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc-types@2.3.0': resolution: {integrity: sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-types@5.5.1': - resolution: {integrity: sha512-bibTFQ7PbHJJjGJPmfYC2I+/5CRFS4O2p9WwbFraX1Keeel+nRrt/NBXIy8veP5AEn2sVJIyJPpWBRpCx1oATA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/rpc@2.3.0': resolution: {integrity: sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc@5.5.1': - resolution: {integrity: sha512-ku8zTUMrkCWci66PRIBC+1mXepEnZH/q1f3ck0kJZ95a06bOTl5KU7HeXWtskkyefzARJ5zvCs54AD5nxjQJ+A==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/signers@2.3.0': resolution: {integrity: sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/signers@5.5.1': - resolution: {integrity: sha512-FY0IVaBT2kCAze55vEieR6hag4coqcuJ31Aw3hqRH7mv6sV8oqwuJmUrx+uFwOp1gwd5OEAzlv6N4hOOple4sQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/spl-token-group@0.0.7': resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} engines: {node: '>=16'} @@ -2422,75 +2194,30 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/subscribable@5.5.1': - resolution: {integrity: sha512-9K0PsynFq0CsmK1CDi5Y2vUIJpCqkgSS5yfDN0eKPgHqEptLEaia09Kaxc90cSZDZU5mKY/zv1NBmB6Aro9zQQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/sysvars@2.3.0': resolution: {integrity: sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/sysvars@5.5.1': - resolution: {integrity: sha512-k3Quq87Mm+geGUu1GWv6knPk0ALsfY6EKSJGw9xUJDHzY/RkYSBnh0RiOrUhtFm2TDNjOailg8/m0VHmi3reFA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/transaction-confirmation@2.3.0': resolution: {integrity: sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/transaction-confirmation@5.5.1': - resolution: {integrity: sha512-j4mKlYPHEyu+OD7MBt3jRoX4ScFgkhZC6H65on4Fux6LMScgivPJlwnKoZMnsgxFgWds0pl+BYzSiALDsXlYtw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/transaction-messages@2.3.0': resolution: {integrity: sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/transaction-messages@5.5.1': - resolution: {integrity: sha512-aXyhMCEaAp3M/4fP0akwBBQkFPr4pfwoC5CLDq999r/FUwDax2RE/h4Ic7h2Xk+JdcUwsb+rLq85Y52hq84XvQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/transactions@2.3.0': resolution: {integrity: sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/transactions@5.5.1': - resolution: {integrity: sha512-8hHtDxtqalZ157pnx6p8k10D7J/KY/biLzfgh9R09VNLLY3Fqi7kJvJCr7M2ik3oRll56pxhraAGCC9yIT6eOA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@solana/wallet-standard-features@1.3.0': resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} engines: {node: '>=16'} @@ -2588,6 +2315,9 @@ packages: '@types/lodash@4.17.20': resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/minimatch@3.0.5': + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} @@ -2843,17 +2573,14 @@ packages: '@x402/core@2.0.0': resolution: {integrity: sha512-tgC8Ujj8Bi9zU1318RAOcagffaHRMPupqj0tlmcOm4j/a/iWGoN58SIpqFV98qkZi7z6BpFAsScCyXnmaDvIyQ==} - '@x402/core@2.2.0': - resolution: {integrity: sha512-UyPX7UVrqCyFTMeDWAx9cn9LvcaRlUoAknSehuxJ07vXLVhC7Wx5R1h2CV12YkdB+hE6K48Qvfd4qrvbpqqYfw==} - - '@x402/evm@2.2.0': - resolution: {integrity: sha512-fJaIS97Ir+ykkxLUdI+/cFiQFyruWukJbZ3PLo8518n6IKP9B7HqsJ1cUMRWd/fHFXNqOEAo6tKFW4wHKOxd2A==} + '@x402/evm@2.0.0': + resolution: {integrity: sha512-BA8zC1/AWYq99tWRLNoqudJkeZJpkbPdHMEjrsEOjineVoijnz5N/0NO0klxT64oDG9kNbeczwLU/mTj7NneEw==} - '@x402/fetch@2.2.0': - resolution: {integrity: sha512-oSn3jVe03rJaqbgMA33LrKFBbzelVfMtjLcE/9WIaTB0K/NLPo8xWDLMkiI9yRlaEO7sXvpMfSCDrRdkjf33gA==} + '@x402/fetch@2.0.0': + resolution: {integrity: sha512-7odbj+d9Op6Ns62YPOAw37Afvf0ldZ90bHOrAJFP9ahcV6l0iHdTtr7NcSqIZI+0r4emDmIIpGtLRhyyVCQYnA==} - '@x402/svm@2.2.0': - resolution: {integrity: sha512-DJkEalO1G1T+o3xl23ZAvK5d0SJ+0gkJ04BZKT8SkMIZoZlR1wWhJXPwL+yvFapBEFoBSii8H5VcFiaBfFALDw==} + '@x402/svm@2.0.0': + resolution: {integrity: sha512-VJdxUoiNZ18/wucXToEscVKNfN+x18jK9c6p0AscS7iJaNq3z3ST/guf8asRedEWX9Rus62SilTmq3UYdNcnvw==} '@xmtp/agent-sdk@1.1.4': resolution: {integrity: sha512-98hFtZmQln+QxA3eN6Of3ot9jxjUsRoMBvGz4yRV7gRrqJtH4iVqWTCCN1SqFpBPaQECdKPJhlxCEE7II+5jMw==} @@ -2987,6 +2714,9 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + abort-error@1.0.1: + resolution: {integrity: sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg==} + accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} @@ -3016,6 +2746,10 @@ packages: aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + agent0-sdk@1.4.2: + resolution: {integrity: sha512-FBJlF8RVzuyV6MJbv24XHbRfVniipm+7XTk839edh0z4cpD3E3ViXp/eWw+7vwWecQEcOc7CJQ4XOKSUGgGi0A==} + engines: {node: '>=22.0.0'} + agentkeepalive@4.6.0: resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} engines: {node: '>= 8.0.0'} @@ -3057,6 +2791,9 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + any-signal@3.0.1: + resolution: {integrity: sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg==} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -3230,6 +2967,9 @@ packages: bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + blob-to-it@2.0.10: + resolution: {integrity: sha512-I39vO57y+LBEIcAV7fif0sn96fYOYVqrPiOD+53MxQGv4DBgt1/HHZh0BHheWx2hVe24q5LTSXxqeV1Y3Nzkgg==} + bn.js@4.11.6: resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} @@ -3265,6 +3005,12 @@ packages: brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + browser-readablestream-to-it@1.0.3: + resolution: {integrity: sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw==} + + browser-readablestream-to-it@2.0.10: + resolution: {integrity: sha512-I/9hEcRtjct8CzD9sVo9Mm4ntn0D+7tOVrjbPl69XAoOfgJ8NBdOQU+WX+5SHhcELJDb14mWt7zuvyqha+MEAQ==} + browserslist@4.24.4: resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3348,6 +3094,10 @@ packages: resolution: {integrity: sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==} hasBin: true + cborg@4.5.8: + resolution: {integrity: sha512-6/viltD51JklRhq4L7jC3zgy6gryuG5xfZ3kzpE+PravtyeQLeQmCYLREhQH7pWENg5pY4Yu/XCd6a7dKScVlw==} + hasBin: true + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -3356,10 +3106,6 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -3467,10 +3213,6 @@ packages: resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} engines: {node: '>=20'} - commander@14.0.2: - resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} - engines: {node: '>=20'} - commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -3553,6 +3295,9 @@ packages: crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + dag-jose@4.0.0: + resolution: {integrity: sha512-tw595L3UYoOUT9dSJPbBEG/qpRpw24kRZxa5SLRnlnr+g5L7O8oEs1d3W5TiVA1oJZbthVsf0Vi3zFN66qcEBA==} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -3714,6 +3459,9 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dns-over-http-resolver@2.1.3: + resolution: {integrity: sha512-zjRYFhq+CsxPAouQWzOsxNMvEN+SHisjzhX8EMxd2Y0EG3thvn6wXQgMJLnTDImkhe4jhLbOQpXtL10nALBOSA==} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -3755,6 +3503,10 @@ packages: engines: {node: '>=0.10.0'} hasBin: true + electron-fetch@1.9.1: + resolution: {integrity: sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==} + engines: {node: '>=6'} + electron-to-chromium@1.5.124: resolution: {integrity: sha512-riELkpDUqBi00gqreV3RIGoowxGrfueEKBd6zPdOk/I8lvuFpBGNkYoHof3zUHbiTBsIU8oxdIIL/WNrAG1/7A==} @@ -3778,6 +3530,9 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -3796,6 +3551,9 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + err-code@3.0.1: + resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -4084,6 +3842,9 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -4239,6 +4000,9 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-iterator@1.0.2: + resolution: {integrity: sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==} + get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -4296,6 +4060,11 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphql-request@6.1.0: + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + graphql-request@7.2.0: resolution: {integrity: sha512-0GR7eQHBFYz372u9lxS16cOtEekFlZYB2qOyq8wDvzRmdRSJ0mgUVX1tzNcIzk3G+4NY+mGtSz411wZdeDF/+A==} peerDependencies: @@ -4346,6 +4115,9 @@ packages: hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hashlru@2.3.0: + resolution: {integrity: sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -4448,6 +4220,20 @@ packages: resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==} engines: {node: '>=12.0.0'} + interface-datastore@7.0.4: + resolution: {integrity: sha512-Q8LZS/jfFFHz6XyZazLTAc078SSCoa27ZPBOfobWdpDiFO7FqPA2yskitUJIhaCgxNK8C+/lMBUTBNfVIDvLiw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + interface-datastore@8.3.2: + resolution: {integrity: sha512-R3NLts7pRbJKc3qFdQf+u40hK8XWc0w4Qkx3OFEstC80VoaDUABY/dXA2EJPhtNC+bsrf41Ehvqb6+pnIclyRA==} + + interface-store@3.0.4: + resolution: {integrity: sha512-OjHUuGXbH4eXSBx1TF1tTySvjLldPLzRSYYXJwrEQI+XfH5JWYZofr0gVMV4F8XTwC+4V7jomDYkvGRmDSRKqQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + interface-store@6.0.3: + resolution: {integrity: sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA==} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -4456,6 +4242,29 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + ipfs-core-types@0.14.1: + resolution: {integrity: sha512-4ujF8NlM9bYi2I6AIqPP9wfGGX0x/gRCkMoFdOQfxxrFg6HcAdfS+0/irK8mp4e7znOHWReOHeWqCGw+dAPwsw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details + + ipfs-core-utils@0.18.1: + resolution: {integrity: sha512-P7jTpdfvlyBG3JR4o+Th3QJADlmXmwMxbkjszXry6VAjfSfLIIqXsdeYPoVRkV69GFEeQozuz2k/jR+U8cUH/Q==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details + + ipfs-http-client@60.0.1: + resolution: {integrity: sha512-amwM5TNuf077J+/q27jPHfatC05vJuIbX6ZnlYLjc2QsjOCKsORNBqV3brNw7l+fPrijV1yrwEDLG3JEnKsfMw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + deprecated: js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details + + ipfs-unixfs@9.0.1: + resolution: {integrity: sha512-jh2CbXyxID+v3jLml9CqMwjdSS9ZRnsGfQGGPOfem0/hT/L48xUeTPvh7qLFWkZcIMhZtG+fnS1teei8x5uGBg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + ipfs-utils@9.0.14: + resolution: {integrity: sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} @@ -4513,6 +4322,9 @@ packages: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} + is-electron@2.2.2: + resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -4569,6 +4381,10 @@ packages: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -4645,6 +4461,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + iso-url@1.2.1: + resolution: {integrity: sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==} + engines: {node: '>=12'} + isomorphic-ws@4.0.1: resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} peerDependencies: @@ -4684,6 +4504,42 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} + it-all@1.0.6: + resolution: {integrity: sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==} + + it-all@2.0.1: + resolution: {integrity: sha512-9UuJcCRZsboz+HBQTNOau80Dw+ryGaHYFP/cPYzFBJBFcfDathMYnhHk4t52en9+fcyDGPTdLB+lFc1wzQIroA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + it-first@2.0.1: + resolution: {integrity: sha512-noC1oEQcWZZMUwq7VWxHNLML43dM+5bviZpfmkxkXlvBe60z7AFRqpZSga9uQBo792jKv9otnn1IjA4zwgNARw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + it-glob@1.0.2: + resolution: {integrity: sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==} + + it-last@2.0.1: + resolution: {integrity: sha512-uVMedYW0wa2Cx0TAmcOCLbfuLLII7+vyURmhKa8Zovpd+aBTMsmINtsta2n364wJ5qsEDBH+akY1sUtAkaYBlg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + it-map@2.0.1: + resolution: {integrity: sha512-a2GcYDHiAh/eSU628xlvB56LA98luXZnniH2GlD0IdBzf15shEq9rBeb0Rg3o1SWtNILUAwqmQxEXcewGCdvmQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + it-peekable@2.0.1: + resolution: {integrity: sha512-fJ/YTU9rHRhGJOM2hhQKKEfRM6uKB9r4yGGFLBHqp72ACC8Yi6+7/FhuBAMG8cpN6mLoj9auVX7ZJ3ul6qFpTA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + it-pushable@3.2.3: + resolution: {integrity: sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==} + + it-stream-types@1.0.5: + resolution: {integrity: sha512-I88Ka1nHgfX62e5mi5LLL+oueqz7Ltg0bUdtsUKDe9SoUqbQPf2Mp5kxDTe9pNhHQGs4pvYPAINwuZ1HAt42TA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + it-to-stream@1.0.0: + resolution: {integrity: sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==} + jake@10.9.2: resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} @@ -5008,6 +4864,9 @@ packages: lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + main-event@1.0.1: + resolution: {integrity: sha512-NWtdGrAca/69fm6DIVd8T9rtfDII4Q8NQbIbsKQq2VzS9eqOGYs8uaNQjcuaCq/d9H/o625aOTJX2Qoxzqw0Pw==} + make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -5055,6 +4914,10 @@ packages: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} + merge-options@3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -5160,9 +5023,20 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + multiformats@11.0.2: + resolution: {integrity: sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + + multiformats@12.1.3: + resolution: {integrity: sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + multiformats@13.3.2: resolution: {integrity: sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==} + multiformats@13.4.2: + resolution: {integrity: sha512-eh6eHCrRi1+POZ3dA+Dq1C6jhP1GNtr9CRINMb67OKzqW9I5DUuZM/3jLPlzhgpGeiNUlEGEbkCYChXMCc/8DQ==} + multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} @@ -5178,6 +5052,21 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@4.0.2: + resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} + engines: {node: ^14 || ^16 || >=18} + hasBin: true + + native-fetch@3.0.0: + resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} + peerDependencies: + node-fetch: '*' + + native-fetch@4.0.2: + resolution: {integrity: sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==} + peerDependencies: + undici: '*' + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -5389,6 +5278,17 @@ packages: typescript: optional: true + p-defer@3.0.0: + resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} + engines: {node: '>=8'} + + p-defer@4.0.1: + resolution: {integrity: sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A==} + engines: {node: '>=12'} + + p-fifo@1.0.0: + resolution: {integrity: sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==} + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -5421,6 +5321,10 @@ packages: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} + p-queue@9.1.0: + resolution: {integrity: sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==} + engines: {node: '>=20'} + p-retry@4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} @@ -5429,6 +5333,10 @@ packages: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} + p-timeout@7.0.1: + resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + engines: {node: '>=20'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -5440,6 +5348,9 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-duration@1.1.2: + resolution: {integrity: sha512-p8EIONG8L0u7f8GFgfVlL4n8rnChTt8O5FSxgxMz2tjc9FMP199wxVKVB6IbKx11uTbKHACSvaLVIKNnoeNR/A==} + parse-imports@2.2.1: resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==} engines: {node: '>= 18'} @@ -5570,6 +5481,9 @@ packages: process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + progress-events@1.0.1: + resolution: {integrity: sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw==} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -5655,6 +5569,9 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-native-fetch-api@3.0.0: + resolution: {integrity: sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==} + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -5690,6 +5607,9 @@ packages: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} + receptacle@1.3.2: + resolution: {integrity: sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==} + redaxios@0.5.1: resolution: {integrity: sha512-FSD2AmfdbkYwl7KDExYQlVvIrFz6Yd83pGfaGjBzM9F6rpq8g652Q4Yq5QD4c+nf4g2AgeElv1y+8ajUPiOYMg==} @@ -5757,6 +5677,9 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} + retimer@3.0.0: + resolution: {integrity: sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -5995,6 +5918,9 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + stream-to-it@0.2.4: + resolution: {integrity: sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==} + strict-uri-encode@2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} @@ -6150,6 +6076,9 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + timeout-abort-controller@3.0.0: + resolution: {integrity: sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -6376,9 +6305,18 @@ packages: ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + uint8-varint@2.0.4: + resolution: {integrity: sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==} + + uint8arraylist@2.4.8: + resolution: {integrity: sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==} + uint8arrays@3.1.0: resolution: {integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==} + uint8arrays@4.0.10: + resolution: {integrity: sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==} + uint8arrays@5.1.0: resolution: {integrity: sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==} @@ -6404,9 +6342,6 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - undici-types@7.19.2: - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} - undici@5.29.0: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} @@ -6514,6 +6449,9 @@ packages: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} + utf8-codec@1.0.0: + resolution: {integrity: sha512-S/QSLezp3qvG4ld5PUfXiH7mCFxLKjSVZRFkB3DOjgwHuJPFDkInAXc/anf7BAbHt/D38ozDzL+QMZ6/7gsI6w==} + utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} @@ -6561,6 +6499,9 @@ packages: react: optional: true + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -6768,21 +6709,12 @@ packages: utf-8-validate: optional: true - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - x402-fetch@0.7.0: resolution: {integrity: sha512-HS7v6wsIVrU8TvAGBwRmA3I+ZXbanPraA3OMj90y6Hn1Mej1wAELOK4VpGh6zI8d6w5E464BnGu9o0FE+8DRAA==} + x402@0.6.1: + resolution: {integrity: sha512-9UmeCSsYzFGav5FdVP70VplKlR3V90P0DZ9fPSrlLVp0ifUVi1S9TztvegkmIHE9xTGZ1GWNi+bkne6N0Ea58w==} + x402@0.7.2: resolution: {integrity: sha512-JleP1GmeOP1bEuwzFVtjusL3t5H1PGufROrBKg5pj/MfcGswkBvfB6j5Gm5UeA+kwp0ZmOkkHAqkoHF1WexbsQ==} @@ -6896,6 +6828,10 @@ snapshots: dependencies: viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@across-protocol/app-sdk@0.2.0(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': + dependencies: + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@adraffy/ens-normalize@1.10.1': {} '@adraffy/ens-normalize@1.11.0': {} @@ -7155,6 +7091,26 @@ snapshots: - utf-8-validate - zod + '@base-org/account@1.1.1(bufferutil@4.0.9)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(zod@3.25.56)': + dependencies: + '@noble/hashes': 1.4.0 + clsx: 1.2.1 + eventemitter3: 5.0.1 + idb-keyval: 6.2.1 + ox: 0.6.9(typescript@5.8.2)(zod@3.25.56) + preact: 10.24.2 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + zustand: 5.0.3(use-sync-external-store@1.4.0) + transitivePeerDependencies: + - '@types/react' + - bufferutil + - immer + - react + - typescript + - use-sync-external-store + - utf-8-validate + - zod + '@base-org/account@2.2.0(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2)': dependencies: '@noble/hashes': 1.4.0 @@ -7175,10 +7131,36 @@ snapshots: - utf-8-validate - zod + '@base-org/account@2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + dependencies: + '@noble/hashes': 1.4.0 + clsx: 1.2.1 + eventemitter3: 5.0.1 + idb-keyval: 6.2.1 + ox: 0.6.9(typescript@5.8.2)(zod@3.25.56) + preact: 10.24.2 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + zustand: 5.0.3(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + transitivePeerDependencies: + - '@types/react' + - bufferutil + - immer + - react + - typescript + - use-sync-external-store + - utf-8-validate + - zod + '@bcoe/v8-coverage@0.2.3': {} '@cfworker/json-schema@4.1.1': {} + '@chainsafe/is-ip@2.1.0': {} + + '@chainsafe/netmask@2.0.0': + dependencies: + '@chainsafe/is-ip': 2.1.0 + '@changesets/apply-release-plan@7.0.10': dependencies: '@changesets/config': 3.1.1 @@ -7208,9 +7190,9 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/changelog-github@0.5.1': + '@changesets/changelog-github@0.5.1(encoding@0.1.13)': dependencies: - '@changesets/get-github-info': 0.6.0 + '@changesets/get-github-info': 0.6.0(encoding@0.1.13) '@changesets/types': 6.1.0 dotenv: 8.6.0 transitivePeerDependencies: @@ -7268,10 +7250,10 @@ snapshots: picocolors: 1.1.1 semver: 7.7.1 - '@changesets/get-github-info@0.6.0': + '@changesets/get-github-info@0.6.0(encoding@0.1.13)': dependencies: dataloader: 1.4.0 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -7336,10 +7318,87 @@ snapshots: human-id: 4.1.1 prettier: 2.8.8 - '@coinbase/cdp-sdk@1.38.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@coinbase/agentkit@0.10.4(@types/node@20.17.27)(abitype@1.2.3(typescript@5.8.2)(zod@3.25.56))(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@across-protocol/app-sdk': 0.2.0(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@alloralabs/allora-sdk': 0.1.0 + '@base-org/account': 2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@coinbase/cdp-sdk': 1.38.1(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@coinbase/coinbase-sdk': 0.20.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@coinbase/x402': 0.6.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@ensofinance/sdk': 2.0.6 + '@jup-ag/api': 6.0.40 + '@privy-io/public-api': 2.18.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@privy-io/server-auth': 1.18.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/spl-token': 0.4.13(@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@vaultsfyi/sdk': 2.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@x402/evm': 2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@x402/fetch': 2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@x402/svm': 2.0.0(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@zerodev/ecdsa-validator': 5.4.5(@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@zerodev/intent': 0.0.24(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@zerodev/sdk': 5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@zoralabs/coins-sdk': 0.2.8(abitype@1.2.3(typescript@5.8.2)(zod@3.25.56))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@zoralabs/protocol-deployments': 0.6.1 + bs58: 4.0.1 + canonicalize: 2.1.0 + clanker-sdk: 4.1.19(@types/node@20.17.27)(typescript@5.8.2)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + decimal.js: 10.5.0 + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + graphql-request: 7.2.0(graphql@16.11.0) + md5: 2.3.0 + opensea-js: 7.1.18(bufferutil@4.0.9)(utf-8-validate@5.0.10) + reflect-metadata: 0.2.2 + sushi: 6.2.1(typescript@5.8.2)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56) + twitter-api-v2: 1.22.0 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + zod: 3.25.56 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@solana/sysvars' + - '@tanstack/query-core' + - '@tanstack/react-query' + - '@types/node' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@zerodev/webauthn-key' + - abitype + - aws4fetch + - bufferutil + - db0 + - debug + - encoding + - fastestsmallesttextencoderdecoder + - graphql + - immer + - ioredis + - react + - supports-color + - typescript + - uploadthing + - use-sync-external-store + - utf-8-validate + - ws + + '@coinbase/cdp-sdk@1.38.1(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: - '@solana/spl-token': 0.4.13(@solana/web3.js@1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.4.13(@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) abitype: 1.0.6(typescript@5.8.2)(zod@3.25.56) axios: 1.12.2 axios-retry: 4.5.0(axios@1.12.2) @@ -7379,6 +7438,29 @@ snapshots: - utf-8-validate - zod + '@coinbase/coinbase-sdk@0.20.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + dependencies: + '@scure/bip32': 1.6.2 + abitype: 1.0.8(typescript@5.8.2)(zod@3.25.56) + axios: 1.9.0 + axios-mock-adapter: 1.22.0(axios@1.9.0) + axios-retry: 4.5.0(axios@1.9.0) + bip32: 4.0.0 + bip39: 3.1.0 + decimal.js: 10.5.0 + dotenv: 16.4.7 + ed2curve: 0.3.0 + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + jose: 5.10.0 + secp256k1: 5.0.1 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + transitivePeerDependencies: + - bufferutil + - debug + - typescript + - utf-8-validate + - zod + '@coinbase/wallet-sdk@3.9.3': dependencies: bn.js: 5.2.2 @@ -7413,25 +7495,118 @@ snapshots: - utf-8-validate - zod - '@coinbase/x402@2.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@coinbase/wallet-sdk@4.3.6(bufferutil@4.0.9)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: - '@coinbase/cdp-sdk': 1.38.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@x402/core': 2.0.0 + '@noble/hashes': 1.4.0 + clsx: 1.2.1 + eventemitter3: 5.0.1 + idb-keyval: 6.2.1 + ox: 0.6.9(typescript@5.8.2)(zod@3.25.56) + preact: 10.24.2 viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - zod: 3.25.56 + zustand: 5.0.3(use-sync-external-store@1.4.0) transitivePeerDependencies: + - '@types/react' - bufferutil - - debug - - encoding - - fastestsmallesttextencoderdecoder + - immer + - react - typescript + - use-sync-external-store - utf-8-validate + - zod - '@cspotcode/source-map-support@0.8.1': + '@coinbase/x402@0.6.4(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@coinbase/cdp-sdk': 1.38.1(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + x402: 0.6.1(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + zod: 3.25.56 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@solana/sysvars' + - '@tanstack/query-core' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - debug + - encoding + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - supports-color + - typescript + - uploadthing + - utf-8-validate + - ws + + '@coinbase/x402@0.6.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@coinbase/cdp-sdk': 1.38.1(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + x402: 0.6.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) + zod: 3.25.56 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@solana/sysvars' + - '@tanstack/query-core' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - debug + - encoding + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - supports-color + - typescript + - uploadthing + - utf-8-validate + - ws + + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 optional: true + '@dnsquery/dns-packet@6.1.1': + dependencies: + '@leichtgewicht/ip-codec': 2.0.5 + utf8-codec: 1.0.0 + '@ecies/ciphers@0.2.4(@noble/ciphers@1.3.0)': dependencies: '@noble/ciphers': 1.3.0 @@ -7831,6 +8006,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@gemini-wallet/core@0.2.0(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': + dependencies: + '@metamask/rpc-errors': 7.0.2 + eventemitter3: 5.0.1 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + transitivePeerDependencies: + - supports-color + '@gerrit0/mini-shiki@1.27.2': dependencies: '@shikijs/engine-oniguruma': 1.29.2 @@ -7862,6 +8045,27 @@ snapshots: optionalDependencies: '@types/node': 20.17.27 + '@inquirer/external-editor@1.0.1(@types/node@22.13.14)': + dependencies: + chardet: 2.1.0 + iconv-lite: 0.6.3 + optionalDependencies: + '@types/node': 22.13.14 + + '@ipld/dag-cbor@9.2.5': + dependencies: + cborg: 4.5.8 + multiformats: 13.3.2 + + '@ipld/dag-json@10.2.6': + dependencies: + cborg: 4.5.8 + multiformats: 13.3.2 + + '@ipld/dag-pb@4.1.5': + dependencies: + multiformats: 13.3.2 + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 @@ -7916,6 +8120,41 @@ snapshots: - supports-color - ts-node + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.27 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.17.27)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 @@ -8062,31 +8301,14 @@ snapshots: '@jup-ag/api@6.0.40': {} - '@langchain/core@0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))': - dependencies: - '@cfworker/json-schema': 4.1.1 - ansi-styles: 5.2.0 - camelcase: 6.3.0 - decamelize: 1.2.0 - js-tiktoken: 1.0.19 - langsmith: 0.2.15(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) - mustache: 4.2.0 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 10.0.0 - zod: 3.24.2 - zod-to-json-schema: 3.24.5(zod@3.24.2) - transitivePeerDependencies: - - openai - - '@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))': + '@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.19 - langsmith: 0.2.15(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + langsmith: 0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -8096,14 +8318,14 @@ snapshots: transitivePeerDependencies: - openai - '@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))': + '@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.19 - langsmith: 0.2.15(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + langsmith: 0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -8113,14 +8335,14 @@ snapshots: transitivePeerDependencies: - openai - '@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))': + '@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.19 - langsmith: 0.2.15(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + langsmith: 0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -8130,14 +8352,14 @@ snapshots: transitivePeerDependencies: - openai - '@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))': + '@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.19 - langsmith: 0.2.15(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + langsmith: 0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -8147,86 +8369,71 @@ snapshots: transitivePeerDependencies: - openai - '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))': - dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) - uuid: 10.0.0 - - '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))': + '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) uuid: 10.0.0 - '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))': + '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) uuid: 10.0.0 - '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))': + '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) uuid: 10.0.0 - '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))': + '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) uuid: 10.0.0 - '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)': - dependencies: - '@types/json-schema': 7.0.15 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 9.0.1 - optionalDependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) - react: 18.3.1 - - '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)': + '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) react: 18.3.1 - '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)': + '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) react: 18.3.1 - '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)': + '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) react: 18.3.1 - '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)': + '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) react: 18.3.1 - '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56))': + '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) - '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))) - '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))) + '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1) uuid: 10.0.0 zod: 3.24.2 optionalDependencies: @@ -8234,11 +8441,11 @@ snapshots: transitivePeerDependencies: - react - '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2))': + '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) - '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))) - '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))) + '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1) uuid: 10.0.0 zod: 3.24.2 optionalDependencies: @@ -8246,11 +8453,11 @@ snapshots: transitivePeerDependencies: - react - '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2))': + '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) - '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))) - '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))) + '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1) uuid: 10.0.0 zod: 3.24.2 optionalDependencies: @@ -8258,23 +8465,11 @@ snapshots: transitivePeerDependencies: - react - '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2))': + '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) - '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))) - '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1) - uuid: 10.0.0 - zod: 3.24.2 - optionalDependencies: - zod-to-json-schema: 3.24.5(zod@3.24.2) - transitivePeerDependencies: - - react - - '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56))': - dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) - '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))) - '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))) + '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1) uuid: 10.0.0 zod: 3.24.2 optionalDependencies: @@ -8282,60 +8477,109 @@ snapshots: transitivePeerDependencies: - react - '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) js-tiktoken: 1.0.19 - openai: 4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + openai: 4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) zod: 3.24.2 zod-to-json-schema: 3.24.5(zod@3.24.2) transitivePeerDependencies: - encoding - ws - '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) js-tiktoken: 1.0.19 - openai: 4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + openai: 4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) zod: 3.24.2 zod-to-json-schema: 3.24.5(zod@3.24.2) transitivePeerDependencies: - encoding - ws - '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) js-tiktoken: 1.0.19 - openai: 4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + openai: 4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) zod: 3.24.2 zod-to-json-schema: 3.24.5(zod@3.24.2) transitivePeerDependencies: - encoding - ws - '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) js-tiktoken: 1.0.19 - openai: 4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + openai: 4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) zod: 3.24.2 zod-to-json-schema: 3.24.5(zod@3.24.2) transitivePeerDependencies: - encoding - ws - '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@leichtgewicht/ip-codec@2.0.5': {} + + '@libp2p/interface-connection@4.0.0': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) - js-tiktoken: 1.0.19 - openai: 4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) - zod: 3.24.2 - zod-to-json-schema: 3.24.5(zod@3.24.2) + '@libp2p/interface-peer-id': 2.0.2 + '@libp2p/interfaces': 3.3.2 + '@multiformats/multiaddr': 12.5.1 + it-stream-types: 1.0.5 + uint8arraylist: 2.4.8 + + '@libp2p/interface-keychain@2.0.5': + dependencies: + '@libp2p/interface-peer-id': 2.0.2 + multiformats: 11.0.2 + + '@libp2p/interface-peer-id@2.0.2': + dependencies: + multiformats: 11.0.2 + + '@libp2p/interface-peer-info@1.0.10': + dependencies: + '@libp2p/interface-peer-id': 2.0.2 + '@multiformats/multiaddr': 12.5.1 + + '@libp2p/interface-pubsub@3.0.7': + dependencies: + '@libp2p/interface-connection': 4.0.0 + '@libp2p/interface-peer-id': 2.0.2 + '@libp2p/interfaces': 3.3.2 + it-pushable: 3.2.3 + uint8arraylist: 2.4.8 + + '@libp2p/interface@3.1.0': + dependencies: + '@multiformats/dns': 1.0.13 + '@multiformats/multiaddr': 13.0.1 + main-event: 1.0.1 + multiformats: 13.4.2 + progress-events: 1.0.1 + uint8arraylist: 2.4.8 + + '@libp2p/interfaces@3.3.2': {} + + '@libp2p/logger@2.1.1': + dependencies: + '@libp2p/interface-peer-id': 2.0.2 + '@multiformats/multiaddr': 12.5.1 + debug: 4.4.3 + interface-datastore: 8.3.2 + multiformats: 11.0.2 transitivePeerDependencies: - - encoding - - ws + - supports-color + + '@libp2p/peer-id@2.0.4': + dependencies: + '@libp2p/interface-peer-id': 2.0.2 + '@libp2p/interfaces': 3.3.2 + multiformats: 11.0.2 + uint8arrays: 4.0.10 '@lit-labs/ssr-dom-shim@1.4.0': {} @@ -8443,10 +8687,10 @@ snapshots: '@metamask/safe-event-emitter@3.1.2': {} - '@metamask/sdk-communication-layer@0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@metamask/sdk-communication-layer@0.32.0(cross-fetch@4.1.0(encoding@0.1.13))(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: bufferutil: 4.0.9 - cross-fetch: 4.1.0 + cross-fetch: 4.1.0(encoding@0.1.13) date-fns: 2.30.0 debug: 4.4.0(supports-color@5.5.0) eciesjs: 0.4.15 @@ -8462,16 +8706,16 @@ snapshots: dependencies: '@paulmillr/qr': 0.2.1 - '@metamask/sdk@0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.32.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.27.0 '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 - '@metamask/sdk-communication-layer': 0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metamask/sdk-communication-layer': 0.32.0(cross-fetch@4.1.0(encoding@0.1.13))(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@metamask/sdk-install-modal-web': 0.32.0 '@paulmillr/qr': 0.2.1 bowser: 2.12.1 - cross-fetch: 4.1.0 + cross-fetch: 4.1.0(encoding@0.1.13) debug: 4.4.0(supports-color@5.5.0) eciesjs: 0.4.15 eth-rpc-errors: 4.0.3 @@ -8560,6 +8804,47 @@ snapshots: transitivePeerDependencies: - supports-color + '@multiformats/dns@1.0.13': + dependencies: + '@dnsquery/dns-packet': 6.1.1 + '@libp2p/interface': 3.1.0 + hashlru: 2.3.0 + p-queue: 9.1.0 + progress-events: 1.0.1 + uint8arrays: 5.1.0 + + '@multiformats/multiaddr-to-uri@9.0.8': + dependencies: + '@multiformats/multiaddr': 12.5.1 + + '@multiformats/multiaddr@11.6.1': + dependencies: + '@chainsafe/is-ip': 2.1.0 + dns-over-http-resolver: 2.1.3 + err-code: 3.0.1 + multiformats: 11.0.2 + uint8arrays: 4.0.10 + varint: 6.0.0 + transitivePeerDependencies: + - supports-color + + '@multiformats/multiaddr@12.5.1': + dependencies: + '@chainsafe/is-ip': 2.1.0 + '@chainsafe/netmask': 2.0.0 + '@multiformats/dns': 1.0.13 + abort-error: 1.0.1 + multiformats: 13.3.2 + uint8-varint: 2.0.4 + uint8arrays: 5.1.0 + + '@multiformats/multiaddr@13.0.1': + dependencies: + '@chainsafe/is-ip': 2.1.0 + multiformats: 13.4.2 + uint8-varint: 2.0.4 + uint8arrays: 5.1.0 + '@noble/ciphers@1.2.1': {} '@noble/ciphers@1.3.0': {} @@ -8660,17 +8945,17 @@ snapshots: - bufferutil - utf-8-validate - '@privy-io/server-auth@1.18.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))': + '@privy-io/server-auth@1.18.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))': dependencies: '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 - '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) canonicalize: 2.1.0 dotenv: 16.4.7 jose: 4.15.9 node-fetch-native: 1.6.6 redaxios: 0.5.1 - svix: 1.62.0 + svix: 1.62.0(encoding@0.1.13) ts-case-convert: 2.1.0 type-fest: 3.13.1 optionalDependencies: @@ -8681,6 +8966,27 @@ snapshots: - typescript - utf-8-validate + '@privy-io/server-auth@1.18.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': + dependencies: + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) + canonicalize: 2.1.0 + dotenv: 16.4.7 + jose: 4.15.9 + node-fetch-native: 1.6.6 + redaxios: 0.5.1 + svix: 1.62.0(encoding@0.1.13) + ts-case-convert: 2.1.0 + type-fest: 3.13.1 + optionalDependencies: + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + '@protobufjs/aspromise@1.1.2': {} '@protobufjs/base64@1.1.2': {} @@ -8726,11 +9032,11 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@reown/appkit-controllers@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) valtio: 1.13.2(react@18.3.1) viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) transitivePeerDependencies: @@ -8761,14 +9067,13 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@reown/appkit-controllers@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) - lit: 3.3.0 - valtio: 1.13.2(react@18.3.1) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + valtio: 1.13.2 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8797,18 +9102,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-polyfills@1.7.8': - dependencies: - buffer: 6.0.3 - - '@reown/appkit-scaffold-ui@1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56)': + '@reown/appkit-pay@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) lit: 3.3.0 + valtio: 1.13.2(react@18.3.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8835,16 +9136,16 @@ snapshots: - typescript - uploadthing - utf-8-validate - - valtio - zod - '@reown/appkit-ui@1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@reown/appkit-pay@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56) lit: 3.3.0 - qrcode: 1.5.3 + valtio: 1.13.2 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8873,16 +9174,18 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56)': + '@reown/appkit-polyfills@1.7.8': + dependencies: + buffer: 6.0.3 + + '@reown/appkit-scaffold-ui@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - valtio: 1.13.2(react@18.3.1) - viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + lit: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8909,31 +9212,215 @@ snapshots: - typescript - uploadthing - utf-8-validate + - valtio - zod - '@reown/appkit-wallet@1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@reown/appkit-scaffold-ui@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-polyfills': 1.7.8 - '@walletconnect/logger': 2.1.2 - zod: 3.22.4 - transitivePeerDependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + lit: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - valtio + - zod + + '@reown/appkit-ui@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + lit: 3.3.0 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-ui@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + lit: 3.3.0 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-utils@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@walletconnect/logger': 2.1.2 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + valtio: 1.13.2(react@18.3.1) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch - bufferutil + - db0 + - encoding + - ioredis + - react - typescript + - uploadthing - utf-8-validate + - zod - '@reown/appkit@1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@reown/appkit-utils@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-pay': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@walletconnect/logger': 2.1.2 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + valtio: 1.13.2 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-wallet@1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-polyfills': 1.7.8 + '@walletconnect/logger': 2.1.2 + zod: 3.22.4 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + + '@reown/appkit@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-pay': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-scaffold-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) '@walletconnect/types': 2.21.0 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) bs58: 6.0.0 valtio: 1.13.2(react@18.3.1) viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) @@ -8965,6 +9452,49 @@ snapshots: - utf-8-validate - zod + '@reown/appkit@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-pay': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-scaffold-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.21.0 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + bs58: 6.0.0 + valtio: 1.13.2 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + '@rtsao/scc@1.1.0': {} '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': @@ -9066,30 +9596,19 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solana-program/compute-budget@0.11.0(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10))': - dependencies: - '@solana/kit': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) - - '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(typescript@5.8.2))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana-program/token-2022@0.6.1(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10))': - dependencies: - '@solana/kit': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) - - '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/token@0.5.1(@solana/kit@2.3.0(typescript@5.8.2))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/token@0.9.0(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10))': - dependencies: - '@solana/kit': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@solana/accounts@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9102,19 +9621,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/accounts@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/rpc-spec': 5.5.1(typescript@5.8.2) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/addresses@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/assertions': 2.3.0(typescript@5.8.2) @@ -9126,33 +9632,15 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/addresses@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/assertions': 5.5.1(typescript@5.8.2) - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/nominal-types': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/assertions@2.3.0(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 - '@solana/assertions@5.5.1(typescript@5.8.2)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - - '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) bigint-buffer: 1.1.5 bignumber.js: 9.1.2 transitivePeerDependencies: @@ -9180,12 +9668,6 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 - '@solana/codecs-core@5.5.1(typescript@5.8.2)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.2) @@ -9200,14 +9682,6 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 - '@solana/codecs-data-structures@5.5.1(typescript@5.8.2)': - dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.2) @@ -9226,13 +9700,6 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 - '@solana/codecs-numbers@5.5.1(typescript@5.8.2)': - dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.2) @@ -9249,15 +9716,6 @@ snapshots: fastestsmallesttextencoderdecoder: 1.0.22 typescript: 5.8.2 - '@solana/codecs-strings@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - optionalDependencies: - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.8.2 - '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.2) @@ -9280,18 +9738,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/codecs@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-data-structures': 5.5.1(typescript@5.8.2) - '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) - '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/options': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/errors@2.0.0-rc.1(typescript@5.8.2)': dependencies: chalk: 5.4.1 @@ -9310,55 +9756,20 @@ snapshots: commander: 14.0.1 typescript: 5.8.2 - '@solana/errors@5.5.1(typescript@5.8.2)': - dependencies: - chalk: 5.6.2 - commander: 14.0.2 - optionalDependencies: - typescript: 5.8.2 - '@solana/fast-stable-stringify@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 - '@solana/fast-stable-stringify@5.5.1(typescript@5.8.2)': - optionalDependencies: - typescript: 5.8.2 - '@solana/functional@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 - '@solana/functional@5.5.1(typescript@5.8.2)': - optionalDependencies: - typescript: 5.8.2 - - '@solana/instruction-plans@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/instructions': 5.5.1(typescript@5.8.2) - '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/promises': 5.5.1(typescript@5.8.2) - '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/instructions@2.3.0(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.3.0(typescript@5.8.2) '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 - '@solana/instructions@5.5.1(typescript@5.8.2)': - dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - '@solana/keys@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/assertions': 2.3.0(typescript@5.8.2) @@ -9370,18 +9781,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/keys@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/assertions': 5.5.1(typescript@5.8.2) - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/nominal-types': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9407,60 +9806,10 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': - dependencies: - '@solana/accounts': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/codecs': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/functional': 5.5.1(typescript@5.8.2) - '@solana/instruction-plans': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/instructions': 5.5.1(typescript@5.8.2) - '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/offchain-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/plugin-core': 5.5.1(typescript@5.8.2) - '@solana/programs': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-api': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-parsed-types': 5.5.1(typescript@5.8.2) - '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) - '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/signers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/sysvars': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transaction-confirmation': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - bufferutil - - fastestsmallesttextencoderdecoder - - utf-8-validate - '@solana/nominal-types@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 - '@solana/nominal-types@5.5.1(typescript@5.8.2)': - optionalDependencies: - typescript: 5.8.2 - - '@solana/offchain-messages@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-data-structures': 5.5.1(typescript@5.8.2) - '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) - '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/nominal-types': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.2) @@ -9483,22 +9832,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/options@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-data-structures': 5.5.1(typescript@5.8.2) - '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) - '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - '@solana/plugin-core@5.5.1(typescript@5.8.2)': - optionalDependencies: - typescript: 5.8.2 - '@solana/programs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9507,23 +9840,10 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/programs@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/promises@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 - '@solana/promises@5.5.1(typescript@5.8.2)': - optionalDependencies: - typescript: 5.8.2 - '@solana/rpc-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9541,53 +9861,20 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-api@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-parsed-types': 5.5.1(typescript@5.8.2) - '@solana/rpc-spec': 5.5.1(typescript@5.8.2) - '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/rpc-parsed-types@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 - '@solana/rpc-parsed-types@5.5.1(typescript@5.8.2)': - optionalDependencies: - typescript: 5.8.2 - '@solana/rpc-spec-types@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 - '@solana/rpc-spec-types@5.5.1(typescript@5.8.2)': - optionalDependencies: - typescript: 5.8.2 - '@solana/rpc-spec@2.3.0(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) '@solana/rpc-spec-types': 2.3.0(typescript@5.8.2) typescript: 5.8.2 - '@solana/rpc-spec@5.5.1(typescript@5.8.2)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - '@solana/rpc-subscriptions-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9601,41 +9888,14 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-subscriptions-api@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.8.2) - '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) '@solana/functional': 2.3.0(typescript@5.8.2) '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.8.2) '@solana/subscribable': 2.3.0(typescript@5.8.2) - typescript: 5.8.2 - ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) - - '@solana/rpc-subscriptions-channel-websocket@5.5.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/functional': 5.5.1(typescript@5.8.2) - '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.8.2) - '@solana/subscribable': 5.5.1(typescript@5.8.2) - ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + typescript: 5.8.2 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@solana/rpc-subscriptions-spec@2.3.0(typescript@5.8.2)': dependencies: @@ -9645,15 +9905,6 @@ snapshots: '@solana/subscribable': 2.3.0(typescript@5.8.2) typescript: 5.8.2 - '@solana/rpc-subscriptions-spec@5.5.1(typescript@5.8.2)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/promises': 5.5.1(typescript@5.8.2) - '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) - '@solana/subscribable': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) @@ -9672,26 +9923,6 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/rpc-subscriptions@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/fast-stable-stringify': 5.5.1(typescript@5.8.2) - '@solana/functional': 5.5.1(typescript@5.8.2) - '@solana/promises': 5.5.1(typescript@5.8.2) - '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) - '@solana/rpc-subscriptions-api': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-subscriptions-channel-websocket': 5.5.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.8.2) - '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/subscribable': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - bufferutil - - fastestsmallesttextencoderdecoder - - utf-8-validate - '@solana/rpc-transformers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) @@ -9703,18 +9934,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-transformers@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/functional': 5.5.1(typescript@5.8.2) - '@solana/nominal-types': 5.5.1(typescript@5.8.2) - '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/rpc-transport-http@2.3.0(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) @@ -9723,15 +9942,6 @@ snapshots: typescript: 5.8.2 undici-types: 7.16.0 - '@solana/rpc-transport-http@5.5.1(typescript@5.8.2)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/rpc-spec': 5.5.1(typescript@5.8.2) - '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) - undici-types: 7.19.2 - optionalDependencies: - typescript: 5.8.2 - '@solana/rpc-types@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9744,19 +9954,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-types@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) - '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/nominal-types': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/rpc@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) @@ -9772,22 +9969,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/fast-stable-stringify': 5.5.1(typescript@5.8.2) - '@solana/functional': 5.5.1(typescript@5.8.2) - '@solana/rpc-api': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-spec': 5.5.1(typescript@5.8.2) - '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) - '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-transport-http': 5.5.1(typescript@5.8.2) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/signers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9802,45 +9983,29 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/signers@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/instructions': 5.5.1(typescript@5.8.2) - '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/nominal-types': 5.5.1(typescript@5.8.2) - '@solana/offchain-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - '@solana/spl-token@0.4.13(@solana/web3.js@1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@solana/spl-token@0.4.13(@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -9854,12 +10019,6 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 - '@solana/subscribable@5.5.1(typescript@5.8.2)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - '@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9870,17 +10029,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/accounts': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/codecs': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9898,25 +10046,6 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/transaction-confirmation@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': - dependencies: - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/promises': 5.5.1(typescript@5.8.2) - '@solana/rpc': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - bufferutil - - fastestsmallesttextencoderdecoder - - utf-8-validate - '@solana/transaction-messages@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9932,22 +10061,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transaction-messages@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-data-structures': 5.5.1(typescript@5.8.2) - '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/functional': 5.5.1(typescript@5.8.2) - '@solana/instructions': 5.5.1(typescript@5.8.2) - '@solana/nominal-types': 5.5.1(typescript@5.8.2) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/transactions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9966,31 +10079,12 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transactions@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': - dependencies: - '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/codecs-core': 5.5.1(typescript@5.8.2) - '@solana/codecs-data-structures': 5.5.1(typescript@5.8.2) - '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) - '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/errors': 5.5.1(typescript@5.8.2) - '@solana/functional': 5.5.1(typescript@5.8.2) - '@solana/instructions': 5.5.1(typescript@5.8.2) - '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/nominal-types': 5.5.1(typescript@5.8.2) - '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/wallet-standard-features@1.3.0': dependencies: '@wallet-standard/base': 1.1.0 '@wallet-standard/features': 1.1.0 - '@solana/web3.js@1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.27.0 '@noble/curves': 1.8.1 @@ -10004,7 +10098,7 @@ snapshots: buffer: 6.0.3 fast-stable-stringify: 1.0.0 jayson: 4.1.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) rpc-websockets: 9.1.1 superstruct: 2.0.2 transitivePeerDependencies: @@ -10012,7 +10106,7 @@ snapshots: - encoding - utf-8-validate - '@solana/web3.js@1.98.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.27.0 '@noble/curves': 1.8.1 @@ -10026,7 +10120,7 @@ snapshots: buffer: 6.0.3 fast-stable-stringify: 1.0.0 jayson: 4.1.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) rpc-websockets: 9.1.1 superstruct: 2.0.2 transitivePeerDependencies: @@ -10133,6 +10227,8 @@ snapshots: '@types/lodash@4.17.20': {} + '@types/minimatch@3.0.5': {} + '@types/minimist@1.2.5': {} '@types/ms@2.1.0': {} @@ -10288,9 +10384,46 @@ snapshots: '@uniswap/token-lists@1.0.0-beta.33': {} - '@vaultsfyi/sdk@2.1.9(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@vaultsfyi/sdk@2.1.9(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + x402-fetch: 0.7.0(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@solana/sysvars' + - '@tanstack/query-core' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - supports-color + - typescript + - uploadthing + - utf-8-validate + - ws + + '@vaultsfyi/sdk@2.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: - x402-fetch: 0.7.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + x402-fetch: 0.7.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10325,16 +10458,16 @@ snapshots: - utf-8-validate - ws - '@wagmi/connectors@5.10.0(@wagmi/core@2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56)': + '@wagmi/connectors@5.10.0(@wagmi/core@2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56)': dependencies: '@base-org/account': 1.1.1(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.56) '@coinbase/wallet-sdk': 4.3.6(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.56) '@gemini-wallet/core': 0.2.0(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) - '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@wagmi/core': 2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) - '@walletconnect/ethereum-provider': 2.21.1(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@walletconnect/ethereum-provider': 2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) optionalDependencies: @@ -10369,6 +10502,50 @@ snapshots: - utf-8-validate - zod + '@wagmi/connectors@5.10.0(@wagmi/core@2.21.0(typescript@5.8.2)(use-sync-external-store@1.4.0)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56)': + dependencies: + '@base-org/account': 1.1.1(bufferutil@4.0.9)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(zod@3.25.56) + '@coinbase/wallet-sdk': 4.3.6(bufferutil@4.0.9)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(zod@3.25.56) + '@gemini-wallet/core': 0.2.0(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@wagmi/core': 2.21.0(typescript@5.8.2)(use-sync-external-store@1.4.0)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@walletconnect/ethereum-provider': 2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + cbw-sdk: '@coinbase/wallet-sdk@3.9.3' + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - immer + - ioredis + - react + - supports-color + - uploadthing + - use-sync-external-store + - utf-8-validate + - zod + '@wagmi/core@2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))': dependencies: eventemitter3: 5.0.1 @@ -10384,6 +10561,20 @@ snapshots: - react - use-sync-external-store + '@wagmi/core@2.21.0(typescript@5.8.2)(use-sync-external-store@1.4.0)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7(typescript@5.8.2) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + zustand: 5.0.0(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + '@wallet-standard/app@1.1.0': dependencies: '@wallet-standard/base': 1.1.0 @@ -10486,17 +10677,58 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.21.1(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@walletconnect/ethereum-provider@2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + dependencies: + '@reown/appkit': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@walletconnect/types': 2.21.1 + '@walletconnect/universal-provider': 2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/ethereum-provider@2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: - '@reown/appkit': 1.7.8(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@reown/appkit': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@walletconnect/types': 2.21.1 - '@walletconnect/universal-provider': 2.21.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@walletconnect/universal-provider': 2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) events: 3.3.0 transitivePeerDependencies: @@ -10538,11 +10770,11 @@ snapshots: '@walletconnect/time': 1.0.2 events: 3.3.0 - '@walletconnect/jsonrpc-http-connection@1.0.8': + '@walletconnect/jsonrpc-http-connection@1.0.8(encoding@0.1.13)': dependencies: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/safe-json': 1.0.2 - cross-fetch: 3.2.0 + cross-fetch: 3.2.0(encoding@0.1.13) events: 3.3.0 transitivePeerDependencies: - encoding @@ -10754,10 +10986,10 @@ snapshots: - ioredis - uploadthing - '@walletconnect/universal-provider@2.21.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@walletconnect/universal-provider@2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@walletconnect/events': 1.0.1 - '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 @@ -10794,10 +11026,10 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.21.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@walletconnect/universal-provider@2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@walletconnect/events': 1.0.1 - '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 @@ -10935,13 +11167,9 @@ snapshots: dependencies: zod: 3.25.56 - '@x402/core@2.2.0': - dependencies: - zod: 3.25.56 - - '@x402/evm@2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@x402/evm@2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: - '@x402/core': 2.2.0 + '@x402/core': 2.0.0 viem: 2.43.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) zod: 3.25.56 transitivePeerDependencies: @@ -10949,9 +11177,9 @@ snapshots: - typescript - utf-8-validate - '@x402/fetch@2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@x402/fetch@2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: - '@x402/core': 2.2.0 + '@x402/core': 2.0.0 viem: 2.43.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) zod: 3.25.56 transitivePeerDependencies: @@ -10959,19 +11187,21 @@ snapshots: - typescript - utf-8-validate - '@x402/svm@2.2.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@x402/svm@2.0.0(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@solana-program/compute-budget': 0.11.0(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@solana-program/token': 0.9.0(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@solana-program/token-2022': 0.6.1(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)) - '@solana/kit': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@x402/core': 2.2.0 + '@scure/base': 1.2.6 + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.8.2)) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.8.2)) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@x402/core': 2.0.0 + zod: 3.25.56 transitivePeerDependencies: - '@solana/sysvars' - - bufferutil - fastestsmallesttextencoderdecoder - typescript - - utf-8-validate + - ws '@xmtp/agent-sdk@1.1.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': dependencies: @@ -11045,6 +11275,11 @@ snapshots: '@zerodev/sdk': 5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@zerodev/ecdsa-validator@5.4.5(@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': + dependencies: + '@zerodev/sdk': 5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@zerodev/intent@0.0.24(@zerodev/webauthn-key@5.4.3(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))': dependencies: '@zerodev/ecdsa-validator': 5.4.5(@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) @@ -11054,6 +11289,15 @@ snapshots: transitivePeerDependencies: - '@zerodev/webauthn-key' + '@zerodev/intent@0.0.24(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': + dependencies: + '@zerodev/ecdsa-validator': 5.4.5(@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@zerodev/multi-chain-ecdsa-validator': 5.4.4(@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@zerodev/sdk': 5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + transitivePeerDependencies: + - '@zerodev/webauthn-key' + '@zerodev/multi-chain-ecdsa-validator@5.4.4(@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(@zerodev/webauthn-key@5.4.3(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))': dependencies: '@simplewebauthn/browser': 9.0.1 @@ -11063,11 +11307,24 @@ snapshots: merkletreejs: 0.3.11 viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@zerodev/multi-chain-ecdsa-validator@5.4.4(@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': + dependencies: + '@simplewebauthn/browser': 9.0.1 + '@simplewebauthn/typescript-types': 8.3.4 + '@zerodev/sdk': 5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + merkletreejs: 0.3.11 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))': dependencies: semver: 7.7.1 viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': + dependencies: + semver: 7.7.1 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@zerodev/webauthn-key@5.4.3(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))': dependencies: '@noble/curves': 1.9.7 @@ -11082,6 +11339,13 @@ snapshots: abitype: 1.0.8(typescript@5.8.2)(zod@3.24.2) viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@zoralabs/coins-sdk@0.2.8(abitype@1.2.3(typescript@5.8.2)(zod@3.25.56))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': + dependencies: + '@hey-api/client-fetch': 0.8.4 + '@zoralabs/protocol-deployments': 0.6.1 + abitype: 1.2.3(typescript@5.8.2)(zod@3.25.56) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@zoralabs/protocol-deployments@0.6.1': {} JSONStream@1.3.5: @@ -11130,6 +11394,8 @@ snapshots: dependencies: event-target-shim: 5.0.1 + abort-error@1.0.1: {} + accepts@2.0.0: dependencies: mime-types: 3.0.0 @@ -11153,6 +11419,20 @@ snapshots: aes-js@4.0.0-beta.5: {} + agent0-sdk@1.4.2(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2): + dependencies: + graphql-request: 6.1.0(encoding@0.1.13)(graphql@16.11.0) + ipfs-http-client: 60.0.1(encoding@0.1.13) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + transitivePeerDependencies: + - bufferutil + - encoding + - graphql + - supports-color + - typescript + - utf-8-validate + - zod + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 @@ -11192,6 +11472,8 @@ snapshots: ansi-styles@5.2.0: {} + any-signal@3.0.1: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -11426,6 +11708,10 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + blob-to-it@2.0.10: + dependencies: + browser-readablestream-to-it: 2.0.10 + bn.js@4.11.6: {} bn.js@4.12.1: {} @@ -11471,6 +11757,10 @@ snapshots: brorand@1.1.0: {} + browser-readablestream-to-it@1.0.3: {} + + browser-readablestream-to-it@2.0.10: {} + browserslist@4.24.4: dependencies: caniuse-lite: 1.0.30001707 @@ -11559,6 +11849,8 @@ snapshots: canonicalize@2.1.0: {} + cborg@4.5.8: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -11566,8 +11858,6 @@ snapshots: chalk@5.4.1: {} - chalk@5.6.2: {} - char-regex@1.0.2: {} chardet@0.7.0: {} @@ -11601,12 +11891,25 @@ snapshots: cjs-module-lexer@1.4.3: {} - clanker-sdk@4.1.19(@types/node@20.17.27)(typescript@5.8.2)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)): + clanker-sdk@4.1.19(@types/node@20.17.27)(typescript@5.8.2)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)): dependencies: '@openzeppelin/merkle-tree': 1.0.8 abitype: 1.0.8(typescript@5.8.2)(zod@3.25.56) dotenv: 16.4.7 inquirer: 8.2.7(@types/node@20.17.27) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + zod: 3.25.56 + transitivePeerDependencies: + - '@types/node' + - supports-color + - typescript + + clanker-sdk@4.1.19(@types/node@22.13.14)(typescript@5.8.2)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)): + dependencies: + '@openzeppelin/merkle-tree': 1.0.8 + abitype: 1.0.8(typescript@5.8.2)(zod@3.25.56) + dotenv: 16.4.7 + inquirer: 8.2.7(@types/node@22.13.14) viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) zod: 3.25.56 transitivePeerDependencies: @@ -11668,8 +11971,6 @@ snapshots: commander@14.0.1: {} - commander@14.0.2: {} - commander@2.20.3: {} commander@5.1.0: {} @@ -11726,18 +12027,33 @@ snapshots: - supports-color - ts-node + create-jest@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + create-require@1.1.1: optional: true - cross-fetch@3.2.0: + cross-fetch@3.2.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding - cross-fetch@4.1.0: + cross-fetch@4.1.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -11755,6 +12071,11 @@ snapshots: crypto-js@4.2.0: {} + dag-jose@4.0.0: + dependencies: + '@ipld/dag-cbor': 9.2.5 + multiformats: 11.0.2 + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -11848,6 +12169,10 @@ snapshots: dependencies: valtio: 1.13.2(react@18.3.1) + derive-valtio@0.1.0(valtio@1.13.2): + dependencies: + valtio: 1.13.2 + destr@2.0.5: {} destroy@1.2.0: {} @@ -11871,6 +12196,15 @@ snapshots: dependencies: path-type: 4.0.0 + dns-over-http-resolver@2.1.3: + dependencies: + debug: 4.4.3 + native-fetch: 4.0.2(undici@5.29.0) + receptacle: 1.3.2 + undici: 5.29.0 + transitivePeerDependencies: + - supports-color + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -11915,6 +12249,10 @@ snapshots: dependencies: jake: 10.9.2 + electron-fetch@1.9.1: + dependencies: + encoding: 0.1.13 + electron-to-chromium@1.5.124: {} elliptic@6.6.1: @@ -11937,6 +12275,10 @@ snapshots: encodeurl@2.0.0: {} + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -11962,6 +12304,8 @@ snapshots: entities@4.5.0: {} + err-code@3.0.1: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -12461,6 +12805,8 @@ snapshots: fast-diff@1.3.0: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -12623,6 +12969,8 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-iterator@1.0.2: {} + get-package-type@0.1.0: {} get-proto@1.0.1: @@ -12685,6 +13033,14 @@ snapshots: graphemer@1.4.0: {} + graphql-request@6.1.0(encoding@0.1.13)(graphql@16.11.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + cross-fetch: 3.2.0(encoding@0.1.13) + graphql: 16.11.0 + transitivePeerDependencies: + - encoding + graphql-request@7.2.0(graphql@16.11.0): dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) @@ -12737,6 +13093,8 @@ snapshots: inherits: 2.0.4 minimalistic-assert: 1.0.1 + hashlru@2.3.0: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -12865,6 +13223,41 @@ snapshots: transitivePeerDependencies: - '@types/node' + inquirer@8.2.7(@types/node@22.13.14): + dependencies: + '@inquirer/external-editor': 1.0.1(@types/node@22.13.14) + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + transitivePeerDependencies: + - '@types/node' + + interface-datastore@7.0.4: + dependencies: + interface-store: 3.0.4 + nanoid: 4.0.2 + uint8arrays: 4.0.10 + + interface-datastore@8.3.2: + dependencies: + interface-store: 6.0.3 + uint8arrays: 5.1.0 + + interface-store@3.0.4: {} + + interface-store@6.0.3: {} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -12873,6 +13266,98 @@ snapshots: ipaddr.js@1.9.1: {} + ipfs-core-types@0.14.1: + dependencies: + '@ipld/dag-pb': 4.1.5 + '@libp2p/interface-keychain': 2.0.5 + '@libp2p/interface-peer-id': 2.0.2 + '@libp2p/interface-peer-info': 1.0.10 + '@libp2p/interface-pubsub': 3.0.7 + '@multiformats/multiaddr': 11.6.1 + '@types/node': 18.19.83 + interface-datastore: 7.0.4 + ipfs-unixfs: 9.0.1 + multiformats: 11.0.2 + transitivePeerDependencies: + - supports-color + + ipfs-core-utils@0.18.1(encoding@0.1.13): + dependencies: + '@libp2p/logger': 2.1.1 + '@multiformats/multiaddr': 11.6.1 + '@multiformats/multiaddr-to-uri': 9.0.8 + any-signal: 3.0.1 + blob-to-it: 2.0.10 + browser-readablestream-to-it: 2.0.10 + err-code: 3.0.1 + ipfs-core-types: 0.14.1 + ipfs-unixfs: 9.0.1 + ipfs-utils: 9.0.14(encoding@0.1.13) + it-all: 2.0.1 + it-map: 2.0.1 + it-peekable: 2.0.1 + it-to-stream: 1.0.0 + merge-options: 3.0.4 + multiformats: 11.0.2 + nanoid: 4.0.2 + parse-duration: 1.1.2 + timeout-abort-controller: 3.0.0 + uint8arrays: 4.0.10 + transitivePeerDependencies: + - encoding + - supports-color + + ipfs-http-client@60.0.1(encoding@0.1.13): + dependencies: + '@ipld/dag-cbor': 9.2.5 + '@ipld/dag-json': 10.2.6 + '@ipld/dag-pb': 4.1.5 + '@libp2p/logger': 2.1.1 + '@libp2p/peer-id': 2.0.4 + '@multiformats/multiaddr': 11.6.1 + any-signal: 3.0.1 + dag-jose: 4.0.0 + err-code: 3.0.1 + ipfs-core-types: 0.14.1 + ipfs-core-utils: 0.18.1(encoding@0.1.13) + ipfs-utils: 9.0.14(encoding@0.1.13) + it-first: 2.0.1 + it-last: 2.0.1 + merge-options: 3.0.4 + multiformats: 11.0.2 + parse-duration: 1.1.2 + stream-to-it: 0.2.4 + uint8arrays: 4.0.10 + transitivePeerDependencies: + - encoding + - supports-color + + ipfs-unixfs@9.0.1: + dependencies: + err-code: 3.0.1 + protobufjs: 7.4.0 + + ipfs-utils@9.0.14(encoding@0.1.13): + dependencies: + any-signal: 3.0.1 + browser-readablestream-to-it: 1.0.3 + buffer: 6.0.3 + electron-fetch: 1.9.1 + err-code: 3.0.1 + is-electron: 2.2.2 + iso-url: 1.2.1 + it-all: 1.0.6 + it-glob: 1.0.2 + it-to-stream: 1.0.0 + merge-options: 3.0.4 + nanoid: 3.3.11 + native-fetch: 3.0.0(node-fetch@2.7.0(encoding@0.1.13)) + node-fetch: 2.7.0(encoding@0.1.13) + react-native-fetch-api: 3.0.0 + stream-to-it: 0.2.4 + transitivePeerDependencies: + - encoding + iron-webcrypto@1.2.1: {} irregular-plurals@3.5.0: {} @@ -12932,6 +13417,8 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 + is-electron@2.2.2: {} + is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: @@ -12972,6 +13459,8 @@ snapshots: is-plain-obj@1.1.0: {} + is-plain-obj@2.1.0: {} + is-promise@4.0.0: {} is-regex@1.2.1: @@ -13035,6 +13524,8 @@ snapshots: isexe@2.0.0: {} + iso-url@1.2.1: {} + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -13092,6 +13583,38 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + it-all@1.0.6: {} + + it-all@2.0.1: {} + + it-first@2.0.1: {} + + it-glob@1.0.2: + dependencies: + '@types/minimatch': 3.0.5 + minimatch: 3.1.2 + + it-last@2.0.1: {} + + it-map@2.0.1: {} + + it-peekable@2.0.1: {} + + it-pushable@3.2.3: + dependencies: + p-defer: 4.0.1 + + it-stream-types@1.0.5: {} + + it-to-stream@1.0.0: + dependencies: + buffer: 6.0.3 + fast-fifo: 1.3.2 + get-iterator: 1.0.2 + p-defer: 3.0.0 + p-fifo: 1.0.0 + readable-stream: 3.6.2 + jake@10.9.2: dependencies: async: 3.2.6 @@ -13168,6 +13691,25 @@ snapshots: - supports-color - ts-node + jest-cli@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jest-config@29.7.0(@types/node@20.17.27)(ts-node@10.9.2(@types/node@20.17.27)(typescript@5.8.2)): dependencies: '@babel/core': 7.26.10 @@ -13199,6 +13741,68 @@ snapshots: - babel-plugin-macros - supports-color + jest-config@29.7.0(@types/node@20.17.27)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)): + dependencies: + '@babel/core': 7.26.10 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.10) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.17.27 + ts-node: 10.9.2(@types/node@22.13.14)(typescript@5.8.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)): + dependencies: + '@babel/core': 7.26.10 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.10) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.13.14 + ts-node: 10.9.2(@types/node@22.13.14)(typescript@5.8.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + jest-diff@29.7.0: dependencies: chalk: 4.1.2 @@ -13426,6 +14030,18 @@ snapshots: - supports-color - ts-node + jest@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jose@4.15.9: {} jose@5.10.0: {} @@ -13506,18 +14122,7 @@ snapshots: kleur@3.0.3: {} - langsmith@0.2.15(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)): - dependencies: - '@types/uuid': 10.0.0 - commander: 10.0.1 - p-queue: 6.6.2 - p-retry: 4.6.2 - semver: 7.7.1 - uuid: 10.0.0 - optionalDependencies: - openai: 4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56) - - langsmith@0.2.15(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)): + langsmith@0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)): dependencies: '@types/uuid': 10.0.0 commander: 10.0.1 @@ -13526,9 +14131,9 @@ snapshots: semver: 7.7.1 uuid: 10.0.0 optionalDependencies: - openai: 4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + openai: 4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56) - langsmith@0.2.15(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)): + langsmith@0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)): dependencies: '@types/uuid': 10.0.0 commander: 10.0.1 @@ -13537,9 +14142,9 @@ snapshots: semver: 7.7.1 uuid: 10.0.0 optionalDependencies: - openai: 4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + openai: 4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) - langsmith@0.2.15(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)): + langsmith@0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)): dependencies: '@types/uuid': 10.0.0 commander: 10.0.1 @@ -13548,9 +14153,9 @@ snapshots: semver: 7.7.1 uuid: 10.0.0 optionalDependencies: - openai: 4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + openai: 4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) - langsmith@0.2.15(openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)): + langsmith@0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)): dependencies: '@types/uuid': 10.0.0 commander: 10.0.1 @@ -13559,7 +14164,7 @@ snapshots: semver: 7.7.1 uuid: 10.0.0 optionalDependencies: - openai: 4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56) + openai: 4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56) leven@3.1.0: {} @@ -13641,6 +14246,8 @@ snapshots: lunr@2.3.9: {} + main-event@1.0.1: {} + make-dir@4.0.0: dependencies: semver: 7.7.1 @@ -13699,6 +14306,10 @@ snapshots: merge-descriptors@2.0.0: {} + merge-options@3.0.4: + dependencies: + is-plain-obj: 2.1.0 + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -13782,8 +14393,14 @@ snapshots: ms@2.1.3: {} + multiformats@11.0.2: {} + + multiformats@12.1.3: {} + multiformats@13.3.2: {} + multiformats@13.4.2: {} + multiformats@9.9.0: {} mustache@4.2.0: {} @@ -13792,6 +14409,16 @@ snapshots: nanoid@3.3.11: {} + nanoid@4.0.2: {} + + native-fetch@3.0.0(node-fetch@2.7.0(encoding@0.1.13)): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + + native-fetch@4.0.2(undici@5.29.0): + dependencies: + undici: 5.29.0 + natural-compare@1.4.0: {} negotiator@1.0.0: {} @@ -13806,9 +14433,11 @@ snapshots: node-fetch-native@1.6.7: {} - node-fetch@2.7.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 node-gyp-build@4.8.4: {} @@ -13929,7 +14558,7 @@ snapshots: dependencies: mimic-function: 5.0.1 - openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2): + openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2): dependencies: '@types/node': 18.19.83 '@types/node-fetch': 2.6.12 @@ -13937,14 +14566,14 @@ snapshots: agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 3.24.2 transitivePeerDependencies: - encoding - openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56): + openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56): dependencies: '@types/node': 18.19.83 '@types/node-fetch': 2.6.12 @@ -13952,7 +14581,7 @@ snapshots: agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 3.25.56 @@ -13960,7 +14589,7 @@ snapshots: - encoding optional: true - openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2): + openai@4.89.1(encoding@0.1.13)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2): dependencies: '@types/node': 18.19.83 '@types/node-fetch': 2.6.12 @@ -13968,14 +14597,14 @@ snapshots: agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 3.24.2 transitivePeerDependencies: - encoding - openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2): + openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2): dependencies: '@types/node': 18.19.83 '@types/node-fetch': 2.6.12 @@ -13983,29 +14612,14 @@ snapshots: agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 3.24.2 transitivePeerDependencies: - encoding - openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2): - dependencies: - '@types/node': 18.19.83 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - optionalDependencies: - ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - zod: 3.24.2 - transitivePeerDependencies: - - encoding - - openai@4.89.1(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56): + openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56): dependencies: '@types/node': 18.19.83 '@types/node-fetch': 2.6.12 @@ -14013,9 +14627,9 @@ snapshots: agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: - ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 3.25.56 transitivePeerDependencies: - encoding @@ -14188,6 +14802,15 @@ snapshots: transitivePeerDependencies: - zod + p-defer@3.0.0: {} + + p-defer@4.0.1: {} + + p-fifo@1.0.0: + dependencies: + fast-fifo: 1.3.2 + p-defer: 3.0.0 + p-filter@2.1.0: dependencies: p-map: 2.1.0 @@ -14217,6 +14840,11 @@ snapshots: eventemitter3: 4.0.7 p-timeout: 3.2.0 + p-queue@9.1.0: + dependencies: + eventemitter3: 5.0.1 + p-timeout: 7.0.1 + p-retry@4.6.2: dependencies: '@types/retry': 0.12.0 @@ -14226,6 +14854,8 @@ snapshots: dependencies: p-finally: 1.0.0 + p-timeout@7.0.1: {} + p-try@2.2.0: {} package-manager-detector@0.2.11: @@ -14236,6 +14866,8 @@ snapshots: dependencies: callsites: 3.1.0 + parse-duration@1.1.2: {} + parse-imports@2.2.1: dependencies: es-module-lexer: 1.6.0 @@ -14342,6 +14974,8 @@ snapshots: process-warning@1.0.0: {} + progress-events@1.0.1: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -14433,6 +15067,10 @@ snapshots: react-is@18.3.1: {} + react-native-fetch-api@3.0.0: + dependencies: + p-defer: 3.0.0 + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -14481,6 +15119,10 @@ snapshots: real-require@0.1.0: {} + receptacle@1.3.2: + dependencies: + ms: 2.1.3 + redaxios@0.5.1: {} redent@3.0.0: @@ -14551,6 +15193,8 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 + retimer@3.0.0: {} + retry@0.13.1: {} reusify@1.1.0: {} @@ -14826,6 +15470,10 @@ snapshots: stream-shift@1.0.3: {} + stream-to-it@0.2.4: + dependencies: + get-iterator: 1.0.2 + strict-uri-encode@2.0.0: {} string-length@4.0.2: @@ -14942,20 +15590,33 @@ snapshots: viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) zod: 3.24.2 - svix-fetch@3.0.0: + sushi@6.2.1(typescript@5.8.2)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56): + dependencies: + '@uniswap/token-lists': 1.0.0-beta.33 + big.js: 6.1.1 + date-fns: 3.3.1 + seedrandom: 3.0.5 + tiny-invariant: 1.3.3 + toformat: 2.0.0 + optionalDependencies: + typescript: 5.8.2 + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + zod: 3.25.56 + + svix-fetch@3.0.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) whatwg-fetch: 3.6.20 transitivePeerDependencies: - encoding - svix@1.62.0: + svix@1.62.0(encoding@0.1.13): dependencies: '@stablelib/base64': 1.0.1 '@types/node': 22.13.14 es6-promise: 4.2.8 fast-sha256: 1.3.0 - svix-fetch: 3.0.0 + svix-fetch: 3.0.0(encoding@0.1.13) url-parse: 1.5.10 transitivePeerDependencies: - encoding @@ -14996,6 +15657,10 @@ snapshots: through@2.3.8: {} + timeout-abort-controller@3.0.0: + dependencies: + retimer: 3.0.0 + tiny-invariant@1.3.3: {} tmp@0.0.33: @@ -15052,6 +15717,26 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.26.10) + ts-jest@29.3.0(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(jest@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)))(typescript@5.8.2): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.1 + type-fest: 4.38.0 + typescript: 5.8.2 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.10 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.10) + ts-node@10.9.2(@types/node@20.17.27)(typescript@5.8.2): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -15071,6 +15756,25 @@ snapshots: yn: 3.1.1 optional: true + ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.13.14 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -15208,10 +15912,23 @@ snapshots: ufo@1.6.1: {} + uint8-varint@2.0.4: + dependencies: + uint8arraylist: 2.4.8 + uint8arrays: 5.1.0 + + uint8arraylist@2.4.8: + dependencies: + uint8arrays: 5.1.0 + uint8arrays@3.1.0: dependencies: multiformats: 9.9.0 + uint8arrays@4.0.10: + dependencies: + multiformats: 12.1.3 + uint8arrays@5.1.0: dependencies: multiformats: 13.3.2 @@ -15235,8 +15952,6 @@ snapshots: undici-types@7.16.0: {} - undici-types@7.19.2: {} - undici@5.29.0: dependencies: '@fastify/busboy': 2.1.1 @@ -15291,6 +16006,8 @@ snapshots: dependencies: node-gyp-build: 4.8.4 + utf8-codec@1.0.0: {} + utf8@3.0.0: {} util-deprecate@1.0.2: {} @@ -15325,6 +16042,12 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + valtio@1.13.2: + dependencies: + derive-valtio: 0.1.0(valtio@1.13.2) + proxy-compare: 2.6.0 + use-sync-external-store: 1.2.0(react@18.3.1) + valtio@1.13.2(react@18.3.1): dependencies: derive-valtio: 0.1.0(valtio@1.13.2(react@18.3.1)) @@ -15333,6 +16056,8 @@ snapshots: optionalDependencies: react: 18.3.1 + varint@6.0.0: {} + vary@1.1.2: {} viem@2.22.16(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56): @@ -15488,10 +16213,10 @@ snapshots: - utf-8-validate - zod - wagmi@2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56): + wagmi@2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56): dependencies: '@tanstack/react-query': 5.89.0(react@18.3.1) - '@wagmi/connectors': 5.10.0(@wagmi/core@2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56) + '@wagmi/connectors': 5.10.0(@wagmi/core@2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56) '@wagmi/core': 2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) @@ -15527,6 +16252,43 @@ snapshots: - utf-8-validate - zod + wagmi@2.17.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56): + dependencies: + '@wagmi/connectors': 5.10.0(@wagmi/core@2.21.0(typescript@5.8.2)(use-sync-external-store@1.4.0)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56) + '@wagmi/core': 2.21.0(typescript@5.8.2)(use-sync-external-store@1.4.0)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + use-sync-external-store: 1.4.0(react@18.3.1) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/query-core' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - immer + - ioredis + - supports-color + - uploadthing + - utf-8-validate + - zod + walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -15660,15 +16422,188 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 - ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): - optionalDependencies: - bufferutil: 4.0.9 - utf-8-validate: 5.0.10 + x402-fetch@0.7.0(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + x402: 0.7.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + zod: 3.25.56 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@solana/sysvars' + - '@tanstack/query-core' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - supports-color + - typescript + - uploadthing + - utf-8-validate + - ws + + x402-fetch@0.7.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10): + dependencies: + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + x402: 0.7.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) + zod: 3.25.56 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@solana/sysvars' + - '@tanstack/query-core' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - supports-color + - typescript + - uploadthing + - utf-8-validate + - ws + + x402@0.6.1(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + '@scure/base': 1.2.6 + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.8.2)) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.8.2)) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + wagmi: 2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56) + zod: 3.25.56 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@solana/sysvars' + - '@tanstack/query-core' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - supports-color + - typescript + - uploadthing + - utf-8-validate + - ws + + x402@0.6.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10): + dependencies: + '@scure/base': 1.2.6 + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.8.2)) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.8.2)) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + wagmi: 2.17.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56) + zod: 3.25.56 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@solana/sysvars' + - '@tanstack/query-core' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - supports-color + - typescript + - uploadthing + - utf-8-validate + - ws - x402-fetch@0.7.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + x402@0.7.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: + '@scure/base': 1.2.6 + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.8.2)) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.8.2)) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-features': 1.3.0 + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - x402: 0.7.2(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + wagmi: 2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56) zod: 3.25.56 transitivePeerDependencies: - '@azure/app-configuration' @@ -15704,12 +16639,12 @@ snapshots: - utf-8-validate - ws - x402@0.7.2(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + x402@0.7.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10): dependencies: '@scure/base': 1.2.6 - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.8.2)) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.8.2)) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/wallet-standard-features': 1.3.0 @@ -15717,7 +16652,7 @@ snapshots: '@wallet-standard/base': 1.1.0 '@wallet-standard/features': 1.1.0 viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - wagmi: 2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56) + wagmi: 2.17.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56) zod: 3.25.56 transitivePeerDependencies: - '@azure/app-configuration' @@ -15828,3 +16763,7 @@ snapshots: optionalDependencies: react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) + + zustand@5.0.3(use-sync-external-store@1.4.0): + optionalDependencies: + use-sync-external-store: 1.4.0(react@18.3.1) From 5c94869df8e3ef6b776ea73783f7a563235b7fcd Mon Sep 17 00:00:00 2001 From: Philippe d'Argent Date: Tue, 24 Feb 2026 17:28:15 +0900 Subject: [PATCH 3/5] bump agent0 sdk --- typescript/agentkit/package.json | 8 +- .../erc8004IdentityActionProvider.test.ts | 97 +- .../erc8004/erc8004IdentityActionProvider.ts | 49 +- .../erc8004ReputationActionProvider.test.ts | 9 + .../erc8004/identitySchemas.ts | 5 +- .../x402/x402ActionProvider.ts | 17 +- typescript/pnpm-lock.yaml | 1798 +++++++++++------ 7 files changed, 1287 insertions(+), 696 deletions(-) diff --git a/typescript/agentkit/package.json b/typescript/agentkit/package.json index 6c78ef16f..aefb25a54 100644 --- a/typescript/agentkit/package.json +++ b/typescript/agentkit/package.json @@ -40,7 +40,6 @@ ], "dependencies": { "@across-protocol/app-sdk": "^0.2.0", - "agent0-sdk": "^1.4.2", "@alloralabs/allora-sdk": "^0.1.0", "@base-org/account": "^2.2.0", "@coinbase/cdp-sdk": "^1.38.0", @@ -54,14 +53,15 @@ "@solana/spl-token": "^0.4.12", "@solana/web3.js": "^1.98.1", "@vaultsfyi/sdk": "^2.1.9", - "@x402/evm": "^2.2.0", - "@x402/fetch": "^2.2.0", - "@x402/svm": "^2.2.0", + "@x402/evm": "2.2.0", + "@x402/fetch": "2.2.0", + "@x402/svm": "2.2.0", "@zerodev/ecdsa-validator": "^5.4.5", "@zerodev/intent": "^0.0.24", "@zerodev/sdk": "^5.4.28", "@zoralabs/coins-sdk": "0.2.8", "@zoralabs/protocol-deployments": "0.6.1", + "agent0-sdk": "^1.5.3", "bs58": "^4.0.1", "canonicalize": "^2.1.0", "clanker-sdk": "^4.1.18", diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts index 51521e1cc..450a5de3a 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts @@ -329,10 +329,13 @@ describe("Update Agent Metadata Action", () => { }); }); -// Mock the utils module +// Mock the utils module (avoid loading real utils which imports the ESM-only agent0-sdk) jest.mock("./utils", () => ({ - ...jest.requireActual("./utils"), getAgent0SDK: jest.fn(), + uploadJsonToIPFS: jest.fn(), + uploadFileToIPFS: jest.fn(), + ipfsToHttpUrl: jest.fn((uri: string) => uri), + formatCAIP10Address: jest.fn(), })); const mockGetAgent0SDK = getAgent0SDK as jest.MockedFunction; @@ -363,18 +366,15 @@ describe("Search Agents Action", () => { }); it("should successfully search agents with no filters", async () => { - mockSdk.searchAgents.mockResolvedValue({ - items: [ - { - agentId: "123", - name: "Test Agent", - description: "A test agent", - mcpTools: ["code_generation"], - active: true, - }, - ], - nextCursor: undefined, - }); + mockSdk.searchAgents.mockResolvedValue([ + { + agentId: "123", + name: "Test Agent", + description: "A test agent", + mcpTools: ["code_generation"], + active: true, + }, + ]); const response = await actionProvider.searchAgents(mockWallet, {}); @@ -384,36 +384,25 @@ describe("Search Agents Action", () => { }); it("should return no agents message when none found", async () => { - mockSdk.searchAgents.mockResolvedValue({ - items: [], - nextCursor: undefined, - }); + mockSdk.searchAgents.mockResolvedValue([]); const response = await actionProvider.searchAgents(mockWallet, {}); expect(response).toContain("No agents found"); }); - it("should paginate through SDK results and return limited results", async () => { - // First SDK call returns 2 items with a cursor - mockSdk.searchAgents - .mockResolvedValueOnce({ - items: [ - { agentId: "1", name: "Agent 1" }, - { agentId: "2", name: "Agent 2" }, - ], - nextCursor: "cursor1", - }) - // Second SDK call returns 1 more item, no more cursor - .mockResolvedValueOnce({ - items: [{ agentId: "3", name: "Agent 3" }], - nextCursor: undefined, - }); + it("should return limited results using action-level pagination", async () => { + // SDK now returns all results in a single call (no cursor-based pagination in 1.5.x) + mockSdk.searchAgents.mockResolvedValue([ + { agentId: "1", name: "Agent 1" }, + { agentId: "2", name: "Agent 2" }, + { agentId: "3", name: "Agent 3" }, + ]); // Request with limit=2, should show first 2 of 3 total const response = await actionProvider.searchAgents(mockWallet, { limit: 2 }); - expect(mockSdk.searchAgents).toHaveBeenCalledTimes(2); + expect(mockSdk.searchAgents).toHaveBeenCalledTimes(1); expect(response).toContain("Found 3 agent(s) total"); expect(response).toContain("showing 1-2"); expect(response).toContain("Agent 1"); @@ -423,44 +412,24 @@ describe("Search Agents Action", () => { expect(response).toContain("offset: 2"); }); - it("should filter by name after fetching all SDK pages", async () => { - // SDK returns multiple pages, but only one agent matches the name filter - mockSdk.searchAgents - .mockResolvedValueOnce({ - items: [ - { agentId: "1", name: "Other Agent" }, - { agentId: "2", name: "myAwesomeAgent" }, - ], - nextCursor: "cursor1", - }) - .mockResolvedValueOnce({ - items: [{ agentId: "3", name: "Another Agent" }], - nextCursor: undefined, - }); + it("should pass name filter to SDK and return matching agents", async () => { + // SDK handles name filtering server-side in 1.5.x; single call, returns matching agents + mockSdk.searchAgents.mockResolvedValue([{ agentId: "2", name: "myAwesomeAgent" }]); const response = await actionProvider.searchAgents(mockWallet, { name: "awesome" }); - expect(mockSdk.searchAgents).toHaveBeenCalledTimes(2); - // Name filter should NOT be passed to SDK (we filter ourselves) - expect(mockSdk.searchAgents).toHaveBeenCalledWith( - expect.not.objectContaining({ name: "awesome" }), - expect.anything(), - ); + expect(mockSdk.searchAgents).toHaveBeenCalledTimes(1); + expect(mockSdk.searchAgents).toHaveBeenCalledWith(expect.objectContaining({ name: "awesome" })); expect(response).toContain("Found 1 agent(s) total"); expect(response).toContain("myAwesomeAgent"); - expect(response).not.toContain("Other Agent"); - expect(response).not.toContain("Another Agent"); }); it("should support offset for pagination", async () => { - mockSdk.searchAgents.mockResolvedValue({ - items: [ - { agentId: "1", name: "Agent 1" }, - { agentId: "2", name: "Agent 2" }, - { agentId: "3", name: "Agent 3" }, - ], - nextCursor: undefined, - }); + mockSdk.searchAgents.mockResolvedValue([ + { agentId: "1", name: "Agent 1" }, + { agentId: "2", name: "Agent 2" }, + { agentId: "3", name: "Agent 3" }, + ]); // Request with offset=1, limit=1 const response = await actionProvider.searchAgents(mockWallet, { offset: 1, limit: 1 }); diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts index c70a5d046..dce80778b 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts @@ -263,20 +263,14 @@ Supports pagination. const sdk = getAgent0SDK(walletProvider); // Search for agents owned by the specified wallet - const result = await sdk.searchAgents( - { owners: [walletAddress] }, - { - pageSize: args.pageSize ?? 50, - cursor: args.cursor, - }, - ); - - if (result.items.length === 0) { + const result = await sdk.searchAgents({ owners: [walletAddress] }); + + if (result.length === 0) { return `No agents found owned by ${walletAddress} on chain ${chainId}.`; } // Format the response - const agentList = result.items + const agentList = result .map(agent => { const name = agent.name || "Unnamed"; const description = agent.description ? ` - ${agent.description.slice(0, 50)}...` : ""; @@ -284,13 +278,7 @@ Supports pagination. }) .join("\n\n"); - let response = `Found ${result.items.length} agent(s) owned by ${walletAddress}:\n\n${agentList}`; - - if (result.nextCursor) { - response += `\n\n(More results available. Use cursor: "${result.nextCursor}" to fetch next page)`; - } - - return response; + return `Found ${result.length} agent(s) owned by ${walletAddress}:\n\n${agentList}`; } catch (error) { return `Error retrieving owned agents: ${error}`; } @@ -335,16 +323,6 @@ This is a read-only operation using indexed data for fast queries. const sdk = getAgent0SDK(walletProvider); console.log("args", args); - // Fetch all matching agents by paginating through the SDK - const allAgents: Array<{ - agentId: string; - name: string; - description?: string; - mcpTools?: string[]; - a2aSkills?: string[]; - active?: boolean; - }> = []; - const searchFilters = { name: args.name, mcpTools: args.mcpTools, @@ -353,22 +331,7 @@ This is a read-only operation using indexed data for fast queries. x402support: args.x402support, }; - // Paginate through all SDK results - let sdkCursor: string | undefined; - const sdkPageSize = 50; // SDK default - const maxPages = 20; // Safety limit to prevent infinite loops - let pageCount = 0; - - do { - const searchResult = await sdk.searchAgents(searchFilters, { - pageSize: sdkPageSize, - cursor: sdkCursor, - }); - - allAgents.push(...searchResult.items); - sdkCursor = searchResult.nextCursor; - pageCount++; - } while (sdkCursor && pageCount < maxPages); + const allAgents = await sdk.searchAgents(searchFilters); if (allAgents.length === 0) { return "No agents found matching the specified criteria."; diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts index 94d241145..bfce4bbb0 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts @@ -12,6 +12,15 @@ import { EvmWalletProvider } from "../../wallet-providers"; import * as utilsRep from "./utils_rep"; import * as utils from "./utils"; +// Mock utils to avoid loading the ESM-only agent0-sdk at module load time +jest.mock("./utils", () => ({ + getAgent0SDK: jest.fn(), + uploadJsonToIPFS: jest.fn(), + uploadFileToIPFS: jest.fn(), + ipfsToHttpUrl: jest.fn((uri: string) => uri), + formatCAIP10Address: jest.fn(), +})); + const MOCK_AGENT_ID = "123"; const MOCK_ADDRESS = "0x1234567890123456789012345678901234567890"; const MOCK_CLIENT_ADDRESS = "0x9876543210987654321098765432109876543210"; diff --git a/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts b/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts index cbffceeee..cf2db3db2 100644 --- a/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts +++ b/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts @@ -76,7 +76,10 @@ export const SearchAgentsSchema = z a2aSkills: z.array(z.string()).optional().describe("Filter by A2A skills"), oasfSkills: z.array(z.string()).optional().describe("Filter by OASF skill taxonomy"), oasfDomains: z.array(z.string()).optional().describe("Filter by OASF domain taxonomy"), - active: z.boolean().optional().describe("Filter by active status (true=active only, false=inactive only, omit=all)"), + active: z + .boolean() + .optional() + .describe("Filter by active status (true=active only, false=inactive only, omit=all)"), x402support: z.boolean().optional().describe("Filter by x402 payment support"), minReputation: z.number().optional().describe("Minimum average reputation score"), maxReputation: z.number().optional().describe("Maximum average reputation score"), diff --git a/typescript/agentkit/src/action-providers/x402/x402ActionProvider.ts b/typescript/agentkit/src/action-providers/x402/x402ActionProvider.ts index 337faeb1d..2ea3e1361 100644 --- a/typescript/agentkit/src/action-providers/x402/x402ActionProvider.ts +++ b/typescript/agentkit/src/action-providers/x402/x402ActionProvider.ts @@ -849,7 +849,22 @@ These are the only services that can be called using make_http_request or make_h const client = new x402Client(); if (walletProvider instanceof EvmWalletProvider) { - const signer = walletProvider.toSigner(); + const account = walletProvider.toSigner(); + const signer = { + ...account, + readContract: (args: { + address: `0x${string}`; + abi: readonly unknown[]; + functionName: string; + args?: readonly unknown[]; + }) => + walletProvider.readContract({ + address: args.address, + abi: args.abi as never, + functionName: args.functionName as never, + args: args.args as never, + }), + }; registerExactEvmScheme(client, { signer }); } else if (walletProvider instanceof SvmWalletProvider) { const signer = await walletProvider.toSigner(); diff --git a/typescript/pnpm-lock.yaml b/typescript/pnpm-lock.yaml index 9a13bd8b1..6944f8619 100644 --- a/typescript/pnpm-lock.yaml +++ b/typescript/pnpm-lock.yaml @@ -78,8 +78,8 @@ importers: specifier: ^0.20.0 version: 0.20.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) '@coinbase/x402': - specifier: ^0.6.3 - version: 0.6.4(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + specifier: ^2.1.0 + version: 2.1.0(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) '@ensofinance/sdk': specifier: ^2.0.6 version: 2.0.6 @@ -103,16 +103,16 @@ importers: version: 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) '@vaultsfyi/sdk': specifier: ^2.1.9 - version: 2.1.9(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 2.1.9(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@x402/evm': - specifier: ^2.0.0 - version: 2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + specifier: 2.2.0 + version: 2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) '@x402/fetch': - specifier: ^2.0.0 - version: 2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + specifier: 2.2.0 + version: 2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) '@x402/svm': - specifier: ^2.0.0 - version: 2.0.0(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + specifier: 2.2.0 + version: 2.2.0(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) '@zerodev/ecdsa-validator': specifier: ^5.4.5 version: 5.4.5(@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) @@ -129,8 +129,8 @@ importers: specifier: 0.6.1 version: 0.6.1 agent0-sdk: - specifier: ^1.4.2 - version: 1.4.2(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + specifier: ^1.5.3 + version: 1.5.3(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) bs58: specifier: ^4.0.1 version: 4.0.1 @@ -273,13 +273,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -338,13 +338,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: 0.3.30 - version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.39 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.16 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -369,13 +369,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -400,13 +400,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -431,13 +431,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/web3.js': specifier: ^1.98.0 version: 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -468,13 +468,13 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -607,7 +607,7 @@ importers: dependencies: '@coinbase/agentkit': specifier: latest - version: 0.10.4(@types/node@20.17.27)(abitype@1.2.3(typescript@5.8.2)(zod@3.25.56))(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(typescript@5.8.2)(utf-8-validate@5.0.10) + version: 0.10.4(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(@types/node@20.17.27)(abitype@1.2.3(typescript@5.8.2)(zod@3.25.56))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(graphql@16.11.0)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) dotenv: specifier: ^16.4.5 version: 16.4.7 @@ -654,7 +654,7 @@ importers: dependencies: '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) zod: specifier: ^3.22.4 version: 3.24.2 @@ -1008,6 +1008,9 @@ packages: '@coinbase/x402@0.6.4': resolution: {integrity: sha512-T0tNU8/oZ64GaKC3dbGcOFHqYO0BjII/uZeC/tAS9HOqhWBvewhoa0rzPzaE8SHeKOIwX2YpbFXdG0Hyh0d4mw==} + '@coinbase/x402@2.1.0': + resolution: {integrity: sha512-aKeM+cz//+FjzPVu/zgz7830x0KLtKarwCyxoeC71QgCn+Xcf0NhFpn3Qyw0H496y5YOuR/IQ67gP8DZ/hXFqQ==} + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -1757,6 +1760,7 @@ packages: '@privy-io/server-auth@1.18.4': resolution: {integrity: sha512-FLSQRbzHhxjbkHVCjD+8Iw3+f4U3bJKj97sue9nOmumrpmxJkHhCDusqDR7le7yKrsntHYcOSNAX34FpjkMjQg==} + deprecated: This package is deprecated. If you are looking for the latest features and support, use @privy-io/node instead. peerDependencies: viem: ^2 peerDependenciesMeta: @@ -1901,6 +1905,11 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@solana-program/compute-budget@0.11.0': + resolution: {integrity: sha512-7f1ePqB/eURkTwTOO9TNIdUXZcyrZoX3Uy2hNo7cXMfNhPFWp9AVgIyRNBc2jf15sdUa9gNpW+PfP2iV8AYAaw==} + peerDependencies: + '@solana/kit': ^5.0 + '@solana-program/compute-budget@0.8.0': resolution: {integrity: sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ==} peerDependencies: @@ -1912,29 +1921,67 @@ packages: '@solana/kit': ^2.1.0 '@solana/sysvars': ^2.1.0 + '@solana-program/token-2022@0.6.1': + resolution: {integrity: sha512-Ex02cruDMGfBMvZZCrggVR45vdQQSI/unHVpt/7HPt/IwFYB4eTlXtO8otYZyqV/ce5GqZ8S6uwyRf0zy6fdbA==} + peerDependencies: + '@solana/kit': ^5.0 + '@solana/sysvars': ^5.0 + '@solana-program/token@0.5.1': resolution: {integrity: sha512-bJvynW5q9SFuVOZ5vqGVkmaPGA0MCC+m9jgJj1nk5m20I389/ms69ASnhWGoOPNcie7S9OwBX0gTj2fiyWpfag==} peerDependencies: '@solana/kit': ^2.1.0 + '@solana-program/token@0.9.0': + resolution: {integrity: sha512-vnZxndd4ED4Fc56sw93cWZ2djEeeOFxtaPS8SPf5+a+JZjKA/EnKqzbE1y04FuMhIVrLERQ8uR8H2h72eZzlsA==} + peerDependencies: + '@solana/kit': ^5.0 + '@solana/accounts@2.3.0': resolution: {integrity: sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/accounts@5.5.1': + resolution: {integrity: sha512-TfOY9xixg5rizABuLVuZ9XI2x2tmWUC/OoN556xwfDlhBHBjKfszicYYOyD6nbFmwTGYarCmyGIdteXxTXIdhQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/addresses@2.3.0': resolution: {integrity: sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/addresses@5.5.1': + resolution: {integrity: sha512-5xoah3Q9G30HQghu/9BiHLb5pzlPKRC3zydQDmE3O9H//WfayxTFppsUDCL6FjYUHqj/wzK6CWHySglc2RkpdA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/assertions@2.3.0': resolution: {integrity: sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/assertions@5.5.1': + resolution: {integrity: sha512-YTCSWAlGwSlVPnWtWLm3ukz81wH4j2YaCveK+TjpvUU88hTy6fmUqxi0+hvAMAe4zKXpJyj3Az7BrLJRxbIm4Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/buffer-layout-utils@0.2.0': resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} engines: {node: '>= 10'} @@ -1960,6 +2007,15 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/codecs-core@5.5.1': + resolution: {integrity: sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/codecs-data-structures@2.0.0-rc.1': resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} peerDependencies: @@ -1971,6 +2027,15 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/codecs-data-structures@5.5.1': + resolution: {integrity: sha512-97bJWGyUY9WvBz3mX1UV3YPWGDTez6btCfD0ip3UVEXJbItVuUiOkzcO5iFDUtQT5riKT6xC+Mzl+0nO76gd0w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/codecs-numbers@2.0.0-rc.1': resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: @@ -1988,6 +2053,15 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/codecs-numbers@5.5.1': + resolution: {integrity: sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/codecs-strings@2.0.0-rc.1': resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} peerDependencies: @@ -2001,6 +2075,18 @@ packages: fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5.3.3' + '@solana/codecs-strings@5.5.1': + resolution: {integrity: sha512-7klX4AhfHYA+uKKC/nxRGP2MntbYQCR3N6+v7bk1W/rSxYuhNmt+FN8aoThSZtWIKwN6BEyR1167ka8Co1+E7A==} + engines: {node: '>=20.18.0'} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: ^5.0.0 + peerDependenciesMeta: + fastestsmallesttextencoderdecoder: + optional: true + typescript: + optional: true + '@solana/codecs@2.0.0-rc.1': resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} peerDependencies: @@ -2012,6 +2098,15 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/codecs@5.5.1': + resolution: {integrity: sha512-Vea29nJub/bXjfzEV7ZZQ/PWr1pYLZo3z0qW0LQL37uKKVzVFRQlwetd7INk3YtTD3xm9WUYr7bCvYUk3uKy2g==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/errors@2.0.0-rc.1': resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} hasBin: true @@ -2032,42 +2127,124 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/errors@5.5.1': + resolution: {integrity: sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/fast-stable-stringify@2.3.0': resolution: {integrity: sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/fast-stable-stringify@5.5.1': + resolution: {integrity: sha512-Ni7s2FN33zTzhTFgRjEbOVFO+UAmK8qi3Iu0/GRFYK4jN696OjKHnboSQH/EacQ+yGqS54bfxf409wU5dsLLCw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/functional@2.3.0': resolution: {integrity: sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/functional@5.5.1': + resolution: {integrity: sha512-tTHoJcEQq3gQx5qsdsDJ0LEJeFzwNpXD80xApW9o/PPoCNimI3SALkZl+zNW8VnxRrV3l3yYvfHWBKe/X3WG3w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@solana/instruction-plans@5.5.1': + resolution: {integrity: sha512-7z3CB7YMcFKuVvgcnNY8bY6IsZ8LG61Iytbz7HpNVGX2u1RthOs1tRW8luTzSG1MPL0Ox7afyAVMYeFqSPHnaQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/instructions@2.3.0': resolution: {integrity: sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/instructions@5.5.1': + resolution: {integrity: sha512-h0G1CG6S+gUUSt0eo6rOtsaXRBwCq1+Js2a+Ps9Bzk9q7YHNFA75/X0NWugWLgC92waRp66hrjMTiYYnLBoWOQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/keys@2.3.0': resolution: {integrity: sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/keys@5.5.1': + resolution: {integrity: sha512-KRD61cL7CRL+b4r/eB9dEoVxIf/2EJ1Pm1DmRYhtSUAJD2dJ5Xw8QFuehobOGm9URqQ7gaQl+Fkc1qvDlsWqKg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/kit@2.3.0': resolution: {integrity: sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/kit@5.5.1': + resolution: {integrity: sha512-irKUGiV2yRoyf+4eGQ/ZeCRxa43yjFEL1DUI5B0DkcfZw3cr0VJtVJnrG8OtVF01vT0OUfYOcUn6zJW5TROHvQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/nominal-types@2.3.0': resolution: {integrity: sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/nominal-types@5.5.1': + resolution: {integrity: sha512-I1ImR+kfrLFxN5z22UDiTWLdRZeKtU0J/pkWkO8qm/8WxveiwdIv4hooi8pb6JnlR4mSrWhq0pCIOxDYrL9GIQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@solana/offchain-messages@5.5.1': + resolution: {integrity: sha512-g+xHH95prTU+KujtbOzj8wn+C7ZNoiLhf3hj6nYq3MTyxOXtBEysguc97jJveUZG0K97aIKG6xVUlMutg5yxhw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/options@2.0.0-rc.1': resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} peerDependencies: @@ -2079,48 +2256,129 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/options@5.5.1': + resolution: {integrity: sha512-eo971c9iLNLmk+yOFyo7yKIJzJ/zou6uKpy6mBuyb/thKtS/haiKIc3VLhyTXty3OH2PW8yOlORJnv4DexJB8A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@solana/plugin-core@5.5.1': + resolution: {integrity: sha512-VUZl30lDQFJeiSyNfzU1EjYt2QZvoBFKEwjn1lilUJw7KgqD5z7mbV7diJhT+dLFs36i0OsjXvq5kSygn8YJ3A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/programs@2.3.0': resolution: {integrity: sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/programs@5.5.1': + resolution: {integrity: sha512-7U9kn0Jsx1NuBLn5HRTFYh78MV4XN145Yc3WP/q5BlqAVNlMoU9coG5IUTJIG847TUqC1lRto3Dnpwm6T4YRpA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/promises@2.3.0': resolution: {integrity: sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/promises@5.5.1': + resolution: {integrity: sha512-T9lfuUYkGykJmppEcssNiCf6yiYQxJkhiLPP+pyAc2z84/7r3UVIb2tNJk4A9sucS66pzJnVHZKcZVGUUp6wzA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-api@2.3.0': resolution: {integrity: sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc-api@5.5.1': + resolution: {integrity: sha512-XWOQQPhKl06Vj0xi3RYHAc6oEQd8B82okYJ04K7N0Vvy3J4PN2cxeK7klwkjgavdcN9EVkYCChm2ADAtnztKnA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-parsed-types@2.3.0': resolution: {integrity: sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc-parsed-types@5.5.1': + resolution: {integrity: sha512-HEi3G2nZqGEsa3vX6U0FrXLaqnUCg4SKIUrOe8CezD+cSFbRTOn3rCLrUmJrhVyXlHoQVaRO9mmeovk31jWxJg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-spec-types@2.3.0': resolution: {integrity: sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc-spec-types@5.5.1': + resolution: {integrity: sha512-6OFKtRpIEJQs8Jb2C4OO8KyP2h2Hy1MFhatMAoXA+0Ik8S3H+CicIuMZvGZ91mIu/tXicuOOsNNLu3HAkrakrw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-spec@2.3.0': resolution: {integrity: sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc-spec@5.5.1': + resolution: {integrity: sha512-m3LX2bChm3E3by4mQrH4YwCAFY57QBzuUSWqlUw7ChuZ+oLLOq7b2czi4i6L4Vna67j3eCmB3e+4tqy1j5wy7Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-subscriptions-api@2.3.0': resolution: {integrity: sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc-subscriptions-api@5.5.1': + resolution: {integrity: sha512-5Oi7k+GdeS8xR2ly1iuSFkAv6CZqwG0Z6b1QZKbEgxadE1XGSDrhM2cn59l+bqCozUWCqh4c/A2znU/qQjROlw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-subscriptions-channel-websocket@2.3.0': resolution: {integrity: sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==} engines: {node: '>=20.18.0'} @@ -2128,48 +2386,120 @@ packages: typescript: '>=5.3.3' ws: ^8.18.0 + '@solana/rpc-subscriptions-channel-websocket@5.5.1': + resolution: {integrity: sha512-7tGfBBrYY8TrngOyxSHoCU5shy86iA9SRMRrPSyBhEaZRAk6dnbdpmUTez7gtdVo0BCvh9nzQtUycKWSS7PnFQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-subscriptions-spec@2.3.0': resolution: {integrity: sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc-subscriptions-spec@5.5.1': + resolution: {integrity: sha512-iq+rGq5fMKP3/mKHPNB6MC8IbVW41KGZg83Us/+LE3AWOTWV1WT20KT2iH1F1ik9roi42COv/TpoZZvhKj45XQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-subscriptions@2.3.0': resolution: {integrity: sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc-subscriptions@5.5.1': + resolution: {integrity: sha512-CTMy5bt/6mDh4tc6vUJms9EcuZj3xvK0/xq8IQ90rhkpYvate91RjBP+egvjgSayUg9yucU9vNuUpEjz4spM7w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-transformers@2.3.0': resolution: {integrity: sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc-transformers@5.5.1': + resolution: {integrity: sha512-OsWqLCQdcrRJKvHiMmwFhp9noNZ4FARuMkHT5us3ustDLXaxOjF0gfqZLnMkulSLcKt7TGXqMhBV+HCo7z5M8Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-transport-http@2.3.0': resolution: {integrity: sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc-transport-http@5.5.1': + resolution: {integrity: sha512-yv8GoVSHqEV0kUJEIhkdOVkR2SvJ6yoWC51cJn2rSV7plr6huLGe0JgujCmB7uZhhaLbcbP3zxXxu9sOjsi7Fg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc-types@2.3.0': resolution: {integrity: sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc-types@5.5.1': + resolution: {integrity: sha512-bibTFQ7PbHJJjGJPmfYC2I+/5CRFS4O2p9WwbFraX1Keeel+nRrt/NBXIy8veP5AEn2sVJIyJPpWBRpCx1oATA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/rpc@2.3.0': resolution: {integrity: sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/rpc@5.5.1': + resolution: {integrity: sha512-ku8zTUMrkCWci66PRIBC+1mXepEnZH/q1f3ck0kJZ95a06bOTl5KU7HeXWtskkyefzARJ5zvCs54AD5nxjQJ+A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/signers@2.3.0': resolution: {integrity: sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/signers@5.5.1': + resolution: {integrity: sha512-FY0IVaBT2kCAze55vEieR6hag4coqcuJ31Aw3hqRH7mv6sV8oqwuJmUrx+uFwOp1gwd5OEAzlv6N4hOOple4sQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/spl-token-group@0.0.7': resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} engines: {node: '>=16'} @@ -2194,30 +2524,75 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/subscribable@5.5.1': + resolution: {integrity: sha512-9K0PsynFq0CsmK1CDi5Y2vUIJpCqkgSS5yfDN0eKPgHqEptLEaia09Kaxc90cSZDZU5mKY/zv1NBmB6Aro9zQQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/sysvars@2.3.0': resolution: {integrity: sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/sysvars@5.5.1': + resolution: {integrity: sha512-k3Quq87Mm+geGUu1GWv6knPk0ALsfY6EKSJGw9xUJDHzY/RkYSBnh0RiOrUhtFm2TDNjOailg8/m0VHmi3reFA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/transaction-confirmation@2.3.0': resolution: {integrity: sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/transaction-confirmation@5.5.1': + resolution: {integrity: sha512-j4mKlYPHEyu+OD7MBt3jRoX4ScFgkhZC6H65on4Fux6LMScgivPJlwnKoZMnsgxFgWds0pl+BYzSiALDsXlYtw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/transaction-messages@2.3.0': resolution: {integrity: sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/transactions@2.3.0': - resolution: {integrity: sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==} + '@solana/transaction-messages@5.5.1': + resolution: {integrity: sha512-aXyhMCEaAp3M/4fP0akwBBQkFPr4pfwoC5CLDq999r/FUwDax2RE/h4Ic7h2Xk+JdcUwsb+rLq85Y52hq84XvQ==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' - + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@solana/transactions@2.3.0': + resolution: {integrity: sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transactions@5.5.1': + resolution: {integrity: sha512-8hHtDxtqalZ157pnx6p8k10D7J/KY/biLzfgh9R09VNLLY3Fqi7kJvJCr7M2ik3oRll56pxhraAGCC9yIT6eOA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@solana/wallet-standard-features@1.3.0': resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} engines: {node: '>=16'} @@ -2495,6 +2870,7 @@ packages: '@walletconnect/ethereum-provider@2.21.1': resolution: {integrity: sha512-SSlIG6QEVxClgl1s0LMk4xr2wg4eT3Zn/Hb81IocyqNSGfXpjtawWxKxiC5/9Z95f1INyBD6MctJbL/R1oBwIw==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/events@1.0.1': resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} @@ -2539,9 +2915,11 @@ packages: '@walletconnect/sign-client@2.21.0': resolution: {integrity: sha512-z7h+PeLa5Au2R591d/8ZlziE0stJvdzP9jNFzFolf2RG/OiXulgFKum8PrIyXy+Rg2q95U9nRVUF9fWcn78yBA==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/sign-client@2.21.1': resolution: {integrity: sha512-QaXzmPsMnKGV6tc4UcdnQVNOz4zyXgarvdIQibJ4L3EmLat73r5ZVl4c0cCOcoaV7rgM9Wbphgu5E/7jNcd3Zg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} @@ -2554,9 +2932,11 @@ packages: '@walletconnect/universal-provider@2.21.0': resolution: {integrity: sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/universal-provider@2.21.1': resolution: {integrity: sha512-Wjx9G8gUHVMnYfxtasC9poGm8QMiPCpXpbbLFT+iPoQskDDly8BwueWnqKs4Mx2SdIAWAwuXeZ5ojk5qQOxJJg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/utils@2.21.0': resolution: {integrity: sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig==} @@ -2573,14 +2953,17 @@ packages: '@x402/core@2.0.0': resolution: {integrity: sha512-tgC8Ujj8Bi9zU1318RAOcagffaHRMPupqj0tlmcOm4j/a/iWGoN58SIpqFV98qkZi7z6BpFAsScCyXnmaDvIyQ==} - '@x402/evm@2.0.0': - resolution: {integrity: sha512-BA8zC1/AWYq99tWRLNoqudJkeZJpkbPdHMEjrsEOjineVoijnz5N/0NO0klxT64oDG9kNbeczwLU/mTj7NneEw==} + '@x402/core@2.4.0': + resolution: {integrity: sha512-g4K5dAVjevQftxCcpFlUDjO2AHE43FkO43VxwLCQ8ET3ki4aj2fzCcgvnXEj2eloJoocFS/Evt4pSTnP/4cFJw==} - '@x402/fetch@2.0.0': - resolution: {integrity: sha512-7odbj+d9Op6Ns62YPOAw37Afvf0ldZ90bHOrAJFP9ahcV6l0iHdTtr7NcSqIZI+0r4emDmIIpGtLRhyyVCQYnA==} + '@x402/evm@2.2.0': + resolution: {integrity: sha512-fJaIS97Ir+ykkxLUdI+/cFiQFyruWukJbZ3PLo8518n6IKP9B7HqsJ1cUMRWd/fHFXNqOEAo6tKFW4wHKOxd2A==} - '@x402/svm@2.0.0': - resolution: {integrity: sha512-VJdxUoiNZ18/wucXToEscVKNfN+x18jK9c6p0AscS7iJaNq3z3ST/guf8asRedEWX9Rus62SilTmq3UYdNcnvw==} + '@x402/fetch@2.2.0': + resolution: {integrity: sha512-oSn3jVe03rJaqbgMA33LrKFBbzelVfMtjLcE/9WIaTB0K/NLPo8xWDLMkiI9yRlaEO7sXvpMfSCDrRdkjf33gA==} + + '@x402/svm@2.2.0': + resolution: {integrity: sha512-DJkEalO1G1T+o3xl23ZAvK5d0SJ+0gkJ04BZKT8SkMIZoZlR1wWhJXPwL+yvFapBEFoBSii8H5VcFiaBfFALDw==} '@xmtp/agent-sdk@1.1.4': resolution: {integrity: sha512-98hFtZmQln+QxA3eN6Of3ot9jxjUsRoMBvGz4yRV7gRrqJtH4iVqWTCCN1SqFpBPaQECdKPJhlxCEE7II+5jMw==} @@ -2746,8 +3129,8 @@ packages: aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} - agent0-sdk@1.4.2: - resolution: {integrity: sha512-FBJlF8RVzuyV6MJbv24XHbRfVniipm+7XTk839edh0z4cpD3E3ViXp/eWw+7vwWecQEcOc7CJQ4XOKSUGgGi0A==} + agent0-sdk@1.5.3: + resolution: {integrity: sha512-Q7y2aY9OkcdfijrnJVToa3artLlXZIyDLU1hlKNnHlQIQQ99BA0uu5d395vET7nNwfpj74DsC+XnXXII8tGh1g==} engines: {node: '>=22.0.0'} agentkeepalive@4.6.0: @@ -3106,6 +3489,10 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -3213,6 +3600,10 @@ packages: resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} engines: {node: '>=20'} + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -4032,7 +4423,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -5246,8 +5637,8 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - ox@0.10.5: - resolution: {integrity: sha512-mXJRiZswmX46abrzNkJpTN9sPJ/Rhevsp5Dfg0z80D55aoLNmEV4oN+/+feSNW593c2CnHavMqSVBanpJ0lUkQ==} + ox@0.12.4: + resolution: {integrity: sha512-+P+C7QzuwPV8lu79dOwjBKfB2CbnbEXe/hfyyrff1drrO1nOOj3Hc87svHfcW1yneRr3WXaKr6nz11nq+/DF9Q==} peerDependencies: typescript: '>=5.4.0' peerDependenciesMeta: @@ -6342,6 +6733,9 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.22.0: + resolution: {integrity: sha512-RKZvifiL60xdsIuC80UY0dq8Z7DbJUV8/l2hOVbyZAxBzEeQU4Z58+4ZzJ6WN2Lidi9KzT5EbiGX+PI/UGYuRw==} + undici@5.29.0: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} @@ -6554,8 +6948,8 @@ packages: typescript: optional: true - viem@2.43.1: - resolution: {integrity: sha512-S33pBNlRvOlVv4+L94Z8ydCMDB1j0cuHFUvaC28i6OTxw3uY1P4M3h1YDFK8YC1H9/lIbeBTTvCRhi0FqU/2iw==} + viem@2.46.3: + resolution: {integrity: sha512-2LJS+Hyh2sYjHXQtzfv1kU9pZx9dxFzvoU/ZKIcn0FNtOU0HQuIICuYdWtUDFHaGXbAdVo8J1eCvmjkL9JVGwg==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -6596,6 +6990,7 @@ packages: whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} @@ -6709,6 +7104,18 @@ packages: utf-8-validate: optional: true + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + x402-fetch@0.7.0: resolution: {integrity: sha512-HS7v6wsIVrU8TvAGBwRmA3I+ZXbanPraA3OMj90y6Hn1Mej1wAELOK4VpGh6zI8d6w5E464BnGu9o0FE+8DRAA==} @@ -7061,7 +7468,7 @@ snapshots: '@babel/parser': 7.27.0 '@babel/template': 7.27.0 '@babel/types': 7.27.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.3 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -7091,26 +7498,6 @@ snapshots: - utf-8-validate - zod - '@base-org/account@1.1.1(bufferutil@4.0.9)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(zod@3.25.56)': - dependencies: - '@noble/hashes': 1.4.0 - clsx: 1.2.1 - eventemitter3: 5.0.1 - idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.8.2)(zod@3.25.56) - preact: 10.24.2 - viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - zustand: 5.0.3(use-sync-external-store@1.4.0) - transitivePeerDependencies: - - '@types/react' - - bufferutil - - immer - - react - - typescript - - use-sync-external-store - - utf-8-validate - - zod - '@base-org/account@2.2.0(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2)': dependencies: '@noble/hashes': 1.4.0 @@ -7131,7 +7518,7 @@ snapshots: - utf-8-validate - zod - '@base-org/account@2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@base-org/account@2.2.0(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@noble/hashes': 1.4.0 clsx: 1.2.1 @@ -7318,25 +7705,25 @@ snapshots: human-id: 4.1.1 prettier: 2.8.8 - '@coinbase/agentkit@0.10.4(@types/node@20.17.27)(abitype@1.2.3(typescript@5.8.2)(zod@3.25.56))(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@coinbase/agentkit@0.10.4(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(@types/node@20.17.27)(abitype@1.2.3(typescript@5.8.2)(zod@3.25.56))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(graphql@16.11.0)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@across-protocol/app-sdk': 0.2.0(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) '@alloralabs/allora-sdk': 0.1.0 - '@base-org/account': 2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@base-org/account': 2.2.0(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@coinbase/cdp-sdk': 1.38.1(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) '@coinbase/coinbase-sdk': 0.20.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@coinbase/x402': 0.6.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@coinbase/x402': 0.6.4(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@ensofinance/sdk': 2.0.6 '@jup-ag/api': 6.0.40 '@privy-io/public-api': 2.18.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@privy-io/server-auth': 1.18.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/spl-token': 0.4.13(@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) '@solana/web3.js': 1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@vaultsfyi/sdk': 2.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@x402/evm': 2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@x402/fetch': 2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@x402/svm': 2.0.0(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@vaultsfyi/sdk': 2.1.9(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@x402/evm': 2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@x402/fetch': 2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@x402/svm': 2.2.0(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) '@zerodev/ecdsa-validator': 5.4.5(@zerodev/sdk@5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) '@zerodev/intent': 0.0.24(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) '@zerodev/sdk': 5.4.28(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) @@ -7495,31 +7882,11 @@ snapshots: - utf-8-validate - zod - '@coinbase/wallet-sdk@4.3.6(bufferutil@4.0.9)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(zod@3.25.56)': - dependencies: - '@noble/hashes': 1.4.0 - clsx: 1.2.1 - eventemitter3: 5.0.1 - idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.8.2)(zod@3.25.56) - preact: 10.24.2 - viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - zustand: 5.0.3(use-sync-external-store@1.4.0) - transitivePeerDependencies: - - '@types/react' - - bufferutil - - immer - - react - - typescript - - use-sync-external-store - - utf-8-validate - - zod - - '@coinbase/x402@0.6.4(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@coinbase/x402@0.6.4(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@coinbase/cdp-sdk': 1.38.1(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - x402: 0.6.1(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + x402: 0.6.1(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) zod: 3.25.56 transitivePeerDependencies: - '@azure/app-configuration' @@ -7556,46 +7923,19 @@ snapshots: - utf-8-validate - ws - '@coinbase/x402@0.6.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@coinbase/x402@2.1.0(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: '@coinbase/cdp-sdk': 1.38.1(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@x402/core': 2.0.0 viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - x402: 0.6.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) zod: 3.25.56 transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@solana/sysvars' - - '@tanstack/query-core' - - '@tanstack/react-query' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - bufferutil - - db0 - debug - encoding - fastestsmallesttextencoderdecoder - - immer - - ioredis - - react - - supports-color - typescript - - uploadthing - utf-8-validate - - ws '@cspotcode/source-map-support@0.8.1': dependencies: @@ -8055,16 +8395,16 @@ snapshots: '@ipld/dag-cbor@9.2.5': dependencies: cborg: 4.5.8 - multiformats: 13.3.2 + multiformats: 13.4.2 '@ipld/dag-json@10.2.6': dependencies: cborg: 4.5.8 - multiformats: 13.3.2 + multiformats: 13.4.2 '@ipld/dag-pb@4.1.5': dependencies: - multiformats: 13.3.2 + multiformats: 13.4.2 '@istanbuljs/load-nyc-config@1.1.0': dependencies: @@ -8352,14 +8692,31 @@ snapshots: transitivePeerDependencies: - openai - '@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))': + '@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))': + dependencies: + '@cfworker/json-schema': 4.1.1 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.19 + langsmith: 0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.24.2 + zod-to-json-schema: 3.24.5(zod@3.24.2) + transitivePeerDependencies: + - openai + + '@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.19 - langsmith: 0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + langsmith: 0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -8384,9 +8741,14 @@ snapshots: '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) uuid: 10.0.0 - '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))': + '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + uuid: 10.0.0 + + '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))': + dependencies: + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) uuid: 10.0.0 '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)': @@ -8419,14 +8781,24 @@ snapshots: '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) react: 18.3.1 - '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)': + '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)': + dependencies: + '@types/json-schema': 7.0.15 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 9.0.1 + optionalDependencies: + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + react: 18.3.1 + + '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) react: 18.3.1 '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56))': @@ -8465,11 +8837,23 @@ snapshots: transitivePeerDependencies: - react - '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56))': + '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2))': + dependencies: + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))) + '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1) + uuid: 10.0.0 + zod: 3.24.2 + optionalDependencies: + zod-to-json-schema: 3.24.5(zod@3.24.2) + transitivePeerDependencies: + - react + + '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.25.56))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) - '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))) - '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56))) + '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(react@18.3.1) uuid: 10.0.0 zod: 3.24.2 optionalDependencies: @@ -8510,11 +8894,22 @@ snapshots: - encoding - ws - '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) js-tiktoken: 1.0.19 - openai: 4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + openai: 4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + zod: 3.24.2 + zod-to-json-schema: 3.24.5(zod@3.24.2) + transitivePeerDependencies: + - encoding + - ws + + '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)))(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@langchain/core': 0.3.30(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) + js-tiktoken: 1.0.19 + openai: 4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) zod: 3.24.2 zod-to-json-schema: 3.24.5(zod@3.24.2) transitivePeerDependencies: @@ -8692,7 +9087,7 @@ snapshots: bufferutil: 4.0.9 cross-fetch: 4.1.0(encoding@0.1.13) date-fns: 2.30.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.3 eciesjs: 0.4.15 eventemitter2: 6.4.9 readable-stream: 3.6.2 @@ -8716,7 +9111,7 @@ snapshots: '@paulmillr/qr': 0.2.1 bowser: 2.12.1 cross-fetch: 4.1.0(encoding@0.1.13) - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.3 eciesjs: 0.4.15 eth-rpc-errors: 4.0.3 eventemitter2: 6.4.9 @@ -8743,7 +9138,7 @@ snapshots: '@scure/base': 1.2.6 '@types/debug': 4.1.12 '@types/lodash': 4.17.20 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.3 lodash: 4.17.21 pony-cause: 2.1.11 semver: 7.7.1 @@ -8768,9 +9163,9 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.3 pony-cause: 2.1.11 - semver: 7.7.1 + semver: 7.7.3 uuid: 9.0.1 transitivePeerDependencies: - supports-color @@ -8782,7 +9177,7 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.3 pony-cause: 2.1.11 semver: 7.7.1 uuid: 9.0.1 @@ -8834,7 +9229,7 @@ snapshots: '@chainsafe/netmask': 2.0.0 '@multiformats/dns': 1.0.13 abort-error: 1.0.1 - multiformats: 13.3.2 + multiformats: 13.4.2 uint8-varint: 2.0.4 uint8arrays: 5.1.0 @@ -9067,13 +9462,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@reown/appkit-pay@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - valtio: 1.13.2 - viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) + lit: 3.3.0 + valtio: 1.13.2(react@18.3.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9102,14 +9498,18 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@reown/appkit-polyfills@1.7.8': + dependencies: + buffer: 6.0.3 + + '@reown/appkit-scaffold-ui@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) lit: 3.3.0 - valtio: 1.13.2(react@18.3.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9136,16 +9536,16 @@ snapshots: - typescript - uploadthing - utf-8-validate + - valtio - zod - '@reown/appkit-pay@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@reown/appkit-ui@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) lit: 3.3.0 - valtio: 1.13.2 + qrcode: 1.5.3 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9174,18 +9574,16 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-polyfills@1.7.8': - dependencies: - buffer: 6.0.3 - - '@reown/appkit-scaffold-ui@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56)': + '@reown/appkit-utils@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) + '@reown/appkit-polyfills': 1.7.8 '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - lit: 3.3.0 + '@walletconnect/logger': 2.1.2 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + valtio: 1.13.2(react@18.3.1) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9212,53 +9610,34 @@ snapshots: - typescript - uploadthing - utf-8-validate - - valtio - zod - '@reown/appkit-scaffold-ui@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56)': + '@reown/appkit-wallet@1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - lit: 3.3.0 + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-polyfills': 1.7.8 + '@walletconnect/logger': 2.1.2 + zod: 3.22.4 transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - bufferutil - - db0 - - encoding - - ioredis - - react - typescript - - uploadthing - utf-8-validate - - valtio - - zod - '@reown/appkit-ui@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@reown/appkit@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-pay': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-scaffold-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - lit: 3.3.0 - qrcode: 1.5.3 + '@walletconnect/types': 2.21.0 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + bs58: 6.0.0 + valtio: 1.13.2(react@18.3.1) + viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9287,220 +9666,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-ui@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': + '@rtsao/scc@1.1.0': {} + + '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - lit: 3.3.0 - qrcode: 1.5.3 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - encoding - - ioredis - - react - - typescript - - uploadthing - - utf-8-validate - - zod - - '@reown/appkit-utils@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56)': - dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - valtio: 1.13.2(react@18.3.1) - viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - encoding - - ioredis - - react - - typescript - - uploadthing - - utf-8-validate - - zod - - '@reown/appkit-utils@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56)': - dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - valtio: 1.13.2 - viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - encoding - - ioredis - - react - - typescript - - uploadthing - - utf-8-validate - - zod - - '@reown/appkit-wallet@1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': - dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-polyfills': 1.7.8 - '@walletconnect/logger': 2.1.2 - zod: 3.22.4 - transitivePeerDependencies: - - bufferutil - - typescript - - utf-8-validate - - '@reown/appkit@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': - dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-pay': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@18.3.1))(zod@3.25.56) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.21.0 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - bs58: 6.0.0 - valtio: 1.13.2(react@18.3.1) - viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - encoding - - ioredis - - react - - typescript - - uploadthing - - utf-8-validate - - zod - - '@reown/appkit@1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': - dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-pay': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.56) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.21.0 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - bs58: 6.0.0 - valtio: 1.13.2 - viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - encoding - - ioredis - - react - - typescript - - uploadthing - - utf-8-validate - - zod - - '@rtsao/scc@1.1.0': {} - - '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': - dependencies: - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - events: 3.3.0 + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + events: 3.3.0 transitivePeerDependencies: - bufferutil - typescript @@ -9596,19 +9767,44 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(typescript@5.8.2))': + '@solana-program/compute-budget@0.11.0(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10))': + dependencies: + '@solana/kit': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + + '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))': + '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + + '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana-program/token@0.5.1(@solana/kit@2.3.0(typescript@5.8.2))': + '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/sysvars': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + + '@solana-program/token-2022@0.6.1(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))': + dependencies: + '@solana/kit': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/sysvars': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + + '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + + '@solana-program/token@0.9.0(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10))': + dependencies: + '@solana/kit': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/accounts@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9621,6 +9817,19 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/accounts@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/rpc-spec': 5.5.1(typescript@5.8.2) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/addresses@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/assertions': 2.3.0(typescript@5.8.2) @@ -9632,11 +9841,29 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/addresses@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/assertions': 5.5.1(typescript@5.8.2) + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/nominal-types': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/assertions@2.3.0(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 + '@solana/assertions@5.5.1(typescript@5.8.2)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 @@ -9668,6 +9895,12 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 + '@solana/codecs-core@5.5.1(typescript@5.8.2)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.2) @@ -9682,6 +9915,14 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 + '@solana/codecs-data-structures@5.5.1(typescript@5.8.2)': + dependencies: + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.2) @@ -9700,6 +9941,13 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 + '@solana/codecs-numbers@5.5.1(typescript@5.8.2)': + dependencies: + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.2) @@ -9716,6 +9964,15 @@ snapshots: fastestsmallesttextencoderdecoder: 1.0.22 typescript: 5.8.2 + '@solana/codecs-strings@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + optionalDependencies: + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.8.2 + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.2) @@ -9738,6 +9995,18 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/codecs@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-data-structures': 5.5.1(typescript@5.8.2) + '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/options': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/errors@2.0.0-rc.1(typescript@5.8.2)': dependencies: chalk: 5.4.1 @@ -9756,20 +10025,55 @@ snapshots: commander: 14.0.1 typescript: 5.8.2 + '@solana/errors@5.5.1(typescript@5.8.2)': + dependencies: + chalk: 5.6.2 + commander: 14.0.2 + optionalDependencies: + typescript: 5.8.2 + '@solana/fast-stable-stringify@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 + '@solana/fast-stable-stringify@5.5.1(typescript@5.8.2)': + optionalDependencies: + typescript: 5.8.2 + '@solana/functional@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 + '@solana/functional@5.5.1(typescript@5.8.2)': + optionalDependencies: + typescript: 5.8.2 + + '@solana/instruction-plans@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/instructions': 5.5.1(typescript@5.8.2) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/promises': 5.5.1(typescript@5.8.2) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/instructions@2.3.0(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.3.0(typescript@5.8.2) '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 + '@solana/instructions@5.5.1(typescript@5.8.2)': + dependencies: + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + '@solana/keys@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/assertions': 2.3.0(typescript@5.8.2) @@ -9781,6 +10085,18 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/keys@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/assertions': 5.5.1(typescript@5.8.2) + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/nominal-types': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9806,10 +10122,85 @@ snapshots: - fastestsmallesttextencoderdecoder - ws + '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 2.3.0(typescript@5.8.2) + '@solana/functional': 2.3.0(typescript@5.8.2) + '@solana/instructions': 2.3.0(typescript@5.8.2) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/programs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-parsed-types': 2.3.0(typescript@5.8.2) + '@solana/rpc-spec-types': 2.3.0(typescript@5.8.2) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@solana/accounts': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/functional': 5.5.1(typescript@5.8.2) + '@solana/instruction-plans': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/instructions': 5.5.1(typescript@5.8.2) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/offchain-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/plugin-core': 5.5.1(typescript@5.8.2) + '@solana/programs': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-api': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-parsed-types': 5.5.1(typescript@5.8.2) + '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) + '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/signers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/sysvars': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transaction-confirmation': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - bufferutil + - fastestsmallesttextencoderdecoder + - utf-8-validate + '@solana/nominal-types@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 + '@solana/nominal-types@5.5.1(typescript@5.8.2)': + optionalDependencies: + typescript: 5.8.2 + + '@solana/offchain-messages@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-data-structures': 5.5.1(typescript@5.8.2) + '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/nominal-types': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.2) @@ -9832,6 +10223,22 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/options@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-data-structures': 5.5.1(typescript@5.8.2) + '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/plugin-core@5.5.1(typescript@5.8.2)': + optionalDependencies: + typescript: 5.8.2 + '@solana/programs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9840,10 +10247,23 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/programs@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/promises@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 + '@solana/promises@5.5.1(typescript@5.8.2)': + optionalDependencies: + typescript: 5.8.2 + '@solana/rpc-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9861,20 +10281,53 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/rpc-api@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-parsed-types': 5.5.1(typescript@5.8.2) + '@solana/rpc-spec': 5.5.1(typescript@5.8.2) + '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/rpc-parsed-types@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 + '@solana/rpc-parsed-types@5.5.1(typescript@5.8.2)': + optionalDependencies: + typescript: 5.8.2 + '@solana/rpc-spec-types@2.3.0(typescript@5.8.2)': dependencies: typescript: 5.8.2 + '@solana/rpc-spec-types@5.5.1(typescript@5.8.2)': + optionalDependencies: + typescript: 5.8.2 + '@solana/rpc-spec@2.3.0(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) '@solana/rpc-spec-types': 2.3.0(typescript@5.8.2) typescript: 5.8.2 + '@solana/rpc-spec@5.5.1(typescript@5.8.2)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + '@solana/rpc-subscriptions-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9888,6 +10341,20 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/rpc-subscriptions-api@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.8.2) + '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) @@ -9897,6 +10364,28 @@ snapshots: typescript: 5.8.2 ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 2.3.0(typescript@5.8.2) + '@solana/functional': 2.3.0(typescript@5.8.2) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.8.2) + '@solana/subscribable': 2.3.0(typescript@5.8.2) + typescript: 5.8.2 + ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + '@solana/rpc-subscriptions-channel-websocket@5.5.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/functional': 5.5.1(typescript@5.8.2) + '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.8.2) + '@solana/subscribable': 5.5.1(typescript@5.8.2) + ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@solana/rpc-subscriptions-spec@2.3.0(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) @@ -9905,6 +10394,15 @@ snapshots: '@solana/subscribable': 2.3.0(typescript@5.8.2) typescript: 5.8.2 + '@solana/rpc-subscriptions-spec@5.5.1(typescript@5.8.2)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/promises': 5.5.1(typescript@5.8.2) + '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) + '@solana/subscribable': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) @@ -9923,6 +10421,44 @@ snapshots: - fastestsmallesttextencoderdecoder - ws + '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 2.3.0(typescript@5.8.2) + '@solana/fast-stable-stringify': 2.3.0(typescript@5.8.2) + '@solana/functional': 2.3.0(typescript@5.8.2) + '@solana/promises': 2.3.0(typescript@5.8.2) + '@solana/rpc-spec-types': 2.3.0(typescript@5.8.2) + '@solana/rpc-subscriptions-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.8.2) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/subscribable': 2.3.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/rpc-subscriptions@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/fast-stable-stringify': 5.5.1(typescript@5.8.2) + '@solana/functional': 5.5.1(typescript@5.8.2) + '@solana/promises': 5.5.1(typescript@5.8.2) + '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) + '@solana/rpc-subscriptions-api': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-subscriptions-channel-websocket': 5.5.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.8.2) + '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/subscribable': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - bufferutil + - fastestsmallesttextencoderdecoder + - utf-8-validate + '@solana/rpc-transformers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) @@ -9934,6 +10470,18 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/rpc-transformers@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/functional': 5.5.1(typescript@5.8.2) + '@solana/nominal-types': 5.5.1(typescript@5.8.2) + '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/rpc-transport-http@2.3.0(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) @@ -9942,6 +10490,15 @@ snapshots: typescript: 5.8.2 undici-types: 7.16.0 + '@solana/rpc-transport-http@5.5.1(typescript@5.8.2)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/rpc-spec': 5.5.1(typescript@5.8.2) + '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) + undici-types: 7.22.0 + optionalDependencies: + typescript: 5.8.2 + '@solana/rpc-types@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9954,6 +10511,19 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/rpc-types@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/nominal-types': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/rpc@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) @@ -9969,6 +10539,22 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/rpc@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/fast-stable-stringify': 5.5.1(typescript@5.8.2) + '@solana/functional': 5.5.1(typescript@5.8.2) + '@solana/rpc-api': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-spec': 5.5.1(typescript@5.8.2) + '@solana/rpc-spec-types': 5.5.1(typescript@5.8.2) + '@solana/rpc-transformers': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-transport-http': 5.5.1(typescript@5.8.2) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/signers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -9983,6 +10569,22 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/signers@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/instructions': 5.5.1(typescript@5.8.2) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/nominal-types': 5.5.1(typescript@5.8.2) + '@solana/offchain-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -10019,6 +10621,12 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.8.2) typescript: 5.8.2 + '@solana/subscribable@5.5.1(typescript@5.8.2)': + dependencies: + '@solana/errors': 5.5.1(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + '@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -10029,6 +10637,17 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/accounts': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -10046,6 +10665,42 @@ snapshots: - fastestsmallesttextencoderdecoder - ws + '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 2.3.0(typescript@5.8.2) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/promises': 2.3.0(typescript@5.8.2) + '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/transaction-confirmation@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/promises': 5.5.1(typescript@5.8.2) + '@solana/rpc': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transactions': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - bufferutil + - fastestsmallesttextencoderdecoder + - utf-8-validate + '@solana/transaction-messages@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -10061,6 +10716,22 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/transaction-messages@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-data-structures': 5.5.1(typescript@5.8.2) + '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/functional': 5.5.1(typescript@5.8.2) + '@solana/instructions': 5.5.1(typescript@5.8.2) + '@solana/nominal-types': 5.5.1(typescript@5.8.2) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/transactions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -10079,6 +10750,25 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/transactions@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)': + dependencies: + '@solana/addresses': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/codecs-core': 5.5.1(typescript@5.8.2) + '@solana/codecs-data-structures': 5.5.1(typescript@5.8.2) + '@solana/codecs-numbers': 5.5.1(typescript@5.8.2) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/errors': 5.5.1(typescript@5.8.2) + '@solana/functional': 5.5.1(typescript@5.8.2) + '@solana/instructions': 5.5.1(typescript@5.8.2) + '@solana/keys': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/nominal-types': 5.5.1(typescript@5.8.2) + '@solana/rpc-types': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + '@solana/transaction-messages': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/wallet-standard-features@1.3.0': dependencies: '@wallet-standard/base': 1.1.0 @@ -10384,9 +11074,9 @@ snapshots: '@uniswap/token-lists@1.0.0-beta.33': {} - '@vaultsfyi/sdk@2.1.9(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@vaultsfyi/sdk@2.1.9(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - x402-fetch: 0.7.0(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + x402-fetch: 0.7.0(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10421,9 +11111,9 @@ snapshots: - utf-8-validate - ws - '@vaultsfyi/sdk@2.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@vaultsfyi/sdk@2.1.9(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - x402-fetch: 0.7.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) + x402-fetch: 0.7.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10502,16 +11192,16 @@ snapshots: - utf-8-validate - zod - '@wagmi/connectors@5.10.0(@wagmi/core@2.21.0(typescript@5.8.2)(use-sync-external-store@1.4.0)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56)': + '@wagmi/connectors@5.10.0(@wagmi/core@2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56)': dependencies: - '@base-org/account': 1.1.1(bufferutil@4.0.9)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(zod@3.25.56) - '@coinbase/wallet-sdk': 4.3.6(bufferutil@4.0.9)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(zod@3.25.56) + '@base-org/account': 1.1.1(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.56) + '@coinbase/wallet-sdk': 4.3.6(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.56) '@gemini-wallet/core': 0.2.0(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@wagmi/core': 2.21.0(typescript@5.8.2)(use-sync-external-store@1.4.0)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) - '@walletconnect/ethereum-provider': 2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@wagmi/core': 2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@walletconnect/ethereum-provider': 2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) optionalDependencies: @@ -10561,13 +11251,14 @@ snapshots: - react - use-sync-external-store - '@wagmi/core@2.21.0(typescript@5.8.2)(use-sync-external-store@1.4.0)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': + '@wagmi/core@2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.8.2) viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) zustand: 5.0.0(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) optionalDependencies: + '@tanstack/query-core': 5.89.0 typescript: 5.8.2 transitivePeerDependencies: - '@types/react' @@ -10718,47 +11409,6 @@ snapshots: - utf-8-validate - zod - '@walletconnect/ethereum-provider@2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': - dependencies: - '@reown/appkit': 1.7.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) - '@walletconnect/jsonrpc-provider': 1.0.14 - '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@walletconnect/types': 2.21.1 - '@walletconnect/universal-provider': 2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - encoding - - ioredis - - react - - typescript - - uploadthing - - utf-8-validate - - zod - '@walletconnect/events@1.0.1': dependencies: keyvaluestorage-interface: 1.0.0 @@ -11167,41 +11817,43 @@ snapshots: dependencies: zod: 3.25.56 - '@x402/evm@2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@x402/core@2.4.0': dependencies: - '@x402/core': 2.0.0 - viem: 2.43.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + zod: 3.25.56 + + '@x402/evm@2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@x402/core': 2.4.0 + viem: 2.46.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) zod: 3.25.56 transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - '@x402/fetch@2.0.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + '@x402/fetch@2.2.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: - '@x402/core': 2.0.0 - viem: 2.43.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + '@x402/core': 2.4.0 + viem: 2.46.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) zod: 3.25.56 transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - '@x402/svm@2.0.0(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@x402/svm@2.2.0(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)': dependencies: - '@scure/base': 1.2.6 - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.8.2)) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.8.2)) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@x402/core': 2.0.0 - zod: 3.25.56 + '@solana-program/compute-budget': 0.11.0(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)) + '@solana-program/token': 0.9.0(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10)) + '@solana-program/token-2022': 0.6.1(@solana/kit@5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) + '@solana/kit': 5.5.1(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@x402/core': 2.4.0 transitivePeerDependencies: - '@solana/sysvars' + - bufferutil - fastestsmallesttextencoderdecoder - typescript - - ws + - utf-8-validate '@xmtp/agent-sdk@1.1.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': dependencies: @@ -11419,7 +12071,7 @@ snapshots: aes-js@4.0.0-beta.5: {} - agent0-sdk@1.4.2(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2): + agent0-sdk@1.5.3(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2): dependencies: graphql-request: 6.1.0(encoding@0.1.13)(graphql@16.11.0) ipfs-http-client: 60.0.1(encoding@0.1.13) @@ -11858,6 +12510,8 @@ snapshots: chalk@5.4.1: {} + chalk@5.6.2: {} + char-regex@1.0.2: {} chardet@0.7.0: {} @@ -11971,6 +12625,8 @@ snapshots: commander@14.0.1: {} + commander@14.0.2: {} + commander@2.20.3: {} commander@5.1.0: {} @@ -12169,10 +12825,6 @@ snapshots: dependencies: valtio: 1.13.2(react@18.3.1) - derive-valtio@0.1.0(valtio@1.13.2): - dependencies: - valtio: 1.13.2 - destr@2.0.5: {} destroy@1.2.0: {} @@ -14155,7 +14807,18 @@ snapshots: optionalDependencies: openai: 4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) - langsmith@0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)): + langsmith@0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)): + dependencies: + '@types/uuid': 10.0.0 + commander: 10.0.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.7.1 + uuid: 10.0.0 + optionalDependencies: + openai: 4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + + langsmith@0.2.15(openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)): dependencies: '@types/uuid': 10.0.0 commander: 10.0.1 @@ -14164,7 +14827,7 @@ snapshots: semver: 7.7.1 uuid: 10.0.0 optionalDependencies: - openai: 4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56) + openai: 4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56) leven@3.1.0: {} @@ -14619,7 +15282,7 @@ snapshots: transitivePeerDependencies: - encoding - openai@4.89.1(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56): + openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2): dependencies: '@types/node': 18.19.83 '@types/node-fetch': 2.6.12 @@ -14629,7 +15292,22 @@ snapshots: formdata-node: 4.4.1 node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: - ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + zod: 3.24.2 + transitivePeerDependencies: + - encoding + + openai@4.89.1(encoding@0.1.13)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56): + dependencies: + '@types/node': 18.19.83 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + optionalDependencies: + ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 3.25.56 transitivePeerDependencies: - encoding @@ -14700,7 +15378,7 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - ox@0.10.5(typescript@5.8.2)(zod@3.25.56): + ox@0.12.4(typescript@5.8.2)(zod@3.25.56): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -15952,6 +16630,8 @@ snapshots: undici-types@7.16.0: {} + undici-types@7.22.0: {} + undici@5.29.0: dependencies: '@fastify/busboy': 2.1.1 @@ -16042,12 +16722,6 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - valtio@1.13.2: - dependencies: - derive-valtio: 0.1.0(valtio@1.13.2) - proxy-compare: 2.6.0 - use-sync-external-store: 1.2.0(react@18.3.1) - valtio@1.13.2(react@18.3.1): dependencies: derive-valtio: 0.1.0(valtio@1.13.2(react@18.3.1)) @@ -16196,7 +16870,7 @@ snapshots: - utf-8-validate - zod - viem@2.43.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56): + viem@2.46.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -16204,7 +16878,7 @@ snapshots: '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@5.8.2)(zod@3.25.56) isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.10.5(typescript@5.8.2)(zod@3.25.56) + ox: 0.12.4(typescript@5.8.2)(zod@3.25.56) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.2 @@ -16252,10 +16926,12 @@ snapshots: - utf-8-validate - zod - wagmi@2.17.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56): + wagmi@2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56): dependencies: - '@wagmi/connectors': 5.10.0(@wagmi/core@2.21.0(typescript@5.8.2)(use-sync-external-store@1.4.0)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56) - '@wagmi/core': 2.21.0(typescript@5.8.2)(use-sync-external-store@1.4.0)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + '@tanstack/react-query': 5.89.0(react@18.3.1) + '@wagmi/connectors': 5.10.0(@wagmi/core@2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56) + '@wagmi/core': 2.21.0(@tanstack/query-core@5.89.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)) + react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) optionalDependencies: @@ -16422,49 +17098,15 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 - x402-fetch@0.7.0(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): - dependencies: - viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - x402: 0.7.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - zod: 3.25.56 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@solana/sysvars' - - '@tanstack/query-core' - - '@tanstack/react-query' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - encoding - - fastestsmallesttextencoderdecoder - - immer - - ioredis - - react - - supports-color - - typescript - - uploadthing - - utf-8-validate - - ws + ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - x402-fetch@0.7.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10): + x402-fetch@0.7.0(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - x402: 0.7.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10) + x402: 0.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) zod: 3.25.56 transitivePeerDependencies: - '@azure/app-configuration' @@ -16500,16 +17142,10 @@ snapshots: - utf-8-validate - ws - x402@0.6.1(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + x402-fetch@0.7.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - '@scure/base': 1.2.6 - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.8.2)) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.8.2)) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - wagmi: 2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56) + x402: 0.7.2(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) zod: 3.25.56 transitivePeerDependencies: - '@azure/app-configuration' @@ -16545,16 +17181,16 @@ snapshots: - utf-8-validate - ws - x402@0.6.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10): + x402@0.6.1(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: '@scure/base': 1.2.6 - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.8.2)) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.8.2)) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - wagmi: 2.17.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56) + wagmi: 2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56) zod: 3.25.56 transitivePeerDependencies: - '@azure/app-configuration' @@ -16590,20 +17226,20 @@ snapshots: - utf-8-validate - ws - x402@0.7.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + x402@0.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: '@scure/base': 1.2.6 - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.8.2)) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.8.2)) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/wallet-standard-features': 1.3.0 '@wallet-standard/app': 1.1.0 '@wallet-standard/base': 1.1.0 '@wallet-standard/features': 1.1.0 viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - wagmi: 2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56) + wagmi: 2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56) zod: 3.25.56 transitivePeerDependencies: - '@azure/app-configuration' @@ -16639,12 +17275,12 @@ snapshots: - utf-8-validate - ws - x402@0.7.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10): + x402@0.7.2(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: '@scure/base': 1.2.6 - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.8.2)) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.8.2)) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))) '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/wallet-standard-features': 1.3.0 @@ -16652,7 +17288,7 @@ snapshots: '@wallet-standard/base': 1.1.0 '@wallet-standard/features': 1.1.0 viem: 2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) - wagmi: 2.17.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56))(zod@3.25.56) + wagmi: 2.17.0(@tanstack/query-core@5.89.0)(@tanstack/react-query@5.89.0(react@18.3.1))(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.38.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.25.56) zod: 3.25.56 transitivePeerDependencies: - '@azure/app-configuration' @@ -16763,7 +17399,3 @@ snapshots: optionalDependencies: react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - - zustand@5.0.3(use-sync-external-store@1.4.0): - optionalDependencies: - use-sync-external-store: 1.4.0(react@18.3.1) From 378d21f5d75944446e623b76624837f2dbea0bc9 Mon Sep 17 00:00:00 2001 From: Philippe d'Argent Date: Tue, 24 Feb 2026 21:55:42 +0900 Subject: [PATCH 4/5] use agent0 sdk for onchain txs --- typescript/.changeset/upset-parrots-visit.md | 5 + .../src/action-providers/erc8004/abi.ts | 1327 ----------------- .../src/action-providers/erc8004/constants.ts | 59 +- .../erc8004IdentityActionProvider.test.ts | 132 +- .../erc8004/erc8004IdentityActionProvider.ts | 193 +-- .../erc8004ReputationActionProvider.test.ts | 186 ++- .../erc8004ReputationActionProvider.ts | 154 +- .../erc8004/identitySchemas.ts | 8 +- .../src/action-providers/erc8004/index.ts | 29 +- .../erc8004/reputationSchemas.ts | 6 +- .../src/action-providers/erc8004/utils.ts | 228 ++- .../src/action-providers/erc8004/utils_id.ts | 124 -- .../src/action-providers/erc8004/utils_rep.ts | 184 --- .../src/wallet-providers/evmWalletProvider.ts | 51 + 14 files changed, 529 insertions(+), 2157 deletions(-) create mode 100644 typescript/.changeset/upset-parrots-visit.md delete mode 100644 typescript/agentkit/src/action-providers/erc8004/abi.ts delete mode 100644 typescript/agentkit/src/action-providers/erc8004/utils_id.ts delete mode 100644 typescript/agentkit/src/action-providers/erc8004/utils_rep.ts diff --git a/typescript/.changeset/upset-parrots-visit.md b/typescript/.changeset/upset-parrots-visit.md new file mode 100644 index 000000000..f22a09db6 --- /dev/null +++ b/typescript/.changeset/upset-parrots-visit.md @@ -0,0 +1,5 @@ +--- +"@coinbase/agentkit": patch +--- + +Added erc8004 action providers diff --git a/typescript/agentkit/src/action-providers/erc8004/abi.ts b/typescript/agentkit/src/action-providers/erc8004/abi.ts deleted file mode 100644 index 716dd0d80..000000000 --- a/typescript/agentkit/src/action-providers/erc8004/abi.ts +++ /dev/null @@ -1,1327 +0,0 @@ -export const IDENTITY_REGISTRY_ABI = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "AddressEmptyCode", - type: "error", - }, - { - inputs: [], - name: "ECDSAInvalidSignature", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "length", - type: "uint256", - }, - ], - name: "ECDSAInvalidSignatureLength", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "ECDSAInvalidSignatureS", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "ERC1967InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "ERC1967NonPayable", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "ERC721IncorrectOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "ERC721InsufficientApproval", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "approver", - type: "address", - }, - ], - name: "ERC721InvalidApprover", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "ERC721InvalidOperator", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "ERC721InvalidOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "receiver", - type: "address", - }, - ], - name: "ERC721InvalidReceiver", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "ERC721InvalidSender", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "ERC721NonexistentToken", - type: "error", - }, - { - inputs: [], - name: "FailedCall", - type: "error", - }, - { - inputs: [], - name: "InvalidInitialization", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "OwnableInvalidOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "OwnableUnauthorizedAccount", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "approved", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "_fromTokenId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_toTokenId", - type: "uint256", - }, - ], - name: "BatchMetadataUpdate", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "EIP712DomainChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - { - indexed: true, - internalType: "string", - name: "indexedMetadataKey", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "metadataKey", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "metadataValue", - type: "bytes", - }, - ], - name: "MetadataSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "_tokenId", - type: "uint256", - }, - ], - name: "MetadataUpdate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "agentURI", - type: "string", - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "Registered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "newURI", - type: "string", - }, - { - indexed: true, - internalType: "address", - name: "updatedBy", - type: "address", - }, - ], - name: "URIUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "UPGRADE_INTERFACE_VERSION", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "eip712Domain", - outputs: [ - { - internalType: "bytes1", - name: "fields", - type: "bytes1", - }, - { - internalType: "string", - name: "name", - type: "string", - }, - { - internalType: "string", - name: "version", - type: "string", - }, - { - internalType: "uint256", - name: "chainId", - type: "uint256", - }, - { - internalType: "address", - name: "verifyingContract", - type: "address", - }, - { - internalType: "bytes32", - name: "salt", - type: "bytes32", - }, - { - internalType: "uint256[]", - name: "extensions", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - ], - name: "getAgentWallet", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "getApproved", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - { - internalType: "string", - name: "metadataKey", - type: "string", - }, - ], - name: "getMetadata", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getVersion", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "ownerOf", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "register", - outputs: [ - { - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "agentURI", - type: "string", - }, - { - components: [ - { - internalType: "string", - name: "metadataKey", - type: "string", - }, - { - internalType: "bytes", - name: "metadataValue", - type: "bytes", - }, - ], - internalType: "struct IdentityRegistryUpgradeable.MetadataEntry[]", - name: "metadata", - type: "tuple[]", - }, - ], - name: "register", - outputs: [ - { - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "agentURI", - type: "string", - }, - ], - name: "register", - outputs: [ - { - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - { - internalType: "string", - name: "newURI", - type: "string", - }, - ], - name: "setAgentURI", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - { - internalType: "address", - name: "newWallet", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "setAgentWallet", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - { - internalType: "string", - name: "metadataKey", - type: "string", - }, - { - internalType: "bytes", - name: "metadataValue", - type: "bytes", - }, - ], - name: "setMetadata", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "tokenURI", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "agentId", - type: "uint256", - }, - ], - name: "unsetAgentWallet", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, -]; -export const REPUTATION_REGISTRY_ABI = [ - { inputs: [], stateMutability: "nonpayable", type: "constructor" }, - { - inputs: [{ internalType: "address", name: "target", type: "address" }], - name: "AddressEmptyCode", - type: "error", - }, - { - inputs: [{ internalType: "address", name: "implementation", type: "address" }], - name: "ERC1967InvalidImplementation", - type: "error", - }, - { inputs: [], name: "ERC1967NonPayable", type: "error" }, - { inputs: [], name: "FailedCall", type: "error" }, - { inputs: [], name: "InvalidInitialization", type: "error" }, - { inputs: [], name: "NotInitializing", type: "error" }, - { - inputs: [{ internalType: "address", name: "owner", type: "address" }], - name: "OwnableInvalidOwner", - type: "error", - }, - { - inputs: [{ internalType: "address", name: "account", type: "address" }], - name: "OwnableUnauthorizedAccount", - type: "error", - }, - { inputs: [], name: "UUPSUnauthorizedCallContext", type: "error" }, - { - inputs: [{ internalType: "bytes32", name: "slot", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { indexed: true, internalType: "uint256", name: "agentId", type: "uint256" }, - { indexed: true, internalType: "address", name: "clientAddress", type: "address" }, - { indexed: true, internalType: "uint64", name: "feedbackIndex", type: "uint64" }, - ], - name: "FeedbackRevoked", - type: "event", - }, - { - anonymous: false, - inputs: [{ indexed: false, internalType: "uint64", name: "version", type: "uint64" }], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { indexed: true, internalType: "uint256", name: "agentId", type: "uint256" }, - { indexed: true, internalType: "address", name: "clientAddress", type: "address" }, - { indexed: false, internalType: "uint64", name: "feedbackIndex", type: "uint64" }, - { indexed: false, internalType: "int128", name: "value", type: "int128" }, - { indexed: false, internalType: "uint8", name: "valueDecimals", type: "uint8" }, - { indexed: true, internalType: "string", name: "indexedTag1", type: "string" }, - { indexed: false, internalType: "string", name: "tag1", type: "string" }, - { indexed: false, internalType: "string", name: "tag2", type: "string" }, - { indexed: false, internalType: "string", name: "endpoint", type: "string" }, - { indexed: false, internalType: "string", name: "feedbackURI", type: "string" }, - { indexed: false, internalType: "bytes32", name: "feedbackHash", type: "bytes32" }, - ], - name: "NewFeedback", - type: "event", - }, - { - anonymous: false, - inputs: [ - { indexed: true, internalType: "address", name: "previousOwner", type: "address" }, - { indexed: true, internalType: "address", name: "newOwner", type: "address" }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { indexed: true, internalType: "uint256", name: "agentId", type: "uint256" }, - { indexed: true, internalType: "address", name: "clientAddress", type: "address" }, - { indexed: false, internalType: "uint64", name: "feedbackIndex", type: "uint64" }, - { indexed: true, internalType: "address", name: "responder", type: "address" }, - { indexed: false, internalType: "string", name: "responseURI", type: "string" }, - { indexed: false, internalType: "bytes32", name: "responseHash", type: "bytes32" }, - ], - name: "ResponseAppended", - type: "event", - }, - { - anonymous: false, - inputs: [{ indexed: true, internalType: "address", name: "implementation", type: "address" }], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "UPGRADE_INTERFACE_VERSION", - outputs: [{ internalType: "string", name: "", type: "string" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { internalType: "uint256", name: "agentId", type: "uint256" }, - { internalType: "address", name: "clientAddress", type: "address" }, - { internalType: "uint64", name: "feedbackIndex", type: "uint64" }, - { internalType: "string", name: "responseURI", type: "string" }, - { internalType: "bytes32", name: "responseHash", type: "bytes32" }, - ], - name: "appendResponse", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [{ internalType: "uint256", name: "agentId", type: "uint256" }], - name: "getClients", - outputs: [{ internalType: "address[]", name: "", type: "address[]" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getIdentityRegistry", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { internalType: "uint256", name: "agentId", type: "uint256" }, - { internalType: "address", name: "clientAddress", type: "address" }, - ], - name: "getLastIndex", - outputs: [{ internalType: "uint64", name: "", type: "uint64" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { internalType: "uint256", name: "agentId", type: "uint256" }, - { internalType: "address", name: "clientAddress", type: "address" }, - { internalType: "uint64", name: "feedbackIndex", type: "uint64" }, - { internalType: "address[]", name: "responders", type: "address[]" }, - ], - name: "getResponseCount", - outputs: [{ internalType: "uint64", name: "count", type: "uint64" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { internalType: "uint256", name: "agentId", type: "uint256" }, - { internalType: "address[]", name: "clientAddresses", type: "address[]" }, - { internalType: "string", name: "tag1", type: "string" }, - { internalType: "string", name: "tag2", type: "string" }, - ], - name: "getSummary", - outputs: [ - { internalType: "uint64", name: "count", type: "uint64" }, - { internalType: "int128", name: "summaryValue", type: "int128" }, - { internalType: "uint8", name: "summaryValueDecimals", type: "uint8" }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getVersion", - outputs: [{ internalType: "string", name: "", type: "string" }], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { internalType: "uint256", name: "agentId", type: "uint256" }, - { internalType: "int128", name: "value", type: "int128" }, - { internalType: "uint8", name: "valueDecimals", type: "uint8" }, - { internalType: "string", name: "tag1", type: "string" }, - { internalType: "string", name: "tag2", type: "string" }, - { internalType: "string", name: "endpoint", type: "string" }, - { internalType: "string", name: "feedbackURI", type: "string" }, - { internalType: "bytes32", name: "feedbackHash", type: "bytes32" }, - ], - name: "giveFeedback", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [{ internalType: "address", name: "identityRegistry_", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { internalType: "uint256", name: "agentId", type: "uint256" }, - { internalType: "address[]", name: "clientAddresses", type: "address[]" }, - { internalType: "string", name: "tag1", type: "string" }, - { internalType: "string", name: "tag2", type: "string" }, - { internalType: "bool", name: "includeRevoked", type: "bool" }, - ], - name: "readAllFeedback", - outputs: [ - { internalType: "address[]", name: "clients", type: "address[]" }, - { internalType: "uint64[]", name: "feedbackIndexes", type: "uint64[]" }, - { internalType: "int128[]", name: "values", type: "int128[]" }, - { internalType: "uint8[]", name: "valueDecimals", type: "uint8[]" }, - { internalType: "string[]", name: "tag1s", type: "string[]" }, - { internalType: "string[]", name: "tag2s", type: "string[]" }, - { internalType: "bool[]", name: "revokedStatuses", type: "bool[]" }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { internalType: "uint256", name: "agentId", type: "uint256" }, - { internalType: "address", name: "clientAddress", type: "address" }, - { internalType: "uint64", name: "feedbackIndex", type: "uint64" }, - ], - name: "readFeedback", - outputs: [ - { internalType: "int128", name: "value", type: "int128" }, - { internalType: "uint8", name: "valueDecimals", type: "uint8" }, - { internalType: "string", name: "tag1", type: "string" }, - { internalType: "string", name: "tag2", type: "string" }, - { internalType: "bool", name: "isRevoked", type: "bool" }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { internalType: "uint256", name: "agentId", type: "uint256" }, - { internalType: "uint64", name: "feedbackIndex", type: "uint64" }, - ], - name: "revokeFeedback", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [{ internalType: "address", name: "newOwner", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { internalType: "address", name: "newImplementation", type: "address" }, - { internalType: "bytes", name: "data", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, -]; diff --git a/typescript/agentkit/src/action-providers/erc8004/constants.ts b/typescript/agentkit/src/action-providers/erc8004/constants.ts index 852de9465..7531f79fe 100644 --- a/typescript/agentkit/src/action-providers/erc8004/constants.ts +++ b/typescript/agentkit/src/action-providers/erc8004/constants.ts @@ -1,40 +1,12 @@ -import { Hex } from "viem"; import { NETWORK_ID_TO_CHAIN_ID, Network } from "../../network"; -// Chain IDs for supported networks -export const SUPPORTED_CHAIN_IDS = { - ETHEREUM_MAINNET: 1, - ETHEREUM_SEPOLIA: 11155111, - BASE_MAINNET: 8453, - BASE_SEPOLIA: 84532, -} as const; - -// Registry addresses by chain ID -export const REGISTRY_ADDRESSES: Record = { - [SUPPORTED_CHAIN_IDS.ETHEREUM_MAINNET]: { - identity: "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432", - reputation: "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63", - }, - [SUPPORTED_CHAIN_IDS.ETHEREUM_SEPOLIA]: { - identity: "0x8004A818BFB912233c491871b3d84c89A494BD9e", - reputation: "0x8004B663056A597Dffe9eCcC1965A193B7388713", - }, - [SUPPORTED_CHAIN_IDS.BASE_MAINNET]: { - identity: "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432", - reputation: "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63", - }, - [SUPPORTED_CHAIN_IDS.BASE_SEPOLIA]: { - identity: "0x8004A818BFB912233c491871b3d84c89A494BD9e", - reputation: "0x8004B663056A597Dffe9eCcC1965A193B7388713", - }, -}; - -// Supported network IDs for ERC-8004 +// Supported network IDs for ERC-8004 - must match agent0 SDK (contracts.ts DEFAULT_REGISTRIES) export const SUPPORTED_NETWORK_IDS = [ - "ethereum-mainnet", - "ethereum-sepolia", - "base-mainnet", - "base-sepolia", + "ethereum-mainnet", // 1 + "ethereum-sepolia", // 11155111 + "base-mainnet", // 8453 + "base-sepolia", // 84532 + "polygon-mainnet", // 137 ] as const; export type SupportedNetworkId = (typeof SUPPORTED_NETWORK_IDS)[number]; @@ -62,25 +34,6 @@ export function getChainIdFromNetwork(network: Network): number { return parseInt(chainIdStr, 10); } -/** - * Gets the registry address for a specific registry type and chain - * - * @param registry - The registry type ("identity" or "reputation") - * @param chainId - The chain ID - * @returns The registry address - * @throws Error if chain is not supported - */ -export function getRegistryAddress(registry: "identity" | "reputation", chainId: number): Hex { - const addresses = REGISTRY_ADDRESSES[chainId]; - if (!addresses) { - throw new Error( - `Chain ID ${chainId} is not supported for ERC-8004. Supported chain IDs: ${Object.keys(REGISTRY_ADDRESSES).join(", ")}`, - ); - } - - return addresses[registry]; -} - /** * Checks if a network is supported for ERC-8004 * diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts index 450a5de3a..1a316737a 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts @@ -11,6 +11,51 @@ import { import { EvmWalletProvider } from "../../wallet-providers"; import { getAgent0SDK } from "./utils"; +// Configurable reject reason for updateAgentMetadata Agent mock (set in tests before calling) +let updateAgentMockRejectReason: string | null = null; + +// Mock agent0-sdk (ESM-only) before loading the identity provider +jest.mock("agent0-sdk", () => { + /** Mock Agent class simulating agent0-sdk Agent behavior for tests. */ + const MockAgent = class { + updateInfo = jest.fn(); + getRegistrationFile = jest.fn(() => this.regFile); + registerIPFS = jest.fn().mockImplementation(() => { + if (updateAgentMockRejectReason) { + return Promise.reject(new Error(updateAgentMockRejectReason)); + } + return Promise.resolve({ + hash: "0xhash", + waitMined: () => Promise.resolve({ result: { agentURI: "ipfs://Qm" } }), + }); + }); + setAgentURI = jest.fn().mockImplementation(() => { + if (updateAgentMockRejectReason) { + return Promise.reject(new Error(updateAgentMockRejectReason)); + } + return Promise.resolve({ + hash: "0xhash", + waitMined: () => Promise.resolve({}), + }); + }); + + /** + * Creates a new MockAgent instance. + * + * @param _sdk - The SDK instance (unused). + * @param regFile - The registration file object. + */ + constructor( + _sdk: unknown, + private regFile: Record, + ) {} + }; + return { + Agent: MockAgent, + IDENTITY_REGISTRY_ABI: [], + }; +}); + const MOCK_AGENT_ID = "123"; const MOCK_ADDRESS = "0x1234567890123456789012345678901234567890"; const _MOCK_URI = "ipfs://QmTest123456789"; @@ -238,6 +283,7 @@ describe("Identity Schema Validation", () => { describe("Register Agent Action", () => { let mockWallet: jest.Mocked; + const { mockAgent, mockSdk } = createRegisterAgentMocks(); beforeEach(() => { mockWallet = { @@ -250,6 +296,11 @@ describe("Register Agent Action", () => { }), getAddress: jest.fn().mockReturnValue(MOCK_ADDRESS), } as unknown as jest.Mocked; + + mockGetAgent0SDK.mockImplementation((_w, jwt) => { + if (!jwt) throw new Error("PINATA_JWT is required"); + return mockSdk as never; + }); }); it("should fail without Pinata JWT", async () => { @@ -261,18 +312,25 @@ describe("Register Agent Action", () => { }); it("should handle error when registration fails", async () => { + mockAgent.registerIPFS.mockRejectedValueOnce(new Error("Transaction failed")); + const actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); - mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); const response = await actionProvider.registerAgent(mockWallet, {}); - expect(mockWallet.sendTransaction).toHaveBeenCalled(); + expect(mockSdk.createAgent).toHaveBeenCalled(); expect(response).toContain("Error during registration"); }); }); describe("Update Agent Metadata Action", () => { let mockWallet: jest.Mocked; + const mockUpdateSdk = { + loadAgent: jest.fn().mockRejectedValue(new Error("loadAgent fails for data URIs")), + identityRegistryAddress: jest + .fn() + .mockReturnValue("0x1234567890123456789012345678901234567890"), + }; beforeEach(() => { mockWallet = { @@ -285,6 +343,12 @@ describe("Update Agent Metadata Action", () => { networkId: "base-sepolia", }), } as unknown as jest.Mocked; + + updateAgentMockRejectReason = null; + mockGetAgent0SDK.mockImplementation((_w, jwt) => { + if (!jwt) throw new Error("PINATA_JWT is required"); + return mockUpdateSdk as never; + }); }); it("should fail without Pinata JWT", async () => { @@ -301,9 +365,11 @@ describe("Update Agent Metadata Action", () => { }); it("should fail when agent has no URI set", async () => { - const actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); + updateAgentMockRejectReason = "Agent has no registration URI set"; mockWallet.readContract.mockResolvedValue(null); + const actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); + const args = { agentId: MOCK_AGENT_ID, description: "New description", @@ -315,9 +381,10 @@ describe("Update Agent Metadata Action", () => { }); it("should handle error when updating metadata fails", async () => { - const actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); mockWallet.readContract.mockRejectedValue(new Error("Read failed")); + const actionProvider = erc8004IdentityActionProvider({ pinataJwt: "test-jwt" }); + const args = { agentId: MOCK_AGENT_ID, description: "New description", @@ -330,16 +397,57 @@ describe("Update Agent Metadata Action", () => { }); // Mock the utils module (avoid loading real utils which imports the ESM-only agent0-sdk) -jest.mock("./utils", () => ({ - getAgent0SDK: jest.fn(), - uploadJsonToIPFS: jest.fn(), - uploadFileToIPFS: jest.fn(), - ipfsToHttpUrl: jest.fn((uri: string) => uri), - formatCAIP10Address: jest.fn(), -})); +jest.mock("./utils", () => { + const { Agent } = jest.requireMock("agent0-sdk"); + return { + getAgent0SDK: jest.fn(), + ipfsToHttpUrl: jest.fn((uri: string) => uri), + loadOrHydrateAgent: jest + .fn() + .mockImplementation( + async ( + sdk: { loadAgent: (id: string) => Promise }, + walletProvider: { readContract: (args: unknown) => Promise }, + fullAgentId: string, + ) => { + try { + return await sdk.loadAgent(fullAgentId); + } catch { + // fall through to readContract path + } + await walletProvider.readContract({}); + return new Agent(null, {}); + }, + ), + }; +}); const mockGetAgent0SDK = getAgent0SDK as jest.MockedFunction; +/** + * Creates mock agent and SDK objects for use in registerAgent tests. + * + * @returns An object containing mockAgent and mockSdk. + */ +function createRegisterAgentMocks() { + const mockHandle = { + hash: "0xhash", + waitMined: jest.fn().mockResolvedValue({ + result: { agentId: "84532:1", agentURI: "ipfs://Qm", name: "Agent" }, + }), + }; + const mockAgent = { + registerIPFS: jest.fn().mockResolvedValue(mockHandle), + registerHTTP: jest.fn().mockResolvedValue(mockHandle), + setAgentURI: jest.fn().mockResolvedValue(mockHandle), + getRegistrationFile: jest.fn(() => ({ name: "Agent", description: "" })), + }; + const mockSdk = { + createAgent: jest.fn().mockReturnValue(mockAgent), + }; + return { mockAgent, mockSdk }; +} + describe("Search Agents Action", () => { let mockWallet: jest.Mocked; let actionProvider: ERC8004IdentityActionProvider; @@ -550,7 +658,7 @@ describe("supportsNetwork", () => { expect( actionProvider.supportsNetwork({ protocolFamily: "evm", - networkId: "polygon-mainnet", + networkId: "arbitrum-mainnet", }), ).toBe(false); }); diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts index dce80778b..be3487e04 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts @@ -1,5 +1,4 @@ import { z } from "zod"; -import { encodeFunctionData, decodeEventLog } from "viem"; import { ActionProvider } from "../actionProvider"; import { Network } from "../../network"; import { CreateAction } from "../actionDecorator"; @@ -11,14 +10,14 @@ import { SearchAgentsSchema, GetAgentInfoSchema, } from "./identitySchemas"; -import { getChainIdFromNetwork, getRegistryAddress, isNetworkSupported } from "./constants"; -import { IDENTITY_REGISTRY_ABI } from "./abi"; -import { PinataConfig, ipfsToHttpUrl, getAgent0SDK } from "./utils"; +import { getChainIdFromNetwork, isNetworkSupported } from "./constants"; import { - uploadAgentRegistration, - fetchAgentRegistration, - updateAgentRegistration, -} from "./utils_id"; + PinataConfig, + getAgent0SDK, + jsonToDataUri, + ipfsToHttpUrl, + loadOrHydrateAgent, +} from "./utils"; /** * Configuration options for the ERC8004 Identity Action Provider @@ -47,7 +46,7 @@ export class ERC8004IdentityActionProvider extends ActionProvider, ): Promise { try { - if (!this.pinataConfig) { - return "Error: PINATA_JWT is required for IPFS uploads. Please configure the provider with a Pinata JWT."; - } - const network = walletProvider.getNetwork(); const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("identity", chainId); - - // Get current URI from on-chain - const currentUri = await walletProvider.readContract({ - address: registryAddress, - abi: IDENTITY_REGISTRY_ABI, - functionName: "tokenURI", - args: [BigInt(args.agentId)], - }); - - if (!currentUri) { - return `Error: Agent ${args.agentId} has no registration URI set. Use register_agent first.`; + const fullAgentId = `${chainId}:${args.agentId}`; + const sdk = getAgent0SDK(walletProvider, this.pinataConfig?.jwt); + + let newUri: string; + let txHash: string; + + const agent = await loadOrHydrateAgent(sdk, walletProvider, fullAgentId, args.agentId); + agent.updateInfo(args.name, args.description, args.image); + + if (this.pinataConfig) { + const handle = await agent.registerIPFS(); + const { result } = await handle.waitMined(); + newUri = result.agentURI ?? ""; + txHash = handle.hash; + } else { + const regFile = agent.getRegistrationFile(); + const dataUri = jsonToDataUri(regFile); + const handle = await agent.setAgentURI(dataUri); + await handle.waitMined(); + newUri = dataUri; + txHash = handle.hash; } - // Fetch existing registration from IPFS - const existingRegistration = await fetchAgentRegistration(currentUri as string); - - // Update with new values - const updatedRegistration = updateAgentRegistration(existingRegistration, { - name: args.name, - description: args.description, - image: args.image, - }); - - // Upload updated registration to IPFS - const ipfsUri = await uploadAgentRegistration(this.pinataConfig, { - agentId: parseInt(args.agentId, 10), - chainId, - registryAddress, - name: updatedRegistration.name, - description: updatedRegistration.description, - image: updatedRegistration.image, - }); - - // Set new URI onchain - const hash = await walletProvider.sendTransaction({ - to: registryAddress, - data: encodeFunctionData({ - abi: IDENTITY_REGISTRY_ABI, - functionName: "setAgentURI", - args: [BigInt(args.agentId), ipfsUri], - }), - }); - - await walletProvider.waitForTransactionReceipt(hash); - - const httpUrl = ipfsToHttpUrl(ipfsUri); - - // Build update summary const updates: string[] = []; if (args.name !== undefined) updates.push(`Name: ${args.name}`); if (args.description !== undefined) updates.push(`Description: ${args.description}`); if (args.image !== undefined) updates.push(`Image: ${args.image}`); - return `Agent metadata updated successfully!\n\nAgent ID: ${args.agentId}\nUpdated fields:\n${updates.length > 0 ? updates.map(u => `- ${u}`).join("\n") : "(no changes)"}\n\nNew Metadata URI: ${ipfsUri}\nHTTP Gateway: ${httpUrl}\nTransaction hash: ${hash}`; + const uriDisplay = newUri.startsWith("ipfs://") + ? `Metadata URI: ${newUri}\nHTTP Gateway: ${ipfsToHttpUrl(newUri)}` + : `Metadata URI: (onchain data URI)`; + + return `Agent metadata updated successfully!\n\nAgent ID: ${args.agentId}\nUpdated fields:\n${updates.length > 0 ? updates.map(u => `- ${u}`).join("\n") : "(no changes)"}\n\n${uriDisplay}\nTransaction hash: ${txHash}`; } catch (error) { return `Error updating agent metadata: ${error}`; } } /** - * Registers a new agent (register + upload + set URI). + * Registers a new agent (register + set URI). * All fields are optional - defaults to "Agent " for name, empty for others. * * @param walletProvider - The wallet provider to use @@ -145,11 +118,10 @@ Example: "update description to 'A trading assistant agent'" description: ` Registers a new agent on the ERC-8004 Identity Registry: 1. Mints an agent NFT -2. Generates and uploads registration JSON to IPFS -3. Sets the agent URI on-chain +2. Generates registration JSON and sets the agent URI All fields are optional! Proceed if not provided, metadata can be updated later with 'update_agent_metadata' action. -Never choose values optional fields unless explicitly asked to do so. +Never choose values for optional fields unless explicitly asked to do so. `, schema: RegisterAgentSchema, }) @@ -158,75 +130,34 @@ Never choose values optional fields unless explicitly asked to do so. args: z.infer, ): Promise { try { - if (!this.pinataConfig) { - return "Error: PINATA_JWT is required for registration. Please configure the provider with a Pinata JWT."; - } - console.log("args", args); - const network = walletProvider.getNetwork(); - const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("identity", chainId); - - // Register agent (mint NFT) - const registerHash = await walletProvider.sendTransaction({ - to: registryAddress, - data: encodeFunctionData({ - abi: IDENTITY_REGISTRY_ABI, - functionName: "register", - args: [], - }), - }); - - const receipt = await walletProvider.waitForTransactionReceipt(registerHash); - - // Parse the Registered event to get the agentId - let agentId: string | undefined; - for (const log of receipt.logs) { - try { - const decoded = decodeEventLog({ - abi: IDENTITY_REGISTRY_ABI, - data: log.data, - topics: log.topics, - }); - if (decoded.eventName === "Registered") { - agentId = (decoded.args as unknown as { agentId: bigint }).agentId.toString(); - break; - } - } catch { - // Not the event we're looking for - } - } + const sdk = getAgent0SDK(walletProvider, this.pinataConfig?.jwt); + + const agentName = args.name || "Agent"; + const agent = sdk.createAgent(agentName, args.description || "", args.image); - if (!agentId) { - return `Agent registered but could not parse agentId from event logs.\nRegister transaction: ${registerHash}\nPlease use get_agent_info or check the transaction on a block explorer to find your agentId.`; + if (this.pinataConfig) { + const handle = await agent.registerIPFS(); + const { result } = await handle.waitMined(); + + const agentId = result.agentId!; + const agentURI = result.agentURI ?? ""; + const httpUrl = ipfsToHttpUrl(agentURI); + + return `Agent registered successfully!\n\nAgent ID: ${agentId}\nName: ${result.name || agentName}\nDescription: ${args.description || "(empty)"}\nImage: ${args.image || "(empty)"}\nNetwork: ${network.networkId}\n\nMetadata URI: ${agentURI}\nHTTP Gateway: ${httpUrl}\n\nTransaction hash: ${handle.hash}`; } - // Upload registration to IPFS (using defaults if not provided) - const agentName = args.name || `Agent ${agentId}`; - const ipfsUri = await uploadAgentRegistration(this.pinataConfig, { - agentId: parseInt(agentId, 10), - chainId, - registryAddress, - name: agentName, - description: args.description || "", - image: args.image || "", - }); - - // Set agent URI onchain - const setUriHash = await walletProvider.sendTransaction({ - to: registryAddress, - data: encodeFunctionData({ - abi: IDENTITY_REGISTRY_ABI, - functionName: "setAgentURI", - args: [BigInt(agentId), ipfsUri], - }), - }); - - await walletProvider.waitForTransactionReceipt(setUriHash); - - const httpUrl = ipfsToHttpUrl(ipfsUri); - - return `Agent registered successfully!\n\nAgent ID: ${agentId}\nName: ${agentName}\nDescription: ${args.description || "(empty)"}\nImage: ${args.image || "(empty)"}\nNetwork: ${network.networkId}\n\nMetadata URI: ${ipfsUri}\nHTTP Gateway: ${httpUrl}\n\nTransactions:\n- Register: ${registerHash}\n- Set URI: ${setUriHash}`; + // No IPFS: register with empty URI, then set a data URI containing the agentId + const handle = await agent.registerHTTP(""); + const { result } = await handle.waitMined(); + + const agentId = result.agentId!; + const regFile = agent.getRegistrationFile(); + const dataUri = jsonToDataUri(regFile); + const handle2 = await agent.setAgentURI(dataUri); + await handle2.waitMined(); + + return `Agent registered successfully!\n\nAgent ID: ${agentId}\nName: ${result.name || agentName}\nDescription: ${args.description || "(empty)"}\nImage: ${args.image || "(empty)"}\nNetwork: ${network.networkId}\n\nMetadata: stored on-chain (data URI)\n\nTransaction hashes:\n- Register: ${handle.hash}\n- Set URI: ${handle2.hash}`; } catch (error) { return `Error during registration: ${error}`; } diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts index bfce4bbb0..6b7d0d417 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.test.ts @@ -9,16 +9,12 @@ import { GetAgentFeedbackSchema, } from "./reputationSchemas"; import { EvmWalletProvider } from "../../wallet-providers"; -import * as utilsRep from "./utils_rep"; import * as utils from "./utils"; // Mock utils to avoid loading the ESM-only agent0-sdk at module load time jest.mock("./utils", () => ({ getAgent0SDK: jest.fn(), - uploadJsonToIPFS: jest.fn(), - uploadFileToIPFS: jest.fn(), ipfsToHttpUrl: jest.fn((uri: string) => uri), - formatCAIP10Address: jest.fn(), })); const MOCK_AGENT_ID = "123"; @@ -26,9 +22,6 @@ const MOCK_ADDRESS = "0x1234567890123456789012345678901234567890"; const MOCK_CLIENT_ADDRESS = "0x9876543210987654321098765432109876543210"; const TRANSACTION_HASH = "0xabcdef1234567890"; const MOCK_FEEDBACK_INDEX = "0"; -const MOCK_IPFS_HASH = "bafkreitest123456789"; -const MOCK_FEEDBACK_URI = `ipfs://${MOCK_IPFS_HASH}`; -const MOCK_FEEDBACK_HASH = "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"; describe("Reputation Schema Validation", () => { describe("GiveFeedbackSchema", () => { @@ -264,16 +257,34 @@ describe("Reputation Schema Validation", () => { }); }); +/** + * Creates a mock TransactionHandle matching the agent0-sdk shape. + * + * @param hash - The transaction hash string. + * @param result - Optional result object to include in the mined receipt. + * @returns A mock transaction handle with hash and waitMined method. + */ +function mockTxHandle(hash: string, result: Record = {}) { + return { + hash, + waitMined: jest.fn().mockResolvedValue({ + receipt: { transactionHash: hash, status: "success", logs: [] }, + result, + }), + }; +} + describe("Give Feedback Action", () => { let mockWallet: jest.Mocked; let actionProvider: ERC8004ReputationActionProvider; - let uploadFeedbackSpy: jest.SpyInstance; + let mockSdk: { + isAgentOwner: jest.Mock; + giveFeedback: jest.Mock; + }; + let getAgent0SDKSpy: jest.SpyInstance; beforeEach(() => { mockWallet = { - sendTransaction: jest.fn(), - waitForTransactionReceipt: jest.fn(), - readContract: jest.fn(), getAddress: jest.fn().mockReturnValue(MOCK_ADDRESS), getName: jest.fn().mockReturnValue("evm_wallet_provider"), getNetwork: jest.fn().mockReturnValue({ @@ -282,33 +293,20 @@ describe("Give Feedback Action", () => { }), } as unknown as jest.Mocked; - // Create provider with Pinata JWT configured - actionProvider = erc8004ReputationActionProvider({ pinataJwt: "test-jwt" }); + mockSdk = { + isAgentOwner: jest.fn().mockResolvedValue(false), + giveFeedback: jest.fn().mockResolvedValue(mockTxHandle(TRANSACTION_HASH)), + }; - // Mock the IPFS upload function - uploadFeedbackSpy = jest.spyOn(utilsRep, "uploadFeedbackToIPFS").mockResolvedValue({ - feedbackUri: MOCK_FEEDBACK_URI, - feedbackHash: MOCK_FEEDBACK_HASH as `0x${string}`, - feedbackFile: { - agentRegistry: "eip155:84532:0x8004A818BFB912233c491871b3d84c89A494BD9e", - agentId: 123, - clientAddress: `eip155:84532:${MOCK_ADDRESS}`, - createdAt: new Date().toISOString(), - value: 85, - valueDecimals: 0, - }, - }); + getAgent0SDKSpy = jest.spyOn(utils, "getAgent0SDK").mockReturnValue(mockSdk as never); + actionProvider = erc8004ReputationActionProvider({ pinataJwt: "test-jwt" }); }); afterEach(() => { - uploadFeedbackSpy.mockRestore(); + getAgent0SDKSpy.mockRestore(); }); it("should successfully submit feedback", async () => { - mockWallet.readContract.mockResolvedValue("0xdifferentowner1234567890123456789012345678"); - mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); - mockWallet.waitForTransactionReceipt.mockResolvedValue({}); - const args = { agentId: MOCK_AGENT_ID, value: 85, @@ -319,22 +317,23 @@ describe("Give Feedback Action", () => { const response = await actionProvider.giveFeedback(mockWallet, args); - expect(uploadFeedbackSpy).toHaveBeenCalled(); - expect(mockWallet.sendTransaction).toHaveBeenCalled(); - expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith(TRANSACTION_HASH); + expect(mockSdk.isAgentOwner).toHaveBeenCalledWith("84532:123", MOCK_ADDRESS); + expect(mockSdk.giveFeedback).toHaveBeenCalledWith( + "84532:123", + "85", + "quality", + "speed", + undefined, + undefined, + ); expect(response).toContain("Feedback submitted successfully!"); expect(response).toContain(MOCK_AGENT_ID); expect(response).toContain("85"); expect(response).toContain("quality"); - expect(response).toContain(MOCK_FEEDBACK_URI); expect(response).toContain(TRANSACTION_HASH); }); it("should successfully submit feedback with minimal input", async () => { - mockWallet.readContract.mockResolvedValue("0xdifferentowner1234567890123456789012345678"); - mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); - mockWallet.waitForTransactionReceipt.mockResolvedValue({}); - const args = { agentId: MOCK_AGENT_ID, value: 85, @@ -345,12 +344,49 @@ describe("Give Feedback Action", () => { const response = await actionProvider.giveFeedback(mockWallet, args); - expect(uploadFeedbackSpy).toHaveBeenCalled(); - expect(mockWallet.sendTransaction).toHaveBeenCalled(); + expect(mockSdk.giveFeedback).toHaveBeenCalled(); expect(response).toContain("Feedback submitted successfully!"); }); - it("should fail without Pinata JWT", async () => { + it("should convert fixed-point value to human-readable string", async () => { + const args = { + agentId: MOCK_AGENT_ID, + value: 9977, + valueDecimals: 2, + tag1: "uptime", + tag2: "", + }; + + await actionProvider.giveFeedback(mockWallet, args); + + expect(mockSdk.giveFeedback).toHaveBeenCalledWith( + "84532:123", + "99.77", + "uptime", + "", + undefined, + undefined, + ); + }); + + it("should pass comment as feedbackFile", async () => { + const args = { + agentId: MOCK_AGENT_ID, + value: 85, + valueDecimals: 0, + tag1: "", + tag2: "", + comment: "Great agent!", + }; + + await actionProvider.giveFeedback(mockWallet, args); + + expect(mockSdk.giveFeedback).toHaveBeenCalledWith("84532:123", "85", "", "", undefined, { + comment: "Great agent!", + }); + }); + + it("should successfully submit feedback without Pinata JWT when no comment", async () => { const providerWithoutJwt = erc8004ReputationActionProvider(); const args = { @@ -363,13 +399,12 @@ describe("Give Feedback Action", () => { const response = await providerWithoutJwt.giveFeedback(mockWallet, args); - expect(response).toContain("PINATA_JWT is required"); - expect(mockWallet.sendTransaction).not.toHaveBeenCalled(); + expect(response).toContain("Feedback submitted successfully!"); + expect(mockSdk.giveFeedback).toHaveBeenCalled(); }); - it("should handle error when IPFS upload fails", async () => { - mockWallet.readContract.mockResolvedValue("0xdifferentowner1234567890123456789012345678"); - uploadFeedbackSpy.mockRejectedValue(new Error("IPFS upload failed")); + it("should reject self-feedback", async () => { + mockSdk.isAgentOwner.mockResolvedValue(true); const args = { agentId: MOCK_AGENT_ID, @@ -381,13 +416,12 @@ describe("Give Feedback Action", () => { const response = await actionProvider.giveFeedback(mockWallet, args); - expect(response).toContain("Error giving feedback"); - expect(response).toContain("IPFS upload failed"); + expect(response).toContain("You cannot give feedback to your own agent"); + expect(mockSdk.giveFeedback).not.toHaveBeenCalled(); }); - it("should handle error when transaction fails", async () => { - mockWallet.readContract.mockResolvedValue("0xdifferentowner1234567890123456789012345678"); - mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); + it("should handle error when SDK giveFeedback fails", async () => { + mockSdk.giveFeedback.mockRejectedValue(new Error("Transaction failed")); const args = { agentId: MOCK_AGENT_ID, @@ -407,11 +441,11 @@ describe("Give Feedback Action", () => { describe("Revoke Feedback Action", () => { let mockWallet: jest.Mocked; let actionProvider: ERC8004ReputationActionProvider; + let mockSdk: { revokeFeedback: jest.Mock }; + let getAgent0SDKSpy: jest.SpyInstance; beforeEach(() => { mockWallet = { - sendTransaction: jest.fn(), - waitForTransactionReceipt: jest.fn(), getName: jest.fn().mockReturnValue("evm_wallet_provider"), getNetwork: jest.fn().mockReturnValue({ protocolFamily: "evm", @@ -419,13 +453,19 @@ describe("Revoke Feedback Action", () => { }), } as unknown as jest.Mocked; + mockSdk = { + revokeFeedback: jest.fn().mockResolvedValue(mockTxHandle(TRANSACTION_HASH)), + }; + + getAgent0SDKSpy = jest.spyOn(utils, "getAgent0SDK").mockReturnValue(mockSdk as never); actionProvider = erc8004ReputationActionProvider(); }); - it("should successfully revoke feedback", async () => { - mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); - mockWallet.waitForTransactionReceipt.mockResolvedValue({}); + afterEach(() => { + getAgent0SDKSpy.mockRestore(); + }); + it("should successfully revoke feedback", async () => { const args = { agentId: MOCK_AGENT_ID, feedbackIndex: MOCK_FEEDBACK_INDEX, @@ -433,8 +473,7 @@ describe("Revoke Feedback Action", () => { const response = await actionProvider.revokeFeedback(mockWallet, args); - expect(mockWallet.sendTransaction).toHaveBeenCalled(); - expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith(TRANSACTION_HASH); + expect(mockSdk.revokeFeedback).toHaveBeenCalledWith("84532:123", 0); expect(response).toContain("Feedback revoked successfully!"); expect(response).toContain(MOCK_AGENT_ID); expect(response).toContain(MOCK_FEEDBACK_INDEX); @@ -442,7 +481,7 @@ describe("Revoke Feedback Action", () => { }); it("should handle error when revoking feedback fails", async () => { - mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); + mockSdk.revokeFeedback.mockRejectedValue(new Error("Transaction failed")); const args = { agentId: MOCK_AGENT_ID, @@ -458,11 +497,11 @@ describe("Revoke Feedback Action", () => { describe("Append Response Action", () => { let mockWallet: jest.Mocked; let actionProvider: ERC8004ReputationActionProvider; + let mockSdk: { appendResponse: jest.Mock }; + let getAgent0SDKSpy: jest.SpyInstance; beforeEach(() => { mockWallet = { - sendTransaction: jest.fn(), - waitForTransactionReceipt: jest.fn(), getName: jest.fn().mockReturnValue("evm_wallet_provider"), getNetwork: jest.fn().mockReturnValue({ protocolFamily: "evm", @@ -470,13 +509,19 @@ describe("Append Response Action", () => { }), } as unknown as jest.Mocked; + mockSdk = { + appendResponse: jest.fn().mockResolvedValue(mockTxHandle(TRANSACTION_HASH)), + }; + + getAgent0SDKSpy = jest.spyOn(utils, "getAgent0SDK").mockReturnValue(mockSdk as never); actionProvider = erc8004ReputationActionProvider(); }); - it("should successfully append response", async () => { - mockWallet.sendTransaction.mockResolvedValue(TRANSACTION_HASH); - mockWallet.waitForTransactionReceipt.mockResolvedValue({}); + afterEach(() => { + getAgent0SDKSpy.mockRestore(); + }); + it("should successfully append response", async () => { const args = { agentId: MOCK_AGENT_ID, clientAddress: MOCK_CLIENT_ADDRESS, @@ -486,8 +531,11 @@ describe("Append Response Action", () => { const response = await actionProvider.appendResponse(mockWallet, args); - expect(mockWallet.sendTransaction).toHaveBeenCalled(); - expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith(TRANSACTION_HASH); + const zeroHash = "0x" + "00".repeat(32); + expect(mockSdk.appendResponse).toHaveBeenCalledWith("84532:123", MOCK_CLIENT_ADDRESS, 0, { + uri: "ipfs://QmResponse", + hash: zeroHash, + }); expect(response).toContain("Response appended successfully!"); expect(response).toContain(MOCK_AGENT_ID); expect(response).toContain(MOCK_CLIENT_ADDRESS); @@ -496,7 +544,7 @@ describe("Append Response Action", () => { }); it("should handle error when appending response fails", async () => { - mockWallet.sendTransaction.mockRejectedValue(new Error("Transaction failed")); + mockSdk.appendResponse.mockRejectedValue(new Error("Transaction failed")); const args = { agentId: MOCK_AGENT_ID, @@ -677,7 +725,7 @@ describe("supportsNetwork", () => { expect( actionProvider.supportsNetwork({ protocolFamily: "evm", - networkId: "polygon-mainnet", + networkId: "arbitrum-mainnet", }), ).toBe(false); }); diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts index 9721126c6..c0507b950 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004ReputationActionProvider.ts @@ -1,5 +1,4 @@ import { z } from "zod"; -import { Hex, encodeFunctionData, zeroHash } from "viem"; import { ActionProvider } from "../actionProvider"; import { Network } from "../../network"; import { CreateAction } from "../actionDecorator"; @@ -10,10 +9,8 @@ import { AppendResponseSchema, GetAgentFeedbackSchema, } from "./reputationSchemas"; -import { getChainIdFromNetwork, getRegistryAddress, isNetworkSupported } from "./constants"; -import { REPUTATION_REGISTRY_ABI, IDENTITY_REGISTRY_ABI } from "./abi"; -import { PinataConfig, ipfsToHttpUrl, getAgent0SDK } from "./utils"; -import { uploadFeedbackToIPFS } from "./utils_rep"; +import { getChainIdFromNetwork, isNetworkSupported } from "./constants"; +import { PinataConfig, getAgent0SDK } from "./utils"; /** * Configuration options for the ERC8004 Reputation Action Provider @@ -43,6 +40,8 @@ export class ERC8004ReputationActionProvider extends ActionProvider, ): Promise { try { - if (!this.pinataConfig) { - return "Error: PINATA_JWT is required for giving feedback. Please configure the provider with a Pinata JWT."; - } - - console.log("args", args); - const network = walletProvider.getNetwork(); const chainId = getChainIdFromNetwork(network); - const reputationRegistryAddress = getRegistryAddress("reputation", chainId); - const identityRegistryAddress = getRegistryAddress("identity", chainId); const clientAddress = walletProvider.getAddress(); - // Check that the client is not the owner of the agent - const agentOwner = await walletProvider.readContract({ - address: identityRegistryAddress, - abi: IDENTITY_REGISTRY_ABI, - functionName: "ownerOf", - args: [BigInt(args.agentId)], - }); + const fullAgentId = args.agentId.includes(":") ? args.agentId : `${chainId}:${args.agentId}`; + + const sdk = getAgent0SDK(walletProvider, this.pinataConfig?.jwt); - if ((agentOwner as string).toLowerCase() === clientAddress.toLowerCase()) { + const isOwner = await sdk.isAgentOwner(fullAgentId, clientAddress); + if (isOwner) { return "Error: You cannot give feedback to your own agent."; } - // Generate and upload feedback file to IPFS - const { feedbackUri, feedbackHash } = await uploadFeedbackToIPFS(this.pinataConfig, { - agentId: parseInt(args.agentId, 10), - chainId, - identityRegistryAddress, - clientAddress: clientAddress as Hex, - value: args.value, - valueDecimals: args.valueDecimals ?? 0, - tag1: args.tag1, - tag2: args.tag2, - endpoint: undefined, - mcp: undefined, - a2a: undefined, - oasf: undefined, - proofOfPayment: undefined, - comment: args.comment, - }); - - // Submit feedback onchain with IPFS URI and hash - const hash = await walletProvider.sendTransaction({ - to: reputationRegistryAddress, - data: encodeFunctionData({ - abi: REPUTATION_REGISTRY_ABI, - functionName: "giveFeedback", - args: [ - BigInt(args.agentId), - BigInt(args.value), - args.valueDecimals ?? 0, - args.tag1 ?? "", - args.tag2 ?? "", - "", - feedbackUri, - feedbackHash, - ], - }), - }); - - await walletProvider.waitForTransactionReceipt(hash); - - const httpUrl = ipfsToHttpUrl(feedbackUri); - - const commentLine = args.comment ? `\nComment: ${args.comment}` : ""; - return `Feedback submitted successfully!\n\nAgent ID: ${args.agentId}\nValue: ${args.value}${args.valueDecimals ? ` (${args.valueDecimals} decimals)` : ""}\nTags: ${args.tag1 || "(none)"}${args.tag2 ? `, ${args.tag2}` : ""}${commentLine}\n\nFeedback File:\n- IPFS URI: ${feedbackUri}\n- HTTP Gateway: ${httpUrl}\n- Hash: ${feedbackHash}\n\nTransaction hash: ${hash}`; + const decimals = args.valueDecimals ?? 0; + const humanValue = + decimals > 0 + ? (args.value / Math.pow(10, decimals)).toFixed(decimals) + : args.value.toString(); + + // Only pass the off-chain file when IPFS is configured + const feedbackFile = + this.pinataConfig && args.comment ? { comment: args.comment } : undefined; + + const handle = await sdk.giveFeedback( + fullAgentId, + humanValue, + args.tag1, + args.tag2, + undefined, + feedbackFile, + ); + + await handle.waitMined(); + + const commentLine = args.comment + ? this.pinataConfig + ? `\nComment: ${args.comment}` + : `\nComment: ${args.comment} (not persisted — configure PINATA_JWT for off-chain storage)` + : ""; + return `Feedback submitted successfully!\n\nAgent ID: ${args.agentId}\nValue: ${args.value}${decimals ? ` (${decimals} decimals)` : ""}\nTags: ${args.tag1 || "(none)"}${args.tag2 ? `, ${args.tag2}` : ""}${commentLine}\n\nTransaction hash: ${handle.hash}`; } catch (error) { return `Error giving feedback: ${error}`; } @@ -174,20 +142,13 @@ found by reading the feedback entries. try { const network = walletProvider.getNetwork(); const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("reputation", chainId); + const fullAgentId = args.agentId.includes(":") ? args.agentId : `${chainId}:${args.agentId}`; - const hash = await walletProvider.sendTransaction({ - to: registryAddress, - data: encodeFunctionData({ - abi: REPUTATION_REGISTRY_ABI, - functionName: "revokeFeedback", - args: [BigInt(args.agentId), BigInt(args.feedbackIndex)], - }), - }); - - await walletProvider.waitForTransactionReceipt(hash); + const sdk = getAgent0SDK(walletProvider); + const handle = await sdk.revokeFeedback(fullAgentId, parseInt(args.feedbackIndex, 10)); + await handle.waitMined(); - return `Feedback revoked successfully!\n\nAgent ID: ${args.agentId}\nFeedback Index: ${args.feedbackIndex}\nTransaction hash: ${hash}`; + return `Feedback revoked successfully!\n\nAgent ID: ${args.agentId}\nFeedback Index: ${args.feedbackIndex}\nTransaction hash: ${handle.hash}`; } catch (error) { return `Error revoking feedback: ${error}`; } @@ -224,26 +185,19 @@ The response is stored as a URI pointing to off-chain content. try { const network = walletProvider.getNetwork(); const chainId = getChainIdFromNetwork(network); - const registryAddress = getRegistryAddress("reputation", chainId); - - const hash = await walletProvider.sendTransaction({ - to: registryAddress, - data: encodeFunctionData({ - abi: REPUTATION_REGISTRY_ABI, - functionName: "appendResponse", - args: [ - BigInt(args.agentId), - args.clientAddress as Hex, - BigInt(args.feedbackIndex), - args.responseUri, - (args.responseHash as Hex) ?? zeroHash, - ], - }), - }); - - await walletProvider.waitForTransactionReceipt(hash); - - return `Response appended successfully!\n\nAgent ID: ${args.agentId}\nClient: ${args.clientAddress}\nFeedback Index: ${args.feedbackIndex}\nResponse URI: ${args.responseUri}\n\nTransaction hash: ${hash}`; + const fullAgentId = args.agentId.includes(":") ? args.agentId : `${chainId}:${args.agentId}`; + const zeroHash = "0x" + "00".repeat(32); + + const sdk = getAgent0SDK(walletProvider); + const handle = await sdk.appendResponse( + fullAgentId, + args.clientAddress, + parseInt(args.feedbackIndex, 10), + { uri: args.responseUri, hash: args.responseHash ?? zeroHash }, + ); + await handle.waitMined(); + + return `Response appended successfully!\n\nAgent ID: ${args.agentId}\nClient: ${args.clientAddress}\nFeedback Index: ${args.feedbackIndex}\nResponse URI: ${args.responseUri}\n\nTransaction hash: ${handle.hash}`; } catch (error) { return `Error appending response: ${error}`; } diff --git a/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts b/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts index cf2db3db2..b6ef0c837 100644 --- a/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts +++ b/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts @@ -24,8 +24,8 @@ export const RegisterAgentSchema = z .describe("Registers a new agent."); /** - * Input schema for updating agent metadata (IPFS registration file). - * Retrieves existing JSON from IPFS, updates specified fields, uploads new JSON, and sets URI on-chain. + * Input schema for updating agent metadata. + * Loads current metadata, applies updates and stores the result on IPFS or onchain as a data URI. */ export const UpdateAgentMetadataSchema = z .object({ @@ -39,9 +39,7 @@ export const UpdateAgentMetadataSchema = z image: z.string().optional().describe("New image URL for the agent (optional)"), }) .strip() - .describe( - "Updates agent registration metadata: retrieves existing JSON from IPFS, updates specified fields, uploads new JSON to IPFS, and sets the new URI on-chain", - ); + .describe("Updates agent registration metadata."); /** * Input schema for getting all agents owned by a wallet address. diff --git a/typescript/agentkit/src/action-providers/erc8004/index.ts b/typescript/agentkit/src/action-providers/erc8004/index.ts index 7193e96b1..e59ef28f6 100644 --- a/typescript/agentkit/src/action-providers/erc8004/index.ts +++ b/typescript/agentkit/src/action-providers/erc8004/index.ts @@ -7,36 +7,11 @@ export * from "./identitySchemas"; export * from "./reputationSchemas"; // Constants -export { - SUPPORTED_CHAIN_IDS, - REGISTRY_ADDRESSES, - SUPPORTED_NETWORK_IDS, - getChainIdFromNetwork, - getRegistryAddress, - isNetworkSupported, -} from "./constants"; +export { SUPPORTED_NETWORK_IDS, getChainIdFromNetwork, isNetworkSupported } from "./constants"; export type { SupportedNetworkId } from "./constants"; // Shared utilities -export { uploadJsonToIPFS, uploadFileToIPFS, ipfsToHttpUrl, formatCAIP10Address } from "./utils"; +export { ipfsToHttpUrl, jsonToDataUri, dataUriToJson } from "./utils"; export type { PinataConfig } from "./utils"; - -// Identity utilities -export { generateAgentRegistration, uploadAgentRegistration } from "./utils_id"; - -export type { AgentRegistration, GenerateRegistrationParams } from "./utils_id"; - -// Reputation utilities -export { generateFeedbackFile, uploadFeedbackToIPFS, computeJsonHash } from "./utils_rep"; - -export type { - FeedbackFile, - GenerateFeedbackParams, - FeedbackUploadResult, - McpFeedbackContext, - A2aFeedbackContext, - OasfFeedbackContext, - ProofOfPayment, -} from "./utils_rep"; diff --git a/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts b/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts index 758026084..0f7828361 100644 --- a/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts +++ b/typescript/agentkit/src/action-providers/erc8004/reputationSchemas.ts @@ -10,7 +10,7 @@ import { z } from "zod"; * - Response time 560ms: value=560, valueDecimals=0, tag1="responseTime" * - Trading yield -3.2%: value=-32, valueDecimals=1, tag1="tradingYield" * - * Feedback is automatically uploaded to IPFS and the URI + hash are included onchain. + * Core feedback data is always stored onchain. When IPFS is configured, an off-chain feedback file (e.g. comment) is also uploaded. */ export const GiveFeedbackSchema = z .object({ @@ -54,9 +54,7 @@ export const GiveFeedbackSchema = z .describe("Optional user review comment (max 500 characters)"), }) .strip() - .describe( - "Submits feedback for an agent on the ERC-8004 Reputation Registry. Feedback file is automatically uploaded to IPFS.", - ); + .describe("Submits feedback for an agent on the ERC-8004 Reputation Registry."); /** * Input schema for revoking feedback. diff --git a/typescript/agentkit/src/action-providers/erc8004/utils.ts b/typescript/agentkit/src/action-providers/erc8004/utils.ts index f9d8e187e..291d6ab4b 100644 --- a/typescript/agentkit/src/action-providers/erc8004/utils.ts +++ b/typescript/agentkit/src/action-providers/erc8004/utils.ts @@ -2,7 +2,12 @@ * Shared utilities for ERC-8004 action providers */ -import { SDK as Agent0SDK } from "agent0-sdk"; +import { + SDK as Agent0SDK, + Agent as Agent0Agent, + IDENTITY_REGISTRY_ABI as SDK_IDENTITY_ABI, +} from "agent0-sdk"; +import type { RegistrationFile } from "agent0-sdk"; import { EvmWalletProvider } from "../../wallet-providers"; import { getChainIdFromNetwork } from "./constants"; @@ -16,11 +21,16 @@ export interface PinataConfig { /** * Creates an Agent0SDK instance from a wallet provider. * - * @param walletProvider - The wallet provider to extract chain and RPC information from + * + * The wallet provider is bridged via {@link toEip1193Provider} so the SDK can + * send transactions through agentkit's wallet abstraction (including smart wallets). + * + * @param walletProvider - The wallet provider to extract chain/RPC/signer from + * @param pinataJwt - Optional Pinata JWT for IPFS uploads * @returns An initialized Agent0SDK instance * @throws Error if unable to determine RPC URL */ -export function getAgent0SDK(walletProvider: EvmWalletProvider): Agent0SDK { +export function getAgent0SDK(walletProvider: EvmWalletProvider, pinataJwt?: string): Agent0SDK { const network = walletProvider.getNetwork(); const chainId = getChainIdFromNetwork(network); @@ -34,145 +44,121 @@ export function getAgent0SDK(walletProvider: EvmWalletProvider): Agent0SDK { return new Agent0SDK({ chainId, rpcUrl, + walletProvider: walletProvider.toEip1193Provider(), + ...(pinataJwt ? { ipfs: "pinata" as const, pinataJwt } : {}), }); } /** - * Upload response from Pinata - */ -interface PinataUploadResponse { - IpfsHash: string; - PinSize: number; - Timestamp: string; - isDuplicate?: boolean; -} - -/** - * Uploads JSON data to IPFS using Pinata + * Converts an IPFS URI to an HTTP gateway URL * - * @param pinataConfig - Pinata configuration with JWT - * @param json - The JSON object to upload - * @param name - Name for the pinned content - * @returns The IPFS hash (CID) + * @param ipfsUri - The IPFS URI (ipfs://...) + * @param gateway - The gateway to use (default: ipfs.io) + * @returns The HTTP gateway URL */ -export async function uploadJsonToIPFS( - pinataConfig: PinataConfig, - json: object, - name: string, -): Promise { - const requestBody = { - pinataOptions: { - cidVersion: 1, - }, - pinataMetadata: { - name: `${name}.json`, - }, - pinataContent: json, - }; - - const response = await fetch("https://api.pinata.cloud/pinning/pinJSONToIPFS", { - method: "POST", - headers: { - Authorization: `Bearer ${pinataConfig.jwt}`, - "Content-Type": "application/json", - }, - body: JSON.stringify(requestBody), - }); - - if (!response.ok) { - const error = await response.json(); - throw new Error(`Failed to upload JSON to IPFS: ${error.message || response.statusText}`); +export function ipfsToHttpUrl(ipfsUri: string, gateway = "ipfs.io"): string { + if (!ipfsUri.startsWith("ipfs://")) { + return ipfsUri; } - - const data: PinataUploadResponse = await response.json(); - return data.IpfsHash; + const cid = ipfsUri.replace("ipfs://", ""); + return `https://${gateway}/ipfs/${cid}`; } /** - * Uploads a file to IPFS using Pinata + * Encodes a JSON object as a base64-encoded data: URI. + * + * Per ERC-8004 spec this is a valid agentURI for fully on-chain metadata: + * data:application/json;base64,eyJ0eXBlIjoi... * - * @param pinataConfig - Pinata configuration with JWT - * @param fileData - Base64 encoded file data - * @param fileName - Name for the file - * @param mimeType - MIME type of the file - * @returns The IPFS hash (CID) + * @param json - The JSON-serialisable object + * @returns A data URI string */ -export async function uploadFileToIPFS( - pinataConfig: PinataConfig, - fileData: string, - fileName: string, - mimeType: string, -): Promise { - const formData = new FormData(); - - // Convert base64 to Blob and then to File - const byteCharacters = atob(fileData); - const byteArrays: Uint8Array[] = []; - - for (let offset = 0; offset < byteCharacters.length; offset += 1024) { - const slice = byteCharacters.slice(offset, offset + 1024); - const byteNumbers = new Array(slice.length); - for (let i = 0; i < slice.length; i++) { - byteNumbers[i] = slice.charCodeAt(i); - } - const byteArray = new Uint8Array(byteNumbers); - byteArrays.push(byteArray); - } - - const blob = new Blob(byteArrays, { type: mimeType }); - const file = new File([blob], fileName, { type: mimeType }); - - formData.append("file", file); - - const pinataMetadata = { - name: fileName, - }; - formData.append("pinataMetadata", JSON.stringify(pinataMetadata)); - - const pinataOptions = { - cidVersion: 1, - }; - formData.append("pinataOptions", JSON.stringify(pinataOptions)); - - const response = await fetch("https://api.pinata.cloud/pinning/pinFileToIPFS", { - method: "POST", - headers: { - Authorization: `Bearer ${pinataConfig.jwt}`, - }, - body: formData, - }); - - if (!response.ok) { - const error = await response.json(); - throw new Error(`Failed to upload file to IPFS: ${error.message || response.statusText}`); - } - - const data: PinataUploadResponse = await response.json(); - return data.IpfsHash; +export function jsonToDataUri(json: object): string { + const jsonString = JSON.stringify(json); + const base64 = Buffer.from(jsonString).toString("base64"); + return `data:application/json;base64,${base64}`; } /** - * Converts an IPFS URI to an HTTP gateway URL + * Decodes a base64-encoded data: URI back to a JSON object. * - * @param ipfsUri - The IPFS URI (ipfs://...) - * @param gateway - The gateway to use (default: ipfs.io) - * @returns The HTTP gateway URL + * @param dataUri - A data URI of the form data:application/json;base64,... + * @returns The decoded JSON object */ -export function ipfsToHttpUrl(ipfsUri: string, gateway = "ipfs.io"): string { - if (!ipfsUri.startsWith("ipfs://")) { - return ipfsUri; +export function dataUriToJson>(dataUri: string): T { + const match = dataUri.match(/^data:application\/json;base64,(.+)$/); + if (!match) { + throw new Error( + `Invalid data URI: expected data:application/json;base64,... but got: ${dataUri.slice(0, 60)}`, + ); } - const cid = ipfsUri.replace("ipfs://", ""); - return `https://${gateway}/ipfs/${cid}`; + const jsonString = Buffer.from(match[1], "base64").toString("utf-8"); + return JSON.parse(jsonString) as T; } /** - * Formats a CAIP-10 address identifier + * Loads an agent via the SDK. Falls back to reading a data: URI from the + * contract and constructing the Agent manually (the SDK cannot read data URIs). * - * @param chainId - The chain ID - * @param address - The address - * @returns CAIP-10 formatted string (e.g., "eip155:84532:0x1234...") + * @param sdk - The Agent0SDK instance + * @param walletProvider - The wallet provider used to read the contract + * @param fullAgentId - The fully-qualified agent ID (chainId:tokenId) + * @param tokenId - The numeric token ID string + * @returns The loaded or hydrated Agent0Agent instance */ -export function formatCAIP10Address(chainId: number, address: string): string { - return `eip155:${chainId}:${address}`; +export async function loadOrHydrateAgent( + sdk: ReturnType, + walletProvider: EvmWalletProvider, + fullAgentId: string, + tokenId: string, +): Promise { + try { + return await sdk.loadAgent(fullAgentId); + } catch { + // loadAgent fails for data: URIs — hydrate manually + } + + const registryAddress = sdk.identityRegistryAddress(); + const tokenUri = (await walletProvider.readContract({ + address: registryAddress as `0x${string}`, + abi: SDK_IDENTITY_ABI, + functionName: "tokenURI", + args: [BigInt(tokenId)], + })) as string; + + let regFile: RegistrationFile; + if (tokenUri && tokenUri.startsWith("data:")) { + const decoded = dataUriToJson>(tokenUri); + regFile = { + name: (decoded.name as string) || "", + description: (decoded.description as string) || "", + image: decoded.image as string | undefined, + endpoints: (decoded.endpoints as RegistrationFile["endpoints"]) || [], + trustModels: (decoded.trustModels as RegistrationFile["trustModels"]) || [], + owners: (decoded.owners as string[]) || [], + operators: (decoded.operators as string[]) || [], + active: (decoded.active as boolean) ?? false, + x402support: (decoded.x402support as boolean) ?? false, + metadata: (decoded.metadata as Record) || {}, + updatedAt: (decoded.updatedAt as number) || Math.floor(Date.now() / 1000), + agentId: fullAgentId, + agentURI: tokenUri, + }; + } else { + regFile = { + name: "", + description: "", + endpoints: [], + trustModels: [], + owners: [], + operators: [], + active: false, + x402support: false, + metadata: {}, + updatedAt: Math.floor(Date.now() / 1000), + agentId: fullAgentId, + }; + } + + return new Agent0Agent(sdk, regFile); } diff --git a/typescript/agentkit/src/action-providers/erc8004/utils_id.ts b/typescript/agentkit/src/action-providers/erc8004/utils_id.ts deleted file mode 100644 index 4e6bbad73..000000000 --- a/typescript/agentkit/src/action-providers/erc8004/utils_id.ts +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Identity-specific utilities for ERC-8004 Identity Registry - */ -import { Hex } from "viem"; -import { PinataConfig, uploadJsonToIPFS, formatCAIP10Address, ipfsToHttpUrl } from "./utils"; - -/** - * ERC-8004 Agent Registration structure - * - * @see https://eips.ethereum.org/EIPS/eip-8004#registration-v1 - */ -export interface AgentRegistration { - type: "https://eips.ethereum.org/EIPS/eip-8004#registration-v1"; - name: string; - description: string; - image: string; - registrations: Array<{ - agentId: number; - agentRegistry: string; // CAIP-10 format - }>; - supportedTrust: Array<"reputation" | "crypto-economic" | "tee-attestation">; -} - -/** - * Parameters for generating agent registration - */ -export interface GenerateRegistrationParams { - agentId: number; - chainId: number; - registryAddress: Hex; - name?: string; - description?: string; - image?: string; -} - -/** - * Generates an ERC-8004 compliant agent registration JSON structure - * - * @param params - Registration parameters - * @returns The registration JSON object - */ -export function generateAgentRegistration(params: GenerateRegistrationParams): AgentRegistration { - const registration: AgentRegistration = { - type: "https://eips.ethereum.org/EIPS/eip-8004#registration-v1", - name: params.name || `Agent ${params.agentId}`, - description: params.description || "", - image: params.image || "", - registrations: [ - { - agentId: params.agentId, - agentRegistry: formatCAIP10Address(params.chainId, params.registryAddress), - }, - ], - supportedTrust: ["reputation"], - }; - - return registration; -} - -/** - * Generates and uploads an agent registration to IPFS - * - * @param pinataConfig - Pinata configuration with JWT - * @param params - Registration parameters - * @returns The IPFS URI (ipfs://...) - */ -export async function uploadAgentRegistration( - pinataConfig: PinataConfig, - params: GenerateRegistrationParams, -): Promise { - const registration = generateAgentRegistration(params); - const ipfsHash = await uploadJsonToIPFS( - pinataConfig, - registration, - `agent-${params.agentId}-registration`, - ); - return `ipfs://${ipfsHash}`; -} - -/** - * Fetches an agent registration JSON from IPFS - * - * @param ipfsUri - The IPFS URI (ipfs://...) or HTTP gateway URL - * @returns The agent registration JSON - */ -export async function fetchAgentRegistration(ipfsUri: string): Promise { - const httpUrl = ipfsToHttpUrl(ipfsUri); - - const response = await fetch(httpUrl); - if (!response.ok) { - throw new Error(`Failed to fetch registration from IPFS: ${response.statusText}`); - } - - const registration = (await response.json()) as AgentRegistration; - - // Validate it's an ERC-8004 registration - if (registration.type !== "https://eips.ethereum.org/EIPS/eip-8004#registration-v1") { - throw new Error(`Invalid registration type: ${registration.type}`); - } - - return registration; -} - -/** - * Updates an existing agent registration with new values - * - * @param existing - The existing registration JSON - * @param updates - The fields to update (only non-undefined values are applied) - * @param updates.name - Optional new name for the agent - * @param updates.description - Optional new description for the agent - * @param updates.image - Optional new image URL for the agent - * @returns A new registration object with updates applied - */ -export function updateAgentRegistration( - existing: AgentRegistration, - updates: { name?: string; description?: string; image?: string }, -): AgentRegistration { - return { - ...existing, - name: updates.name !== undefined ? updates.name : existing.name, - description: updates.description !== undefined ? updates.description : existing.description, - image: updates.image !== undefined ? updates.image : existing.image, - }; -} diff --git a/typescript/agentkit/src/action-providers/erc8004/utils_rep.ts b/typescript/agentkit/src/action-providers/erc8004/utils_rep.ts deleted file mode 100644 index 40ab8d879..000000000 --- a/typescript/agentkit/src/action-providers/erc8004/utils_rep.ts +++ /dev/null @@ -1,184 +0,0 @@ -/** - * Reputation-specific utilities for ERC-8004 Reputation Registry - */ -import { Hex, keccak256, toBytes } from "viem"; -import { PinataConfig, uploadJsonToIPFS, formatCAIP10Address } from "./utils"; - -/** - * MCP-specific context for feedback - */ -export interface McpFeedbackContext { - tool?: string; - prompt?: string; - resource?: string; -} - -/** - * A2A-specific context for feedback - */ -export interface A2aFeedbackContext { - skills?: string[]; - contextId?: string; - taskId?: string; -} - -/** - * OASF-specific context for feedback - */ -export interface OasfFeedbackContext { - skills?: string[]; - domains?: string[]; -} - -/** - * Proof of payment context (e.g., for x402) - */ -export interface ProofOfPayment { - fromAddress: string; - toAddress: string; - chainId: string; - txHash: string; -} - -/** - * ERC-8004 Feedback File structure - * - * @see https://eips.ethereum.org/EIPS/eip-8004#off-chain-feedback-file-structure - */ -export interface FeedbackFile { - // Required fields - agentRegistry: string; - agentId: number; - clientAddress: string; - createdAt: string; - value: number; - valueDecimals: number; - - // Optional fields - tag1?: string; - tag2?: string; - endpoint?: string; - mcp?: McpFeedbackContext; - a2a?: A2aFeedbackContext; - oasf?: OasfFeedbackContext; - proofOfPayment?: ProofOfPayment; - comment?: string; -} - -/** - * Parameters for generating feedback file - */ -export interface GenerateFeedbackParams { - agentId: number; - chainId: number; - identityRegistryAddress: Hex; - clientAddress: Hex; - value: number; - valueDecimals: number; - tag1?: string; - tag2?: string; - endpoint?: string; - mcp?: McpFeedbackContext; - a2a?: A2aFeedbackContext; - oasf?: OasfFeedbackContext; - proofOfPayment?: ProofOfPayment; - comment?: string; -} - -/** - * Result of uploading feedback to IPFS - */ -export interface FeedbackUploadResult { - feedbackUri: string; - feedbackHash: Hex; - feedbackFile: FeedbackFile; -} - -/** - * Computes the KECCAK-256 hash of a JSON object - * - * @param json - The JSON object to hash - * @returns The hash as a hex string - */ -export function computeJsonHash(json: object): Hex { - const jsonString = JSON.stringify(json); - return keccak256(toBytes(jsonString)); -} - -/** - * Generates an ERC-8004 compliant feedback file JSON structure - * - * @param params - Feedback parameters - * @returns The feedback file JSON object - */ -export function generateFeedbackFile(params: GenerateFeedbackParams): FeedbackFile { - const feedbackFile: FeedbackFile = { - agentRegistry: formatCAIP10Address(params.chainId, params.identityRegistryAddress), - agentId: params.agentId, - clientAddress: formatCAIP10Address(params.chainId, params.clientAddress), - createdAt: new Date().toISOString(), - value: params.value, - valueDecimals: params.valueDecimals, - }; - - if (params.tag1) { - feedbackFile.tag1 = params.tag1; - } - - if (params.tag2) { - feedbackFile.tag2 = params.tag2; - } - - if (params.endpoint) { - feedbackFile.endpoint = params.endpoint; - } - - if (params.mcp) { - feedbackFile.mcp = params.mcp; - } - - if (params.a2a) { - feedbackFile.a2a = params.a2a; - } - - if (params.oasf) { - feedbackFile.oasf = params.oasf; - } - - if (params.proofOfPayment) { - feedbackFile.proofOfPayment = params.proofOfPayment; - } - - if (params.comment) { - feedbackFile.comment = params.comment; - } - - return feedbackFile; -} - -/** - * Generates and uploads a feedback file to IPFS - * - * @param pinataConfig - Pinata configuration with JWT - * @param params - Feedback parameters - * @returns The IPFS URI, hash, and generated feedback file - */ -export async function uploadFeedbackToIPFS( - pinataConfig: PinataConfig, - params: GenerateFeedbackParams, -): Promise { - const feedbackFile = generateFeedbackFile(params); - const feedbackHash = computeJsonHash(feedbackFile); - - const ipfsHash = await uploadJsonToIPFS( - pinataConfig, - feedbackFile, - `agent-${params.agentId}-feedback-${Date.now()}`, - ); - - return { - feedbackUri: `ipfs://${ipfsHash}`, - feedbackHash, - feedbackFile, - }; -} diff --git a/typescript/agentkit/src/wallet-providers/evmWalletProvider.ts b/typescript/agentkit/src/wallet-providers/evmWalletProvider.ts index 04ce421e8..0555cede5 100644 --- a/typescript/agentkit/src/wallet-providers/evmWalletProvider.ts +++ b/typescript/agentkit/src/wallet-providers/evmWalletProvider.ts @@ -13,8 +13,16 @@ import { Address, PublicClient, LocalAccount, + numberToHex, } from "viem"; +/** + * Minimal EIP-1193 provider interface. + */ +export interface EIP1193Provider { + request(args: { method: string; params?: unknown[] | Record }): Promise; +} + /** * EvmWalletProvider is the abstract base class for all EVM wallet providers. * @@ -45,6 +53,49 @@ export abstract class EvmWalletProvider extends WalletProvider { }); } + /** + * Convert the wallet provider to a EIP-1193 provider. + * + * @returns The EIP-1193 provider. + */ + toEip1193Provider(): EIP1193Provider { + return { + request: async (args: { method: string; params?: any }) => { + switch (args.method) { + case "eth_accounts": + case "eth_requestAccounts": + return [this.getAddress()]; + + case "eth_chainId": + return numberToHex(Number(this.getNetwork().chainId)); + + case "eth_sendTransaction": { + const txParams = (args.params as any[])?.[0] ?? {}; + const hash = await this.sendTransaction(txParams); + // Wait for the transaction receipt so that a userOpHash is resolved to a real transaction hash for CDP smart wallets. + const receipt = await this.waitForTransactionReceipt(hash); + return receipt.transactionHash ?? hash; + } + + case "personal_sign": { + const [message] = args.params as [string]; + return this.signMessage(message); + } + + case "eth_signTypedData_v4": { + const [, typedDataJson] = args.params as [string, string]; + const typedData = + typeof typedDataJson === "string" ? JSON.parse(typedDataJson) : typedDataJson; + return this.signTypedData(typedData); + } + + default: + return this.getPublicClient().request(args as any); + } + }, + }; + } + /** * Sign a raw hash. * From 638d5fea9f26c97bb6aec53600507a9435e2cb6c Mon Sep 17 00:00:00 2001 From: Philippe d'Argent Date: Wed, 25 Feb 2026 00:14:12 +0900 Subject: [PATCH 5/5] improve search --- .../erc8004IdentityActionProvider.test.ts | 192 ++++++++++++-- .../erc8004/erc8004IdentityActionProvider.ts | 238 ++++++++++++++---- .../erc8004/identitySchemas.ts | 94 +++++-- 3 files changed, 434 insertions(+), 90 deletions(-) diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts index 1a316737a..57b7d6e7e 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.test.ts @@ -190,20 +190,20 @@ describe("Identity Schema Validation", () => { const result = SearchAgentsSchema.safeParse(validInput); expect(result.success).toBe(true); - expect(result.data).toEqual({}); + // limit has default(10) so empty input produces { limit: 10 } + expect(result.data).toEqual({ limit: 10 }); }); it("should successfully parse input with all filters", () => { const validInput = { + keyword: "financial data analysis", name: "AI", - mcpTools: ["code_generation", "data_analysis"], - a2aSkills: ["python"], - oasfSkills: ["data_engineering/data_transformation_pipeline"], - oasfDomains: ["finance_and_business/investment_services"], - active: true, - x402support: true, + description: "financial", + require: ["mcp", "active", "x402"], minReputation: 70, maxReputation: 100, + reputationTag: "enterprise", + sort: "averageValue:desc", limit: 10, offset: 5, }; @@ -214,6 +214,28 @@ describe("Identity Schema Validation", () => { expect(result.data).toMatchObject(validInput); }); + it("should strip unknown fields like networkId (schema does not validate it)", () => { + const inputWithUnknownField = { + networkId: "unsupported-network", + }; + + const result = SearchAgentsSchema.safeParse(inputWithUnknownField); + + expect(result.success).toBe(true); + // networkId is not in schema, so it gets stripped; limit defaults to 10 + expect(result.data).toEqual({ limit: 10 }); + }); + + it("should successfully parse input with only keyword", () => { + const validInput = { + keyword: "agent that can analyze trading data", + }; + + const result = SearchAgentsSchema.safeParse(validInput); + + expect(result.success).toBe(true); + }); + it("should successfully parse input with only name filter", () => { const validInput = { name: "Trading Bot", @@ -473,7 +495,7 @@ describe("Search Agents Action", () => { mockGetAgent0SDK.mockReturnValue(mockSdk as unknown as ReturnType); }); - it("should successfully search agents with no filters", async () => { + it("should pass only chains when no filters are set", async () => { mockSdk.searchAgents.mockResolvedValue([ { agentId: "123", @@ -484,34 +506,33 @@ describe("Search Agents Action", () => { }, ]); - const response = await actionProvider.searchAgents(mockWallet, {}); + const response = await actionProvider.searchAgents(mockWallet, { limit: 10 }); - expect(mockSdk.searchAgents).toHaveBeenCalled(); - expect(response).toContain("Found 1 agent(s) total"); + expect(mockSdk.searchAgents).toHaveBeenCalledWith({ chains: [84532] }, expect.any(Object)); + expect(response).toContain("Found 1 agent(s)"); + expect(response).toContain("base-sepolia"); expect(response).toContain("Test Agent"); }); it("should return no agents message when none found", async () => { mockSdk.searchAgents.mockResolvedValue([]); - const response = await actionProvider.searchAgents(mockWallet, {}); + const response = await actionProvider.searchAgents(mockWallet, { limit: 10 }); expect(response).toContain("No agents found"); }); it("should return limited results using action-level pagination", async () => { - // SDK now returns all results in a single call (no cursor-based pagination in 1.5.x) mockSdk.searchAgents.mockResolvedValue([ { agentId: "1", name: "Agent 1" }, { agentId: "2", name: "Agent 2" }, { agentId: "3", name: "Agent 3" }, ]); - // Request with limit=2, should show first 2 of 3 total const response = await actionProvider.searchAgents(mockWallet, { limit: 2 }); expect(mockSdk.searchAgents).toHaveBeenCalledTimes(1); - expect(response).toContain("Found 3 agent(s) total"); + expect(response).toContain("Found 3 agent(s)"); expect(response).toContain("showing 1-2"); expect(response).toContain("Agent 1"); expect(response).toContain("Agent 2"); @@ -521,17 +542,145 @@ describe("Search Agents Action", () => { }); it("should pass name filter to SDK and return matching agents", async () => { - // SDK handles name filtering server-side in 1.5.x; single call, returns matching agents mockSdk.searchAgents.mockResolvedValue([{ agentId: "2", name: "myAwesomeAgent" }]); - const response = await actionProvider.searchAgents(mockWallet, { name: "awesome" }); + const response = await actionProvider.searchAgents(mockWallet, { + name: "awesome", + limit: 10, + }); expect(mockSdk.searchAgents).toHaveBeenCalledTimes(1); - expect(mockSdk.searchAgents).toHaveBeenCalledWith(expect.objectContaining({ name: "awesome" })); - expect(response).toContain("Found 1 agent(s) total"); + expect(mockSdk.searchAgents).toHaveBeenCalledWith( + expect.objectContaining({ name: "awesome" }), + expect.any(Object), + ); + expect(response).toContain("Found 1 agent(s)"); expect(response).toContain("myAwesomeAgent"); }); + it("should pass keyword for semantic search", async () => { + mockSdk.searchAgents.mockResolvedValue([ + { agentId: "1", name: "Finance Bot", semanticScore: 0.92 }, + ]); + + const response = await actionProvider.searchAgents(mockWallet, { + keyword: "financial data analysis", + limit: 10, + }); + + expect(mockSdk.searchAgents).toHaveBeenCalledWith( + expect.objectContaining({ keyword: "financial data analysis" }), + expect.any(Object), + ); + expect(response).toContain("Finance Bot"); + expect(response).toContain("Relevance: 0.920"); + }); + + it("should pass description filter to SDK", async () => { + mockSdk.searchAgents.mockResolvedValue([ + { agentId: "1", name: "Data Agent", description: "Handles financial data" }, + ]); + + const response = await actionProvider.searchAgents(mockWallet, { + description: "financial", + limit: 10, + }); + + expect(mockSdk.searchAgents).toHaveBeenCalledWith( + expect.objectContaining({ description: "financial" }), + expect.any(Object), + ); + expect(response).toContain("Data Agent"); + }); + + it("should pass require filters to SDK", async () => { + mockSdk.searchAgents.mockResolvedValue([ + { agentId: "1", name: "MCP Agent", mcp: "https://mcp.example.com" }, + ]); + + const response = await actionProvider.searchAgents(mockWallet, { + require: ["mcp", "active"], + limit: 10, + }); + + expect(mockSdk.searchAgents).toHaveBeenCalledWith( + expect.objectContaining({ hasMCP: true, active: true }), + expect.any(Object), + ); + expect(mockSdk.searchAgents).toHaveBeenCalledWith( + expect.not.objectContaining({ hasA2A: expect.anything(), x402support: expect.anything() }), + expect.any(Object), + ); + expect(response).toContain("MCP Agent"); + }); + + it("should use wallet network when no filters are set", async () => { + mockSdk.searchAgents.mockResolvedValue([{ agentId: "1:5", name: "Mainnet Agent" }]); + + const response = await actionProvider.searchAgents(mockWallet, { + limit: 10, + }); + + // Uses wallet network (base-sepolia = 84532) when no networkId in schema + expect(mockSdk.searchAgents).toHaveBeenCalledWith( + expect.objectContaining({ chains: [84532] }), + expect.any(Object), + ); + expect(response).toContain("base-sepolia"); + }); + + it("should pass sort option to SDK", async () => { + mockSdk.searchAgents.mockResolvedValue([{ agentId: "1", name: "Top Agent" }]); + + await actionProvider.searchAgents(mockWallet, { + sort: "averageValue:desc", + limit: 10, + }); + + expect(mockSdk.searchAgents).toHaveBeenCalledWith( + expect.any(Object), + expect.objectContaining({ sort: ["averageValue:desc"] }), + ); + }); + + it("should pass reputation tag in feedback filters", async () => { + mockSdk.searchAgents.mockResolvedValue([ + { agentId: "1", name: "Enterprise Agent", averageValue: 90 }, + ]); + + const response = await actionProvider.searchAgents(mockWallet, { + minReputation: 80, + reputationTag: "enterprise", + limit: 10, + }); + + expect(mockSdk.searchAgents).toHaveBeenCalledWith( + expect.objectContaining({ + feedback: { minValue: 80, maxValue: undefined, tag: "enterprise" }, + }), + expect.any(Object), + ); + expect(response).toContain("Reputation: 90"); + }); + + it("should include enriched output fields", async () => { + mockSdk.searchAgents.mockResolvedValue([ + { + agentId: "1", + name: "Full Agent", + averageValue: 85, + feedbackCount: 12, + }, + ]); + + const response = await actionProvider.searchAgents(mockWallet, { limit: 10 }); + + expect(response).toContain("Agent ID: 1"); + expect(response).toContain("Name: Full Agent"); + expect(response).toContain("Reputation: 85"); + expect(response).toContain("Feedback count: 12"); + }); + it("should support offset for pagination", async () => { mockSdk.searchAgents.mockResolvedValue([ { agentId: "1", name: "Agent 1" }, @@ -539,10 +688,9 @@ describe("Search Agents Action", () => { { agentId: "3", name: "Agent 3" }, ]); - // Request with offset=1, limit=1 const response = await actionProvider.searchAgents(mockWallet, { offset: 1, limit: 1 }); - expect(response).toContain("Found 3 agent(s) total"); + expect(response).toContain("Found 3 agent(s)"); expect(response).toContain("showing 2-2"); expect(response).toContain("Agent 2"); expect(response).not.toContain("Agent 1"); @@ -552,7 +700,7 @@ describe("Search Agents Action", () => { it("should handle errors gracefully", async () => { mockSdk.searchAgents.mockRejectedValue(new Error("Network error")); - const response = await actionProvider.searchAgents(mockWallet, {}); + const response = await actionProvider.searchAgents(mockWallet, { limit: 10 }); expect(response).toContain("Error searching agents"); }); diff --git a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts index be3487e04..7d02171d7 100644 --- a/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts +++ b/typescript/agentkit/src/action-providers/erc8004/erc8004IdentityActionProvider.ts @@ -49,14 +49,25 @@ export class ERC8004IdentityActionProvider extends ActionProvider 0 ? models.join(", ") : "(none)"}`); + } + + // OASF taxonomies + if (args.oasfSkills?.length) { + for (const skill of args.oasfSkills) { + agent.addSkill(skill, true); + } + updates.push(`OASF skills added: ${args.oasfSkills.join(", ")}`); + } + if (args.oasfDomains?.length) { + for (const domain of args.oasfDomains) { + agent.addDomain(domain, true); + } + updates.push(`OASF domains added: ${args.oasfDomains.join(", ")}`); + } + + // Custom metadata + if (args.metadata && Object.keys(args.metadata).length > 0) { + agent.setMetadata(args.metadata); + const entries = Object.entries(args.metadata) + .map(([k, v]) => `${k}=${v}`) + .join(", "); + updates.push(`Metadata: ${entries}`); + } + + // Re-register let newUri: string; let txHash: string; - const agent = await loadOrHydrateAgent(sdk, walletProvider, fullAgentId, args.agentId); - agent.updateInfo(args.name, args.description, args.image); - if (this.pinataConfig) { const handle = await agent.registerIPFS(); const { result } = await handle.waitMined(); @@ -90,16 +183,11 @@ Example: "update description to 'A trading assistant agent'" txHash = handle.hash; } - const updates: string[] = []; - if (args.name !== undefined) updates.push(`Name: ${args.name}`); - if (args.description !== undefined) updates.push(`Description: ${args.description}`); - if (args.image !== undefined) updates.push(`Image: ${args.image}`); - const uriDisplay = newUri.startsWith("ipfs://") ? `Metadata URI: ${newUri}\nHTTP Gateway: ${ipfsToHttpUrl(newUri)}` : `Metadata URI: (onchain data URI)`; - return `Agent metadata updated successfully!\n\nAgent ID: ${args.agentId}\nUpdated fields:\n${updates.length > 0 ? updates.map(u => `- ${u}`).join("\n") : "(no changes)"}\n\n${uriDisplay}\nTransaction hash: ${txHash}`; + return `Agent updated successfully!\n\nAgent ID: ${args.agentId}\nUpdated fields:\n${updates.length > 0 ? updates.map(u => `- ${u}`).join("\n") : "(no changes)"}\n\n${uriDisplay}\nTransaction hash: ${txHash}`; } catch (error) { return `Error updating agent metadata: ${error}`; } @@ -217,32 +305,38 @@ Supports pagination. /** * Searches for agents by capabilities, attributes, or reputation. + * Supports semantic (keyword) search, structured filters, sorting, and pagination. * * @param walletProvider - The wallet provider to use for reading - * @param args - Search filters including name, tools, skills, reputation + * @param args - Search filters including keyword, name, tools, skills, reputation * @returns A message with the list of matching agents */ @CreateAction({ name: "search_agents", description: ` -Search for registered agents by capabilities, attributes, or reputation. -All filters are optional. Results are filtered by capabilities first, then by reputation. - -Search filters: -- name: Substring match on agent name -- mcpTools: Filter by MCP tools the agent offers -- a2aSkills: Filter by A2A skills -- oasfSkills: Filter by OASF skill taxonomy -- oasfDomains: Filter by OASF domain taxonomy -- active: Only return active agents (default: true) -- x402support: Filter by x402 payment support +Search for registered agents using semantic search, structured filters, or both. +All filters are optional. Only include filters that the user explicitly requests. + +Discovery: +- keyword: Natural-language semantic search (e.g. "financial data analysis agent") +- name / description: Substring match + +Capabilities: +- mcpTools, a2aSkills, oasfSkills, oasfDomains: Filter by specific capabilities +- require: List of status/capability requirements (e.g. ["mcp", "active"]). Only add values the user explicitly asks for. + +Status & reputation: - minReputation / maxReputation: Filter by average reputation score +- reputationTag: Only consider feedback with this tag + +Scope: +- networkId: Search a specific network (default: current network) -Pagination: -- limit: Maximum results to return (default: 10, max: 50) +Sorting & pagination: +- sort: e.g. "averageValue:desc", "updatedAt:desc", "name:asc" +- limit: Max results to return (default: 10, max: 50) - offset: Number of results to skip (default: 0) -This is a read-only operation using indexed data for fast queries. `, schema: SearchAgentsSchema, }) @@ -251,48 +345,90 @@ This is a read-only operation using indexed data for fast queries. args: z.infer, ): Promise { try { - const sdk = getAgent0SDK(walletProvider); - console.log("args", args); - const searchFilters = { - name: args.name, - mcpTools: args.mcpTools, - a2aSkills: args.a2aSkills, - active: args.active, - x402support: args.x402support, + const sdk = getAgent0SDK(walletProvider); + const network = walletProvider.getNetwork(); + const currentChainId = getChainIdFromNetwork(network); + + const requirements = new Set(args.require ?? []); + + const hasReputationFilter = + args.minReputation !== undefined || + args.maxReputation !== undefined || + (args.reputationTag !== undefined && args.reputationTag !== "") || + args.minCount !== undefined || + args.maxCount !== undefined || + (args.fromReviewers !== undefined && args.fromReviewers.length > 0); + + const searchFilters: Record = { + chains: [currentChainId], + ...(args.keyword && { keyword: args.keyword }), + ...(args.name && { name: args.name }), + ...(args.description && { description: args.description }), + ...(requirements.has("mcp") && { hasMCP: true }), + ...(requirements.has("a2a") && { hasA2A: true }), + ...(requirements.has("active") && { active: true }), + ...(requirements.has("x402") && { x402support: true }), + ...(hasReputationFilter && { + feedback: { + ...(args.minReputation !== undefined && + args.minReputation > 0 && { minValue: args.minReputation }), + ...(args.maxReputation !== undefined && + args.maxReputation < 100 && { maxValue: args.maxReputation }), + ...(args.minCount !== undefined && { minCount: args.minCount }), + ...(args.maxCount !== undefined && { maxCount: args.maxCount }), + ...(args.fromReviewers && + args.fromReviewers.length > 0 && { + ...(args.fromReviewers && { fromReviewers: args.fromReviewers }), + }), + ...(args.reputationTag && { tag: args.reputationTag }), + }, + }), }; - const allAgents = await sdk.searchAgents(searchFilters); + const searchOptions: Record = {}; + if (args.sort) { + searchOptions.sort = [args.sort]; + } + console.log("searchOptions", searchOptions); + console.log("searchFilters", searchFilters); + + const allAgents = await sdk.searchAgents(searchFilters, searchOptions); + console.log("found agents number: ", allAgents.length); if (allAgents.length === 0) { return "No agents found matching the specified criteria."; } - // Apply action-level pagination const limit = args.limit ?? 10; const offset = args.offset ?? 0; const paginatedAgents = allAgents.slice(offset, offset + limit); const totalFound = allAgents.length; const hasMore = offset + limit < totalFound; - // Format the response const agentList = paginatedAgents .map(agent => { - const name = agent.name || "Unnamed"; - const description = agent.description - ? `\n Description: ${agent.description.slice(0, 100)}${agent.description.length > 100 ? "..." : ""}` - : ""; - const tools = agent.mcpTools?.length ? `\n MCP Tools: ${agent.mcpTools.join(", ")}` : ""; - const skills = agent.a2aSkills?.length - ? `\n A2A Skills: ${agent.a2aSkills.join(", ")}` - : ""; - const status = agent.active !== undefined ? `\n Active: ${agent.active}` : ""; - - return `- Agent ID: ${agent.agentId}\n Name: ${name}${description}${tools}${skills}${status}`; + const lines: string[] = []; + lines.push(`- Agent ID: ${agent.agentId}`); + lines.push(` Name: ${agent.name || "Unnamed"}`); + + if (agent.description) { + const desc = + agent.description.length > 120 + ? `${agent.description.slice(0, 120)}...` + : agent.description; + lines.push(` Description: ${desc}`); + } + if (agent.averageValue !== undefined) lines.push(` Reputation: ${agent.averageValue}`); + if (agent.feedbackCount) lines.push(` Feedback count: ${agent.feedbackCount}`); + if (agent.semanticScore !== undefined) + lines.push(` Relevance: ${agent.semanticScore.toFixed(3)}`); + + return lines.join("\n"); }) .join("\n\n"); - let response = `Found ${totalFound} agent(s) total, showing ${offset + 1}-${offset + paginatedAgents.length}:\n\n${agentList}`; + let response = `Found ${totalFound} agent(s) on ${network.networkId}, showing ${offset + 1}-${offset + paginatedAgents.length}:\n\n${agentList}`; if (hasMore) { response += `\n\n(More results available. Use offset: ${offset + limit} to fetch next page)`; diff --git a/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts b/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts index b6ef0c837..58ebe01cf 100644 --- a/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts +++ b/typescript/agentkit/src/action-providers/erc8004/identitySchemas.ts @@ -29,17 +29,53 @@ export const RegisterAgentSchema = z */ export const UpdateAgentMetadataSchema = z .object({ - agentId: z.string().describe("The agent ID to update metadata for"), - name: z.string().min(1).max(100).optional().describe("New name for the agent (optional)"), - description: z + agentId: z.string().describe("The agent ID to update"), + + // Presentation + name: z.string().min(1).max(100).optional().describe("New name for the agent"), + description: z.string().max(500).optional().describe("New description for the agent"), + image: z.string().optional().describe("New image URL for the agent"), + + // Endpoints + mcpEndpoint: z .string() - .max(500) .optional() - .describe("New description for the agent (optional)"), - image: z.string().optional().describe("New image URL for the agent (optional)"), + .describe( + "MCP server URL. Tools, prompts, and resources are auto-extracted from the endpoint.", + ), + a2aEndpoint: z + .string() + .optional() + .describe("A2A agent card URL. Skills are auto-extracted from the endpoint."), + ensName: z.string().optional().describe("ENS name for the agent (e.g., 'myagent.eth')"), + + // Status + active: z.boolean().optional().describe("Set the agent active or inactive"), + x402support: z.boolean().optional().describe("Enable or disable x402 payment support"), + + // Trust models (replaces all current trust settings when any flag is provided) + trustReputation: z.boolean().optional().describe("Enable reputation trust model"), + trustCryptoEconomic: z.boolean().optional().describe("Enable crypto-economic trust model"), + trustTeeAttestation: z.boolean().optional().describe("Enable TEE attestation trust model"), + + // OASF taxonomies + oasfSkills: z + .array(z.string()) + .optional() + .describe("OASF skill slugs to add (e.g., 'data_engineering/data_transformation_pipeline')"), + oasfDomains: z + .array(z.string()) + .optional() + .describe("OASF domain slugs to add (e.g., 'finance_and_business/investment_services')"), + + // Custom metadata + metadata: z + .record(z.string(), z.string()) + .optional() + .describe("Custom metadata key-value pairs to set on the agent"), }) .strip() - .describe("Updates agent registration metadata."); + .describe("Updates agent configuration."); /** * Input schema for getting all agents owned by a wallet address. @@ -65,27 +101,51 @@ export const GetOwnedAgentsSchema = z /** * Input schema for searching agents by capabilities, attributes, or reputation. - * Uses the agent0 SDK's indexed subgraph for fast queries. + * Uses the agent0 SDK's indexed subgraph and optional semantic search. */ export const SearchAgentsSchema = z .object({ + keyword: z + .string() + .optional() + .describe( + "Natural-language semantic search query (e.g. 'financial data analysis agent'). Results are ranked by semantic relevance score.", + ), name: z.string().optional().describe("Search by agent name (substring match)"), - mcpTools: z.array(z.string()).optional().describe("Filter by MCP tools the agent offers"), - a2aSkills: z.array(z.string()).optional().describe("Filter by A2A skills"), - oasfSkills: z.array(z.string()).optional().describe("Filter by OASF skill taxonomy"), - oasfDomains: z.array(z.string()).optional().describe("Filter by OASF domain taxonomy"), - active: z - .boolean() + description: z.string().optional().describe("Search by agent description (substring match)"), + require: z + .array(z.enum(["mcp", "a2a", "active", "x402"])) .optional() - .describe("Filter by active status (true=active only, false=inactive only, omit=all)"), - x402support: z.boolean().optional().describe("Filter by x402 payment support"), + .describe( + "Status/capability requirements. ONLY add values the user explicitly asks for. " + + "'mcp' = must have MCP endpoint, 'a2a' = must have A2A endpoint, " + + "'active' = must be active, 'x402' = must support x402 payments. " + + "Leave empty or omit if the user does not mention any of these.", + ), minReputation: z.number().optional().describe("Minimum average reputation score"), maxReputation: z.number().optional().describe("Maximum average reputation score"), + minCount: z.number().min(0).optional().describe("Minimum feedback count"), + maxCount: z.number().min(0).optional().describe("Maximum feedback count"), + fromReviewers: z + .array(z.string()) + .optional() + .describe("Only consider feedback from these reviewer wallet addresses"), + reputationTag: z + .string() + .optional() + .describe("Only consider feedback matching this tag when filtering by reputation"), + sort: z + .string() + .optional() + .describe( + "Sort order, e.g. 'updatedAt:desc', 'averageValue:desc', 'name:asc'. " + + "Defaults to 'semanticScore:desc' for keyword searches, 'updatedAt:desc' otherwise.", + ), limit: z .number() .min(1) .max(50) - .optional() + .default(10) .describe("Maximum number of results to return (default: 10)"), offset: z.number().min(0).optional().describe("Number of results to skip (default: 0)"), })