diff --git a/package.json b/package.json index 4b73fd495..d29f8da32 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "prisma": "^5.14.0", "prom-client": "^15.1.3", "superjson": "^2.2.1", - "thirdweb": "^5.100.1", + "thirdweb": "^5.105.42", "undici": "^6.20.1", "uuid": "^9.0.1", "viem": "2.22.17", diff --git a/src/server/middleware/auth.ts b/src/server/middleware/auth.ts index fb21508da..781b617c8 100644 --- a/src/server/middleware/auth.ts +++ b/src/server/middleware/auth.ts @@ -331,14 +331,12 @@ const handleKeypairAuth = async (args: { }) as jsonwebtoken.JwtPayload; // If `bodyHash` is provided, it must match a hash of the POST request body. - if ( - req.method === "POST" && - payload?.bodyHash && - payload.bodyHash !== hashRequestBody(req) - ) { - error = - "The request body does not match the hash in the access token. See: https://portal.thirdweb.com/engine/features/keypair-authentication"; - throw error; + if (req.method === "POST" && payload?.bodyHash) { + const computedBodyHash = hashRequestBody(req); + if (computedBodyHash !== payload.bodyHash) { + error = `The request body does not match the hash in the access token. See: https://portal.thirdweb.com/engine/v2/features/keypair-authentication. [hash in access token: ${payload.bodyHash}, hash computed from request: ${computedBodyHash}]`; + throw error; + } } const { isAllowed, ip } = await checkIpInAllowlist(req); diff --git a/src/server/routes/backend-wallet/transfer.ts b/src/server/routes/backend-wallet/transfer.ts index a3b0b0f5b..c83d30a5e 100644 --- a/src/server/routes/backend-wallet/transfer.ts +++ b/src/server/routes/backend-wallet/transfer.ts @@ -160,7 +160,7 @@ export async function transfer(fastify: FastifyInstance) { queueId = await queueTransaction({ transaction, fromAddress: getChecksumAddress(walletAddress), - toAddress: getChecksumAddress(to), + toAddress: getChecksumAddress(transaction.to), accountAddress: getChecksumAddress(accountAddress), accountFactoryAddress: getChecksumAddress(accountFactoryAddress), accountSalt, diff --git a/src/server/routes/contract/read/read.ts b/src/server/routes/contract/read/read.ts index c8239d7c0..d44c8b33f 100644 --- a/src/server/routes/contract/read/read.ts +++ b/src/server/routes/contract/read/read.ts @@ -3,7 +3,7 @@ import type { FastifyInstance } from "fastify"; import { StatusCodes } from "http-status-codes"; import type { AbiParameters } from "ox"; import { readContract as readContractV5, resolveMethod } from "thirdweb"; -import { parseAbiParams } from "thirdweb/utils"; +import { parseAbiParams, stringify } from "thirdweb/utils"; import type { AbiFunction } from "thirdweb/utils"; import { getContractV5 } from "../../../../shared/utils/cache/get-contractv5"; import { prettifyError } from "../../../../shared/utils/error"; @@ -100,7 +100,7 @@ export async function readContract(fastify: FastifyInstance) { reply.status(StatusCodes.OK).send({ // biome-ignore lint/suspicious/noExplicitAny: data from chain - result: returnData as any, + result: JSON.parse(stringify(returnData)) as any, }); }, }); diff --git a/src/server/routes/deploy/prebuilt.ts b/src/server/routes/deploy/prebuilt.ts index 883768b6d..3b18466fa 100644 --- a/src/server/routes/deploy/prebuilt.ts +++ b/src/server/routes/deploy/prebuilt.ts @@ -13,6 +13,12 @@ import { import { txOverridesWithValueSchema } from "../../schemas/tx-overrides"; import { walletWithAAHeaderSchema } from "../../schemas/wallet"; import { getChainIdFromChain } from "../../utils/chain"; +import { getDeployArguments, PREBUILT_CONTRACTS_MAP } from "@thirdweb-dev/sdk"; + +const TW_CLONE_FACTORY_ADDRESS = + "0x25548Ba29a0071F30E4bDCd98Ea72F79341b07a1" as const; +const NFT_COLLECTION_AMEX_IMPLEMENTATION_ADDRESS = + "0x7311B46D12219f21080A84BaA1505E0683E9De99" as const; // INPUTS const requestSchema = prebuiltDeployParamSchema; @@ -85,6 +91,51 @@ export async function deployPrebuilt(fastify: FastifyInstance) { } = request.headers as Static; const sdk = await getSdk({ chainId, walletAddress, accountAddress }); + + if (contractType === "nft-collection-amex") { + const parsedContractMetadata = await PREBUILT_CONTRACTS_MAP[ + "nft-collection" + ].schema.deploy.parseAsync(contractMetadata); + const contractURI = await sdk.storage.upload(parsedContractMetadata); + + const signer = await sdk.getSigner(); + + if (!signer) { + throw new Error("No signer found, please use a wallet address"); + } + + const initializerParams = await getDeployArguments( + "nft-collection", + contractMetadata, + contractURI, + signer, + ); + + const tx = await sdk.deployer.deployViaFactory.prepare( + TW_CLONE_FACTORY_ADDRESS, + NFT_COLLECTION_AMEX_IMPLEMENTATION_ADDRESS, + NFT_COLLECTION_AMEX_ABI, + "initialize", + initializerParams, + saltForProxyDeploy, + ); + + const deployedAddress = (await tx.simulate()) as Address; + + const queueId = await queueTx({ + tx, + chainId, + extension: "deploy-prebuilt", + idempotencyKey, + txOverrides, + }); + + return reply.status(StatusCodes.OK).send({ + deployedAddress, + queueId, + }); + } + const tx = await sdk.deployer.deployBuiltInContract.prepare( contractType, contractMetadata, @@ -112,3 +163,1597 @@ export async function deployPrebuilt(fastify: FastifyInstance) { }, }); } + +const NFT_COLLECTION_AMEX_ABI = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "CurrencyTransferLibFailedNativeTransfer", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "NFTMetadataFrozen", + type: "error", + }, + { + inputs: [], + name: "NFTMetadataInvalidUrl", + type: "error", + }, + { + inputs: [], + name: "NFTMetadataUnauthorized", + 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: [ + { + indexed: true, + internalType: "address", + name: "newRoyaltyRecipient", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "newRoyaltyBps", + type: "uint256", + }, + ], + name: "DefaultRoyalty", + type: "event", + }, + { + anonymous: false, + inputs: [], + name: "EIP712DomainChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "platformFeeRecipient", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "flatFee", + type: "uint256", + }, + ], + name: "FlatPlatformFeeUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [], + name: "MetadataFrozen", + 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: "prevOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnerUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "platformFeeRecipient", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "platformFeeBps", + type: "uint256", + }, + ], + name: "PlatformFeeInfoUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "enum IPlatformFee.PlatformFeeType", + name: "feeType", + type: "uint8", + }, + ], + name: "PlatformFeeTypeUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "recipient", + type: "address", + }, + ], + name: "PrimarySaleRecipientUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "role", + type: "bytes32", + }, + { + indexed: true, + internalType: "bytes32", + name: "previousAdminRole", + type: "bytes32", + }, + { + indexed: true, + internalType: "bytes32", + name: "newAdminRole", + type: "bytes32", + }, + ], + name: "RoleAdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "role", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + ], + name: "RoleGranted", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "role", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + ], + name: "RoleRevoked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + indexed: true, + internalType: "address", + name: "royaltyRecipient", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "royaltyBps", + type: "uint256", + }, + ], + name: "RoyaltyForToken", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "mintedTo", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "tokenIdMinted", + type: "uint256", + }, + { + indexed: false, + internalType: "string", + name: "uri", + type: "string", + }, + ], + name: "TokensMinted", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "signer", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "mintedTo", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "tokenIdMinted", + type: "uint256", + }, + { + components: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "address", + name: "royaltyRecipient", + type: "address", + }, + { + internalType: "uint256", + name: "royaltyBps", + type: "uint256", + }, + { + internalType: "address", + name: "primarySaleRecipient", + type: "address", + }, + { + internalType: "string", + name: "uri", + type: "string", + }, + { + internalType: "uint256", + name: "price", + type: "uint256", + }, + { + internalType: "address", + name: "currency", + type: "address", + }, + { + internalType: "uint128", + name: "validityStartTimestamp", + type: "uint128", + }, + { + internalType: "uint128", + name: "validityEndTimestamp", + type: "uint128", + }, + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + ], + indexed: false, + internalType: "struct ITokenERC721.MintRequest", + name: "mintRequest", + type: "tuple", + }, + ], + name: "TokensMintedWithSignature", + 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", + }, + { + inputs: [], + name: "DEFAULT_ADMIN_ROLE", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "DEFAULT_FEE_RECIPIENT", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + 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: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "burn", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "contractType", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "contractURI", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "contractVersion", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8", + }, + ], + stateMutability: "pure", + 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: [], + name: "freezeMetadata", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "getApproved", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDefaultRoyaltyInfo", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint16", + name: "", + type: "uint16", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getPlatformFeeInfo", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint16", + name: "", + type: "uint16", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "role", + type: "bytes32", + }, + ], + name: "getRoleAdmin", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "role", + type: "bytes32", + }, + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "getRoleMember", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "role", + type: "bytes32", + }, + ], + name: "getRoleMemberCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_tokenId", + type: "uint256", + }, + ], + name: "getRoyaltyInfoForToken", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint16", + name: "", + type: "uint16", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "role", + type: "bytes32", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "grantRole", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "role", + type: "bytes32", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "hasRole", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_defaultAdmin", + type: "address", + }, + { + internalType: "string", + name: "_name", + type: "string", + }, + { + internalType: "string", + name: "_symbol", + type: "string", + }, + { + internalType: "string", + name: "_contractURI", + type: "string", + }, + { + internalType: "address[]", + name: "_trustedForwarders", + type: "address[]", + }, + { + internalType: "address", + name: "_saleRecipient", + type: "address", + }, + { + internalType: "address", + name: "_royaltyRecipient", + type: "address", + }, + { + internalType: "uint128", + name: "_royaltyBps", + type: "uint128", + }, + { + internalType: "uint128", + name: "_platformFeeBps", + type: "uint128", + }, + { + internalType: "address", + name: "_platformFeeRecipient", + type: "address", + }, + ], + 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: [ + { + internalType: "address", + name: "_to", + type: "address", + }, + { + internalType: "string", + name: "_uri", + type: "string", + }, + ], + name: "mintTo", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "address", + name: "royaltyRecipient", + type: "address", + }, + { + internalType: "uint256", + name: "royaltyBps", + type: "uint256", + }, + { + internalType: "address", + name: "primarySaleRecipient", + type: "address", + }, + { + internalType: "string", + name: "uri", + type: "string", + }, + { + internalType: "uint256", + name: "price", + type: "uint256", + }, + { + internalType: "address", + name: "currency", + type: "address", + }, + { + internalType: "uint128", + name: "validityStartTimestamp", + type: "uint128", + }, + { + internalType: "uint128", + name: "validityEndTimestamp", + type: "uint128", + }, + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + ], + internalType: "struct ITokenERC721.MintRequest", + name: "_req", + type: "tuple", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "mintWithSignature", + outputs: [ + { + internalType: "uint256", + name: "tokenIdMinted", + type: "uint256", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes[]", + name: "data", + type: "bytes[]", + }, + ], + name: "multicall", + outputs: [ + { + internalType: "bytes[]", + name: "results", + type: "bytes[]", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nextTokenIdToMint", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + 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: "platformFeeRecipient", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "primarySaleRecipient", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "role", + type: "bytes32", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "renounceRole", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "role", + type: "bytes32", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "revokeRole", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + internalType: "uint256", + name: "salePrice", + type: "uint256", + }, + ], + name: "royaltyInfo", + outputs: [ + { + internalType: "address", + name: "receiver", + type: "address", + }, + { + internalType: "uint256", + name: "royaltyAmount", + type: "uint256", + }, + ], + stateMutability: "view", + 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: "address", + name: "operator", + type: "address", + }, + { + internalType: "bool", + name: "approved", + type: "bool", + }, + ], + name: "setApprovalForAll", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "_uri", + type: "string", + }, + ], + name: "setContractURI", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_royaltyRecipient", + type: "address", + }, + { + internalType: "uint256", + name: "_royaltyBps", + type: "uint256", + }, + ], + name: "setDefaultRoyaltyInfo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newOwner", + type: "address", + }, + ], + name: "setOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_platformFeeRecipient", + type: "address", + }, + { + internalType: "uint256", + name: "_platformFeeBps", + type: "uint256", + }, + ], + name: "setPlatformFeeInfo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_saleRecipient", + type: "address", + }, + ], + name: "setPrimarySaleRecipient", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_tokenId", + type: "uint256", + }, + { + internalType: "address", + name: "_recipient", + type: "address", + }, + { + internalType: "uint256", + name: "_bps", + type: "uint256", + }, + ], + name: "setRoyaltyInfoForToken", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_tokenId", + type: "uint256", + }, + { + internalType: "string", + name: "_uri", + type: "string", + }, + ], + name: "setTokenURI", + 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: "index", + type: "uint256", + }, + ], + name: "tokenByIndex", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "tokenOfOwnerByIndex", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_tokenId", + type: "uint256", + }, + ], + name: "tokenURI", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + 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: [], + name: "uriFrozen", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "address", + name: "royaltyRecipient", + type: "address", + }, + { + internalType: "uint256", + name: "royaltyBps", + type: "uint256", + }, + { + internalType: "address", + name: "primarySaleRecipient", + type: "address", + }, + { + internalType: "string", + name: "uri", + type: "string", + }, + { + internalType: "uint256", + name: "price", + type: "uint256", + }, + { + internalType: "address", + name: "currency", + type: "address", + }, + { + internalType: "uint128", + name: "validityStartTimestamp", + type: "uint128", + }, + { + internalType: "uint128", + name: "validityEndTimestamp", + type: "uint128", + }, + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + ], + internalType: "struct ITokenERC721.MintRequest", + name: "_req", + type: "tuple", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "verify", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; diff --git a/src/server/schemas/tx-overrides.ts b/src/server/schemas/tx-overrides.ts index cef4a1574..cb4c88171 100644 --- a/src/server/schemas/tx-overrides.ts +++ b/src/server/schemas/tx-overrides.ts @@ -23,6 +23,13 @@ export const txOverridesSchema = Type.Object({ ...WeiAmountStringSchema, description: "Maximum priority fee per gas", }), + + gasFeeCeiling: Type.Optional({ + ...WeiAmountStringSchema, + description: + "Maximum gas fee for the transaction. This is the total maximum gas fee you are willing to pay for the transaction. If the chain gas conditions are worse than this, the transaction will be delayed until the gas conditions are better. If chain gas conditions are better than this, the transaction will be sent immediately. This value is only used to determine if the transaction should be delayed or sent immediately, and is not used to calculate the actual gas fee for the transaction.", + }), + timeoutSeconds: Type.Optional( Type.Integer({ examples: ["7200"], diff --git a/src/server/utils/transaction-overrides.ts b/src/server/utils/transaction-overrides.ts index 06575dc49..8292abb56 100644 --- a/src/server/utils/transaction-overrides.ts +++ b/src/server/utils/transaction-overrides.ts @@ -20,6 +20,7 @@ export const parseTransactionOverrides = ( gasPrice: maybeBigInt(overrides.gasPrice), maxFeePerGas: maybeBigInt(overrides.maxFeePerGas), maxPriorityFeePerGas: maybeBigInt(overrides.maxPriorityFeePerGas), + gasFeeCeiling: maybeBigInt(overrides.gasFeeCeiling), }, timeoutSeconds: overrides.timeoutSeconds, // `value` may not be in the overrides object. diff --git a/src/shared/db/transactions/queue-tx.ts b/src/shared/db/transactions/queue-tx.ts index 508e5207e..50e95d2c8 100644 --- a/src/shared/db/transactions/queue-tx.ts +++ b/src/shared/db/transactions/queue-tx.ts @@ -23,6 +23,7 @@ interface QueueTxParams { gas?: string; maxFeePerGas?: string; maxPriorityFeePerGas?: string; + gasFeeCeiling?: string; value?: string; }; } diff --git a/src/shared/utils/env.ts b/src/shared/utils/env.ts index 3db48dcbb..85aaf3b9c 100644 --- a/src/shared/utils/env.ts +++ b/src/shared/utils/env.ts @@ -115,6 +115,8 @@ export const env = createEnv({ .number() .gt(0.0, "scaling factor must be greater than 0") .default(1.0), + // Retry prepareUserOp errors instead of immediately failing the transaction + EXPERIMENTAL__RETRY_PREPARE_USEROP_ERRORS: boolEnvSchema(false), }, clientPrefix: "NEVER_USED", client: {}, @@ -169,6 +171,8 @@ export const env = createEnv({ process.env.EXPERIMENTAL__MINE_WORKER_MAX_POLL_INTERVAL_SECONDS, EXPERIMENTAL__MINE_WORKER_POLL_INTERVAL_SCALING_FACTOR: process.env.EXPERIMENTAL__MINE_WORKER_POLL_INTERVAL_SCALING_FACTOR, + EXPERIMENTAL__RETRY_PREPARE_USEROP_ERRORS: + process.env.EXPERIMENTAL__RETRY_PREPARE_USEROP_ERRORS, SEND_WEBHOOK_QUEUE_CONCURRENCY: process.env.SEND_WEBHOOK_QUEUE_CONCURRENCY, }, onValidationError: (error: ZodError) => { diff --git a/src/shared/utils/error.ts b/src/shared/utils/error.ts index 51d4f8f47..33c239b16 100644 --- a/src/shared/utils/error.ts +++ b/src/shared/utils/error.ts @@ -19,7 +19,7 @@ export const isNonceAlreadyUsedError = (error: unknown) => { if (message) { return ( - message.includes("nonce too low") || message.includes("already known") + message.includes("nonce too low") || message.includes("already known") || message.includes("incorrect account sequence") ); } diff --git a/src/shared/utils/transaction/types.ts b/src/shared/utils/transaction/types.ts index f45c947ba..978882196 100644 --- a/src/shared/utils/transaction/types.ts +++ b/src/shared/utils/transaction/types.ts @@ -45,6 +45,7 @@ export type InsertedTransaction = { gasPrice?: bigint; maxFeePerGas?: bigint; maxPriorityFeePerGas?: bigint; + gasFeeCeiling?: bigint; }; timeoutSeconds?: number; diff --git a/src/worker/tasks/send-transaction-worker.ts b/src/worker/tasks/send-transaction-worker.ts index 836798c9c..2530eea49 100644 --- a/src/worker/tasks/send-transaction-worker.ts +++ b/src/worker/tasks/send-transaction-worker.ts @@ -210,7 +210,9 @@ const _sendUserOp = async ( }); accountFactoryAddress = getAddress(onchainAccountFactoryAddress); } catch (error) { - const errorMessage = `${wrapError(error, "RPC").message} Failed to find factory address for account`; + const errorMessage = `${ + wrapError(error, "RPC").message + } Failed to find factory address for account`; const erroredTransaction: ErroredTransaction = { ...queuedTransaction, status: "errored", @@ -233,7 +235,9 @@ const _sendUserOp = async ( chain, ); } catch (error) { - const errorMessage = `${wrapError(error, "RPC").message} Failed to find entrypoint address for account factory`; + const errorMessage = `${ + wrapError(error, "RPC").message + } Failed to find entrypoint address for account factory`; const erroredTransaction: ErroredTransaction = { ...queuedTransaction, status: "errored", @@ -291,27 +295,52 @@ const _sendUserOp = async ( }); } catch (error) { const errorMessage = wrapError(error, "Bundler").message; + job.log(`Failed to populate transaction: ${errorMessage}`); + + // If retry is enabled for prepareUserOp errors, throw to trigger job retry + if (env.EXPERIMENTAL__RETRY_PREPARE_USEROP_ERRORS) { + throw error; + } + + // Otherwise, return errored transaction as before const erroredTransaction: ErroredTransaction = { ...queuedTransaction, status: "errored", errorMessage, }; - job.log(`Failed to populate transaction: ${errorMessage}`); return erroredTransaction; } + // Handle if `gasFeeCeiling` is overridden. + // Delay the job if the estimated cost is higher than the gas fee ceiling. + const gasFeeCeiling = overrides?.gasFeeCeiling; + if (typeof gasFeeCeiling !== "undefined") { + const estimatedCost = + unsignedUserOp.maxFeePerGas * + (unsignedUserOp.callGasLimit + + unsignedUserOp.preVerificationGas + + unsignedUserOp.verificationGasLimit); + + if (estimatedCost > gasFeeCeiling) { + const retryAt = _minutesFromNow(5); + job.log( + `Override gas fee ceiling (${gasFeeCeiling}) is lower than onchain estimated cost (${estimatedCost}). Delaying job until ${retryAt}. [callGasLimit: ${unsignedUserOp.callGasLimit}, preVerificationGas: ${unsignedUserOp.preVerificationGas}, verificationGasLimit: ${unsignedUserOp.verificationGasLimit}, maxFeePerGas: ${unsignedUserOp.maxFeePerGas}]`, + ); + // token is required to acquire lock for delaying currently processing job: https://docs.bullmq.io/patterns/process-step-jobs#delaying + await job.moveToDelayed(retryAt.getTime(), token); + // throwing delayed error is required to notify bullmq worker not to complete or fail the job + throw new DelayedError("Delaying job due to gas fee override"); + } + } + // Handle if `maxFeePerGas` is overridden. // Set it if the transaction will be sent, otherwise delay the job. - if ( - typeof overrides?.maxFeePerGas !== "undefined" && - unsignedUserOp.maxFeePerGas - ) { - if (overrides.maxFeePerGas > unsignedUserOp.maxFeePerGas) { - unsignedUserOp.maxFeePerGas = overrides.maxFeePerGas; - } else { + const overrideMaxFeePerGas = overrides?.maxFeePerGas; + if (typeof overrideMaxFeePerGas !== "undefined") { + if (unsignedUserOp.maxFeePerGas > overrideMaxFeePerGas) { const retryAt = _minutesFromNow(5); job.log( - `Override gas fee (${overrides.maxFeePerGas}) is lower than onchain fee (${unsignedUserOp.maxFeePerGas}). Delaying job until ${retryAt}.`, + `Override gas fee (${overrideMaxFeePerGas}) is lower than onchain fee (${unsignedUserOp.maxFeePerGas}). Delaying job until ${retryAt}.`, ); // token is required to acquire lock for delaying currently processing job: https://docs.bullmq.io/patterns/process-step-jobs#delaying await job.moveToDelayed(retryAt.getTime(), token); @@ -331,13 +360,22 @@ const _sendUserOp = async ( userOp: unsignedUserOp, }); } catch (error) { - const errorMessage = `${wrapError(error, "Bundler").message} Failed to sign prepared userop`; + const errorMessage = `${ + wrapError(error, "Bundler").message + } Failed to sign prepared userop`; + job.log(`Failed to sign userop: ${errorMessage}`); + + // If retry is enabled for prepareUserOp errors, throw to trigger job retry + if (env.EXPERIMENTAL__RETRY_PREPARE_USEROP_ERRORS) { + throw error; + } + + // Otherwise, return errored transaction as before const erroredTransaction: ErroredTransaction = { ...queuedTransaction, status: "errored", errorMessage, }; - job.log(`Failed to sign userop: ${errorMessage}`); return erroredTransaction; } @@ -356,13 +394,22 @@ const _sendUserOp = async ( }, }); } catch (error) { - const errorMessage = `${wrapError(error, "Bundler").message} Failed to bundle userop`; + const errorMessage = `${ + wrapError(error, "Bundler").message + } Failed to bundle userop`; + job.log(`Failed to bundle userop: ${errorMessage}`); + + // If retry is enabled for prepareUserOp errors, throw to trigger job retry + if (env.EXPERIMENTAL__RETRY_PREPARE_USEROP_ERRORS) { + throw error; + } + + // Otherwise, return errored transaction as before const erroredTransaction: ErroredTransaction = { ...queuedTransaction, status: "errored", errorMessage, }; - job.log(`Failed to bundle userop: ${errorMessage}`); return erroredTransaction; } @@ -478,6 +525,32 @@ const _sendTransaction = async ( } } + // Handle if `gasFeeCeiling` is overridden. + // Delay the job if the estimated cost is higher than the gas fee ceiling. + const gasFeeCeiling = overrides?.gasFeeCeiling; + if (typeof gasFeeCeiling !== "undefined") { + let estimatedCost = 0n; + + if (populatedTransaction.maxFeePerGas) { + estimatedCost = + populatedTransaction.maxFeePerGas * populatedTransaction.gas; + } else if (populatedTransaction.gasPrice) { + estimatedCost = populatedTransaction.gas * populatedTransaction.gasPrice; + } + + // in case neither of the estimations work, the estimatedCost will be 0n, so this check should not pass, and transaction remains unaffected + if (estimatedCost > gasFeeCeiling) { + const retryAt = _minutesFromNow(5); + job.log( + `Override gas fee ceiling (${gasFeeCeiling}) is lower than onchain estimated cost (${estimatedCost}). Delaying job until ${retryAt}. [gas: ${populatedTransaction.gas}, gasPrice: ${populatedTransaction.gasPrice}, maxFeePerGas: ${populatedTransaction.maxFeePerGas}]`, + ); + // token is required to acquire lock for delaying currently processing job: https://docs.bullmq.io/patterns/process-step-jobs#delaying + await job.moveToDelayed(retryAt.getTime(), token); + // throwing delayed error is required to notify bullmq worker not to complete or fail the job + throw new DelayedError("Delaying job due to gas fee override"); + } + } + // Acquire an unused nonce for this transaction. const { nonce, isRecycledNonce } = await acquireNonce({ queueId, @@ -495,8 +568,9 @@ const _sendTransaction = async ( // This call throws if the RPC rejects the transaction. let transactionHash: Hex; try { - const sendTransactionResult = - await account.sendTransaction(populatedTransaction); + const sendTransactionResult = await account.sendTransaction( + populatedTransaction, + ); transactionHash = sendTransactionResult.transactionHash; } catch (error: unknown) { // If the nonce is already seen onchain (nonce too low) or in mempool (replacement underpriced), diff --git a/yarn.lock b/yarn.lock index 5bac7d172..904cb697f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -889,10 +889,10 @@ "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" "@emotion/utils" "^1.2.1" -"@emotion/styled@11.14.0": - version "11.14.0" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.0.tgz#f47ca7219b1a295186d7661583376fcea95f0ff3" - integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA== +"@emotion/styled@11.14.1": + version "11.14.1" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.1.tgz#8c34bed2948e83e1980370305614c20955aacd1c" + integrity sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.13.5" @@ -2114,11 +2114,6 @@ resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz#2f3a8f1d688935c704dbc89132394a41029acbb8" integrity sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ== -"@lit-labs/ssr-dom-shim@^1.2.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.3.0.tgz#a28799c463177d1a0b0e5cefdc173da5ac859eb4" - integrity sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ== - "@lit/reactive-element@^1.3.0", "@lit/reactive-element@^1.6.0": version "1.6.3" resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.6.3.tgz#25b4eece2592132845d303e091bad9b04cdcfe03" @@ -2126,13 +2121,6 @@ dependencies: "@lit-labs/ssr-dom-shim" "^1.0.0" -"@lit/reactive-element@^2.0.0", "@lit/reactive-element@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-2.1.0.tgz#177148214488068ae209669040b7ce0f4dcc0d36" - integrity sha512-L2qyoZSQClcBmq0qajBVbhYEcG6iK0XfLn66ifLe/RfC0/ihpc+pl0Wdn8bJ8o+hj38cG0fGXRgSS20MuXn7qA== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.2.0" - "@lukeed/ms@^2.0.1": version "2.0.2" resolved "https://registry.yarnpkg.com/@lukeed/ms/-/ms-2.0.2.tgz#07f09e59a74c52f4d88c6db5c1054e819538e2a8" @@ -2342,6 +2330,11 @@ "@motionone/dom" "^10.16.4" tslib "^2.3.1" +"@msgpack/msgpack@3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@msgpack/msgpack/-/msgpack-3.1.2.tgz#fdd25cc2202297519798bbaf4689152ad9609e19" + integrity sha512-JEW4DEtBzfe8HvUYecLU9e6+XJnKDlUAIve8FvPzF3Kzs6Xo/KuZkZJsDH0wJXl/qEZbeeE7edxDNY3kMs39hQ== + "@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz#9edec61b22c3082018a79f6d1c30289ddf3d9d11" @@ -2382,6 +2375,11 @@ resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.2.1.tgz#3812b72c057a28b44ff0ad4aff5ca846e5b9cdc9" integrity sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA== +"@noble/ciphers@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.3.0.tgz#f64b8ff886c240e644e5573c097f86e5b43676dc" + integrity sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw== + "@noble/curves@1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" @@ -2417,6 +2415,13 @@ dependencies: "@noble/hashes" "1.7.2" +"@noble/curves@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.2.tgz#73388356ce733922396214a933ff7c95afcef911" + integrity sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g== + dependencies: + "@noble/hashes" "1.8.0" + "@noble/curves@^1.6.0", "@noble/curves@~1.7.0": version "1.7.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.7.0.tgz#0512360622439256df892f21d25b388f52505e45" @@ -2449,6 +2454,11 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== +"@noble/hashes@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.6.0": version "1.6.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.1.tgz#df6e5943edcea504bac61395926d6fd67869a0d5" @@ -2739,12 +2749,12 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" -"@radix-ui/react-arrow@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.4.tgz#08e263c692b3a56a3f1c4bdc8405b7f73f070963" - integrity sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw== +"@radix-ui/react-arrow@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz#e14a2657c81d961598c5e72b73dd6098acc04f09" + integrity sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w== dependencies: - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-compose-refs@1.0.1": version "1.0.1" @@ -2791,22 +2801,22 @@ aria-hidden "^1.1.1" react-remove-scroll "2.5.5" -"@radix-ui/react-dialog@1.1.10": - version "1.1.10" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.10.tgz#9dad3e1b268ec31302d33c147faf74ad0a503a4c" - integrity sha512-m6pZb0gEM5uHPSb+i2nKKGQi/HMSVjARMsLMWQfKDP+eJ6B+uqryHnXhpnohTWElw+vEcMk/o4wJODtdRKHwqg== +"@radix-ui/react-dialog@1.1.14": + version "1.1.14" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz#4c69c80c258bc6561398cfce055202ea11075107" + integrity sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw== dependencies: "@radix-ui/primitive" "1.1.2" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-dismissable-layer" "1.1.7" + "@radix-ui/react-dismissable-layer" "1.1.10" "@radix-ui/react-focus-guards" "1.1.2" - "@radix-ui/react-focus-scope" "1.1.4" + "@radix-ui/react-focus-scope" "1.1.7" "@radix-ui/react-id" "1.1.1" - "@radix-ui/react-portal" "1.1.6" - "@radix-ui/react-presence" "1.1.3" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.4" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-use-controllable-state" "1.2.2" aria-hidden "^1.2.4" react-remove-scroll "^2.6.3" @@ -2823,14 +2833,14 @@ "@radix-ui/react-use-callback-ref" "1.0.1" "@radix-ui/react-use-escape-keydown" "1.0.3" -"@radix-ui/react-dismissable-layer@1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.7.tgz#80b5c23a0d29cfe56850399210c603376c27091f" - integrity sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw== +"@radix-ui/react-dismissable-layer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz#429b9bada3672c6895a5d6a642aca6ecaf4f18c3" + integrity sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ== dependencies: "@radix-ui/primitive" "1.1.2" "@radix-ui/react-compose-refs" "1.1.2" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-escape-keydown" "1.1.1" @@ -2856,13 +2866,13 @@ "@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-use-callback-ref" "1.0.1" -"@radix-ui/react-focus-scope@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.4.tgz#dbe9ed31b36ff9aadadf4b59aa733a4e91799d15" - integrity sha512-r2annK27lIW5w9Ho5NyQgqs0MmgZSTIKXWpVCJaLC1q2kZrZkcqnmHkCHMEmv8XLvsLlurKMPT+kbKkRkm/xVA== +"@radix-ui/react-focus-scope@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz#dfe76fc103537d80bf42723a183773fd07bfb58d" + integrity sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw== dependencies: "@radix-ui/react-compose-refs" "1.1.2" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-icons@1.3.0": @@ -2907,16 +2917,16 @@ "@radix-ui/react-use-size" "1.0.1" "@radix-ui/rect" "1.0.1" -"@radix-ui/react-popper@1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.4.tgz#8fd6d954fca9e5d1341c7d9153cc88e05d5ed84e" - integrity sha512-3p2Rgm/a1cK0r/UVkx5F/K9v/EplfjAeIFCGOPYPO4lZ0jtg4iSQXt/YGTSLWaf4x7NG6Z4+uKFcylcTZjeqDA== +"@radix-ui/react-popper@1.2.7": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.7.tgz#531cf2eebb3d3270d58f7d8136e4517646429978" + integrity sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ== dependencies: "@floating-ui/react-dom" "^2.0.0" - "@radix-ui/react-arrow" "1.1.4" + "@radix-ui/react-arrow" "1.1.7" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-use-rect" "1.1.1" @@ -2931,12 +2941,12 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" -"@radix-ui/react-portal@1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.6.tgz#4202e1bb34afdac612e4e982eca8efd36cbc611f" - integrity sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw== +"@radix-ui/react-portal@1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.9.tgz#14c3649fe48ec474ac51ed9f2b9f5da4d91c4472" + integrity sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ== dependencies: - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-presence@1.0.1": @@ -2948,10 +2958,10 @@ "@radix-ui/react-compose-refs" "1.0.1" "@radix-ui/react-use-layout-effect" "1.0.1" -"@radix-ui/react-presence@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.3.tgz#ce3400caec9892ceb862f96ddaa2add080c09b90" - integrity sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA== +"@radix-ui/react-presence@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.4.tgz#253ac0ad4946c5b4a9c66878335f5cf07c967ced" + integrity sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA== dependencies: "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-use-layout-effect" "1.1.1" @@ -2964,12 +2974,12 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-slot" "1.0.2" -"@radix-ui/react-primitive@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.0.tgz#9233e17a22d0010195086f8b5eb1808ebbca8437" - integrity sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw== +"@radix-ui/react-primitive@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz#db9b8bcff49e01be510ad79893fb0e4cda50f1bc" + integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ== dependencies: - "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-slot@1.0.2": version "1.0.2" @@ -2979,10 +2989,10 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-compose-refs" "1.0.1" -"@radix-ui/react-slot@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.0.tgz#57727fc186ddb40724ccfbe294e1a351d92462ba" - integrity sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w== +"@radix-ui/react-slot@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.3.tgz#502d6e354fc847d4169c3bc5f189de777f68cfe1" + integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A== dependencies: "@radix-ui/react-compose-refs" "1.1.2" @@ -3005,23 +3015,23 @@ "@radix-ui/react-use-controllable-state" "1.0.1" "@radix-ui/react-visually-hidden" "1.0.3" -"@radix-ui/react-tooltip@1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.2.3.tgz#cebbceec43aa9676c882788a5f8fa683cc8b4c11" - integrity sha512-0KX7jUYFA02np01Y11NWkk6Ip6TqMNmD4ijLelYAzeIndl2aVeltjJFJ2gwjNa1P8U/dgjQ+8cr9Y3Ni+ZNoRA== +"@radix-ui/react-tooltip@1.2.7": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.2.7.tgz#23612ac7a5e8e1f6829e46d0e0ad94afe3976c72" + integrity sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw== dependencies: "@radix-ui/primitive" "1.1.2" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-dismissable-layer" "1.1.7" + "@radix-ui/react-dismissable-layer" "1.1.10" "@radix-ui/react-id" "1.1.1" - "@radix-ui/react-popper" "1.2.4" - "@radix-ui/react-portal" "1.1.6" - "@radix-ui/react-presence" "1.1.3" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-popper" "1.2.7" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.4" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-use-controllable-state" "1.2.2" - "@radix-ui/react-visually-hidden" "1.2.0" + "@radix-ui/react-visually-hidden" "1.2.3" "@radix-ui/react-use-callback-ref@1.0.1": version "1.0.1" @@ -3123,12 +3133,12 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" -"@radix-ui/react-visually-hidden@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.0.tgz#7692a590b4789bebf7e02d73e6d1390704a97920" - integrity sha512-rQj0aAWOpCdCMRbI6pLQm8r7S2BM3YhTa0SzOYD55k+hJA8oo9J+H+9wLM9oMlZWOX/wJWPTzfDfmZkf7LvCfg== +"@radix-ui/react-visually-hidden@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz#a8c38c8607735dc9f05c32f87ab0f9c2b109efbf" + integrity sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug== dependencies: - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/rect@1.0.1": version "1.0.1" @@ -3142,98 +3152,6 @@ resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb" integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw== -"@reown/appkit-common@1.7.3": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@reown/appkit-common/-/appkit-common-1.7.3.tgz#f9bf6b3d128bf79c3cd2755581621c2306d80cb1" - integrity sha512-wKTr6N3z8ly17cc51xBEVkZK4zAd8J1m7RubgsdQ1olFY9YJGe61RYoNv9yFjt6tUVeYT+z7iMUwPhX2PziefQ== - dependencies: - big.js "6.2.2" - dayjs "1.11.13" - viem ">=2.23.11" - -"@reown/appkit-controllers@1.7.3": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@reown/appkit-controllers/-/appkit-controllers-1.7.3.tgz#9137763b7bb3a95baf41741863d1da92d4e3bd95" - integrity sha512-aqAcX/nZe0gwqjncyCkVrAk3lEw0qZ9xGrdLOmA207RreO4J0Vxu8OJXCBn4C2AUI2OpBxCPah+vyuKTUJTeHQ== - dependencies: - "@reown/appkit-common" "1.7.3" - "@reown/appkit-wallet" "1.7.3" - "@walletconnect/universal-provider" "2.19.2" - valtio "1.13.2" - viem ">=2.23.11" - -"@reown/appkit-polyfills@1.7.3": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@reown/appkit-polyfills/-/appkit-polyfills-1.7.3.tgz#21895ed9521edd81898b10de16505708b05463f2" - integrity sha512-vQUiAyI7WiNTUV4iNwv27iigdeg8JJTEo6ftUowIrKZ2/gtE2YdMtGpavuztT/qrXhrIlTjDGp5CIyv9WOTu4g== - dependencies: - buffer "6.0.3" - -"@reown/appkit-scaffold-ui@1.7.3": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@reown/appkit-scaffold-ui/-/appkit-scaffold-ui-1.7.3.tgz#ea966de3ab3f992c6a8ffa408eb53906a87986f6" - integrity sha512-ssB15fcjmoKQ+VfoCo7JIIK66a4SXFpCH8uK1CsMmXmKIKqPN54ohLo291fniV6mKtnJxh5Xm68slGtGrO3bmA== - dependencies: - "@reown/appkit-common" "1.7.3" - "@reown/appkit-controllers" "1.7.3" - "@reown/appkit-ui" "1.7.3" - "@reown/appkit-utils" "1.7.3" - "@reown/appkit-wallet" "1.7.3" - lit "3.1.0" - -"@reown/appkit-ui@1.7.3": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@reown/appkit-ui/-/appkit-ui-1.7.3.tgz#a51e7397922b4ace20e991e38989065f951c3d22" - integrity sha512-zKmFIjLp0X24pF9KtPtSHmdsh/RjEWIvz+faIbPGm4tQbwcxdg9A35HeoP0rMgKYx49SX51LgPwVXne2gYacqQ== - dependencies: - "@reown/appkit-common" "1.7.3" - "@reown/appkit-controllers" "1.7.3" - "@reown/appkit-wallet" "1.7.3" - lit "3.1.0" - qrcode "1.5.3" - -"@reown/appkit-utils@1.7.3": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@reown/appkit-utils/-/appkit-utils-1.7.3.tgz#65fbd8748cae8946e069907c3f893dc6cc97452a" - integrity sha512-8/MNhmfri+2uu8WzBhZ5jm5llofOIa1dyXDXRC/hfrmGmCFJdrQKPpuqOFYoimo2s2g70pK4PYefvOKgZOWzgg== - dependencies: - "@reown/appkit-common" "1.7.3" - "@reown/appkit-controllers" "1.7.3" - "@reown/appkit-polyfills" "1.7.3" - "@reown/appkit-wallet" "1.7.3" - "@walletconnect/logger" "2.1.2" - "@walletconnect/universal-provider" "2.19.2" - valtio "1.13.2" - viem ">=2.23.11" - -"@reown/appkit-wallet@1.7.3": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@reown/appkit-wallet/-/appkit-wallet-1.7.3.tgz#77730d4457302eca7c20d696926c670197d42551" - integrity sha512-D0pExd0QUE71ursQPp3pq/0iFrz2oz87tOyFifrPANvH5X0RQCYn/34/kXr+BFVQzNFfCBDlYP+CniNA/S0KiQ== - dependencies: - "@reown/appkit-common" "1.7.3" - "@reown/appkit-polyfills" "1.7.3" - "@walletconnect/logger" "2.1.2" - zod "3.22.4" - -"@reown/appkit@1.7.3": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@reown/appkit/-/appkit-1.7.3.tgz#3d50f098ef305cf8ab59141e66ef47c316bb5f3a" - integrity sha512-aA/UIwi/dVzxEB62xlw3qxHa3RK1YcPMjNxoGj/fHNCqL2qWmbcOXT7coCUa9RG7/Bh26FZ3vdVT2v71j6hebQ== - dependencies: - "@reown/appkit-common" "1.7.3" - "@reown/appkit-controllers" "1.7.3" - "@reown/appkit-polyfills" "1.7.3" - "@reown/appkit-scaffold-ui" "1.7.3" - "@reown/appkit-ui" "1.7.3" - "@reown/appkit-utils" "1.7.3" - "@reown/appkit-wallet" "1.7.3" - "@walletconnect/types" "2.19.2" - "@walletconnect/universal-provider" "2.19.2" - bs58 "6.0.0" - valtio "1.13.2" - viem ">=2.23.11" - "@rollup/rollup-android-arm-eabi@4.28.1": version "4.28.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz#7f4c4d8cd5ccab6e95d6750dbe00321c1f30791e" @@ -3389,6 +3307,11 @@ "@safe-global/safe-core-sdk-utils" "^1.7.4" ethers "5.7.2" +"@scure/base@1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" + integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== + "@scure/base@^1.1.3", "@scure/base@~1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.1.tgz#dd0b2a533063ca612c17aa9ad26424a2ff5aa865" @@ -3997,6 +3920,24 @@ "@stablelib/random" "^1.0.2" "@stablelib/wipe" "^1.0.1" +"@storybook/global@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" + integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== + +"@storybook/react-dom-shim@9.0.15": + version "9.0.15" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-9.0.15.tgz#5c98ad2a3ead9c4ac1136d75d4e1e08e25fc6443" + integrity sha512-X5VlYKoZSIMU9HEshIwtNzp41nPt4kiJtJ2c5HzFa5F6M8rEHM5n059CGcCZQqff3FnZtK/y6v/kCVZO+8oETA== + +"@storybook/react@9.0.15": + version "9.0.15" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-9.0.15.tgz#e59913879baf6043dd2828cf1818d33f8839588c" + integrity sha512-hewpSH8Ij4Bg7S9Tfw7ecfGPv7YDycRxsfpsDX7Mw3JhLuCdqjpmmTL2RgoNojg7TAW3FPdixcgQi/b4PH50ag== + dependencies: + "@storybook/global" "^5.0.0" + "@storybook/react-dom-shim" "9.0.15" + "@t3-oss/env-core@^0.6.0": version "0.6.1" resolved "https://registry.yarnpkg.com/@t3-oss/env-core/-/env-core-0.6.1.tgz#24d04c22f3e73732e69ac8ff8b13ed00732d20aa" @@ -4007,10 +3948,10 @@ resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.29.0.tgz#d0b3d12c07d5a47f42ab0c1ed4f317106f3d4b20" integrity sha512-WgPTRs58hm9CMzEr5jpISe8HXa3qKQ8CxewdYZeVnA54JrPY9B1CZiwsCoLpLkf0dGRZq+LcX5OiJb0bEsOFww== -"@tanstack/query-core@5.74.4": - version "5.74.4" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.74.4.tgz#08c4f88f336738d822d9242c5e7d2be50f5c25b3" - integrity sha512-YuG0A0+3i9b2Gfo9fkmNnkUWh5+5cFhWBN0pJAHkHilTx6A0nv8kepkk4T4GRt4e5ahbtFj2eTtkiPcVU1xO4A== +"@tanstack/query-core@5.81.5": + version "5.81.5" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.81.5.tgz#14e0cc778bad8bc11d1cf130709910d8a353bb73" + integrity sha512-ZJOgCy/z2qpZXWaj/oxvodDx07XcQa9BF92c0oINjHkoqUPsmm3uG08HpTaviviZ/N9eP1f9CM7mKSEkIo7O1Q== "@tanstack/react-query@5.29.2": version "5.29.2" @@ -4019,12 +3960,12 @@ dependencies: "@tanstack/query-core" "5.29.0" -"@tanstack/react-query@5.74.4": - version "5.74.4" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.74.4.tgz#d73ee1899c08a227519cbf53b9a0e0b1e67cd3fe" - integrity sha512-mAbxw60d4ffQ4qmRYfkO1xzRBPUEf/72Dgo3qqea0J66nIKuDTLEqQt0ku++SDFlMGMnB6uKDnEG1xD/TDse4Q== +"@tanstack/react-query@5.81.5": + version "5.81.5" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.81.5.tgz#660dba8bb35f24c4cf3617b299a1e3990a3bb49e" + integrity sha512-lOf2KqRRiYWpQT86eeeftAGnjuTR35myTP8MXyvHa81VlomoAWNEd8x5vkcAfQefu0qtYCvyqLropFZqgI2EQw== dependencies: - "@tanstack/query-core" "5.74.4" + "@tanstack/query-core" "5.81.5" "@thirdweb-dev/auth@^4.1.87": version "4.1.97" @@ -4074,10 +4015,10 @@ resolved "https://registry.yarnpkg.com/@thirdweb-dev/dynamic-contracts/-/dynamic-contracts-1.2.5.tgz#f9735c0d46198e7bf2f98c277f0a9a79c54da1e8" integrity sha512-YVsz+jUWbwj+6aF2eTZGMfyw47a1HRmgNl4LQ3gW9gwYL5y5+OX/yOzv6aV5ibvoqCk/k10aIVK2eFrcpMubQA== -"@thirdweb-dev/engine@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@thirdweb-dev/engine/-/engine-3.0.1.tgz#df4d1f201775d88c5f87283982187349047047e9" - integrity sha512-RlVwiqWC9n8pBO2dCMKoRxZ6llB3ojH0qydpyzLlqX4nBT/cfFxxzOz/V+BzuEvKIfv3DUozvkCKUBJ8A18fgg== +"@thirdweb-dev/engine@3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/engine/-/engine-3.2.1.tgz#22bdb941defa58df8494cffbb2cca7dce4d74183" + integrity sha512-JIIRmBjTSaLjIBk9h3QevCb3V5xXJlCEgjuAqbtviiCJKky+/9zr6IZBbZtO2w9Rq3F7PH+5pDFOKlwRpGU/kw== dependencies: "@hey-api/client-fetch" "0.10.0" @@ -4086,13 +4027,10 @@ resolved "https://registry.yarnpkg.com/@thirdweb-dev/generated-abis/-/generated-abis-0.0.2.tgz#d0e4f51011ba2ce2bbc266c8a295b04ffd523bab" integrity sha512-FztTzU0KF5u8usNBN5/5s4Ys082p+HwsMI9DfFqOBILm4OwEueLY4B5DbXjF1KlTIuqjGeMGmFDG98MXHUt73A== -"@thirdweb-dev/insight@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@thirdweb-dev/insight/-/insight-1.0.0.tgz#a23d174ca27cbd0e19fb5162d8103b61b5fc62d3" - integrity sha512-7A84reyKVhFSZXzKiuUYLgllPqyDQjZj5MebasetkCAB0VK8L0cv09VrfiBOd+eJDvJkhJfnAV/q3ujXegsVfg== - dependencies: - "@hey-api/client-fetch" "0.10.0" - tslib "^2.8.1" +"@thirdweb-dev/insight@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/insight/-/insight-1.1.1.tgz#e17673be7a4f8d3b0fe81e8505e2158247505273" + integrity sha512-24oRscLTW9Mod+XpyLlusLxZIZjqQv0XFNSV4lR5u9eoRPaA/BG2HtlVPr0DUtguzTbEyBz98++s5UWleqchVg== "@thirdweb-dev/merkletree@0.2.6": version "0.2.6" @@ -4560,10 +4498,10 @@ lodash.isequal "4.5.0" uint8arrays "3.1.0" -"@walletconnect/core@2.19.2": - version "2.19.2" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.19.2.tgz#4bf3918dd8041843a1b796e2c4e1f101363d72a4" - integrity sha512-iu0mgLj51AXcKpdNj8+4EdNNBd/mkNjLEhZn6UMc/r7BM9WbmpPMEydA39WeRLbdLO4kbpmq4wTbiskI1rg+HA== +"@walletconnect/core@2.20.1": + version "2.20.1" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.20.1.tgz#dc854a1b29e911c1f4dcec3a02ab3c343d235cd8" + integrity sha512-DxybNfznr7aE/U9tJqvpEorUW2f/6kR0S1Zk78NqKam1Ex+BQFDM5j2Az3WayfFDZz3adkxkLAszfdorvPxDlw== dependencies: "@walletconnect/heartbeat" "1.2.2" "@walletconnect/jsonrpc-provider" "1.0.14" @@ -4576,17 +4514,17 @@ "@walletconnect/relay-auth" "1.1.0" "@walletconnect/safe-json" "1.0.2" "@walletconnect/time" "1.0.2" - "@walletconnect/types" "2.19.2" - "@walletconnect/utils" "2.19.2" + "@walletconnect/types" "2.20.1" + "@walletconnect/utils" "2.20.1" "@walletconnect/window-getters" "1.0.1" es-toolkit "1.33.0" events "3.3.0" uint8arrays "3.1.0" -"@walletconnect/core@2.20.1": - version "2.20.1" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.20.1.tgz#dc854a1b29e911c1f4dcec3a02ab3c343d235cd8" - integrity sha512-DxybNfznr7aE/U9tJqvpEorUW2f/6kR0S1Zk78NqKam1Ex+BQFDM5j2Az3WayfFDZz3adkxkLAszfdorvPxDlw== +"@walletconnect/core@2.21.4": + version "2.21.4" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.21.4.tgz#0c0ede9ae7603743a1de008602c03ca8746bfda6" + integrity sha512-XtwPUCj3bCNX/2yjYGlQyvcsn32wkzixCjyWOD4pdKFVk7opZPAdF4xr85rmo6nJ7AiBYxjV1IH0bemTPEdE6Q== dependencies: "@walletconnect/heartbeat" "1.2.2" "@walletconnect/jsonrpc-provider" "1.0.14" @@ -4599,12 +4537,12 @@ "@walletconnect/relay-auth" "1.1.0" "@walletconnect/safe-json" "1.0.2" "@walletconnect/time" "1.0.2" - "@walletconnect/types" "2.20.1" - "@walletconnect/utils" "2.20.1" + "@walletconnect/types" "2.21.4" + "@walletconnect/utils" "2.21.4" "@walletconnect/window-getters" "1.0.1" - es-toolkit "1.33.0" + es-toolkit "1.39.3" events "3.3.0" - uint8arrays "3.1.0" + uint8arrays "3.1.1" "@walletconnect/environment@^1.0.1": version "1.0.1" @@ -4629,23 +4567,6 @@ "@walletconnect/utils" "2.12.2" events "^3.3.0" -"@walletconnect/ethereum-provider@2.20.1": - version "2.20.1" - resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.20.1.tgz#942d516e4f14e463c7a43dbed91f214393dd4853" - integrity sha512-D/T7ctrVHSSCxKGPIRpWR3ICAU4Q5jKsUkYhaW3C8LFeIpgXoCllZHVgjYBmgjicqjT3faixIZ1tgmJmOeuY6g== - dependencies: - "@reown/appkit" "1.7.3" - "@walletconnect/jsonrpc-http-connection" "1.0.8" - "@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.20.1" - "@walletconnect/types" "2.20.1" - "@walletconnect/universal-provider" "2.20.1" - "@walletconnect/utils" "2.20.1" - events "3.3.0" - "@walletconnect/events@1.0.1", "@walletconnect/events@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" @@ -4854,34 +4775,34 @@ "@walletconnect/utils" "2.17.1" events "3.3.0" -"@walletconnect/sign-client@2.19.2": - version "2.19.2" - resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.19.2.tgz#6b728fd8b1ebf8f47b231bedf56b725de660633d" - integrity sha512-a/K5PRIFPCjfHq5xx3WYKHAAF8Ft2I1LtxloyibqiQOoUtNLfKgFB1r8sdMvXM7/PADNPe4iAw4uSE6PrARrfg== +"@walletconnect/sign-client@2.20.1": + version "2.20.1" + resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.20.1.tgz#56fce57837c197055724b57dcefc6280fa3eade0" + integrity sha512-QXzIAHbyZZ52+97Bp/+/SBkN3hX0pam8l4lnA4P7g+aFPrVZUrMwZPIf+FV7UbEswqqwo3xmFI41TKgj8w8B9w== dependencies: - "@walletconnect/core" "2.19.2" + "@walletconnect/core" "2.20.1" "@walletconnect/events" "1.0.1" "@walletconnect/heartbeat" "1.2.2" "@walletconnect/jsonrpc-utils" "1.0.8" "@walletconnect/logger" "2.1.2" "@walletconnect/time" "1.0.2" - "@walletconnect/types" "2.19.2" - "@walletconnect/utils" "2.19.2" + "@walletconnect/types" "2.20.1" + "@walletconnect/utils" "2.20.1" events "3.3.0" -"@walletconnect/sign-client@2.20.1": - version "2.20.1" - resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.20.1.tgz#56fce57837c197055724b57dcefc6280fa3eade0" - integrity sha512-QXzIAHbyZZ52+97Bp/+/SBkN3hX0pam8l4lnA4P7g+aFPrVZUrMwZPIf+FV7UbEswqqwo3xmFI41TKgj8w8B9w== +"@walletconnect/sign-client@2.21.4": + version "2.21.4" + resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.21.4.tgz#61ace46547792feb84626846ef755c5c3d76eea0" + integrity sha512-v1OJ9IQCZAqaDEUYGFnGLe2fSp8DN9cv7j8tUYm5ngiFK7h6LjP4Ew3gGCca4AHWzMFkHuIRNQ+6Ypep1K/B7g== dependencies: - "@walletconnect/core" "2.20.1" + "@walletconnect/core" "2.21.4" "@walletconnect/events" "1.0.1" "@walletconnect/heartbeat" "1.2.2" "@walletconnect/jsonrpc-utils" "1.0.8" "@walletconnect/logger" "2.1.2" "@walletconnect/time" "1.0.2" - "@walletconnect/types" "2.20.1" - "@walletconnect/utils" "2.20.1" + "@walletconnect/types" "2.21.4" + "@walletconnect/utils" "2.21.4" events "3.3.0" "@walletconnect/sign-client@^2.13.1": @@ -4942,10 +4863,10 @@ "@walletconnect/logger" "2.1.2" events "3.3.0" -"@walletconnect/types@2.19.2": - version "2.19.2" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.19.2.tgz#3518cffdd74a7d07a110c9da5da939c1b185e837" - integrity sha512-/LZWhkVCUN+fcTgQUxArxhn2R8DF+LSd/6Wh9FnpjeK/Sdupx1EPS8okWG6WPAqq2f404PRoNAfQytQ82Xdl3g== +"@walletconnect/types@2.20.1": + version "2.20.1" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.20.1.tgz#8956e5c610430349ae5f49a2a09547fe16d055a7" + integrity sha512-HM0YZxT+wNqskoZkuju5owbKTlqUXNKfGlJk/zh9pWaVWBR2QamvQ+47Cx09OoGPRQjQH0JmgRiUV4bOwWNeHg== dependencies: "@walletconnect/events" "1.0.1" "@walletconnect/heartbeat" "1.2.2" @@ -4954,10 +4875,10 @@ "@walletconnect/logger" "2.1.2" events "3.3.0" -"@walletconnect/types@2.20.1": - version "2.20.1" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.20.1.tgz#8956e5c610430349ae5f49a2a09547fe16d055a7" - integrity sha512-HM0YZxT+wNqskoZkuju5owbKTlqUXNKfGlJk/zh9pWaVWBR2QamvQ+47Cx09OoGPRQjQH0JmgRiUV4bOwWNeHg== +"@walletconnect/types@2.21.4": + version "2.21.4" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.21.4.tgz#6c9585321ca97c0d5b512bceff27c67d62deba15" + integrity sha512-6O61esDSW8FZNdFezgB4bX2S35HM6tCwBEjGHNB8JeoKCfpXG33hw2raU/SBgBL/jmM57QRW4M1aFH7v1u9z7g== dependencies: "@walletconnect/events" "1.0.1" "@walletconnect/heartbeat" "1.2.2" @@ -4981,10 +4902,10 @@ "@walletconnect/utils" "2.12.2" events "^3.3.0" -"@walletconnect/universal-provider@2.19.2": - version "2.19.2" - resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.19.2.tgz#a87d2c5da01a16ac8c107adcd27ee8c894e2331b" - integrity sha512-LkKg+EjcSUpPUhhvRANgkjPL38wJPIWumAYD8OK/g4OFuJ4W3lS/XTCKthABQfFqmiNbNbVllmywiyE44KdpQg== +"@walletconnect/universal-provider@2.21.4": + version "2.21.4" + resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.21.4.tgz#d68c8b0bbdb3c76669f6cc1ba44744811580d14f" + integrity sha512-ZSYU5H7Zi/nEy3L21kw5l3ovMagrbXDRKBG8vjPpGQAkflQocRj6d0SesFOCBEdJS16nt+6dKI2f5blpOGzyTQ== dependencies: "@walletconnect/events" "1.0.1" "@walletconnect/jsonrpc-http-connection" "1.0.8" @@ -4993,28 +4914,10 @@ "@walletconnect/jsonrpc-utils" "1.0.8" "@walletconnect/keyvaluestorage" "1.1.1" "@walletconnect/logger" "2.1.2" - "@walletconnect/sign-client" "2.19.2" - "@walletconnect/types" "2.19.2" - "@walletconnect/utils" "2.19.2" - es-toolkit "1.33.0" - events "3.3.0" - -"@walletconnect/universal-provider@2.20.1": - version "2.20.1" - resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.20.1.tgz#8a553ce51c67460c15c29631d2193b8d4c555f67" - integrity sha512-0WfO4Unb+8UMEUr65vrVjd/a/3tF5059KLP7gX2kaDFjXXOma1/cjq/9/STd3hbHB8LKfxpXvOty97vuD8xfWQ== - dependencies: - "@walletconnect/events" "1.0.1" - "@walletconnect/jsonrpc-http-connection" "1.0.8" - "@walletconnect/jsonrpc-provider" "1.0.14" - "@walletconnect/jsonrpc-types" "1.0.4" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/keyvaluestorage" "1.1.1" - "@walletconnect/logger" "2.1.2" - "@walletconnect/sign-client" "2.20.1" - "@walletconnect/types" "2.20.1" - "@walletconnect/utils" "2.20.1" - es-toolkit "1.33.0" + "@walletconnect/sign-client" "2.21.4" + "@walletconnect/types" "2.21.4" + "@walletconnect/utils" "2.21.4" + es-toolkit "1.39.3" events "3.3.0" "@walletconnect/utils@2.12.2": @@ -5089,10 +4992,10 @@ query-string "7.1.3" uint8arrays "3.1.0" -"@walletconnect/utils@2.19.2": - version "2.19.2" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.19.2.tgz#90259b69367e30ccd13cf8252547a6850ca5fb2e" - integrity sha512-VU5CcUF4sZDg8a2/ov29OJzT3KfLuZqJUM0GemW30dlipI5fkpb0VPenZK7TcdLPXc1LN+Q+7eyTqHRoAu/BIA== +"@walletconnect/utils@2.20.1": + version "2.20.1" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.20.1.tgz#432689b559b573e14237b9f0f555835617e3cb84" + integrity sha512-u/uyJkVyxLLUbHbpMv7MmuOkGfElG08l6P2kMTAfN7nAVyTgpb8g6kWLMNqfmYXVz+h+finf5FSV4DgL2vOvPQ== dependencies: "@noble/ciphers" "1.2.1" "@noble/curves" "1.8.1" @@ -5103,7 +5006,7 @@ "@walletconnect/relay-auth" "1.1.0" "@walletconnect/safe-json" "1.0.2" "@walletconnect/time" "1.0.2" - "@walletconnect/types" "2.19.2" + "@walletconnect/types" "2.20.1" "@walletconnect/window-getters" "1.0.1" "@walletconnect/window-metadata" "1.0.1" bs58 "6.0.0" @@ -5112,28 +5015,31 @@ uint8arrays "3.1.0" viem "2.23.2" -"@walletconnect/utils@2.20.1": - version "2.20.1" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.20.1.tgz#432689b559b573e14237b9f0f555835617e3cb84" - integrity sha512-u/uyJkVyxLLUbHbpMv7MmuOkGfElG08l6P2kMTAfN7nAVyTgpb8g6kWLMNqfmYXVz+h+finf5FSV4DgL2vOvPQ== +"@walletconnect/utils@2.21.4": + version "2.21.4" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.21.4.tgz#cab0ffa0c393944923ca001d76026b9386c50a30" + integrity sha512-LuSyBXvRLiDqIu4uMFei5eJ/WPhkIkdW58fmDlRnryatIuBPCho3dlrNSbOjVSdsID+OvxjOlpPLi+5h4oTbaA== dependencies: - "@noble/ciphers" "1.2.1" - "@noble/curves" "1.8.1" - "@noble/hashes" "1.7.1" + "@msgpack/msgpack" "3.1.2" + "@noble/ciphers" "1.3.0" + "@noble/curves" "1.9.2" + "@noble/hashes" "1.8.0" + "@scure/base" "1.2.6" "@walletconnect/jsonrpc-utils" "1.0.8" "@walletconnect/keyvaluestorage" "1.1.1" "@walletconnect/relay-api" "1.0.11" "@walletconnect/relay-auth" "1.1.0" "@walletconnect/safe-json" "1.0.2" "@walletconnect/time" "1.0.2" - "@walletconnect/types" "2.20.1" + "@walletconnect/types" "2.21.4" "@walletconnect/window-getters" "1.0.1" "@walletconnect/window-metadata" "1.0.1" + blakejs "1.2.1" bs58 "6.0.0" detect-browser "5.3.0" query-string "7.1.3" - uint8arrays "3.1.0" - viem "2.23.2" + uint8arrays "3.1.1" + viem "2.31.0" "@walletconnect/web3wallet@^1.12.2": version "1.16.1" @@ -5469,11 +5375,6 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -big.js@6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.2.tgz#be3bb9ac834558b53b099deef2a1d06ac6368e1a" - integrity sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ== - bignumber.js@^9.0.0, bignumber.js@^9.0.1: version "9.1.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" @@ -5489,7 +5390,7 @@ bintrees@1.0.2: resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== -blakejs@^1.1.0: +blakejs@1.2.1, blakejs@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== @@ -5681,7 +5582,7 @@ buffer@4.9.2, buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@6.0.3, buffer@^6.0.3: +buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== @@ -6246,11 +6147,6 @@ d@1, d@^1.0.1, d@^1.0.2: es5-ext "^0.10.64" type "^2.7.2" -dayjs@1.11.13: - version "1.11.13" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" - integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== - dc-polyfill@^0.1.4: version "0.1.6" resolved "https://registry.yarnpkg.com/dc-polyfill/-/dc-polyfill-0.1.6.tgz#c2940fa68ffb24a7bf127cc6cfdd15b39f0e7f02" @@ -6403,11 +6299,6 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -derive-valtio@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/derive-valtio/-/derive-valtio-0.1.0.tgz#4b9fb393dfefccfef15fcbbddd745dd22d5d63d7" - integrity sha512-OCg2UsLbXK7GmmpzMXhYkdO64vhJ1ROUUGaTFyHjVwEdMEcTTRj7W1TxLbSBxdY8QLBPCcp66MTyaSy0RpO17A== - des.js@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" @@ -6621,6 +6512,11 @@ es-toolkit@1.33.0: resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.33.0.tgz#bcc9d92ef2e1ed4618c00dd30dfda9faddf4a0b7" integrity sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg== +es-toolkit@1.39.3: + version "1.39.3" + resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.39.3.tgz#934b2cab9578c496dcbc0305cae687258cb14aee" + integrity sha512-Qb/TCFCldgOy8lZ5uC7nLGdqJwSabkQiYQShmw4jyiPk1pZzaYWTwaYKYP7EgLccWYgZocMrtItrwh683voaww== + es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.63, es5-ext@^0.10.64, es5-ext@~0.10.14: version "0.10.64" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" @@ -8463,15 +8359,6 @@ lit-element@^3.3.0: "@lit/reactive-element" "^1.3.0" lit-html "^2.8.0" -lit-element@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-4.2.0.tgz#75dcf9e5fae3e3b5fd3f02a5d297c582d0bb0ba3" - integrity sha512-MGrXJVAI5x+Bfth/pU9Kst1iWID6GHDLEzFEnyULB/sFiRLgkd8NPK/PeeXxktA3T6EIIaq8U3KcbTU5XFcP2Q== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.2.0" - "@lit/reactive-element" "^2.1.0" - lit-html "^3.3.0" - lit-html@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-2.8.0.tgz#96456a4bb4ee717b9a7d2f94562a16509d39bffa" @@ -8479,13 +8366,6 @@ lit-html@^2.8.0: dependencies: "@types/trusted-types" "^2.0.2" -lit-html@^3.1.0, lit-html@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-3.3.0.tgz#f66c734a6c69dbb12abf9a718fa5d3dfb46d0b7c" - integrity sha512-RHoswrFAxY2d8Cf2mm4OZ1DgzCoBKUKSPvA1fhtSELxUERq2aQQ2h05pO9j81gS1o7RIRJ+CePLogfyahwmynw== - dependencies: - "@types/trusted-types" "^2.0.2" - lit@2.8.0, lit@^2.2.3: version "2.8.0" resolved "https://registry.yarnpkg.com/lit/-/lit-2.8.0.tgz#4d838ae03059bf9cafa06e5c61d8acc0081e974e" @@ -8495,15 +8375,6 @@ lit@2.8.0, lit@^2.2.3: lit-element "^3.3.0" lit-html "^2.8.0" -lit@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lit/-/lit-3.1.0.tgz#76429b85dc1f5169fed499a0f7e89e2e619010c9" - integrity sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w== - dependencies: - "@lit/reactive-element" "^2.0.0" - lit-element "^4.0.0" - lit-html "^3.1.0" - localforage@^1.7.4: version "1.10.0" resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" @@ -9817,11 +9688,6 @@ proxy-compare@2.5.1: resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.1.tgz#17818e33d1653fbac8c2ec31406bce8a2966f600" integrity sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== -proxy-compare@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.6.0.tgz#5e8c8b5c3af7e7f17e839bf6cf1435bcc4d315b0" - integrity sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw== - proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -10747,26 +10613,27 @@ thirdweb@5.29.6: uqr "0.1.2" viem "2.13.7" -thirdweb@^5.100.1: - version "5.100.1" - resolved "https://registry.yarnpkg.com/thirdweb/-/thirdweb-5.100.1.tgz#1ff4e1148b2c9aa56867ea1dd9882df249abd5c9" - integrity sha512-l6tStEQ35UBIWF7yKX+sX62zct8t2rD8Z0jV19T6gJs+Ow19p1jEW3HwjWaK6i/3vCn89IaH1xI/VmuNFaxusw== +thirdweb@^5.105.42: + version "5.105.42" + resolved "https://registry.yarnpkg.com/thirdweb/-/thirdweb-5.105.42.tgz#c166773f72ad576d55923dbd5b199512aae91411" + integrity sha512-tRe/mzMMOhVk4l3jE/dgT8TeffqvdRLOL15DahNkLFIsMt65wqAgOtOtwZFMf3moVcZcd+ou20rZKBpJ0hc1FA== dependencies: "@coinbase/wallet-sdk" "4.3.0" "@emotion/react" "11.14.0" - "@emotion/styled" "11.14.0" + "@emotion/styled" "11.14.1" "@noble/curves" "1.8.2" "@noble/hashes" "1.7.2" "@passwordless-id/webauthn" "^2.1.2" - "@radix-ui/react-dialog" "1.1.10" - "@radix-ui/react-focus-scope" "1.1.4" + "@radix-ui/react-dialog" "1.1.14" + "@radix-ui/react-focus-scope" "1.1.7" "@radix-ui/react-icons" "1.3.2" - "@radix-ui/react-tooltip" "1.2.3" - "@tanstack/react-query" "5.74.4" - "@thirdweb-dev/engine" "3.0.1" - "@thirdweb-dev/insight" "1.0.0" - "@walletconnect/ethereum-provider" "2.20.1" + "@radix-ui/react-tooltip" "1.2.7" + "@storybook/react" "9.0.15" + "@tanstack/react-query" "5.81.5" + "@thirdweb-dev/engine" "3.2.1" + "@thirdweb-dev/insight" "1.1.1" "@walletconnect/sign-client" "2.20.1" + "@walletconnect/universal-provider" "2.21.4" abitype "1.0.8" cross-spawn "7.0.6" fuse.js "7.1.0" @@ -10776,9 +10643,11 @@ thirdweb@^5.100.1: ora "8.2.0" ox "0.7.0" prompts "2.4.2" + qrcode "1.5.3" toml "3.0.0" uqr "0.1.2" - viem "2.28.1" + viem "2.33.2" + zod "3.25.75" thread-stream@^0.15.1: version "0.15.2" @@ -10977,6 +10846,13 @@ uint8arrays@3.1.0: dependencies: multiformats "^9.4.2" +uint8arrays@3.1.1, uint8arrays@^3.0.0, uint8arrays@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" + integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== + dependencies: + multiformats "^9.4.2" + uint8arrays@^2.1.3: version "2.1.10" resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-2.1.10.tgz#34d023c843a327c676e48576295ca373c56e286a" @@ -10984,13 +10860,6 @@ uint8arrays@^2.1.3: dependencies: multiformats "^9.4.2" -uint8arrays@^3.0.0, uint8arrays@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" - integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== - dependencies: - multiformats "^9.4.2" - uncrypto@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" @@ -11195,15 +11064,6 @@ valtio@1.11.2: proxy-compare "2.5.1" use-sync-external-store "1.2.0" -valtio@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.13.2.tgz#e31d452d5da3550935417670aafd34d832dc7241" - integrity sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A== - dependencies: - derive-valtio "0.1.0" - proxy-compare "2.6.0" - use-sync-external-store "1.2.0" - varint@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" @@ -11214,7 +11074,7 @@ varint@^6.0.0: resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== -viem@2.13.7, viem@2.22.17, viem@2.23.2, viem@2.28.1, viem@>=2.23.11: +viem@2.13.7, viem@2.22.17, viem@2.23.2, viem@2.31.0, viem@2.33.2: version "2.22.17" resolved "https://registry.yarnpkg.com/viem/-/viem-2.22.17.tgz#71cb5793d898e7850d440653b0043803c2d00c8d" integrity sha512-eqNhlPGgRLR29XEVUT2uuaoEyMiaQZEKx63xT1py9OYsE+ZwlVgjnfrqbXad7Flg2iJ0Bs5Hh7o0FfRWUJGHvg== @@ -11784,16 +11644,16 @@ zod-to-json-schema@^3.23.0: resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.1.tgz#f08c6725091aadabffa820ba8d50c7ab527f227a" integrity sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w== -zod@3.22.4: - version "3.22.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" - integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== - zod@3.23.8: version "3.23.8" resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== +zod@3.25.75: + version "3.25.75" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.75.tgz#8ff9be2fbbcb381a9236f9f74a8879ca29dcc504" + integrity sha512-OhpzAmVzabPOL6C3A3gpAifqr9MqihV/Msx3gor2b2kviCgcb+HM9SEOpMWwwNp9MRunWnhtAKUoo0AHhjyPPg== + zod@^3.21.4, zod@^3.22.4, zod@^3.23.8: version "3.24.1" resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.1.tgz#27445c912738c8ad1e9de1bea0359fa44d9d35ee"