anchor-sdk 0.1.43-beta.1 → 0.1.43-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.d.ts +1 -1
- package/dist/generated/Api.d.ts +199 -197
- package/dist/index.js +3 -1379
- package/dist/index.js.map +12 -11
- package/dist/react/index.js +3 -8
- package/dist/react/index.js.map +19 -0
- package/package.json +15 -15
- package/dist/AnchorApiClientV2.d.ts.map +0 -1
- package/dist/AnchorApiClientV2.js +0 -358
- package/dist/AnchorERC1155Client.d.ts.map +0 -1
- package/dist/AnchorERC1155Client.js +0 -301
- package/dist/AnchorPayClient.d.ts.map +0 -1
- package/dist/AnchorPayClient.js +0 -908
- package/dist/abi/AnchorERC1155.d.ts.map +0 -1
- package/dist/abi/AnchorERC1155.js +0 -1122
- package/dist/abi/AnchorPay.json +0 -578
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -367
- package/dist/generated/Api.d.ts.map +0 -1
- package/dist/generated/Api.js +0 -868
- package/dist/index.d.ts.map +0 -1
- package/dist/react/AnchorReactSDK.js +0 -192
- package/dist/typechain/AnchorERC1155.d.ts.map +0 -1
- package/dist/typechain/AnchorERC1155.js +0 -2
- package/dist/typechain/AnchorPay.d.ts.map +0 -1
- package/dist/typechain/AnchorPay.js +0 -2
- package/dist/typechain/common.d.ts.map +0 -1
- package/dist/typechain/common.js +0 -2
- package/dist/typechain/factories/AnchorERC1155__factory.d.ts.map +0 -1
- package/dist/typechain/factories/AnchorERC1155__factory.js +0 -1766
- package/dist/typechain/factories/AnchorPay__factory.d.ts.map +0 -1
- package/dist/typechain/factories/AnchorPay__factory.js +0 -469
- package/dist/typechain/factories/index.d.ts.map +0 -1
- package/dist/typechain/factories/index.js +0 -10
- package/dist/typechain/index.d.ts.map +0 -1
- package/dist/typechain/index.js +0 -41
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
package/dist/index.js.map
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../src/
|
|
3
|
+
"sources": ["../src/index.ts", "../src/AnchorPayClient.ts", "../src/constants.ts", "../src/AnchorERC1155Client.ts", "../src/abi/AnchorERC1155.ts", "../src/typechain/factories/AnchorERC1155__factory.ts", "../src/typechain/factories/AnchorPay__factory.ts", "../src/generated/Api.ts", "../src/AnchorApiClientV2.ts", "../src/react/AnchorReactSDK.tsx"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n type Account,\n Address,\n type Chain,\n concat,\n createPublicClient,\n createWalletClient,\n custom,\n encodeFunctionData,\n Hex,\n http,\n isAddress,\n keccak256,\n type PublicClient,\n parseEther,\n stringToHex,\n type TransactionReceipt,\n type WalletClient,\n} from \"viem\";\nimport { AnchorApiClientV2 } from \"./AnchorApiClientV2\";\nimport { AnchorERC1155Client } from \"./AnchorERC1155Client\";\nimport { AnchorPayClient } from \"./AnchorPayClient\";\nimport { AnchorERC1155ABI } from \"./abi/AnchorERC1155\";\nimport AnchorPayABI from \"./abi/AnchorPay.json\";\nimport { ENVIRONMENTS, ERC20_ABI, NATIVE_TOKEN_ADDRESS } from \"./constants\";\nimport {\n AnchorSDKConfig,\n IMintRequest,\n PaymentOptions,\n SignedMintRequest,\n} from \"./types\";\n\n/**\n * Anchor SDK\n * 用于与 AnchorPay 和 AnchorERC1155 合约交互的 SDK\n */\nexport class AnchorSDK {\n private publicClient: PublicClient;\n private walletClient?: WalletClient;\n private account?: Account;\n private network: Chain;\n private config: AnchorSDKConfig;\n\n /** Anchor 合约地址 */\n private contracts: {\n anchorPay?: string;\n anchorERC1155?: string;\n [key: string]: string | undefined;\n };\n\n /** AnchorPay 客户端 */\n public anchorPay: AnchorPayClient;\n\n /** AnchorERC1155 客户端 */\n public anchorERC1155: AnchorERC1155Client;\n\n /** Anchor API 客户端 */\n public anchorApi?: AnchorApiClientV2;\n\n /**\n * 创建 Anchor SDK 实例\n * @param config SDK 配置\n */\n constructor(config: AnchorSDKConfig) {\n this.config = config;\n this.contracts = {};\n\n // 检查是否使用旧版配置(向后兼容)\n if (\"publicClient\" in config && config.publicClient) {\n // 使用旧版配置\n this.publicClient = config.publicClient;\n this.walletClient = config.walletClient;\n this.account = this.walletClient?.account;\n this.network = this.createChainFromNetwork(config.network);\n } else {\n // 使用新版配置\n // Convert network to viem Chain\n this.network = this.createChainFromNetwork(config.network);\n\n // Initialize viem clients\n this.publicClient = this.initializePublicClient(config.provider);\n\n // 如果没有提供 signer,则使用 provider 作为 signer\n const effectiveSigner = config.signer || config.provider;\n\n this.walletClient = effectiveSigner\n ? this.initializeWalletClient(effectiveSigner)\n : undefined;\n this.account =\n this.walletClient?.account ||\n this.getAccountFromSigner(effectiveSigner);\n }\n\n // 如果用户直接提供了合约地址,优先使用用户提供的地址\n if (config.anchorPayAddress) {\n this.contracts.anchorPay = config.anchorPayAddress;\n }\n\n if (config.anchorERC1155Address) {\n this.contracts.anchorERC1155 = config.anchorERC1155Address;\n }\n\n // 创建客户端\n this.anchorPay = new AnchorPayClient(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts,\n );\n this.anchorERC1155 = new AnchorERC1155Client(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts,\n );\n\n // 处理环境配置\n let apiBaseUrl = config.apiBaseUrl;\n\n // 如果指定了环境,先尝试从环境配置中获取 API URL 和合约地址\n if (config.env && ENVIRONMENTS[config.env]) {\n // 如果没有指定 API URL,使用环境配置中的 URL\n if (!apiBaseUrl) {\n apiBaseUrl = ENVIRONMENTS[config.env].apiBaseUrl;\n }\n\n // 从环境配置中获取当前网络的合约地址(仅当用户没有直接提供时)\n if (\n this.network.id &&\n ENVIRONMENTS[config.env].contracts[this.network.id]\n ) {\n const networkContracts =\n ENVIRONMENTS[config.env].contracts[this.network.id];\n\n // 只有当用户没有直接提供合约地址时,才使用环境配置中的地址\n if (networkContracts?.anchorPay && !this.contracts.anchorPay) {\n this.contracts.anchorPay = networkContracts.anchorPay;\n }\n if (networkContracts?.anchorERC1155 && !this.contracts.anchorERC1155) {\n this.contracts.anchorERC1155 = networkContracts.anchorERC1155;\n }\n\n // 重新初始化客户端\n this.anchorPay = new AnchorPayClient(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts,\n );\n this.anchorERC1155 = new AnchorERC1155Client(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts,\n );\n }\n }\n\n // 如果有 API URL,创建 Anchor API 客户端\n if (apiBaseUrl) {\n this.anchorApi = new AnchorApiClientV2({\n apiBaseUrl: apiBaseUrl,\n authToken: config.authToken,\n projectId: config.projectId,\n network: this.network,\n onTokenExpired: config.onTokenExpired,\n });\n }\n }\n\n /**\n * 设置 Token 过期回调\n * @param callback Token 过期回调函数\n */\n setTokenExpiredCallback(callback: (error: Error) => void): void {\n if (this.anchorApi) {\n this.anchorApi.setTokenExpiredCallback(callback);\n }\n }\n\n /**\n * 设置钱包客户端\n * 在 SDK 初始化后动态更新钱包客户端和账户\n * @param walletClient 新的钱包客户端\n */\n setWalletClient(signerOrWalletClient: any) {\n // 检查是否是 viem WalletClient(向后兼容)\n if (signerOrWalletClient && \"account\" in signerOrWalletClient) {\n // 使用旧版接口\n this.walletClient = signerOrWalletClient;\n this.account = signerOrWalletClient.account;\n } else {\n // 使用新版接口\n // 如果没有提供有效的签名者,则使用当前的 provider\n const effectiveSigner = signerOrWalletClient || this.config.provider;\n\n this.walletClient = this.initializeWalletClient(effectiveSigner);\n this.account =\n this.walletClient?.account ||\n this.getAccountFromSigner(effectiveSigner);\n }\n\n // 重新初始化客户端\n this.anchorPay = new AnchorPayClient(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts,\n );\n this.anchorERC1155 = new AnchorERC1155Client(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts,\n );\n\n console.log(\"SDK wallet client updated:\", this.account);\n\n return this;\n }\n\n /**\n * 初始化公共客户端\n * @param provider 提供者(URL或Web3提供者)\n * @returns 公共客户端\n */\n private initializePublicClient(provider: string | any): PublicClient {\n // If provider is a string URL\n if (typeof provider === \"string\") {\n return createPublicClient({\n chain: this.network,\n transport: http(provider),\n });\n }\n\n // If provider is a Web3 Provider (like window.ethereum)\n if (provider && typeof provider === \"object\") {\n return createPublicClient({\n chain: this.network,\n transport: custom(provider),\n });\n }\n\n throw new Error(\n \"Invalid provider. Please provide a valid RPC URL or Web3 Provider.\",\n );\n }\n\n /**\n * 初始化钱包客户端\n * @param signer 签名者\n * @returns 钱包客户端\n */\n private initializeWalletClient(signer: any): WalletClient | undefined {\n if (!signer) return undefined;\n\n // If signer is a Web3 Provider with accounts\n if (signer && typeof signer === \"object\") {\n // For providers like window.ethereum that have accounts\n if (signer.selectedAddress) {\n return createWalletClient({\n chain: this.network,\n transport: custom(signer),\n account: signer.selectedAddress as `0x${string}`,\n });\n }\n\n // For signers with an address property\n if (signer.address) {\n return createWalletClient({\n chain: this.network,\n transport: custom(signer.provider || signer),\n account: signer.address as `0x${string}`,\n });\n }\n }\n\n return undefined;\n }\n\n /**\n * 从签名者获取账户\n * @param signer 签名者\n * @returns 账户\n */\n private getAccountFromSigner(signer: any): Account | undefined {\n if (!signer) return undefined;\n\n // If signer has selectedAddress (like window.ethereum)\n if (signer.selectedAddress) {\n return {\n address: signer.selectedAddress as `0x${string}`,\n type: \"json-rpc\",\n };\n }\n\n // If signer has address property\n if (signer.address) {\n return {\n address: signer.address as `0x${string}`,\n type: \"json-rpc\",\n };\n }\n\n return undefined;\n }\n\n /**\n * 从网络信息创建Chain对象\n * @param network 网络信息\n * @returns Chain对象\n */\n private createChainFromNetwork(network: {\n id: number;\n name: string;\n [key: string]: any;\n }): Chain {\n // Create a basic Chain object from the provided network info\n return {\n ...network,\n nativeCurrency: network.nativeCurrency || {\n name: \"Ether\",\n symbol: \"ETH\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\n typeof this.config.provider === \"string\"\n ? this.config.provider\n : \"\",\n ],\n },\n public: {\n http: [\n typeof this.config.provider === \"string\"\n ? this.config.provider\n : \"\",\n ],\n },\n },\n } as Chain;\n }\n\n /**\n * 购买 Badge(使用 ETH,直接使用签名请求)\n * @param signedRequest 签名铸造请求\n * @param receiptAddress 接收地址,如果提供,将作为 ERC20 转账的接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithETHWithSignedRequest(\n signedRequest: SignedMintRequest,\n receiptAddress: string,\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验 signedRequest\n if (!signedRequest || !signedRequest.request || !signedRequest.signature) {\n throw new Error(\n \"signedRequest is required and must contain request and signature\",\n );\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\",\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 检查请求是否有效\n this.validateMintRequest(signedRequest.request);\n\n // 检查货币是否为 ETH\n if (signedRequest.request.currency !== NATIVE_TOKEN_ADDRESS) {\n throw new Error(\"Currency must be ETH\");\n }\n\n // 计算总价\n const totalPrice =\n BigInt(signedRequest.request.price) *\n BigInt(signedRequest.request.quantity);\n\n // 编码数据\n const data = this.anchorERC1155.encodeTokenReceivedData(signedRequest);\n\n // 发送交易\n const result = await this.anchorPay.sendETH(\n receiptAddress as `0x${string}`,\n totalPrice,\n data,\n options,\n );\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n // 根据 viem 文档,TransactionReceipt 中的交易哈希字段是 transactionHash,而不是 hash\n if (\n options?.sendTransaction !== false &&\n result &&\n typeof result === \"object\" &&\n \"transactionHash\" in result\n ) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n return result;\n }\n\n /**\n * 购买 Badge(使用 ERC20 代币,直接使用签名请求)\n * @param signedRequest 签名铸造请求\n * @param receiptAddress 接收地址,如果提供,将作为接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithERC20WithSignedRequest(\n signedRequest: SignedMintRequest,\n receiptAddress: string,\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验 signedRequest\n if (!signedRequest || !signedRequest.request || !signedRequest.signature) {\n throw new Error(\n \"signedRequest is required and must contain request and signature\",\n );\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\",\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 检查请求是否有效\n this.validateMintRequest(signedRequest.request);\n\n // 检查货币是否为 ERC20\n if (signedRequest.request.currency === NATIVE_TOKEN_ADDRESS) {\n throw new Error(\"Currency cannot be native token\");\n }\n\n // 计算总价\n const totalPrice =\n BigInt(signedRequest.request.price) *\n BigInt(signedRequest.request.quantity);\n\n // 编码数据\n const data = this.anchorERC1155.encodeTokenReceivedData(signedRequest);\n\n // 发送交易\n const result = await this.anchorPay.sendERC20(\n receiptAddress as `0x${string}`,\n signedRequest.request.currency,\n totalPrice,\n data,\n options,\n );\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n // 根据 viem 文档,TransactionReceipt 中的交易哈希字段是 transactionHash,而不是 hash\n if (\n options?.sendTransaction !== false &&\n result &&\n typeof result === \"object\" &&\n \"transactionHash\" in result\n ) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n return result;\n }\n\n /**\n * 使用 ETH 购买徽章\n * @param customerAddress 客户地址\n * @param contractAddress NFT 地址\n * @param tokenId 代币 ID\n * @param quantity 数量\n * @param receiptAddress 接收地址,如果提供,将作为接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithETH(\n customerAddress: string,\n contractAddress: string,\n tokenId: string | number | bigint,\n quantity: string | number | bigint = 1,\n receiptAddress: string,\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验地址参数\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\",\n );\n }\n\n // 校验 tokenId 和 quantity\n if (tokenId === undefined || tokenId === \"\") {\n throw new Error(\"tokenId is required\");\n }\n const quantityBigInt = BigInt(quantity.toString());\n if (quantityBigInt <= 0n) {\n throw new Error(\"quantity must be greater than 0\");\n }\n\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\",\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 使用 claimableIds 来标识要购买的徽章\n const claimableIds = [`${tokenId.toString()}`];\n\n // 从后端获取铸造请求\n const mintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: claimableIds,\n });\n\n if (\n mintResponse.code !== \"0000\" ||\n !mintResponse.obj ||\n !mintResponse.obj.signatures ||\n mintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n mintResponse.code || \"Failed to get mint request from backend\",\n );\n }\n\n const mintRequest = mintResponse.obj.signatures[0];\n if (!mintRequest) throw new Error(\"Mint request not found\");\n // 检查必要字段\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n\n // 创建签名铸造请求\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId || tokenId),\n quantity: BigInt(mintRequest.quantity || quantity),\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(\n mintRequest.validityStartTimestamp || Math.floor(Date.now() / 1000),\n ), // 立即生效\n validityEndTimestamp: BigInt(\n mintRequest.validityEndTimestamp ||\n Math.floor(Date.now() / 1000) + 3600,\n ), // 1小时后过期\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}`, // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`,\n };\n\n // 使用签名请求购买徽章(支持 AA 和 EOA 模式)\n return await this.buyBadgeWithETHWithSignedRequest(\n signedRequest,\n receiptAddress,\n options,\n );\n }\n\n /**\n * 使用自定义签名数据购买徽章(ETH)\n * @param signedRequest 用户自己组装的签名铸造请求\n * @param receiptAddress 接收地址,如果提供,将作为接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithETHWithCustomSignature(\n signedRequest: {\n to: string;\n tokenId: string | number | bigint;\n quantity: string | number | bigint;\n price: string | number | bigint;\n currency?: string;\n validityEndTimestamp?: string | number | bigint;\n validityStartTimestamp?: string | number | bigint;\n uid: string;\n signature: string;\n chainId?: string;\n projectHandle?: string;\n },\n receiptAddress: string,\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验 signedRequest\n if (!signedRequest) {\n throw new Error(\"signedRequest is required\");\n }\n\n // 校验必要字段\n if (!signedRequest.to || !isAddress(signedRequest.to)) {\n throw new Error(\n \"signedRequest.to is required and must be a valid Ethereum address\",\n );\n }\n if (signedRequest.tokenId === undefined || signedRequest.tokenId === \"\") {\n throw new Error(\"signedRequest.tokenId is required\");\n }\n if (\n signedRequest.quantity === undefined ||\n BigInt(signedRequest.quantity.toString()) <= 0n\n ) {\n throw new Error(\n \"signedRequest.quantity is required and must be greater than 0\",\n );\n }\n if (signedRequest.price === undefined) {\n throw new Error(\"signedRequest.price is required\");\n }\n if (!signedRequest.uid) {\n throw new Error(\"signedRequest.uid is required\");\n }\n if (!signedRequest.signature) {\n throw new Error(\"signedRequest.signature is required\");\n }\n\n if (!signedRequest.chainId) {\n throw new Error(\"signedRequest.chainId is required\");\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\",\n );\n }\n\n // 将用户提供的数据转换为标准格式\n const formattedRequest: SignedMintRequest = {\n request: {\n to: signedRequest.to as `0x${string}`,\n tokenId: BigInt(signedRequest.tokenId),\n quantity: BigInt(signedRequest.quantity),\n price: BigInt(signedRequest.price),\n currency: signedRequest.currency as `0x${string}`,\n validityStartTimestamp: BigInt(\n signedRequest.validityStartTimestamp ||\n Math.floor(Date.now() / 1000) + 3600,\n ),\n validityEndTimestamp: BigInt(\n signedRequest.validityEndTimestamp ||\n Math.floor(Date.now() / 1000) + 3600,\n ),\n uid: signedRequest.uid as `0x${string}`,\n chainId: BigInt(signedRequest.chainId || this.network.id),\n projectHandle: signedRequest.projectHandle as `0x${string}`,\n },\n signature: signedRequest.signature.startsWith(\"0x\")\n ? (signedRequest.signature as `0x${string}`)\n : (`0x${signedRequest.signature}` as `0x${string}`),\n };\n\n // 使用标准方法处理\n return await this.buyBadgeWithETHWithSignedRequest(\n formattedRequest,\n receiptAddress,\n options,\n );\n }\n\n /**\n * 使用 ERC20 代币购买徽章\n * @param customerAddress 客户地址\n * @param contractAddress NFT 地址\n * @param tokenId 代币 ID\n * @param quantity 数量\n * @param currency ERC20 代币地址\n * @param receiptAddress 接收地址,如果提供,将作为接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithERC20(\n customerAddress: string,\n contractAddress: string,\n tokenId: string | number | bigint,\n quantity: string | number | bigint = 1,\n currency: string,\n receiptAddress: string,\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\",\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 校验地址参数\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!currency || !isAddress(currency)) {\n throw new Error(\n \"currency is required and must be a valid ERC20 token address\",\n );\n }\n\n // 校验 tokenId 和 quantity\n if (tokenId === undefined || tokenId === \"\") {\n throw new Error(\"tokenId is required\");\n }\n const quantityBigInt = BigInt(quantity.toString());\n if (quantityBigInt <= 0n) {\n throw new Error(\"quantity must be greater than 0\");\n }\n\n // 使用 claimableIds 来标识要购买的徽章\n const claimableIds = [`${tokenId.toString()}`];\n\n // 从后端获取铸造请求\n const mintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: claimableIds,\n });\n\n if (\n mintResponse.code !== \"0000\" ||\n !mintResponse.obj ||\n !mintResponse.obj.signatures ||\n mintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n mintResponse.code || \"Failed to get mint request from backend\",\n );\n }\n\n const mintRequest = mintResponse.obj.signatures[0];\n if (!mintRequest) throw new Error(\"Mint request not found\");\n // 检查必要字段\n if (\n mintRequest.badgeId ||\n mintRequest.signature ||\n mintRequest.validityStartTimestamp ||\n mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n\n // 创建签名铸造请求\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId || tokenId),\n quantity: BigInt(mintRequest.quantity || quantity),\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(\n mintRequest.validityStartTimestamp || Math.floor(Date.now() / 1000),\n ), // 立即生效\n validityEndTimestamp: BigInt(\n mintRequest.validityEndTimestamp ||\n Math.floor(Date.now() / 1000) + 3600,\n ), // 1小时后过期\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}`, // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`,\n };\n\n // 使用签名请求购买徽章(支持 AA 和 EOA 模式)\n return await this.buyBadgeWithERC20WithSignedRequest(\n signedRequest,\n receiptAddress,\n options,\n );\n }\n\n /**\n * 使用自定义签名数据购买徽章(ERC20)\n * @param signedRequest 用户自己组装的签名铸造请求\n * @param receiptAddress 接收地址,如果提供,将作为 ERC20 转账的接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithERC20WithCustomSignature(\n signedRequest: {\n to: string;\n tokenId: string | number | bigint;\n quantity: string | number | bigint;\n price: string | number | bigint;\n currency?: string;\n validityEndTimestamp?: string | number | bigint;\n validityStartTimestamp?: string | number | bigint;\n uid: string;\n signature: string;\n chainId?: string;\n projectHandle?: string;\n },\n receiptAddress: string,\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验 signedRequest\n if (!signedRequest) {\n throw new Error(\"signedRequest is required\");\n }\n\n // 校验必要字段\n if (!signedRequest.to || !isAddress(signedRequest.to)) {\n throw new Error(\n \"signedRequest.to is required and must be a valid Ethereum address\",\n );\n }\n if (signedRequest.tokenId === undefined || signedRequest.tokenId === \"\") {\n throw new Error(\"signedRequest.tokenId is required\");\n }\n if (\n signedRequest.quantity === undefined ||\n BigInt(signedRequest.quantity.toString()) <= 0n\n ) {\n throw new Error(\n \"signedRequest.quantity is required and must be greater than 0\",\n );\n }\n if (signedRequest.price === undefined) {\n throw new Error(\"signedRequest.price is required\");\n }\n if (!signedRequest.uid) {\n throw new Error(\"signedRequest.uid is required\");\n }\n if (!signedRequest.signature) {\n throw new Error(\"signedRequest.signature is required\");\n }\n if (!signedRequest.chainId) {\n throw new Error(\"signedRequest.chainId is required\");\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\",\n );\n }\n\n // 将用户提供的数据转换为标准格式\n const formattedRequest: SignedMintRequest = {\n request: {\n to: signedRequest.to as `0x${string}`,\n tokenId: BigInt(signedRequest.tokenId),\n quantity: BigInt(signedRequest.quantity),\n price: BigInt(signedRequest.price),\n currency: signedRequest.currency as `0x${string}`,\n validityStartTimestamp: BigInt(\n signedRequest.validityStartTimestamp ||\n Math.floor(Date.now() / 1000) + 3600,\n ),\n validityEndTimestamp: BigInt(\n signedRequest.validityEndTimestamp ||\n Math.floor(Date.now() / 1000) + 3600,\n ),\n uid: signedRequest.uid as `0x${string}`,\n chainId: BigInt(signedRequest.chainId || this.network.id),\n projectHandle: signedRequest.projectHandle as `0x${string}`,\n },\n signature: signedRequest.signature.startsWith(\"0x\")\n ? (signedRequest.signature as `0x${string}`)\n : (`0x${signedRequest.signature}` as `0x${string}`),\n };\n\n // 使用标准方法处理\n return await this.buyBadgeWithERC20WithSignedRequest(\n formattedRequest,\n receiptAddress,\n options,\n );\n }\n\n /**\n * 支付方法,使用 ETH 进行支付\n * @deprecated 请使用 sendPayment 方法代替。sendPayment 提供了更灵活的支付选项和更好的类型支持。\n * @param orderId 订单 ID\n * @param amount 支付金额\n * @param receiptAddress 接收地址,如果提供,将作为接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async pay(\n orderId: string,\n amount: string | number | bigint,\n receiptAddress: string,\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验 orderId\n if (!orderId || orderId.trim() === \"\") {\n throw new Error(\"orderId is required and cannot be empty\");\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\",\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 将 ETH 金额转换为 Wei\n const paymentAmount =\n typeof amount === \"string\" || typeof amount === \"number\"\n ? parseEther(amount.toString())\n : amount;\n\n // 使用 orderId 作为 userData\n const data = this.encodeUserData(orderId);\n\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [receiptAddress, NATIVE_TOKEN_ADDRESS, paymentAmount, data],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: paymentAmount,\n };\n }\n\n // 发送交易(EOA 模式)\n const txHash = await (\n this.walletClient!.sendTransaction as unknown as (params: {\n account: Account;\n to: Address;\n data: `0x${string}`;\n value: bigint;\n }) => Promise<`0x${string}`>\n )({\n account: this.account!,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: paymentAmount,\n });\n\n // 等待交易确认并返回收据\n const result = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n if (result && typeof result === \"object\" && \"transactionHash\" in result) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n return result;\n }\n\n /**\n * 支付方法,使用 ETH 进行支付\n * @param params 支付参数\n * @param params.callData 自定义数据\n * @param params.amount 支付金额\n * @param params.receiptAddress 接收地址\n * @param params.contractName 合约名称(可选)\n * @param params.options 支付选项(可选)\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async sendPaymentWithNativeToken(params: {\n callData: `0x${string}`;\n amount: string | number | bigint;\n receiptAddress: string;\n contractName?: string;\n options?: PaymentOptions;\n }): Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n > {\n const { callData, amount, receiptAddress, contractName, options } = params;\n\n if (!callData || callData.trim() === \"\") {\n throw new Error(\"callData is required and cannot be empty\");\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\",\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 将 ETH 金额转换为 Wei\n const paymentAmount =\n typeof amount === \"string\" || typeof amount === \"number\"\n ? parseEther(amount.toString())\n : amount;\n\n const interfaceHash = keccak256(stringToHex(contractName || \"\"));\n const data = concat([interfaceHash, callData]);\n\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [receiptAddress, NATIVE_TOKEN_ADDRESS, paymentAmount, data],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: paymentAmount,\n };\n }\n\n // 发送交易(EOA 模式)\n const txHash = await (\n this.walletClient!.sendTransaction as unknown as (params: {\n account: Account;\n to: Address;\n data: `0x${string}`;\n value: bigint;\n }) => Promise<`0x${string}`>\n )({\n account: this.account!,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: paymentAmount,\n });\n\n // 等待交易确认并返回收据\n const result = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n if (result && typeof result === \"object\" && \"transactionHash\" in result) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n return result;\n }\n\n /**\n * 支付方法,使用 ERC20 代币进行支付\n * @param params 支付参数\n * @param params.callData 自定义数据\n * @param params.amount 支付金额\n * @param params.receiptAddress 接收地址\n * @param params.tokenAddress ERC20 代币地址\n * @param params.contractName 合约名称(可选)\n * @param params.options 支付选项(可选)\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据数组\n */\n async sendPaymentWithERC20(params: {\n callData: `0x${string}`;\n amount: string | number | bigint;\n receiptAddress: string;\n tokenAddress: string;\n contractName?: string;\n options?: PaymentOptions;\n }): Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n > {\n const {\n callData,\n amount,\n receiptAddress,\n tokenAddress,\n contractName,\n options,\n } = params;\n\n if (!callData || callData.trim() === \"\") {\n throw new Error(\"callData is required and cannot be empty\");\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\",\n );\n }\n\n // 校验 tokenAddress\n if (!tokenAddress || !isAddress(tokenAddress)) {\n throw new Error(\n \"tokenAddress is required and must be a valid Ethereum address\",\n );\n }\n\n // 获取代币的小数位数\n const decimals = (await this.publicClient.readContract({\n address: tokenAddress as Address,\n abi: ERC20_ABI,\n functionName: \"decimals\",\n })) as number;\n\n // 根据代币的小数位数进行转换\n const paymentAmount =\n typeof amount === \"bigint\"\n ? amount\n : BigInt(Math.floor(Number(amount) * 10 ** decimals));\n\n const interfaceHash = keccak256(stringToHex(contractName || \"\"));\n console.log(`Interface hash: ${interfaceHash}`);\n const data = concat([interfaceHash, callData]);\n console.log(`callData: ${callData}`);\n console.log(`Data: ${data}`);\n\n // 使用 AnchorPayClient 的 sendERC20 方法\n const result = await this.anchorPay.sendERC20(\n receiptAddress as Address,\n tokenAddress as Address,\n paymentAmount,\n data,\n options,\n );\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n if (result && typeof result === \"object\" && \"transactionHash\" in result) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n console.warn(\n `Failed to process transaction hash ${result.transactionHash} with Anchor API: ${error}`,\n );\n }\n }\n\n return result;\n }\n\n /**\n * 编码用户数据\n * @param orderId 订单 ID\n * @returns 编码后的数据\n */\n private encodeUserData(orderId: string): Hex {\n // 使用 keccak256 哈希函数计算接口哈希\n const interfaceHash = keccak256(stringToHex(\"\"));\n console.log(interfaceHash, \"interfaceHash\");\n\n // 编码订单 ID\n const encodedOrderId = stringToHex(orderId);\n\n // 返回完整的编码数据\n console.log(concat([interfaceHash, encodedOrderId]), \"concat\");\n return concat([interfaceHash, encodedOrderId]);\n }\n\n /**\n * 铸造免费 Badge\n * 从后端获取签名铸造请求,然后调用合约铸造\n * @param customerAddress 客户地址\n * @param contractAddress NFT 地址\n * @param tokenIds badge 的 tokenId 数组\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async mintFreeBadge(\n customerAddress: string,\n contractAddress: string,\n tokenIds: string[],\n options?: { sendTransaction?: boolean },\n ): Promise<\n | TransactionReceipt\n | { to: string; data: string; value: bigint }\n | { to: string; data: string; value: bigint }[]\n > {\n // 校验地址参数\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\",\n );\n }\n\n // 校验 tokenIds\n if (!tokenIds || !Array.isArray(tokenIds) || tokenIds.length === 0) {\n throw new Error(\"tokenIds is required and must be a non-empty array\");\n }\n for (const id of tokenIds) {\n if (!id || typeof id !== \"string\") {\n throw new Error(\"Each tokenId must be a non-empty string\");\n }\n }\n\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\",\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 步骤 1: 从后端获取铸造请求\n const mintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: tokenIds,\n });\n\n console.log(JSON.stringify(mintResponse));\n\n if (\n mintResponse.code !== \"0000\" ||\n !mintResponse.obj ||\n !mintResponse.obj.signatures ||\n mintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n mintResponse.code || \"Failed to get mint request from backend\",\n );\n }\n\n if (options?.sendTransaction === false) {\n const mintRequests = mintResponse.obj.signatures; // 获取所有签名\n\n // 创建批量签名铸造请求数组\n const batchUserOp = await Promise.all(\n mintRequests.map(async (mintRequest) => {\n // 检查必要字段\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n\n // 创建签名铸造请求\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1),\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // ETH\n validityStartTimestamp: BigInt(\n mintRequest.validityStartTimestamp,\n ),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`,\n chainId: BigInt(mintRequest.chainId || this.network.id),\n projectHandle: mintRequest.projectHandle as `0x${string}`,\n },\n signature: mintRequest.signature as `0x${string}`,\n };\n\n // 检查请求是否有效\n this.validateMintRequest(signedRequest.request);\n\n // 检查价格是否为 0\n if (BigInt(signedRequest.request.price) !== 0n) {\n throw new Error(\"Free Badge price must be 0\");\n }\n\n // 返回单个交易数据\n return (await this.anchorERC1155.mintWithSignature(\n signedRequest,\n contractAddress as Address,\n { sendTransaction: false },\n )) as { to: string; data: string; value: bigint };\n }),\n );\n\n // 返回批量操作数组\n return batchUserOp;\n }\n\n // 处理所有铸造请求\n let lastReceipt: TransactionReceipt | null = null;\n\n for (const mintRequest of mintResponse.obj.signatures) {\n // 检查必要字段\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n console.warn(\"铸造请求缺失必要字段\", mintRequest);\n continue;\n }\n\n // 创建签名铸造请求\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1),\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(mintRequest.validityStartTimestamp),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}`, // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`,\n };\n\n // 检查请求是否有效\n this.validateMintRequest(signedRequest.request);\n\n // 检查价格是否为 0\n if (BigInt(signedRequest.request.price) !== 0n) {\n throw new Error(\"Free Badge price must be 0\");\n }\n\n console.log(signedRequest, \"signedRequest\");\n\n // 调用合约铸造(始终发送交易)\n const result = await this.anchorERC1155.mintWithSignature(\n signedRequest,\n contractAddress as Address,\n { sendTransaction: true },\n );\n // 由于指定了 sendTransaction: true,返回的应该是交易收据\n if (\"transactionHash\" in result) {\n lastReceipt = result;\n\n // 尝试加快交易处理\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n } else {\n throw new Error(\n \"Expected transaction receipt, but received transaction data\",\n );\n }\n }\n\n // 返回最后一个交易收据,或者抛出错误\n if (!lastReceipt) {\n throw new Error(\"No successful mint transaction\");\n }\n\n return lastReceipt;\n }\n\n /**\n * 铸造免费 Badge(直接使用签名请求)\n * @param signedRequest 签名铸造请求\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async mintFreeBadgeWithSignedRequest(\n signedRequest: SignedMintRequest,\n options?: { sendTransaction?: boolean },\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 检查请求是否有效\n this.validateMintRequest(signedRequest.request);\n\n // 检查价格是否为 0\n if (BigInt(signedRequest.request.price) !== 0n) {\n throw new Error(\"Free Badge price must be 0\");\n }\n\n // 调用 mintWithSignature,并传递选项\n const result = await this.anchorERC1155.mintWithSignature(\n signedRequest,\n signedRequest?.request?.contractAddress as Address,\n options,\n );\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n if (\n options?.sendTransaction !== false &&\n result &&\n typeof result === \"object\" &&\n \"transactionHash\" in result\n ) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n return result;\n }\n\n /**\n * 获取 ERC20 代币批准的交易数据(用于 AA 模式)\n * @param tokenAddress ERC20 代币地址\n * @param amount 批准金额\n * @param spender 花费者地址(默认为 AnchorPay 合约地址)\n * @returns 交易数据对象,包含 to、data 和 value 字段\n */\n getERC20ApprovalData(\n tokenAddress: Address,\n amount: bigint,\n spender?: Address,\n ): { to: string; data: string; value: bigint } {\n return this.anchorPay.getERC20ApprovalData(tokenAddress, amount, spender);\n }\n\n /**\n * 验证铸造请求\n * @param request 铸造请求\n */\n private validateMintRequest(request: IMintRequest): void {\n // 检查接收者地址\n if (!isAddress(request.to)) {\n throw new Error(\"Invalid recipient address\");\n }\n\n // 检查有效期\n const now = Math.floor(Date.now() / 1000);\n const endTimestamp = request.validityEndTimestamp;\n\n if (endTimestamp && BigInt(endTimestamp) < BigInt(now)) {\n throw new Error(\"Mint request expired\");\n }\n\n // 检查数量\n if (BigInt(request.quantity) <= 0n) {\n throw new Error(\"Quantity must be greater than 0\");\n }\n }\n\n /**\n * 处理交易哈希\n * 在交易确认后调用该方法可加快交易处理\n * @param txHash 交易哈希\n * @returns 处理结果或 undefined(如果 API 客户端不可用)\n */\n async processTransactionHash(txHash: string) {\n try {\n if (this.anchorApi) {\n const result = await this.anchorApi.transactionHashProcess(txHash);\n console.log(`Transaction processing accelerated: ${txHash}`);\n return result;\n }\n } catch (error) {\n console.warn(\n `Failed to accelerate transaction processing: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n // 不影响主流程,只记录日志\n }\n return undefined;\n }\n\n /**\n * 批量铸造徽章(V2)\n * @param customerAddress 客户地址\n * @param contractAddress NFT 合约地址\n * @param tokenIds 代币 ID 列表\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回最后一个交易收据;AA 模式返回所有交易数据数组\n */\n async batchMintBadge(\n customerAddress: string,\n contractAddress: string,\n tokenIds: string[],\n options?: { sendTransaction?: boolean },\n ): Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }[]\n > {\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\",\n );\n }\n // 参数校验\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!Array.isArray(tokenIds) || tokenIds.length === 0) {\n throw new Error(\"tokenIds is required and must be a non-empty array\");\n }\n for (const id of tokenIds) {\n if (!id || typeof id !== \"string\") {\n throw new Error(\"Each tokenId must be a non-empty string\");\n }\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 步骤 1: 从后端获取批量铸造请求\n // 使用新的 API 设计,一次性获取所有徽章的签名\n const batchMintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: tokenIds,\n });\n\n if (\n batchMintResponse.code !== \"0000\" ||\n !batchMintResponse.obj ||\n !batchMintResponse.obj.signatures ||\n batchMintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n batchMintResponse.code ||\n \"Failed to get batch mint request from backend\",\n );\n }\n\n const mintRequests = batchMintResponse.obj.signatures;\n\n // AA 模式:只返回所有交易数据\n if (options?.sendTransaction === false) {\n const batchUserOp = await Promise.all(\n mintRequests.map(async (mintRequest) => {\n // 检查必要字段\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n // 创建签名铸造请求\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1), // 默认数量为1\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(\n mintRequest.validityStartTimestamp,\n ),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}`, // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`,\n };\n this.validateMintRequest(signedRequest.request);\n return (await this.anchorERC1155.mintWithSignature(\n signedRequest,\n contractAddress as Address,\n { sendTransaction: false },\n )) as { to: string; data: string; value: bigint };\n }),\n );\n return batchUserOp;\n }\n\n // EOA 模式:链上批量 mint,返回最后一个收据\n let lastReceipt: TransactionReceipt | null = null;\n for (const mintRequest of mintRequests) {\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n console.warn(\"铸造请求缺失必要字段\", mintRequest);\n continue;\n }\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1), // 默认数量为1\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(mintRequest.validityStartTimestamp),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}`, // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`,\n };\n this.validateMintRequest(signedRequest.request);\n const result = await this.anchorERC1155.mintWithSignature(\n signedRequest,\n contractAddress as Address,\n { sendTransaction: true },\n );\n if (\"transactionHash\" in result) {\n lastReceipt = result;\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n } else {\n throw new Error(\n \"Expected transaction receipt, but received transaction data\",\n );\n }\n }\n if (!lastReceipt) {\n throw new Error(\"No successful mint transaction\");\n }\n return lastReceipt;\n }\n\n /**\n * 批量铸造徽章(Multicall V2)\n * @param customerAddress 客户地址\n * @param contractAddress NFT 合约地址\n * @param tokenIds 代币 ID 列表\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;AA 模式返回 multicall 交易数据\n */\n async batchMintBadgeWithMulticall(\n customerAddress: string,\n contractAddress: string,\n tokenIds: string[],\n options?: { sendTransaction?: boolean },\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\",\n );\n }\n // 参数校验\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!Array.isArray(tokenIds) || tokenIds.length === 0) {\n throw new Error(\"tokenIds is required and must be a non-empty array\");\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 从后端获取批量铸造请求\n // 使用新的 API 设计,一次性获取所有徽章的签名\n const batchMintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: tokenIds,\n });\n\n if (\n batchMintResponse.code !== \"0000\" ||\n !batchMintResponse.obj ||\n !batchMintResponse.obj.signatures ||\n batchMintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n batchMintResponse.code ||\n \"Failed to get batch mint request from backend\",\n );\n }\n\n const mintRequests = batchMintResponse.obj.signatures;\n\n // 编码所有 mintWithSignature 调用的 calldata\n const calldatas = mintRequests.map((mintRequest) => {\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1), // 默认数量为1\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(mintRequest.validityStartTimestamp),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}`, // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`,\n };\n this.validateMintRequest(signedRequest.request);\n\n // 注意:这里我们假设所有 mint 都发生在同一个 ERC1155 合约上\n // 并且这个合约地址是在 AnchorERC1155Client 中配置的\n return encodeFunctionData({\n abi: AnchorERC1155ABI,\n functionName: \"mintWithSignature\",\n args: [\n this.anchorERC1155[\"formatMintRequest\"](signedRequest.request),\n signedRequest.signature as `0x${string}`,\n ],\n });\n });\n\n // 调用 multicall\n const result = await this.anchorERC1155.multicall(calldatas, options);\n\n if (\n options?.sendTransaction !== false &&\n result &&\n typeof result === \"object\" &&\n \"transactionHash\" in result\n ) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n return result;\n }\n\n /**\n * 批量铸造免费徽章(Multicall)\n * 从后端获取签名铸造请求,然后使用 multicall 批量铸造\n * @param customerAddress 客户地址\n * @param contractAddress NFT 合约地址\n * @param tokenIds badge 的 tokenId 数组\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;AA 模式返回 multicall 交易数据\n */\n async mintFreeBadgeWithMulticall(\n customerAddress: string,\n contractAddress: string,\n tokenIds: string[],\n options?: { sendTransaction?: boolean },\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\",\n );\n }\n\n // 参数校验\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\",\n );\n }\n if (!Array.isArray(tokenIds) || tokenIds.length === 0) {\n throw new Error(\"tokenIds is required and must be a non-empty array\");\n }\n for (const id of tokenIds) {\n if (!id || typeof id !== \"string\") {\n throw new Error(\"Each tokenId must be a non-empty string\");\n }\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 从后端获取免费铸造请求\n const mintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: tokenIds,\n });\n\n if (\n mintResponse.code !== \"0000\" ||\n !mintResponse.obj ||\n !mintResponse.obj.signatures ||\n mintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n mintResponse.code || \"Failed to get mint request from backend\",\n );\n }\n\n // 编码所有 mintWithSignature 调用的 calldata\n const calldatas = mintResponse.obj.signatures.map((mintRequest) => {\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1), // 默认数量为1\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(mintRequest.validityStartTimestamp),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}`, // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`,\n };\n\n this.validateMintRequest(signedRequest.request);\n\n // 检查价格是否为 0\n if (BigInt(signedRequest.request.price) !== 0n) {\n throw new Error(\"Free Badge price must be 0\");\n }\n\n // 编码 mintWithSignature 调用\n return encodeFunctionData({\n abi: AnchorERC1155ABI,\n functionName: \"mintWithSignature\",\n args: [\n this.anchorERC1155[\"formatMintRequest\"](signedRequest.request),\n signedRequest.signature as `0x${string}`,\n ],\n });\n });\n\n // 调用 multicall\n const result = await this.anchorERC1155.multicall(calldatas, options);\n\n if (\n options?.sendTransaction !== false &&\n result &&\n typeof result === \"object\" &&\n \"transactionHash\" in result\n ) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n return result;\n }\n}\n\nexport { AnchorApiClientV2 } from \"./AnchorApiClientV2\";\nexport { AnchorERC1155Client } from \"./AnchorERC1155Client\";\nexport { AnchorPayClient } from \"./AnchorPayClient\";\nexport * from \"./constants\";\nexport * from \"./generated/Api\";\n// 导出类型和常量\nexport * from \"./types\";\n",
|
|
6
|
-
"/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n/*\n * ---------------------------------------------------------------\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\n * ## ##\n * ## AUTHOR: acacode ##\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\n * ---------------------------------------------------------------\n */\n\nexport interface WebResultBadgeSeriesResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n /** List of badge series */\n obj?: BadgeSeriesCompositeVO[];\n msgKey?: string;\n}\n\nexport interface WebResultBadgeContributorsResponseAllOfObj {\n /** 贡献总结信息 */\n summary?: WebResultBadgeContributorsResponseAllOfObjSummary;\n /**\n * 团队徽章ID\n * @example \"team_badge_A_4\"\n */\n badgeId?: string;\n /**\n * 团队徽章名称\n * @example \"团队徽章A-4\"\n */\n badgeName?: string;\n /** 贡献者列表 */\n contributors?: TeamContributorItem[];\n}\n\n/** 个人所属团队信息及徽章详情 */\nexport interface WebResultTeamLeaderboardResponseAllOfObjPersonalTeamInfo {\n /**\n * 个人所属团队排名\n * @format int32\n */\n teamRank?: number;\n /** 个人在该团队中的徽章详情列表 */\n badgeDetails?: WebResultTeamLeaderboardResponseAllOfObjPersonalTeamInfoBadgeDetails[];\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /**\n * 个人所属团队总荣誉分\n * @format int32\n */\n totalHonorScore?: number;\n}\n\nexport interface BadgeSingleCheckRequest {\n /** Customer wallet address */\n customerAddress: string;\n}\n\nexport interface WebResultPurchaseResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: MintRequest;\n msgKey?: string;\n}\n\n/** 团队徽章列表 */\nexport interface TeamBadgeItem {\n /** 徽章配置ID */\n badgeConfigId?: string;\n /** 用户是否参与解锁 */\n involved?: boolean;\n /**\n * 等级\n * @format int32\n */\n level?: number;\n /**\n * 荣誉分\n * @format int32\n */\n honorScore?: number;\n /**\n * 解锁时间(UTC毫秒)\n * @format int64\n */\n unlockedAt?: number;\n /**\n * 进度百分比\n * @format int32\n */\n progress?: number;\n /**\n * 当前徽章数量\n * @format int32\n */\n currentBadgeCount?: number;\n /** 团队徽章对应的个人徽章ID集合 从unlockConditions中解析出type为BADGE_HOLDERS对应的badgeId集合 */\n requiredPersonalBadgeIds?: string[];\n /** 团队徽章对应的个人徽章详情列表 */\n requiredPersonalBadges?: BadgeVO[];\n teamBadgeDetail?: BadgeVO;\n /** 解锁状态 */\n status?: string;\n /**\n * 解锁所需徽章数量\n * @format int32\n */\n requiredBadgeCount?: number;\n}\n\nexport interface WebResultNotificationReadResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultNotificationReadResponseAllOfObj;\n msgKey?: string;\n}\n\n/** 用户的团队通知列表 */\nexport interface WebResultNotificationsResponseAllOfObjNotifications {\n /**\n * 创建时间(UTC毫秒)\n * @format int64\n * @example 1672531200000\n */\n createdAt?: number;\n /** 解锁的徽章列表(仅在type为BADGE_UNLOCKED时返回) */\n unlockedBadges?: BadgeVO[];\n /**\n * 通知附加数据\n * @example \"{badgeId=badge_123, badgeName=Achiever}\"\n */\n data?: object;\n /**\n * 团队ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /**\n * 通知ID\n * @example \"notif_1234567890\"\n */\n notificationId?: string;\n /**\n * 通知类型:BADGE_UNLOCKED, CAPTAIN_SUCCESSOR, MEMBER_KICKED\n * @example \"BADGE_UNLOCKED\"\n */\n type?: string;\n /**\n * 通知标题\n * @example \"徽章解锁通知\"\n */\n title?: string;\n /**\n * 过期时间(UTC毫秒)\n * @format int64\n * @example 1704067200000\n */\n expireAt?: number;\n /**\n * 用户ID\n * @example \"user_1234567890\"\n */\n userId?: string;\n /**\n * 通知内容详情\n * @example \"恭喜你解锁了新的徽章!\"\n */\n content?: string;\n}\n\n/** condition progress */\nexport interface ProgressDTO {\n /** condition name */\n name?: string;\n /** progress value */\n value?: string;\n}\n\nexport interface WebResultGrantBadgeResponseVO {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultGrantBadgeResponseVOAllOfObj;\n msgKey?: string;\n}\n\nexport interface BadgeClaimSignatureRequest {\n /** Customer wallet address */\n customerAddress: string;\n /** List of badge IDs to claim */\n badgeIds: string[];\n}\n\nexport interface WebResultCheckEventResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n msgKey?: string;\n}\n\nexport interface WebResultNotificationsResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultNotificationsResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface CheckEventRequest {\n /** series */\n series: string;\n /** customer id */\n customerId: string;\n /** condition progress */\n progress: ProgressDTO[];\n}\n\nexport interface WebResultCheckResultResponseAllOfObj {\n /**\n * 最后一次检查时间戳\n * @format int64\n */\n lastCheckTimestamp?: number;\n /**\n * 可领取徽章数量\n * @format int64\n */\n claimableBadgeCount?: number;\n}\n\nexport interface WebResultRemoveMemberResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: TeamRemoveResponse;\n msgKey?: string;\n}\n\nexport interface WebResultBadgeCheckResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n /** Badge check result */\n obj?: WebResultBadgeCheckResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface WebResultMemberRankingResponseAllOfObj {\n leaderboard?: MemberRankingItem[];\n pagination?: WebResultMemberRankingResponseAllOfObjPagination;\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n}\n\nexport interface WebResultNftSeriesDetailResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: NftSeriesDetailVO;\n msgKey?: string;\n}\n\nexport interface WebResultBadgeAssetsResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n /** Badge assets data */\n obj?: WebResultBadgeAssetsResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface AssetsBadgeResponse {\n /** all nfts in series */\n nfts?: NftVO[];\n /** 用户id */\n customerId?: string;\n}\n\nexport interface QueryAssetsRequest {\n /**\n * limit(max: 200)\n * @format int32\n */\n limit?: number;\n /** customer ids */\n customerIds: string[];\n /** query strategy(ALL: return all record, MAX: return max record, REWARD: order by reward desc) */\n strategy: \"ALL\" | \"MAX\" | \"REWARD\";\n /** status(pending、claimable、claimed) */\n status: string;\n}\n\nexport interface MemberRankingItem {\n /** contribution description */\n isCurrentUser?: string;\n /** contribution description */\n role?: string;\n /** contribution value */\n avatarUrl?: string;\n /**\n * contribution description\n * @format int64\n */\n joinedAt?: number;\n /** user name */\n rank?: string;\n /** contribution description */\n invitationRewardScore?: string;\n /** contribution description */\n individualHonorScore?: string;\n /** contribution type */\n userName?: string;\n /** user avatar url */\n userId?: string;\n /** contribution description */\n totalHonorScore?: string;\n}\n\nexport interface WebResultBadgeSeriesDetailResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: BadgeSeriesCompositeVO;\n msgKey?: string;\n}\n\n/** 团队已解锁的徽章列表 */\nexport interface TeamRankingItemUnlockedBadgesInner {\n /** 徽章配置ID */\n badgeConfigId?: string;\n /** 徽章名称 */\n badgeName?: string;\n /**\n * 等级\n * @format int32\n */\n level?: number;\n /**\n * 荣誉分\n * @format int32\n */\n honorScore?: number;\n /**\n * 解锁时间\n * @format int64\n */\n unlockedAt?: number;\n /**\n * 进度百分比\n * @format int32\n */\n progress?: number;\n /** 描述 */\n description?: string;\n /** 徽章系列 */\n badgeSeries?: string;\n /** 徽章图片URL */\n badgeImage?: string;\n teamBadgeDetail?: BadgeVO;\n /** 稀有度 */\n rarity?: string;\n /** 解锁状态 */\n status?: string;\n}\n\n/** 徽章总结信息 */\nexport interface WebResultTeamBadgesResponseAllOfObjSummary {\n /**\n * 总徽章数量\n * @format int32\n */\n totalBadges?: number;\n /**\n * 已解锁徽章数量\n * @format int32\n */\n unlockedBadges?: number;\n /**\n * 总体解锁进度(0.0 - 1.0)\n * @format float\n */\n unlockProgress?: number;\n /**\n * 总荣誉积分\n * @format int32\n */\n totalHonorScore?: number;\n}\n\n/** 分页信息 */\nexport interface WebResultTeamLeaderboardResponseAllOfObjPagination {\n /**\n * 总页数\n * @format int32\n */\n totalPages?: number;\n /**\n * 每页条数\n * @format int32\n */\n pageSize?: number;\n /**\n * 当前页码\n * @format int32\n */\n currentPage?: number;\n /**\n * 总记录数\n * @format int32\n */\n totalCount?: number;\n}\n\nexport interface WebResultMemberProfileResponseAllOfObjScores {\n /**\n * 邀请奖励积分\n * @format int32\n * @example 250\n */\n invitationRewardScore?: number;\n /**\n * 个人荣誉积分\n * @format int32\n * @example 2200\n */\n individualHonorScore?: number;\n /**\n * 总荣誉积分\n * @format int32\n * @example 2450\n */\n totalHonorScore?: number;\n}\n\nexport interface WebResultTeamLeaderboardResponseAllOfObj {\n /** 团队排行榜列表 */\n leaderboard?: TeamRankingItem[];\n /** 分页信息 */\n pagination?: WebResultTeamLeaderboardResponseAllOfObjPagination;\n /** 个人所属团队信息及徽章详情 */\n personalTeamInfo?: WebResultTeamLeaderboardResponseAllOfObjPersonalTeamInfo;\n}\n\nexport interface WebResultNftSeriesResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: NftSeriesDetailVO[];\n msgKey?: string;\n}\n\nexport interface WebResultBadgesCheckResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n msgKey?: string;\n}\n\nexport interface WebResultBadgeContributorsResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultBadgeContributorsResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface WebResultListSeasonConfigVOAllOfObj {\n rows?: SeasonConfigVO[];\n}\n\n/** Badge check result */\nexport interface WebResultBadgeCheckResponseAllOfObj {\n /** List of claimable badges */\n badges?: BadgeVO[];\n /**\n * Last check timestamp\n * @format int64\n */\n lastCheckTimestamp?: number;\n /**\n * Number of claimable badges\n * @format int32\n */\n claimableCount?: number;\n}\n\n/** all nfts in series */\nexport interface NftVO {\n /**\n * minted Count\n * @format int64\n */\n mintedCount?: number;\n /** nft series logo */\n seriesLogo?: string;\n /** claimable id */\n claimableId?: string;\n /** nft type */\n type?: string;\n /**\n * nft tier\n * @format int32\n */\n tier?: number;\n /** price */\n price?: string;\n /** nft gateway logo */\n logo?: string;\n /**\n * reward\n * @format int32\n */\n reward?: number;\n /** show new tag */\n newTag?: boolean;\n /** nft complete process */\n process?: number;\n /** nft contract address */\n address?: string;\n /** nft token id */\n tokenId?: string;\n /** level */\n level?: string;\n /** nft series name */\n seriesName?: string;\n /**\n * total supply\n * @format int64\n */\n totalSupply?: number;\n /**\n * token sort\n * @format int32\n */\n sort?: number;\n /** nft condition max */\n maxCond?: number;\n /**\n * nft claimed time\n * @format int64\n */\n claimTime?: number;\n /** currency */\n token?: string;\n /** nft series type */\n series?: string;\n /** nft condition min */\n minCond?: number;\n /** nft name */\n name?: string;\n /** nft conditions and progress */\n progress?: NftProgressVO[];\n /** category */\n category?: string;\n /** business type */\n businessType?: string;\n /** nft desc */\n desc?: string;\n /** nft status(pending、claimable、claimed) */\n status?: string;\n /** nft rarity */\n rarity?: string;\n}\n\nexport interface BadgeSeriesCompositeVO {\n /** series ext */\n ext?: string;\n /**\n * total reward\n * @format int32\n */\n rewardTotal?: number;\n /** all badges in series */\n nfts?: BadgeVO[];\n /** series type */\n series?: string;\n /** series name */\n name?: string;\n /** series gateway logo */\n logo?: string;\n /** series detail */\n detail?: string;\n /**\n * series sort\n * @format int32\n */\n sort?: number;\n /** series type, unique key */\n type?: string;\n businessType?: string[];\n /** series group */\n group?: string;\n /** series desc */\n desc?: string;\n}\n\n/** nft conditions and progress */\nexport interface NftProgressVO {\n /** condition number */\n condition?: string;\n /** condition name */\n name?: string;\n /** condition type */\n type?: string;\n /** progress value */\n value?: string;\n}\n\n/** Badge assets data */\nexport interface WebResultBadgeAssetsResponseAllOfObj {\n /**\n * Total number of items\n * @format int64\n */\n total?: number;\n /** Next page token */\n nextToken?: string;\n /** List of user badge assets */\n rows?: BadgeVO[];\n}\n\nexport interface WebResultBadgeDetailResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: BadgeVO;\n msgKey?: string;\n}\n\nexport interface SeasonConfigVO {\n name?: string;\n levelConfig?: SeasonLevelConfigVO[];\n /**\n * season id\n * @format int64\n */\n id?: number;\n /**\n * season begin time\n * @format int64\n */\n beginTime?: number;\n /**\n * season end time\n * @format int64\n */\n endTime?: number;\n}\n\nexport interface WebResultBadgeResponseAllOfObj {\n /**\n * total count\n * @format int64\n */\n total?: number;\n nextToken?: string;\n rows?: BadgeVO[];\n}\n\nexport interface WebResultNotificationReadResponseAllOfObj {\n /**\n * 是否已读\n * @example true\n */\n isRead?: boolean;\n /**\n * 通知ID\n * @example \"notif_1234567890\"\n */\n notificationId?: string;\n /**\n * 读取时间的时间戳(毫秒)\n * @format int64\n * @example 1672531200000\n */\n readAt?: number;\n /**\n * 通知状态\n * @example \"READ\"\n */\n status?: string;\n}\n\nexport interface WebResultCreateTeamResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: TeamVO;\n msgKey?: string;\n}\n\nexport interface NftSeriesDetailVO {\n /** series ext */\n ext?: string;\n /**\n * total reward\n * @format int32\n */\n rewardTotal?: number;\n /** all nfts in series */\n nfts?: NftVO[];\n /** series type */\n series?: string;\n /** series name */\n name?: string;\n /** series gateway logo */\n logo?: string;\n /** series detail */\n detail?: string;\n /**\n * series sort\n * @format int32\n */\n sort?: number;\n /** series type, unique key */\n type?: string;\n /** series group */\n group?: string;\n /** series desc */\n desc?: string;\n}\n\nexport interface MintResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: MintResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface WebResultBadgeClaimableListResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n /** Pagination information */\n pagination?: WebResultBadgeClaimableListResponseAllOfPagination;\n success?: boolean;\n /** List of claimable badges */\n obj?: BadgeVO[];\n msgKey?: string;\n}\n\nexport interface BadgesCheckRequest {\n /**\n * amount, 上限 500\n * @format int32\n */\n amount?: number;\n /** token id */\n tokenId?: string;\n /** series */\n series: string;\n /** customer id */\n customerId: string;\n /** biz id */\n bizId: string;\n /** 条件的完成进度,非必填,默认为设置的目标值 */\n progress?: ProgressDTO[];\n}\n\nexport interface WebResultMemberRankingResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultMemberRankingResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface WebResultMemberProfileResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultMemberProfileResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface WebResultGrantBadgeResponseVOAllOfObj {\n result?: boolean;\n}\n\n/** 徽章总结信息 */\nexport interface WebResultTeamDetailResponseAllOfObjBadgeSummary {\n /**\n * 已解锁的徽章总数\n * @format int32\n * @example 12\n */\n totalUnlocked?: number;\n /**\n * 徽章总荣誉积分\n * @format int32\n * @example 6200\n */\n totalHonorScore?: number;\n}\n\nexport interface WebResultBadgeClaimSignatureResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n /** Badge claim signatures */\n obj?: WebResultBadgeClaimSignatureResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface WebResultIntervalResetResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n msgKey?: string;\n}\n\nexport interface TeamRemoveResponse {\n /** 移除原因 */\n reason?: string;\n /** 团队id */\n teamId?: string;\n /** 移除操作人id */\n removedBy?: string;\n /**\n * 移除时间戳,单位毫秒\n * @format int64\n */\n removedAt?: number;\n /** 被移除用户id */\n removedUserId?: string;\n}\n\nexport interface WebResultLeaveTeamResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: TeamLeaveResponse;\n msgKey?: string;\n}\n\nexport interface MintRequest {\n uid?: string;\n /** @format int64 */\n quantity?: number;\n /** token id */\n tokenId?: string;\n signature?: string;\n chainId?: string;\n price?: string;\n contractAddress?: string;\n currency?: string;\n /** @format int64 */\n validityEndTimestamp?: number;\n id?: string;\n /** @format int64 */\n validityStartTimestamp?: number;\n projectHandle?: string;\n}\n\nexport interface WebResultTeamDetailResponseAllOfObj {\n /**\n * 团队排名\n * @format int32\n * @example 150\n */\n globalRank?: number;\n /** 团队已解锁的徽章列表 */\n unlockedBadges?: TeamBadgeItem[];\n /** 队长用户名 */\n captainUserName?: string;\n /**\n * 团队头像URL\n * @example \"https://example.com/team-avatar.jpg\"\n */\n avatarUrl?: string;\n /**\n * 团队背景图片URL\n * @example \"https://example.com/team-bg.jpg\"\n */\n backgroundImage?: string;\n /**\n * 当前成员数量\n * @format int32\n * @example 45\n */\n memberCount?: number;\n /**\n * 团队描述\n * @example \"Top performers unite\"\n */\n description?: string;\n /**\n * 创建时间的时间戳(毫秒)\n * @format int64\n * @example 1672531200000\n */\n createdAt?: number;\n /**\n * 最大成员数量\n * @format int32\n * @example 50\n */\n maxMembers?: number;\n /**\n * 当前用户在团队中的角色\n * @example \"MEMBER\"\n */\n myRole?: string;\n /** 徽章总结信息 */\n badgeSummary?: WebResultTeamDetailResponseAllOfObjBadgeSummary;\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /**\n * 团队名称\n * @example \"Elite Hunters\"\n */\n name?: string;\n /**\n * 当前用户加入团队的时间戳(毫秒)\n * @format int64\n * @example 1672531200000\n */\n myJoinedAt?: number;\n /**\n * 团队类型\n * @example \"PRIVATE\"\n */\n teamType?: string;\n /** 团队徽章分类列表 */\n badgeCategories?: string[];\n /** 队长用户ID */\n captainUserId?: string;\n /**\n * 团队总荣誉积分\n * @format int32\n * @example 98750\n */\n totalHonorScore?: number;\n /**\n * 团队状态\n * @example \"ACTIVE\"\n */\n status?: string;\n /**\n * 最后更新时间的时间戳(毫秒)\n * @format int64\n * @example 1672617600000\n */\n updatedAt?: number;\n}\n\n/** 个人在该团队中的徽章详情列表 */\nexport interface WebResultTeamLeaderboardResponseAllOfObjPersonalTeamInfoBadgeDetails {\n /** 徽章ID */\n badgeId?: string;\n /** 徽章名称 */\n badgeName?: string;\n /**\n * 徽章等级\n * @format int32\n */\n level?: number;\n /**\n * 徽章进度百分比\n * @format int32\n */\n progress?: number;\n /** 徽章描述 */\n description?: string;\n /** 徽章图片URL */\n badgeImage?: string;\n}\n\nexport interface WebResultCheckResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n msgKey?: string;\n}\n\nexport interface WebResultTeamLeaderboardResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultTeamLeaderboardResponseAllOfObj;\n msgKey?: string;\n}\n\n/** List of claim signatures */\nexport interface WebResultBadgeClaimSignatureResponseAllOfObjSignatures {\n /** Unique identifier */\n uid?: string;\n /**\n * Quantity to mint\n * @format int64\n */\n quantity?: number;\n /** Badge identifier */\n badgeId?: string;\n /** Claim signature */\n signature?: string;\n /** Chain identifier */\n chainId?: string;\n /** Price */\n price?: string;\n /** Contract address */\n contractAddress?: string;\n /** Currency */\n currency?: string;\n /**\n * Signature validity end time\n * @format int64\n */\n validityEndTimestamp?: number;\n /** Request identifier */\n id?: string;\n /**\n * Signature validity start time\n * @format int64\n */\n validityStartTimestamp?: number;\n /** Project handle */\n projectHandle?: string;\n}\n\nexport interface IntervalResetRequest {\n /** series */\n series?: string;\n /** customer id */\n customerId: string;\n}\n\nexport interface WebResultCheckResultResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultCheckResultResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface WebResultAssetsBadgeResponseAllOfObj {\n rows?: AssetsBadgeResponse[];\n}\n\n/** 贡献者列表 */\nexport interface TeamContributorItem {\n /**\n * 贡献类型\n * @example \"BADGE_HOLDER\"\n */\n contributionType?: string;\n /**\n * 用户头像URL\n * @example \"https://example.com/user-avatar-1.jpg\"\n */\n avatarUrl?: string;\n /** ext user id */\n extUserId?: string;\n /**\n * 贡献值\n * @format int32\n * @example 1\n */\n contributionValue?: number;\n /**\n * 贡献描述\n * @example \"持有个人徽章001\"\n */\n contributionDescription?: string;\n /**\n * 用户名\n * @example \"Captain\"\n */\n userName?: string;\n /** user id */\n userId?: string;\n}\n\nexport interface NFTMintRequestVO {\n /** customer address */\n customerAddress?: string;\n /** nft type */\n nftType?: \"badge\";\n /** nft address */\n contractAddress?: string;\n /** claimable ids */\n claimableIds?: string[];\n}\n\nexport interface WebResultBadgeVerifiersResponse {\n /**\n * Response code\n * @example \"0000\"\n */\n code?: string;\n /** Badge condition configuration result */\n data?: WebResultBadgeConditionConfigResponseData;\n /**\n * Response message\n * @example \"success\"\n */\n message?: string;\n}\n\nexport interface WebResultAssetsBadgeResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultAssetsBadgeResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface WebResultNotificationsResponseAllOfObj {\n /** 分页信息 */\n pagination?: WebResultNotificationsResponseAllOfObjPagination;\n /**\n * 未读通知数量\n * @format int32\n * @example 3\n */\n unreadCount?: number;\n /** 用户的团队通知列表 */\n notifications?: WebResultNotificationsResponseAllOfObjNotifications[];\n}\n\n/** badge condition list */\nexport interface Condition {\n /** condition scope */\n scope: string;\n /** condition name */\n name: string;\n /** condition type */\n type: string;\n /** condition target */\n target: string;\n /** verify status */\n status?: string;\n}\n\nexport interface WebResultTeamBadgesResponseAllOfObj {\n /** 团队徽章列表 */\n badges?: TeamBadgeItem[];\n /** 徽章总结信息 */\n summary?: WebResultTeamBadgesResponseAllOfObjSummary;\n}\n\nexport interface MintResponseAllOfObj {\n rows?: MintRequest[];\n}\n\n/** Badge claim signatures */\nexport interface WebResultBadgeClaimSignatureResponseAllOfObj {\n /** List of claim signatures */\n signatures?: WebResultBadgeClaimSignatureResponseAllOfObjSignatures[];\n}\n\nexport interface TeamVO {\n /**\n * 团队名称\n * @example \"Awesome Team\"\n */\n teamName?: string;\n /**\n * 团队最大成员数量\n * @format int32\n * @example 50\n */\n maxMemberCount?: number;\n /**\n * 团队头像地址\n * @example \"https://example.com/avatar.png\"\n */\n avatarUrl?: string;\n /**\n * 团队背景图地址\n * @example \"https://example.com/background.png\"\n */\n backgroundImage?: string;\n /**\n * 团队成员数量\n * @format int32\n * @example 42\n */\n memberCount?: number;\n /**\n * 团队描述\n * @example \"This is an awesome team.\"\n */\n description?: string;\n /**\n * 创建时间(UTC毫秒)\n * @format int64\n * @example 1672531200000\n */\n createdAt?: number;\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /**\n * 团队荣誉分(用于排行榜)\n * @format int32\n * @example 1500\n */\n honorScore?: number;\n /**\n * 团队类型(public/private/invite_only)\n * @example \"public\"\n */\n teamType?: string;\n /**\n * 队长用户ID\n * @example \"user_9876543210\"\n */\n captainUserId?: string;\n /**\n * 团队总荣誉分\n * @format int32\n * @example 5000\n */\n totalHonorScore?: number;\n /**\n * 团队状态(active/inactive/deleted)\n * @example \"active\"\n */\n status?: string;\n /**\n * 更新时间(UTC毫秒)\n * @format int64\n * @example 1672617600000\n */\n updatedAt?: number;\n}\n\nexport interface WebResultMemberRankingResponseAllOfObjPaginationSummaryTopContributor {\n /** User name of the top contributor */\n userName?: string;\n /** user id */\n userId?: string;\n /**\n * Total honor score of the top contributor\n * @format int32\n */\n totalHonorScore?: number;\n}\n\nexport interface WebResultMemberProfileResponseAllOfObjRanking {\n /**\n * 如果用户未加入团队,此字段为null\n * @format int32\n * @example 45\n */\n totalMembers?: number;\n /**\n * 如果用户未加入团队,此字段为null\n * @format int32\n * @example 1\n */\n currentUserRank?: number;\n}\n\nexport interface WebResultListSeasonConfigVO {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultListSeasonConfigVOAllOfObj;\n msgKey?: string;\n}\n\nexport interface WebResultBadgeResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultBadgeResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface WebResultMemberRankingResponseAllOfObjPagination {\n summary?: WebResultMemberRankingResponseAllOfObjPaginationSummary;\n /**\n * Total number of pages\n * @format int32\n */\n totalPages?: number;\n /**\n * Number of items per page\n * @format int32\n */\n pageSize?: number;\n /**\n * Current page number\n * @format int32\n */\n currentPage?: number;\n /**\n * Total number of items\n * @format int64\n */\n totalCount?: number;\n}\n\nexport interface BatchMintRequestVO {\n /** customer address */\n customerAddress: string;\n /** nft address */\n contractAddress: string;\n /** token ids */\n tokenIds: string[];\n}\n\nexport interface BadgeVO {\n /**\n * minted Count\n * @format int64\n */\n mintedCount?: number;\n /** badge series logo */\n seriesLogo?: string;\n /** claimable id */\n claimableId?: string;\n /** badge type */\n type?: string;\n /**\n * badge tier\n * @format int32\n */\n tier?: number;\n /** price */\n price?: string;\n /** badge gateway logo */\n logo?: string;\n /**\n * reward\n * @format int32\n */\n reward?: number;\n /** show new tag */\n newTag?: boolean;\n /** badge complete process */\n process?: number;\n /** badge contract address */\n address?: string;\n /** badge token id */\n tokenId?: string;\n /** level */\n level?: string;\n /** badge series name */\n seriesName?: string;\n /**\n * total supply\n * @format int64\n */\n totalSupply?: number;\n /**\n * token sort\n * @format int32\n */\n sort?: number;\n /** badge condition max */\n maxCond?: number;\n /**\n * badge claimed time\n * @format int64\n */\n claimTime?: number;\n /** currency */\n token?: string;\n /** badge condition list */\n condition?: Condition[];\n /** badge series type */\n series?: string;\n /** badge condition min */\n minCond?: number;\n /** badge name */\n name?: string;\n /** badge conditions and progress */\n progress?: BadgeProgressVO[];\n /** category */\n category?: string;\n /** business type */\n businessType?: string;\n /** badge desc */\n desc?: string;\n /** badge status(pending、claimable、claimed) */\n status?: string;\n /** badge rarity */\n rarity?: string;\n}\n\nexport interface TeamLeaveResponse {\n /** 离开时间 */\n leftAt?: string;\n /**\n * 冷静期结束时间\n * @format int64\n */\n coolingPeriodEnd?: number;\n /** 团队id */\n teamId?: string;\n /** 是否在冷静期内 */\n coolingPeriodApplied?: boolean;\n /** 用户id */\n userId?: string;\n}\n\nexport interface WebResultGrantBadgeRequestVO {\n signature?: string;\n week_id?: number;\n level_id?: number;\n season_id?: number;\n customer_id?: string;\n business_id?: string;\n}\n\nexport interface WebResultTeamDetailResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultTeamDetailResponseAllOfObj;\n msgKey?: string;\n}\n\n/** badge conditions and progress */\nexport interface BadgeProgressVO {\n /** condition number */\n condition?: string;\n /** condition name */\n name?: string;\n /** condition type */\n type?: string;\n /** progress value */\n value?: string;\n}\n\n/** 贡献总结信息 */\nexport interface WebResultBadgeContributorsResponseAllOfObjSummary {\n /**\n * 是否参与了解锁徽章\n * @example true\n */\n participateContributions?: boolean;\n /**\n * 当前贡献进度(0.0 - 1.0)\n * @format float\n * @example 1\n */\n contributionProgress?: number;\n /**\n * 总贡献者数量\n * @format int32\n * @example 15\n */\n totalContributors?: number;\n /**\n * 解锁所需贡献者数量\n * @format int32\n * @example 10\n */\n requiredContributors?: number;\n}\n\n/** Badge condition configuration result */\nexport interface WebResultBadgeConditionConfigResponseData {\n /** Configuration as JSON string */\n config?: string;\n}\n\nexport interface WebResultMemberRankingResponseAllOfObjPaginationSummary {\n /**\n * Total number of team members\n * @format int32\n */\n totalMembers?: number;\n /**\n * Average honor score of team members\n * @format int32\n */\n averageHonorScore?: number;\n topContributor?: WebResultMemberRankingResponseAllOfObjPaginationSummaryTopContributor;\n}\n\n/** 团队排行榜列表 */\nexport interface TeamRankingItem {\n /** 团队名称 */\n teamName?: string;\n /** 团队已解锁的徽章列表 */\n unlockedBadges?: TeamRankingItemUnlockedBadgesInner[];\n /** 队长用户名 */\n captainUserName?: string;\n /** 团队头像URL */\n avatarUrl?: string;\n /** 团队背景图片URL */\n backgroundImage?: string;\n /**\n * 团队成员数量\n * @format int32\n */\n memberCount?: number;\n /** 团队描述 */\n description?: string;\n /**\n * 团队创建时间(时间戳)\n * @format int64\n */\n createdAt?: number;\n /**\n * 团队总成员数量上限\n * @format int32\n */\n maxMembers?: number;\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /**\n * 团队排名\n * @format int32\n */\n rank?: number;\n /** 团队类型(如公开、私密) */\n teamType?: string;\n /** 队长用户ID */\n captainUserId?: string;\n /**\n * 团队总荣誉分\n * @format int32\n */\n totalHonorScore?: number;\n}\n\nexport interface WebResultTeamBadgesResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: WebResultTeamBadgesResponseAllOfObj;\n msgKey?: string;\n}\n\nexport interface SeasonLevelConfigVO {\n /**\n * season level jump point\n * @format int64\n */\n jumpPoint?: number;\n /** season level name */\n name?: string;\n /** season level icon */\n icon?: string;\n /** season level share image */\n shareImage?: string;\n /**\n * season level slide rank\n * @format int64\n */\n slideRank?: number;\n /**\n * season level id\n * @format int64\n */\n id?: number;\n /**\n * season level jump rank\n * @format int64\n */\n jumpRank?: number;\n /** season level desc */\n desc?: string;\n}\n\n/** Pagination information */\nexport interface WebResultBadgeClaimableListResponseAllOfPagination {\n /**\n * Total number of items\n * @format int32\n */\n total?: number;\n /** Next page token */\n nextToken?: string;\n}\n\nexport interface WebResultMemberProfileResponseAllOfObj {\n /**\n * 如果用户未加入团队,此字段为null\n * @example \"CAPTAIN\"\n */\n role?: string;\n /**\n * 用户退出团队后的冷却期结束时间,单位为毫秒时间戳。如果不在冷却期内,此字段为null\n * @format int64\n */\n coolingPeriodEnd?: number;\n scores?: WebResultMemberProfileResponseAllOfObjScores;\n /**\n * 如果用户未加入团队,此字段为null\n * @format int64\n * @example 1672531200000\n */\n joinedAt?: number;\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /** 如果用户未加入团队,此字段为null */\n invitedByUserId?: string;\n ranking?: WebResultMemberProfileResponseAllOfObjRanking;\n /**\n * 用户名称\n * @example \"team_1234567890\"\n */\n userName?: string;\n /**\n * 用户唯一ID\n * @example \"team_1234567890\"\n */\n userId?: string;\n}\n\n/** 分页信息 */\nexport interface WebResultNotificationsResponseAllOfObjPagination {\n /**\n * 总页数\n * @format int32\n * @example 1\n */\n totalPages?: number;\n /**\n * 每页记录数\n * @format int32\n * @example 20\n */\n pageSize?: number;\n /**\n * 当前页码\n * @format int32\n * @example 1\n */\n currentPage?: number;\n /**\n * 总记录数\n * @format int32\n * @example 15\n */\n totalCount?: number;\n}\n\nexport interface PurchaseRequest {\n /** tokenId */\n tokenId: string;\n /** customer id */\n customerId: string;\n /**\n * purchase discount\n * @format float\n */\n discount?: number;\n /** mint to address */\n toAddress: string;\n}\n\nexport interface WebResultJoinTeamResponse {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: TeamVO;\n msgKey?: string;\n}\n\nexport interface UserOpHashProcessRequest {\n /** 合约调用成功后返回的:userOpsHash */\n userOperationHash: string;\n /** 处理类型 */\n processType?: \"ERC20_TRANSFER\";\n}\n\nexport interface WebResultUserOpHashProcess {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: string;\n msgKey?: string;\n}\n\nexport interface WebResultTransactionHashProcess {\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n code?: string;\n success?: boolean;\n obj?: boolean;\n msgKey?: string;\n}\n\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = keyof Omit<Body, \"body\" | \"bodyUsed\">;\n\nexport interface FullRequestParams extends Omit<RequestInit, \"body\"> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n type?: ContentType;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** request cancellation token */\n cancelToken?: CancelToken;\n}\n\nexport type RequestParams = Omit<\n FullRequestParams,\n \"body\" | \"method\" | \"query\" | \"path\"\n>;\n\nexport interface ApiConfig<SecurityDataType = unknown> {\n baseUrl?: string;\n baseApiParams?: Omit<RequestParams, \"baseUrl\" | \"cancelToken\" | \"signal\">;\n securityWorker?: (\n securityData: SecurityDataType | null,\n ) => Promise<RequestParams | void> | RequestParams | void;\n customFetch?: typeof fetch;\n}\n\nexport interface HttpResponse<D extends unknown, E extends unknown = unknown>\n extends Response {\n data: D;\n error: E;\n}\n\ntype CancelToken = Symbol | string | number;\n\nexport enum ContentType {\n Json = \"application/json\",\n JsonApi = \"application/vnd.api+json\",\n FormData = \"multipart/form-data\",\n UrlEncoded = \"application/x-www-form-urlencoded\",\n Text = \"text/plain\",\n}\n\nexport class HttpClient<SecurityDataType = unknown> {\n public baseUrl: string = \"https://anchordev.dipbit.xyz/\";\n private securityData: SecurityDataType | null = null;\n private securityWorker?: ApiConfig<SecurityDataType>[\"securityWorker\"];\n private abortControllers = new Map<CancelToken, AbortController>();\n private customFetch = (...fetchParams: Parameters<typeof fetch>) =>\n fetch(...fetchParams);\n\n private baseApiParams: RequestParams = {\n credentials: \"same-origin\",\n headers: {},\n redirect: \"follow\",\n referrerPolicy: \"no-referrer\",\n };\n\n constructor(apiConfig: ApiConfig<SecurityDataType> = {}) {\n Object.assign(this, apiConfig);\n }\n\n public setSecurityData = (data: SecurityDataType | null) => {\n this.securityData = data;\n };\n\n protected encodeQueryParam(key: string, value: any) {\n const encodedKey = encodeURIComponent(key);\n return `${encodedKey}=${encodeURIComponent(typeof value === \"number\" ? value : `${value}`)}`;\n }\n\n protected addQueryParam(query: QueryParamsType, key: string) {\n return this.encodeQueryParam(key, query[key]);\n }\n\n protected addArrayQueryParam(query: QueryParamsType, key: string) {\n const value = query[key];\n return value.map((v: any) => this.encodeQueryParam(key, v)).join(\"&\");\n }\n\n protected toQueryString(rawQuery?: QueryParamsType): string {\n const query = rawQuery || {};\n const keys = Object.keys(query).filter(\n (key) => \"undefined\" !== typeof query[key],\n );\n return keys\n .map((key) =>\n Array.isArray(query[key])\n ? this.addArrayQueryParam(query, key)\n : this.addQueryParam(query, key),\n )\n .join(\"&\");\n }\n\n protected addQueryParams(rawQuery?: QueryParamsType): string {\n const queryString = this.toQueryString(rawQuery);\n return queryString ? `?${queryString}` : \"\";\n }\n\n private contentFormatters: Record<ContentType, (input: any) => any> = {\n [ContentType.Json]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.JsonApi]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.Text]: (input: any) =>\n input !== null && typeof input !== \"string\"\n ? JSON.stringify(input)\n : input,\n [ContentType.FormData]: (input: any) => {\n if (input instanceof FormData) {\n return input;\n }\n\n return Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n formData.append(\n key,\n property instanceof Blob\n ? property\n : typeof property === \"object\" && property !== null\n ? JSON.stringify(property)\n : `${property}`,\n );\n return formData;\n }, new FormData());\n },\n [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...(params2 || {}),\n headers: {\n ...(this.baseApiParams.headers || {}),\n ...(params1.headers || {}),\n ...((params2 && params2.headers) || {}),\n },\n };\n }\n\n protected createAbortSignal = (\n cancelToken: CancelToken,\n ): AbortSignal | undefined => {\n if (this.abortControllers.has(cancelToken)) {\n const abortController = this.abortControllers.get(cancelToken);\n if (abortController) {\n return abortController.signal;\n }\n return void 0;\n }\n\n const abortController = new AbortController();\n this.abortControllers.set(cancelToken, abortController);\n return abortController.signal;\n };\n\n public abortRequest = (cancelToken: CancelToken) => {\n const abortController = this.abortControllers.get(cancelToken);\n\n if (abortController) {\n abortController.abort();\n this.abortControllers.delete(cancelToken);\n }\n };\n\n public request = async <T = any, E = any>({\n body,\n secure,\n path,\n type,\n query,\n format,\n baseUrl,\n cancelToken,\n ...params\n }: FullRequestParams): Promise<HttpResponse<T, E>> => {\n const secureParams =\n ((typeof secure === \"boolean\" ? secure : this.baseApiParams.secure) &&\n this.securityWorker &&\n (await this.securityWorker(this.securityData))) ||\n {};\n const requestParams = this.mergeRequestParams(params, secureParams);\n const queryString = query && this.toQueryString(query);\n const payloadFormatter = this.contentFormatters[type || ContentType.Json];\n const responseFormat = format || requestParams.format;\n\n return this.customFetch(\n `${baseUrl || this.baseUrl || \"\"}${path}${queryString ? `?${queryString}` : \"\"}`,\n {\n ...requestParams,\n headers: {\n ...(requestParams.headers || {}),\n ...(type && type !== ContentType.FormData\n ? { \"Content-Type\": type }\n : {}),\n },\n signal:\n (cancelToken\n ? this.createAbortSignal(cancelToken)\n : requestParams.signal) || null,\n body:\n typeof body === \"undefined\" || body === null\n ? null\n : payloadFormatter(body),\n },\n ).then(async (response) => {\n const r = response as HttpResponse<T, E>;\n r.data = null as unknown as T;\n r.error = null as unknown as E;\n\n const data = !responseFormat\n ? r\n : await response[responseFormat]()\n .then((data) => {\n if (r.ok) {\n r.data = data;\n } else {\n r.error = data;\n }\n return r;\n })\n .catch((e) => {\n r.error = e;\n return r;\n });\n\n if (cancelToken) {\n this.abortControllers.delete(cancelToken);\n }\n\n if (!response.ok) throw data;\n return data;\n });\n };\n}\n\n/**\n * @title Anchor OpenApi\n * @version V1.0\n * @license Apache 2.0 (http://springdoc.org)\n * @baseUrl https://anchordev.dipbit.xyz/\n */\nexport class Api<\n SecurityDataType extends unknown,\n> extends HttpClient<SecurityDataType> {\n v1 = {\n /**\n * @description get nft series by id\n *\n * @tags Anchor\n * @name GetNftSeriesById\n * @summary get nft series by id\n * @request GET:/v1/series/{type}/{series}\n */\n getNftSeriesById: (\n type: string,\n series: string,\n query?: {\n /** 用户id */\n customerId?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultNftSeriesDetailResponse, any>({\n path: `/v1/series/${type}/${series}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取团队排行榜,支持分页查询,返回个人团队信息\n *\n * @tags TeamV1\n * @name GetTeamLeaderboard\n * @summary Get team leaderboard\n * @request GET:/v1/teams/leaderboard\n */\n getTeamLeaderboard: (\n query?: {\n /** @format int32 */\n page?: number;\n /** @format int32 */\n size?: number;\n type?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultTeamLeaderboardResponse, any>({\n path: `/v1/teams/leaderboard`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description anchor check\n *\n * @tags Anchor\n * @name Check\n * @summary anchor check\n * @request POST:/v1/check/{type}\n */\n check: (type: string, params: RequestParams = {}) =>\n this.request<WebResultCheckResponse, any>({\n path: `/v1/check/${type}`,\n method: \"POST\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description get check result\n *\n * @tags Anchor\n * @name GetCheckResult\n * @summary get check result\n * @request GET:/v1/check/{type}\n */\n getCheckResult: (type: string, params: RequestParams = {}) =>\n this.request<WebResultCheckResultResponse, any>({\n path: `/v1/check/${type}`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取团队详情,包含已解锁的徽章信息\n *\n * @tags TeamV1\n * @name GetTeamDetail\n * @summary Get team detail\n * @request GET:/v1/teams/{teamId}/detail\n */\n getTeamDetail: (teamId: string, params: RequestParams = {}) =>\n this.request<WebResultTeamDetailResponse, any>({\n path: `/v1/teams/${teamId}/detail`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 标记指定通知为已读状态\n *\n * @tags TeamV1\n * @name MarkNotificationRead\n * @summary Mark notification as read\n * @request POST:/v1/notifications/{notificationId}/read\n */\n markNotificationRead: (\n notificationId: string,\n params: RequestParams = {},\n ) =>\n this.request<WebResultNotificationReadResponse, any>({\n path: `/v1/notifications/${notificationId}/read`,\n method: \"POST\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description list season config\n *\n * @tags Season\n * @name ListSeasonConfig\n * @summary list season config\n * @request GET:/v1/seasons\n */\n listSeasonConfig: (params: RequestParams = {}) =>\n this.request<WebResultListSeasonConfigVO, any>({\n path: `/v1/seasons`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取指定徽章的贡献者列表\n *\n * @tags TeamV1\n * @name GetBadgeContributors\n * @summary Get badge contributors\n * @request GET:/v1/teams/badges/{badgeId}/contributors\n */\n getBadgeContributors: (badgeId: string, params: RequestParams = {}) =>\n this.request<WebResultBadgeContributorsResponse, any>({\n path: `/v1/teams/badges/${badgeId}/contributors`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description query user claimable or claimed Badges\n *\n * @tags Anchor\n * @name BadgeAssets\n * @summary query user claimable or claimed Badges\n * @request GET:/v1/badges\n */\n badgeAssets: (\n query?: {\n /** customer id */\n customerId?: string;\n /** nft status, values(claimable、claimed) */\n status?: string;\n /** 返回数据的策略(all:返回所有徽章, max:仅返回同系列等级最高的徽章, reward:按照reward倒序返回, time:按照时间倒序返回) */\n strategy?: string;\n /** badge series */\n series?: string;\n /**\n * 每页条数\n * @format int32\n */\n limit?: number;\n /** 分页参数 */\n nextToken?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultBadgeResponse, any>({\n path: `/v1/badges`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取团队内成员贡献排行榜\n *\n * @tags TeamV1\n * @name GetTeamMemberRanking\n * @summary Get team member ranking\n * @request GET:/v1/teams/{teamId}/members/ranking\n */\n getTeamMemberRanking: (\n teamId: string,\n query?: {\n /** @format int32 */\n page?: number;\n /** @format int32 */\n size?: number;\n type?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultMemberRankingResponse, any>({\n path: `/v1/teams/${teamId}/members/ranking`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取团队所有徽章的状态信息,支持按状态筛选\n *\n * @tags TeamV1\n * @name GetTeamBadges\n * @summary Get team badges\n * @request GET:/v1/teams/badges\n */\n getTeamBadges: (\n query?: {\n category?: string;\n status?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultTeamBadgesResponse, any>({\n path: `/v1/teams/badges`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description get nft series\n *\n * @tags Anchor\n * @name NftSeries\n * @summary get nft series\n * @request GET:/v1/series/{type}\n */\n nftSeries: (type: string, params: RequestParams = {}) =>\n this.request<WebResultNftSeriesResponse, any>({\n path: `/v1/series/${type}`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取当前用户的个人概况信息\n *\n * @tags TeamV1\n * @name GetMyTeamProfile\n * @summary Get my team profile\n * @request GET:/v1/teams/members/me\n */\n getMyTeamProfile: (params: RequestParams = {}) =>\n this.request<WebResultMemberProfileResponse, any>({\n path: `/v1/teams/members/me`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取用户的通知列表\n *\n * @tags TeamV1\n * @name GetNotifications\n * @summary Get notifications\n * @request GET:/v1/notifications\n */\n getNotifications: (\n query?: {\n teamId?: string;\n /** @format int32 */\n page?: number;\n /** @format int32 */\n size?: number;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultNotificationsResponse, any>({\n path: `/v1/notifications`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 前端监听到合约成功事件,调用加快后端事件处理\n *\n * @tags Transaction\n * @name UserOpHashProcess\n * @summary userOpHash process\n * @request POST:/v1/transaction/process/userOpHash\n */\n userOpHashProcess: (\n data: UserOpHashProcessRequest,\n params: RequestParams = {},\n ) =>\n this.request<WebResultUserOpHashProcess, any>({\n path: `/v1/transaction/process/userOpHash`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 前端监听到合约成功事件,调用加快后端事件处理\n *\n * @tags Transaction\n * @name TransactionHashProcess\n * @summary speed up transaction\n * @request POST:/v1/transaction/process/{txHash}\n */\n transactionHashProcess: (txHash: string, params: RequestParams = {}) =>\n this.request<WebResultTransactionHashProcess, any>({\n path: `/v1/transaction/process/${txHash}`,\n method: \"POST\",\n format: \"json\",\n ...params,\n }),\n };\n v2 = {\n /**\n * @description Get badges that the user can claim\n *\n * @tags BadgeV2\n * @name GetUserClaimableBadges\n * @summary Get user claimable badges\n * @request GET:/v2/badges/claimable\n */\n getUserClaimableBadges: (\n query?: {\n /** Badge series filter */\n series?: string;\n /**\n * Number of items per page\n * @format int32\n */\n limit?: number;\n /** Pagination token */\n nextToken?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeClaimableListResponse,\n WebResultBadgeClaimableListResponse\n >({\n path: `/v2/badges/claimable`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get detailed information of a specific badge series\n *\n * @tags BadgeV2\n * @name GetBadgeSeriesDetail\n * @summary Get badge series detail\n * @request GET:/v2/badges/series/{series}\n */\n getBadgeSeriesDetail: (\n series: string,\n query?: {\n /** claim status */\n status?: string;\n /** badge business type */\n businessType?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeSeriesDetailResponse,\n WebResultBadgeSeriesDetailResponse\n >({\n path: `/v2/badges/series/${series}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get user's claimed and claimable badge assets\n *\n * @tags BadgeV2\n * @name GetUserBadgeAssets\n * @summary Get user badge assets\n * @request GET:/v2/badges/assets\n */\n getUserBadgeAssets: (\n query?: {\n /** Badge status include claimable */\n includeClaimable?: boolean;\n /** Return strategy (BADGE_ALL: return all badges, BADGE_MAX: return highest level per series, BADGE_REWARD: sort by reward) */\n strategy?: string;\n /** Badge series filter */\n series?: string[];\n /**\n * Number of items per page\n * @format int32\n */\n limit?: number;\n /** Pagination token */\n nextToken?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultBadgeAssetsResponse, WebResultBadgeAssetsResponse>({\n path: `/v2/badges/assets`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get verifiers for badge conditions based on platform and type\n *\n * @tags BadgeV2\n * @name GetBadgeVerifiers\n * @summary Get badge verifiers\n * @request GET:/v2/badges/verifiers\n */\n getBadgeVerifiers: (\n query: {\n /** Platform identifier */\n platform: string;\n /** Condition type */\n type: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeVerifiersResponse,\n WebResultBadgeVerifiersResponse\n >({\n path: `/v2/badges/verifiers`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Check which badges the user can claim\n *\n * @tags BadgeV2\n * @name CheckUserClaimableBadges\n * @summary Check user claimable badges\n * @request POST:/v2/badges\n */\n checkUserClaimableBadges: (data: object, params: RequestParams = {}) =>\n this.request<WebResultBadgeCheckResponse, WebResultBadgeCheckResponse>({\n path: `/v2/badges`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Query badge series with optional filtering conditions\n *\n * @tags BadgeV2\n * @name GetBadgeSeries\n * @summary Query badge series with conditions\n * @request GET:/v2/badges/series\n */\n getBadgeSeries: (\n query?: {\n /** include badges */\n includeBadges?: boolean;\n /** include badges status */\n status?: string;\n /** include badges business type */\n businessType?: string;\n /**\n * include badges limit\n * @format int32\n */\n limit?: number;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultBadgeSeriesResponse, WebResultBadgeSeriesResponse>({\n path: `/v2/badges/series`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description anchor mint\n *\n * @tags AnchorV2\n * @name Mint\n * @summary anchor mint\n * @request POST:/v2/mint/{type}\n */\n mint: (type: string, data: NFTMintRequestVO, params: RequestParams = {}) =>\n this.request<MintResponse, any>({\n path: `/v2/mint/${type}`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description anchor batch mint\n *\n * @tags AnchorV2\n * @name BatchMint\n * @summary anchor batch mint\n * @request POST:/v2/batch/mint/{type}\n */\n batchMint: (\n type: string,\n data: BatchMintRequestVO,\n params: RequestParams = {},\n ) =>\n this.request<MintResponse, any>({\n path: `/v2/batch/mint/${type}`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get signatures required for claiming badges\n *\n * @tags BadgeV2\n * @name GetBadgeClaimSignatures\n * @summary Get badge claim signatures\n * @request POST:/v2/badges/signatures\n */\n getBadgeClaimSignatures: (\n data: BadgeClaimSignatureRequest,\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeClaimSignatureResponse,\n WebResultBadgeClaimSignatureResponse\n >({\n path: `/v2/badges/signatures`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Check if a specific badge is claimable for the user\n *\n * @tags BadgeV2\n * @name CheckSingleBadgeClaimable\n * @summary Check single badge claimable status\n * @request POST:/v2/badges/{badgeId}\n */\n checkSingleBadgeClaimable: (\n badgeId: string,\n data: BadgeSingleCheckRequest,\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeClaimSignatureResponse,\n WebResultBadgeClaimSignatureResponse\n >({\n path: `/v2/badges/${badgeId}`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get detailed information of a specific badge\n *\n * @tags BadgeV2\n * @name GetBadgeDetail\n * @summary Get badge detail\n * @request GET:/v2/badges/{badgeId}\n */\n getBadgeDetail: (badgeId: string, params: RequestParams = {}) =>\n this.request<WebResultBadgeDetailResponse, WebResultBadgeDetailResponse>({\n path: `/v2/badges/${badgeId}`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n };\n s1 = {\n /**\n * @description 退出当前团队\n *\n * @tags AnchorS2S\n * @name LeaveTeam\n * @summary Leave team (self)\n * @request DELETE:/s1/teams/leave/{userId}\n */\n leaveTeam: (userId: string, params: RequestParams = {}) =>\n this.request<WebResultLeaveTeamResponse, any>({\n path: `/s1/teams/leave/${userId}`,\n method: \"DELETE\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 加入团队,支持通过邀请码或直接指定团队ID\n *\n * @tags AnchorS2S\n * @name JoinTeam\n * @summary Join team\n * @request POST:/s1/teams/join\n */\n joinTeam: (data: object, params: RequestParams = {}) =>\n this.request<WebResultJoinTeamResponse, any>({\n path: `/s1/teams/join`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description get nft series by id\n *\n * @tags AnchorS2S\n * @name GetNftSeriesDetail\n * @summary get nft series by id\n * @request GET:/s1/series/{type}/{series}\n */\n getNftSeriesDetail: (\n type: string,\n series: string,\n query?: {\n /** 用户id */\n customerId?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultNftSeriesDetailResponse, any>({\n path: `/s1/series/${type}/${series}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 队长移除团队成员\n *\n * @tags AnchorS2S\n * @name RemoveTeamMember\n * @summary Remove member by captain\n * @request DELETE:/s1/teams/remove/{captainUserId}/{userId}\n */\n removeTeamMember: (\n captainUserId: string,\n userId: string,\n params: RequestParams = {},\n ) =>\n this.request<WebResultRemoveMemberResponse, any>({\n path: `/s1/teams/remove/${captainUserId}/${userId}`,\n method: \"DELETE\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 重制探测徽章冷却时间\n *\n * @tags AnchorS2S\n * @name IntervalReset\n * @summary interval reset\n * @request POST:/s1/interval/reset\n */\n intervalReset: (data: IntervalResetRequest, params: RequestParams = {}) =>\n this.request<WebResultIntervalResetResponse, any>({\n path: `/s1/interval/reset`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description grant badge\n *\n * @tags AnchorS2S\n * @name GrantBadge\n * @summary grant badge\n * @request POST:/s1/badges\n */\n grantBadge: (\n data: WebResultGrantBadgeRequestVO,\n params: RequestParams = {},\n ) =>\n this.request<WebResultGrantBadgeResponseVO, any>({\n path: `/s1/badges`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description purchase mint with signature\n *\n * @tags AnchorS2S\n * @name PurchaseMint\n * @summary purchase mint with signature\n * @request POST:/s1/purchase/{type}\n */\n purchaseMint: (\n type: string,\n data: PurchaseRequest,\n params: RequestParams = {},\n ) =>\n this.request<WebResultPurchaseResponse, any>({\n path: `/s1/purchase/${type}`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description assets of badge\n *\n * @tags AnchorS2S\n * @name QueryAssets\n * @summary assets of badge\n * @request POST:/s1/assets/{type}\n */\n queryAssets: (\n type: string,\n data: QueryAssetsRequest,\n params: RequestParams = {},\n ) =>\n this.request<WebResultAssetsBadgeResponse, any>({\n path: `/s1/assets/${type}`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 创建新团队,支持设置背景图\n *\n * @tags AnchorS2S\n * @name CreateTeam\n * @summary Create team\n * @request POST:/s1/teams\n */\n createTeam: (data: object, params: RequestParams = {}) =>\n this.request<WebResultCreateTeamResponse, any>({\n path: `/s1/teams`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description check by event\n *\n * @tags AnchorS2S\n * @name CheckByEvent\n * @summary check by event\n * @request POST:/s1/check/event\n */\n checkByEvent: (data: CheckEventRequest, params: RequestParams = {}) =>\n this.request<WebResultCheckEventResponse, any>({\n path: `/s1/check/event`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description badges check\n *\n * @tags AnchorS2S\n * @name BadgesCheck\n * @summary badges check\n * @request POST:/s1/badges/check\n */\n badgesCheck: (data: BadgesCheckRequest, params: RequestParams = {}) =>\n this.request<WebResultBadgesCheckResponse, any>({\n path: `/s1/badges/check`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n };\n}\n",
|
|
7
|
-
"import type { Chain } from \"viem\";\nimport {\n Api,\n BadgeClaimSignatureRequest,\n BadgeSingleCheckRequest,\n BatchMintRequestVO,\n MintResponse,\n NFTMintRequestVO,\n RequestParams,\n UserOpHashProcessRequest,\n WebResultBadgeAssetsResponse,\n WebResultBadgeCheckResponse,\n WebResultBadgeClaimableListResponse,\n WebResultBadgeClaimSignatureResponse,\n WebResultBadgeDetailResponse,\n WebResultBadgeSeriesDetailResponse,\n WebResultBadgeSeriesResponse,\n WebResultBadgeVerifiersResponse,\n WebResultTransactionHashProcess,\n WebResultUserOpHashProcess,\n} from \"./generated/Api\";\n\n/**\n * Anchor API V2 客户端配置\n */\nexport interface AnchorApiClientV2Config {\n /** API 基础 URL */\n apiBaseUrl: string;\n /** 认证令牌 */\n authToken?: string;\n /** 项目 ID */\n projectId?: string;\n /** 网络配置 */\n network: Chain;\n /** Token 过期回调函数 */\n onTokenExpired?: (error: Error) => void;\n}\n\n/**\n * Anchor API V2 客户端\n * 基于生成的 API 类型和端点,提供完整的 Anchor API 功能\n *\n * 这个客户端使用生成的 API 类型和端点,同时提供\n * 自动 header 注入和配置管理功能。\n */\nexport class AnchorApiClientV2 {\n private generatedApi: Api<unknown>;\n private network: Chain;\n private authToken?: string;\n private projectId?: string;\n private chainId: string;\n private onTokenExpired?: (error: Error) => void;\n\n /**\n * 创建 Anchor API V2 客户端\n * @param config 客户端配置\n */\n constructor(config: AnchorApiClientV2Config) {\n this.network = config.network;\n this.authToken = config.authToken;\n this.projectId = config.projectId;\n this.chainId = config.network.id.toString();\n this.onTokenExpired = config.onTokenExpired;\n\n // 初始化生成的 API\n this.generatedApi = new Api({\n baseUrl: config.apiBaseUrl.endsWith(\"/\")\n ? config.apiBaseUrl.slice(0, -1)\n : config.apiBaseUrl,\n });\n }\n\n /**\n * 设置认证令牌\n * @param token 认证令牌\n */\n setAuthToken(token: string): void {\n this.authToken = token;\n }\n\n /**\n * 设置 Token 过期回调\n * @param callback Token 过期回调函数\n */\n setTokenExpiredCallback(callback: (error: Error) => void): void {\n this.onTokenExpired = callback;\n }\n\n /**\n * 设置项目 ID\n * @param projectId 项目 ID\n */\n setProjectId(projectId: string): void {\n this.projectId = projectId;\n }\n\n /**\n * 设置链 ID\n * @param chainId 链 ID\n */\n setChainId(chainId: string): void {\n this.chainId = chainId;\n }\n\n /**\n * 创建请求头\n * @returns 请求头对象\n */\n private createHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n // 添加标准化的请求头\n if (this.authToken) {\n headers[\"Authorization\"] = `Bearer ${this.authToken}`;\n headers[\"jwt_token\"] = `${this.authToken}`;\n }\n if (this.projectId) {\n headers[\"X-Project-Id\"] = this.projectId;\n headers[\"saas_id\"] = this.projectId;\n }\n if (this.chainId) {\n headers[\"X-Chain-Id\"] = this.chainId;\n headers[\"chain_id\"] = this.chainId;\n }\n\n return headers;\n }\n\n /**\n * 获取请求参数(包含 headers)\n * @returns 请求参数对象\n */\n private getRequestParams(): RequestParams {\n return {\n headers: this.createHeaders(),\n };\n }\n\n /**\n * 处理 API 调用的错误和 token 过期\n * @param apiCall API 调用函数\n * @returns API 调用结果\n */\n private async handleApiCall<T>(apiCall: () => Promise<T>): Promise<T> {\n try {\n const result = await apiCall();\n\n // 检查响应体中的 token 过期信息\n if (this.isTokenExpiredResponse(result)) {\n console.log(\"Token expired: JWT token is invalid or expired\");\n const error = new Error(\n \"Token expired: JWT token is invalid or expired\",\n );\n if (this.onTokenExpired) {\n this.onTokenExpired(error);\n }\n throw error;\n }\n\n return result;\n } catch (error: any) {\n // 检查 HTTP 401 状态码的 token 过期\n if (error?.status === 401) {\n if (this.onTokenExpired) {\n this.onTokenExpired(error);\n }\n }\n throw error;\n }\n }\n\n /**\n * 检查响应是否为 token 过期错误\n * @param response API 响应\n * @returns 是否为 token 过期错误\n */\n private isTokenExpiredResponse(response: any): boolean {\n // 检查响应体中的 token 过期标识\n // 优先检查:success 为 false 且 code 为 9101(标准 token 过期错误码)\n if (response?.success === false && response?.code === \"9101\") {\n return true;\n }\n\n // 检查 msgKey 是否为特定的 JWT 错误\n if (\n response?.success === false &&\n response?.msgKey === \"params.jwt.check.invalid\"\n ) {\n return true;\n }\n\n return false;\n }\n\n // ==================== V2 API Methods ====================\n\n /**\n * 获取徽章验证器\n * @route GET /v2/badges/verifiers\n * @param platform 平台标识符\n * @param type 条件类型\n * @returns 徽章验证器响应\n */\n async getBadgeVerifiers(\n platform: string,\n type: string,\n ): Promise<WebResultBadgeVerifiersResponse> {\n return this.handleApiCall(async () => {\n const query = { platform, type };\n const response = await this.generatedApi.v2.getBadgeVerifiers(\n query,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * 获取用户可领取徽章\n * @route GET /v2/badges/claimable\n * @param params 查询参数\n * @param params.series 徽章系列过滤器\n * @param params.limit 每页项目数\n * @param params.nextToken 分页令牌\n * @returns 徽章可领取列表响应\n */\n async getUserClaimableBadges(params?: {\n series?: string;\n limit?: number;\n nextToken?: string;\n }): Promise<WebResultBadgeClaimableListResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getUserClaimableBadges(\n params,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * 获取用户徽章资产\n * @route GET /v2/badges/assets\n * @param params 查询参数\n * @param params.includeClaimable 徽章状态是否包含可领取\n * @param params.strategy 返回策略 BADGE_ALL/BADGE_MAX/BADGE_REWARD\n * @param params.series 徽章系列过滤器\n * @param params.limit 每页项目数\n * @param params.nextToken 分页令牌\n * @returns 徽章资产响应\n */\n async getUserBadgeAssets(params?: {\n includeClaimable?: boolean;\n strategy?: string;\n series?: string[];\n limit?: number;\n nextToken?: string;\n }): Promise<WebResultBadgeAssetsResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getUserBadgeAssets(\n params,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * 获取徽章系列详情\n * @route GET /v2/badges/series/{seriesId}\n * @param seriesId 系列标识符\n * @param params 查询参数\n * @param params.status 状态过滤器\n * @param params.businessType 业务类型过滤器\n * @returns 徽章系列详情响应\n */\n async getBadgeSeriesDetail(\n seriesId: string,\n params?: {\n status?: string;\n businessType?: string;\n },\n ): Promise<WebResultBadgeSeriesDetailResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getBadgeSeriesDetail(\n seriesId,\n params,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * 获取徽章详情\n * @route GET /v2/badges/{badgeId}\n * @param badgeId 徽章标识符\n * @returns 徽章详情响应\n */\n async getBadgeDetail(badgeId: string): Promise<WebResultBadgeDetailResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getBadgeDetail(\n badgeId,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * 检查单个徽章可领取状态\n * @route POST /v2/badges/{badgeId}\n * @param badgeId 徽章标识符\n * @param data 徽章检查请求数据\n * @returns 徽章可领取响应\n */\n async checkSingleBadgeClaimable(\n badgeId: string,\n data: BadgeSingleCheckRequest,\n ): Promise<WebResultBadgeClaimSignatureResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.checkSingleBadgeClaimable(\n badgeId,\n data,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * 检查用户可领取徽章\n * @route POST /v2/badges\n * @param data 徽章检查请求\n * @returns 徽章检查响应\n */\n async checkUserClaimableBadges(\n data: object,\n ): Promise<WebResultBadgeCheckResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.checkUserClaimableBadges(\n data,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * 获取徽章领取签名\n * @route POST /v2/badges/signatures\n * @param data 徽章领取签名请求\n * @returns 徽章领取签名响应\n */\n async getBadgeClaimSignatures(\n data: BadgeClaimSignatureRequest,\n ): Promise<WebResultBadgeClaimSignatureResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getBadgeClaimSignatures(\n data,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * 获取徽章系列列表\n * @route GET /v2/badges/series\n * @param params 查询参数\n * @param params.includeBadges 是否包含徽章\n * @param params.status 状态过滤器\n * @param params.businessType 业务类型过滤器\n * @param params.limit 每页数量\n * @returns 徽章系列响应\n */\n async getBadgeSeries(params?: {\n includeBadges?: boolean;\n status?: string;\n businessType?: string;\n limit?: number;\n }): Promise<WebResultBadgeSeriesResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getBadgeSeries(\n params,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * Anchor 铸造\n * @route POST /v2/mint/{type}\n * @param type 铸造类型\n * @param data 铸造请求数据\n * @returns 铸造响应\n */\n async mint(type: string, data: NFTMintRequestVO): Promise<MintResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.mint(\n type,\n data,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * Anchor 批量铸造\n * @route POST /v2/batch/mint/{type}\n * @param type 铸造类型\n * @param data 批量铸造请求数据\n * @returns 批量铸造响应\n */\n async batchMint(\n type: string,\n data: BatchMintRequestVO,\n ): Promise<MintResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.batchMint(\n type,\n data,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n // ==================== Transaction Methods ====================\n\n /**\n * 处理交易哈希(加速交易处理)\n * @route POST /v1/transaction/process/{txHash}\n * @param txHash 交易哈希\n * @returns 交易哈希处理响应\n */\n async transactionHashProcess(\n txHash: string,\n ): Promise<WebResultTransactionHashProcess> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v1.transactionHashProcess(\n txHash,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n\n /**\n * 处理用户操作哈希\n * @route POST /v1/transaction/process/userOpHash\n * @param data 用户操作哈希处理请求\n * @returns 用户操作哈希处理响应\n */\n async userOpHashProcess(\n data: UserOpHashProcessRequest,\n ): Promise<WebResultUserOpHashProcess> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v1.userOpHashProcess(\n data,\n this.getRequestParams(),\n );\n return response.data;\n });\n }\n}\n",
|
|
8
|
-
"import {\n Account,\n Address,\n Chain,\n concat,\n encodeAbiParameters,\n encodeFunctionData,\n Hex,\n keccak256,\n PublicClient,\n stringToHex,\n TransactionReceipt,\n WalletClient,\n} from \"viem\";\nimport { AnchorERC1155ABI } from \"./abi/AnchorERC1155\";\nimport { AnchorERC1155__factory } from \"./typechain\";\nimport { IMintRequest, SignedMintRequest } from \"./types\";\n\n/**\n * AnchorERC1155 客户端\n * 用于与 AnchorERC1155 合约交互\n */\nexport class AnchorERC1155Client {\n private publicClient: PublicClient;\n private walletClient?: WalletClient;\n private account?: Account;\n private network: Chain;\n private contracts: {\n anchorPay?: string;\n anchorERC1155?: string;\n [key: string]: string | undefined;\n };\n\n /**\n * 创建 AnchorERC1155 客户端\n * @param publicClient 公共客户端(只读操作)\n * @param network 网络配置\n * @param walletClient 钱包客户端(写入操作)\n * @param account 账户(可选,如果不提供则使用只读模式)\n */\n constructor(\n publicClient: PublicClient,\n network: Chain,\n walletClient?: WalletClient,\n account?: Account,\n contracts?: {\n anchorPay?: string;\n anchorERC1155?: string;\n [key: string]: string | undefined;\n },\n ) {\n this.publicClient = publicClient;\n this.network = network;\n this.walletClient = walletClient;\n this.account = account;\n this.contracts = contracts || {};\n }\n\n /**\n * 获取代币 URI\n * @param tokenId 代币 ID\n * @returns 代币 URI\n */\n async getTokenURI(tokenId: bigint): Promise<string> {\n if (!this.contracts?.anchorERC1155) {\n throw new Error(\n \"AnchorERC1155 contract address not set, please check network configuration\",\n );\n }\n return (await this.publicClient.readContract({\n address: this.contracts.anchorERC1155 as Address,\n abi: AnchorERC1155ABI,\n functionName: \"uri\",\n args: [tokenId],\n })) as string;\n }\n\n /**\n * 获取代币名称\n * @returns 代币名称\n */\n async getName(): Promise<string> {\n if (!this.contracts?.anchorERC1155) {\n throw new Error(\n \"AnchorERC1155 contract address not set, please check network configuration\",\n );\n }\n return (await this.publicClient.readContract({\n address: this.contracts.anchorERC1155 as Address,\n abi: AnchorERC1155ABI,\n functionName: \"name\",\n })) as string;\n }\n\n /**\n * 获取代币符号\n * @returns 代币符号\n */\n async getSymbol(): Promise<string> {\n if (!this.contracts?.anchorERC1155) {\n throw new Error(\n \"AnchorERC1155 contract address not set, please check network configuration\",\n );\n }\n return (await this.publicClient.readContract({\n address: this.contracts.anchorERC1155 as Address,\n abi: AnchorERC1155ABI,\n functionName: \"symbol\",\n })) as string;\n }\n\n /**\n * 使用签名铸造代币(免费代币)\n * @param signedRequest 签名铸造请求\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async mintWithSignature(\n signedRequest: SignedMintRequest,\n anchorERC1155Address?: Address,\n options?: { sendTransaction?: boolean },\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (BigInt(signedRequest.request.price) !== 0n) {\n throw new Error(\n \"mintWithSignature method can only be used to mint free tokens\",\n );\n }\n const contractAddress =\n anchorERC1155Address || (this.contracts?.anchorERC1155 as Address);\n // 用 typechain encodeFunctionData,参数断言为 any 以兼容类型\n const data = AnchorERC1155__factory.createInterface().encodeFunctionData(\n \"mintWithSignature\",\n [\n this.formatMintRequest(signedRequest.request),\n signedRequest.signature as `0x${string}`,\n ],\n );\n\n // const data = encodeFunctionData({\n // abi: AnchorERC1155ABI,\n // functionName: \"mintWithSignature\",\n // args: [\n // this.formatMintRequest(signedRequest.request),\n // signedRequest.signature as `0x${string}`,\n // ],\n // });\n\n console.log(data, \"data\");\n if (options?.sendTransaction === false) {\n return {\n to: contractAddress,\n data,\n value: 0n,\n };\n }\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: contractAddress,\n data: data as `0x${string}`,\n value: 0n,\n account: this.account,\n });\n\n const txHash = await this.walletClient.writeContract({\n account: this.account,\n address: contractAddress,\n abi: AnchorERC1155__factory.abi,\n functionName: \"mintWithSignature\",\n args: [\n this.formatMintRequest(signedRequest.request),\n signedRequest.signature as `0x${string}`,\n ],\n chain: this.publicClient.chain,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas,\n });\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n return receipt;\n }\n\n /**\n * 编码签名铸造请求(用于通过 AnchorPay 支付)\n * @param signedRequest 签名铸造请求\n * @returns 编码后的数据\n */\n encodeTokenReceivedData(signedRequest: SignedMintRequest): Hex {\n // 计算接口哈希 - AnchorERC1155 接口标识\n const interfaceHash = keccak256(stringToHex(\"AnchorERC1155\"));\n\n // 准备签名数据\n const signature = signedRequest.signature.startsWith(\"0x\")\n ? (signedRequest.signature as `0x${string}`)\n : (`0x${signedRequest.signature}` as `0x${string}`);\n\n // 格式化请求数据\n const formattedRequest = this.formatMintRequest(signedRequest.request);\n\n console.log(\n \"Formatted request data:\",\n JSON.stringify(formattedRequest, (_, v) =>\n typeof v === \"bigint\" ? v.toString() : v,\n ),\n );\n console.log(\"Signature:\", signature);\n\n // 编码tokenReceived函数调用\n // tokenReceived(address token, address from, address to, uint256 amount, bytes calldata userData)\n // 其中userData是通过abi.encode(MintRequest, signature)编码的\n\n // 1. 首先编码userData - 这是合约中通过abi.decode解码的部分\n const userData = encodeAbiParameters(\n [\n {\n components: [\n { name: \"to\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"quantity\", type: \"uint256\" },\n { name: \"price\", type: \"uint256\" },\n { name: \"currency\", type: \"address\" },\n { name: \"validityStartTimestamp\", type: \"uint128\" },\n { name: \"validityEndTimestamp\", type: \"uint128\" },\n { name: \"uid\", type: \"bytes32\" },\n { name: \"chainId\", type: \"uint256\" },\n { name: \"projectHandle\", type: \"bytes32\" },\n ],\n name: \"req\",\n type: \"tuple\",\n },\n { name: \"signature\", type: \"bytes\" },\n ],\n [formattedRequest, signature],\n );\n\n console.log(\"Encoded userData:\", userData);\n\n // 返回完整的编码数据\n return concat([interfaceHash, userData as `0x${string}`]);\n }\n\n /**\n * 编码签名铸造请求(用于通过 AnchorPay 支付),使用空接口字符串\n * @param signedRequest 签名铸造请求\n * @returns 编码后的数据\n */\n encodeTokenReceivedDataWithEmptyInterface(\n signedRequest: SignedMintRequest,\n ): Hex {\n // 计算接口哈希 - 使用空字符串\n const interfaceHash = keccak256(stringToHex(\"\"));\n\n // 准备签名数据\n const signature = signedRequest.signature.startsWith(\"0x\")\n ? (signedRequest.signature as `0x${string}`)\n : (`0x${signedRequest.signature}` as `0x${string}`);\n\n // 格式化请求数据\n const formattedRequest = this.formatMintRequest(signedRequest.request);\n\n console.log(\n \"Formatted request data (empty interface):\",\n JSON.stringify(formattedRequest, (_, v) =>\n typeof v === \"bigint\" ? v.toString() : v,\n ),\n );\n console.log(\"Signature:\", signature);\n\n // 编码userData - 与标准方法相同,只是接口哈希不同\n const userData = encodeAbiParameters(\n [\n {\n components: [\n { name: \"to\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"quantity\", type: \"uint256\" },\n { name: \"price\", type: \"uint256\" },\n { name: \"currency\", type: \"address\" },\n { name: \"validityStartTimestamp\", type: \"uint128\" },\n { name: \"validityEndTimestamp\", type: \"uint128\" },\n { name: \"uid\", type: \"bytes32\" },\n { name: \"chainId\", type: \"uint256\" },\n { name: \"projectHandle\", type: \"bytes32\" },\n ],\n name: \"req\",\n type: \"tuple\",\n },\n { name: \"signature\", type: \"bytes\" },\n ],\n [formattedRequest, signature],\n );\n\n console.log(\"Encoded userData (empty interface):\", userData);\n\n // 返回完整的编码数据\n return concat([interfaceHash, userData as `0x${string}`]);\n }\n\n /**\n * multicall 方法,用于批量执行交易\n * @param data 编码后的交易数据数组\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async multicall(\n data: Hex[],\n options?: { sendTransaction?: boolean },\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (!this.contracts?.anchorERC1155) {\n throw new Error(\n \"AnchorERC1155 contract address not set, please check network configuration\",\n );\n }\n\n const contractAddress = this.contracts.anchorERC1155 as Address;\n\n const calldata = encodeFunctionData({\n abi: AnchorERC1155ABI,\n functionName: \"multicall\",\n args: [data],\n });\n\n if (options?.sendTransaction === false) {\n return {\n to: contractAddress,\n data: calldata,\n value: 0n,\n };\n }\n\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: contractAddress,\n data: calldata,\n value: 0n,\n account: this.account,\n });\n\n const txHash = await this.walletClient.writeContract({\n account: this.account,\n address: contractAddress,\n abi: AnchorERC1155ABI,\n functionName: \"multicall\",\n args: [data],\n chain: this.publicClient.chain,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas,\n });\n\n return await this.publicClient.waitForTransactionReceipt({ hash: txHash });\n }\n\n /**\n * 格式化铸造请求,将 bigint 转换为字符串\n * @param request 铸造请求\n * @returns 格式化后的铸造请求\n */\n private formatMintRequest(request: IMintRequest) {\n let uid: Hex;\n if (typeof request.uid === \"string\") {\n if (request.uid.startsWith(\"0x\")) {\n uid = request.uid as `0x${string}`;\n } else {\n uid = keccak256(stringToHex(request.uid));\n }\n } else {\n uid = request.uid;\n }\n\n // 计算当前时间戳(秒)\n const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));\n\n return {\n to: request.to,\n tokenId: BigInt(request.tokenId),\n quantity: BigInt(request.quantity),\n price: BigInt(request.price),\n currency: request.currency,\n validityStartTimestamp: request.validityStartTimestamp\n ? BigInt(request.validityStartTimestamp)\n : currentTimestamp,\n validityEndTimestamp: request.validityEndTimestamp\n ? BigInt(request.validityEndTimestamp)\n : request.validUntil\n ? BigInt(request.validUntil)\n : currentTimestamp + 3600n, // 默认1小时后过期\n uid: uid,\n chainId: BigInt(request.chainId || this.network.id),\n projectHandle: request.projectHandle as `0x${string}`,\n };\n }\n}\n",
|
|
5
|
+
"import {\n createPublicClient,\n createWalletClient,\n http,\n custom,\n Address,\n Hex,\n encodeFunctionData,\n isAddress,\n keccak256,\n stringToHex,\n concat,\n parseEther,\n type Account,\n type Chain,\n type PublicClient,\n type WalletClient,\n type TransactionReceipt\n} from \"viem\";\nimport { AnchorPayClient } from \"./AnchorPayClient\";\nimport { AnchorERC1155Client } from \"./AnchorERC1155Client\";\nimport { AnchorApiClientV2 } from \"./AnchorApiClientV2\";\nimport {\n AnchorSDKConfig,\n IMintRequest,\n PaymentOptions,\n SignedMintRequest\n} from \"./types\";\nimport { ENVIRONMENTS, ERC20_ABI, NATIVE_TOKEN_ADDRESS } from \"./constants\";\nimport AnchorPayABI from \"./abi/AnchorPay.json\";\nimport { AnchorERC1155ABI } from \"./abi/AnchorERC1155\";\n\n/**\n * Anchor SDK\n * 用于与 AnchorPay 和 AnchorERC1155 合约交互的 SDK\n */\nexport class AnchorSDK {\n private publicClient: PublicClient;\n private walletClient?: WalletClient;\n private account?: Account;\n private network: Chain;\n private config: AnchorSDKConfig;\n\n /** Anchor 合约地址 */\n private contracts: {\n anchorPay?: string;\n anchorERC1155?: string;\n [key: string]: string | undefined;\n };\n\n /** AnchorPay 客户端 */\n public anchorPay: AnchorPayClient;\n\n /** AnchorERC1155 客户端 */\n public anchorERC1155: AnchorERC1155Client;\n\n /** Anchor API 客户端 */\n public anchorApi?: AnchorApiClientV2;\n\n /**\n * 创建 Anchor SDK 实例\n * @param config SDK 配置\n */\n constructor(config: AnchorSDKConfig) {\n this.config = config;\n this.contracts = {};\n\n // 检查是否使用旧版配置(向后兼容)\n if (\"publicClient\" in config && config.publicClient) {\n // 使用旧版配置\n this.publicClient = config.publicClient;\n this.walletClient = config.walletClient;\n this.account = this.walletClient?.account;\n this.network = this.createChainFromNetwork(config.network);\n } else {\n // 使用新版配置\n // Convert network to viem Chain\n this.network = this.createChainFromNetwork(config.network);\n\n // Initialize viem clients\n this.publicClient = this.initializePublicClient(config.provider);\n\n // 如果没有提供 signer,则使用 provider 作为 signer\n const effectiveSigner = config.signer || config.provider;\n\n this.walletClient = effectiveSigner\n ? this.initializeWalletClient(effectiveSigner)\n : undefined;\n this.account =\n this.walletClient?.account ||\n this.getAccountFromSigner(effectiveSigner);\n }\n\n // 如果用户直接提供了合约地址,优先使用用户提供的地址\n if (config.anchorPayAddress) {\n this.contracts.anchorPay = config.anchorPayAddress;\n }\n\n if (config.anchorERC1155Address) {\n this.contracts.anchorERC1155 = config.anchorERC1155Address;\n }\n\n // 创建客户端\n this.anchorPay = new AnchorPayClient(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts\n );\n this.anchorERC1155 = new AnchorERC1155Client(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts\n );\n\n // 处理环境配置\n let apiBaseUrl = config.apiBaseUrl;\n\n // 如果指定了环境,先尝试从环境配置中获取 API URL 和合约地址\n if (config.env && ENVIRONMENTS[config.env]) {\n // 如果没有指定 API URL,使用环境配置中的 URL\n if (!apiBaseUrl) {\n apiBaseUrl = ENVIRONMENTS[config.env].apiBaseUrl;\n }\n\n // 从环境配置中获取当前网络的合约地址(仅当用户没有直接提供时)\n if (\n this.network.id &&\n ENVIRONMENTS[config.env].contracts[this.network.id]\n ) {\n const networkContracts =\n ENVIRONMENTS[config.env].contracts[this.network.id];\n if (!networkContracts) throw Error(\"no contracts\");\n // 只有当用户没有直接提供合约地址时,才使用环境配置中的地址\n if (networkContracts.anchorPay && !this.contracts.anchorPay) {\n this.contracts.anchorPay = networkContracts.anchorPay;\n }\n if (networkContracts.anchorERC1155 && !this.contracts.anchorERC1155) {\n this.contracts.anchorERC1155 = networkContracts.anchorERC1155;\n }\n\n // 重新初始化客户端\n this.anchorPay = new AnchorPayClient(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts\n );\n this.anchorERC1155 = new AnchorERC1155Client(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts\n );\n }\n }\n\n // 如果有 API URL,创建 Anchor API 客户端\n if (apiBaseUrl) {\n this.anchorApi = new AnchorApiClientV2({\n apiBaseUrl: apiBaseUrl,\n authToken: config.authToken,\n projectId: config.projectId,\n network: this.network,\n onTokenExpired: config.onTokenExpired\n });\n }\n }\n\n /**\n * 设置 Token 过期回调\n * @param callback Token 过期回调函数\n */\n setTokenExpiredCallback(callback: (error: Error) => void): void {\n if (this.anchorApi) {\n this.anchorApi.setTokenExpiredCallback(callback);\n }\n }\n\n /**\n * 设置钱包客户端\n * 在 SDK 初始化后动态更新钱包客户端和账户\n * @param walletClient 新的钱包客户端\n */\n setWalletClient(signerOrWalletClient: any) {\n // 检查是否是 viem WalletClient(向后兼容)\n if (signerOrWalletClient && \"account\" in signerOrWalletClient) {\n // 使用旧版接口\n this.walletClient = signerOrWalletClient;\n this.account = signerOrWalletClient.account;\n } else {\n // 使用新版接口\n // 如果没有提供有效的签名者,则使用当前的 provider\n const effectiveSigner = signerOrWalletClient || this.config.provider;\n\n this.walletClient = this.initializeWalletClient(effectiveSigner);\n this.account =\n this.walletClient?.account ||\n this.getAccountFromSigner(effectiveSigner);\n }\n\n // 重新初始化客户端\n this.anchorPay = new AnchorPayClient(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts\n );\n this.anchorERC1155 = new AnchorERC1155Client(\n this.publicClient,\n this.network,\n this.walletClient,\n this.account,\n this.contracts\n );\n\n console.log(\"SDK wallet client updated:\", this.account);\n\n return this;\n }\n\n /**\n * 初始化公共客户端\n * @param provider 提供者(URL或Web3提供者)\n * @returns 公共客户端\n */\n private initializePublicClient(provider: string | any): PublicClient {\n // If provider is a string URL\n if (typeof provider === \"string\") {\n return createPublicClient({\n chain: this.network,\n transport: http(provider)\n });\n }\n\n // If provider is a Web3 Provider (like window.ethereum)\n if (provider && typeof provider === \"object\") {\n return createPublicClient({\n chain: this.network,\n transport: custom(provider)\n });\n }\n\n throw new Error(\n \"Invalid provider. Please provide a valid RPC URL or Web3 Provider.\"\n );\n }\n\n /**\n * 初始化钱包客户端\n * @param signer 签名者\n * @returns 钱包客户端\n */\n private initializeWalletClient(signer: any): WalletClient | undefined {\n if (!signer) return undefined;\n\n // If signer is a Web3 Provider with accounts\n if (signer && typeof signer === \"object\") {\n // For providers like window.ethereum that have accounts\n if (signer.selectedAddress) {\n return createWalletClient({\n chain: this.network,\n transport: custom(signer),\n account: signer.selectedAddress as `0x${string}`\n });\n }\n\n // For signers with an address property\n if (signer.address) {\n return createWalletClient({\n chain: this.network,\n transport: custom(signer.provider || signer),\n account: signer.address as `0x${string}`\n });\n }\n }\n\n return undefined;\n }\n\n /**\n * 从签名者获取账户\n * @param signer 签名者\n * @returns 账户\n */\n private getAccountFromSigner(signer: any): Account | undefined {\n if (!signer) return undefined;\n\n // If signer has selectedAddress (like window.ethereum)\n if (signer.selectedAddress) {\n return {\n address: signer.selectedAddress as `0x${string}`,\n type: \"json-rpc\"\n };\n }\n\n // If signer has address property\n if (signer.address) {\n return {\n address: signer.address as `0x${string}`,\n type: \"json-rpc\"\n };\n }\n\n return undefined;\n }\n\n /**\n * 从网络信息创建Chain对象\n * @param network 网络信息\n * @returns Chain对象\n */\n private createChainFromNetwork(network: {\n id: number;\n name: string;\n [key: string]: any;\n }): Chain {\n // Create a basic Chain object from the provided network info\n return {\n ...network,\n nativeCurrency: network.nativeCurrency || {\n name: \"Ether\",\n symbol: \"ETH\",\n decimals: 18\n },\n rpcUrls: {\n default: {\n http: [\n typeof this.config.provider === \"string\" ? this.config.provider : \"\"\n ]\n },\n public: {\n http: [\n typeof this.config.provider === \"string\" ? this.config.provider : \"\"\n ]\n }\n }\n } as Chain;\n }\n\n /**\n * 购买 Badge(使用 ETH,直接使用签名请求)\n * @param signedRequest 签名铸造请求\n * @param receiptAddress 接收地址,如果提供,将作为 ERC20 转账的接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithETHWithSignedRequest(\n signedRequest: SignedMintRequest,\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验 signedRequest\n if (!signedRequest || !signedRequest.request || !signedRequest.signature) {\n throw new Error(\n \"signedRequest is required and must contain request and signature\"\n );\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\"\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 检查请求是否有效\n this.validateMintRequest(signedRequest.request);\n\n // 检查货币是否为 ETH\n if (signedRequest.request.currency !== NATIVE_TOKEN_ADDRESS) {\n throw new Error(\"Currency must be ETH\");\n }\n\n // 计算总价\n const totalPrice =\n BigInt(signedRequest.request.price) *\n BigInt(signedRequest.request.quantity);\n\n // 编码数据\n const data = this.anchorERC1155.encodeTokenReceivedData(signedRequest);\n\n // 发送交易\n const result = await this.anchorPay.sendETH(\n receiptAddress as `0x${string}`,\n totalPrice,\n data,\n options\n );\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n // 根据 viem 文档,TransactionReceipt 中的交易哈希字段是 transactionHash,而不是 hash\n if (\n options?.sendTransaction !== false &&\n result &&\n typeof result === \"object\" &&\n \"transactionHash\" in result\n ) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n return result;\n }\n\n /**\n * 购买 Badge(使用 ERC20 代币,直接使用签名请求)\n * @param signedRequest 签名铸造请求\n * @param receiptAddress 接收地址,如果提供,将作为接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithERC20WithSignedRequest(\n signedRequest: SignedMintRequest,\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验 signedRequest\n if (!signedRequest || !signedRequest.request || !signedRequest.signature) {\n throw new Error(\n \"signedRequest is required and must contain request and signature\"\n );\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\"\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 检查请求是否有效\n this.validateMintRequest(signedRequest.request);\n\n // 检查货币是否为 ERC20\n if (signedRequest.request.currency === NATIVE_TOKEN_ADDRESS) {\n throw new Error(\"Currency cannot be native token\");\n }\n\n // 计算总价\n const totalPrice =\n BigInt(signedRequest.request.price) *\n BigInt(signedRequest.request.quantity);\n\n // 编码数据\n const data = this.anchorERC1155.encodeTokenReceivedData(signedRequest);\n\n // 发送交易\n const result = await this.anchorPay.sendERC20(\n receiptAddress as `0x${string}`,\n signedRequest.request.currency,\n totalPrice,\n data,\n options\n );\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n // 根据 viem 文档,TransactionReceipt 中的交易哈希字段是 transactionHash,而不是 hash\n if (\n options?.sendTransaction !== false &&\n result &&\n typeof result === \"object\" &&\n \"transactionHash\" in result\n ) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n return result;\n }\n\n /**\n * 使用 ETH 购买徽章\n * @param customerAddress 客户地址\n * @param contractAddress NFT 地址\n * @param tokenId 代币 ID\n * @param quantity 数量\n * @param receiptAddress 接收地址,如果提供,将作为接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithETH(\n customerAddress: string,\n contractAddress: string,\n tokenId: string | number | bigint,\n quantity: string | number | bigint = 1,\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验地址参数\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\"\n );\n }\n\n // 校验 tokenId 和 quantity\n if (tokenId === undefined || tokenId === \"\") {\n throw new Error(\"tokenId is required\");\n }\n const quantityBigInt = BigInt(quantity.toString());\n if (quantityBigInt <= 0n) {\n throw new Error(\"quantity must be greater than 0\");\n }\n\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\"\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 使用 claimableIds 来标识要购买的徽章\n const claimableIds = [`${tokenId.toString()}`];\n\n // 从后端获取铸造请求\n const mintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: claimableIds\n });\n\n if (\n mintResponse.code !== \"0000\" ||\n !mintResponse.obj ||\n !mintResponse.obj.signatures ||\n mintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n mintResponse.code || \"Failed to get mint request from backend\"\n );\n }\n\n const mintRequest = mintResponse.obj.signatures[0];\n if (!mintRequest) {\n throw new Error(\"Mint request missing required fields\");\n }\n\n // 创建签名铸造请求\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId || tokenId),\n quantity: BigInt(mintRequest.quantity || quantity),\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(\n mintRequest.validityStartTimestamp || Math.floor(Date.now() / 1000)\n ), // 立即生效\n validityEndTimestamp: BigInt(\n mintRequest.validityEndTimestamp ||\n Math.floor(Date.now() / 1000) + 3600\n ), // 1小时后过期\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}` // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`\n };\n\n // 使用签名请求购买徽章(支持 AA 和 EOA 模式)\n return await this.buyBadgeWithETHWithSignedRequest(\n signedRequest,\n receiptAddress,\n options\n );\n }\n\n /**\n * 使用自定义签名数据购买徽章(ETH)\n * @param signedRequest 用户自己组装的签名铸造请求\n * @param receiptAddress 接收地址,如果提供,将作为接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithETHWithCustomSignature(\n signedRequest: {\n to: string;\n tokenId: string | number | bigint;\n quantity: string | number | bigint;\n price: string | number | bigint;\n currency?: string;\n validityEndTimestamp?: string | number | bigint;\n validityStartTimestamp?: string | number | bigint;\n uid: string;\n signature: string;\n chainId?: string;\n projectHandle?: string;\n },\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验 signedRequest\n if (!signedRequest) {\n throw new Error(\"signedRequest is required\");\n }\n\n // 校验必要字段\n if (!signedRequest.to || !isAddress(signedRequest.to)) {\n throw new Error(\n \"signedRequest.to is required and must be a valid Ethereum address\"\n );\n }\n if (signedRequest.tokenId === undefined || signedRequest.tokenId === \"\") {\n throw new Error(\"signedRequest.tokenId is required\");\n }\n if (\n signedRequest.quantity === undefined ||\n BigInt(signedRequest.quantity.toString()) <= 0n\n ) {\n throw new Error(\n \"signedRequest.quantity is required and must be greater than 0\"\n );\n }\n if (signedRequest.price === undefined) {\n throw new Error(\"signedRequest.price is required\");\n }\n if (!signedRequest.uid) {\n throw new Error(\"signedRequest.uid is required\");\n }\n if (!signedRequest.signature) {\n throw new Error(\"signedRequest.signature is required\");\n }\n\n if (!signedRequest.chainId) {\n throw new Error(\"signedRequest.chainId is required\");\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\"\n );\n }\n\n // 将用户提供的数据转换为标准格式\n const formattedRequest: SignedMintRequest = {\n request: {\n to: signedRequest.to as `0x${string}`,\n tokenId: BigInt(signedRequest.tokenId),\n quantity: BigInt(signedRequest.quantity),\n price: BigInt(signedRequest.price),\n currency: signedRequest.currency as `0x${string}`,\n validityStartTimestamp: BigInt(\n signedRequest.validityStartTimestamp ||\n Math.floor(Date.now() / 1000) + 3600\n ),\n validityEndTimestamp: BigInt(\n signedRequest.validityEndTimestamp ||\n Math.floor(Date.now() / 1000) + 3600\n ),\n uid: signedRequest.uid as `0x${string}`,\n chainId: BigInt(signedRequest.chainId || this.network.id),\n projectHandle: signedRequest.projectHandle as `0x${string}`\n },\n signature: signedRequest.signature.startsWith(\"0x\")\n ? (signedRequest.signature as `0x${string}`)\n : (`0x${signedRequest.signature}` as `0x${string}`)\n };\n\n // 使用标准方法处理\n return await this.buyBadgeWithETHWithSignedRequest(\n formattedRequest,\n receiptAddress,\n options\n );\n }\n\n /**\n * 使用 ERC20 代币购买徽章\n * @param customerAddress 客户地址\n * @param contractAddress NFT 地址\n * @param tokenId 代币 ID\n * @param quantity 数量\n * @param currency ERC20 代币地址\n * @param receiptAddress 接收地址,如果提供,将作为接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithERC20(\n customerAddress: string,\n contractAddress: string,\n tokenId: string | number | bigint,\n quantity: string | number | bigint = 1,\n currency: string,\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\"\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 校验地址参数\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!currency || !isAddress(currency)) {\n throw new Error(\n \"currency is required and must be a valid ERC20 token address\"\n );\n }\n\n // 校验 tokenId 和 quantity\n if (tokenId === undefined || tokenId === \"\") {\n throw new Error(\"tokenId is required\");\n }\n const quantityBigInt = BigInt(quantity.toString());\n if (quantityBigInt <= 0n) {\n throw new Error(\"quantity must be greater than 0\");\n }\n\n // 使用 claimableIds 来标识要购买的徽章\n const claimableIds = [`${tokenId.toString()}`];\n\n // 从后端获取铸造请求\n const mintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: claimableIds\n });\n\n if (\n mintResponse.code !== \"0000\" ||\n !mintResponse.obj ||\n !mintResponse.obj.signatures ||\n mintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n mintResponse.code || \"Failed to get mint request from backend\"\n );\n }\n\n const mintRequest = mintResponse.obj.signatures[0];\n if (!mintRequest) {\n throw new Error(\"Mint request missing required fields\");\n }\n // 检查必要字段\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n\n // 创建签名铸造请求\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId || tokenId),\n quantity: BigInt(mintRequest.quantity || quantity),\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(\n mintRequest.validityStartTimestamp || Math.floor(Date.now() / 1000)\n ), // 立即生效\n validityEndTimestamp: BigInt(\n mintRequest.validityEndTimestamp ||\n Math.floor(Date.now() / 1000) + 3600\n ), // 1小时后过期\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}` // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`\n };\n\n // 使用签名请求购买徽章(支持 AA 和 EOA 模式)\n return await this.buyBadgeWithERC20WithSignedRequest(\n signedRequest,\n receiptAddress,\n options\n );\n }\n\n /**\n * 使用自定义签名数据购买徽章(ERC20)\n * @param signedRequest 用户自己组装的签名铸造请求\n * @param receiptAddress 接收地址,如果提供,将作为 ERC20 转账的接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async buyBadgeWithERC20WithCustomSignature(\n signedRequest: {\n to: string;\n tokenId: string | number | bigint;\n quantity: string | number | bigint;\n price: string | number | bigint;\n currency?: string;\n validityEndTimestamp?: string | number | bigint;\n validityStartTimestamp?: string | number | bigint;\n uid: string;\n signature: string;\n chainId?: string;\n projectHandle?: string;\n },\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验 signedRequest\n if (!signedRequest) {\n throw new Error(\"signedRequest is required\");\n }\n\n // 校验必要字段\n if (!signedRequest.to || !isAddress(signedRequest.to)) {\n throw new Error(\n \"signedRequest.to is required and must be a valid Ethereum address\"\n );\n }\n if (signedRequest.tokenId === undefined || signedRequest.tokenId === \"\") {\n throw new Error(\"signedRequest.tokenId is required\");\n }\n if (\n signedRequest.quantity === undefined ||\n BigInt(signedRequest.quantity.toString()) <= 0n\n ) {\n throw new Error(\n \"signedRequest.quantity is required and must be greater than 0\"\n );\n }\n if (signedRequest.price === undefined) {\n throw new Error(\"signedRequest.price is required\");\n }\n if (!signedRequest.uid) {\n throw new Error(\"signedRequest.uid is required\");\n }\n if (!signedRequest.signature) {\n throw new Error(\"signedRequest.signature is required\");\n }\n if (!signedRequest.chainId) {\n throw new Error(\"signedRequest.chainId is required\");\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\"\n );\n }\n\n // 将用户提供的数据转换为标准格式\n const formattedRequest: SignedMintRequest = {\n request: {\n to: signedRequest.to as `0x${string}`,\n tokenId: BigInt(signedRequest.tokenId),\n quantity: BigInt(signedRequest.quantity),\n price: BigInt(signedRequest.price),\n currency: signedRequest.currency as `0x${string}`,\n validityStartTimestamp: BigInt(\n signedRequest.validityStartTimestamp ||\n Math.floor(Date.now() / 1000) + 3600\n ),\n validityEndTimestamp: BigInt(\n signedRequest.validityEndTimestamp ||\n Math.floor(Date.now() / 1000) + 3600\n ),\n uid: signedRequest.uid as `0x${string}`,\n chainId: BigInt(signedRequest.chainId || this.network.id),\n projectHandle: signedRequest.projectHandle as `0x${string}`\n },\n signature: signedRequest.signature.startsWith(\"0x\")\n ? (signedRequest.signature as `0x${string}`)\n : (`0x${signedRequest.signature}` as `0x${string}`)\n };\n\n // 使用标准方法处理\n return await this.buyBadgeWithERC20WithSignedRequest(\n formattedRequest,\n receiptAddress,\n options\n );\n }\n\n /**\n * 支付方法,使用 ETH 进行支付\n * @deprecated 请使用 sendPayment 方法代替。sendPayment 提供了更灵活的支付选项和更好的类型支持。\n * @param orderId 订单 ID\n * @param amount 支付金额\n * @param receiptAddress 接收地址,如果提供,将作为接收地址使用\n * @param options 支付选项\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async pay(\n orderId: string,\n amount: string | number | bigint,\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 校验 orderId\n if (!orderId || orderId.trim() === \"\") {\n throw new Error(\"orderId is required and cannot be empty\");\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\"\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 将 ETH 金额转换为 Wei\n const paymentAmount =\n typeof amount === \"string\" || typeof amount === \"number\"\n ? parseEther(amount.toString())\n : amount;\n\n // 使用 orderId 作为 userData\n const data = this.encodeUserData(orderId);\n\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [receiptAddress, NATIVE_TOKEN_ADDRESS, paymentAmount, data]\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: paymentAmount\n };\n }\n\n // 发送交易(EOA 模式)\n const txHash = await (\n this.walletClient!.sendTransaction as unknown as (params: {\n account: Account;\n to: Address;\n data: `0x${string}`;\n value: bigint;\n }) => Promise<`0x${string}`>\n )({\n account: this.account!,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: paymentAmount\n });\n\n // 等待交易确认并返回收据\n const result = await this.publicClient.waitForTransactionReceipt({\n hash: txHash\n });\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n if (result && typeof result === \"object\" && \"transactionHash\" in result) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n return result;\n }\n\n /**\n * 支付方法,使用 ETH 进行支付\n * @param params 支付参数\n * @param params.callData 自定义数据\n * @param params.amount 支付金额\n * @param params.receiptAddress 接收地址\n * @param params.contractName 合约名称(可选)\n * @param params.options 支付选项(可选)\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async sendPaymentWithNativeToken(params: {\n callData: `0x${string}`;\n amount: string | number | bigint;\n receiptAddress: string;\n contractName?: string;\n options?: PaymentOptions;\n }): Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n > {\n const { callData, amount, receiptAddress, contractName, options } = params;\n\n if (!callData || callData.trim() === \"\") {\n throw new Error(\"callData is required and cannot be empty\");\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\"\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 将 ETH 金额转换为 Wei\n const paymentAmount =\n typeof amount === \"string\" || typeof amount === \"number\"\n ? parseEther(amount.toString())\n : amount;\n\n const interfaceHash = keccak256(stringToHex(contractName || \"\"));\n const data = concat([interfaceHash, callData]);\n\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [receiptAddress, NATIVE_TOKEN_ADDRESS, paymentAmount, data]\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: paymentAmount\n };\n }\n\n // 发送交易(EOA 模式)\n const txHash = await (\n this.walletClient!.sendTransaction as unknown as (params: {\n account: Account;\n to: Address;\n data: `0x${string}`;\n value: bigint;\n }) => Promise<`0x${string}`>\n )({\n account: this.account!,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: paymentAmount\n });\n\n // 等待交易确认并返回收据\n const result = await this.publicClient.waitForTransactionReceipt({\n hash: txHash\n });\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n if (result && typeof result === \"object\" && \"transactionHash\" in result) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n return result;\n }\n\n /**\n * 支付方法,使用 ERC20 代币进行支付\n * @param params 支付参数\n * @param params.callData 自定义数据\n * @param params.amount 支付金额\n * @param params.receiptAddress 接收地址\n * @param params.tokenAddress ERC20 代币地址\n * @param params.contractName 合约名称(可选)\n * @param params.options 支付选项(可选)\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据数组\n */\n async sendPaymentWithERC20(params: {\n callData: `0x${string}`;\n amount: string | number | bigint;\n receiptAddress: string;\n tokenAddress: string;\n contractName?: string;\n options?: PaymentOptions;\n }): Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n > {\n const {\n callData,\n amount,\n receiptAddress,\n tokenAddress,\n contractName,\n options\n } = params;\n\n if (!callData || callData.trim() === \"\") {\n throw new Error(\"callData is required and cannot be empty\");\n }\n\n // 校验 receiptAddress\n if (!receiptAddress || !isAddress(receiptAddress)) {\n throw new Error(\n \"receiptAddress is required and must be a valid Ethereum address\"\n );\n }\n\n // 校验 tokenAddress\n if (!tokenAddress || !isAddress(tokenAddress)) {\n throw new Error(\n \"tokenAddress is required and must be a valid Ethereum address\"\n );\n }\n\n // 获取代币的小数位数\n const decimals = (await this.publicClient.readContract({\n address: tokenAddress as Address,\n abi: ERC20_ABI,\n functionName: \"decimals\"\n })) as number;\n\n // 根据代币的小数位数进行转换\n const paymentAmount =\n typeof amount === \"bigint\"\n ? amount\n : BigInt(Math.floor(Number(amount) * 10 ** decimals));\n\n const interfaceHash = keccak256(stringToHex(contractName || \"\"));\n console.log(`Interface hash: ${interfaceHash}`);\n const data = concat([interfaceHash, callData]);\n console.log(`callData: ${callData}`);\n console.log(`Data: ${data}`);\n\n // 使用 AnchorPayClient 的 sendERC20 方法\n const result = await this.anchorPay.sendERC20(\n receiptAddress as Address,\n tokenAddress as Address,\n paymentAmount,\n data,\n options\n );\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n if (result && typeof result === \"object\" && \"transactionHash\" in result) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n console.warn(\n `Failed to process transaction hash ${result.transactionHash} with Anchor API: ${error}`\n );\n }\n }\n\n return result;\n }\n\n /**\n * 编码用户数据\n * @param orderId 订单 ID\n * @returns 编码后的数据\n */\n private encodeUserData(orderId: string): Hex {\n // 使用 keccak256 哈希函数计算接口哈希\n const interfaceHash = keccak256(stringToHex(\"\"));\n console.log(interfaceHash, \"interfaceHash\");\n\n // 编码订单 ID\n const encodedOrderId = stringToHex(orderId);\n\n // 返回完整的编码数据\n console.log(concat([interfaceHash, encodedOrderId]), \"concat\");\n return concat([interfaceHash, encodedOrderId]);\n }\n\n /**\n * 铸造免费 Badge\n * 从后端获取签名铸造请求,然后调用合约铸造\n * @param customerAddress 客户地址\n * @param contractAddress NFT 地址\n * @param tokenIds badge 的 tokenId 数组\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async mintFreeBadge(\n customerAddress: string,\n contractAddress: string,\n tokenIds: string[],\n options?: { sendTransaction?: boolean }\n ): Promise<\n | TransactionReceipt\n | { to: string; data: string; value: bigint }\n | { to: string; data: string; value: bigint }[]\n > {\n // 校验地址参数\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\"\n );\n }\n\n // 校验 tokenIds\n if (!tokenIds || !Array.isArray(tokenIds) || tokenIds.length === 0) {\n throw new Error(\"tokenIds is required and must be a non-empty array\");\n }\n for (const id of tokenIds) {\n if (!id || typeof id !== \"string\") {\n throw new Error(\"Each tokenId must be a non-empty string\");\n }\n }\n\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\"\n );\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 步骤 1: 从后端获取铸造请求\n const mintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: tokenIds\n });\n\n console.log(JSON.stringify(mintResponse));\n\n if (\n mintResponse.code !== \"0000\" ||\n !mintResponse.obj ||\n !mintResponse.obj.signatures ||\n mintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n mintResponse.code || \"Failed to get mint request from backend\"\n );\n }\n\n if (options?.sendTransaction === false) {\n const mintRequests = mintResponse.obj.signatures; // 获取所有签名\n\n // 创建批量签名铸造请求数组\n const batchUserOp = await Promise.all(\n mintRequests.map(async (mintRequest) => {\n // 检查必要字段\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n\n // 创建签名铸造请求\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1),\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // ETH\n validityStartTimestamp: BigInt(\n mintRequest.validityStartTimestamp\n ),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`,\n chainId: BigInt(mintRequest.chainId || this.network.id),\n projectHandle: mintRequest.projectHandle as `0x${string}`\n },\n signature: mintRequest.signature as `0x${string}`\n };\n\n // 检查请求是否有效\n this.validateMintRequest(signedRequest.request);\n\n // 检查价格是否为 0\n if (BigInt(signedRequest.request.price) !== 0n) {\n throw new Error(\"Free Badge price must be 0\");\n }\n\n // 返回单个交易数据\n return (await this.anchorERC1155.mintWithSignature(\n signedRequest,\n contractAddress as Address,\n { sendTransaction: false }\n )) as { to: string; data: string; value: bigint };\n })\n );\n\n // 返回批量操作数组\n return batchUserOp;\n }\n\n // 处理所有铸造请求\n let lastReceipt: TransactionReceipt | null = null;\n\n for (const mintRequest of mintResponse.obj.signatures) {\n // 检查必要字段\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n console.warn(\"铸造请求缺失必要字段\", mintRequest);\n continue;\n }\n\n // 创建签名铸造请求\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1),\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(mintRequest.validityStartTimestamp),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}` // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`\n };\n\n // 检查请求是否有效\n this.validateMintRequest(signedRequest.request);\n\n // 检查价格是否为 0\n if (BigInt(signedRequest.request.price) !== 0n) {\n throw new Error(\"Free Badge price must be 0\");\n }\n\n console.log(signedRequest, \"signedRequest\");\n\n // 调用合约铸造(始终发送交易)\n const result = await this.anchorERC1155.mintWithSignature(\n signedRequest,\n contractAddress as Address,\n { sendTransaction: true }\n );\n // 由于指定了 sendTransaction: true,返回的应该是交易收据\n if (\"transactionHash\" in result) {\n lastReceipt = result;\n\n // 尝试加快交易处理\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n } else {\n throw new Error(\n \"Expected transaction receipt, but received transaction data\"\n );\n }\n }\n\n // 返回最后一个交易收据,或者抛出错误\n if (!lastReceipt) {\n throw new Error(\"No successful mint transaction\");\n }\n\n return lastReceipt;\n }\n\n /**\n * 铸造免费 Badge(直接使用签名请求)\n * @param signedRequest 签名铸造请求\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async mintFreeBadgeWithSignedRequest(\n signedRequest: SignedMintRequest,\n options?: { sendTransaction?: boolean }\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 检查请求是否有效\n this.validateMintRequest(signedRequest.request);\n\n // 检查价格是否为 0\n if (BigInt(signedRequest.request.price) !== 0n) {\n throw new Error(\"Free Badge price must be 0\");\n }\n\n // 调用 mintWithSignature,并传递选项\n const result = await this.anchorERC1155.mintWithSignature(\n signedRequest,\n signedRequest?.request?.contractAddress as Address,\n options\n );\n\n // 如果是交易收据并且有 transactionHash,尝试加快交易处理\n if (\n options?.sendTransaction !== false &&\n result &&\n typeof result === \"object\" &&\n \"transactionHash\" in result\n ) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n // 忽略错误,不影响主流程\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n return result;\n }\n\n /**\n * 获取 ERC20 代币批准的交易数据(用于 AA 模式)\n * @param tokenAddress ERC20 代币地址\n * @param amount 批准金额\n * @param spender 花费者地址(默认为 AnchorPay 合约地址)\n * @returns 交易数据对象,包含 to、data 和 value 字段\n */\n getERC20ApprovalData(\n tokenAddress: Address,\n amount: bigint,\n spender?: Address\n ): { to: string; data: string; value: bigint } {\n return this.anchorPay.getERC20ApprovalData(tokenAddress, amount, spender);\n }\n\n /**\n * 验证铸造请求\n * @param request 铸造请求\n */\n private validateMintRequest(request: IMintRequest): void {\n // 检查接收者地址\n if (!isAddress(request.to)) {\n throw new Error(\"Invalid recipient address\");\n }\n\n // 检查有效期\n const now = Math.floor(Date.now() / 1000);\n const endTimestamp = request.validityEndTimestamp;\n\n if (endTimestamp && BigInt(endTimestamp) < BigInt(now)) {\n throw new Error(\"Mint request expired\");\n }\n\n // 检查数量\n if (BigInt(request.quantity) <= 0n) {\n throw new Error(\"Quantity must be greater than 0\");\n }\n }\n\n /**\n * 处理交易哈希\n * 在交易确认后调用该方法可加快交易处理\n * @param txHash 交易哈希\n * @returns 处理结果或 undefined(如果 API 客户端不可用)\n */\n async processTransactionHash(txHash: string) {\n try {\n if (this.anchorApi) {\n const result = await this.anchorApi.transactionHashProcess(txHash);\n console.log(`Transaction processing accelerated: ${txHash}`);\n return result;\n }\n } catch (error) {\n console.warn(\n `Failed to accelerate transaction processing: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n // 不影响主流程,只记录日志\n }\n return undefined;\n }\n\n /**\n * 批量铸造徽章(V2)\n * @param customerAddress 客户地址\n * @param contractAddress NFT 合约地址\n * @param tokenIds 代币 ID 列表\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回最后一个交易收据;AA 模式返回所有交易数据数组\n */\n async batchMintBadge(\n customerAddress: string,\n contractAddress: string,\n tokenIds: string[],\n options?: { sendTransaction?: boolean }\n ): Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }[]\n > {\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\"\n );\n }\n // 参数校验\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!Array.isArray(tokenIds) || tokenIds.length === 0) {\n throw new Error(\"tokenIds is required and must be a non-empty array\");\n }\n for (const id of tokenIds) {\n if (!id || typeof id !== \"string\") {\n throw new Error(\"Each tokenId must be a non-empty string\");\n }\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 步骤 1: 从后端获取批量铸造请求\n // 使用新的 API 设计,一次性获取所有徽章的签名\n const batchMintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: tokenIds\n });\n\n if (\n batchMintResponse.code !== \"0000\" ||\n !batchMintResponse.obj ||\n !batchMintResponse.obj.signatures ||\n batchMintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n batchMintResponse.code ||\n \"Failed to get batch mint request from backend\"\n );\n }\n\n const mintRequests = batchMintResponse.obj.signatures;\n\n // AA 模式:只返回所有交易数据\n if (options?.sendTransaction === false) {\n const batchUserOp = await Promise.all(\n mintRequests.map(async (mintRequest) => {\n // 检查必要字段\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n // 创建签名铸造请求\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1), // 默认数量为1\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(\n mintRequest.validityStartTimestamp\n ),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}` // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`\n };\n this.validateMintRequest(signedRequest.request);\n return (await this.anchorERC1155.mintWithSignature(\n signedRequest,\n contractAddress as Address,\n { sendTransaction: false }\n )) as { to: string; data: string; value: bigint };\n })\n );\n return batchUserOp;\n }\n\n // EOA 模式:链上批量 mint,返回最后一个收据\n let lastReceipt: TransactionReceipt | null = null;\n for (const mintRequest of mintRequests) {\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n console.warn(\"铸造请求缺失必要字段\", mintRequest);\n continue;\n }\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1), // 默认数量为1\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(mintRequest.validityStartTimestamp),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}` // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`\n };\n this.validateMintRequest(signedRequest.request);\n const result = await this.anchorERC1155.mintWithSignature(\n signedRequest,\n contractAddress as Address,\n { sendTransaction: true }\n );\n if (\"transactionHash\" in result) {\n lastReceipt = result;\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n } else {\n throw new Error(\n \"Expected transaction receipt, but received transaction data\"\n );\n }\n }\n if (!lastReceipt) {\n throw new Error(\"No successful mint transaction\");\n }\n return lastReceipt;\n }\n\n /**\n * 批量铸造徽章(Multicall V2)\n * @param customerAddress 客户地址\n * @param contractAddress NFT 合约地址\n * @param tokenIds 代币 ID 列表\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;AA 模式返回 multicall 交易数据\n */\n async batchMintBadgeWithMulticall(\n customerAddress: string,\n contractAddress: string,\n tokenIds: string[],\n options?: { sendTransaction?: boolean }\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\"\n );\n }\n // 参数校验\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!Array.isArray(tokenIds) || tokenIds.length === 0) {\n throw new Error(\"tokenIds is required and must be a non-empty array\");\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 从后端获取批量铸造请求\n // 使用新的 API 设计,一次性获取所有徽章的签名\n const batchMintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: tokenIds\n });\n\n if (\n batchMintResponse.code !== \"0000\" ||\n !batchMintResponse.obj ||\n !batchMintResponse.obj.signatures ||\n batchMintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n batchMintResponse.code ||\n \"Failed to get batch mint request from backend\"\n );\n }\n\n const mintRequests = batchMintResponse.obj.signatures;\n\n // 编码所有 mintWithSignature 调用的 calldata\n const calldatas = mintRequests.map((mintRequest) => {\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1), // 默认数量为1\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(mintRequest.validityStartTimestamp),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}` // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`\n };\n this.validateMintRequest(signedRequest.request);\n\n // 注意:这里我们假设所有 mint 都发生在同一个 ERC1155 合约上\n // 并且这个合约地址是在 AnchorERC1155Client 中配置的\n return encodeFunctionData({\n abi: AnchorERC1155ABI,\n functionName: \"mintWithSignature\",\n args: [\n this.anchorERC1155[\"formatMintRequest\"](signedRequest.request),\n signedRequest.signature as `0x${string}`\n ]\n });\n });\n\n // 调用 multicall\n const result = await this.anchorERC1155.multicall(calldatas, options);\n\n if (\n options?.sendTransaction !== false &&\n result &&\n typeof result === \"object\" &&\n \"transactionHash\" in result\n ) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n return result;\n }\n\n /**\n * 批量铸造免费徽章(Multicall)\n * 从后端获取签名铸造请求,然后使用 multicall 批量铸造\n * @param customerAddress 客户地址\n * @param contractAddress NFT 合约地址\n * @param tokenIds badge 的 tokenId 数组\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;AA 模式返回 multicall 交易数据\n */\n async mintFreeBadgeWithMulticall(\n customerAddress: string,\n contractAddress: string,\n tokenIds: string[],\n options?: { sendTransaction?: boolean }\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (!this.anchorApi) {\n throw new Error(\n \"Anchor API client not initialized, please check apiBaseUrl configuration\"\n );\n }\n\n // 参数校验\n if (!customerAddress || !isAddress(customerAddress)) {\n throw new Error(\n \"customerAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!contractAddress || !isAddress(contractAddress)) {\n throw new Error(\n \"contractAddress is required and must be a valid Ethereum address\"\n );\n }\n if (!Array.isArray(tokenIds) || tokenIds.length === 0) {\n throw new Error(\"tokenIds is required and must be a non-empty array\");\n }\n for (const id of tokenIds) {\n if (!id || typeof id !== \"string\") {\n throw new Error(\"Each tokenId must be a non-empty string\");\n }\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 从后端获取免费铸造请求\n const mintResponse = await this.anchorApi.getBadgeClaimSignatures({\n customerAddress,\n badgeIds: tokenIds\n });\n\n if (\n mintResponse.code !== \"0000\" ||\n !mintResponse.obj ||\n !mintResponse.obj.signatures ||\n mintResponse.obj.signatures.length === 0\n ) {\n throw new Error(\n mintResponse.code || \"Failed to get mint request from backend\"\n );\n }\n\n // 编码所有 mintWithSignature 调用的 calldata\n const calldatas = mintResponse.obj.signatures.map((mintRequest) => {\n if (\n !mintRequest.badgeId ||\n !mintRequest.signature ||\n !mintRequest.validityStartTimestamp ||\n !mintRequest.validityEndTimestamp\n ) {\n throw new Error(\"Mint request missing required fields\");\n }\n\n const signedRequest: SignedMintRequest = {\n request: {\n to: customerAddress as `0x${string}`,\n tokenId: BigInt(mintRequest.badgeId),\n quantity: BigInt(mintRequest.quantity || 1), // 默认数量为1\n price: BigInt(mintRequest.price || 0), // 从签名中获取价格信息\n currency: mintRequest.currency as `0x${string}`, // 从签名中获取货币信息\n validityStartTimestamp: BigInt(mintRequest.validityStartTimestamp),\n validityEndTimestamp: BigInt(mintRequest.validityEndTimestamp),\n uid: mintRequest.uid as `0x${string}`, // 从签名中获取 uid\n chainId: BigInt(mintRequest.chainId || this.network.id), // 从签名中获取链 ID\n projectHandle: mintRequest.projectHandle as `0x${string}` // 从签名中获取项目句柄\n },\n signature: mintRequest.signature as `0x${string}`\n };\n\n this.validateMintRequest(signedRequest.request);\n\n // 检查价格是否为 0\n if (BigInt(signedRequest.request.price) !== 0n) {\n throw new Error(\"Free Badge price must be 0\");\n }\n\n // 编码 mintWithSignature 调用\n return encodeFunctionData({\n abi: AnchorERC1155ABI,\n functionName: \"mintWithSignature\",\n args: [\n this.anchorERC1155[\"formatMintRequest\"](signedRequest.request),\n signedRequest.signature as `0x${string}`\n ]\n });\n });\n\n // 调用 multicall\n const result = await this.anchorERC1155.multicall(calldatas, options);\n\n if (\n options?.sendTransaction !== false &&\n result &&\n typeof result === \"object\" &&\n \"transactionHash\" in result\n ) {\n try {\n await this.processTransactionHash(result.transactionHash as string);\n } catch (error) {\n console.warn(\n `Failed to process transaction hash: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n return result;\n }\n}\n\n// 导出类型和常量\nexport * from \"./types\";\nexport * from \"./constants\";\nexport { AnchorPayClient } from \"./AnchorPayClient\";\nexport { AnchorApiClientV2 } from \"./AnchorApiClientV2\";\nexport { AnchorERC1155Client } from \"./AnchorERC1155Client\";\n\n// 导出 React SDK\nexport * from \"./react\";\nexport * from \"./generated/Api\";\n",
|
|
6
|
+
"import {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n TransactionReceipt,\n WalletClient,\n encodeFunctionData,\n} from \"viem\";\nimport {\n ERC20_ABI,\n MULTICALL3_ABI,\n MULTICALL3_ADDRESS,\n NATIVE_TOKEN_ADDRESS,\n} from \"./constants\";\n\nimport AnchorPayABI from \"./abi/AnchorPay.json\";\nimport { PaymentOptions } from \"./types\";\n\n/**\n * 批量转账参数\n */\nexport interface BatchTransferItem {\n recipient: Address;\n amount: bigint;\n data?: Hex;\n}\n\n/**\n * AnchorPay 客户端\n * 用于与 AnchorPay 合约交互\n */\nexport class AnchorPayClient {\n private publicClient: PublicClient;\n private walletClient?: WalletClient;\n private account?: Account;\n private network: Chain;\n private contracts: {\n anchorPay?: string;\n anchorERC1155?: string;\n [key: string]: string | undefined;\n };\n\n /**\n * 创建 AnchorPay 客户端\n * @param publicClient 公共客户端(只读操作)\n * @param network 网络配置\n * @param walletClient 钱包客户端(写入操作)\n * @param account 账户(可选,如果不提供则使用只读模式)\n */\n constructor(\n publicClient: PublicClient,\n network: Chain,\n walletClient?: WalletClient,\n account?: Account,\n contracts?: {\n anchorPay?: string;\n anchorERC1155?: string;\n [key: string]: string | undefined;\n }\n ) {\n this.publicClient = publicClient;\n this.network = network;\n this.walletClient = walletClient;\n this.account = account;\n this.contracts = contracts || {};\n }\n\n /**\n * 发送 ETH\n * @param recipient 接收者地址\n * @param amount 金额(单位:wei)\n * @param data 附加数据\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async sendETH(\n recipient: Address,\n amount: bigint,\n data: Hex = \"0x\",\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 准备交易数据\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [recipient, NATIVE_TOKEN_ADDRESS, amount, data],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: amount,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: amount,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: amount,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 发送 ERC20 代币\n * @param recipient 接收者地址\n * @param tokenAddress ERC20 代币地址\n * @param amount 金额\n * @param data 附加数据\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async sendERC20(\n recipient: Address,\n tokenAddress: Address,\n amount: bigint,\n data: Hex = \"0x\",\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 如果需要自动批准,则先批准代币(默认开启自动批准)\n if (options?.autoApprove !== false && this.walletClient && this.account) {\n try {\n console.log(`Checking ERC20 token approval status: ${tokenAddress}`);\n\n // 检查授权\n const allowance = (await this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [this.account.address, this.contracts?.anchorPay],\n })) as bigint;\n\n console.log(\n `Current allowance: ${allowance}, Required amount: ${amount}, AnchorPay contract address: ${this.contracts?.anchorPay}`\n );\n\n if (allowance < amount) {\n console.log(`Approving ${amount} tokens to AnchorPay contract...`);\n\n // 批准代币 - 使用最大可能值进行授权,避免多次授权\n const maxApproveAmount = 2n ** 256n - 1n;\n\n // 估算 gas 和费用\n const {\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n } = await this.publicClient.estimateFeesPerGas();\n\n const approveCalldata = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n });\n\n const approveGas = await this.publicClient.estimateGas({\n to: tokenAddress,\n data: approveCalldata,\n value: 0n,\n account: this.account,\n });\n\n const approveTxHash = await this.walletClient.writeContract({\n account: this.account,\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n chain: this.publicClient.chain,\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n gas: approveGas,\n });\n\n console.log(`Approval transaction sent, hash: ${approveTxHash}`);\n\n // 等待交易确认\n await this.publicClient.waitForTransactionReceipt({\n hash: approveTxHash,\n });\n console.log(`Approval transaction confirmed`);\n } else {\n console.log(\n `Sufficient allowance already exists, no need for additional approval`\n );\n }\n } catch (error) {\n console.error(`Approval failed:`, error);\n throw new Error(\n `ERC20 approval failed: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n // 准备交易数据\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [recipient, tokenAddress, amount, data],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: 0n,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: 0n,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n // value: amount,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 获取接口实现者\n * @param account 账户地址\n * @param interfaceHash 接口哈希\n * @returns 实现者地址\n */\n async getInterfaceImplementer(\n account: Address,\n interfaceHash: Hex\n ): Promise<Address> {\n return (await this.publicClient.readContract({\n address: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n abi: AnchorPayABI,\n functionName: \"getInterfaceImplementer\",\n args: [account, interfaceHash],\n })) as Address;\n }\n\n /**\n * 设置接口实现者(仅限管理员)\n * @param account 账户地址\n * @param interfaceHash 接口哈希\n * @param implementer 实现者地址\n * @returns 交易收据\n */\n async setInterfaceImplementer(\n account: Address,\n interfaceHash: Hex,\n implementer: Address\n ): Promise<TransactionReceipt> {\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"setInterfaceImplementer\",\n args: [account, interfaceHash, implementer],\n });\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: 0n,\n account: this.account,\n });\n\n const txHash = await this.walletClient.writeContract({\n account: this.account,\n address: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n abi: AnchorPayABI,\n functionName: \"setInterfaceImplementer\",\n args: [account, interfaceHash, implementer],\n chain: this.publicClient.chain,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 获取 ERC20 代币批准的交易数据(用于 AA 模式)\n * @param tokenAddress ERC20 代币地址\n * @param amount 批准金额\n * @param spender 花费者地址(默认为 AnchorPay 合约地址)\n * @returns 交易数据对象,包含 to、data 和 value 字段\n */\n getERC20ApprovalData(\n tokenAddress: Address,\n amount: bigint,\n spender?: Address\n ): { to: string; data: string; value: bigint } {\n const approveSpender =\n spender || (this.contracts?.anchorPay as Address) || (\"\" as Address);\n\n // 编码 approve 函数调用\n const data = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [approveSpender, amount],\n });\n\n return {\n to: tokenAddress,\n data,\n value: 0n, // ERC20 批准不需要发送 ETH\n };\n }\n\n /**\n * 查询账户在 AnchorPay 合约中的代币余额\n * @param account 账户地址\n * @param token 代币地址(使用 NATIVE_TOKEN_ADDRESS 表示原生代币)\n * @returns 余额\n */\n async balanceOf(account: Address, token: Address): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n abi: AnchorPayABI,\n functionName: \"balanceOf\",\n args: [account, token],\n })) as bigint;\n }\n\n /**\n * 为指定地址存入 ETH 到 AnchorPay 合约\n * @param recipient 接收者地址\n * @param amount 金额(单位:wei)\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async depositETH(\n recipient: Address,\n amount: bigint,\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 准备交易数据\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"depositFor\",\n args: [recipient, NATIVE_TOKEN_ADDRESS, amount],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: amount,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: amount,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: amount,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 为指定地址存入 ERC20 代币到 AnchorPay 合约\n * @param recipient 接收者地址\n * @param tokenAddress ERC20 代币地址\n * @param amount 金额\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async depositERC20(\n recipient: Address,\n tokenAddress: Address,\n amount: bigint,\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 如果需要自动批准,则先批准代币(默认开启自动批准)\n if (options?.autoApprove !== false && this.walletClient && this.account) {\n try {\n console.log(`Checking ERC20 token approval status: ${tokenAddress}`);\n\n // 检查授权\n const allowance = (await this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [this.account.address, this.contracts?.anchorPay],\n })) as bigint;\n\n console.log(\n `Current allowance: ${allowance}, Required amount: ${amount}, AnchorPay contract address: ${this.contracts?.anchorPay}`\n );\n\n if (allowance < amount) {\n console.log(`Approving ${amount} tokens to AnchorPay contract...`);\n\n // 批准代币 - 使用最大可能值进行授权,避免多次授权\n const maxApproveAmount = 2n ** 256n - 1n;\n\n // 估算 gas 和费用\n const {\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n } = await this.publicClient.estimateFeesPerGas();\n\n const approveCalldata = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n });\n\n const approveGas = await this.publicClient.estimateGas({\n to: tokenAddress,\n data: approveCalldata,\n value: 0n,\n account: this.account,\n });\n\n const approveTxHash = await this.walletClient.writeContract({\n account: this.account,\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n chain: this.publicClient.chain,\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n gas: approveGas,\n });\n\n console.log(`Approval transaction sent, hash: ${approveTxHash}`);\n\n // 等待交易确认\n await this.publicClient.waitForTransactionReceipt({\n hash: approveTxHash,\n });\n console.log(`Approval transaction confirmed`);\n } else {\n console.log(\n `Sufficient allowance already exists, no need for additional approval`\n );\n }\n } catch (error) {\n console.error(`Approval failed:`, error);\n throw new Error(\n `ERC20 approval failed: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n // 准备交易数据\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"depositFor\",\n args: [recipient, tokenAddress, amount],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: 0n,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: 0n,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 从 AnchorPay 合约提取代币\n * @param tokenAddress 代币地址(使用 NATIVE_TOKEN_ADDRESS 表示原生代币)\n * @param amount 金额\n * @param options 交易选项\n * @returns 交易收据\n */\n async withdraw(\n tokenAddress: Address,\n amount: bigint,\n options?: PaymentOptions\n ): Promise<TransactionReceipt> {\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"withdraw\",\n args: [tokenAddress, amount],\n });\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: 0n,\n account: this.account,\n });\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 批量存入 ETH(使用 Multicall3)\n * @param deposits 批量存款参数数组,每项包含接收者地址和金额\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async batchDepositETH(\n deposits: BatchTransferItem[],\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (deposits.length === 0) {\n throw new Error(\"No deposits provided\");\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 准备批量调用数据\n const calls = deposits.map((deposit) => {\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"depositFor\",\n args: [deposit.recipient, NATIVE_TOKEN_ADDRESS, deposit.amount],\n });\n\n return {\n target: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n allowFailure: false,\n value: deposit.amount,\n callData: calldata,\n };\n });\n\n // 计算总金额\n const totalValue = deposits.reduce(\n (sum, deposit) => sum + deposit.amount,\n 0n\n );\n\n // 编码 Multicall3 调用\n const multicallData = encodeFunctionData({\n abi: MULTICALL3_ABI,\n functionName: \"aggregate3Value\",\n args: [calls],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: MULTICALL3_ADDRESS,\n data: multicallData,\n value: totalValue,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: totalValue,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: totalValue,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 批量存入 ERC20 代币(使用 Multicall3)\n * @param tokenAddress ERC20 代币地址\n * @param deposits 批量存款参数数组\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async batchDepositERC20(\n tokenAddress: Address,\n deposits: BatchTransferItem[],\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (deposits.length === 0) {\n throw new Error(\"No deposits provided\");\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 计算总金额(用于批准检查)\n const totalAmount = deposits.reduce(\n (sum, deposit) => sum + deposit.amount,\n 0n\n );\n\n // 如果需要自动批准,则先批准代币(默认开启自动批准)\n if (options?.autoApprove !== false && this.walletClient && this.account) {\n try {\n console.log(`Checking ERC20 token approval status: ${tokenAddress}`);\n\n // 检查授权\n const allowance = (await this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [this.account.address, this.contracts?.anchorPay],\n })) as bigint;\n\n console.log(\n `Current allowance: ${allowance}, Required amount: ${totalAmount}, AnchorPay contract address: ${this.contracts?.anchorPay}`\n );\n\n if (allowance < totalAmount) {\n console.log(\n `Approving ${totalAmount} tokens to AnchorPay contract...`\n );\n\n // 批准代币 - 使用最大可能值进行授权,避免多次授权\n const maxApproveAmount = 2n ** 256n - 1n;\n\n // 估算 gas 和费用\n const {\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n } = await this.publicClient.estimateFeesPerGas();\n\n const approveCalldata = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n });\n\n const approveGas = await this.publicClient.estimateGas({\n to: tokenAddress,\n data: approveCalldata,\n value: 0n,\n account: this.account,\n });\n\n const approveTxHash = await this.walletClient.writeContract({\n account: this.account,\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n chain: this.publicClient.chain,\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n gas: approveGas,\n });\n\n console.log(`Approval transaction sent, hash: ${approveTxHash}`);\n\n // 等待交易确认\n await this.publicClient.waitForTransactionReceipt({\n hash: approveTxHash,\n });\n console.log(`Approval transaction confirmed`);\n } else {\n console.log(\n `Sufficient allowance already exists, no need for additional approval`\n );\n }\n } catch (error) {\n console.error(`Approval failed:`, error);\n throw new Error(\n `ERC20 approval failed: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n // 准备批量调用数据\n const calls = deposits.map((deposit) => {\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"depositFor\",\n args: [deposit.recipient, tokenAddress, deposit.amount],\n });\n\n return {\n target: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n allowFailure: false,\n value: 0n,\n callData: calldata,\n };\n });\n\n // 编码 Multicall3 调用\n const multicallData = encodeFunctionData({\n abi: MULTICALL3_ABI,\n functionName: \"aggregate3Value\",\n args: [calls],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: MULTICALL3_ADDRESS,\n data: multicallData,\n value: 0n,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: 0n,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 批量发送 ETH(使用 Multicall3)\n * @param transfers 批量转账参数数组\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async batchSendETH(\n transfers: BatchTransferItem[],\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (transfers.length === 0) {\n throw new Error(\"No transfers provided\");\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 准备批量调用数据\n const calls = transfers.map((transfer) => {\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [\n transfer.recipient,\n NATIVE_TOKEN_ADDRESS,\n transfer.amount,\n transfer.data || (\"0x\" as Hex),\n ],\n });\n\n return {\n target: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n allowFailure: false,\n value: transfer.amount,\n callData: calldata,\n };\n });\n\n // 计算总金额\n const totalValue = transfers.reduce(\n (sum, transfer) => sum + transfer.amount,\n 0n\n );\n\n // 编码 Multicall3 调用\n const multicallData = encodeFunctionData({\n abi: MULTICALL3_ABI,\n functionName: \"aggregate3Value\",\n args: [calls],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: MULTICALL3_ADDRESS,\n data: multicallData,\n value: totalValue,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: totalValue,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: totalValue,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 批量发送 ERC20 代币(使用 Multicall3)\n * @param tokenAddress ERC20 代币地址\n * @param transfers 批量转账参数数组\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async batchSendERC20(\n tokenAddress: Address,\n transfers: BatchTransferItem[],\n options?: PaymentOptions\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (transfers.length === 0) {\n throw new Error(\"No transfers provided\");\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 计算总金额(用于批准检查)\n const totalAmount = transfers.reduce(\n (sum, transfer) => sum + transfer.amount,\n 0n\n );\n\n // 如果需要自动批准,则先批准代币(默认开启自动批准)\n if (options?.autoApprove !== false && this.walletClient && this.account) {\n try {\n console.log(`Checking ERC20 token approval status: ${tokenAddress}`);\n\n // 检查授权\n const allowance = (await this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [this.account.address, this.contracts?.anchorPay],\n })) as bigint;\n\n console.log(\n `Current allowance: ${allowance}, Required amount: ${totalAmount}, AnchorPay contract address: ${this.contracts?.anchorPay}`\n );\n\n if (allowance < totalAmount) {\n console.log(\n `Approving ${totalAmount} tokens to AnchorPay contract...`\n );\n\n // 批准代币 - 使用最大可能值进行授权,避免多次授权\n const maxApproveAmount = 2n ** 256n - 1n;\n\n // 估算 gas 和费用\n const {\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n } = await this.publicClient.estimateFeesPerGas();\n\n const approveCalldata = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n });\n\n const approveGas = await this.publicClient.estimateGas({\n to: tokenAddress,\n data: approveCalldata,\n value: 0n,\n account: this.account,\n });\n\n const approveTxHash = await this.walletClient.writeContract({\n account: this.account,\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n chain: this.publicClient.chain,\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n gas: approveGas,\n });\n\n console.log(`Approval transaction sent, hash: ${approveTxHash}`);\n\n // 等待交易确认\n await this.publicClient.waitForTransactionReceipt({\n hash: approveTxHash,\n });\n console.log(`Approval transaction confirmed`);\n } else {\n console.log(\n `Sufficient allowance already exists, no need for additional approval`\n );\n }\n } catch (error) {\n console.error(`Approval failed:`, error);\n throw new Error(\n `ERC20 approval failed: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n // 准备批量调用数据\n const calls = transfers.map((transfer) => {\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [\n transfer.recipient,\n tokenAddress,\n transfer.amount,\n transfer.data || (\"0x\" as Hex),\n ],\n });\n\n return {\n target: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n allowFailure: false,\n value: 0n,\n callData: calldata,\n };\n });\n\n // 编码 Multicall3 调用\n const multicallData = encodeFunctionData({\n abi: MULTICALL3_ABI,\n functionName: \"aggregate3Value\",\n args: [calls],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: MULTICALL3_ADDRESS,\n data: multicallData,\n value: 0n,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: 0n,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n}\n",
|
|
7
|
+
"import {\n abstract,\n abstractTestnet,\n base,\n baseSepolia,\n berachain,\n berachainBepolia,\n ronin,\n saigon\n} from \"viem/chains\";\n\nimport { EnvironmentConfig } from \"./types\";\n\n/**\n * 环境枚举\n */\nexport enum Environment {\n DEV = \"dev\",\n BETA = \"beta\",\n PROD = \"prod\"\n}\n\n/**\n * ERC20 代币 ABI\n */\nexport const ERC20_ABI = [\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [{ name: \"\", type: \"uint8\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n name: \"owner\",\n type: \"address\"\n },\n {\n name: \"spender\",\n type: \"address\"\n }\n ],\n name: \"allowance\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n name: \"spender\",\n type: \"address\"\n },\n {\n name: \"amount\",\n type: \"uint256\"\n }\n ],\n name: \"approve\",\n outputs: [\n {\n name: \"\",\n type: \"bool\"\n }\n ],\n stateMutability: \"nonpayable\",\n type: \"function\"\n },\n {\n inputs: [\n {\n name: \"account\",\n type: \"address\"\n }\n ],\n name: \"balanceOf\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n name: \"recipient\",\n type: \"address\"\n },\n {\n name: \"amount\",\n type: \"uint256\"\n }\n ],\n name: \"transfer\",\n outputs: [\n {\n name: \"\",\n type: \"bool\"\n }\n ],\n stateMutability: \"nonpayable\",\n type: \"function\"\n },\n {\n inputs: [\n {\n name: \"sender\",\n type: \"address\"\n },\n {\n name: \"recipient\",\n type: \"address\"\n },\n {\n name: \"amount\",\n type: \"uint256\"\n }\n ],\n name: \"transferFrom\",\n outputs: [\n {\n name: \"\",\n type: \"bool\"\n }\n ],\n stateMutability: \"nonpayable\",\n type: \"function\"\n }\n];\n\n/**\n * 环境配置\n */\nexport const ENVIRONMENTS: Record<Environment, EnvironmentConfig> = {\n // 开发环境\n dev: {\n apiBaseUrl: \"https://anchordev.dipbit.xyz\",\n contracts: {\n // 开发环境只支持测试网\n [saigon.id]: {\n anchorPay: \"0x8551891728967D2D7b6B502eF5339EEb2281143a\",\n anchorERC1155: \"0x23Da7778F6152D7B91C20808bEF7163c5EC2C470\"\n },\n [baseSepolia.id]: {\n anchorPay: \"0x2C69537d9b82d2C863BCfF3442D1c4E7633ead7c\",\n anchorERC1155: \"0x1CE9506cdDdD304AA753c0E8f1F898ab97Ec2870\"\n },\n [berachainBepolia.id]: {\n anchorPay: \"0x80635645c4B4dA367F2eE6D8F38BED1c2CF8C484\",\n anchorERC1155: \"0x20a6e4aa138cF4635c0abFC79272FBeB8a116F36\"\n },\n [abstractTestnet.id]: {\n anchorPay: \"0xc5c1606fDe120018E74751253F572796EDbaBC09\",\n anchorERC1155: \"0x0E03d8fA4A37287eabfb2e5BBdc7AcD7C1D3e869\"\n },\n [\"1962\"]: {\n anchorERC1155: \"0xa670ca0270c46876e5a78c9a7c596bfef91185a8\"\n }\n }\n },\n\n // 测试环境\n beta: {\n apiBaseUrl: \"https://anchorbeta.dipbit.xyz\",\n contracts: {\n [saigon.id]: {\n anchorPay: \"0xcbA8A3FE5fa94A807143bC2467A012010b02Cd94\",\n anchorERC1155: \"0x4a4D5888A284fED88fbE998c2C59957CE87923D2\"\n },\n [baseSepolia.id]: {\n anchorPay: \"0x2EB31dAbb95F3697eC6bBfE0c41b55D9C321571e\",\n anchorERC1155: \"0xE78F00BBD1be39Db6C404142Cf4a3A2471A915e7\"\n },\n [berachainBepolia.id]: {\n anchorPay: \"0x382F7946378e8A7A848d04166083711c90D76061\",\n anchorERC1155: \"0x99eed4522a3Da62CaEE3e87BfFd3779d7d5EF853\"\n },\n [abstractTestnet.id]: {\n anchorPay: \"0x7dc99a343555711aB92fc844d0Df657161df7D67\",\n anchorERC1155: \"0xa34F267d3Ab2Ce21CBD1F04F593300f6CB609a29\"\n },\n [\"1962\"]: {\n anchorERC1155: \"0xa51B53Dc3aA7f4ef5fE9bb429521a73f411ad867\"\n }\n }\n },\n\n // 生产环境\n prod: {\n apiBaseUrl: \"https://api-anchor.deek.network\",\n contracts: {\n // Dojo\n [abstract.id]: {\n anchorPay: \"0xf87C02027f36067a87E4eaeeD61b7Ce2ffE0813A\",\n anchorERC1155: \"0xd6895dc1740e057D564C795923542122f1513142\"\n },\n // dt\n [base.id]: {\n anchorPay: \"0x56f0fAF3a0336F57289e61Be6F32380B38C171E1\"\n },\n // mugen\n [ronin.id]: {\n anchorPay: \"0x56f0fAF3a0336F57289e61Be6F32380B38C171E1\",\n anchorERC1155: \"0xA412f7D0B39c7451E9A8a34a66f0D69CB5A378dA\"\n },\n // deek\n [berachain.id]: {\n anchorPay: \"0x4567890123456789012345678901234567890123\",\n anchorERC1155: \"0xdefabcdefabcdefabcdefabcdefabcdefabcdefab\"\n }\n }\n }\n};\n\n/**\n * 接口哈希常量\n */\nexport const INTERFACE_HASHES = {\n // tokenReceived 接口哈希\n TOKEN_RECEIVED:\n \"0x8b2cb2c7b7e2282e2e4b29a6a8c2b2db4218c6a5f8e8fcb3d5598f3e1e6c59d9\"\n};\n\nexport const NATIVE_TOKEN_ADDRESS =\n \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\n/**\n * Multicall3 合约地址(跨链通用)\n */\nexport const MULTICALL3_ADDRESS = \"0xcA11bde05977b3631167028862bE2a173976CA11\";\n\n/**\n * Multicall3 合约 ABI\n */\nexport const MULTICALL3_ABI = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\"\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\"\n }\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\"\n }\n ],\n name: \"aggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\"\n },\n {\n internalType: \"bytes[]\",\n name: \"returnData\",\n type: \"bytes[]\"\n }\n ],\n stateMutability: \"payable\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\"\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\"\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\"\n }\n ],\n internalType: \"struct Multicall3.Call3[]\",\n name: \"calls\",\n type: \"tuple[]\"\n }\n ],\n name: \"aggregate3\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\"\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\"\n }\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\"\n }\n ],\n stateMutability: \"payable\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\"\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\"\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\"\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\"\n }\n ],\n internalType: \"struct Multicall3.Call3Value[]\",\n name: \"calls\",\n type: \"tuple[]\"\n }\n ],\n name: \"aggregate3Value\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\"\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\"\n }\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\"\n }\n ],\n stateMutability: \"payable\",\n type: \"function\"\n }\n] as const;\n",
|
|
8
|
+
"import {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n TransactionReceipt,\n WalletClient,\n concat,\n encodeAbiParameters,\n encodeFunctionData,\n keccak256,\n stringToHex,\n} from \"viem\";\nimport { IMintRequest, SignedMintRequest } from \"./types\";\n\nimport { AnchorERC1155ABI } from \"./abi/AnchorERC1155\";\nimport { AnchorERC1155__factory } from \"./typechain\";\n\n/**\n * AnchorERC1155 客户端\n * 用于与 AnchorERC1155 合约交互\n */\nexport class AnchorERC1155Client {\n private publicClient: PublicClient;\n private walletClient?: WalletClient;\n private account?: Account;\n private network: Chain;\n private contracts: {\n anchorPay?: string;\n anchorERC1155?: string;\n [key: string]: string | undefined;\n };\n\n /**\n * 创建 AnchorERC1155 客户端\n * @param publicClient 公共客户端(只读操作)\n * @param network 网络配置\n * @param walletClient 钱包客户端(写入操作)\n * @param account 账户(可选,如果不提供则使用只读模式)\n */\n constructor(\n publicClient: PublicClient,\n network: Chain,\n walletClient?: WalletClient,\n account?: Account,\n contracts?: {\n anchorPay?: string;\n anchorERC1155?: string;\n [key: string]: string | undefined;\n }\n ) {\n this.publicClient = publicClient;\n this.network = network;\n this.walletClient = walletClient;\n this.account = account;\n this.contracts = contracts || {};\n }\n\n /**\n * 获取代币 URI\n * @param tokenId 代币 ID\n * @returns 代币 URI\n */\n async getTokenURI(tokenId: bigint): Promise<string> {\n if (!this.contracts?.anchorERC1155) {\n throw new Error(\n \"AnchorERC1155 contract address not set, please check network configuration\"\n );\n }\n return (await this.publicClient.readContract({\n address: this.contracts.anchorERC1155 as Address,\n abi: AnchorERC1155ABI,\n functionName: \"uri\",\n args: [tokenId],\n })) as string;\n }\n\n /**\n * 获取代币名称\n * @returns 代币名称\n */\n async getName(): Promise<string> {\n if (!this.contracts?.anchorERC1155) {\n throw new Error(\n \"AnchorERC1155 contract address not set, please check network configuration\"\n );\n }\n return (await this.publicClient.readContract({\n address: this.contracts.anchorERC1155 as Address,\n abi: AnchorERC1155ABI,\n functionName: \"name\",\n })) as string;\n }\n\n /**\n * 获取代币符号\n * @returns 代币符号\n */\n async getSymbol(): Promise<string> {\n if (!this.contracts?.anchorERC1155) {\n throw new Error(\n \"AnchorERC1155 contract address not set, please check network configuration\"\n );\n }\n return (await this.publicClient.readContract({\n address: this.contracts.anchorERC1155 as Address,\n abi: AnchorERC1155ABI,\n functionName: \"symbol\",\n })) as string;\n }\n\n /**\n * 使用签名铸造代币(免费代币)\n * @param signedRequest 签名铸造请求\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async mintWithSignature(\n signedRequest: SignedMintRequest,\n anchorERC1155Address?: Address,\n options?: { sendTransaction?: boolean }\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (BigInt(signedRequest.request.price) !== 0n) {\n throw new Error(\n \"mintWithSignature method can only be used to mint free tokens\"\n );\n }\n const contractAddress =\n anchorERC1155Address || (this.contracts?.anchorERC1155 as Address);\n // 用 typechain encodeFunctionData,参数断言为 any 以兼容类型\n const data = AnchorERC1155__factory.createInterface().encodeFunctionData(\n \"mintWithSignature\",\n [\n this.formatMintRequest(signedRequest.request),\n signedRequest.signature as `0x${string}`,\n ]\n );\n\n // const data = encodeFunctionData({\n // abi: AnchorERC1155ABI,\n // functionName: \"mintWithSignature\",\n // args: [\n // this.formatMintRequest(signedRequest.request),\n // signedRequest.signature as `0x${string}`,\n // ],\n // });\n\n console.log(data, \"data\");\n if (options?.sendTransaction === false) {\n return {\n to: contractAddress,\n data,\n value: 0n,\n };\n }\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: contractAddress,\n data: data as `0x${string}`,\n value: 0n,\n account: this.account,\n });\n\n const txHash = await this.walletClient.writeContract({\n account: this.account,\n address: contractAddress,\n abi: AnchorERC1155__factory.abi,\n functionName: \"mintWithSignature\",\n args: [\n this.formatMintRequest(signedRequest.request),\n signedRequest.signature as `0x${string}`,\n ],\n chain: this.publicClient.chain,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas,\n });\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n return receipt;\n }\n\n /**\n * 编码签名铸造请求(用于通过 AnchorPay 支付)\n * @param signedRequest 签名铸造请求\n * @returns 编码后的数据\n */\n encodeTokenReceivedData(signedRequest: SignedMintRequest): Hex {\n // 计算接口哈希 - AnchorERC1155 接口标识\n const interfaceHash = keccak256(stringToHex(\"AnchorERC1155\"));\n\n // 准备签名数据\n const signature = signedRequest.signature.startsWith(\"0x\")\n ? (signedRequest.signature as `0x${string}`)\n : (`0x${signedRequest.signature}` as `0x${string}`);\n\n // 格式化请求数据\n const formattedRequest = this.formatMintRequest(signedRequest.request);\n\n console.log(\n \"Formatted request data:\",\n JSON.stringify(formattedRequest, (_, v) =>\n typeof v === \"bigint\" ? v.toString() : v\n )\n );\n console.log(\"Signature:\", signature);\n\n // 编码tokenReceived函数调用\n // tokenReceived(address token, address from, address to, uint256 amount, bytes calldata userData)\n // 其中userData是通过abi.encode(MintRequest, signature)编码的\n\n // 1. 首先编码userData - 这是合约中通过abi.decode解码的部分\n const userData = encodeAbiParameters(\n [\n {\n components: [\n { name: \"to\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"quantity\", type: \"uint256\" },\n { name: \"price\", type: \"uint256\" },\n { name: \"currency\", type: \"address\" },\n { name: \"validityStartTimestamp\", type: \"uint128\" },\n { name: \"validityEndTimestamp\", type: \"uint128\" },\n { name: \"uid\", type: \"bytes32\" },\n { name: \"chainId\", type: \"uint256\" },\n { name: \"projectHandle\", type: \"bytes32\" },\n ],\n name: \"req\",\n type: \"tuple\",\n },\n { name: \"signature\", type: \"bytes\" },\n ],\n [formattedRequest, signature]\n );\n\n console.log(\"Encoded userData:\", userData);\n\n // 返回完整的编码数据\n return concat([interfaceHash, userData as `0x${string}`]);\n }\n\n /**\n * 编码签名铸造请求(用于通过 AnchorPay 支付),使用空接口字符串\n * @param signedRequest 签名铸造请求\n * @returns 编码后的数据\n */\n encodeTokenReceivedDataWithEmptyInterface(\n signedRequest: SignedMintRequest\n ): Hex {\n // 计算接口哈希 - 使用空字符串\n const interfaceHash = keccak256(stringToHex(\"\"));\n\n // 准备签名数据\n const signature = signedRequest.signature.startsWith(\"0x\")\n ? (signedRequest.signature as `0x${string}`)\n : (`0x${signedRequest.signature}` as `0x${string}`);\n\n // 格式化请求数据\n const formattedRequest = this.formatMintRequest(signedRequest.request);\n\n console.log(\n \"Formatted request data (empty interface):\",\n JSON.stringify(formattedRequest, (_, v) =>\n typeof v === \"bigint\" ? v.toString() : v\n )\n );\n console.log(\"Signature:\", signature);\n\n // 编码userData - 与标准方法相同,只是接口哈希不同\n const userData = encodeAbiParameters(\n [\n {\n components: [\n { name: \"to\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"quantity\", type: \"uint256\" },\n { name: \"price\", type: \"uint256\" },\n { name: \"currency\", type: \"address\" },\n { name: \"validityStartTimestamp\", type: \"uint128\" },\n { name: \"validityEndTimestamp\", type: \"uint128\" },\n { name: \"uid\", type: \"bytes32\" },\n { name: \"chainId\", type: \"uint256\" },\n { name: \"projectHandle\", type: \"bytes32\" },\n ],\n name: \"req\",\n type: \"tuple\",\n },\n { name: \"signature\", type: \"bytes\" },\n ],\n [formattedRequest, signature]\n );\n\n console.log(\"Encoded userData (empty interface):\", userData);\n\n // 返回完整的编码数据\n return concat([interfaceHash, userData as `0x${string}`]);\n }\n\n /**\n * multicall 方法,用于批量执行交易\n * @param data 编码后的交易数据数组\n * @param options 选项,可以控制是否直接发送交易\n * @returns 如果直接发送交易,返回交易收据;否则返回交易数据\n */\n async multicall(\n data: Hex[],\n options?: { sendTransaction?: boolean }\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (!this.contracts?.anchorERC1155) {\n throw new Error(\n \"AnchorERC1155 contract address not set, please check network configuration\"\n );\n }\n\n const contractAddress = this.contracts.anchorERC1155 as Address;\n\n const calldata = encodeFunctionData({\n abi: AnchorERC1155ABI,\n functionName: \"multicall\",\n args: [data],\n });\n\n if (options?.sendTransaction === false) {\n return {\n to: contractAddress,\n data: calldata,\n value: 0n,\n };\n }\n\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\"\n );\n }\n\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: contractAddress,\n data: calldata,\n value: 0n,\n account: this.account,\n });\n\n const txHash = await this.walletClient.writeContract({\n account: this.account,\n address: contractAddress,\n abi: AnchorERC1155ABI,\n functionName: \"multicall\",\n args: [data],\n chain: this.publicClient.chain,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas,\n });\n\n return await this.publicClient.waitForTransactionReceipt({ hash: txHash });\n }\n\n /**\n * 格式化铸造请求,将 bigint 转换为字符串\n * @param request 铸造请求\n * @returns 格式化后的铸造请求\n */\n private formatMintRequest(request: IMintRequest) {\n let uid: Hex;\n if (typeof request.uid === \"string\") {\n if (request.uid.startsWith(\"0x\")) {\n uid = request.uid as `0x${string}`;\n } else {\n uid = keccak256(stringToHex(request.uid));\n }\n } else {\n uid = request.uid;\n }\n\n // 计算当前时间戳(秒)\n const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));\n\n return {\n to: request.to,\n tokenId: BigInt(request.tokenId),\n quantity: BigInt(request.quantity),\n price: BigInt(request.price),\n currency: request.currency,\n validityStartTimestamp: request.validityStartTimestamp\n ? BigInt(request.validityStartTimestamp)\n : currentTimestamp,\n validityEndTimestamp: request.validityEndTimestamp\n ? BigInt(request.validityEndTimestamp)\n : request.validUntil\n ? BigInt(request.validUntil)\n : currentTimestamp + 3600n, // 默认1小时后过期\n uid: uid,\n chainId: BigInt(request.chainId || this.network.id),\n projectHandle: request.projectHandle as `0x${string}`,\n };\n }\n}\n",
|
|
9
9
|
"export const AnchorERC1155ABI = [\n { type: \"constructor\", inputs: [], stateMutability: \"nonpayable\" },\n {\n type: \"function\",\n name: \"DEFAULT_ADMIN_ROLE\",\n inputs: [],\n outputs: [{ name: \"\", type: \"bytes32\", internalType: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"UPGRADE_INTERFACE_VERSION\",\n inputs: [],\n outputs: [{ name: \"\", type: \"string\", internalType: \"string\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"badgeToProject\",\n inputs: [{ name: \"tokenId\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"\", type: \"bytes32\", internalType: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n { name: \"account\", type: \"address\", internalType: \"address\" },\n { name: \"id\", type: \"uint256\", internalType: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"uint256\", internalType: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"balanceOfBatch\",\n inputs: [\n {\n name: \"accounts\",\n type: \"address[]\",\n internalType: \"address[]\",\n },\n { name: \"ids\", type: \"uint256[]\", internalType: \"uint256[]\" },\n ],\n outputs: [{ name: \"\", type: \"uint256[]\", internalType: \"uint256[]\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"burnBatch\",\n inputs: [\n { name: \"from\", type: \"address\", internalType: \"address\" },\n { name: \"ids\", type: \"uint256[]\", internalType: \"uint256[]\" },\n { name: \"values\", type: \"uint256[]\", internalType: \"uint256[]\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"calculateProjectTokenId\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"projectTokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [{ name: \"\", type: \"uint256\", internalType: \"uint256\" }],\n stateMutability: \"pure\",\n },\n {\n type: \"function\",\n name: \"createBatch\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n { name: \"_to\", type: \"address\", internalType: \"address\" },\n {\n name: \"_tokenIds\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"_tokenURIs\",\n type: \"string[]\",\n internalType: \"string[]\",\n },\n {\n name: \"_maxSupplies\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"createBatch\",\n inputs: [\n { name: \"_to\", type: \"address\", internalType: \"address\" },\n {\n name: \"_tokenIds\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"_tokenURIs\",\n type: \"string[]\",\n internalType: \"string[]\",\n },\n {\n name: \"_maxSupplies\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"eip712Domain\",\n inputs: [],\n outputs: [\n { name: \"fields\", type: \"bytes1\", internalType: \"bytes1\" },\n { name: \"name\", type: \"string\", internalType: \"string\" },\n { name: \"version\", type: \"string\", internalType: \"string\" },\n { name: \"chainId\", type: \"uint256\", internalType: \"uint256\" },\n {\n name: \"verifyingContract\",\n type: \"address\",\n internalType: \"address\",\n },\n { name: \"salt\", type: \"bytes32\", internalType: \"bytes32\" },\n {\n name: \"extensions\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"exists\",\n inputs: [{ name: \"id\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"\", type: \"bool\", internalType: \"bool\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getRoleAdmin\",\n inputs: [{ name: \"role\", type: \"bytes32\", internalType: \"bytes32\" }],\n outputs: [{ name: \"\", type: \"bytes32\", internalType: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"grantAdminRole\",\n inputs: [{ name: \"admin\", type: \"address\", internalType: \"address\" }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"grantProjectOperator\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n { name: \"operator\", type: \"address\", internalType: \"address\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"grantRole\",\n inputs: [\n { name: \"role\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"account\", type: \"address\", internalType: \"address\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"hasRole\",\n inputs: [\n { name: \"role\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"account\", type: \"address\", internalType: \"address\" },\n ],\n outputs: [{ name: \"\", type: \"bool\", internalType: \"bool\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"initialize\",\n inputs: [\n {\n name: \"_defaultAdmin\",\n type: \"address\",\n internalType: \"address\",\n },\n { name: \"_name\", type: \"string\", internalType: \"string\" },\n { name: \"_symbol\", type: \"string\", internalType: \"string\" },\n { name: \"_version\", type: \"string\", internalType: \"string\" },\n { name: \"_baseURI\", type: \"string\", internalType: \"string\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"isApprovedForAll\",\n inputs: [\n { name: \"account\", type: \"address\", internalType: \"address\" },\n { name: \"operator\", type: \"address\", internalType: \"address\" },\n ],\n outputs: [{ name: \"\", type: \"bool\", internalType: \"bool\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"isProjectOperator\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n { name: \"operator\", type: \"address\", internalType: \"address\" },\n ],\n outputs: [{ name: \"\", type: \"bool\", internalType: \"bool\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"mintWithSignature\",\n inputs: [\n {\n name: \"_req\",\n type: \"tuple\",\n internalType: \"struct AnchorDataTypes.MintRequest\",\n components: [\n { name: \"to\", type: \"address\", internalType: \"address\" },\n { name: \"tokenId\", type: \"uint256\", internalType: \"uint256\" },\n {\n name: \"quantity\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n { name: \"price\", type: \"uint256\", internalType: \"uint256\" },\n {\n name: \"currency\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"validityStartTimestamp\",\n type: \"uint128\",\n internalType: \"uint128\",\n },\n {\n name: \"validityEndTimestamp\",\n type: \"uint128\",\n internalType: \"uint128\",\n },\n { name: \"uid\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"chainId\", type: \"uint256\", internalType: \"uint256\" },\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n { name: \"_signature\", type: \"bytes\", internalType: \"bytes\" },\n ],\n outputs: [{ name: \"signer\", type: \"address\", internalType: \"address\" }],\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"multicall\",\n inputs: [{ name: \"data\", type: \"bytes[]\", internalType: \"bytes[]\" }],\n outputs: [{ name: \"results\", type: \"bytes[]\", internalType: \"bytes[]\" }],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [{ name: \"\", type: \"string\", internalType: \"string\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"nextTokenIdToMint\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\", internalType: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"owner\",\n inputs: [],\n outputs: [{ name: \"\", type: \"address\", internalType: \"address\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"projectTotalSupply\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n outputs: [{ name: \"\", type: \"uint256\", internalType: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"proxiableUUID\",\n inputs: [],\n outputs: [{ name: \"\", type: \"bytes32\", internalType: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"renounceRole\",\n inputs: [\n { name: \"role\", type: \"bytes32\", internalType: \"bytes32\" },\n {\n name: \"callerConfirmation\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"revokeProjectOperator\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n { name: \"operator\", type: \"address\", internalType: \"address\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"revokeRole\",\n inputs: [\n { name: \"role\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"account\", type: \"address\", internalType: \"address\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"safeBatchTransferFrom\",\n inputs: [\n { name: \"from\", type: \"address\", internalType: \"address\" },\n { name: \"to\", type: \"address\", internalType: \"address\" },\n { name: \"ids\", type: \"uint256[]\", internalType: \"uint256[]\" },\n { name: \"values\", type: \"uint256[]\", internalType: \"uint256[]\" },\n { name: \"data\", type: \"bytes\", internalType: \"bytes\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"safeTransferFrom\",\n inputs: [\n { name: \"from\", type: \"address\", internalType: \"address\" },\n { name: \"to\", type: \"address\", internalType: \"address\" },\n { name: \"id\", type: \"uint256\", internalType: \"uint256\" },\n { name: \"value\", type: \"uint256\", internalType: \"uint256\" },\n { name: \"data\", type: \"bytes\", internalType: \"bytes\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setApprovalForAll\",\n inputs: [\n { name: \"operator\", type: \"address\", internalType: \"address\" },\n { name: \"approved\", type: \"bool\", internalType: \"bool\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setMaxSupply\",\n inputs: [\n { name: \"_tokenId\", type: \"uint256\", internalType: \"uint256\" },\n { name: \"_maxSupply\", type: \"uint256\", internalType: \"uint256\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setRegistry\",\n inputs: [{ name: \"registry\", type: \"address\", internalType: \"address\" }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setURIs\",\n inputs: [\n {\n name: \"_tokenIds\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n { name: \"_tokenURIs\", type: \"string[]\", internalType: \"string[]\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setup\",\n inputs: [\n { name: \"_name\", type: \"string\", internalType: \"string\" },\n { name: \"_symbol\", type: \"string\", internalType: \"string\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"supportsInterface\",\n inputs: [{ name: \"interfaceId\", type: \"bytes4\", internalType: \"bytes4\" }],\n outputs: [{ name: \"\", type: \"bool\", internalType: \"bool\" }],\n stateMutability: \"pure\",\n },\n {\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [{ name: \"\", type: \"string\", internalType: \"string\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"tokenReceived\",\n inputs: [\n { name: \"token\", type: \"address\", internalType: \"address\" },\n { name: \"from\", type: \"address\", internalType: \"address\" },\n { name: \"to\", type: \"address\", internalType: \"address\" },\n { name: \"amount\", type: \"uint256\", internalType: \"uint256\" },\n { name: \"userData\", type: \"bytes\", internalType: \"bytes\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"totalSupply\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\", internalType: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"totalSupply\",\n inputs: [{ name: \"id\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"\", type: \"uint256\", internalType: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"upgradeTo\",\n inputs: [\n {\n name: \"newImplementation\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"upgradeToAndCall\",\n inputs: [\n {\n name: \"newImplementation\",\n type: \"address\",\n internalType: \"address\",\n },\n { name: \"data\", type: \"bytes\", internalType: \"bytes\" },\n ],\n outputs: [],\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"uri\",\n inputs: [{ name: \"tokenId\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"\", type: \"string\", internalType: \"string\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"version\",\n inputs: [],\n outputs: [{ name: \"\", type: \"string\", internalType: \"string\" }],\n stateMutability: \"view\",\n },\n {\n type: \"event\",\n name: \"AnchorInitialized\",\n inputs: [\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ApprovalForAll\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"approved\",\n type: \"bool\",\n indexed: false,\n internalType: \"bool\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"BatchBurned\",\n inputs: [\n {\n name: \"from\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"tokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"values\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"BatchCreated\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"tokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"projectTokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"tokenURIs\",\n type: \"string[]\",\n indexed: false,\n internalType: \"string[]\",\n },\n {\n name: \"maxSupply\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"BatchURI\",\n inputs: [\n {\n name: \"tokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"tokenURIs\",\n type: \"string[]\",\n indexed: false,\n internalType: \"string[]\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"EIP712DomainChanged\",\n inputs: [],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Initialized\",\n inputs: [\n {\n name: \"version\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"MaxSupplyUpdated\",\n inputs: [\n {\n name: \"tokenId\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"maxSupply\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Minted\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n indexed: true,\n internalType: \"uint256\",\n },\n {\n name: \"quantity\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"price\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"currency\",\n type: \"address\",\n indexed: false,\n internalType: \"address\",\n },\n {\n name: \"uid\",\n type: \"bytes32\",\n indexed: false,\n internalType: \"bytes32\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ProjectOperatorGranted\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ProjectOperatorRevoked\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RoleAdminChanged\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"previousAdminRole\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"newAdminRole\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RoleGranted\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"sender\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RoleRevoked\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"sender\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"TransferBatch\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"from\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"ids\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"values\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"TransferSingle\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"from\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"id\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"URI\",\n inputs: [\n {\n name: \"value\",\n type: \"string\",\n indexed: false,\n internalType: \"string\",\n },\n {\n name: \"id\",\n type: \"uint256\",\n indexed: true,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Upgraded\",\n inputs: [\n {\n name: \"implementation\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n { type: \"error\", name: \"AccessControlBadConfirmation\", inputs: [] },\n {\n type: \"error\",\n name: \"AccessControlUnauthorizedAccount\",\n inputs: [\n { name: \"account\", type: \"address\", internalType: \"address\" },\n { name: \"neededRole\", type: \"bytes32\", internalType: \"bytes32\" },\n ],\n },\n {\n type: \"error\",\n name: \"AddressEmptyCode\",\n inputs: [{ name: \"target\", type: \"address\", internalType: \"address\" }],\n },\n { type: \"error\", name: \"AddressNotSet\", inputs: [] },\n { type: \"error\", name: \"ArrayLengthMismatch\", inputs: [] },\n { type: \"error\", name: \"ECDSAInvalidSignature\", inputs: [] },\n {\n type: \"error\",\n name: \"ECDSAInvalidSignatureLength\",\n inputs: [{ name: \"length\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"error\",\n name: \"ECDSAInvalidSignatureS\",\n inputs: [{ name: \"s\", type: \"bytes32\", internalType: \"bytes32\" }],\n },\n {\n type: \"error\",\n name: \"ERC1155InsufficientBalance\",\n inputs: [\n { name: \"sender\", type: \"address\", internalType: \"address\" },\n { name: \"balance\", type: \"uint256\", internalType: \"uint256\" },\n { name: \"needed\", type: \"uint256\", internalType: \"uint256\" },\n { name: \"tokenId\", type: \"uint256\", internalType: \"uint256\" },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidApprover\",\n inputs: [{ name: \"approver\", type: \"address\", internalType: \"address\" }],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidArrayLength\",\n inputs: [\n { name: \"idsLength\", type: \"uint256\", internalType: \"uint256\" },\n { name: \"valuesLength\", type: \"uint256\", internalType: \"uint256\" },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidOperator\",\n inputs: [{ name: \"operator\", type: \"address\", internalType: \"address\" }],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidReceiver\",\n inputs: [{ name: \"receiver\", type: \"address\", internalType: \"address\" }],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidSender\",\n inputs: [{ name: \"sender\", type: \"address\", internalType: \"address\" }],\n },\n {\n type: \"error\",\n name: \"ERC1155MissingApprovalForAll\",\n inputs: [\n { name: \"operator\", type: \"address\", internalType: \"address\" },\n { name: \"owner\", type: \"address\", internalType: \"address\" },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1967InvalidImplementation\",\n inputs: [\n {\n name: \"implementation\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n { type: \"error\", name: \"ERC1967NonPayable\", inputs: [] },\n { type: \"error\", name: \"EmptyArray\", inputs: [] },\n { type: \"error\", name: \"FailedCall\", inputs: [] },\n { type: \"error\", name: \"InvalidChainId\", inputs: [] },\n { type: \"error\", name: \"InvalidInitialization\", inputs: [] },\n { type: \"error\", name: \"InvalidParameter\", inputs: [] },\n { type: \"error\", name: \"InvalidPayment\", inputs: [] },\n { type: \"error\", name: \"InvalidReceiver\", inputs: [] },\n { type: \"error\", name: \"InvalidRegistry\", inputs: [] },\n { type: \"error\", name: \"InvalidSignature\", inputs: [] },\n { type: \"error\", name: \"InvalidTokenId\", inputs: [] },\n { type: \"error\", name: \"MaxSupplyExceeded\", inputs: [] },\n { type: \"error\", name: \"NonTransferableToken\", inputs: [] },\n { type: \"error\", name: \"NotInitializing\", inputs: [] },\n { type: \"error\", name: \"NotProjectOperator\", inputs: [] },\n { type: \"error\", name: \"PaymentRequired\", inputs: [] },\n { type: \"error\", name: \"ProjectHandleZero\", inputs: [] },\n { type: \"error\", name: \"RecipientUndefined\", inputs: [] },\n { type: \"error\", name: \"ReentrancyGuardReentrantCall\", inputs: [] },\n { type: \"error\", name: \"SignatureExpired\", inputs: [] },\n { type: \"error\", name: \"UUPSUnauthorizedCallContext\", inputs: [] },\n {\n type: \"error\",\n name: \"UUPSUnsupportedProxiableUUID\",\n inputs: [{ name: \"slot\", type: \"bytes32\", internalType: \"bytes32\" }],\n },\n { type: \"error\", name: \"Unauthorized\", inputs: [] },\n { type: \"error\", name: \"ZeroQuantity\", inputs: [] },\n] as const;\n",
|
|
10
|
-
"/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, type ContractRunner, Interface } from \"ethers\";\nimport type { AnchorERC1155, AnchorERC1155Interface } from \"../AnchorERC1155\";\n\nconst _abi = [\n {\n type: \"constructor\",\n inputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"DEFAULT_ADMIN_ROLE\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"UPGRADE_INTERFACE_VERSION\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"badgeToProject\",\n inputs: [\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"id\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"balanceOfBatch\",\n inputs: [\n {\n name: \"accounts\",\n type: \"address[]\",\n internalType: \"address[]\",\n },\n {\n name: \"ids\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"burnBatch\",\n inputs: [\n {\n name: \"from\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"ids\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"values\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"calculateProjectTokenId\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"projectTokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n },\n {\n type: \"function\",\n name: \"createBatch\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"_to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"_tokenIds\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"_tokenURIs\",\n type: \"string[]\",\n internalType: \"string[]\",\n },\n {\n name: \"_maxSupplies\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"createBatch\",\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"_tokenIds\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"_tokenURIs\",\n type: \"string[]\",\n internalType: \"string[]\",\n },\n {\n name: \"_maxSupplies\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"eip712Domain\",\n inputs: [],\n outputs: [\n {\n name: \"fields\",\n type: \"bytes1\",\n internalType: \"bytes1\",\n },\n {\n name: \"name\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"version\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"salt\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"extensions\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"exists\",\n inputs: [\n {\n name: \"id\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getRoleAdmin\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"grantAdminRole\",\n inputs: [\n {\n name: \"admin\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"grantProjectOperator\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"grantRole\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"hasRole\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"initialize\",\n inputs: [\n {\n name: \"_defaultAdmin\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"_name\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"_symbol\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"_version\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"_baseURI\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"isApprovedForAll\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"isProjectOperator\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"mintWithSignature\",\n inputs: [\n {\n name: \"_req\",\n type: \"tuple\",\n internalType: \"struct AnchorDataTypes.MintRequest\",\n components: [\n {\n name: \"to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"quantity\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"price\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"currency\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"validityStartTimestamp\",\n type: \"uint128\",\n internalType: \"uint128\",\n },\n {\n name: \"validityEndTimestamp\",\n type: \"uint128\",\n internalType: \"uint128\",\n },\n {\n name: \"uid\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n name: \"_signature\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [\n {\n name: \"signer\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"multicall\",\n inputs: [\n {\n name: \"data\",\n type: \"bytes[]\",\n internalType: \"bytes[]\",\n },\n ],\n outputs: [\n {\n name: \"results\",\n type: \"bytes[]\",\n internalType: \"bytes[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"nextTokenIdToMint\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"owner\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"projectTotalSupply\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"proxiableUUID\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"renounceRole\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"callerConfirmation\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"revokeProjectOperator\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"revokeRole\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"safeBatchTransferFrom\",\n inputs: [\n {\n name: \"from\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"ids\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"values\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"data\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"safeTransferFrom\",\n inputs: [\n {\n name: \"from\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"id\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"value\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"data\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setApprovalForAll\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"approved\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setMaxSupply\",\n inputs: [\n {\n name: \"_tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"_maxSupply\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setRegistry\",\n inputs: [\n {\n name: \"registry\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setURIs\",\n inputs: [\n {\n name: \"_tokenIds\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"_tokenURIs\",\n type: \"string[]\",\n internalType: \"string[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setup\",\n inputs: [\n {\n name: \"_name\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"_symbol\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"supportsInterface\",\n inputs: [\n {\n name: \"interfaceId\",\n type: \"bytes4\",\n internalType: \"bytes4\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n },\n {\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"tokenReceived\",\n inputs: [\n {\n name: \"token\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"from\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"userData\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"totalSupply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"totalSupply\",\n inputs: [\n {\n name: \"id\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"upgradeTo\",\n inputs: [\n {\n name: \"newImplementation\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"upgradeToAndCall\",\n inputs: [\n {\n name: \"newImplementation\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"data\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"uri\",\n inputs: [\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"version\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"event\",\n name: \"AnchorInitialized\",\n inputs: [\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ApprovalForAll\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"approved\",\n type: \"bool\",\n indexed: false,\n internalType: \"bool\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"BatchBurned\",\n inputs: [\n {\n name: \"from\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"tokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"values\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"BatchCreated\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"tokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"projectTokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"tokenURIs\",\n type: \"string[]\",\n indexed: false,\n internalType: \"string[]\",\n },\n {\n name: \"maxSupply\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"BatchURI\",\n inputs: [\n {\n name: \"tokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"tokenURIs\",\n type: \"string[]\",\n indexed: false,\n internalType: \"string[]\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"EIP712DomainChanged\",\n inputs: [],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Initialized\",\n inputs: [\n {\n name: \"version\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"MaxSupplyUpdated\",\n inputs: [\n {\n name: \"tokenId\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"maxSupply\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Minted\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n indexed: true,\n internalType: \"uint256\",\n },\n {\n name: \"quantity\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"price\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"currency\",\n type: \"address\",\n indexed: false,\n internalType: \"address\",\n },\n {\n name: \"uid\",\n type: \"bytes32\",\n indexed: false,\n internalType: \"bytes32\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ProjectOperatorGranted\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ProjectOperatorRevoked\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RoleAdminChanged\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"previousAdminRole\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"newAdminRole\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RoleGranted\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"sender\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RoleRevoked\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"sender\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"TransferBatch\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"from\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"ids\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"values\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"TransferSingle\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"from\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"id\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"URI\",\n inputs: [\n {\n name: \"value\",\n type: \"string\",\n indexed: false,\n internalType: \"string\",\n },\n {\n name: \"id\",\n type: \"uint256\",\n indexed: true,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Upgraded\",\n inputs: [\n {\n name: \"implementation\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"error\",\n name: \"AccessControlBadConfirmation\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"AccessControlUnauthorizedAccount\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"neededRole\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"AddressEmptyCode\",\n inputs: [\n {\n name: \"target\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"AddressNotSet\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ArrayLengthMismatch\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ECDSAInvalidSignature\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ECDSAInvalidSignatureLength\",\n inputs: [\n {\n name: \"length\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ECDSAInvalidSignatureS\",\n inputs: [\n {\n name: \"s\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InsufficientBalance\",\n inputs: [\n {\n name: \"sender\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"balance\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"needed\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidApprover\",\n inputs: [\n {\n name: \"approver\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidArrayLength\",\n inputs: [\n {\n name: \"idsLength\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"valuesLength\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidOperator\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidReceiver\",\n inputs: [\n {\n name: \"receiver\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidSender\",\n inputs: [\n {\n name: \"sender\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155MissingApprovalForAll\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"owner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1967InvalidImplementation\",\n inputs: [\n {\n name: \"implementation\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1967NonPayable\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"EmptyArray\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"FailedCall\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidChainId\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidInitialization\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidParameter\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidPayment\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidReceiver\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidRegistry\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidSignature\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidTokenId\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"MaxSupplyExceeded\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"NonTransferableToken\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"NotInitializing\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"NotProjectOperator\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"PaymentRequired\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ProjectHandleZero\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"RecipientUndefined\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ReentrancyGuardReentrantCall\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"SignatureExpired\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"UUPSUnauthorizedCallContext\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"UUPSUnsupportedProxiableUUID\",\n inputs: [\n {\n name: \"slot\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"Unauthorized\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ZeroQuantity\",\n inputs: [],\n },\n] as const;\n\nexport class AnchorERC1155__factory {\n static readonly abi = _abi;\n static createInterface(): AnchorERC1155Interface {\n return new Interface(_abi) as AnchorERC1155Interface;\n }\n static connect(\n address: string,\n runner?: ContractRunner | null,\n ): AnchorERC1155 {\n return new Contract(address, _abi, runner) as unknown as AnchorERC1155;\n }\n}\n",
|
|
11
|
-
"/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, type ContractRunner
|
|
12
|
-
"import {\n Account,\n Address,\n Chain,\n encodeFunctionData,\n Hex,\n PublicClient,\n TransactionReceipt,\n WalletClient,\n} from \"viem\";\nimport AnchorPayABI from \"./abi/AnchorPay.json\";\nimport {\n ERC20_ABI,\n MULTICALL3_ABI,\n MULTICALL3_ADDRESS,\n NATIVE_TOKEN_ADDRESS,\n} from \"./constants\";\nimport { PaymentOptions } from \"./types\";\n\n/**\n * 批量转账参数\n */\nexport interface BatchTransferItem {\n recipient: Address;\n amount: bigint;\n data?: Hex;\n}\n\n/**\n * AnchorPay 客户端\n * 用于与 AnchorPay 合约交互\n */\nexport class AnchorPayClient {\n private publicClient: PublicClient;\n private walletClient?: WalletClient;\n private account?: Account;\n private network: Chain;\n private contracts: {\n anchorPay?: string;\n anchorERC1155?: string;\n [key: string]: string | undefined;\n };\n\n /**\n * 创建 AnchorPay 客户端\n * @param publicClient 公共客户端(只读操作)\n * @param network 网络配置\n * @param walletClient 钱包客户端(写入操作)\n * @param account 账户(可选,如果不提供则使用只读模式)\n */\n constructor(\n publicClient: PublicClient,\n network: Chain,\n walletClient?: WalletClient,\n account?: Account,\n contracts?: {\n anchorPay?: string;\n anchorERC1155?: string;\n [key: string]: string | undefined;\n },\n ) {\n this.publicClient = publicClient;\n this.network = network;\n this.walletClient = walletClient;\n this.account = account;\n this.contracts = contracts || {};\n }\n\n /**\n * 发送 ETH\n * @param recipient 接收者地址\n * @param amount 金额(单位:wei)\n * @param data 附加数据\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async sendETH(\n recipient: Address,\n amount: bigint,\n data: Hex = \"0x\",\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 准备交易数据\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [recipient, NATIVE_TOKEN_ADDRESS, amount, data],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: amount,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: amount,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: amount,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 发送 ERC20 代币\n * @param recipient 接收者地址\n * @param tokenAddress ERC20 代币地址\n * @param amount 金额\n * @param data 附加数据\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async sendERC20(\n recipient: Address,\n tokenAddress: Address,\n amount: bigint,\n data: Hex = \"0x\",\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 如果需要自动批准,则先批准代币(默认开启自动批准)\n if (options?.autoApprove !== false && this.walletClient && this.account) {\n try {\n console.log(`Checking ERC20 token approval status: ${tokenAddress}`);\n\n // 检查授权\n const allowance = (await this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [this.account.address, this.contracts?.anchorPay],\n })) as bigint;\n\n console.log(\n `Current allowance: ${allowance}, Required amount: ${amount}, AnchorPay contract address: ${this.contracts?.anchorPay}`,\n );\n\n if (allowance < amount) {\n console.log(`Approving ${amount} tokens to AnchorPay contract...`);\n\n // 批准代币 - 使用最大可能值进行授权,避免多次授权\n const maxApproveAmount = 2n ** 256n - 1n;\n\n // 估算 gas 和费用\n const {\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n } = await this.publicClient.estimateFeesPerGas();\n\n const approveCalldata = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n });\n\n const approveGas = await this.publicClient.estimateGas({\n to: tokenAddress,\n data: approveCalldata,\n value: 0n,\n account: this.account,\n });\n\n const approveTxHash = await this.walletClient.writeContract({\n account: this.account,\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n chain: this.publicClient.chain,\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n gas: approveGas,\n });\n\n console.log(`Approval transaction sent, hash: ${approveTxHash}`);\n\n // 等待交易确认\n await this.publicClient.waitForTransactionReceipt({\n hash: approveTxHash,\n });\n console.log(`Approval transaction confirmed`);\n } else {\n console.log(\n `Sufficient allowance already exists, no need for additional approval`,\n );\n }\n } catch (error) {\n console.error(`Approval failed:`, error);\n throw new Error(\n `ERC20 approval failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n // 准备交易数据\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [recipient, tokenAddress, amount, data],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: 0n,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: 0n,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n // value: amount,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 获取接口实现者\n * @param account 账户地址\n * @param interfaceHash 接口哈希\n * @returns 实现者地址\n */\n async getInterfaceImplementer(\n account: Address,\n interfaceHash: Hex,\n ): Promise<Address> {\n return (await this.publicClient.readContract({\n address: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n abi: AnchorPayABI,\n functionName: \"getInterfaceImplementer\",\n args: [account, interfaceHash],\n })) as Address;\n }\n\n /**\n * 设置接口实现者(仅限管理员)\n * @param account 账户地址\n * @param interfaceHash 接口哈希\n * @param implementer 实现者地址\n * @returns 交易收据\n */\n async setInterfaceImplementer(\n account: Address,\n interfaceHash: Hex,\n implementer: Address,\n ): Promise<TransactionReceipt> {\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"setInterfaceImplementer\",\n args: [account, interfaceHash, implementer],\n });\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: 0n,\n account: this.account,\n });\n\n const txHash = await this.walletClient.writeContract({\n account: this.account,\n address: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n abi: AnchorPayABI,\n functionName: \"setInterfaceImplementer\",\n args: [account, interfaceHash, implementer],\n chain: this.publicClient.chain,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 获取 ERC20 代币批准的交易数据(用于 AA 模式)\n * @param tokenAddress ERC20 代币地址\n * @param amount 批准金额\n * @param spender 花费者地址(默认为 AnchorPay 合约地址)\n * @returns 交易数据对象,包含 to、data 和 value 字段\n */\n getERC20ApprovalData(\n tokenAddress: Address,\n amount: bigint,\n spender?: Address,\n ): { to: string; data: string; value: bigint } {\n const approveSpender =\n spender || (this.contracts?.anchorPay as Address) || (\"\" as Address);\n\n // 编码 approve 函数调用\n const data = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [approveSpender, amount],\n });\n\n return {\n to: tokenAddress,\n data,\n value: 0n, // ERC20 批准不需要发送 ETH\n };\n }\n\n /**\n * 查询账户在 AnchorPay 合约中的代币余额\n * @param account 账户地址\n * @param token 代币地址(使用 NATIVE_TOKEN_ADDRESS 表示原生代币)\n * @returns 余额\n */\n async balanceOf(account: Address, token: Address): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n abi: AnchorPayABI,\n functionName: \"balanceOf\",\n args: [account, token],\n })) as bigint;\n }\n\n /**\n * 为指定地址存入 ETH 到 AnchorPay 合约\n * @param recipient 接收者地址\n * @param amount 金额(单位:wei)\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async depositETH(\n recipient: Address,\n amount: bigint,\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 准备交易数据\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"depositFor\",\n args: [recipient, NATIVE_TOKEN_ADDRESS, amount],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: amount,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: amount,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: amount,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 为指定地址存入 ERC20 代币到 AnchorPay 合约\n * @param recipient 接收者地址\n * @param tokenAddress ERC20 代币地址\n * @param amount 金额\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async depositERC20(\n recipient: Address,\n tokenAddress: Address,\n amount: bigint,\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 如果需要自动批准,则先批准代币(默认开启自动批准)\n if (options?.autoApprove !== false && this.walletClient && this.account) {\n try {\n console.log(`Checking ERC20 token approval status: ${tokenAddress}`);\n\n // 检查授权\n const allowance = (await this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [this.account.address, this.contracts?.anchorPay],\n })) as bigint;\n\n console.log(\n `Current allowance: ${allowance}, Required amount: ${amount}, AnchorPay contract address: ${this.contracts?.anchorPay}`,\n );\n\n if (allowance < amount) {\n console.log(`Approving ${amount} tokens to AnchorPay contract...`);\n\n // 批准代币 - 使用最大可能值进行授权,避免多次授权\n const maxApproveAmount = 2n ** 256n - 1n;\n\n // 估算 gas 和费用\n const {\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n } = await this.publicClient.estimateFeesPerGas();\n\n const approveCalldata = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n });\n\n const approveGas = await this.publicClient.estimateGas({\n to: tokenAddress,\n data: approveCalldata,\n value: 0n,\n account: this.account,\n });\n\n const approveTxHash = await this.walletClient.writeContract({\n account: this.account,\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n chain: this.publicClient.chain,\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n gas: approveGas,\n });\n\n console.log(`Approval transaction sent, hash: ${approveTxHash}`);\n\n // 等待交易确认\n await this.publicClient.waitForTransactionReceipt({\n hash: approveTxHash,\n });\n console.log(`Approval transaction confirmed`);\n } else {\n console.log(\n `Sufficient allowance already exists, no need for additional approval`,\n );\n }\n } catch (error) {\n console.error(`Approval failed:`, error);\n throw new Error(\n `ERC20 approval failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n // 准备交易数据\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"depositFor\",\n args: [recipient, tokenAddress, amount],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: (this.contracts?.anchorPay as string) || \"\",\n data: calldata,\n value: 0n,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: 0n,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 从 AnchorPay 合约提取代币\n * @param tokenAddress 代币地址(使用 NATIVE_TOKEN_ADDRESS 表示原生代币)\n * @param amount 金额\n * @param options 交易选项\n * @returns 交易收据\n */\n async withdraw(\n tokenAddress: Address,\n amount: bigint,\n options?: PaymentOptions,\n ): Promise<TransactionReceipt> {\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"withdraw\",\n args: [tokenAddress, amount],\n });\n\n const gas = await this.publicClient.estimateGas({\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n value: 0n,\n account: this.account,\n });\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n data: calldata,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 批量存入 ETH(使用 Multicall3)\n * @param deposits 批量存款参数数组,每项包含接收者地址和金额\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async batchDepositETH(\n deposits: BatchTransferItem[],\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (deposits.length === 0) {\n throw new Error(\"No deposits provided\");\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 准备批量调用数据\n const calls = deposits.map((deposit) => {\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"depositFor\",\n args: [deposit.recipient, NATIVE_TOKEN_ADDRESS, deposit.amount],\n });\n\n return {\n target: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n allowFailure: false,\n value: deposit.amount,\n callData: calldata,\n };\n });\n\n // 计算总金额\n const totalValue = deposits.reduce(\n (sum, deposit) => sum + deposit.amount,\n 0n,\n );\n\n // 编码 Multicall3 调用\n const multicallData = encodeFunctionData({\n abi: MULTICALL3_ABI,\n functionName: \"aggregate3Value\",\n args: [calls],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: MULTICALL3_ADDRESS,\n data: multicallData,\n value: totalValue,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: totalValue,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: totalValue,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 批量存入 ERC20 代币(使用 Multicall3)\n * @param tokenAddress ERC20 代币地址\n * @param deposits 批量存款参数数组\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async batchDepositERC20(\n tokenAddress: Address,\n deposits: BatchTransferItem[],\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (deposits.length === 0) {\n throw new Error(\"No deposits provided\");\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 计算总金额(用于批准检查)\n const totalAmount = deposits.reduce(\n (sum, deposit) => sum + deposit.amount,\n 0n,\n );\n\n // 如果需要自动批准,则先批准代币(默认开启自动批准)\n if (options?.autoApprove !== false && this.walletClient && this.account) {\n try {\n console.log(`Checking ERC20 token approval status: ${tokenAddress}`);\n\n // 检查授权\n const allowance = (await this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [this.account.address, this.contracts?.anchorPay],\n })) as bigint;\n\n console.log(\n `Current allowance: ${allowance}, Required amount: ${totalAmount}, AnchorPay contract address: ${this.contracts?.anchorPay}`,\n );\n\n if (allowance < totalAmount) {\n console.log(\n `Approving ${totalAmount} tokens to AnchorPay contract...`,\n );\n\n // 批准代币 - 使用最大可能值进行授权,避免多次授权\n const maxApproveAmount = 2n ** 256n - 1n;\n\n // 估算 gas 和费用\n const {\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n } = await this.publicClient.estimateFeesPerGas();\n\n const approveCalldata = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n });\n\n const approveGas = await this.publicClient.estimateGas({\n to: tokenAddress,\n data: approveCalldata,\n value: 0n,\n account: this.account,\n });\n\n const approveTxHash = await this.walletClient.writeContract({\n account: this.account,\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n chain: this.publicClient.chain,\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n gas: approveGas,\n });\n\n console.log(`Approval transaction sent, hash: ${approveTxHash}`);\n\n // 等待交易确认\n await this.publicClient.waitForTransactionReceipt({\n hash: approveTxHash,\n });\n console.log(`Approval transaction confirmed`);\n } else {\n console.log(\n `Sufficient allowance already exists, no need for additional approval`,\n );\n }\n } catch (error) {\n console.error(`Approval failed:`, error);\n throw new Error(\n `ERC20 approval failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n // 准备批量调用数据\n const calls = deposits.map((deposit) => {\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"depositFor\",\n args: [deposit.recipient, tokenAddress, deposit.amount],\n });\n\n return {\n target: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n allowFailure: false,\n value: 0n,\n callData: calldata,\n };\n });\n\n // 编码 Multicall3 调用\n const multicallData = encodeFunctionData({\n abi: MULTICALL3_ABI,\n functionName: \"aggregate3Value\",\n args: [calls],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: MULTICALL3_ADDRESS,\n data: multicallData,\n value: 0n,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: 0n,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 批量发送 ETH(使用 Multicall3)\n * @param transfers 批量转账参数数组\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async batchSendETH(\n transfers: BatchTransferItem[],\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (transfers.length === 0) {\n throw new Error(\"No transfers provided\");\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 准备批量调用数据\n const calls = transfers.map((transfer) => {\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [\n transfer.recipient,\n NATIVE_TOKEN_ADDRESS,\n transfer.amount,\n transfer.data || (\"0x\" as Hex),\n ],\n });\n\n return {\n target: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n allowFailure: false,\n value: transfer.amount,\n callData: calldata,\n };\n });\n\n // 计算总金额\n const totalValue = transfers.reduce(\n (sum, transfer) => sum + transfer.amount,\n 0n,\n );\n\n // 编码 Multicall3 调用\n const multicallData = encodeFunctionData({\n abi: MULTICALL3_ABI,\n functionName: \"aggregate3Value\",\n args: [calls],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: MULTICALL3_ADDRESS,\n data: multicallData,\n value: totalValue,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: totalValue,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: totalValue,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n\n /**\n * 批量发送 ERC20 代币(使用 Multicall3)\n * @param tokenAddress ERC20 代币地址\n * @param transfers 批量转账参数数组\n * @param options 交易选项\n * @returns 交易收据或交易数据\n */\n async batchSendERC20(\n tokenAddress: Address,\n transfers: BatchTransferItem[],\n options?: PaymentOptions,\n ): Promise<TransactionReceipt | { to: string; data: string; value: bigint }> {\n if (transfers.length === 0) {\n throw new Error(\"No transfers provided\");\n }\n\n // 如果需要发送交易,但没有钱包客户端或账户\n if (\n options?.sendTransaction !== false &&\n (!this.walletClient || !this.account)\n ) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n // 计算总金额(用于批准检查)\n const totalAmount = transfers.reduce(\n (sum, transfer) => sum + transfer.amount,\n 0n,\n );\n\n // 如果需要自动批准,则先批准代币(默认开启自动批准)\n if (options?.autoApprove !== false && this.walletClient && this.account) {\n try {\n console.log(`Checking ERC20 token approval status: ${tokenAddress}`);\n\n // 检查授权\n const allowance = (await this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [this.account.address, this.contracts?.anchorPay],\n })) as bigint;\n\n console.log(\n `Current allowance: ${allowance}, Required amount: ${totalAmount}, AnchorPay contract address: ${this.contracts?.anchorPay}`,\n );\n\n if (allowance < totalAmount) {\n console.log(\n `Approving ${totalAmount} tokens to AnchorPay contract...`,\n );\n\n // 批准代币 - 使用最大可能值进行授权,避免多次授权\n const maxApproveAmount = 2n ** 256n - 1n;\n\n // 估算 gas 和费用\n const {\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n } = await this.publicClient.estimateFeesPerGas();\n\n const approveCalldata = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n });\n\n const approveGas = await this.publicClient.estimateGas({\n to: tokenAddress,\n data: approveCalldata,\n value: 0n,\n account: this.account,\n });\n\n const approveTxHash = await this.walletClient.writeContract({\n account: this.account,\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [this.contracts?.anchorPay, maxApproveAmount],\n chain: this.publicClient.chain,\n maxFeePerGas: approveMaxFeePerGas,\n maxPriorityFeePerGas: approveMaxPriorityFeePerGas,\n gas: approveGas,\n });\n\n console.log(`Approval transaction sent, hash: ${approveTxHash}`);\n\n // 等待交易确认\n await this.publicClient.waitForTransactionReceipt({\n hash: approveTxHash,\n });\n console.log(`Approval transaction confirmed`);\n } else {\n console.log(\n `Sufficient allowance already exists, no need for additional approval`,\n );\n }\n } catch (error) {\n console.error(`Approval failed:`, error);\n throw new Error(\n `ERC20 approval failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n\n // 准备批量调用数据\n const calls = transfers.map((transfer) => {\n const calldata = encodeFunctionData({\n abi: AnchorPayABI,\n functionName: \"send\",\n args: [\n transfer.recipient,\n tokenAddress,\n transfer.amount,\n transfer.data || (\"0x\" as Hex),\n ],\n });\n\n return {\n target: (this.contracts?.anchorPay as Address) || (\"\" as Address),\n allowFailure: false,\n value: 0n,\n callData: calldata,\n };\n });\n\n // 编码 Multicall3 调用\n const multicallData = encodeFunctionData({\n abi: MULTICALL3_ABI,\n functionName: \"aggregate3Value\",\n args: [calls],\n });\n\n // 如果不需要发送交易,只返回交易数据(AA 模式)\n if (options?.sendTransaction === false) {\n return {\n to: MULTICALL3_ADDRESS,\n data: multicallData,\n value: 0n,\n };\n }\n\n // 估算 gas 和费用\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await this.publicClient.estimateFeesPerGas();\n\n const gas = await this.publicClient.estimateGas({\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n value: 0n,\n account: this.account,\n });\n\n // 发送交易(EOA 模式)\n if (!this.walletClient || !this.account) {\n throw new Error(\n \"Wallet client and account are required to send transactions\",\n );\n }\n\n const txHash = await this.walletClient.sendTransaction({\n account: this.account,\n to: MULTICALL3_ADDRESS as Address,\n data: multicallData,\n maxFeePerGas: options?.maxFeePerGas || maxFeePerGas,\n maxPriorityFeePerGas:\n options?.maxPriorityFeePerGas || maxPriorityFeePerGas,\n gas: options?.gas || gas,\n chain: this.publicClient.chain,\n });\n\n // 等待交易确认并返回收据\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n return receipt;\n }\n}\n",
|
|
13
|
-
"import {\n abstract,\n abstractTestnet,\n base,\n baseSepolia,\n berachain,\n berachainBepolia,\n ronin,\n saigon,\n} from \"viem/chains\";\n\nimport { EnvironmentConfig } from \"./types\";\n\n/**\n * 环境枚举\n */\nexport enum Environment {\n DEV = \"dev\",\n BETA = \"beta\",\n PROD = \"prod\",\n}\n\n/**\n * ERC20 代币 ABI\n */\nexport const ERC20_ABI = [\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [{ name: \"\", type: \"uint8\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n name: \"owner\",\n type: \"address\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n name: \"spender\",\n type: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n name: \"recipient\",\n type: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n name: \"sender\",\n type: \"address\",\n },\n {\n name: \"recipient\",\n type: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n];\n\n/**\n * 环境配置\n */\nexport const ENVIRONMENTS: Record<Environment, EnvironmentConfig> = {\n // 开发环境\n dev: {\n apiBaseUrl: \"https://anchordev.dipbit.xyz\",\n contracts: {\n // 开发环境只支持测试网\n [saigon.id]: {\n anchorPay: \"0x8551891728967D2D7b6B502eF5339EEb2281143a\",\n anchorERC1155: \"0x23Da7778F6152D7B91C20808bEF7163c5EC2C470\",\n },\n [baseSepolia.id]: {\n anchorPay: \"0x2C69537d9b82d2C863BCfF3442D1c4E7633ead7c\",\n anchorERC1155: \"0x1CE9506cdDdD304AA753c0E8f1F898ab97Ec2870\",\n },\n [berachainBepolia.id]: {\n anchorPay: \"0x80635645c4B4dA367F2eE6D8F38BED1c2CF8C484\",\n anchorERC1155: \"0x20a6e4aa138cF4635c0abFC79272FBeB8a116F36\",\n },\n [abstractTestnet.id]: {\n anchorPay: \"0xc5c1606fDe120018E74751253F572796EDbaBC09\",\n anchorERC1155: \"0x0E03d8fA4A37287eabfb2e5BBdc7AcD7C1D3e869\",\n },\n [\"1962\"]: {\n anchorERC1155: \"0xa670ca0270c46876e5a78c9a7c596bfef91185a8\",\n },\n },\n },\n\n // 测试环境\n beta: {\n apiBaseUrl: \"https://anchorbeta.dipbit.xyz\",\n contracts: {\n [saigon.id]: {\n anchorPay: \"0xcbA8A3FE5fa94A807143bC2467A012010b02Cd94\",\n anchorERC1155: \"0x4a4D5888A284fED88fbE998c2C59957CE87923D2\",\n },\n [baseSepolia.id]: {\n anchorPay: \"0x2EB31dAbb95F3697eC6bBfE0c41b55D9C321571e\",\n anchorERC1155: \"0xE78F00BBD1be39Db6C404142Cf4a3A2471A915e7\",\n },\n [berachainBepolia.id]: {\n anchorPay: \"0x382F7946378e8A7A848d04166083711c90D76061\",\n anchorERC1155: \"0x99eed4522a3Da62CaEE3e87BfFd3779d7d5EF853\",\n },\n [abstractTestnet.id]: {\n anchorPay: \"0x7dc99a343555711aB92fc844d0Df657161df7D67\",\n anchorERC1155: \"0xa34F267d3Ab2Ce21CBD1F04F593300f6CB609a29\",\n },\n [\"1962\"]: {\n anchorERC1155: \"0xa51B53Dc3aA7f4ef5fE9bb429521a73f411ad867\",\n },\n },\n },\n\n // 生产环境\n prod: {\n apiBaseUrl: \"https://api-anchor.deek.network\",\n contracts: {\n // Dojo\n [abstract.id]: {\n anchorPay: \"0xf87C02027f36067a87E4eaeeD61b7Ce2ffE0813A\",\n anchorERC1155: \"0xd6895dc1740e057D564C795923542122f1513142\",\n },\n // dt\n [base.id]: {\n anchorPay: \"0x56f0fAF3a0336F57289e61Be6F32380B38C171E1\",\n },\n // mugen\n [ronin.id]: {\n anchorPay: \"0x56f0fAF3a0336F57289e61Be6F32380B38C171E1\",\n anchorERC1155: \"0xA412f7D0B39c7451E9A8a34a66f0D69CB5A378dA\",\n },\n // deek\n [berachain.id]: {\n anchorPay: \"0x4567890123456789012345678901234567890123\",\n anchorERC1155: \"0xdefabcdefabcdefabcdefabcdefabcdefabcdefab\",\n },\n },\n },\n};\n\n/**\n * 接口哈希常量\n */\nexport const INTERFACE_HASHES = {\n // tokenReceived 接口哈希\n TOKEN_RECEIVED:\n \"0x8b2cb2c7b7e2282e2e4b29a6a8c2b2db4218c6a5f8e8fcb3d5598f3e1e6c59d9\",\n};\n\nexport const NATIVE_TOKEN_ADDRESS =\n \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\n/**\n * Multicall3 合约地址(跨链通用)\n */\nexport const MULTICALL3_ADDRESS = \"0xcA11bde05977b3631167028862bE2a173976CA11\";\n\n/**\n * Multicall3 合约 ABI\n */\nexport const MULTICALL3_ABI = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes[]\",\n name: \"returnData\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3Value[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3Value\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n"
|
|
10
|
+
"/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { AnchorERC1155, AnchorERC1155Interface } from \"../AnchorERC1155\";\n\nconst _abi = [\n {\n type: \"constructor\",\n inputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"DEFAULT_ADMIN_ROLE\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"UPGRADE_INTERFACE_VERSION\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"badgeToProject\",\n inputs: [\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"id\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"balanceOfBatch\",\n inputs: [\n {\n name: \"accounts\",\n type: \"address[]\",\n internalType: \"address[]\",\n },\n {\n name: \"ids\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"burnBatch\",\n inputs: [\n {\n name: \"from\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"ids\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"values\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"calculateProjectTokenId\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"projectTokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n },\n {\n type: \"function\",\n name: \"createBatch\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"_to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"_tokenIds\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"_tokenURIs\",\n type: \"string[]\",\n internalType: \"string[]\",\n },\n {\n name: \"_maxSupplies\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"createBatch\",\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"_tokenIds\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"_tokenURIs\",\n type: \"string[]\",\n internalType: \"string[]\",\n },\n {\n name: \"_maxSupplies\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"eip712Domain\",\n inputs: [],\n outputs: [\n {\n name: \"fields\",\n type: \"bytes1\",\n internalType: \"bytes1\",\n },\n {\n name: \"name\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"version\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"salt\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"extensions\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"exists\",\n inputs: [\n {\n name: \"id\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getRoleAdmin\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"grantAdminRole\",\n inputs: [\n {\n name: \"admin\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"grantProjectOperator\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"grantRole\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"hasRole\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"initialize\",\n inputs: [\n {\n name: \"_defaultAdmin\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"_name\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"_symbol\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"_version\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"_baseURI\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"isApprovedForAll\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"isProjectOperator\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"mintWithSignature\",\n inputs: [\n {\n name: \"_req\",\n type: \"tuple\",\n internalType: \"struct AnchorDataTypes.MintRequest\",\n components: [\n {\n name: \"to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"quantity\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"price\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"currency\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"validityStartTimestamp\",\n type: \"uint128\",\n internalType: \"uint128\",\n },\n {\n name: \"validityEndTimestamp\",\n type: \"uint128\",\n internalType: \"uint128\",\n },\n {\n name: \"uid\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n name: \"_signature\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [\n {\n name: \"signer\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"multicall\",\n inputs: [\n {\n name: \"data\",\n type: \"bytes[]\",\n internalType: \"bytes[]\",\n },\n ],\n outputs: [\n {\n name: \"results\",\n type: \"bytes[]\",\n internalType: \"bytes[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"nextTokenIdToMint\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"owner\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"projectTotalSupply\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"proxiableUUID\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"renounceRole\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"callerConfirmation\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"revokeProjectOperator\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"revokeRole\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"safeBatchTransferFrom\",\n inputs: [\n {\n name: \"from\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"ids\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"values\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"data\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"safeTransferFrom\",\n inputs: [\n {\n name: \"from\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"id\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"value\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"data\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setApprovalForAll\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"approved\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setMaxSupply\",\n inputs: [\n {\n name: \"_tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"_maxSupply\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setRegistry\",\n inputs: [\n {\n name: \"registry\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setURIs\",\n inputs: [\n {\n name: \"_tokenIds\",\n type: \"uint256[]\",\n internalType: \"uint256[]\",\n },\n {\n name: \"_tokenURIs\",\n type: \"string[]\",\n internalType: \"string[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setup\",\n inputs: [\n {\n name: \"_name\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"_symbol\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"supportsInterface\",\n inputs: [\n {\n name: \"interfaceId\",\n type: \"bytes4\",\n internalType: \"bytes4\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n },\n {\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"tokenReceived\",\n inputs: [\n {\n name: \"token\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"from\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"userData\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"totalSupply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"totalSupply\",\n inputs: [\n {\n name: \"id\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"upgradeTo\",\n inputs: [\n {\n name: \"newImplementation\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"upgradeToAndCall\",\n inputs: [\n {\n name: \"newImplementation\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"data\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"uri\",\n inputs: [\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"version\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"event\",\n name: \"AnchorInitialized\",\n inputs: [\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ApprovalForAll\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"approved\",\n type: \"bool\",\n indexed: false,\n internalType: \"bool\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"BatchBurned\",\n inputs: [\n {\n name: \"from\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"tokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"values\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"BatchCreated\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"tokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"projectTokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"tokenURIs\",\n type: \"string[]\",\n indexed: false,\n internalType: \"string[]\",\n },\n {\n name: \"maxSupply\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"BatchURI\",\n inputs: [\n {\n name: \"tokenIds\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"tokenURIs\",\n type: \"string[]\",\n indexed: false,\n internalType: \"string[]\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"EIP712DomainChanged\",\n inputs: [],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Initialized\",\n inputs: [\n {\n name: \"version\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"MaxSupplyUpdated\",\n inputs: [\n {\n name: \"tokenId\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"maxSupply\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Minted\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n indexed: true,\n internalType: \"uint256\",\n },\n {\n name: \"quantity\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"price\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"currency\",\n type: \"address\",\n indexed: false,\n internalType: \"address\",\n },\n {\n name: \"uid\",\n type: \"bytes32\",\n indexed: false,\n internalType: \"bytes32\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ProjectOperatorGranted\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ProjectOperatorRevoked\",\n inputs: [\n {\n name: \"projectHandle\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RoleAdminChanged\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"previousAdminRole\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"newAdminRole\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RoleGranted\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"sender\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RoleRevoked\",\n inputs: [\n {\n name: \"role\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"sender\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"TransferBatch\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"from\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"ids\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n {\n name: \"values\",\n type: \"uint256[]\",\n indexed: false,\n internalType: \"uint256[]\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"TransferSingle\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"from\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"id\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"URI\",\n inputs: [\n {\n name: \"value\",\n type: \"string\",\n indexed: false,\n internalType: \"string\",\n },\n {\n name: \"id\",\n type: \"uint256\",\n indexed: true,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Upgraded\",\n inputs: [\n {\n name: \"implementation\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"error\",\n name: \"AccessControlBadConfirmation\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"AccessControlUnauthorizedAccount\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"neededRole\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"AddressEmptyCode\",\n inputs: [\n {\n name: \"target\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"AddressNotSet\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ArrayLengthMismatch\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ECDSAInvalidSignature\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ECDSAInvalidSignatureLength\",\n inputs: [\n {\n name: \"length\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ECDSAInvalidSignatureS\",\n inputs: [\n {\n name: \"s\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InsufficientBalance\",\n inputs: [\n {\n name: \"sender\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"balance\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"needed\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidApprover\",\n inputs: [\n {\n name: \"approver\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidArrayLength\",\n inputs: [\n {\n name: \"idsLength\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"valuesLength\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidOperator\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidReceiver\",\n inputs: [\n {\n name: \"receiver\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155InvalidSender\",\n inputs: [\n {\n name: \"sender\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1155MissingApprovalForAll\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"owner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1967InvalidImplementation\",\n inputs: [\n {\n name: \"implementation\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1967NonPayable\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"EmptyArray\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"FailedCall\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidChainId\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidInitialization\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidParameter\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidPayment\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidReceiver\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidRegistry\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidSignature\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidTokenId\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"MaxSupplyExceeded\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"NonTransferableToken\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"NotInitializing\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"NotProjectOperator\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"PaymentRequired\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ProjectHandleZero\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"RecipientUndefined\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ReentrancyGuardReentrantCall\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"SignatureExpired\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"UUPSUnauthorizedCallContext\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"UUPSUnsupportedProxiableUUID\",\n inputs: [\n {\n name: \"slot\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"Unauthorized\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ZeroQuantity\",\n inputs: [],\n },\n] as const;\n\nexport class AnchorERC1155__factory {\n static readonly abi = _abi;\n static createInterface(): AnchorERC1155Interface {\n return new Interface(_abi) as AnchorERC1155Interface;\n }\n static connect(\n address: string,\n runner?: ContractRunner | null\n ): AnchorERC1155 {\n return new Contract(address, _abi, runner) as unknown as AnchorERC1155;\n }\n}\n",
|
|
11
|
+
"/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { AnchorPay, AnchorPayInterface } from \"../AnchorPay\";\n\nconst _abi = [\n {\n type: \"constructor\",\n inputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"UPGRADE_INTERFACE_VERSION\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"acceptOwnership\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"getInterfaceImplementer\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"_interfaceHash\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"initialize\",\n inputs: [\n {\n name: \"_defaultAdmin\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"owner\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"pause\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"pendingOwner\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"proxiableUUID\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"renounceOwnership\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"send\",\n inputs: [\n {\n name: \"recipient\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"token\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"data\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"setInterfaceImplementer\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"_interfaceHash\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"implementer\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"transferOwnership\",\n inputs: [\n {\n name: \"newOwner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"unpause\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"upgradeToAndCall\",\n inputs: [\n {\n name: \"newImplementation\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"data\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"payable\",\n },\n {\n type: \"event\",\n name: \"Initialized\",\n inputs: [\n {\n name: \"version\",\n type: \"uint64\",\n indexed: false,\n internalType: \"uint64\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"InterfaceImplementerSet\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"interfaceHash\",\n type: \"bytes32\",\n indexed: true,\n internalType: \"bytes32\",\n },\n {\n name: \"implementer\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"OwnershipTransferStarted\",\n inputs: [\n {\n name: \"previousOwner\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"newOwner\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"OwnershipTransferred\",\n inputs: [\n {\n name: \"previousOwner\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"newOwner\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Paid\",\n inputs: [\n {\n name: \"from\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"data\",\n type: \"bytes\",\n indexed: false,\n internalType: \"bytes\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Upgraded\",\n inputs: [\n {\n name: \"implementation\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"error\",\n name: \"AddressEmptyCode\",\n inputs: [\n {\n name: \"target\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"AddressNotSet\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ERC1967InvalidImplementation\",\n inputs: [\n {\n name: \"implementation\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ERC1967NonPayable\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"FailedCall\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InsufficientPayment\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidAddress\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidAmount\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidInitialization\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidMsgValue\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidState\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"NotInitializing\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"OwnableInvalidOwner\",\n inputs: [\n {\n name: \"owner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"OwnableUnauthorizedAccount\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"PaymentTransferFailed\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"SafeERC20FailedOperation\",\n inputs: [\n {\n name: \"token\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"UUPSUnauthorizedCallContext\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"UUPSUnsupportedProxiableUUID\",\n inputs: [\n {\n name: \"slot\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n] as const;\n\nexport class AnchorPay__factory {\n static readonly abi = _abi;\n static createInterface(): AnchorPayInterface {\n return new Interface(_abi) as AnchorPayInterface;\n }\n static connect(address: string, runner?: ContractRunner | null): AnchorPay {\n return new Contract(address, _abi, runner) as unknown as AnchorPay;\n }\n}\n",
|
|
12
|
+
"/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n/*\n * ---------------------------------------------------------------\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\n * ## ##\n * ## AUTHOR: acacode ##\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\n * ---------------------------------------------------------------\n */\n\nexport interface AssetsBadgeResponse {\n /** 用户id */\n customerId?: string;\n /** all nfts in series */\n nfts?: NftVO[];\n}\n\nexport interface BadgeCategoryCompositeVO {\n /** all badges by category */\n tokens?: BadgeCategoryVO[];\n}\n\n/** all badges by category */\nexport interface BadgeCategoryVO {\n /** badge contract address */\n address?: string;\n /** business type */\n businessType?: string;\n /** category */\n category?: string;\n /**\n * badge count of category\n * @format int32\n */\n categoryTokenCount?: number;\n /**\n * badge claimed time\n * @format int64\n */\n claimTime?: number;\n /** claimable id */\n claimableId?: string;\n /** badge condition list */\n condition?: Condition[];\n /** badge desc */\n desc?: string;\n /** level */\n level?: string;\n /** badge gateway logo */\n logo?: string;\n /**\n * minted Count\n * @format int64\n */\n mintedCount?: number;\n /** badge name */\n name?: string;\n /** price */\n price?: string;\n /** badge rarity */\n rarity?: string;\n /**\n * reward\n * @format int32\n */\n reward?: number;\n /** badge series type */\n series?: string;\n /**\n * token sort\n * @format int32\n */\n sort?: number;\n /** badge status(pending、claimable、claimed) */\n status?: string;\n /** currency */\n token?: string;\n /** badge token id */\n tokenId?: string;\n /** token status(LIVE, OFFLINE, COMING) */\n tokenStatus?: string;\n /**\n * total supply\n * @format int64\n */\n totalSupply?: number;\n /** badge type */\n type?: string;\n}\n\nexport interface BadgeCheckRequest {\n /** badge groups */\n groups?: string[];\n /** Wallet type (ALL, EVM, SOLANA) */\n walletType?: string;\n}\n\nexport interface BadgeClaimSignatureRequest {\n /** List of badge IDs to claim */\n badgeIds: string[];\n /** Customer wallet address */\n customerAddress: string;\n}\n\n/** badge conditions and progress */\nexport interface BadgeProgressVO {\n /** condition number */\n condition?: string;\n /** condition name */\n name?: string;\n /** condition type */\n type?: string;\n /** progress value */\n value?: string;\n}\n\nexport interface BadgeSeriesCompositeVO {\n businessType?: string[];\n /** series desc */\n desc?: string;\n /** series detail */\n detail?: string;\n /** series ext */\n ext?: string;\n /** series group */\n group?: string;\n /** series gateway logo */\n logo?: string;\n /** series name */\n name?: string;\n /** all badges in series */\n nfts?: BadgeVO[];\n /**\n * total reward\n * @format int32\n */\n rewardTotal?: number;\n /** series type */\n series?: string;\n /**\n * series sort\n * @format int32\n */\n sort?: number;\n /** series type, unique key */\n type?: string;\n}\n\nexport interface BadgeSingleCheckRequest {\n /** Customer wallet address */\n customerAddress: string;\n}\n\n/** 团队徽章对应的个人徽章详情列表 */\nexport interface BadgeVO {\n /** badge contract address */\n address?: string;\n /** business type */\n businessType?: string;\n /** category */\n category?: string;\n /**\n * badge claimed time\n * @format int64\n */\n claimTime?: number;\n /** claimable id */\n claimableId?: string;\n /** badge condition list */\n condition?: Condition[];\n /** badge desc */\n desc?: string;\n /** level */\n level?: string;\n /** badge gateway logo */\n logo?: string;\n /** badge condition max */\n maxCond?: number;\n /** badge condition min */\n minCond?: number;\n /**\n * minted Count\n * @format int64\n */\n mintedCount?: number;\n /** badge name */\n name?: string;\n /** show new tag */\n newTag?: boolean;\n /** price */\n price?: string;\n /** badge complete process */\n process?: number;\n /** badge conditions and progress */\n progress?: BadgeProgressVO[];\n /** badge rarity */\n rarity?: string;\n /**\n * reward\n * @format int32\n */\n reward?: number;\n /** badge series type */\n series?: string;\n /** badge series logo */\n seriesLogo?: string;\n /** badge series name */\n seriesName?: string;\n /**\n * token sort\n * @format int32\n */\n sort?: number;\n /** badge status(pending、claimable、claimed) */\n status?: string;\n /**\n * badge tier\n * @format int32\n */\n tier?: number;\n /** currency */\n token?: string;\n /** badge token id */\n tokenId?: string;\n /** token status(LIVE, OFFLINE, COMING) */\n tokenStatus?: string;\n /**\n * total supply\n * @format int64\n */\n totalSupply?: number;\n /** badge type */\n type?: string;\n}\n\nexport interface BadgesCheckRequest {\n /**\n * amount, 上限 500\n * @format int32\n */\n amount?: number;\n /** biz id */\n bizId: string;\n /** customer id */\n customerId: string;\n /** 条件的完成进度,非必填,默认为设置的目标值 */\n progress?: ProgressDTO[];\n /** series */\n series: string;\n /** token id */\n tokenId?: string;\n}\n\nexport interface BadgesHolderResponse {\n /** 用户钱包地址 */\n address?: string;\n /** badge 合约地址 */\n contractAddress?: string;\n /** 用户id */\n customerId?: string;\n /**\n * 领取时间\n * @format int64\n */\n timestamp?: number;\n /** token id */\n tokenId?: string;\n}\n\nexport interface BatchMintRequestVO {\n /** nft address */\n contractAddress: string;\n /** customer address */\n customerAddress: string;\n /** token ids */\n tokenIds: string[];\n}\n\nexport interface CheckEventRequest {\n /** customer id */\n customerId: string;\n /** condition progress */\n progress: ProgressDTO[];\n /** series */\n series: string;\n}\n\n/** badge condition list */\nexport interface Condition {\n /** condition achieved */\n achieved?: string;\n /** condition name */\n name: string;\n /** condition scope */\n scope: string;\n /** verify status */\n status?: string;\n /** condition target */\n target: string;\n /** condition threshold */\n threshold?: string;\n /** condition type */\n type: string;\n}\n\nexport interface ImprintVO {\n /** ext user id */\n extUserId?: string;\n /**\n * last detect time\n * @format int64\n */\n lastDetectTime?: number;\n /** anchor user id */\n userId?: string;\n /** user state */\n userState?: string;\n}\n\nexport interface IntervalResetRequest {\n /** customer id */\n customerId: string;\n /** series */\n series?: string;\n}\n\nexport interface MemberRankingItem {\n /** contribution value */\n avatarUrl?: string;\n /** contribution description */\n individualHonorScore?: string;\n /** contribution description */\n invitationRewardScore?: string;\n /** contribution description */\n isCurrentUser?: string;\n /**\n * contribution description\n * @format int64\n */\n joinedAt?: number;\n /** user name */\n rank?: string;\n /** contribution description */\n role?: string;\n /** contribution description */\n totalHonorScore?: string;\n /** user avatar url */\n userId?: string;\n /** contribution type */\n userName?: string;\n}\n\nexport interface MintRequest {\n chainId?: string;\n contractAddress?: string;\n currency?: string;\n id?: string;\n price?: string;\n projectHandle?: string;\n /** @format int64 */\n quantity?: number;\n signature?: string;\n /** token id */\n tokenId?: string;\n uid?: string;\n /** @format int64 */\n validityEndTimestamp?: number;\n /** @format int64 */\n validityStartTimestamp?: number;\n}\n\nexport interface MintResponse {\n code?: string;\n msgKey?: string;\n obj?: MintResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface MintResponseAllOfObj {\n rows?: MintRequest[];\n}\n\nexport interface NFTMintRequestVO {\n /** claimable ids */\n claimableIds?: string[];\n /** nft address */\n contractAddress?: string;\n /** customer address */\n customerAddress?: string;\n /** nft type */\n nftType?: \"badge\";\n}\n\nexport interface NftHoldingByDurationRequest {\n /**\n * 最小持有时间戳(毫秒),持有开始时间必须早于或等于此时间戳\n * @format int64\n */\n minHoldingTimestamp: number;\n /** NFT信息列表 */\n nftInfos: NftHoldingByDurationRequestNftInfosInner[];\n /** 钱包地址列表 */\n walletAddresses: string[];\n}\n\n/** NFT信息列表 */\nexport interface NftHoldingByDurationRequestNftInfosInner {\n /** 链ID */\n chainId: string;\n /** NFT合约地址 */\n contractAddress: string;\n}\n\n/** NFT持有项列表 */\nexport interface NftHoldingItem {\n /** 链ID */\n chainId: string;\n /** NFT合约地址 */\n contractAddress: string;\n /**\n * 当前持有数量(持有时间超过minHoldingTimestamp的)\n * @format int64\n */\n quantity: number;\n}\n\n/** nft conditions and progress */\nexport interface NftProgressVO {\n /** condition number */\n condition?: string;\n /** condition name */\n name?: string;\n /** condition type */\n type?: string;\n /** progress value */\n value?: string;\n}\n\nexport interface NftSeriesDetailVO {\n /** series desc */\n desc?: string;\n /** series detail */\n detail?: string;\n /** series ext */\n ext?: string;\n /** series group */\n group?: string;\n /** series gateway logo */\n logo?: string;\n /** series name */\n name?: string;\n /** all nfts in series */\n nfts?: NftVO[];\n /**\n * total reward\n * @format int32\n */\n rewardTotal?: number;\n /** series type */\n series?: string;\n /**\n * series sort\n * @format int32\n */\n sort?: number;\n /** series type, unique key */\n type?: string;\n}\n\n/** all nfts in series */\nexport interface NftVO {\n /** nft contract address */\n address?: string;\n /** business type */\n businessType?: string;\n /** category */\n category?: string;\n /**\n * nft claimed time\n * @format int64\n */\n claimTime?: number;\n /** claimable id */\n claimableId?: string;\n /** nft desc */\n desc?: string;\n /** level */\n level?: string;\n /** nft gateway logo */\n logo?: string;\n /** nft condition max */\n maxCond?: number;\n /** nft condition min */\n minCond?: number;\n /**\n * minted Count\n * @format int64\n */\n mintedCount?: number;\n /** nft name */\n name?: string;\n /** show new tag */\n newTag?: boolean;\n /** price */\n price?: string;\n /** nft complete process */\n process?: number;\n /** nft conditions and progress */\n progress?: NftProgressVO[];\n /** nft rarity */\n rarity?: string;\n /**\n * reward\n * @format int32\n */\n reward?: number;\n /** nft series type */\n series?: string;\n /** nft series logo */\n seriesLogo?: string;\n /** nft series name */\n seriesName?: string;\n /**\n * token sort\n * @format int32\n */\n sort?: number;\n /** nft status(pending、claimable、claimed) */\n status?: string;\n /**\n * nft tier\n * @format int32\n */\n tier?: number;\n /** currency */\n token?: string;\n /** nft token id */\n tokenId?: string;\n /**\n * total supply\n * @format int64\n */\n totalSupply?: number;\n /** nft type */\n type?: string;\n}\n\n/** condition progress */\nexport interface ProgressDTO {\n /** condition name */\n name?: string;\n /** progress value */\n value?: string;\n}\n\nexport interface PurchaseRequest {\n /** customer id */\n customerId: string;\n /**\n * purchase discount\n * @format float\n */\n discount?: number;\n /** mint to address */\n toAddress: string;\n /** tokenId */\n tokenId: string;\n}\n\nexport interface QueryAssetsRequest {\n /** customer ids */\n customerIds: string[];\n /**\n * limit(max: 200)\n * @format int32\n */\n limit?: number;\n /** status(N、R、SR、SSR) */\n rarity?: string;\n /** status(pending、claimable、claimed) */\n status: string;\n /** query strategy(ALL: return all record, MAX: return max record, REWARD: order by reward desc) */\n strategy: \"ALL\" | \"MAX\" | \"REWARD\";\n}\n\nexport interface SeasonConfigVO {\n /**\n * season begin time\n * @format int64\n */\n beginTime?: number;\n /**\n * season end time\n * @format int64\n */\n endTime?: number;\n /**\n * season id\n * @format int64\n */\n id?: number;\n levelConfig?: SeasonLevelConfigVO[];\n name?: string;\n}\n\nexport interface SeasonLevelConfigVO {\n /** season level desc */\n desc?: string;\n /** season level icon */\n icon?: string;\n /**\n * season level id\n * @format int64\n */\n id?: number;\n /**\n * season level jump point\n * @format int64\n */\n jumpPoint?: number;\n /**\n * season level jump rank\n * @format int64\n */\n jumpRank?: number;\n /** season level name */\n name?: string;\n /** season level share image */\n shareImage?: string;\n /**\n * season level slide rank\n * @format int64\n */\n slideRank?: number;\n}\n\n/** 团队已解锁的徽章列表 */\nexport interface TeamBadgeItem {\n /** 徽章配置ID */\n badgeConfigId?: string;\n /**\n * 当前徽章数量\n * @format int32\n */\n currentBadgeCount?: number;\n /**\n * 荣誉分\n * @format int32\n */\n honorScore?: number;\n /** 用户是否参与解锁 */\n involved?: boolean;\n /**\n * 等级\n * @format int32\n */\n level?: number;\n /**\n * 进度百分比\n * @format int32\n */\n progress?: number;\n /**\n * 解锁所需徽章数量\n * @format int32\n */\n requiredBadgeCount?: number;\n /** 团队徽章对应的个人徽章ID集合 从unlockConditions中解析出type为BADGE_HOLDERS对应的badgeId集合 */\n requiredPersonalBadgeIds?: string[];\n /** 团队徽章对应的个人徽章详情列表 */\n requiredPersonalBadges?: BadgeVO[];\n /** 解锁状态 */\n status?: string;\n /** 团队徽章对应的个人徽章详情列表 */\n teamBadgeDetail?: BadgeVO;\n /**\n * 解锁时间(UTC毫秒)\n * @format int64\n */\n unlockedAt?: number;\n}\n\n/** 贡献者列表 */\nexport interface TeamContributorItem {\n /**\n * 用户头像URL\n * @example \"https://example.com/user-avatar-1.jpg\"\n */\n avatarUrl?: string;\n /**\n * 贡献描述\n * @example \"持有个人徽章001\"\n */\n contributionDescription?: string;\n /**\n * 贡献类型\n * @example \"BADGE_HOLDER\"\n */\n contributionType?: string;\n /**\n * 贡献值\n * @format int32\n * @example 1\n */\n contributionValue?: number;\n /** ext user id */\n extUserId?: string;\n /** user id */\n userId?: string;\n /**\n * 用户名\n * @example \"Captain\"\n */\n userName?: string;\n}\n\nexport interface TeamLeaveResponse {\n /** 是否在冷静期内 */\n coolingPeriodApplied?: boolean;\n /**\n * 冷静期结束时间\n * @format int64\n */\n coolingPeriodEnd?: number;\n /** 离开时间 */\n leftAt?: string;\n /** 团队id */\n teamId?: string;\n /** 用户id */\n userId?: string;\n}\n\n/** 团队排行榜列表 */\nexport interface TeamRankingItem {\n /** 团队头像URL */\n avatarUrl?: string;\n /** 团队背景图片URL */\n backgroundImage?: string;\n /** 队长用户ID */\n captainUserId?: string;\n /** 队长用户名 */\n captainUserName?: string;\n /**\n * 团队创建时间(时间戳)\n * @format int64\n */\n createdAt?: number;\n /** 团队描述 */\n description?: string;\n /**\n * 团队总成员数量上限\n * @format int32\n */\n maxMembers?: number;\n /**\n * 团队成员数量\n * @format int32\n */\n memberCount?: number;\n /**\n * 团队排名\n * @format int32\n */\n rank?: number;\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /** 团队名称 */\n teamName?: string;\n /** 团队类型(如公开、私密) */\n teamType?: string;\n /**\n * 团队总荣誉分\n * @format int32\n */\n totalHonorScore?: number;\n /** 团队已解锁的徽章列表 */\n unlockedBadges?: TeamRankingItemUnlockedBadgesInner[];\n}\n\n/** 团队已解锁的徽章列表 */\nexport interface TeamRankingItemUnlockedBadgesInner {\n /** 徽章配置ID */\n badgeConfigId?: string;\n /** 徽章图片URL */\n badgeImage?: string;\n /** 徽章名称 */\n badgeName?: string;\n /** 徽章系列 */\n badgeSeries?: string;\n /** 描述 */\n description?: string;\n /**\n * 荣誉分\n * @format int32\n */\n honorScore?: number;\n /**\n * 等级\n * @format int32\n */\n level?: number;\n /**\n * 进度百分比\n * @format int32\n */\n progress?: number;\n /** 稀有度 */\n rarity?: string;\n /** 解锁状态 */\n status?: string;\n /** 团队徽章对应的个人徽章详情列表 */\n teamBadgeDetail?: BadgeVO;\n /**\n * 解锁时间\n * @format int64\n */\n unlockedAt?: number;\n}\n\nexport interface TeamRemoveResponse {\n /** 移除原因 */\n reason?: string;\n /**\n * 移除时间戳,单位毫秒\n * @format int64\n */\n removedAt?: number;\n /** 移除操作人id */\n removedBy?: string;\n /**\n * 成功移除成员数量\n * @format int32\n */\n removedSuccessCount?: number;\n /** 被移除用户id */\n removedUserId?: string;\n /** 团队id */\n teamId?: string;\n}\n\nexport interface TeamVO {\n /**\n * 团队头像地址\n * @example \"https://example.com/avatar.png\"\n */\n avatarUrl?: string;\n /**\n * 团队背景图地址\n * @example \"https://example.com/background.png\"\n */\n backgroundImage?: string;\n /**\n * 队长用户ID\n * @example \"user_9876543210\"\n */\n captainUserId?: string;\n /**\n * 创建时间(UTC毫秒)\n * @format int64\n * @example 1672531200000\n */\n createdAt?: number;\n /**\n * 团队描述\n * @example \"This is an awesome team.\"\n */\n description?: string;\n /**\n * 团队荣誉分(用于排行榜)\n * @format int32\n * @example 1500\n */\n honorScore?: number;\n /**\n * 团队最大成员数量\n * @format int32\n * @example 50\n */\n maxMemberCount?: number;\n /**\n * 团队成员数量\n * @format int32\n * @example 42\n */\n memberCount?: number;\n /**\n * 团队状态(active/inactive/deleted)\n * @example \"active\"\n */\n status?: string;\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /**\n * 团队名称\n * @example \"Awesome Team\"\n */\n teamName?: string;\n /**\n * 团队类型(public/private/invite_only)\n * @example \"public\"\n */\n teamType?: string;\n /**\n * 团队总荣誉分\n * @format int32\n * @example 5000\n */\n totalHonorScore?: number;\n /**\n * 更新时间(UTC毫秒)\n * @format int64\n * @example 1672617600000\n */\n updatedAt?: number;\n}\n\n/** 每个钱包地址对应的代币余额信息 */\nexport interface TokenBalanceInfo {\n /** 代币余额(使用字符串以处理大数字) */\n balance: string;\n /** 链标识符 */\n chain_id: string;\n /**\n * 代币精度(小数位数)\n * @format int32\n */\n decimals: number;\n /** 代币合约地址 */\n token_address: string;\n /** 钱包地址 */\n wallet_address: string;\n}\n\nexport interface TokenBalancesRequest {\n /** 链标识符(例如:\"ethereum\", \"solana\", \"polygon\", \"bsc\") */\n chain_id: string;\n /** 代币合约地址 */\n token_address: string;\n /** 钱包地址列表 */\n wallets: string[];\n}\n\nexport interface UserOpHashProcessRequest {\n /** 处理类型 */\n processType?: \"ERC20_TRANSFER\";\n /** 合约调用成功后返回的:userOpsHash */\n userOperationHash: string;\n}\n\n/** 每个钱包地址对应的NFT持有信息 */\nexport interface WalletNftHolding {\n /** NFT持有项列表 */\n holdings: NftHoldingItem[];\n /** 钱包地址 */\n walletAddress: string;\n}\n\nexport interface WebResultAssetsBadgeResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultAssetsBadgeResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultAssetsBadgeResponseAllOfObj {\n rows?: AssetsBadgeResponse[];\n}\n\nexport interface WebResultBadgeAssetsResponse {\n code?: string;\n msgKey?: string;\n /** Badge assets data */\n obj?: WebResultBadgeAssetsResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\n/** Badge assets data */\nexport interface WebResultBadgeAssetsResponseAllOfObj {\n /** Next page token */\n nextToken?: string;\n /** List of user badge assets */\n rows?: BadgeVO[];\n /**\n * Total number of items\n * @format int64\n */\n total?: number;\n}\n\nexport interface WebResultBadgeCategoryDetailResponse {\n code?: string;\n msgKey?: string;\n obj?: BadgeCategoryCompositeVO;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultBadgeCategoryResponse {\n code?: string;\n msgKey?: string;\n obj?: BadgeCategoryCompositeVO;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultBadgeCheckResponse {\n code?: string;\n msgKey?: string;\n /** Badge check result */\n obj?: WebResultBadgeCheckResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\n/** Badge check result */\nexport interface WebResultBadgeCheckResponseAllOfObj {\n /** List of claimable badges */\n badges?: BadgeVO[];\n /**\n * Number of claimable badges\n * @format int32\n */\n claimableCount?: number;\n /**\n * Last check timestamp\n * @format int64\n */\n lastCheckTimestamp?: number;\n}\n\nexport interface WebResultBadgeClaimSignatureResponse {\n code?: string;\n msgKey?: string;\n /** Badge claim signatures */\n obj?: WebResultBadgeClaimSignatureResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\n/** List of claim signatures */\nexport interface WebResultBadgeClaimSignatureResponseAllOfObjSignatures {\n /** Badge identifier */\n badgeId?: string;\n /** Chain identifier */\n chainId?: string;\n /** Contract address */\n contractAddress?: string;\n /** Currency */\n currency?: string;\n /** Request identifier */\n id?: string;\n /** Price */\n price?: string;\n /** Project handle */\n projectHandle?: string;\n /**\n * Quantity to mint\n * @format int64\n */\n quantity?: number;\n /** Claim signature */\n signature?: string;\n /** Unique identifier */\n uid?: string;\n /**\n * Signature validity end time\n * @format int64\n */\n validityEndTimestamp?: number;\n /**\n * Signature validity start time\n * @format int64\n */\n validityStartTimestamp?: number;\n}\n\n/** Badge claim signatures */\nexport interface WebResultBadgeClaimSignatureResponseAllOfObj {\n /** List of claim signatures */\n signatures?: WebResultBadgeClaimSignatureResponseAllOfObjSignatures[];\n}\n\nexport interface WebResultBadgeClaimableListResponse {\n code?: string;\n msgKey?: string;\n /** List of claimable badges */\n obj?: BadgeVO[];\n /** Pagination information */\n pagination?: WebResultBadgeClaimableListResponseAllOfPagination;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\n/** Pagination information */\nexport interface WebResultBadgeClaimableListResponseAllOfPagination {\n /** Next page token */\n nextToken?: string;\n /**\n * Total number of items\n * @format int32\n */\n total?: number;\n}\n\n/** Badge condition configuration result */\nexport interface WebResultBadgeConditionConfigResponseData {\n /** Configuration as JSON string */\n config?: string;\n /**\n * Next verification time in milliseconds\n * @format int64\n */\n nextVerifyTime?: number;\n}\n\nexport interface WebResultBadgeContributorsResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultBadgeContributorsResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultBadgeContributorsResponseAllOfObj {\n /**\n * 团队徽章ID\n * @example \"team_badge_A_4\"\n */\n badgeId?: string;\n /**\n * 团队徽章名称\n * @example \"团队徽章A-4\"\n */\n badgeName?: string;\n /** 贡献者列表 */\n contributors?: TeamContributorItem[];\n /** 贡献总结信息 */\n summary?: WebResultBadgeContributorsResponseAllOfObjSummary;\n}\n\n/** 贡献总结信息 */\nexport interface WebResultBadgeContributorsResponseAllOfObjSummary {\n /**\n * 当前贡献进度(0.0 - 1.0)\n * @format float\n * @example 1\n */\n contributionProgress?: number;\n /**\n * 是否参与了解锁徽章\n * @example true\n */\n participateContributions?: boolean;\n /**\n * 解锁所需贡献者数量\n * @format int32\n * @example 10\n */\n requiredContributors?: number;\n /**\n * 总贡献者数量\n * @format int32\n * @example 15\n */\n totalContributors?: number;\n}\n\nexport interface WebResultBadgeDetailResponse {\n code?: string;\n msgKey?: string;\n /** 团队徽章对应的个人徽章详情列表 */\n obj?: BadgeVO;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultBadgeResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultBadgeResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultBadgeResponseAllOfObj {\n nextToken?: string;\n rows?: BadgeVO[];\n /**\n * total count\n * @format int64\n */\n total?: number;\n}\n\nexport interface WebResultBadgeSeriesDetailResponse {\n code?: string;\n msgKey?: string;\n obj?: BadgeSeriesCompositeVO;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultBadgeSeriesResponse {\n code?: string;\n msgKey?: string;\n /** List of badge series */\n obj?: BadgeSeriesCompositeVO[];\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultBadgeVerifiersResponse {\n /**\n * Response code\n * @example \"0000\"\n */\n code?: string;\n /** Badge condition configuration result */\n data?: WebResultBadgeConditionConfigResponseData;\n /**\n * Response message\n * @example \"success\"\n */\n message?: string;\n}\n\nexport interface WebResultBadgesCheckResponse {\n code?: string;\n msgKey?: string;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultBadgesCompositeResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultBadgesCompositeResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultBadgesCompositeResponseAllOfObj {\n imprint?: ImprintVO;\n /** List of badges filtered by conditions */\n tokens?: BadgeVO[];\n}\n\nexport interface WebResultBadgesHoldersResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultBadgesHoldersResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultBadgesHoldersResponseAllOfObj {\n list?: BadgesHolderResponse[];\n /** @format int64 */\n total?: number;\n}\n\nexport interface WebResultCheckEventResponse {\n code?: string;\n msgKey?: string;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultCheckResponse {\n code?: string;\n msgKey?: string;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultCheckResultResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultCheckResultResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultCheckResultResponseAllOfObj {\n /**\n * 可领取徽章数量\n * @format int64\n */\n claimableBadgeCount?: number;\n /**\n * 最后一次检查时间戳\n * @format int64\n */\n lastCheckTimestamp?: number;\n}\n\nexport interface WebResultCreateTeamResponse {\n code?: string;\n msgKey?: string;\n obj?: TeamVO;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultGrantBadgeRequestVO {\n business_id?: string;\n customer_id?: string;\n level_id?: number;\n season_id?: number;\n signature?: string;\n week_id?: number;\n}\n\nexport interface WebResultGrantBadgeResponseVO {\n code?: string;\n msgKey?: string;\n obj?: WebResultGrantBadgeResponseVOAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultGrantBadgeResponseVOAllOfObj {\n result?: boolean;\n}\n\nexport interface WebResultIntervalResetResponse {\n code?: string;\n msgKey?: string;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultJoinTeamResponse {\n code?: string;\n msgKey?: string;\n obj?: TeamVO;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultLeaveTeamResponse {\n code?: string;\n msgKey?: string;\n obj?: TeamLeaveResponse;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultListSeasonConfigVO {\n code?: string;\n msgKey?: string;\n obj?: WebResultListSeasonConfigVOAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultListSeasonConfigVOAllOfObj {\n rows?: SeasonConfigVO[];\n}\n\nexport interface WebResultMemberProfileResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultMemberProfileResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultMemberProfileResponseAllOfObj {\n /**\n * 用户退出团队后的冷却期结束时间,单位为毫秒时间戳。如果不在冷却期内,此字段为null\n * @format int64\n */\n coolingPeriodEnd?: number;\n /** 如果用户未加入团队,此字段为null */\n invitedByUserId?: string;\n /**\n * 如果用户未加入团队,此字段为null\n * @format int64\n * @example 1672531200000\n */\n joinedAt?: number;\n ranking?: WebResultMemberProfileResponseAllOfObjRanking;\n /**\n * 如果用户未加入团队,此字段为null\n * @example \"CAPTAIN\"\n */\n role?: string;\n scores?: WebResultMemberProfileResponseAllOfObjScores;\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /**\n * 用户唯一ID\n * @example \"team_1234567890\"\n */\n userId?: string;\n /**\n * 用户名称\n * @example \"team_1234567890\"\n */\n userName?: string;\n}\n\nexport interface WebResultMemberProfileResponseAllOfObjRanking {\n /**\n * 如果用户未加入团队,此字段为null\n * @format int32\n * @example 1\n */\n currentUserRank?: number;\n /**\n * 如果用户未加入团队,此字段为null\n * @format int32\n * @example 45\n */\n totalMembers?: number;\n}\n\nexport interface WebResultMemberProfileResponseAllOfObjScores {\n /**\n * 个人荣誉积分\n * @format int32\n * @example 2200\n */\n individualHonorScore?: number;\n /**\n * 邀请奖励积分\n * @format int32\n * @example 250\n */\n invitationRewardScore?: number;\n /**\n * 总荣誉积分\n * @format int32\n * @example 2450\n */\n totalHonorScore?: number;\n}\n\nexport interface WebResultMemberRankingResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultMemberRankingResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultMemberRankingResponseAllOfObj {\n leaderboard?: MemberRankingItem[];\n pagination?: WebResultMemberRankingResponseAllOfObjPagination;\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n}\n\nexport interface WebResultMemberRankingResponseAllOfObjPagination {\n /**\n * Current page number\n * @format int32\n */\n currentPage?: number;\n /**\n * Number of items per page\n * @format int32\n */\n pageSize?: number;\n summary?: WebResultMemberRankingResponseAllOfObjPaginationSummary;\n /**\n * Total number of items\n * @format int64\n */\n totalCount?: number;\n /**\n * Total number of pages\n * @format int32\n */\n totalPages?: number;\n}\n\nexport interface WebResultMemberRankingResponseAllOfObjPaginationSummary {\n /**\n * Average honor score of team members\n * @format int32\n */\n averageHonorScore?: number;\n topContributor?: WebResultMemberRankingResponseAllOfObjPaginationSummaryTopContributor;\n /**\n * Total number of team members\n * @format int32\n */\n totalMembers?: number;\n}\n\nexport interface WebResultMemberRankingResponseAllOfObjPaginationSummaryTopContributor {\n /**\n * Total honor score of the top contributor\n * @format int32\n */\n totalHonorScore?: number;\n /** user id */\n userId?: string;\n /** User name of the top contributor */\n userName?: string;\n}\n\nexport interface WebResultNftHoldingByDurationResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultNftHoldingByDurationResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultNftHoldingByDurationResponseAllOfObj {\n /** 每个钱包地址对应的NFT持有信息 */\n results?: WalletNftHolding[];\n}\n\nexport interface WebResultNftSeriesDetailResponse {\n code?: string;\n msgKey?: string;\n obj?: NftSeriesDetailVO;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultNftSeriesResponse {\n code?: string;\n msgKey?: string;\n obj?: NftSeriesDetailVO[];\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultNotificationReadResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultNotificationReadResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultNotificationReadResponseAllOfObj {\n /**\n * 是否已读\n * @example true\n */\n isRead?: boolean;\n /**\n * 通知ID\n * @example \"notif_1234567890\"\n */\n notificationId?: string;\n /**\n * 读取时间的时间戳(毫秒)\n * @format int64\n * @example 1672531200000\n */\n readAt?: number;\n /**\n * 通知状态\n * @example \"READ\"\n */\n status?: string;\n}\n\nexport interface WebResultNotificationsResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultNotificationsResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultNotificationsResponseAllOfObj {\n /** 用户的团队通知列表 */\n notifications?: WebResultNotificationsResponseAllOfObjNotifications[];\n /** 分页信息 */\n pagination?: WebResultNotificationsResponseAllOfObjPagination;\n /**\n * 未读通知数量\n * @format int32\n * @example 3\n */\n unreadCount?: number;\n}\n\n/** 用户的团队通知列表 */\nexport interface WebResultNotificationsResponseAllOfObjNotifications {\n /**\n * 通知内容详情\n * @example \"恭喜你解锁了新的徽章!\"\n */\n content?: string;\n /**\n * 创建时间(UTC毫秒)\n * @format int64\n * @example 1672531200000\n */\n createdAt?: number;\n /**\n * 通知附加数据\n * @example \"{badgeId=badge_123, badgeName=Achiever}\"\n */\n data?: object;\n /**\n * 过期时间(UTC毫秒)\n * @format int64\n * @example 1704067200000\n */\n expireAt?: number;\n /**\n * 通知ID\n * @example \"notif_1234567890\"\n */\n notificationId?: string;\n /**\n * 团队ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /**\n * 通知标题\n * @example \"徽章解锁通知\"\n */\n title?: string;\n /**\n * 通知类型:BADGE_UNLOCKED, CAPTAIN_SUCCESSOR, MEMBER_KICKED\n * @example \"BADGE_UNLOCKED\"\n */\n type?: string;\n /** 解锁的徽章列表(仅在type为BADGE_UNLOCKED时返回) */\n unlockedBadges?: BadgeVO[];\n /**\n * 用户ID\n * @example \"user_1234567890\"\n */\n userId?: string;\n}\n\n/** 分页信息 */\nexport interface WebResultNotificationsResponseAllOfObjPagination {\n /**\n * 当前页码\n * @format int32\n * @example 1\n */\n currentPage?: number;\n /**\n * 每页记录数\n * @format int32\n * @example 20\n */\n pageSize?: number;\n /**\n * 总记录数\n * @format int32\n * @example 15\n */\n totalCount?: number;\n /**\n * 总页数\n * @format int32\n * @example 1\n */\n totalPages?: number;\n}\n\nexport interface WebResultPurchaseResponse {\n code?: string;\n msgKey?: string;\n obj?: MintRequest;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultRemoveMemberResponse {\n code?: string;\n msgKey?: string;\n obj?: TeamRemoveResponse;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultTeamBadgesResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultTeamBadgesResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultTeamBadgesResponseAllOfObj {\n /** 团队徽章列表 */\n badges?: TeamBadgeItem[];\n /** 徽章总结信息 */\n summary?: WebResultTeamBadgesResponseAllOfObjSummary;\n}\n\n/** 徽章总结信息 */\nexport interface WebResultTeamBadgesResponseAllOfObjSummary {\n /**\n * 总徽章数量\n * @format int32\n */\n totalBadges?: number;\n /**\n * 总荣誉积分\n * @format int32\n */\n totalHonorScore?: number;\n /**\n * 总体解锁进度(0.0 - 1.0)\n * @format float\n */\n unlockProgress?: number;\n /**\n * 已解锁徽章数量\n * @format int32\n */\n unlockedBadges?: number;\n}\n\nexport interface WebResultTeamDetailResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultTeamDetailResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultTeamDetailResponseAllOfObj {\n /**\n * 团队头像URL\n * @example \"https://example.com/team-avatar.jpg\"\n */\n avatarUrl?: string;\n /**\n * 团队背景图片URL\n * @example \"https://example.com/team-bg.jpg\"\n */\n backgroundImage?: string;\n /** 团队徽章分类列表 */\n badgeCategories?: string[];\n /** 徽章总结信息 */\n badgeSummary?: WebResultTeamDetailResponseAllOfObjBadgeSummary;\n /** 队长用户ID */\n captainUserId?: string;\n /** 队长用户名 */\n captainUserName?: string;\n /**\n * 创建时间的时间戳(毫秒)\n * @format int64\n * @example 1672531200000\n */\n createdAt?: number;\n /**\n * 团队描述\n * @example \"Top performers unite\"\n */\n description?: string;\n /**\n * 团队排名\n * @format int32\n * @example 150\n */\n globalRank?: number;\n /**\n * 最大成员数量\n * @format int32\n * @example 50\n */\n maxMembers?: number;\n /**\n * 当前成员数量\n * @format int32\n * @example 45\n */\n memberCount?: number;\n /**\n * 当前用户加入团队的时间戳(毫秒)\n * @format int64\n * @example 1672531200000\n */\n myJoinedAt?: number;\n /**\n * 当前用户在团队中的角色\n * @example \"MEMBER\"\n */\n myRole?: string;\n /**\n * 团队名称\n * @example \"Elite Hunters\"\n */\n name?: string;\n /**\n * 团队状态\n * @example \"ACTIVE\"\n */\n status?: string;\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /**\n * 团队类型\n * @example \"PRIVATE\"\n */\n teamType?: string;\n /**\n * 团队总荣誉积分\n * @format int32\n * @example 98750\n */\n totalHonorScore?: number;\n /** 团队已解锁的徽章列表 */\n unlockedBadges?: TeamBadgeItem[];\n /**\n * 最后更新时间的时间戳(毫秒)\n * @format int64\n * @example 1672617600000\n */\n updatedAt?: number;\n}\n\n/** 徽章总结信息 */\nexport interface WebResultTeamDetailResponseAllOfObjBadgeSummary {\n /**\n * 徽章总荣誉积分\n * @format int32\n * @example 6200\n */\n totalHonorScore?: number;\n /**\n * 已解锁的徽章总数\n * @format int32\n * @example 12\n */\n totalUnlocked?: number;\n}\n\nexport interface WebResultTeamLeaderboardResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultTeamLeaderboardResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultTeamLeaderboardResponseAllOfObj {\n /** 团队排行榜列表 */\n leaderboard?: TeamRankingItem[];\n /** 分页信息 */\n pagination?: WebResultTeamLeaderboardResponseAllOfObjPagination;\n /** 个人所属团队信息及徽章详情 */\n personalTeamInfo?: WebResultTeamLeaderboardResponseAllOfObjPersonalTeamInfo;\n}\n\n/** 个人在该团队中的徽章详情列表 */\nexport interface WebResultTeamLeaderboardResponseAllOfObjPersonalTeamInfoBadgeDetails {\n /** 徽章ID */\n badgeId?: string;\n /** 徽章图片URL */\n badgeImage?: string;\n /** 徽章名称 */\n badgeName?: string;\n /** 徽章描述 */\n description?: string;\n /**\n * 徽章等级\n * @format int32\n */\n level?: number;\n /**\n * 徽章进度百分比\n * @format int32\n */\n progress?: number;\n}\n\n/** 分页信息 */\nexport interface WebResultTeamLeaderboardResponseAllOfObjPagination {\n /**\n * 当前页码\n * @format int32\n */\n currentPage?: number;\n /**\n * 每页条数\n * @format int32\n */\n pageSize?: number;\n /**\n * 总记录数\n * @format int32\n */\n totalCount?: number;\n /**\n * 总页数\n * @format int32\n */\n totalPages?: number;\n}\n\n/** 个人所属团队信息及徽章详情 */\nexport interface WebResultTeamLeaderboardResponseAllOfObjPersonalTeamInfo {\n /** 个人在该团队中的徽章详情列表 */\n badgeDetails?: WebResultTeamLeaderboardResponseAllOfObjPersonalTeamInfoBadgeDetails[];\n /**\n * 团队唯一ID\n * @example \"team_1234567890\"\n */\n teamId?: string;\n /**\n * 个人所属团队排名\n * @format int32\n */\n teamRank?: number;\n /**\n * 个人所属团队总荣誉分\n * @format int32\n */\n totalHonorScore?: number;\n}\n\nexport interface WebResultTokenBalancesResponse {\n code?: string;\n msgKey?: string;\n obj?: WebResultTokenBalancesResponseAllOfObj;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultTokenBalancesResponseAllOfObj {\n /** 每个钱包地址对应的代币余额信息 */\n balances?: TokenBalanceInfo[];\n}\n\nexport interface WebResultTransactionHashProcess {\n code?: string;\n msgKey?: string;\n obj?: boolean;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport interface WebResultUserOpHashProcess {\n code?: string;\n msgKey?: string;\n obj?: string;\n responseEnum?:\n | \"SUCCESS\"\n | \"SYSTEM_VERIFY_CLOSE\"\n | \"SYSTEM_VERIFY_OPEN_AND_OK\"\n | \"SYSTEM_VERIFY_OPEN_NEED_PHONE\"\n | \"SIGNATURE_ERROR\"\n | \"CUSTOMER_LOGIN_REQUIRED\"\n | \"CUSTOMER_NEW_LOGIN\"\n | \"CUSTOMER_MAIL_CODE_REQUIRED\"\n | \"CUSTOMER_MAIL_DUPLICATE\"\n | \"CUSTOMER_MAIL_CODE_INCORRECT\"\n | \"CUSTOMER_REFERENCE_REQUIRED\"\n | \"CUSTOMER_API_INVALID_SIGNATURE\"\n | \"CUSTOMER_PHONE_BIND_SUCCESS\"\n | \"CUSTOMER_LOGIN_PARAMETER_INCORRECT\"\n | \"CUSTOMER_LOGIN_INCORRECT\"\n | \"USER_NOT_EXIST\"\n | \"SYSTEM_OPERATION_FREQUENT\"\n | \"SYSTEM_SECURITY_PARAM_REQUIRED\"\n | \"SYSTEM_SECURITY_CHECK_FAIL\"\n | \"SYSTEM_PARAMETER_INVALID\"\n | \"SYSTEM_PARAMETER_REQUIRED\"\n | \"SYSTEM_PARAMETER_FORMAT_INCORRECT\"\n | \"SYSTEM_PARAMETER_TYPE_MISMATCH\"\n | \"SYSTEM_PARAMETER_NEED_DIGITAL\"\n | \"SYSTEM_DATA_NOT_FOUND\"\n | \"SYSTEM_CACHE_REFRESH_FAIL\"\n | \"SYSTEM_ACCESS_INTERFACE_OFFLINE\"\n | \"SYSTEM_UPGRADE_VERSION\"\n | \"SYSTEM_ACCESS_RESTRICTED\"\n | \"SYSTEM_HEADER_SAAS_ID_REQUIRED\"\n | \"SYSTEM_HEADER_CHAIN_ID_REQUIRED\"\n | \"SYSTEM_HEADER_JWT_TOKEN_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_ID_REQUIRED\"\n | \"SYSTEM_HEADER_DEVICE_TYPE_REQUIRED\"\n | \"SYSTEM_HEADER_VERSION_REQUIRED\"\n | \"API_RATE_LIMITING\"\n | \"SYSTEM_PROJECT_NOT_FOUND\"\n | \"SYSTEM_HEADER_PROJECT_ID_REQUIRED\"\n | \"PARAMS_JWT_DECRYPT_FAIL\"\n | \"PARAMS_JWT_CHECK_INVALID\"\n | \"SYSTEM_CONFIG_ERROR\"\n | \"SYSTEM_UNAVAILABLE\"\n | \"SYSTEM_ERROR\"\n | \"SYSTEM_UPGRADING\";\n success?: boolean;\n}\n\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = keyof Omit<Body, \"body\" | \"bodyUsed\">;\n\nexport interface FullRequestParams extends Omit<RequestInit, \"body\"> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n type?: ContentType;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** request cancellation token */\n cancelToken?: CancelToken;\n}\n\nexport type RequestParams = Omit<\n FullRequestParams,\n \"body\" | \"method\" | \"query\" | \"path\"\n>;\n\nexport interface ApiConfig<SecurityDataType = unknown> {\n baseUrl?: string;\n baseApiParams?: Omit<RequestParams, \"baseUrl\" | \"cancelToken\" | \"signal\">;\n securityWorker?: (\n securityData: SecurityDataType | null,\n ) => Promise<RequestParams | void> | RequestParams | void;\n customFetch?: typeof fetch;\n}\n\nexport interface HttpResponse<D extends unknown, E extends unknown = unknown>\n extends Response {\n data: D;\n error: E;\n}\n\ntype CancelToken = Symbol | string | number;\n\nexport enum ContentType {\n Json = \"application/json\",\n JsonApi = \"application/vnd.api+json\",\n FormData = \"multipart/form-data\",\n UrlEncoded = \"application/x-www-form-urlencoded\",\n Text = \"text/plain\",\n}\n\nexport class HttpClient<SecurityDataType = unknown> {\n public baseUrl: string = \"https://anchordev.dipbit.xyz/\";\n private securityData: SecurityDataType | null = null;\n private securityWorker?: ApiConfig<SecurityDataType>[\"securityWorker\"];\n private abortControllers = new Map<CancelToken, AbortController>();\n private customFetch = (...fetchParams: Parameters<typeof fetch>) =>\n fetch(...fetchParams);\n\n private baseApiParams: RequestParams = {\n credentials: \"same-origin\",\n headers: {},\n redirect: \"follow\",\n referrerPolicy: \"no-referrer\",\n };\n\n constructor(apiConfig: ApiConfig<SecurityDataType> = {}) {\n Object.assign(this, apiConfig);\n }\n\n public setSecurityData = (data: SecurityDataType | null) => {\n this.securityData = data;\n };\n\n protected encodeQueryParam(key: string, value: any) {\n const encodedKey = encodeURIComponent(key);\n return `${encodedKey}=${encodeURIComponent(typeof value === \"number\" ? value : `${value}`)}`;\n }\n\n protected addQueryParam(query: QueryParamsType, key: string) {\n return this.encodeQueryParam(key, query[key]);\n }\n\n protected addArrayQueryParam(query: QueryParamsType, key: string) {\n const value = query[key];\n return value.map((v: any) => this.encodeQueryParam(key, v)).join(\"&\");\n }\n\n protected toQueryString(rawQuery?: QueryParamsType): string {\n const query = rawQuery || {};\n const keys = Object.keys(query).filter(\n (key) => \"undefined\" !== typeof query[key],\n );\n return keys\n .map((key) =>\n Array.isArray(query[key])\n ? this.addArrayQueryParam(query, key)\n : this.addQueryParam(query, key),\n )\n .join(\"&\");\n }\n\n protected addQueryParams(rawQuery?: QueryParamsType): string {\n const queryString = this.toQueryString(rawQuery);\n return queryString ? `?${queryString}` : \"\";\n }\n\n private contentFormatters: Record<ContentType, (input: any) => any> = {\n [ContentType.Json]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.JsonApi]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.Text]: (input: any) =>\n input !== null && typeof input !== \"string\"\n ? JSON.stringify(input)\n : input,\n [ContentType.FormData]: (input: any) => {\n if (input instanceof FormData) {\n return input;\n }\n\n return Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n formData.append(\n key,\n property instanceof Blob\n ? property\n : typeof property === \"object\" && property !== null\n ? JSON.stringify(property)\n : `${property}`,\n );\n return formData;\n }, new FormData());\n },\n [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...(params2 || {}),\n headers: {\n ...(this.baseApiParams.headers || {}),\n ...(params1.headers || {}),\n ...((params2 && params2.headers) || {}),\n },\n };\n }\n\n protected createAbortSignal = (\n cancelToken: CancelToken,\n ): AbortSignal | undefined => {\n if (this.abortControllers.has(cancelToken)) {\n const abortController = this.abortControllers.get(cancelToken);\n if (abortController) {\n return abortController.signal;\n }\n return void 0;\n }\n\n const abortController = new AbortController();\n this.abortControllers.set(cancelToken, abortController);\n return abortController.signal;\n };\n\n public abortRequest = (cancelToken: CancelToken) => {\n const abortController = this.abortControllers.get(cancelToken);\n\n if (abortController) {\n abortController.abort();\n this.abortControllers.delete(cancelToken);\n }\n };\n\n public request = async <T = any, E = any>({\n body,\n secure,\n path,\n type,\n query,\n format,\n baseUrl,\n cancelToken,\n ...params\n }: FullRequestParams): Promise<HttpResponse<T, E>> => {\n const secureParams =\n ((typeof secure === \"boolean\" ? secure : this.baseApiParams.secure) &&\n this.securityWorker &&\n (await this.securityWorker(this.securityData))) ||\n {};\n const requestParams = this.mergeRequestParams(params, secureParams);\n const queryString = query && this.toQueryString(query);\n const payloadFormatter = this.contentFormatters[type || ContentType.Json];\n const responseFormat = format || requestParams.format;\n\n return this.customFetch(\n `${baseUrl || this.baseUrl || \"\"}${path}${queryString ? `?${queryString}` : \"\"}`,\n {\n ...requestParams,\n headers: {\n ...(requestParams.headers || {}),\n ...(type && type !== ContentType.FormData\n ? { \"Content-Type\": type }\n : {}),\n },\n signal:\n (cancelToken\n ? this.createAbortSignal(cancelToken)\n : requestParams.signal) || null,\n body:\n typeof body === \"undefined\" || body === null\n ? null\n : payloadFormatter(body),\n },\n ).then(async (response) => {\n const r = response as HttpResponse<T, E>;\n r.data = null as unknown as T;\n r.error = null as unknown as E;\n\n const data = !responseFormat\n ? r\n : await response[responseFormat]()\n .then((data) => {\n if (r.ok) {\n r.data = data;\n } else {\n r.error = data;\n }\n return r;\n })\n .catch((e) => {\n r.error = e;\n return r;\n });\n\n if (cancelToken) {\n this.abortControllers.delete(cancelToken);\n }\n\n if (!response.ok) throw data;\n return data;\n });\n };\n}\n\n/**\n * @title Anchor OpenApi\n * @version V1.0\n * @license Apache 2.0 (http://springdoc.org)\n * @baseUrl https://anchordev.dipbit.xyz/\n */\nexport class Api<\n SecurityDataType extends unknown,\n> extends HttpClient<SecurityDataType> {\n s1 = {\n /**\n * @description assets of badge\n *\n * @tags AnchorS2S\n * @name QueryAssets\n * @summary assets of badge\n * @request POST:/s1/assets/{type}\n */\n queryAssets: (\n type: string,\n data: QueryAssetsRequest,\n params: RequestParams = {},\n ) =>\n this.request<WebResultAssetsBadgeResponse, any>({\n path: `/s1/assets/${type}`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description grant badge\n *\n * @tags AnchorS2S\n * @name GrantBadge\n * @summary grant badge\n * @request POST:/s1/badges\n */\n grantBadge: (\n data: WebResultGrantBadgeRequestVO,\n params: RequestParams = {},\n ) =>\n this.request<WebResultGrantBadgeResponseVO, any>({\n path: `/s1/badges`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description badges check\n *\n * @tags AnchorS2S\n * @name BadgesCheck\n * @summary badges check\n * @request POST:/s1/badges/check\n */\n badgesCheck: (data: BadgesCheckRequest, params: RequestParams = {}) =>\n this.request<WebResultBadgesCheckResponse, any>({\n path: `/s1/badges/check`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description query badges holders\n *\n * @tags AnchorS2S\n * @name QueryBadgesHolders\n * @summary query badges holders\n * @request GET:/s1/badges/holders\n */\n queryBadgesHolders: (\n query: {\n /** tokenId */\n tokenId: string;\n /**\n * @format int32\n * @default 10\n */\n limit?: number;\n /**\n * @format int32\n * @default 0\n */\n offset?: number;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultBadgesHoldersResponse, any>({\n path: `/s1/badges/holders`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description check by event\n *\n * @tags AnchorS2S\n * @name CheckByEvent\n * @summary check by event\n * @request POST:/s1/check/event\n */\n checkByEvent: (data: CheckEventRequest, params: RequestParams = {}) =>\n this.request<WebResultCheckEventResponse, any>({\n path: `/s1/check/event`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 重制探测徽章冷却时间\n *\n * @tags AnchorS2S\n * @name IntervalReset\n * @summary interval reset\n * @request POST:/s1/interval/reset\n */\n intervalReset: (data: IntervalResetRequest, params: RequestParams = {}) =>\n this.request<WebResultIntervalResetResponse, any>({\n path: `/s1/interval/reset`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 查询钱包地址列表对应的NFT持有数量(持有时间超过指定时间戳),透传调用RemoteNftService.GetUserNftHoldingByDuration\n *\n * @tags AnchorS2S\n * @name GetUserNftHoldingByDuration\n * @summary 查询NFT持有数量(按持有时长)\n * @request POST:/s1/nft/holding-by-duration\n */\n getUserNftHoldingByDuration: (\n data: NftHoldingByDurationRequest,\n params: RequestParams = {},\n ) =>\n this.request<WebResultNftHoldingByDurationResponse, any>({\n path: `/s1/nft/holding-by-duration`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description purchase mint with signature\n *\n * @tags AnchorS2S\n * @name PurchaseMint\n * @summary purchase mint with signature\n * @request POST:/s1/purchase/{type}\n */\n purchaseMint: (\n type: string,\n data: PurchaseRequest,\n params: RequestParams = {},\n ) =>\n this.request<WebResultPurchaseResponse, any>({\n path: `/s1/purchase/${type}`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description get nft series by id\n *\n * @tags AnchorS2S\n * @name GetNftSeriesDetail\n * @summary get nft series by id\n * @request GET:/s1/series/{type}/{series}\n */\n getNftSeriesDetail: (\n type: string,\n series: string,\n query?: {\n /** 用户id */\n customerId?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultNftSeriesDetailResponse, any>({\n path: `/s1/series/${type}/${series}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 创建新团队,支持设置背景图\n *\n * @tags AnchorS2S\n * @name CreateTeam\n * @summary Create team\n * @request POST:/s1/teams\n */\n createTeam: (data: object, params: RequestParams = {}) =>\n this.request<WebResultCreateTeamResponse, any>({\n path: `/s1/teams`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 查询我的团队信息\n *\n * @tags AnchorS2S\n * @name TeamDetail\n * @summary query my team info\n * @request GET:/s1/teams/detail/{userId}\n */\n teamDetail: (userId: string, params: RequestParams = {}) =>\n this.request<WebResultTeamDetailResponse, any>({\n path: `/s1/teams/detail/${userId}`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 加入团队,支持通过邀请码或直接指定团队ID\n *\n * @tags AnchorS2S\n * @name JoinTeam\n * @summary Join team\n * @request POST:/s1/teams/join\n */\n joinTeam: (data: object, params: RequestParams = {}) =>\n this.request<WebResultJoinTeamResponse, any>({\n path: `/s1/teams/join`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 退出当前团队\n *\n * @tags AnchorS2S\n * @name LeaveTeam\n * @summary Leave team (self)\n * @request DELETE:/s1/teams/leave/{userId}\n */\n leaveTeam: (userId: string, params: RequestParams = {}) =>\n this.request<WebResultLeaveTeamResponse, any>({\n path: `/s1/teams/leave/${userId}`,\n method: \"DELETE\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 队长移除团队成员\n *\n * @tags AnchorS2S\n * @name RemoveTeamMember\n * @summary Remove member by captain\n * @request DELETE:/s1/teams/remove/{captainUserId}/{userId}\n */\n removeTeamMember: (\n captainUserId: string,\n userId: string,\n params: RequestParams = {},\n ) =>\n this.request<WebResultRemoveMemberResponse, any>({\n path: `/s1/teams/remove/${captainUserId}/${userId}`,\n method: \"DELETE\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 批量查询多个钱包地址的代币余额,透传调用RemoteInsightTokenService.GetTokenBalances\n *\n * @tags AnchorS2S\n * @name GetTokenBalances\n * @summary 批量查询代币余额\n * @request POST:/s1/token/balances\n */\n getTokenBalances: (\n data: TokenBalancesRequest,\n params: RequestParams = {},\n ) =>\n this.request<WebResultTokenBalancesResponse, any>({\n path: `/s1/token/balances`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n };\n v1 = {\n /**\n * @description query user claimable or claimed Badges\n *\n * @tags Anchor\n * @name BadgeAssets\n * @summary query user claimable or claimed Badges\n * @request GET:/v1/badges\n */\n badgeAssets: (\n query?: {\n /** customer id */\n customerId?: string;\n /** nft status, values(claimable、claimed) */\n status?: string;\n /** 返回数据的策略(all:返回所有徽章, max:仅返回同系列等级最高的徽章, reward:按照reward倒序返回, time:按照时间倒序返回) */\n strategy?: string;\n /** badge series */\n series?: string;\n /**\n * 每页条数\n * @format int32\n */\n limit?: number;\n /** 分页参数 */\n nextToken?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultBadgeResponse, any>({\n path: `/v1/badges`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description get check result\n *\n * @tags Anchor\n * @name GetCheckResult\n * @summary get check result\n * @request GET:/v1/check/{type}\n */\n getCheckResult: (type: string, params: RequestParams = {}) =>\n this.request<WebResultCheckResultResponse, any>({\n path: `/v1/check/${type}`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description anchor check\n *\n * @tags Anchor\n * @name Check\n * @summary anchor check\n * @request POST:/v1/check/{type}\n */\n check: (type: string, params: RequestParams = {}) =>\n this.request<WebResultCheckResponse, any>({\n path: `/v1/check/${type}`,\n method: \"POST\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取用户的通知列表\n *\n * @tags TeamV1\n * @name GetNotifications\n * @summary Get notifications\n * @request GET:/v1/notifications\n */\n getNotifications: (\n query?: {\n teamId?: string;\n /** @format int32 */\n page?: number;\n /** @format int32 */\n size?: number;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultNotificationsResponse, any>({\n path: `/v1/notifications`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 标记指定通知为已读状态\n *\n * @tags TeamV1\n * @name MarkNotificationRead\n * @summary Mark notification as read\n * @request POST:/v1/notifications/{notificationId}/read\n */\n markNotificationRead: (\n notificationId: string,\n params: RequestParams = {},\n ) =>\n this.request<WebResultNotificationReadResponse, any>({\n path: `/v1/notifications/${notificationId}/read`,\n method: \"POST\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description list season config\n *\n * @tags Season\n * @name ListSeasonConfig\n * @summary list season config\n * @request GET:/v1/seasons\n */\n listSeasonConfig: (params: RequestParams = {}) =>\n this.request<WebResultListSeasonConfigVO, any>({\n path: `/v1/seasons`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description get nft series\n *\n * @tags Anchor\n * @name NftSeries\n * @summary get nft series\n * @request GET:/v1/series/{type}\n */\n nftSeries: (type: string, params: RequestParams = {}) =>\n this.request<WebResultNftSeriesResponse, any>({\n path: `/v1/series/${type}`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description get nft series by id\n *\n * @tags Anchor\n * @name GetNftSeriesById\n * @summary get nft series by id\n * @request GET:/v1/series/{type}/{series}\n */\n getNftSeriesById: (\n type: string,\n series: string,\n query?: {\n /** 用户id */\n customerId?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultNftSeriesDetailResponse, any>({\n path: `/v1/series/${type}/${series}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取团队所有徽章的状态信息,支持按状态筛选\n *\n * @tags TeamV1\n * @name GetTeamBadges\n * @summary Get team badges\n * @request GET:/v1/teams/badges\n */\n getTeamBadges: (\n query?: {\n category?: string;\n status?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultTeamBadgesResponse, any>({\n path: `/v1/teams/badges`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取指定徽章的贡献者列表\n *\n * @tags TeamV1\n * @name GetBadgeContributors\n * @summary Get badge contributors\n * @request GET:/v1/teams/badges/{badgeId}/contributors\n */\n getBadgeContributors: (badgeId: string, params: RequestParams = {}) =>\n this.request<WebResultBadgeContributorsResponse, any>({\n path: `/v1/teams/badges/${badgeId}/contributors`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取团队排行榜,支持分页查询,返回个人团队信息\n *\n * @tags TeamV1\n * @name GetTeamLeaderboard\n * @summary Get team leaderboard\n * @request GET:/v1/teams/leaderboard\n */\n getTeamLeaderboard: (\n query?: {\n /** @format int32 */\n page?: number;\n /** @format int32 */\n size?: number;\n type?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultTeamLeaderboardResponse, any>({\n path: `/v1/teams/leaderboard`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取当前用户的个人概况信息\n *\n * @tags TeamV1\n * @name GetMyTeamProfile\n * @summary Get my team profile\n * @request GET:/v1/teams/members/me\n */\n getMyTeamProfile: (params: RequestParams = {}) =>\n this.request<WebResultMemberProfileResponse, any>({\n path: `/v1/teams/members/me`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取团队详情,包含已解锁的徽章信息\n *\n * @tags TeamV1\n * @name GetTeamDetail\n * @summary Get team detail\n * @request GET:/v1/teams/{teamId}/detail\n */\n getTeamDetail: (teamId: string, params: RequestParams = {}) =>\n this.request<WebResultTeamDetailResponse, any>({\n path: `/v1/teams/${teamId}/detail`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 获取团队内成员贡献排行榜\n *\n * @tags TeamV1\n * @name GetTeamMemberRanking\n * @summary Get team member ranking\n * @request GET:/v1/teams/{teamId}/members/ranking\n */\n getTeamMemberRanking: (\n teamId: string,\n query?: {\n /** @format int32 */\n page?: number;\n /** @format int32 */\n size?: number;\n type?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultMemberRankingResponse, any>({\n path: `/v1/teams/${teamId}/members/ranking`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 前端监听到合约成功事件,调用加快后端事件处理\n *\n * @tags Transaction\n * @name UserOpHashProcess\n * @summary userOpHash process\n * @request POST:/v1/transaction/process/userOpHash\n */\n userOpHashProcess: (\n data: UserOpHashProcessRequest,\n params: RequestParams = {},\n ) =>\n this.request<WebResultUserOpHashProcess, any>({\n path: `/v1/transaction/process/userOpHash`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description 前端监听到合约成功事件,调用加快后端事件处理\n *\n * @tags Transaction\n * @name TransactionHashProcess\n * @summary speed up transaction\n * @request POST:/v1/transaction/process/{txHash}\n */\n transactionHashProcess: (txHash: string, params: RequestParams = {}) =>\n this.request<WebResultTransactionHashProcess, any>({\n path: `/v1/transaction/process/${txHash}`,\n method: \"POST\",\n format: \"json\",\n ...params,\n }),\n };\n v2 = {\n /**\n * @description query badges by conditions\n *\n * @tags BadgeV2\n * @name QueryBadges\n * @summary query badges by conditions\n * @request GET:/v2/badges\n */\n queryBadges: (\n query?: {\n /** include badges token ids */\n ids?: string[];\n /** query type(COMMON: 根据传入的条件查询, HOTSPOT: 查询公告中配置的badge), 默认: COMMON */\n queryType?: string;\n /** only return imprint info */\n onlyImprint?: boolean;\n /** include progress info, default is false */\n includeProgress?: boolean;\n },\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgesCompositeResponse,\n WebResultBadgesCompositeResponse\n >({\n path: `/v2/badges`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Check which badges the user can claim\n *\n * @tags BadgeV2\n * @name CheckUserClaimableBadges\n * @summary Check user claimable badges\n * @request POST:/v2/badges\n */\n checkUserClaimableBadges: (\n data: BadgeCheckRequest,\n params: RequestParams = {},\n ) =>\n this.request<WebResultBadgeCheckResponse, WebResultBadgeCheckResponse>({\n path: `/v2/badges`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get user's claimed and claimable badge assets\n *\n * @tags BadgeV2\n * @name GetUserBadgeAssets\n * @summary Get user badge assets\n * @request GET:/v2/badges/assets\n */\n getUserBadgeAssets: (\n query?: {\n /**\n * Badge status include claimable\n * @default false\n */\n includeClaimable?: boolean;\n /** Return strategy (BADGE_ALL: return all badges, BADGE_MAX: return highest level per series, BADGE_REWARD: sort by reward) */\n strategy?: string;\n /** Badge series filter */\n series?: string[];\n /**\n * Number of items per page\n * @format int32\n */\n limit?: number;\n /** Pagination token */\n nextToken?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultBadgeAssetsResponse, WebResultBadgeAssetsResponse>({\n path: `/v2/badges/assets`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Query badge by category\n *\n * @tags BadgeV2\n * @name CategoriesList\n * @summary Query badge by category\n * @request GET:/v2/badges/categories\n */\n categoriesList: (\n query?: {\n /** include badges series */\n series?: string;\n /** include badges status */\n status?: string;\n /** include badges business type */\n businessType?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeCategoryResponse,\n WebResultBadgeCategoryResponse\n >({\n path: `/v2/badges/categories`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get detailed information of a specific badge category\n *\n * @tags BadgeV2\n * @name CategoriesDetail\n * @summary Get badge detail by category\n * @request GET:/v2/badges/categories/{category}\n */\n categoriesDetail: (category: string, params: RequestParams = {}) =>\n this.request<\n WebResultBadgeCategoryDetailResponse,\n WebResultBadgeCategoryDetailResponse\n >({\n path: `/v2/badges/categories/${category}`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get badges that the user can claim\n *\n * @tags BadgeV2\n * @name GetUserClaimableBadges\n * @summary Get user claimable badges\n * @request GET:/v2/badges/claimable\n */\n getUserClaimableBadges: (\n query?: {\n /** Badge series filter */\n series?: string;\n /** Badge token IDs filter */\n tokenIds?: string[];\n /**\n * Number of items per page\n * @format int32\n */\n limit?: number;\n /** Pagination token */\n nextToken?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeClaimableListResponse,\n WebResultBadgeClaimableListResponse\n >({\n path: `/v2/badges/claimable`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Query badge series with optional filtering conditions\n *\n * @tags BadgeV2\n * @name GetBadgeSeries\n * @summary Query badge series with conditions\n * @request GET:/v2/badges/series\n */\n getBadgeSeries: (\n query?: {\n /** include badges */\n includeBadges?: boolean;\n /** include badges status */\n status?: string;\n /** include badges business type */\n businessType?: string;\n /**\n * include badges limit\n * @format int32\n */\n limit?: number;\n },\n params: RequestParams = {},\n ) =>\n this.request<WebResultBadgeSeriesResponse, WebResultBadgeSeriesResponse>({\n path: `/v2/badges/series`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get detailed information of a specific badge series\n *\n * @tags BadgeV2\n * @name GetBadgeSeriesDetail\n * @summary Get badge series detail\n * @request GET:/v2/badges/series/{series}\n */\n getBadgeSeriesDetail: (\n series: string,\n query?: {\n /** claim status */\n status?: string;\n /** badge business type */\n businessType?: string;\n /** token Id array */\n tokenIds?: string[];\n },\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeSeriesDetailResponse,\n WebResultBadgeSeriesDetailResponse\n >({\n path: `/v2/badges/series/${series}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get signatures required for claiming badges\n *\n * @tags BadgeV2\n * @name GetBadgeClaimSignatures\n * @summary Get badge claim signatures\n * @request POST:/v2/badges/signatures\n */\n getBadgeClaimSignatures: (\n data: BadgeClaimSignatureRequest,\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeClaimSignatureResponse,\n WebResultBadgeClaimSignatureResponse\n >({\n path: `/v2/badges/signatures`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get verifiers for badge conditions based on platform and type\n *\n * @tags BadgeV2\n * @name GetBadgeVerifiers\n * @summary Get badge verifiers\n * @request GET:/v2/badges/verifiers\n */\n getBadgeVerifiers: (\n query: {\n /** Platform identifier */\n platform: string;\n /** Condition type */\n type: string;\n },\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeVerifiersResponse,\n WebResultBadgeVerifiersResponse\n >({\n path: `/v2/badges/verifiers`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Get detailed information of a specific badge\n *\n * @tags BadgeV2\n * @name GetBadgeDetail\n * @summary Get badge detail\n * @request GET:/v2/badges/{badgeId}\n */\n getBadgeDetail: (badgeId: string, params: RequestParams = {}) =>\n this.request<WebResultBadgeDetailResponse, WebResultBadgeDetailResponse>({\n path: `/v2/badges/${badgeId}`,\n method: \"GET\",\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Check if a specific badge is claimable for the user\n *\n * @tags BadgeV2\n * @name CheckSingleBadgeClaimable\n * @summary Check single badge claimable status\n * @request POST:/v2/badges/{badgeId}\n */\n checkSingleBadgeClaimable: (\n badgeId: string,\n data: BadgeSingleCheckRequest,\n params: RequestParams = {},\n ) =>\n this.request<\n WebResultBadgeClaimSignatureResponse,\n WebResultBadgeClaimSignatureResponse\n >({\n path: `/v2/badges/${badgeId}`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description anchor batch mint\n *\n * @tags AnchorV2\n * @name BatchMint\n * @summary anchor batch mint\n * @request POST:/v2/batch/mint/{type}\n */\n batchMint: (\n type: string,\n data: BatchMintRequestVO,\n params: RequestParams = {},\n ) =>\n this.request<MintResponse, any>({\n path: `/v2/batch/mint/${type}`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description anchor mint\n *\n * @tags AnchorV2\n * @name Mint\n * @summary anchor mint\n * @request POST:/v2/mint/{type}\n */\n mint: (type: string, data: NFTMintRequestVO, params: RequestParams = {}) =>\n this.request<MintResponse, any>({\n path: `/v2/mint/${type}`,\n method: \"POST\",\n body: data,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n };\n}\n",
|
|
13
|
+
"import {\n Api,\n BadgeClaimSignatureRequest,\n BadgeSingleCheckRequest,\n BatchMintRequestVO,\n MintResponse,\n NFTMintRequestVO,\n RequestParams,\n UserOpHashProcessRequest,\n WebResultBadgeAssetsResponse,\n WebResultBadgeCheckResponse,\n WebResultBadgeClaimSignatureResponse,\n WebResultBadgeClaimableListResponse,\n WebResultBadgeDetailResponse,\n WebResultBadgeSeriesDetailResponse,\n WebResultBadgeSeriesResponse,\n WebResultBadgeVerifiersResponse,\n WebResultTransactionHashProcess,\n WebResultUserOpHashProcess,\n WebResultBadgeCategoryResponse,\n WebResultBadgeCategoryDetailResponse,\n WebResultBadgesCompositeResponse\n} from \"./generated/Api\";\n\nimport { Chain } from \"viem\";\n\n/**\n * Anchor API V2 客户端配置\n */\nexport interface AnchorApiClientV2Config {\n /** API 基础 URL */\n apiBaseUrl: string;\n /** 认证令牌 */\n authToken?: string;\n /** 项目 ID */\n projectId?: string;\n /** 网络配置 */\n network: Chain;\n /** Token 过期回调函数 */\n onTokenExpired?: (error: Error) => void;\n}\n\n/**\n * Anchor API V2 客户端\n * 基于生成的 API 类型和端点,提供完整的 Anchor API 功能\n *\n * 这个客户端使用生成的 API 类型和端点,同时提供\n * 自动 header 注入和配置管理功能。\n */\nexport class AnchorApiClientV2 {\n private generatedApi: Api<unknown>;\n private network: Chain;\n private authToken?: string;\n private projectId?: string;\n private chainId: string;\n private onTokenExpired?: (error: Error) => void;\n\n /**\n * 创建 Anchor API V2 客户端\n * @param config 客户端配置\n */\n constructor(config: AnchorApiClientV2Config) {\n this.network = config.network;\n this.authToken = config.authToken;\n this.projectId = config.projectId;\n this.chainId = config.network.id.toString();\n this.onTokenExpired = config.onTokenExpired;\n\n // 初始化生成的 API\n this.generatedApi = new Api({\n baseUrl: config.apiBaseUrl.endsWith(\"/\")\n ? config.apiBaseUrl.slice(0, -1)\n : config.apiBaseUrl\n });\n }\n\n /**\n * 设置认证令牌\n * @param token 认证令牌\n */\n setAuthToken(token: string): void {\n this.authToken = token;\n }\n\n /**\n * 设置 Token 过期回调\n * @param callback Token 过期回调函数\n */\n setTokenExpiredCallback(callback: (error: Error) => void): void {\n this.onTokenExpired = callback;\n }\n\n /**\n * 设置项目 ID\n * @param projectId 项目 ID\n */\n setProjectId(projectId: string): void {\n this.projectId = projectId;\n }\n\n /**\n * 设置链 ID\n * @param chainId 链 ID\n */\n setChainId(chainId: string): void {\n this.chainId = chainId;\n }\n\n /**\n * 创建请求头\n * @returns 请求头对象\n */\n private createHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\"\n };\n\n // 添加标准化的请求头\n if (this.authToken) {\n headers[\"Authorization\"] = `Bearer ${this.authToken}`;\n headers[\"jwt_token\"] = `${this.authToken}`;\n }\n if (this.projectId) {\n headers[\"X-Project-Id\"] = this.projectId;\n headers[\"saas_id\"] = this.projectId;\n }\n if (this.chainId) {\n headers[\"X-Chain-Id\"] = this.chainId;\n headers[\"chain_id\"] = this.chainId;\n }\n\n return headers;\n }\n\n /**\n * 获取请求参数(包含 headers)\n * @returns 请求参数对象\n */\n private getRequestParams(): RequestParams {\n return {\n headers: this.createHeaders()\n };\n }\n\n /**\n * 处理 API 调用的错误和 token 过期\n * @param apiCall API 调用函数\n * @returns API 调用结果\n */\n private async handleApiCall<T>(apiCall: () => Promise<T>): Promise<T> {\n try {\n const result = await apiCall();\n\n // 检查响应体中的 token 过期信息\n if (this.isTokenExpiredResponse(result)) {\n console.log(\"Token expired: JWT token is invalid or expired\");\n const error = new Error(\n \"Token expired: JWT token is invalid or expired\"\n );\n if (this.onTokenExpired) {\n this.onTokenExpired(error);\n }\n throw error;\n }\n\n return result;\n } catch (error: any) {\n // 检查 HTTP 401 状态码的 token 过期\n if (error?.status === 401) {\n if (this.onTokenExpired) {\n this.onTokenExpired(error);\n }\n }\n throw error;\n }\n }\n\n /**\n * 检查响应是否为 token 过期错误\n * @param response API 响应\n * @returns 是否为 token 过期错误\n */\n private isTokenExpiredResponse(response: any): boolean {\n // 检查响应体中的 token 过期标识\n // 优先检查:success 为 false 且 code 为 9101(标准 token 过期错误码)\n if (response?.success === false && response?.code === \"9101\") {\n return true;\n }\n\n // 检查 msgKey 是否为特定的 JWT 错误\n if (\n response?.success === false &&\n response?.msgKey === \"params.jwt.check.invalid\"\n ) {\n return true;\n }\n\n return false;\n }\n\n // ==================== V2 API Methods ====================\n\n /**\n * 获取徽章验证器\n * @route GET /v2/badges/verifiers\n * @param platform 平台标识符\n * @param type 条件类型\n * @returns 徽章验证器响应\n */\n async getBadgeVerifiers(\n platform: string,\n type: string\n ): Promise<WebResultBadgeVerifiersResponse> {\n return this.handleApiCall(async () => {\n const query = { platform, type };\n const response = await this.generatedApi.v2.getBadgeVerifiers(\n query,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * 获取用户可领取徽章\n * @route GET /v2/badges/claimable\n * @param params 查询参数\n * @param params.series 徽章系列过滤器\n * @param params.limit 每页项目数\n * @param params.nextToken 分页令牌\n * @returns 徽章可领取列表响应\n */\n async getUserClaimableBadges(params?: {\n series?: string;\n tokenIds?: string[];\n limit?: number;\n nextToken?: string;\n }): Promise<WebResultBadgeClaimableListResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getUserClaimableBadges(\n params,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * 获取用户徽章资产\n * @route GET /v2/badges/assets\n * @param params 查询参数\n * @param params.includeClaimable 徽章状态是否包含可领取\n * @param params.strategy 返回策略 BADGE_ALL/BADGE_MAX/BADGE_REWARD\n * @param params.series 徽章系列过滤器\n * @param params.limit 每页项目数\n * @param params.nextToken 分页令牌\n * @returns 徽章资产响应\n */\n async getUserBadgeAssets(params?: {\n includeClaimable?: boolean;\n strategy?: string;\n series?: string[];\n limit?: number;\n nextToken?: string;\n }): Promise<WebResultBadgeAssetsResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getUserBadgeAssets(\n params,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * 获取徽章系列详情\n * @route GET /v2/badges/series/{seriesId}\n * @param seriesId 系列标识符\n * @param params 查询参数\n * @param params.status 状态过滤器\n * @param params.businessType 业务类型过滤器\n * @returns 徽章系列详情响应\n */\n async getBadgeSeriesDetail(\n seriesId: string,\n params?: {\n status?: string;\n businessType?: string;\n tokenIds?: string[];\n }\n ): Promise<WebResultBadgeSeriesDetailResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getBadgeSeriesDetail(\n seriesId,\n params,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * 获取徽章详情\n * @route GET /v2/badges/{badgeId}\n * @param badgeId 徽章标识符\n * @returns 徽章详情响应\n */\n async getBadgeDetail(badgeId: string): Promise<WebResultBadgeDetailResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getBadgeDetail(\n badgeId,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * 检查单个徽章可领取状态\n * @route POST /v2/badges/{badgeId}\n * @param badgeId 徽章标识符\n * @param data 徽章检查请求数据\n * @returns 徽章可领取响应\n */\n async checkSingleBadgeClaimable(\n badgeId: string,\n data: BadgeSingleCheckRequest\n ): Promise<WebResultBadgeClaimSignatureResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.checkSingleBadgeClaimable(\n badgeId,\n data,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * 检查用户可领取徽章\n * @route POST /v2/badges\n * @param data 徽章检查请求\n * @returns 徽章检查响应\n */\n async checkUserClaimableBadges(data: {\n walletType?: \"ALL\" | \"EVM\" | \"SOLANA\";\n groups?: string[];\n [key: string]: any;\n }): Promise<WebResultBadgeCheckResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.checkUserClaimableBadges(\n data,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * @description query badges by conditions\n *\n * @tags BadgeV2\n * @name QueryBadges\n * @summary query badges by conditions\n * @request GET:/v2/badges\n */\n async queryBadges(params: {\n ids?: string[];\n /** query type(COMMON: 根据传入的条件查询, HOTSPOT: 查询公告中配置的badge), 默认: COMMON */\n queryType?: string;\n /** only return imprint info */\n onlyImprint?: boolean;\n /** include progress info, default is false */\n includeProgress?: boolean;\n }): Promise<WebResultBadgesCompositeResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.queryBadges(\n params,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * @description Get detailed information of a specific badge category\n *\n * @tags BadgeV2\n * @name CategoriesDetail\n * @summary Get badge detail by category\n * @request GET:/v2/badges/categories/{category}\n */\n async categoriesDetail(\n category: string\n ): Promise<WebResultBadgeCategoryDetailResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.categoriesDetail(\n category,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * 获取徽章详情\n * @route GET /v2/badges/categories\n * @param params.series 系列名\n * @param params.status 状态过滤器\n * @param params.businessType 业务类型过滤器\n * @returns 徽章详情响应\n */\n async categoriesList(params: {\n series?: string;\n status?: string;\n businessType?: string;\n }): Promise<WebResultBadgeCategoryResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.categoriesList(\n params,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * 获取徽章领取签名\n * @route POST /v2/badges/signatures\n * @param data 徽章领取签名请求\n * @returns 徽章领取签名响应\n */\n async getBadgeClaimSignatures(\n data: BadgeClaimSignatureRequest\n ): Promise<WebResultBadgeClaimSignatureResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getBadgeClaimSignatures(\n data,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * 获取徽章系列列表\n * @route GET /v2/badges/series\n * @param params 查询参数\n * @param params.includeBadges 是否包含徽章\n * @param params.status 状态过滤器\n * @param params.businessType 业务类型过滤器\n * @param params.limit 每页数量\n * @returns 徽章系列响应\n */\n async getBadgeSeries(params?: {\n includeBadges?: boolean;\n status?: string;\n businessType?: string;\n limit?: number;\n }): Promise<WebResultBadgeSeriesResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.getBadgeSeries(\n params,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * Anchor 铸造\n * @route POST /v2/mint/{type}\n * @param type 铸造类型\n * @param data 铸造请求数据\n * @returns 铸造响应\n */\n async mint(type: string, data: NFTMintRequestVO): Promise<MintResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.mint(\n type,\n data,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * Anchor 批量铸造\n * @route POST /v2/batch/mint/{type}\n * @param type 铸造类型\n * @param data 批量铸造请求数据\n * @returns 批量铸造响应\n */\n async batchMint(\n type: string,\n data: BatchMintRequestVO\n ): Promise<MintResponse> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v2.batchMint(\n type,\n data,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n // ==================== Transaction Methods ====================\n\n /**\n * 处理交易哈希(加速交易处理)\n * @route POST /v1/transaction/process/{txHash}\n * @param txHash 交易哈希\n * @returns 交易哈希处理响应\n */\n async transactionHashProcess(\n txHash: string\n ): Promise<WebResultTransactionHashProcess> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v1.transactionHashProcess(\n txHash,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n\n /**\n * 处理用户操作哈希\n * @route POST /v1/transaction/process/userOpHash\n * @param data 用户操作哈希处理请求\n * @returns 用户操作哈希处理响应\n */\n async userOpHashProcess(\n data: UserOpHashProcessRequest\n ): Promise<WebResultUserOpHashProcess> {\n return this.handleApiCall(async () => {\n const response = await this.generatedApi.v1.userOpHashProcess(\n data,\n this.getRequestParams()\n );\n return response.data;\n });\n }\n}\n",
|
|
14
|
+
"import type {\n AnchorSDKConfig,\n PaymentOptions,\n SignedMintRequest,\n} from \"../types\";\nimport React, {\n ReactNode,\n createContext,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { TransactionReceipt, WalletClient } from \"viem\";\n\nimport { AnchorSDK } from \"../index\";\n\n// React context interface\ninterface AnchorReactContextType {\n sdk: AnchorSDK | null;\n loading: boolean;\n error: Error | null;\n initialized: boolean;\n setWalletClient: (walletClient: WalletClient) => void;\n buyBadgeWithETH: (\n customerAddress: string,\n contractAddress: string,\n tokenId: string | number | bigint,\n quantity: string | number | bigint,\n receiptAddress: string,\n options?: PaymentOptions\n ) => Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n >;\n buyBadgeWithERC20: (\n customerAddress: string,\n contractAddress: string,\n tokenId: string | number | bigint,\n quantity: string | number | bigint,\n currency: string,\n receiptAddress: string,\n options?: PaymentOptions\n ) => Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n >;\n buyBadgeWithETHWithSignedRequest: (\n signedRequest: SignedMintRequest,\n receiptAddress: string,\n options?: PaymentOptions\n ) => Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n >;\n buyBadgeWithERC20WithSignedRequest: (\n signedRequest: SignedMintRequest,\n receiptAddress: string,\n options?: PaymentOptions\n ) => Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n >;\n}\n\n// Create React context\nconst AnchorReactContext = createContext<AnchorReactContextType | undefined>(\n undefined\n);\n\n// Provider props interface\ninterface AnchorReactProviderProps {\n children: ReactNode;\n config: AnchorSDKConfig;\n}\n\n/**\n * Anchor React Provider Component\n * Used to provide Anchor SDK instance in React applications\n */\nexport function AnchorReactProvider({\n children,\n config,\n}: AnchorReactProviderProps) {\n const [sdk, setSdk] = useState<AnchorSDK | null>(null);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<Error | null>(null);\n const [initialized, setInitialized] = useState<boolean>(false);\n\n useEffect(() => {\n try {\n const anchorSdk = new AnchorSDK(config);\n setSdk(anchorSdk);\n setInitialized(true);\n setError(null);\n } catch (err) {\n setError(\n err instanceof Error ? err : new Error(\"初始化 Anchor SDK 失败\")\n );\n } finally {\n setLoading(false);\n }\n }, [\n config.publicClient,\n config.walletClient,\n config.network.id,\n config.apiBaseUrl,\n config.authToken,\n config.projectId,\n config.env,\n config.anchorERC1155Address,\n config.anchorPayAddress,\n ]);\n\n // 使用 ETH 购买徽章\n const buyBadgeWithETH = async (\n customerAddress: string,\n contractAddress: string,\n tokenId: string | number | bigint,\n quantity: string | number | bigint = 1,\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n > => {\n if (!sdk) {\n throw new Error(\"Anchor SDK not initialized\");\n }\n return await sdk.buyBadgeWithETH(\n customerAddress,\n contractAddress,\n tokenId,\n quantity,\n receiptAddress,\n options\n );\n };\n\n // 使用 ERC20 购买徽章\n const buyBadgeWithERC20 = async (\n customerAddress: string,\n contractAddress: string,\n tokenId: string | number | bigint,\n quantity: string | number | bigint = 1,\n currency: string,\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n > => {\n if (!sdk) {\n throw new Error(\"Anchor SDK not initialized\");\n }\n return await sdk.buyBadgeWithERC20(\n customerAddress,\n contractAddress,\n tokenId,\n quantity,\n currency,\n receiptAddress,\n options\n );\n };\n\n // 使用 ETH 和签名请求购买徽章\n const buyBadgeWithETHWithSignedRequest = async (\n signedRequest: SignedMintRequest,\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n > => {\n if (!sdk) {\n throw new Error(\"Anchor SDK not initialized\");\n }\n return await sdk.buyBadgeWithETHWithSignedRequest(\n signedRequest,\n receiptAddress,\n options\n );\n };\n\n // 使用 ERC20 和签名请求购买徽章\n const buyBadgeWithERC20WithSignedRequest = async (\n signedRequest: SignedMintRequest,\n receiptAddress: string,\n options?: PaymentOptions\n ): Promise<\n TransactionReceipt | { to: string; data: string; value: bigint }\n > => {\n if (!sdk) {\n throw new Error(\"Anchor SDK not initialized\");\n }\n return await sdk.buyBadgeWithERC20WithSignedRequest(\n signedRequest,\n receiptAddress,\n options\n );\n };\n\n // 设置钱包客户端\n const setWalletClient = (walletClient: WalletClient): void => {\n if (!sdk) {\n throw new Error(\"Anchor SDK not initialized\");\n }\n sdk.setWalletClient(walletClient);\n // 更新 SDK 实例后重新设置状态,确保组件重新渲染\n setSdk(sdk);\n };\n\n const value: AnchorReactContextType = {\n sdk,\n loading,\n error,\n initialized,\n setWalletClient,\n buyBadgeWithETH,\n buyBadgeWithERC20,\n buyBadgeWithETHWithSignedRequest,\n buyBadgeWithERC20WithSignedRequest,\n };\n\n return (\n <AnchorReactContext.Provider value={value}>\n {children}\n </AnchorReactContext.Provider>\n );\n}\n\n/**\n * Custom Hook for using Anchor SDK\n * @returns Anchor React context\n */\nexport const useAnchorSDK = (): AnchorReactContextType => {\n const context = useContext(AnchorReactContext);\n if (context === undefined) {\n throw new Error(\"useAnchorSDK must be used inside AnchorReactProvider\");\n }\n return context;\n};\n\n/**\n * Custom Hook for using Anchor badges\n * @returns Badge related functions\n */\nexport const useAnchorBadge = () => {\n const { sdk, loading, error, initialized } = useAnchorSDK();\n\n // Get badges that user can claim\n const getClaimableBadges = async () => {\n if (!sdk?.anchorApi) {\n throw new Error(\"Anchor API client not initialized\");\n }\n return await sdk.anchorApi.getUserBadgeAssets({\n includeClaimable: true,\n strategy: \"BADGE_ALL\",\n });\n };\n\n // Get badges that user has claimed\n const getClaimedBadges = async () => {\n if (!sdk?.anchorApi) {\n throw new Error(\"Anchor API client not initialized\");\n }\n return await sdk.anchorApi.getUserBadgeAssets({\n includeClaimable: false,\n strategy: \"BADGE_ALL\",\n });\n };\n\n // Get NFT series\n const getNftSeries = async () => {\n if (!sdk?.anchorApi) {\n throw new Error(\"Anchor API client not initialized\");\n }\n return await sdk.anchorApi.getBadgeSeries({\n includeBadges: true,\n limit: 100,\n });\n };\n\n // Get NFT series details\n const getNftSeriesById = async (series: string) => {\n if (!sdk?.anchorApi) {\n throw new Error(\"Anchor API client not initialized\");\n }\n return await sdk.anchorApi.getBadgeSeriesDetail(series, {\n status: \"active\",\n });\n };\n\n return {\n loading,\n error,\n initialized,\n getClaimableBadges,\n getClaimedBadges,\n getNftSeries,\n getNftSeriesById,\n };\n};\n"
|
|
14
15
|
],
|
|
15
|
-
"mappings": "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EACA,CAAE,KAAM,OAAQ,KAAM,QAAS,aAAc,OAAQ,CACvD,EACA,QAAS,CAAC,EACV,gBAAiB,SACnB,EACA,CACE,KAAM,WACN,KAAM,MACN,OAAQ,CAAC,CAAE,KAAM,UAAW,KAAM,UAAW,aAAc,SAAU,CAAC,EACtE,QAAS,CAAC,CAAE,KAAM,GAAI,KAAM,SAAU,aAAc,QAAS,CAAC,EAC9D,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,UACN,OAAQ,CAAC,EACT,QAAS,CAAC,CAAE,KAAM,GAAI,KAAM,SAAU,aAAc,QAAS,CAAC,EAC9D,gBAAiB,MACnB,EACA,CACE,KAAM,QACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,OACN,QAAS,GACT,aAAc,MAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,eACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,kBACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,WACN,QAAS,GACT,aAAc,UAChB,EACA,CACE,KAAM,YACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,WACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,WACN,QAAS,GACT,aAAc,UAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,sBACN,OAAQ,CAAC,EACT,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,SACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,oBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,eACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,gBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,MACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,WACN,OAAQ,CACN,CACE,KAAM,iBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CAAE,KAAM,QAAS,KAAM,+BAAgC,OAAQ,CAAC,CAAE,EAClE,CACE,KAAM,QACN,KAAM,mCACN,OAAQ,CACN,CAAE,KAAM,UAAW,KAAM,UAAW,aAAc,SAAU,EAC5D,CAAE,KAAM,aAAc,KAAM,UAAW,aAAc,SAAU,CACjE,CACF,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CAAC,CAAE,KAAM,SAAU,KAAM,UAAW,aAAc,SAAU,CAAC,CACvE,EACA,CAAE,KAAM,QAAS,KAAM,gBAAiB,OAAQ,CAAC,CAAE,EACnD,CAAE,KAAM,QAAS,KAAM,sBAAuB,OAAQ,CAAC,CAAE,EACzD,CAAE,KAAM,QAAS,KAAM,wBAAyB,OAAQ,CAAC,CAAE,EAC3D,CACE,KAAM,QACN,KAAM,8BACN,OAAQ,CAAC,CAAE,KAAM,SAAU,KAAM,UAAW,aAAc,SAAU,CAAC,CACvE,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CAAC,CAAE,KAAM,IAAK,KAAM,UAAW,aAAc,SAAU,CAAC,CAClE,EACA,CACE,KAAM,QACN,KAAM,6BACN,OAAQ,CACN,CAAE,KAAM,SAAU,KAAM,UAAW,aAAc,SAAU,EAC3D,CAAE,KAAM,UAAW,KAAM,UAAW,aAAc,SAAU,EAC5D,CAAE,KAAM,SAAU,KAAM,UAAW,aAAc,SAAU,EAC3D,CAAE,KAAM,UAAW,KAAM,UAAW,aAAc,SAAU,CAC9D,CACF,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CAAC,CAAE,KAAM,WAAY,KAAM,UAAW,aAAc,SAAU,CAAC,CACzE,EACA,CACE,KAAM,QACN,KAAM,4BACN,OAAQ,CACN,CAAE,KAAM,YAAa,KAAM,UAAW,aAAc,SAAU,EAC9D,CAAE,KAAM,eAAgB,KAAM,UAAW,aAAc,SAAU,CACnE,CACF,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CAAC,CAAE,KAAM,WAAY,KAAM,UAAW,aAAc,SAAU,CAAC,CACzE,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CAAC,CAAE,KAAM,WAAY,KAAM,UAAW,aAAc,SAAU,CAAC,CACzE,EACA,CACE,KAAM,QACN,KAAM,uBACN,OAAQ,CAAC,CAAE,KAAM,SAAU,KAAM,UAAW,aAAc,SAAU,CAAC,CACvE,EACA,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CACN,CAAE,KAAM,WAAY,KAAM,UAAW,aAAc,SAAU,EAC7D,CAAE,KAAM,QAAS,KAAM,UAAW,aAAc,SAAU,CAC5D,CACF,EACA,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CACN,CACE,KAAM,iBACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CAAE,KAAM,QAAS,KAAM,oBAAqB,OAAQ,CAAC,CAAE,EACvD,CAAE,KAAM,QAAS,KAAM,aAAc,OAAQ,CAAC,CAAE,EAChD,CAAE,KAAM,QAAS,KAAM,aAAc,OAAQ,CAAC,CAAE,EAChD,CAAE,KAAM,QAAS,KAAM,iBAAkB,OAAQ,CAAC,CAAE,EACpD,CAAE,KAAM,QAAS,KAAM,wBAAyB,OAAQ,CAAC,CAAE,EAC3D,CAAE,KAAM,QAAS,KAAM,mBAAoB,OAAQ,CAAC,CAAE,EACtD,CAAE,KAAM,QAAS,KAAM,iBAAkB,OAAQ,CAAC,CAAE,EACpD,CAAE,KAAM,QAAS,KAAM,kBAAmB,OAAQ,CAAC,CAAE,EACrD,CAAE,KAAM,QAAS,KAAM,kBAAmB,OAAQ,CAAC,CAAE,EACrD,CAAE,KAAM,QAAS,KAAM,mBAAoB,OAAQ,CAAC,CAAE,EACtD,CAAE,KAAM,QAAS,KAAM,iBAAkB,OAAQ,CAAC,CAAE,EACpD,CAAE,KAAM,QAAS,KAAM,oBAAqB,OAAQ,CAAC,CAAE,EACvD,CAAE,KAAM,QAAS,KAAM,uBAAwB,OAAQ,CAAC,CAAE,EAC1D,CAAE,KAAM,QAAS,KAAM,kBAAmB,OAAQ,CAAC,CAAE,EACrD,CAAE,KAAM,QAAS,KAAM,qBAAsB,OAAQ,CAAC,CAAE,EACxD,CAAE,KAAM,QAAS,KAAM,kBAAmB,OAAQ,CAAC,CAAE,EACrD,CAAE,KAAM,QAAS,KAAM,oBAAqB,OAAQ,CAAC,CAAE,EACvD,CAAE,KAAM,QAAS,KAAM,qBAAsB,OAAQ,CAAC,CAAE,EACxD,CAAE,KAAM,QAAS,KAAM,+BAAgC,OAAQ,CAAC,CAAE,EAClE,CAAE,KAAM,QAAS,KAAM,mBAAoB,OAAQ,CAAC,CAAE,EACtD,CAAE,KAAM,QAAS,KAAM,8BAA+B,OAAQ,CAAC,CAAE,EACjE,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CAAC,CAAE,KAAM,OAAQ,KAAM,UAAW,aAAc,SAAU,CAAC,CACrE,EACA,CAAE,KAAM,QAAS,KAAM,eAAgB,OAAQ,CAAC,CAAE,EAClD,CAAE,KAAM,QAAS,KAAM,eAAgB,OAAQ,CAAC,CAAE,CACpD,EC1lCA,mBAAS,eAA+B,eAGxC,IAAM,EAAO,CACX,CACE,KAAM,cACN,OAAQ,CAAC,EACT,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,qBACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,4BACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,YACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,MACN,KAAM,YACN,aAAc,WAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,YACN,aAAc,WAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,YACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,aAAc,WAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,0BACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,iBACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,aACN,KAAM,WACN,aAAc,UAChB,EACA,CACE,KAAM,eACN,KAAM,YACN,aAAc,WAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,MACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,aACN,KAAM,WACN,aAAc,UAChB,EACA,CACE,KAAM,eACN,KAAM,YACN,aAAc,WAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,eACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,SACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,OACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,UACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,oBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,aACN,KAAM,YACN,aAAc,WAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,SACN,OAAQ,CACN,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,eACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,uBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,YACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,UACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,aACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,UACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,WACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,WACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,QACN,aAAc,qCACd,WAAY,CACV,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,yBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,uBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,QACN,aAAc,OAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,SACnB,EACA,CACE,KAAM,WACN,KAAM,YACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,oBACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,QACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,qBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,gBACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,eACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,qBACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,wBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,aACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,wBACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,OACN,KAAM,QACN,aAAc,OAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,QACN,aAAc,OAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,eACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,aACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,UACN,OAAQ,CACN,CACE,KAAM,YACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,aACN,KAAM,WACN,aAAc,UAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,QACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,UACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,cACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,SACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,gBACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,QACN,aAAc,OAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,cACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,YACN,OAAQ,CACN,CACE,KAAM,oBACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,oBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,QACN,aAAc,OAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,SACnB,EACA,CACE,KAAM,WACN,KAAM,MACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,UACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,QACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,OACN,QAAS,GACT,aAAc,MAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,eACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,kBACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,WACN,QAAS,GACT,aAAc,UAChB,EACA,CACE,KAAM,YACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,WACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,WACN,QAAS,GACT,aAAc,UAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,sBACN,OAAQ,CAAC,EACT,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,SACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,oBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,eACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,gBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,MACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,WACN,OAAQ,CACN,CACE,KAAM,iBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,mCACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,aACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,gBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,sBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,wBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,8BACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,IACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,6BACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,4BACN,OAAQ,CACN,CACE,KAAM,YACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,eACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,uBACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CACN,CACE,KAAM,iBACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,oBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,aACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,aACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,wBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,kBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,kBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,oBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,uBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,kBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,qBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,kBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,oBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,qBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,8BACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CACN,CACE,KAAM,OACN,K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,UACR,EACA,CACE,OAAQ,CACN,CACE,KAAM,UACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,UACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,KAAM,YACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,WACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,KAAM,SACN,KAAM,SACR,EACA,CACE,KAAM,YACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,eACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,aACjB,KAAM,UACR,CACF,EAKa,EAAuD,CAElE,IAAK,CACH,WAAY,+BACZ,UAAW,EAER,EAAO,IAAK,CACX,UAAW,6CACX,cAAe,4CACjB,GACC,EAAY,IAAK,CAChB,UAAW,6CACX,cAAe,4CACjB,GACC,EAAiB,IAAK,CACrB,UAAW,6CACX,cAAe,4CACjB,GACC,EAAgB,IAAK,CACpB,UAAW,6CACX,cAAe,4CACjB,GACC,QAAS,CACR,cAAe,4CACjB,CACF,CACF,EAGA,KAAM,CACJ,WAAY,gCACZ,UAAW,EACR,EAAO,IAAK,CACX,UAAW,6CACX,cAAe,4CACjB,GACC,EAAY,IAAK,CAChB,UAAW,6CACX,cAAe,4CACjB,GACC,EAAiB,IAAK,CACrB,UAAW,6CACX,cAAe,4CACjB,GACC,EAAgB,IAAK,CACpB,UAAW,6CACX,cAAe,4CACjB,GACC,QAAS,CACR,cAAe,4CACjB,CACF,CACF,EAGA,KAAM,CACJ,WAAY,kCACZ,UAAW,EAER,GAAS,IAAK,CACb,UAAW,6CACX,cAAe,4CACjB,GAEC,GAAK,IAAK,CACT,UAAW,4CACb,GAEC,GAAM,IAAK,CACV,UAAW,6CACX,cAAe,4CACjB,GAEC,GAAU,IAAK,CACd,UAAW,6CACX,cAAe,6CACjB,CACF,CACF,CACF,EAKa,GAAmB,CAE9B,eACE,oEACJ,EAEa,EACX,6CAKW,EAAqB,6CAKrB,EAAiB,CAC5B,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,aAAc,QACd,KAAM,WACN,KAAM,OACR,CACF,EACA,aAAc,2BACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,CACF,EACA,gBAAiB,UACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,aAAc,OACd,KAAM,eACN,KAAM,MACR,EACA,CACE,aAAc,QACd,KAAM,WACN,KAAM,OACR,CACF,EACA,aAAc,4BACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,aACN,QAAS,CACP,CACE,WAAY,CACV,CACE,aAAc,OACd,KAAM,UACN,KAAM,MACR,EACA,CACE,aAAc,QACd,KAAM,aACN,KAAM,OACR,CACF,EACA,aAAc,6BACd,KAAM,aACN,KAAM,SACR,CACF,EACA,gBAAiB,UACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,aAAc,OACd,KAAM,eACN,KAAM,MACR,EACA,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,aAAc,QACd,KAAM,WACN,KAAM,OACR,CACF,EACA,aAAc,iCACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,kBACN,QAAS,CACP,CACE,WAAY,CACV,CACE,aAAc,OACd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",
|
|
16
|
-
"debugId": "
|
|
16
|
+
"mappings": "AAAA,6BACE,yBACA,WACA,aACA,wBAGA,eACA,eACA,iBACA,YACA,gBACA,cCZF,6BAQE,aCRF,mBACE,sBACA,UACA,kBACA,eACA,uBACA,WACA,aACA,oBAQK,IAAK,IAAL,CAAK,IAAL,CACL,MAAM,MACN,OAAO,OACP,OAAO,SAHG,SASL,IAAM,EAAY,CACvB,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,WACN,QAAS,CAAC,CAAE,KAAM,GAAI,KAAM,OAAQ,CAAC,EACrC,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,KAAM,QACN,KAAM,SACR,EACA,CACE,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,KAAM,UACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,UACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,KAAM,YACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,WACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,KAAM,SACN,KAAM,SACR,EACA,CACE,KAAM,YACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,eACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,aACjB,KAAM,UACR,CACF,EAKa,EAAuD,CAElE,IAAK,CACH,WAAY,+BACZ,UAAW,EAER,EAAO,IAAK,CACX,UAAW,6CACX,cAAe,4CACjB,GACC,EAAY,IAAK,CAChB,UAAW,6CACX,cAAe,4CACjB,GACC,EAAiB,IAAK,CACrB,UAAW,6CACX,cAAe,4CACjB,GACC,EAAgB,IAAK,CACpB,UAAW,6CACX,cAAe,4CACjB,GACC,QAAS,CACR,cAAe,4CACjB,CACF,CACF,EAGA,KAAM,CACJ,WAAY,gCACZ,UAAW,EACR,EAAO,IAAK,CACX,UAAW,6CACX,cAAe,4CACjB,GACC,EAAY,IAAK,CAChB,UAAW,6CACX,cAAe,4CACjB,GACC,EAAiB,IAAK,CACrB,UAAW,6CACX,cAAe,4CACjB,GACC,EAAgB,IAAK,CACpB,UAAW,6CACX,cAAe,4CACjB,GACC,QAAS,CACR,cAAe,4CACjB,CACF,CACF,EAGA,KAAM,CACJ,WAAY,kCACZ,UAAW,EAER,GAAS,IAAK,CACb,UAAW,6CACX,cAAe,4CACjB,GAEC,GAAK,IAAK,CACT,UAAW,4CACb,GAEC,GAAM,IAAK,CACV,UAAW,6CACX,cAAe,4CACjB,GAEC,GAAU,IAAK,CACd,UAAW,6CACX,cAAe,6CACjB,CACF,CACF,CACF,EAKa,GAAmB,CAE9B,eACE,oEACJ,EAEa,EACX,6CAKW,EAAqB,6CAKrB,EAAiB,CAC5B,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,aAAc,QACd,KAAM,WACN,KAAM,OACR,CACF,EACA,aAAc,2BACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,CACF,EACA,gBAAiB,UACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,aAAc,OACd,KAAM,eACN,KAAM,MACR,EACA,CACE,aAAc,QACd,KAAM,WACN,KAAM,OACR,CACF,EACA,aAAc,4BACd,KAAM,QACN,KAAM,SACR,CACF,EA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CE,KAAM,WACN,KAAM,OACN,QAAS,GACT,aAAc,MAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,eACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,kBACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,WACN,QAAS,GACT,aAAc,UAChB,EACA,CACE,KAAM,YACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,WACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,WACN,QAAS,GACT,aAAc,UAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,sBACN,OAAQ,CAAC,EACT,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,SACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,oBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,eACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,gBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,MACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,WACN,OAAQ,CACN,CACE,K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CA,CACE,KAAM,WACN,KAAM,YACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,aAAc,WAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,0BACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,iBACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,aACN,KAAM,WACN,aAAc,UAChB,EACA,CACE,KAAM,eACN,KAAM,YACN,aAAc,WAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,MACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,aACN,KAAM,WACN,aAAc,UAChB,EACA,CACE,KAAM,eACN,KAAM,YACN,aAAc,WAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,eACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,SACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,OACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,UACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,oBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,aACN,KAAM,YACN,aAAc,WAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,SACN,OAAQ,CACN,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,eACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,uBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,YACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,UACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,aACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,UACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,WACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,WACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,QACN,aAAc,qCACd,WAAY,CACV,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,yBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,uBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,QACN,aAAc,OAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,SACnB,EACA,CACE,KAAM,WACN,KAAM,YACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,OACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,oBACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,QACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,qBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,gBACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,eACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,qBACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,wBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,aACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,wBACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,OACN,KAAM,QACN,aAAc,OAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,QACN,aAAc,OAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,eACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,aACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,UACN,OAAQ,CACN,CACE,KAAM,YACN,KAAM,YACN,aAAc,WAChB,EACA,CACE,KAAM,aACN,KAAM,WACN,aAAc,UAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,QACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,SACN,aAAc,QAChB,EACA,CACE,KAAM,UACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,cACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACN,aAAc,MAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,SACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,gBACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,QACN,aAAc,OAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,cACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,KACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,YACN,OAAQ,CACN,CACE,KAAM,oBACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,YACnB,EACA,CACE,KAAM,WACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,oBACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,QACN,aAAc,OAChB,CACF,EACA,QAAS,CAAC,EACV,gBAAiB,SACnB,EACA,CACE,KAAM,WACN,KAAM,MACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,EACA,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,WACN,KAAM,UACN,OAAQ,CAAC,EACT,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACN,aAAc,QAChB,CACF,EACA,gBAAiB,MACnB,EACA,CACE,KAAM,QACN,KAAM,oBACN,OAAQ,CACN,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,OACN,QAAS,GACT,aAAc,MAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,eACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,kBACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,WACN,QAAS,GACT,aAAc,UAChB,EACA,CACE,KAAM,YACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,WACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,YACN,KAAM,WACN,QAAS,GACT,aAAc,UAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,sBACN,OAAQ,CAAC,EACT,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,SACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,YACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,oBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,eACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,cACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,gBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,MACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,EACA,CACE,KAAM,SACN,KAAM,YACN,QAAS,GACT,aAAc,WAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,OACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,MACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,SACN,QAAS,GACT,aAAc,QAChB,EACA,CACE,KAAM,KACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,WACN,OAAQ,CACN,CACE,KAAM,iBACN,KAAM,UACN,QAAS,GACT,aAAc,SAChB,CACF,EACA,UAAW,EACb,EACA,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,mCACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,aACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,gBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,sBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,wBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,8BACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,IACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,6BACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,UACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,4BACN,OAAQ,CACN,CACE,KAAM,YACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,eACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,yBACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,uBACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CACN,CACE,KAAM,WACN,KAAM,UACN,aAAc,SAChB,EACA,CACE,KAAM,QACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,+BACN,OAAQ,CACN,CACE,KAAM,iBACN,KAAM,UACN,aAAc,SAChB,CACF,CACF,EACA,CACE,KAAM,QACN,KAAM,oBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,aACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,aACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,wBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,mBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,iBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,kBACN,OAAQ,CAAC,CACX,EACA,CACE,KAAM,QACN,KAAM,kBACN,OAAQ,CAAC,CACX,EACA,CAC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",
|
|
17
|
+
"debugId": "1FB1286326A04C8E64756E2164756E21",
|
|
17
18
|
"names": []
|
|
18
19
|
}
|