From 067d5da3cb66e46953a93993419cf25591d2b053 Mon Sep 17 00:00:00 2001 From: Prithvish Baidya Date: Fri, 4 Jul 2025 14:30:01 +0530 Subject: [PATCH 1/8] feat: add gasFeeCeiling to transaction overrides and handling logic (#905) --- src/server/schemas/tx-overrides.ts | 7 ++ src/server/utils/transaction-overrides.ts | 1 + src/shared/db/transactions/queue-tx.ts | 1 + src/shared/utils/transaction/types.ts | 1 + src/worker/tasks/send-transaction-worker.ts | 81 +++++++++++++++++---- 5 files changed, 77 insertions(+), 14 deletions(-) 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/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..21615b5a4 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", @@ -300,18 +304,36 @@ const _sendUserOp = async ( 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,7 +353,9 @@ 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`; const erroredTransaction: ErroredTransaction = { ...queuedTransaction, status: "errored", @@ -356,7 +380,9 @@ 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`; const erroredTransaction: ErroredTransaction = { ...queuedTransaction, status: "errored", @@ -478,6 +504,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 +547,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), From 60d9d977de489f8abe4045364f67fa0a26925b87 Mon Sep 17 00:00:00 2001 From: Prithvish Baidya Date: Fri, 8 Aug 2025 07:54:28 +0530 Subject: [PATCH 2/8] fix: improve return data formatting in readContract function by using stringify and JSON.parse (#909) --- src/server/routes/contract/read/read.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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, }); }, }); From b320e2717bf4d840e8b2185918df7c2f73478d0e Mon Sep 17 00:00:00 2001 From: Firekeeper <0xFirekeeper@gmail.com> Date: Wed, 13 Aug 2025 00:48:29 +0700 Subject: [PATCH 3/8] Handle 'incorrect account sequence' in nonce error check (#910) Added support for detecting errors with the message 'incorrect account sequence' in the isNonceAlreadyUsedError utility. This improves error handling for cases where the nonce is invalid due to account sequence issues. --- src/shared/utils/error.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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") ); } From 357c402e2a822c6d3069d2f8e7cf2252cdd48c8c Mon Sep 17 00:00:00 2001 From: Prithvish Baidya Date: Thu, 21 Aug 2025 05:05:53 +0530 Subject: [PATCH 4/8] feat: implement NFT collection deployment for a specific contract in prebuilt route (#911) Added functionality to deploy NFT collections using contracts within the prebuilt deployment route. This includes parsing contract metadata, uploading to storage, and preparing deployment transactions with appropriate initializer parameters. Also defined the ABI for the NFT collection contract. --- src/server/routes/deploy/prebuilt.ts | 1645 ++++++++++++++++++++++++++ 1 file changed, 1645 insertions(+) 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; From bd30727827d291898ff8b822e56a675d2f664a4c Mon Sep 17 00:00:00 2001 From: Prithvish Baidya Date: Fri, 5 Sep 2025 00:50:20 +0530 Subject: [PATCH 5/8] better keypair auth error message (#913) --- src/server/middleware/auth.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) 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); From de9c9dfccc3f8346e80dd5eeceeed2377f4136fc Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Tue, 9 Sep 2025 23:29:19 +1200 Subject: [PATCH 6/8] Update thirdweb to 5.105.42 (#914) --- package.json | 2 +- yarn.lock | 598 ++++++++++++++++++++------------------------------- 2 files changed, 230 insertions(+), 370 deletions(-) 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/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" From 1915c53061b3043e357c3c1d341d87c8740749b3 Mon Sep 17 00:00:00 2001 From: Prithvish Baidya Date: Fri, 12 Sep 2025 09:19:57 +0530 Subject: [PATCH 7/8] feat: add experimental retry for prepareUserOp errors in transaction processing (#916) Introduced a new environment variable EXPERIMENTAL__RETRY_PREPARE_USEROP_ERRORS to enable retrying on prepareUserOp errors instead of failing the transaction immediately. Updated transaction handling logic to support this feature. --- src/shared/utils/env.ts | 4 +++ src/worker/tasks/send-transaction-worker.ts | 27 ++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) 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/worker/tasks/send-transaction-worker.ts b/src/worker/tasks/send-transaction-worker.ts index 21615b5a4..2530eea49 100644 --- a/src/worker/tasks/send-transaction-worker.ts +++ b/src/worker/tasks/send-transaction-worker.ts @@ -295,12 +295,19 @@ 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; } @@ -356,12 +363,19 @@ const _sendUserOp = async ( 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; } @@ -383,12 +397,19 @@ const _sendUserOp = async ( 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; } From 086bad6b5a257d3647677c4013e97968f022e8e0 Mon Sep 17 00:00:00 2001 From: Prithvish Baidya Date: Thu, 18 Sep 2025 02:03:04 +0530 Subject: [PATCH 8/8] fix: correct toAddress assignment in transaction queueing logic (#917) --- src/server/routes/backend-wallet/transfer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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,