@aastar/sdk 0.20.8 → 0.21.0

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.
Files changed (144) hide show
  1. package/dist/BaseClient-CkBhQ1ou.d.cts +88 -0
  2. package/dist/UserClient-BDGP37PK.js +6 -0
  3. package/dist/{UserClient-AIIHB54I.js.map → UserClient-BDGP37PK.js.map} +1 -1
  4. package/dist/UserClient-FOAOBLGK.cjs +15 -0
  5. package/dist/UserClient-FOAOBLGK.cjs.map +1 -0
  6. package/dist/account.cjs +31 -0
  7. package/dist/account.cjs.map +1 -0
  8. package/dist/account.d.cts +48 -0
  9. package/dist/account.js +3 -3
  10. package/dist/admin.cjs +15 -0
  11. package/dist/admin.cjs.map +1 -0
  12. package/dist/admin.d.cts +62 -0
  13. package/dist/admin.js +3 -3
  14. package/dist/airaccount.cjs +452 -0
  15. package/dist/airaccount.cjs.map +1 -0
  16. package/dist/airaccount.d.cts +4 -0
  17. package/dist/airaccount.js +3 -3
  18. package/dist/channel-CkRRbzT8.d.cts +77 -0
  19. package/dist/channel.cjs +27 -0
  20. package/dist/channel.cjs.map +1 -0
  21. package/dist/channel.d.cts +64 -0
  22. package/dist/channel.js +3 -3
  23. package/dist/chunk-3HZEIFBW.cjs +118 -0
  24. package/dist/chunk-3HZEIFBW.cjs.map +1 -0
  25. package/dist/{chunk-7ARJ3OSU.js → chunk-57XLR2NT.js} +3 -3
  26. package/dist/{chunk-7ARJ3OSU.js.map → chunk-57XLR2NT.js.map} +1 -1
  27. package/dist/chunk-5JFYTJOE.cjs +448 -0
  28. package/dist/chunk-5JFYTJOE.cjs.map +1 -0
  29. package/dist/{chunk-KDH3UPKD.js → chunk-5NKU5NT5.js} +8 -8
  30. package/dist/{chunk-KDH3UPKD.js.map → chunk-5NKU5NT5.js.map} +1 -1
  31. package/dist/chunk-63JM67L7.cjs +435 -0
  32. package/dist/chunk-63JM67L7.cjs.map +1 -0
  33. package/dist/{chunk-IC3G6YM2.js → chunk-6OWZOTE7.js} +113 -9
  34. package/dist/chunk-6OWZOTE7.js.map +1 -0
  35. package/dist/chunk-CIEYY3A6.cjs +43259 -0
  36. package/dist/chunk-CIEYY3A6.cjs.map +1 -0
  37. package/dist/chunk-DEUBKZH5.cjs +421 -0
  38. package/dist/chunk-DEUBKZH5.cjs.map +1 -0
  39. package/dist/{chunk-TENYCMJ3.js → chunk-DF4WVR2H.js} +9 -9
  40. package/dist/{chunk-TENYCMJ3.js.map → chunk-DF4WVR2H.js.map} +1 -1
  41. package/dist/{chunk-BN5WY5GM.js → chunk-DQBKE4ND.js} +4 -4
  42. package/dist/{chunk-BN5WY5GM.js.map → chunk-DQBKE4ND.js.map} +1 -1
  43. package/dist/{chunk-4EZD7LPE.js → chunk-E4CQFW75.js} +3 -3
  44. package/dist/{chunk-4EZD7LPE.js.map → chunk-E4CQFW75.js.map} +1 -1
  45. package/dist/{chunk-LXWIPTPX.js → chunk-ENSMYCU6.js} +3 -3
  46. package/dist/{chunk-LXWIPTPX.js.map → chunk-ENSMYCU6.js.map} +1 -1
  47. package/dist/{chunk-FJ7XECC5.js → chunk-EY2AJTGV.js} +3 -3
  48. package/dist/{chunk-FJ7XECC5.js.map → chunk-EY2AJTGV.js.map} +1 -1
  49. package/dist/chunk-GAMSWXWI.cjs +1168 -0
  50. package/dist/chunk-GAMSWXWI.cjs.map +1 -0
  51. package/dist/chunk-IJN776TA.cjs +585 -0
  52. package/dist/chunk-IJN776TA.cjs.map +1 -0
  53. package/dist/{chunk-PKCHRXFR.js → chunk-KZERVPUR.js} +3 -3
  54. package/dist/{chunk-PKCHRXFR.js.map → chunk-KZERVPUR.js.map} +1 -1
  55. package/dist/{chunk-6QYXGMCR.js → chunk-M5WFKETT.js} +833 -47
  56. package/dist/chunk-M5WFKETT.js.map +1 -0
  57. package/dist/chunk-M7HXR7G5.cjs +128 -0
  58. package/dist/chunk-M7HXR7G5.cjs.map +1 -0
  59. package/dist/{chunk-PAABYXS6.js → chunk-MCALA6WM.js} +6 -6
  60. package/dist/{chunk-PAABYXS6.js.map → chunk-MCALA6WM.js.map} +1 -1
  61. package/dist/chunk-MXJEULSE.cjs +396 -0
  62. package/dist/chunk-MXJEULSE.cjs.map +1 -0
  63. package/dist/chunk-OVNOSAL3.cjs +4797 -0
  64. package/dist/chunk-OVNOSAL3.cjs.map +1 -0
  65. package/dist/chunk-Q7SFCCGT.cjs +11 -0
  66. package/dist/chunk-Q7SFCCGT.cjs.map +1 -0
  67. package/dist/{chunk-MVEWJIPY.js → chunk-RXPSL33E.js} +3 -3
  68. package/dist/{chunk-MVEWJIPY.js.map → chunk-RXPSL33E.js.map} +1 -1
  69. package/dist/{chunk-G3UJC4EL.js → chunk-UCLK6LTB.js} +39 -36
  70. package/dist/chunk-UCLK6LTB.js.map +1 -0
  71. package/dist/chunk-WR4OZUXR.cjs +115 -0
  72. package/dist/chunk-WR4OZUXR.cjs.map +1 -0
  73. package/dist/chunk-XQROKLZI.cjs +4521 -0
  74. package/dist/chunk-XQROKLZI.cjs.map +1 -0
  75. package/dist/chunk-Y4EJX7UA.cjs +228 -0
  76. package/dist/chunk-Y4EJX7UA.cjs.map +1 -0
  77. package/dist/chunk-Z4GZ6DQA.cjs +108 -0
  78. package/dist/chunk-Z4GZ6DQA.cjs.map +1 -0
  79. package/dist/contract-addresses-RABD77VP.cjs +49 -0
  80. package/dist/contract-addresses-RABD77VP.cjs.map +1 -0
  81. package/dist/{contract-addresses-N3TOL2WL.js → contract-addresses-TVXSRQ7I.js} +3 -3
  82. package/dist/{contract-addresses-N3TOL2WL.js.map → contract-addresses-TVXSRQ7I.js.map} +1 -1
  83. package/dist/core.cjs +898 -0
  84. package/dist/core.cjs.map +1 -0
  85. package/dist/core.d.cts +7048 -0
  86. package/dist/core.d.ts +130 -12
  87. package/dist/core.js +2 -2
  88. package/dist/dapp.cjs +289 -0
  89. package/dist/dapp.cjs.map +1 -0
  90. package/dist/dapp.d.cts +127 -0
  91. package/dist/dapp.js +3 -3
  92. package/dist/doc-types-471vSmPO.d.cts +16 -0
  93. package/dist/enduser.cjs +24 -0
  94. package/dist/enduser.cjs.map +1 -0
  95. package/dist/enduser.d.cts +261 -0
  96. package/dist/enduser.js +4 -4
  97. package/dist/identity.cjs +23 -0
  98. package/dist/identity.cjs.map +1 -0
  99. package/dist/identity.d.cts +81 -0
  100. package/dist/identity.js +3 -3
  101. package/dist/index-B6SfEQxo.d.cts +47 -0
  102. package/dist/index.cjs +2818 -0
  103. package/dist/index.cjs.map +1 -0
  104. package/dist/index.d.cts +656 -0
  105. package/dist/index.d.ts +1 -1
  106. package/dist/index.js +17 -17
  107. package/dist/kms.cjs +452 -0
  108. package/dist/kms.cjs.map +1 -0
  109. package/dist/kms.d.cts +3104 -0
  110. package/dist/kms.d.ts +62 -12
  111. package/dist/kms.js +3 -3
  112. package/dist/lib-FE4GR7TO.cjs +1865 -0
  113. package/dist/lib-FE4GR7TO.cjs.map +1 -0
  114. package/dist/operator.cjs +27 -0
  115. package/dist/operator.cjs.map +1 -0
  116. package/dist/operator.d.cts +164 -0
  117. package/dist/operator.js +3 -3
  118. package/dist/paymaster.cjs +63 -0
  119. package/dist/paymaster.cjs.map +1 -0
  120. package/dist/paymaster.d.cts +312 -0
  121. package/dist/paymaster.js +3 -3
  122. package/dist/src-CUHI6G6W.cjs +898 -0
  123. package/dist/src-CUHI6G6W.cjs.map +1 -0
  124. package/dist/src-KHCWIS4Q.cjs +63 -0
  125. package/dist/src-KHCWIS4Q.cjs.map +1 -0
  126. package/dist/{src-X5MIV3EB.js → src-RSN4U2T2.js} +5 -5
  127. package/dist/src-RSN4U2T2.js.map +1 -0
  128. package/dist/{src-L5SI5WNB.js → src-XCV6BTSV.js} +4 -4
  129. package/dist/{src-X5MIV3EB.js.map → src-XCV6BTSV.js.map} +1 -1
  130. package/dist/tier-router-DeeVg69O.d.cts +370 -0
  131. package/dist/tokens.cjs +15 -0
  132. package/dist/tokens.cjs.map +1 -0
  133. package/dist/tokens.d.cts +64 -0
  134. package/dist/tokens.js +3 -3
  135. package/dist/x402.cjs +103 -0
  136. package/dist/x402.cjs.map +1 -0
  137. package/dist/x402.d.cts +373 -0
  138. package/dist/x402.js +3 -3
  139. package/package.json +116 -32
  140. package/dist/UserClient-AIIHB54I.js +0 -6
  141. package/dist/chunk-6QYXGMCR.js.map +0 -1
  142. package/dist/chunk-G3UJC4EL.js.map +0 -1
  143. package/dist/chunk-IC3G6YM2.js.map +0 -1
  144. package/dist/src-L5SI5WNB.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../enduser/src/CommunityClient.ts","../../enduser/src/UserLifecycle.ts"],"names":["stakeAmount","parseAbiParameters","parseEther"],"mappings":"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","file":"chunk-TENYCMJ3.js","sourcesContent":["import { type Address, type Hash, type Hex, parseEther, encodeAbiParameters, parseAbiParameters } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions } from '@aastar/core';\nimport { registryActions, sbtActions, xPNTsFactoryActions, reputationActions, tokenActions } from '@aastar/core';\n\nexport interface CommunityClientConfig extends ClientConfig {\n sbtAddress?: Address;\n factoryAddress?: Address;\n reputationAddress?: Address;\n}\n\nexport interface CreateCommunityParams {\n name: string;\n tokenSymbol: string;\n ensName?: string;\n description?: string;\n}\n\nexport interface CommunityInfo {\n address: Address; // Community ID (hash) usually, but here likely the SBT/profile? No, Community in Registry is bytes32 ID.\n // Wait, Registry defines Community as a Role (ROLE_COMMUNITY).\n // The \"Community\" entity usually implies a collection of contracts (Token, maybe Paymaster).\n}\n\n/**\n * Client for Community Managers (`ROLE_COMMUNITY`)\n */\nexport class CommunityClient extends BaseClient {\n public sbtAddress?: Address;\n public factoryAddress?: Address;\n public reputationAddress?: Address;\n\n constructor(config: CommunityClientConfig) {\n super(config);\n this.sbtAddress = config.sbtAddress;\n this.factoryAddress = config.factoryAddress;\n this.reputationAddress = config.reputationAddress;\n }\n\n // ========================================\n // 1. 社区创建与配置\n // ========================================\n\n /**\n * Create a new Community Token (xPNTs) and register it.\n * Note: In the current architecture, creating a community often involves:\n * 1. Registering the ROLE_COMMUNITY on Registry (if not exists) -> usually manual or self-register\n * 2. Deploying a Token (xPNTs) via Factory\n * 3. Linking the Token to the Community in Registry\n */\n async createCommunityToken(params: CreateCommunityParams, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.factoryAddress) {\n throw new Error('Factory address required for this client');\n }\n const factory = xPNTsFactoryActions(this.factoryAddress);\n\n // 1. Deploy Token\n // Note: The address calculation should be handled via event parsing or predictive deployment\n // For now, returning the transaction hash as per L1 pattern\n return await factory(this.client).createToken({\n name: params.name,\n symbol: params.tokenSymbol,\n community: this.getAddress(),\n account: options?.account\n });\n } catch (error) {\n // Error is likely already an AAStarError from L1, but we wrap it for context\n throw error; \n }\n }\n\n /**\n * Get Community Details (Decodes Role Metadata)\n * @param communityAddress - The address of the community manager (defaults to self)\n */\n async getCommunityInfo(communityAddress?: Address): Promise<{\n name: string;\n ensName: string;\n website: string;\n description: string;\n logoURI: string;\n stakeAmount: bigint;\n }> {\n try {\n const target = communityAddress || this.getAddress();\n const registryAddr = this.requireRegistry();\n const registry = registryActions(registryAddr);\n const publicClient = this.getStartPublicClient();\n \n // 1. Get Role ID\n const API_ROLE_COMMUNITY = await registry(publicClient).ROLE_COMMUNITY();\n\n // 2. Fetch Metadata (Hex).\n // NOTE: in the deployed v5 Registry, `roleMetadata` is an INTERNAL mapping with no\n // public getter (the rich community profile — name/website/logo — is written on\n // registerRole but not readable on-chain). When the getter is absent the call\n // reverts; degrade gracefully to the on-chain-readable fields (stake) with an\n // empty profile rather than throwing, so callers can still resolve the community.\n let metadataHex: Hex | undefined;\n try {\n metadataHex = await registry(publicClient).roleMetadata({\n roleId: API_ROLE_COMMUNITY,\n user: target\n });\n } catch (err) {\n // Degrade ONLY on contract-level \"no getter / reverted\" errors — the deployed\n // v5 Registry genuinely lacks a public roleMetadata getter. Re-throw genuine\n // transport/RPC errors so a transient network failure is not silently masked as\n // \"no community profile\".\n const m = (err instanceof Error ? `${err.message} ${(err as { cause?: { message?: string } }).cause?.message ?? ''}` : String(err)).toLowerCase();\n const isContractGap =\n m.includes('revert') || m.includes('returned no data') ||\n m.includes('does not exist') || m.includes('is not a function') ||\n m.includes('no data was returned');\n if (!isContractGap) throw err;\n metadataHex = undefined;\n }\n\n if (!metadataHex || metadataHex === '0x') {\n let stakeAmount = 0n;\n try {\n stakeAmount = await registry(publicClient).roleStakes({ roleId: API_ROLE_COMMUNITY, user: target });\n } catch { /* stake unreadable too — leave 0 */ }\n return { name: '', ensName: '', website: '', description: '', logoURI: '', stakeAmount };\n }\n\n // 3. Decode\n // struct CommunityRoleData { string name; string ensName; string website; string description; string logoURI; uint256 stakeAmount; }\n let dataToDecode = metadataHex;\n \n // Check for common 'bytes' or 'tuple' wrapper offset (0x20)\n if (metadataHex.startsWith('0x0000000000000000000000000000000000000000000000000000000000000020')) {\n dataToDecode = `0x${metadataHex.slice(66)}`; \n }\n\n const { decodeAbiParameters, parseAbiParameters } = await import('viem');\n const [name, ensName, website, description, logoURI, stakeAmount] = decodeAbiParameters(\n parseAbiParameters('string, string, string, string, string, uint256'),\n dataToDecode as Hex\n );\n\n return {\n name,\n ensName,\n website,\n description,\n logoURI,\n stakeAmount\n };\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Register self as a Community Manager.\n * This method handles all necessary steps:\n * 1. Checks and approves GToken to GTokenStaking\n * 2. Encodes CommunityRoleData with provided parameters\n * 3. Calls registerRoleSelf on Registry\n * \n * @param params Community registration parameters\n * @param options Transaction options\n * @returns Transaction hash\n */\n async registerAsCommunity(params: {\n name: string;\n ensName?: string;\n website?: string;\n description?: string;\n logoURI?: string;\n stakeAmount?: bigint;\n }, options?: TransactionOptions): Promise<Hash> {\n try {\n const registryAddr = this.requireRegistry();\n const registry = registryActions(registryAddr);\n const gTokenStakingAddr = this.requireGTokenStaking();\n const gTokenAddr = this.requireGToken();\n \n // 1. Get ROLE_COMMUNITY\n const roleCommunity = await registry(this.getStartPublicClient()).ROLE_COMMUNITY();\n \n // 2. Prepare stake amount (default 30 GToken as per Registry config)\n const stakeAmount = params.stakeAmount || parseEther('30');\n \n // 3. Check and approve GToken to GTokenStaking if needed\n const gToken = tokenActions();\n \n const allowance = await gToken(this.getStartPublicClient()).allowance({\n token: gTokenAddr,\n owner: this.getAddress(),\n spender: gTokenStakingAddr\n });\n \n if (allowance < stakeAmount) {\n const approveHash = await gToken(this.client).approve({\n token: gTokenAddr,\n spender: gTokenStakingAddr,\n amount: stakeAmount * BigInt(2), // Approve 2x for future use\n account: options?.account\n });\n await (this.getStartPublicClient() as any).waitForTransactionReceipt({ hash: approveHash });\n }\n \n // 4. Encode CommunityRoleData\n // struct CommunityRoleData { string name; string ensName; string website; string description; string logoURI; uint256 stakeAmount; }\n const communityData = encodeAbiParameters(\n parseAbiParameters('string, string, string, string, string, uint256'),\n [\n params.name,\n params.ensName || '',\n params.website || '',\n params.description || `${params.name} Community`,\n params.logoURI || '',\n stakeAmount\n ]\n );\n \n // 5. Register role\n return await registry(this.client).registerRoleSelf({\n roleId: roleCommunity,\n data: communityData,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * One-click Setup: Register Community + Deploy Token\n * Orchestrates the complete community initialization flow.\n */\n async setupCommunity(params: {\n name: string;\n tokenName: string;\n tokenSymbol: string;\n description?: string;\n logoURI?: string;\n website?: string;\n stakeAmount?: bigint;\n }, options?: TransactionOptions): Promise<{ tokenAddress: Address; hashes: Hash[] }> {\n const hashes: Hash[] = [];\n let tokenAddress: Address = '0x0000000000000000000000000000000000000000';\n\n // 1. Register as Community (Idempotent check handled inside or by registry)\n // We should check hasRole first to avoid errors if already registered\n const registry = registryActions(this.requireRegistry())(this.getStartPublicClient());\n const ROLE_COMMUNITY = await registry.ROLE_COMMUNITY();\n const hasRole = await registry.hasRole({ roleId: ROLE_COMMUNITY, user: this.getAddress() });\n\n if (!hasRole) {\n const hReg = await this.registerAsCommunity({\n name: params.name,\n ensName: params.website, // Mapping website to ENS param for now as per legacy behavior\n website: params.website,\n description: params.description,\n logoURI: params.logoURI,\n stakeAmount: params.stakeAmount\n }, options);\n hashes.push(hReg);\n \n // Critical: Factory requires caller to be registered in Registry.\n // We must wait for the registration to be mined.\n await (this.getStartPublicClient() as any).waitForTransactionReceipt({ hash: hReg });\n }\n\n // 2. Deploy Token (Idempotent check via Factory)\n if (this.factoryAddress) {\n const factoryReader = xPNTsFactoryActions(this.factoryAddress)(this.getStartPublicClient());\n const existingToken = await factoryReader.getTokenAddress({ community: this.getAddress() });\n\n if (existingToken && existingToken !== '0x0000000000000000000000000000000000000000') {\n tokenAddress = existingToken;\n } else {\n const hToken = await this.createCommunityToken({\n name: params.tokenName,\n tokenSymbol: params.tokenSymbol,\n description: params.description\n }, options);\n hashes.push(hToken);\n \n // Critical: Wait for token deployment to fetch the address\n await (this.getStartPublicClient() as any).waitForTransactionReceipt({ hash: hToken });\n \n // Fetch the actual address (with retries for latency)\n for (let i = 0; i < 5; i++) {\n tokenAddress = await factoryReader.getTokenAddress({ community: this.getAddress() });\n if (tokenAddress && tokenAddress !== '0x0000000000000000000000000000000000000000') break;\n await new Promise(r => setTimeout(r, 2000));\n }\n \n if (!tokenAddress || tokenAddress === '0x0000000000000000000000000000000000000000') {\n console.warn(`Warning: Token address not found after 10s. Factory might be slow indexing.`);\n }\n }\n }\n\n return { tokenAddress, hashes };\n }\n\n // ========================================\n // 2. 成员管理\n // ========================================\n\n /**\n * Airdrop SBTs to users to make them members\n */\n async airdropSBT(users: Address[], roleId: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.sbtAddress) throw new Error('SBT address required for this client');\n const sbt = sbtActions(this.sbtAddress);\n\n if (users.length === 1) {\n // Convert roleId to Hex (bytes32)\n const roleIdHex = `0x${roleId.toString(16).padStart(64, '0')}` as Hash;\n\n return await sbt(this.client).mintForRole({\n user: users[0],\n roleId: roleIdHex,\n roleData: '0x',\n account: options?.account\n });\n }\n \n throw new Error('Batch airdrop not fully implemented in L1 yet, use single user');\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 3. 信誉系统\n // ========================================\n\n async setReputationRule(ruleId: bigint, ruleConfig: any, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.reputationAddress) throw new Error('Reputation address required for this client');\n const reputation = reputationActions(this.reputationAddress);\n \n const ruleIdHex = `0x${ruleId.toString(16).padStart(64, '0')}` as Hash;\n\n return await reputation(this.client).setReputationRule({\n ruleId: ruleIdHex,\n rule: ruleConfig,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 4. 管理功能\n // ========================================\n\n /**\n * Revoke membership (Burn SBT)\n */\n async revokeMembership(userAddr: Address, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.sbtAddress) throw new Error('SBT address required for this client');\n const sbt = sbtActions(this.sbtAddress);\n \n return await sbt(this.client).burnSBT({\n user: userAddr,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Transfer ownership of the Community Token\n */\n async transferCommunityTokenOwnership(tokenAddress: Address, newOwner: Address, options?: TransactionOptions): Promise<Hash> {\n try {\n const token = tokenActions()(this.client);\n \n return await token.transferOwnership({\n token: tokenAddress,\n newOwner,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n}\n","import { type Address, type Hash, type Hex, parseEther } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions } from '@aastar/core';\nimport { registryActions, sbtActions, tokenActions, stakingActions, entryPointActions } from '@aastar/core'; // L2/L1 Actions\n\nexport interface GaslessConfig {\n paymasterUrl: string;\n policy?: 'CREDIT' | 'TOKEN' | 'SPONSORED';\n}\n\nexport interface UserLifecycleConfig extends ClientConfig {\n accountAddress: Address;\n registryAddress: Address;\n sbtAddress: Address;\n gTokenAddress: Address;\n gTokenStakingAddress: Address;\n entryPointAddress: Address;\n gasless?: GaslessConfig; // Optional gasless config\n}\n\nexport interface OnboardResult {\n success: boolean;\n sbtId?: bigint;\n txHash?: Hash;\n}\n\nexport interface ReputationData {\n score: bigint;\n level: bigint;\n creditLimit: bigint;\n}\n\n/**\n * UserLifecycle - L3 Pattern\n * \n * Responsibilities:\n * 1. Managing the complete lifecycle of an End User (Onboard -> Operate -> Exit)\n * 2. Providing a unified interface for Gasless operations\n * 3. Abstracting underlying contract interactions via L2 Actions\n */\nexport class UserLifecycle extends BaseClient {\n public accountAddress: Address;\n public registryAddress: Address;\n public sbtAddress: Address;\n public gTokenAddress: Address;\n public gTokenStakingAddress: Address;\n public entryPointAddress: Address;\n public gaslessConfig?: GaslessConfig;\n\n public config: UserLifecycleConfig;\n\n constructor(config: UserLifecycleConfig) {\n super(config);\n this.config = config;\n this.accountAddress = config.accountAddress;\n this.registryAddress = config.registryAddress;\n this.sbtAddress = config.sbtAddress;\n this.gTokenAddress = config.gTokenAddress;\n this.gTokenStakingAddress = config.gTokenStakingAddress;\n this.entryPointAddress = config.entryPointAddress;\n this.gaslessConfig = config.gasless;\n }\n\n // ===========================================\n // 1. Onboarding Phase (Registration)\n // ===========================================\n\n /**\n * Check if user is eligible to join a community\n * @param community Address of the community\n */\n async checkEligibility(community: Address): Promise<boolean> {\n // Validation logic (e.g., check blacklist or whitelist via Registry)\n const publicClient = this.getStartPublicClient();\n const registry = registryActions(this.registryAddress)(publicClient);\n // Placeholder: simplistic check, real logic might involve community specific rules\n return true; \n }\n\n /**\n * One-click Onboarding: Approve -> Stake -> Register -> Mint SBT\n * @param community Address of the community to join\n * @param stakeAmount Amount of GToken to stake (default 0.4 GT)\n */\n async onboard(community: Address, stakeAmount: bigint = parseEther('0.4')): Promise<OnboardResult> {\n try {\n const registry = registryActions(this.registryAddress)(this.getStartPublicClient());\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n registryAddress: this.registryAddress,\n gTokenStakingAddress: this.gTokenStakingAddress,\n gTokenAddress: this.gTokenAddress,\n sbtAddress: this.sbtAddress\n }));\n\n // Use UserClient's batch execution capability for atomic onboarding\n const txHash = await userClient.registerAsEndUser(community, stakeAmount);\n \n // Post-check: Verify role with retry\n let hasRole = false;\n for (let i = 0; i < 5; i++) {\n hasRole = await registry.hasRole({ \n roleId: await registry.ROLE_ENDUSER(), \n user: this.accountAddress \n });\n if (hasRole) break;\n await new Promise(r => setTimeout(r, 2000));\n }\n\n return {\n success: hasRole,\n txHash\n };\n } catch (error) {\n console.error(\"Onboarding failed:\", error);\n return { success: false };\n }\n }\n\n /**\n * Enable or update Gasless configuration\n */\n async enableGasless(config: GaslessConfig): Promise<void> {\n this.gaslessConfig = config;\n // In future: verify paymaster connection here\n }\n\n // ===========================================\n // 2. Operational Phase (Execute & Interact)\n // ===========================================\n\n /**\n * Execute a transaction effectively using Gasless configuration if available\n */\n async executeGaslessTx(params: {\n target: Address;\n value: bigint;\n data: Hex;\n operator?: Address; // Optional specific operator\n }): Promise<Hash> {\n if (!this.gaslessConfig) {\n throw new Error(\"Gasless configuration not enabled. Call enableGasless() first.\");\n }\n\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n // Pass minimal config needed for execution\n entryPointAddress: this.entryPointAddress,\n bundlerClient: (this.config as any).bundlerClient \n }));\n\n // Determine Paymaster Type based on policy\n const paymasterType = this.gaslessConfig.policy === 'CREDIT' ? 'Super' : 'V4'; \n // Note: Real implementation needs to resolve actual Paymaster Address from Registry/Config\n // This is a placeholder address resolution\n const registry = registryActions(this.registryAddress)(this.client);\n const paymasterAddress = await registry.SUPER_PAYMASTER(); \n\n return await userClient.executeGasless({\n target: params.target,\n value: params.value,\n data: params.data,\n paymaster: paymasterAddress,\n paymasterType,\n operator: params.operator\n });\n }\n\n async claimSBT(roleId: Hex, options?: TransactionOptions): Promise<Hash> {\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n sbtAddress: this.sbtAddress\n }));\n return await userClient.mintSBT(roleId, options);\n }\n\n // ===========================================\n // 3. Query Phase (Info & Stats)\n // ===========================================\n\n async getMyReputation(): Promise<ReputationData> {\n const publicClient = this.getStartPublicClient();\n const registry = registryActions(this.registryAddress)(publicClient);\n \n const [score, creditLimit] = await Promise.all([\n registry.globalReputation({ user: this.accountAddress }),\n registry.getCreditLimit({ user: this.accountAddress })\n ]);\n\n return {\n score,\n level: 0n, // TODO: Add level calculation logic\n creditLimit\n };\n }\n\n async getCreditLimit(): Promise<bigint> {\n const registry = registryActions(this.registryAddress)(this.client);\n return await registry.getCreditLimit({ user: this.accountAddress });\n }\n\n // ===========================================\n // 4. Exit Phase (Cleanup)\n // ===========================================\n\n async leaveCommunity(community: Address, options?: TransactionOptions): Promise<Hash> {\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n sbtAddress: this.sbtAddress\n }));\n return await userClient.leaveCommunity(community, options);\n }\n\n async exitRole(roleId: Hex, options?: TransactionOptions): Promise<Hash> {\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n registryAddress: this.registryAddress\n }));\n return await userClient.exitRole(roleId, options);\n }\n\n async unstakeAll(roleId: Hex, options?: TransactionOptions): Promise<Hash> {\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n gTokenStakingAddress: this.gTokenStakingAddress\n }));\n return await userClient.unstakeFromRole(roleId, options);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../enduser/src/CommunityClient.ts","../../enduser/src/UserLifecycle.ts"],"names":["stakeAmount","parseAbiParameters","parseEther"],"mappings":"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","file":"chunk-DF4WVR2H.js","sourcesContent":["import { type Address, type Hash, type Hex, parseEther, encodeAbiParameters, parseAbiParameters } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions } from '@aastar/core';\nimport { registryActions, sbtActions, xPNTsFactoryActions, reputationActions, tokenActions } from '@aastar/core';\n\nexport interface CommunityClientConfig extends ClientConfig {\n sbtAddress?: Address;\n factoryAddress?: Address;\n reputationAddress?: Address;\n}\n\nexport interface CreateCommunityParams {\n name: string;\n tokenSymbol: string;\n ensName?: string;\n description?: string;\n}\n\nexport interface CommunityInfo {\n address: Address; // Community ID (hash) usually, but here likely the SBT/profile? No, Community in Registry is bytes32 ID.\n // Wait, Registry defines Community as a Role (ROLE_COMMUNITY).\n // The \"Community\" entity usually implies a collection of contracts (Token, maybe Paymaster).\n}\n\n/**\n * Client for Community Managers (`ROLE_COMMUNITY`)\n */\nexport class CommunityClient extends BaseClient {\n public sbtAddress?: Address;\n public factoryAddress?: Address;\n public reputationAddress?: Address;\n\n constructor(config: CommunityClientConfig) {\n super(config);\n this.sbtAddress = config.sbtAddress;\n this.factoryAddress = config.factoryAddress;\n this.reputationAddress = config.reputationAddress;\n }\n\n // ========================================\n // 1. 社区创建与配置\n // ========================================\n\n /**\n * Create a new Community Token (xPNTs) and register it.\n * Note: In the current architecture, creating a community often involves:\n * 1. Registering the ROLE_COMMUNITY on Registry (if not exists) -> usually manual or self-register\n * 2. Deploying a Token (xPNTs) via Factory\n * 3. Linking the Token to the Community in Registry\n */\n async createCommunityToken(params: CreateCommunityParams, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.factoryAddress) {\n throw new Error('Factory address required for this client');\n }\n const factory = xPNTsFactoryActions(this.factoryAddress);\n\n // 1. Deploy Token\n // Note: The address calculation should be handled via event parsing or predictive deployment\n // For now, returning the transaction hash as per L1 pattern\n return await factory(this.client).createToken({\n name: params.name,\n symbol: params.tokenSymbol,\n community: this.getAddress(),\n account: options?.account\n });\n } catch (error) {\n // Error is likely already an AAStarError from L1, but we wrap it for context\n throw error; \n }\n }\n\n /**\n * Get Community Details (Decodes Role Metadata)\n * @param communityAddress - The address of the community manager (defaults to self)\n */\n async getCommunityInfo(communityAddress?: Address): Promise<{\n name: string;\n ensName: string;\n website: string;\n description: string;\n logoURI: string;\n stakeAmount: bigint;\n }> {\n try {\n const target = communityAddress || this.getAddress();\n const registryAddr = this.requireRegistry();\n const registry = registryActions(registryAddr);\n const publicClient = this.getStartPublicClient();\n \n // 1. Get Role ID\n const API_ROLE_COMMUNITY = await registry(publicClient).ROLE_COMMUNITY();\n\n // 2. Fetch Metadata (Hex).\n // NOTE: in the deployed v5 Registry, `roleMetadata` is an INTERNAL mapping with no\n // public getter (the rich community profile — name/website/logo — is written on\n // registerRole but not readable on-chain). When the getter is absent the call\n // reverts; degrade gracefully to the on-chain-readable fields (stake) with an\n // empty profile rather than throwing, so callers can still resolve the community.\n let metadataHex: Hex | undefined;\n try {\n metadataHex = await registry(publicClient).roleMetadata({\n roleId: API_ROLE_COMMUNITY,\n user: target\n });\n } catch (err) {\n // Degrade ONLY on contract-level \"no getter / reverted\" errors — the deployed\n // v5 Registry genuinely lacks a public roleMetadata getter. Re-throw genuine\n // transport/RPC errors so a transient network failure is not silently masked as\n // \"no community profile\".\n const m = (err instanceof Error ? `${err.message} ${(err as { cause?: { message?: string } }).cause?.message ?? ''}` : String(err)).toLowerCase();\n const isContractGap =\n m.includes('revert') || m.includes('returned no data') ||\n m.includes('does not exist') || m.includes('is not a function') ||\n m.includes('no data was returned');\n if (!isContractGap) throw err;\n metadataHex = undefined;\n }\n\n if (!metadataHex || metadataHex === '0x') {\n let stakeAmount = 0n;\n try {\n stakeAmount = await registry(publicClient).roleStakes({ roleId: API_ROLE_COMMUNITY, user: target });\n } catch { /* stake unreadable too — leave 0 */ }\n return { name: '', ensName: '', website: '', description: '', logoURI: '', stakeAmount };\n }\n\n // 3. Decode\n // struct CommunityRoleData { string name; string ensName; string website; string description; string logoURI; uint256 stakeAmount; }\n let dataToDecode = metadataHex;\n \n // Check for common 'bytes' or 'tuple' wrapper offset (0x20)\n if (metadataHex.startsWith('0x0000000000000000000000000000000000000000000000000000000000000020')) {\n dataToDecode = `0x${metadataHex.slice(66)}`; \n }\n\n const { decodeAbiParameters, parseAbiParameters } = await import('viem');\n const [name, ensName, website, description, logoURI, stakeAmount] = decodeAbiParameters(\n parseAbiParameters('string, string, string, string, string, uint256'),\n dataToDecode as Hex\n );\n\n return {\n name,\n ensName,\n website,\n description,\n logoURI,\n stakeAmount\n };\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Register self as a Community Manager.\n * This method handles all necessary steps:\n * 1. Checks and approves GToken to GTokenStaking\n * 2. Encodes CommunityRoleData with provided parameters\n * 3. Calls registerRoleSelf on Registry\n * \n * @param params Community registration parameters\n * @param options Transaction options\n * @returns Transaction hash\n */\n async registerAsCommunity(params: {\n name: string;\n ensName?: string;\n website?: string;\n description?: string;\n logoURI?: string;\n stakeAmount?: bigint;\n }, options?: TransactionOptions): Promise<Hash> {\n try {\n const registryAddr = this.requireRegistry();\n const registry = registryActions(registryAddr);\n const gTokenStakingAddr = this.requireGTokenStaking();\n const gTokenAddr = this.requireGToken();\n \n // 1. Get ROLE_COMMUNITY\n const roleCommunity = await registry(this.getStartPublicClient()).ROLE_COMMUNITY();\n \n // 2. Prepare stake amount (default 30 GToken as per Registry config)\n const stakeAmount = params.stakeAmount || parseEther('30');\n \n // 3. Check and approve GToken to GTokenStaking if needed\n const gToken = tokenActions();\n \n const allowance = await gToken(this.getStartPublicClient()).allowance({\n token: gTokenAddr,\n owner: this.getAddress(),\n spender: gTokenStakingAddr\n });\n \n if (allowance < stakeAmount) {\n const approveHash = await gToken(this.client).approve({\n token: gTokenAddr,\n spender: gTokenStakingAddr,\n amount: stakeAmount * BigInt(2), // Approve 2x for future use\n account: options?.account\n });\n await (this.getStartPublicClient() as any).waitForTransactionReceipt({ hash: approveHash });\n }\n \n // 4. Encode CommunityRoleData\n // struct CommunityRoleData { string name; string ensName; string website; string description; string logoURI; uint256 stakeAmount; }\n const communityData = encodeAbiParameters(\n parseAbiParameters('string, string, string, string, string, uint256'),\n [\n params.name,\n params.ensName || '',\n params.website || '',\n params.description || `${params.name} Community`,\n params.logoURI || '',\n stakeAmount\n ]\n );\n \n // 5. Register role\n return await registry(this.client).registerRoleSelf({\n roleId: roleCommunity,\n data: communityData,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * One-click Setup: Register Community + Deploy Token\n * Orchestrates the complete community initialization flow.\n */\n async setupCommunity(params: {\n name: string;\n tokenName: string;\n tokenSymbol: string;\n description?: string;\n logoURI?: string;\n website?: string;\n stakeAmount?: bigint;\n }, options?: TransactionOptions): Promise<{ tokenAddress: Address; hashes: Hash[] }> {\n const hashes: Hash[] = [];\n let tokenAddress: Address = '0x0000000000000000000000000000000000000000';\n\n // 1. Register as Community (Idempotent check handled inside or by registry)\n // We should check hasRole first to avoid errors if already registered\n const registry = registryActions(this.requireRegistry())(this.getStartPublicClient());\n const ROLE_COMMUNITY = await registry.ROLE_COMMUNITY();\n const hasRole = await registry.hasRole({ roleId: ROLE_COMMUNITY, user: this.getAddress() });\n\n if (!hasRole) {\n const hReg = await this.registerAsCommunity({\n name: params.name,\n ensName: params.website, // Mapping website to ENS param for now as per legacy behavior\n website: params.website,\n description: params.description,\n logoURI: params.logoURI,\n stakeAmount: params.stakeAmount\n }, options);\n hashes.push(hReg);\n \n // Critical: Factory requires caller to be registered in Registry.\n // We must wait for the registration to be mined.\n await (this.getStartPublicClient() as any).waitForTransactionReceipt({ hash: hReg });\n }\n\n // 2. Deploy Token (Idempotent check via Factory)\n if (this.factoryAddress) {\n const factoryReader = xPNTsFactoryActions(this.factoryAddress)(this.getStartPublicClient());\n const existingToken = await factoryReader.getTokenAddress({ community: this.getAddress() });\n\n if (existingToken && existingToken !== '0x0000000000000000000000000000000000000000') {\n tokenAddress = existingToken;\n } else {\n const hToken = await this.createCommunityToken({\n name: params.tokenName,\n tokenSymbol: params.tokenSymbol,\n description: params.description\n }, options);\n hashes.push(hToken);\n \n // Critical: Wait for token deployment to fetch the address\n await (this.getStartPublicClient() as any).waitForTransactionReceipt({ hash: hToken });\n \n // Fetch the actual address (with retries for latency)\n for (let i = 0; i < 5; i++) {\n tokenAddress = await factoryReader.getTokenAddress({ community: this.getAddress() });\n if (tokenAddress && tokenAddress !== '0x0000000000000000000000000000000000000000') break;\n await new Promise(r => setTimeout(r, 2000));\n }\n \n if (!tokenAddress || tokenAddress === '0x0000000000000000000000000000000000000000') {\n console.warn(`Warning: Token address not found after 10s. Factory might be slow indexing.`);\n }\n }\n }\n\n return { tokenAddress, hashes };\n }\n\n // ========================================\n // 2. 成员管理\n // ========================================\n\n /**\n * Airdrop SBTs to users to make them members\n */\n async airdropSBT(users: Address[], roleId: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.sbtAddress) throw new Error('SBT address required for this client');\n const sbt = sbtActions(this.sbtAddress);\n\n if (users.length === 1) {\n // Convert roleId to Hex (bytes32)\n const roleIdHex = `0x${roleId.toString(16).padStart(64, '0')}` as Hash;\n\n return await sbt(this.client).mintForRole({\n user: users[0],\n roleId: roleIdHex,\n roleData: '0x',\n account: options?.account\n });\n }\n \n throw new Error('Batch airdrop not fully implemented in L1 yet, use single user');\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 3. 信誉系统\n // ========================================\n\n async setReputationRule(ruleId: bigint, ruleConfig: any, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.reputationAddress) throw new Error('Reputation address required for this client');\n const reputation = reputationActions(this.reputationAddress);\n \n const ruleIdHex = `0x${ruleId.toString(16).padStart(64, '0')}` as Hash;\n\n return await reputation(this.client).setReputationRule({\n ruleId: ruleIdHex,\n rule: ruleConfig,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 4. 管理功能\n // ========================================\n\n /**\n * Revoke membership (Burn SBT)\n */\n async revokeMembership(userAddr: Address, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.sbtAddress) throw new Error('SBT address required for this client');\n const sbt = sbtActions(this.sbtAddress);\n \n return await sbt(this.client).burnSBT({\n user: userAddr,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Transfer ownership of the Community Token\n */\n async transferCommunityTokenOwnership(tokenAddress: Address, newOwner: Address, options?: TransactionOptions): Promise<Hash> {\n try {\n const token = tokenActions()(this.client);\n \n return await token.transferOwnership({\n token: tokenAddress,\n newOwner,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n}\n","import { type Address, type Hash, type Hex, parseEther } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions } from '@aastar/core';\nimport { registryActions, sbtActions, tokenActions, stakingActions, entryPointActions } from '@aastar/core'; // L2/L1 Actions\n\nexport interface GaslessConfig {\n paymasterUrl: string;\n policy?: 'CREDIT' | 'TOKEN' | 'SPONSORED';\n}\n\nexport interface UserLifecycleConfig extends ClientConfig {\n accountAddress: Address;\n registryAddress: Address;\n sbtAddress: Address;\n gTokenAddress: Address;\n gTokenStakingAddress: Address;\n entryPointAddress: Address;\n gasless?: GaslessConfig; // Optional gasless config\n}\n\nexport interface OnboardResult {\n success: boolean;\n sbtId?: bigint;\n txHash?: Hash;\n}\n\nexport interface ReputationData {\n score: bigint;\n level: bigint;\n creditLimit: bigint;\n}\n\n/**\n * UserLifecycle - L3 Pattern\n * \n * Responsibilities:\n * 1. Managing the complete lifecycle of an End User (Onboard -> Operate -> Exit)\n * 2. Providing a unified interface for Gasless operations\n * 3. Abstracting underlying contract interactions via L2 Actions\n */\nexport class UserLifecycle extends BaseClient {\n public accountAddress: Address;\n public registryAddress: Address;\n public sbtAddress: Address;\n public gTokenAddress: Address;\n public gTokenStakingAddress: Address;\n public entryPointAddress: Address;\n public gaslessConfig?: GaslessConfig;\n\n public config: UserLifecycleConfig;\n\n constructor(config: UserLifecycleConfig) {\n super(config);\n this.config = config;\n this.accountAddress = config.accountAddress;\n this.registryAddress = config.registryAddress;\n this.sbtAddress = config.sbtAddress;\n this.gTokenAddress = config.gTokenAddress;\n this.gTokenStakingAddress = config.gTokenStakingAddress;\n this.entryPointAddress = config.entryPointAddress;\n this.gaslessConfig = config.gasless;\n }\n\n // ===========================================\n // 1. Onboarding Phase (Registration)\n // ===========================================\n\n /**\n * Check if user is eligible to join a community\n * @param community Address of the community\n */\n async checkEligibility(community: Address): Promise<boolean> {\n // Validation logic (e.g., check blacklist or whitelist via Registry)\n const publicClient = this.getStartPublicClient();\n const registry = registryActions(this.registryAddress)(publicClient);\n // Placeholder: simplistic check, real logic might involve community specific rules\n return true; \n }\n\n /**\n * One-click Onboarding: Approve -> Stake -> Register -> Mint SBT\n * @param community Address of the community to join\n * @param stakeAmount Amount of GToken to stake (default 0.4 GT)\n */\n async onboard(community: Address, stakeAmount: bigint = parseEther('0.4')): Promise<OnboardResult> {\n try {\n const registry = registryActions(this.registryAddress)(this.getStartPublicClient());\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n registryAddress: this.registryAddress,\n gTokenStakingAddress: this.gTokenStakingAddress,\n gTokenAddress: this.gTokenAddress,\n sbtAddress: this.sbtAddress\n }));\n\n // Use UserClient's batch execution capability for atomic onboarding\n const txHash = await userClient.registerAsEndUser(community, stakeAmount);\n \n // Post-check: Verify role with retry\n let hasRole = false;\n for (let i = 0; i < 5; i++) {\n hasRole = await registry.hasRole({ \n roleId: await registry.ROLE_ENDUSER(), \n user: this.accountAddress \n });\n if (hasRole) break;\n await new Promise(r => setTimeout(r, 2000));\n }\n\n return {\n success: hasRole,\n txHash\n };\n } catch (error) {\n console.error(\"Onboarding failed:\", error);\n return { success: false };\n }\n }\n\n /**\n * Enable or update Gasless configuration\n */\n async enableGasless(config: GaslessConfig): Promise<void> {\n this.gaslessConfig = config;\n // In future: verify paymaster connection here\n }\n\n // ===========================================\n // 2. Operational Phase (Execute & Interact)\n // ===========================================\n\n /**\n * Execute a transaction effectively using Gasless configuration if available\n */\n async executeGaslessTx(params: {\n target: Address;\n value: bigint;\n data: Hex;\n operator?: Address; // Optional specific operator\n }): Promise<Hash> {\n if (!this.gaslessConfig) {\n throw new Error(\"Gasless configuration not enabled. Call enableGasless() first.\");\n }\n\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n // Pass minimal config needed for execution\n entryPointAddress: this.entryPointAddress,\n bundlerClient: (this.config as any).bundlerClient \n }));\n\n // Determine Paymaster Type based on policy\n const paymasterType = this.gaslessConfig.policy === 'CREDIT' ? 'Super' : 'V4'; \n // Note: Real implementation needs to resolve actual Paymaster Address from Registry/Config\n // This is a placeholder address resolution\n const registry = registryActions(this.registryAddress)(this.client);\n const paymasterAddress = await registry.SUPER_PAYMASTER(); \n\n return await userClient.executeGasless({\n target: params.target,\n value: params.value,\n data: params.data,\n paymaster: paymasterAddress,\n paymasterType,\n operator: params.operator\n });\n }\n\n async claimSBT(roleId: Hex, options?: TransactionOptions): Promise<Hash> {\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n sbtAddress: this.sbtAddress\n }));\n return await userClient.mintSBT(roleId, options);\n }\n\n // ===========================================\n // 3. Query Phase (Info & Stats)\n // ===========================================\n\n async getMyReputation(): Promise<ReputationData> {\n const publicClient = this.getStartPublicClient();\n const registry = registryActions(this.registryAddress)(publicClient);\n \n const [score, creditLimit] = await Promise.all([\n registry.globalReputation({ user: this.accountAddress }),\n registry.getCreditLimit({ user: this.accountAddress })\n ]);\n\n return {\n score,\n level: 0n, // TODO: Add level calculation logic\n creditLimit\n };\n }\n\n async getCreditLimit(): Promise<bigint> {\n const registry = registryActions(this.registryAddress)(this.client);\n return await registry.getCreditLimit({ user: this.accountAddress });\n }\n\n // ===========================================\n // 4. Exit Phase (Cleanup)\n // ===========================================\n\n async leaveCommunity(community: Address, options?: TransactionOptions): Promise<Hash> {\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n sbtAddress: this.sbtAddress\n }));\n return await userClient.leaveCommunity(community, options);\n }\n\n async exitRole(roleId: Hex, options?: TransactionOptions): Promise<Hash> {\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n registryAddress: this.registryAddress\n }));\n return await userClient.exitRole(roleId, options);\n }\n\n async unstakeAll(roleId: Hex, options?: TransactionOptions): Promise<Hash> {\n const userClient = await import('./UserClient.js').then(m => new m.UserClient({\n ...this.config,\n accountAddress: this.accountAddress,\n gTokenStakingAddress: this.gTokenStakingAddress\n }));\n return await userClient.unstakeFromRole(roleId, options);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { BaseClient, registryActions, tokenActions, paymasterFactoryActions, PaymasterABI, superPaymasterActions, paymasterActions, dvtActions, aggregatorActions } from './chunk-6QYXGMCR.js';
1
+ import { BaseClient, registryActions, tokenActions, paymasterFactoryActions, PaymasterABI, superPaymasterActions, paymasterActions, dvtActions, aggregatorActions } from './chunk-M5WFKETT.js';
2
2
  import { parseEther } from 'viem';
3
3
 
4
4
  var PaymasterOperatorClient = class extends BaseClient {
@@ -509,7 +509,7 @@ var OperatorLifecycle = class extends PaymasterOperatorClient {
509
509
  depositAmount: params.depositAmount
510
510
  }, options);
511
511
  hashes.push(h);
512
- const factory = await import('./src-L5SI5WNB.js').then((m) => m.xPNTsFactoryActions(this.xpntsFactory)(this.getStartPublicClient()));
512
+ const factory = await import('./src-XCV6BTSV.js').then((m) => m.xPNTsFactoryActions(this.xpntsFactory)(this.getStartPublicClient()));
513
513
  const token = await factory.getTokenAddress({ community: this.getAddress() });
514
514
  if (token && token !== "0x0000000000000000000000000000000000000000") {
515
515
  const hConfig = await this.configureOperator(
@@ -576,5 +576,5 @@ var OperatorLifecycle = class extends PaymasterOperatorClient {
576
576
  };
577
577
 
578
578
  export { OperatorLifecycle, PaymasterOperatorClient, ProposalState, ProtocolClient };
579
- //# sourceMappingURL=chunk-BN5WY5GM.js.map
580
- //# sourceMappingURL=chunk-BN5WY5GM.js.map
579
+ //# sourceMappingURL=chunk-DQBKE4ND.js.map
580
+ //# sourceMappingURL=chunk-DQBKE4ND.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../operator/src/PaymasterOperatorClient.ts","../../operator/src/ProtocolClient.ts","../../operator/src/OperatorLifecycle.ts"],"names":["ProposalState"],"mappings":"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","file":"chunk-BN5WY5GM.js","sourcesContent":["import { type Address, type Hash, parseEther } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions, PaymasterABI } from '@aastar/core';\nimport { superPaymasterActions, tokenActions, paymasterActions, registryActions, paymasterFactoryActions } from '@aastar/core';\n\nexport interface OperatorClientConfig extends ClientConfig {\n superPaymasterAddress: Address;\n tokenAddress?: Address;\n}\n\nexport interface SponsorshipPolicy {\n globalLimit: bigint;\n userLimit: bigint;\n itemPrice: bigint;\n // ... logic for encoding this into bytes/storage\n}\n\n/**\n * Client for Paymaster Operators (ROLE_PAYMASTER_SUPER)\n */\nexport class PaymasterOperatorClient extends BaseClient {\n public superPaymasterAddress: Address;\n public tokenAddress?: Address;\n public ethUsdPriceFeed: Address;\n public xpntsFactory: Address;\n\n constructor(config: OperatorClientConfig) {\n super(config);\n this.superPaymasterAddress = config.superPaymasterAddress;\n this.tokenAddress = config.tokenAddress;\n this.ethUsdPriceFeed = config.ethUsdPriceFeedAddress || '0x694AA1769357215DE4FAC081bf1f309aDC325306'; // Default Sepolia\n this.xpntsFactory = config.xpntsFactoryAddress || '0x0000000000000000000000000000000000000000'; // Should be provided\n }\n\n // ========================================\n // 0. 注册与入驻 (One-Stop Registration)\n // ========================================\n\n /**\n * Register as SuperPaymaster Operator (one-stop API).\n * This method handles all necessary steps:\n * 1. Checks prerequisites (must have ROLE_COMMUNITY)\n * 2. Checks and approves GToken to GTokenStaking\n * 3. Registers ROLE_PAYMASTER_SUPER\n * 4. Optionally deposits collateral to SuperPaymaster\n * \n * @param params Registration parameters\n * @param options Transaction options\n * @returns Transaction hash of role registration\n */\n async registerAsSuperPaymasterOperator(params?: {\n stakeAmount?: bigint; // Optional, defaults to 50 GToken (Registry requirement)\n depositAmount?: bigint; // Optional initial deposit to SuperPaymaster\n }, options?: TransactionOptions): Promise<Hash> {\n try {\n const registryAddr = this.requireRegistry();\n const gTokenAddr = this.requireGToken();\n const gTokenStakingAddr = this.requireGTokenStaking();\n \n const registry = registryActions(registryAddr);\n const gToken = tokenActions();\n const publicClient = this.getStartPublicClient();\n \n // 1. Check prerequisites\n const ROLE_COMMUNITY = await registry(publicClient).ROLE_COMMUNITY();\n const hasCommunity = await registry(publicClient).hasRole({\n user: this.getAddress(),\n roleId: ROLE_COMMUNITY\n });\n \n if (!hasCommunity) {\n throw new Error('Must have ROLE_COMMUNITY before registering as SuperPaymaster operator');\n }\n \n // 2. Check if already has role\n const ROLE_PAYMASTER_SUPER = await registry(publicClient).ROLE_PAYMASTER_SUPER();\n const hasSuper = await registry(publicClient).hasRole({\n user: this.getAddress(),\n roleId: ROLE_PAYMASTER_SUPER\n });\n \n if (hasSuper) {\n // Still handle deposit if requested\n if (params?.depositAmount) {\n return this.depositCollateral(params.depositAmount, options);\n }\n throw new Error('Already registered as SuperPaymaster operator');\n }\n \n // 3. Prepare stake amount (default 50 GToken as per Registry config)\n const stakeAmount = params?.stakeAmount || parseEther('50');\n \n // 4. Check and approve GToken to GTokenStaking\n const allowance = await gToken(publicClient).allowance({\n token: gTokenAddr,\n owner: this.getAddress(),\n spender: gTokenStakingAddr\n });\n \n if (allowance < stakeAmount) {\n const approveHash = await gToken(this.client).approve({\n token: gTokenAddr,\n spender: gTokenStakingAddr,\n amount: stakeAmount * 2n, // Approve 2x for future use\n account: options?.account\n });\n await (publicClient as any).waitForTransactionReceipt({ hash: approveHash });\n }\n \n // 5. Register ROLE_PAYMASTER_SUPER\n const registerHash = await registry(this.client).registerRoleSelf({\n roleId: ROLE_PAYMASTER_SUPER,\n data: '0x', // SuperPaymaster role doesn't need special data\n account: options?.account\n });\n \n // Wait for registration to complete\n await (publicClient as any).waitForTransactionReceipt({ hash: registerHash });\n \n // 6. Optional: Deposit collateral to SuperPaymaster\n if (params?.depositAmount) {\n await this.depositCollateral(params.depositAmount, options);\n }\n \n return registerHash;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Deploy a new Paymaster V4 and Register as AOA Operator (one-stop API).\n * This method handles:\n * 1. Checks prerequisites (ROLE_COMMUNITY)\n * 2. Predicts new Paymaster address\n * 3. Deploys Paymaster V4 via Factory\n * 4. Registers ROLE_PAYMASTER_AOA with staking\n * \n * @param params Deployment parameters\n * @param options Transaction options\n * @returns Object containing new paymaster address and transaction hashes\n */\n async deployAndRegisterPaymasterV4(params?: {\n stakeAmount?: bigint; // Optional, defaults to 30 GToken (Registry requirement for AOA)\n version?: string; // Optional, defaults to Factory default or V4.0.0\n salt?: bigint; // Optional, for deterministic deployment\n priceFeed?: Address;\n }, options?: TransactionOptions): Promise<{ \n paymasterAddress: Address; \n deployHash: Hash; \n registerHash: Hash;\n }> {\n try {\n const registryAddr = this.requireRegistry();\n const gTokenAddr = this.requireGToken();\n const gTokenStakingAddr = this.requireGTokenStaking();\n const factoryAddr = this.requirePaymasterFactory();\n \n const registry = registryActions(registryAddr);\n const gToken = tokenActions();\n const factory = paymasterFactoryActions(factoryAddr);\n const publicClient = this.getStartPublicClient();\n \n const account = options?.account || this.client.account || this.getAddress();\n const accountAddr = typeof account === 'string' ? account : account.address;\n\n // 1. Check prerequisites (ROLE_COMMUNITY)\n const ROLE_COMMUNITY = await registry(publicClient).ROLE_COMMUNITY();\n const hasCommunity = await registry(publicClient).hasRole({\n user: accountAddr,\n roleId: ROLE_COMMUNITY\n });\n \n if (!hasCommunity) {\n throw new Error('Must have ROLE_COMMUNITY before deploying Paymaster V4');\n }\n\n // 2. Deployment (Idempotent Check)\n const existingPaymaster = await factory(publicClient).getPaymaster({ owner: accountAddr });\n let deployHash: Hash = '0x0000000000000000000000000000000000000000000000000000000000000000';\n let paymasterAddress: Address;\n\n if (existingPaymaster && existingPaymaster !== '0x0000000000000000000000000000000000000000') {\n console.log(` ℹ️ Paymaster already deployed at: ${existingPaymaster}`);\n paymasterAddress = existingPaymaster;\n } else {\n console.log(' 🛠️ Deploying Paymaster V4 with args:', {\n entryPoint: this.requireEntryPoint(),\n owner: accountAddr,\n priceFeed: this.ethUsdPriceFeed,\n factory: factoryAddr\n });\n\n const { encodeFunctionData } = await import('viem');\n const initData = encodeFunctionData({\n abi: PaymasterABI,\n functionName: 'initialize',\n args: [\n this.requireEntryPoint(), // EntryPoint v0.7\n accountAddr,\n accountAddr, // Treasury defaults to owner\n this.ethUsdPriceFeed,\n 200n, // serviceFeeRate (2%)\n parseEther('0.1'), // maxGasCostCap\n 3600n // priceStalenessThreshold (1 hour)\n ]\n });\n\n deployHash = await factory(this.client).deployPaymaster({\n version: params?.version, \n initData,\n account\n });\n \n await (publicClient as any).waitForTransactionReceipt({ hash: deployHash });\n \n paymasterAddress = await factory(publicClient).getPaymaster({ owner: accountAddr });\n }\n \n if (!paymasterAddress || paymasterAddress === '0x0000000000000000000000000000000000000000') {\n throw new Error('Failed to retrieve Paymaster address from Factory');\n }\n\n // 3. Register ROLE_PAYMASTER_AOA\n const ROLE_PAYMASTER_AOA = await registry(publicClient).ROLE_PAYMASTER_AOA();\n const hasAOA = await registry(publicClient).hasRole({\n user: accountAddr,\n roleId: ROLE_PAYMASTER_AOA\n });\n\n if (hasAOA) {\n return { paymasterAddress, deployHash, registerHash: '0x0000000000000000000000000000000000000000000000000000000000000000' };\n }\n\n const stakeAmount = params?.stakeAmount || parseEther('30');\n \n const allowance = await gToken(publicClient).allowance({\n token: gTokenAddr,\n owner: accountAddr,\n spender: gTokenStakingAddr\n });\n \n if (allowance < stakeAmount) {\n const approveHash = await gToken(this.client).approve({\n token: gTokenAddr,\n spender: gTokenStakingAddr,\n amount: stakeAmount * 2n,\n account: account\n });\n await (publicClient as any).waitForTransactionReceipt({ hash: approveHash });\n }\n\n const { encodeAbiParameters, parseAbiParameters } = await import('viem');\n let roleData: Hash = '0x';\n if (stakeAmount > 0) {\n roleData = encodeAbiParameters(\n parseAbiParameters('uint256'),\n [stakeAmount]\n ) as Hash;\n }\n\n const registerHash = await registry(this.client).registerRoleSelf({\n roleId: ROLE_PAYMASTER_AOA,\n data: roleData,\n account: account\n });\n \n await (publicClient as any).waitForTransactionReceipt({ hash: registerHash });\n\n return {\n paymasterAddress,\n deployHash,\n registerHash\n };\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Deposit collateral (aPNTs/GToken) to SuperPaymaster.\n * This is a helper method used by registerAsSuperPaymasterOperator.\n */\n async depositCollateral(amount: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n const pm = superPaymasterActions(this.superPaymasterAddress);\n const publicClient = this.getStartPublicClient();\n \n // V3.7: Dynamically fetch the token expected by SuperPaymaster\n const depositToken = await pm(publicClient).APNTS_TOKEN();\n const token = tokenActions();\n \n // Approve SuperPaymaster to spend the token (usually aPNTs on Sepolia)\n const allowance = await token(publicClient).allowance({\n token: depositToken,\n owner: this.getAddress(),\n spender: this.superPaymasterAddress\n });\n \n if (allowance < amount) {\n const approveHash = await token(this.client).approve({\n token: depositToken,\n spender: this.superPaymasterAddress,\n amount,\n account: options?.account\n });\n await (publicClient as any).waitForTransactionReceipt({ hash: approveHash });\n }\n \n // Deposit to SuperPaymaster\n return pm(this.client).deposit({\n amount,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Configure operator parameters (Token, Treasury).\n * Exchange rate is now read live from xPNTsToken.exchangeRate() at runtime.\n * If parameters are undefined, existing values are preserved.\n */\n async configureOperator(\n xPNTsToken?: Address,\n treasury?: Address,\n options?: TransactionOptions\n ): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n const publicClient = this.getStartPublicClient();\n\n // Fetch current config to preserve missing values\n const currentConfig = await sp(publicClient).operators({ operator: this.getAddress() });\n\n const currentToken = currentConfig.xPNTsToken;\n const currentTreasury = currentConfig.treasury;\n\n return await sp(this.client).configureOperator({\n xPNTsToken: xPNTsToken || currentToken,\n opTreasury: treasury || currentTreasury,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async withdrawCollateral(to: Address, amount: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).withdrawTo({\n to,\n amount,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async isOperator(operator: Address): Promise<boolean> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n const config = await sp(this.getStartPublicClient()).operators({ operator });\n return config.isConfigured;\n } catch (error) {\n return false;\n }\n }\n\n async getOperatorDetails(operator?: Address): Promise<any> {\n try {\n const target = operator || this.getAddress();\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.getStartPublicClient()).operators({ operator: target });\n } catch (error) {\n throw error;\n }\n }\n\n async initiateExit(options?: TransactionOptions): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).unlockStake({\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async withdrawStake(to: Address, options?: TransactionOptions): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).withdrawStake({\n to,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 3. 支付代币管理 (基于 PaymasterActions)\n // ========================================\n\n async addGasToken(token: Address, price: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n const pm = paymasterActions(this.superPaymasterAddress);\n return await pm(this.client).setTokenPrice({\n token,\n price,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async getTokenPrice(token: Address): Promise<bigint> {\n try {\n const pm = paymasterActions(this.superPaymasterAddress);\n return await pm(this.getStartPublicClient()).tokenPrices({ token });\n } catch (error) {\n throw error;\n }\n }\n\n async setupPaymasterDeposit(params: {\n paymaster: Address;\n user: Address;\n token: Address;\n amount: bigint;\n }, options?: TransactionOptions): Promise<Hash> {\n try {\n const pm = paymasterActions(params.paymaster);\n return await pm(this.client).depositFor({\n user: params.user,\n token: params.token,\n amount: params.amount,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n}\n","import { type Address, type Hash, type Hex } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions } from '@aastar/core';\nimport { dvtActions, aggregatorActions, superPaymasterActions } from '@aastar/core';\n\nexport interface ProtocolClientConfig extends ClientConfig {\n dvtValidatorAddress: Address; // The DVT Validator contract (Governance)\n blsAggregatorAddress?: Address; // Optional BLS Aggregator\n superPaymasterAddress?: Address; // For Global Params\n}\n\nexport enum ProposalState {\n Pending = 0,\n Active = 1,\n Canceled = 2,\n Defeated = 3,\n Succeeded = 4,\n Queued = 5,\n Expired = 6,\n Executed = 7\n}\n\n/**\n * Client for Protocol Governors and Validators (Infrastructure)\n */\nexport class ProtocolClient extends BaseClient {\n public dvtValidatorAddress: Address;\n public blsAggregatorAddress?: Address;\n public superPaymasterAddress?: Address;\n\n constructor(config: ProtocolClientConfig) {\n super(config);\n this.dvtValidatorAddress = config.dvtValidatorAddress;\n this.blsAggregatorAddress = config.blsAggregatorAddress;\n this.superPaymasterAddress = config.superPaymasterAddress;\n }\n\n // ========================================\n // 1. 提案管理 (DVT)\n // ========================================\n\n /**\n * Create a new proposal\n */\n async createProposal(target: Address, calldata: Hex, description: string, options?: TransactionOptions): Promise<Hash> {\n try {\n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n \n // Mapping general \"createProposal\" to \"createSlashProposal\" for now\n // Assuming Governance uses Validator logic or this Client is for Slash.\n // Using createSlashProposal as the available action.\n return await dvt.createSlashProposal({\n operator: target,\n level: 1, // Default level\n reason: description,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async signProposal(proposalId: bigint, signature: Hex = '0x', options?: TransactionOptions): Promise<Hash> {\n try {\n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n return await dvt.signSlashProposal({\n proposalId,\n signature,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Execute a proposal with collected signatures\n */\n async executeWithProof(proposalId: bigint, signatures: Hex[], options?: TransactionOptions): Promise<Hash> {\n try {\n // Mock proof generation logic or placeholder\n const proof = '0x' as Hex; \n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n \n return await dvt.executeSlashWithProof({\n proposalId,\n repUsers: [], // Needs real data in production\n newScores: [],\n epoch: 0n,\n proof,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 2. 验证器管理 / BLS\n // ========================================\n\n async registerBLSKey(publicKey: Hex, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.blsAggregatorAddress) {\n throw new Error('BLS Aggregator address required for this client');\n }\n // Aggregator actions now handle the type internally or via mapping\n const agg = aggregatorActions(this.blsAggregatorAddress)(this.client);\n \n return await agg.registerBLSPublicKey({\n validator: this.getAddress(),\n publicKey,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 3. 全局参数管理 (Admin)\n // ========================================\n\n async setProtocolFee(bps: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.superPaymasterAddress) {\n throw new Error('SuperPaymaster address required for this client');\n }\n const sp = superPaymasterActions(this.superPaymasterAddress);\n \n return await sp(this.client).setProtocolFee({\n newFeeBPS: bps,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async setTreasury(treasury: Address, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.superPaymasterAddress) {\n throw new Error('SuperPaymaster address required for this client');\n }\n const sp = superPaymasterActions(this.superPaymasterAddress);\n \n return await sp(this.client).setTreasury({\n treasury,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n}\n","import { type Address, type Hash, type Hex, parseEther } from 'viem';\nimport { type TransactionOptions } from '@aastar/core';\nimport { PaymasterOperatorClient, type OperatorClientConfig } from './PaymasterOperatorClient.js';\nimport { tokenActions, registryActions } from '@aastar/core'; // L2/L1 Actions\n\nexport interface OperatorStatus {\n isConfigured: boolean;\n isActive: boolean;\n balance: bigint;\n}\n\n/**\n * OperatorLifecycle - L3 Pattern\n * \n * Responsibilities:\n * 1. Managing the complete lifecycle of a Paymaster Operator\n * 2. Unifying setup (onboard), operation (config), and exit (withdraw)\n */\nexport class OperatorLifecycle extends PaymasterOperatorClient {\n\n constructor(config: OperatorClientConfig) {\n super(config);\n }\n\n // ===========================================\n // 1. Setup Phase (Onboarding)\n // ===========================================\n\n /**\n * Check if the account is ready to become an operator\n * (e.g., has GToken, has ROLE_COMMUNITY, etc.)\n */\n async checkReadiness(): Promise<OperatorStatus> {\n const isOp = await this.isOperator(this.getAddress());\n // For SuperPaymaster, balance is 'aPNTsBalance' (Collateral)\n const details = await this.getOperatorDetails();\n const balance = details.aPNTsBalance || 0n;\n \n return {\n isConfigured: isOp,\n isActive: isOp, // Simplification\n balance\n };\n }\n\n /**\n * One-click Setup: Register + Deposit + Deploy Node\n * Wraps existing registerAsSuperPaymasterOperator or deployAndRegisterPaymasterV4\n */\n async setupNode(params: {\n type: 'V4' | 'SUPER';\n stakeAmount?: bigint;\n depositAmount?: bigint;\n }, options?: TransactionOptions): Promise<Hash[]> {\n const hashes: Hash[] = [];\n\n if (params.type === 'SUPER') {\n const h = await this.registerAsSuperPaymasterOperator({\n stakeAmount: params.stakeAmount,\n depositAmount: params.depositAmount\n }, options);\n hashes.push(h);\n\n // Fetch Token Address and Configure\n const factory = await import('@aastar/core').then(m => m.xPNTsFactoryActions(this.xpntsFactory!)(this.getStartPublicClient()));\n const token = await factory.getTokenAddress({ community: this.getAddress() });\n \n if (token && token !== '0x0000000000000000000000000000000000000000') {\n const hConfig = await this.configureOperator(\n token,\n this.getAddress(), // Default treasury to self\n options\n );\n hashes.push(hConfig);\n }\n } else {\n const result = await this.deployAndRegisterPaymasterV4({\n stakeAmount: params.stakeAmount\n }, options);\n hashes.push(result.deployHash);\n hashes.push(result.registerHash);\n }\n\n return hashes;\n }\n\n // ===========================================\n // 2. Operational Phase (Config & Funds)\n // ===========================================\n\n // Inherits: addGasToken, configureOperator, depositCollateral from PaymasterOperatorClient\n\n async getOperatorStats(): Promise<any> {\n return await this.getOperatorDetails();\n }\n\n // ===========================================\n // 3. Exit Phase (Withdraw & Leave)\n // ===========================================\n\n /**\n * Start the exit process: Unstake from Registry/SuperPaymaster and Unlock funds\n */\n async initiateExit(options?: TransactionOptions): Promise<Hash> {\n // 1. Unlock Stake from SuperPaymaster (if applicable)\n return await super.initiateExit(options);\n }\n\n /**\n * Finalize exit: Withdraw all funds (Collateral + Rewards)\n */\n async withdrawAllFunds(to?: Address, options?: TransactionOptions): Promise<Hash[]> {\n const recipient = to || this.getAddress();\n const hashes: Hash[] = [];\n\n // 1. Withdraw Collateral from SuperPaymaster (if any)\n // Note: We need to know the balance to withdraw exact amount.\n // For current L3 pattern, we assume the user tracks it or we fetch it.\n const stats = await this.checkReadiness();\n if (stats.balance > 0n) {\n const hCol = await this.withdrawCollateral(recipient, stats.balance, options);\n hashes.push(hCol);\n }\n\n // 2. Exit Role in Registry (Unstake GToken)\n // This will fail if lock duration > 0 and not yet cooldown.\n // Or it will initiate cooldown.\n const client = this.getStartPublicClient();\n const registry = registryActions(this.registryAddress as Address); // Use local registry address\n const registryWriter = registryActions(this.registryAddress as Address)(this.client);\n \n // Check if we have the role\n // For Super Operator\n const ROLE_PAYMASTER_SUPER = await registry(client).ROLE_PAYMASTER_SUPER();\n const hasRole = await registry(client).hasRole({ user: this.getAddress(), roleId: ROLE_PAYMASTER_SUPER });\n \n if (hasRole) {\n const hExit = await registryWriter.exitRole({ roleId: ROLE_PAYMASTER_SUPER, account: options?.account });\n hashes.push(hExit);\n }\n\n return hashes;\n }\n\n // Helper: Get GToken Balance\n private async getTokenBalance(): Promise<bigint> {\n if (!this.tokenAddress) return 0n;\n const token = tokenActions()(this.getStartPublicClient());\n return await token.balanceOf({ token: this.tokenAddress, account: this.getAddress() });\n }\n}\n"]}
1
+ {"version":3,"sources":["../../operator/src/PaymasterOperatorClient.ts","../../operator/src/ProtocolClient.ts","../../operator/src/OperatorLifecycle.ts"],"names":["ProposalState"],"mappings":"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","file":"chunk-DQBKE4ND.js","sourcesContent":["import { type Address, type Hash, parseEther } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions, PaymasterABI } from '@aastar/core';\nimport { superPaymasterActions, tokenActions, paymasterActions, registryActions, paymasterFactoryActions } from '@aastar/core';\n\nexport interface OperatorClientConfig extends ClientConfig {\n superPaymasterAddress: Address;\n tokenAddress?: Address;\n}\n\nexport interface SponsorshipPolicy {\n globalLimit: bigint;\n userLimit: bigint;\n itemPrice: bigint;\n // ... logic for encoding this into bytes/storage\n}\n\n/**\n * Client for Paymaster Operators (ROLE_PAYMASTER_SUPER)\n */\nexport class PaymasterOperatorClient extends BaseClient {\n public superPaymasterAddress: Address;\n public tokenAddress?: Address;\n public ethUsdPriceFeed: Address;\n public xpntsFactory: Address;\n\n constructor(config: OperatorClientConfig) {\n super(config);\n this.superPaymasterAddress = config.superPaymasterAddress;\n this.tokenAddress = config.tokenAddress;\n this.ethUsdPriceFeed = config.ethUsdPriceFeedAddress || '0x694AA1769357215DE4FAC081bf1f309aDC325306'; // Default Sepolia\n this.xpntsFactory = config.xpntsFactoryAddress || '0x0000000000000000000000000000000000000000'; // Should be provided\n }\n\n // ========================================\n // 0. 注册与入驻 (One-Stop Registration)\n // ========================================\n\n /**\n * Register as SuperPaymaster Operator (one-stop API).\n * This method handles all necessary steps:\n * 1. Checks prerequisites (must have ROLE_COMMUNITY)\n * 2. Checks and approves GToken to GTokenStaking\n * 3. Registers ROLE_PAYMASTER_SUPER\n * 4. Optionally deposits collateral to SuperPaymaster\n * \n * @param params Registration parameters\n * @param options Transaction options\n * @returns Transaction hash of role registration\n */\n async registerAsSuperPaymasterOperator(params?: {\n stakeAmount?: bigint; // Optional, defaults to 50 GToken (Registry requirement)\n depositAmount?: bigint; // Optional initial deposit to SuperPaymaster\n }, options?: TransactionOptions): Promise<Hash> {\n try {\n const registryAddr = this.requireRegistry();\n const gTokenAddr = this.requireGToken();\n const gTokenStakingAddr = this.requireGTokenStaking();\n \n const registry = registryActions(registryAddr);\n const gToken = tokenActions();\n const publicClient = this.getStartPublicClient();\n \n // 1. Check prerequisites\n const ROLE_COMMUNITY = await registry(publicClient).ROLE_COMMUNITY();\n const hasCommunity = await registry(publicClient).hasRole({\n user: this.getAddress(),\n roleId: ROLE_COMMUNITY\n });\n \n if (!hasCommunity) {\n throw new Error('Must have ROLE_COMMUNITY before registering as SuperPaymaster operator');\n }\n \n // 2. Check if already has role\n const ROLE_PAYMASTER_SUPER = await registry(publicClient).ROLE_PAYMASTER_SUPER();\n const hasSuper = await registry(publicClient).hasRole({\n user: this.getAddress(),\n roleId: ROLE_PAYMASTER_SUPER\n });\n \n if (hasSuper) {\n // Still handle deposit if requested\n if (params?.depositAmount) {\n return this.depositCollateral(params.depositAmount, options);\n }\n throw new Error('Already registered as SuperPaymaster operator');\n }\n \n // 3. Prepare stake amount (default 50 GToken as per Registry config)\n const stakeAmount = params?.stakeAmount || parseEther('50');\n \n // 4. Check and approve GToken to GTokenStaking\n const allowance = await gToken(publicClient).allowance({\n token: gTokenAddr,\n owner: this.getAddress(),\n spender: gTokenStakingAddr\n });\n \n if (allowance < stakeAmount) {\n const approveHash = await gToken(this.client).approve({\n token: gTokenAddr,\n spender: gTokenStakingAddr,\n amount: stakeAmount * 2n, // Approve 2x for future use\n account: options?.account\n });\n await (publicClient as any).waitForTransactionReceipt({ hash: approveHash });\n }\n \n // 5. Register ROLE_PAYMASTER_SUPER\n const registerHash = await registry(this.client).registerRoleSelf({\n roleId: ROLE_PAYMASTER_SUPER,\n data: '0x', // SuperPaymaster role doesn't need special data\n account: options?.account\n });\n \n // Wait for registration to complete\n await (publicClient as any).waitForTransactionReceipt({ hash: registerHash });\n \n // 6. Optional: Deposit collateral to SuperPaymaster\n if (params?.depositAmount) {\n await this.depositCollateral(params.depositAmount, options);\n }\n \n return registerHash;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Deploy a new Paymaster V4 and Register as AOA Operator (one-stop API).\n * This method handles:\n * 1. Checks prerequisites (ROLE_COMMUNITY)\n * 2. Predicts new Paymaster address\n * 3. Deploys Paymaster V4 via Factory\n * 4. Registers ROLE_PAYMASTER_AOA with staking\n * \n * @param params Deployment parameters\n * @param options Transaction options\n * @returns Object containing new paymaster address and transaction hashes\n */\n async deployAndRegisterPaymasterV4(params?: {\n stakeAmount?: bigint; // Optional, defaults to 30 GToken (Registry requirement for AOA)\n version?: string; // Optional, defaults to Factory default or V4.0.0\n salt?: bigint; // Optional, for deterministic deployment\n priceFeed?: Address;\n }, options?: TransactionOptions): Promise<{ \n paymasterAddress: Address; \n deployHash: Hash; \n registerHash: Hash;\n }> {\n try {\n const registryAddr = this.requireRegistry();\n const gTokenAddr = this.requireGToken();\n const gTokenStakingAddr = this.requireGTokenStaking();\n const factoryAddr = this.requirePaymasterFactory();\n \n const registry = registryActions(registryAddr);\n const gToken = tokenActions();\n const factory = paymasterFactoryActions(factoryAddr);\n const publicClient = this.getStartPublicClient();\n \n const account = options?.account || this.client.account || this.getAddress();\n const accountAddr = typeof account === 'string' ? account : account.address;\n\n // 1. Check prerequisites (ROLE_COMMUNITY)\n const ROLE_COMMUNITY = await registry(publicClient).ROLE_COMMUNITY();\n const hasCommunity = await registry(publicClient).hasRole({\n user: accountAddr,\n roleId: ROLE_COMMUNITY\n });\n \n if (!hasCommunity) {\n throw new Error('Must have ROLE_COMMUNITY before deploying Paymaster V4');\n }\n\n // 2. Deployment (Idempotent Check)\n const existingPaymaster = await factory(publicClient).getPaymaster({ owner: accountAddr });\n let deployHash: Hash = '0x0000000000000000000000000000000000000000000000000000000000000000';\n let paymasterAddress: Address;\n\n if (existingPaymaster && existingPaymaster !== '0x0000000000000000000000000000000000000000') {\n console.log(` ℹ️ Paymaster already deployed at: ${existingPaymaster}`);\n paymasterAddress = existingPaymaster;\n } else {\n console.log(' 🛠️ Deploying Paymaster V4 with args:', {\n entryPoint: this.requireEntryPoint(),\n owner: accountAddr,\n priceFeed: this.ethUsdPriceFeed,\n factory: factoryAddr\n });\n\n const { encodeFunctionData } = await import('viem');\n const initData = encodeFunctionData({\n abi: PaymasterABI,\n functionName: 'initialize',\n args: [\n this.requireEntryPoint(), // EntryPoint v0.7\n accountAddr,\n accountAddr, // Treasury defaults to owner\n this.ethUsdPriceFeed,\n 200n, // serviceFeeRate (2%)\n parseEther('0.1'), // maxGasCostCap\n 3600n // priceStalenessThreshold (1 hour)\n ]\n });\n\n deployHash = await factory(this.client).deployPaymaster({\n version: params?.version, \n initData,\n account\n });\n \n await (publicClient as any).waitForTransactionReceipt({ hash: deployHash });\n \n paymasterAddress = await factory(publicClient).getPaymaster({ owner: accountAddr });\n }\n \n if (!paymasterAddress || paymasterAddress === '0x0000000000000000000000000000000000000000') {\n throw new Error('Failed to retrieve Paymaster address from Factory');\n }\n\n // 3. Register ROLE_PAYMASTER_AOA\n const ROLE_PAYMASTER_AOA = await registry(publicClient).ROLE_PAYMASTER_AOA();\n const hasAOA = await registry(publicClient).hasRole({\n user: accountAddr,\n roleId: ROLE_PAYMASTER_AOA\n });\n\n if (hasAOA) {\n return { paymasterAddress, deployHash, registerHash: '0x0000000000000000000000000000000000000000000000000000000000000000' };\n }\n\n const stakeAmount = params?.stakeAmount || parseEther('30');\n \n const allowance = await gToken(publicClient).allowance({\n token: gTokenAddr,\n owner: accountAddr,\n spender: gTokenStakingAddr\n });\n \n if (allowance < stakeAmount) {\n const approveHash = await gToken(this.client).approve({\n token: gTokenAddr,\n spender: gTokenStakingAddr,\n amount: stakeAmount * 2n,\n account: account\n });\n await (publicClient as any).waitForTransactionReceipt({ hash: approveHash });\n }\n\n const { encodeAbiParameters, parseAbiParameters } = await import('viem');\n let roleData: Hash = '0x';\n if (stakeAmount > 0) {\n roleData = encodeAbiParameters(\n parseAbiParameters('uint256'),\n [stakeAmount]\n ) as Hash;\n }\n\n const registerHash = await registry(this.client).registerRoleSelf({\n roleId: ROLE_PAYMASTER_AOA,\n data: roleData,\n account: account\n });\n \n await (publicClient as any).waitForTransactionReceipt({ hash: registerHash });\n\n return {\n paymasterAddress,\n deployHash,\n registerHash\n };\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Deposit collateral (aPNTs/GToken) to SuperPaymaster.\n * This is a helper method used by registerAsSuperPaymasterOperator.\n */\n async depositCollateral(amount: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n const pm = superPaymasterActions(this.superPaymasterAddress);\n const publicClient = this.getStartPublicClient();\n \n // V3.7: Dynamically fetch the token expected by SuperPaymaster\n const depositToken = await pm(publicClient).APNTS_TOKEN();\n const token = tokenActions();\n \n // Approve SuperPaymaster to spend the token (usually aPNTs on Sepolia)\n const allowance = await token(publicClient).allowance({\n token: depositToken,\n owner: this.getAddress(),\n spender: this.superPaymasterAddress\n });\n \n if (allowance < amount) {\n const approveHash = await token(this.client).approve({\n token: depositToken,\n spender: this.superPaymasterAddress,\n amount,\n account: options?.account\n });\n await (publicClient as any).waitForTransactionReceipt({ hash: approveHash });\n }\n \n // Deposit to SuperPaymaster\n return pm(this.client).deposit({\n amount,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Configure operator parameters (Token, Treasury).\n * Exchange rate is now read live from xPNTsToken.exchangeRate() at runtime.\n * If parameters are undefined, existing values are preserved.\n */\n async configureOperator(\n xPNTsToken?: Address,\n treasury?: Address,\n options?: TransactionOptions\n ): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n const publicClient = this.getStartPublicClient();\n\n // Fetch current config to preserve missing values\n const currentConfig = await sp(publicClient).operators({ operator: this.getAddress() });\n\n const currentToken = currentConfig.xPNTsToken;\n const currentTreasury = currentConfig.treasury;\n\n return await sp(this.client).configureOperator({\n xPNTsToken: xPNTsToken || currentToken,\n opTreasury: treasury || currentTreasury,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async withdrawCollateral(to: Address, amount: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).withdrawTo({\n to,\n amount,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async isOperator(operator: Address): Promise<boolean> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n const config = await sp(this.getStartPublicClient()).operators({ operator });\n return config.isConfigured;\n } catch (error) {\n return false;\n }\n }\n\n async getOperatorDetails(operator?: Address): Promise<any> {\n try {\n const target = operator || this.getAddress();\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.getStartPublicClient()).operators({ operator: target });\n } catch (error) {\n throw error;\n }\n }\n\n async initiateExit(options?: TransactionOptions): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).unlockStake({\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async withdrawStake(to: Address, options?: TransactionOptions): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).withdrawStake({\n to,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 3. 支付代币管理 (基于 PaymasterActions)\n // ========================================\n\n async addGasToken(token: Address, price: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n const pm = paymasterActions(this.superPaymasterAddress);\n return await pm(this.client).setTokenPrice({\n token,\n price,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async getTokenPrice(token: Address): Promise<bigint> {\n try {\n const pm = paymasterActions(this.superPaymasterAddress);\n return await pm(this.getStartPublicClient()).tokenPrices({ token });\n } catch (error) {\n throw error;\n }\n }\n\n async setupPaymasterDeposit(params: {\n paymaster: Address;\n user: Address;\n token: Address;\n amount: bigint;\n }, options?: TransactionOptions): Promise<Hash> {\n try {\n const pm = paymasterActions(params.paymaster);\n return await pm(this.client).depositFor({\n user: params.user,\n token: params.token,\n amount: params.amount,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n}\n","import { type Address, type Hash, type Hex } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions } from '@aastar/core';\nimport { dvtActions, aggregatorActions, superPaymasterActions } from '@aastar/core';\n\nexport interface ProtocolClientConfig extends ClientConfig {\n dvtValidatorAddress: Address; // The DVT Validator contract (Governance)\n blsAggregatorAddress?: Address; // Optional BLS Aggregator\n superPaymasterAddress?: Address; // For Global Params\n}\n\nexport enum ProposalState {\n Pending = 0,\n Active = 1,\n Canceled = 2,\n Defeated = 3,\n Succeeded = 4,\n Queued = 5,\n Expired = 6,\n Executed = 7\n}\n\n/**\n * Client for Protocol Governors and Validators (Infrastructure)\n */\nexport class ProtocolClient extends BaseClient {\n public dvtValidatorAddress: Address;\n public blsAggregatorAddress?: Address;\n public superPaymasterAddress?: Address;\n\n constructor(config: ProtocolClientConfig) {\n super(config);\n this.dvtValidatorAddress = config.dvtValidatorAddress;\n this.blsAggregatorAddress = config.blsAggregatorAddress;\n this.superPaymasterAddress = config.superPaymasterAddress;\n }\n\n // ========================================\n // 1. 提案管理 (DVT)\n // ========================================\n\n /**\n * Create a new proposal\n */\n async createProposal(target: Address, calldata: Hex, description: string, options?: TransactionOptions): Promise<Hash> {\n try {\n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n \n // Mapping general \"createProposal\" to \"createSlashProposal\" for now\n // Assuming Governance uses Validator logic or this Client is for Slash.\n // Using createSlashProposal as the available action.\n return await dvt.createSlashProposal({\n operator: target,\n level: 1, // Default level\n reason: description,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async signProposal(proposalId: bigint, signature: Hex = '0x', options?: TransactionOptions): Promise<Hash> {\n try {\n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n return await dvt.signSlashProposal({\n proposalId,\n signature,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Execute a proposal with collected signatures\n */\n async executeWithProof(proposalId: bigint, signatures: Hex[], options?: TransactionOptions): Promise<Hash> {\n try {\n // Mock proof generation logic or placeholder\n const proof = '0x' as Hex; \n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n \n return await dvt.executeSlashWithProof({\n proposalId,\n repUsers: [], // Needs real data in production\n newScores: [],\n epoch: 0n,\n proof,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 2. 验证器管理 / BLS\n // ========================================\n\n async registerBLSKey(publicKey: Hex, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.blsAggregatorAddress) {\n throw new Error('BLS Aggregator address required for this client');\n }\n // Aggregator actions now handle the type internally or via mapping\n const agg = aggregatorActions(this.blsAggregatorAddress)(this.client);\n \n return await agg.registerBLSPublicKey({\n validator: this.getAddress(),\n publicKey,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 3. 全局参数管理 (Admin)\n // ========================================\n\n async setProtocolFee(bps: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.superPaymasterAddress) {\n throw new Error('SuperPaymaster address required for this client');\n }\n const sp = superPaymasterActions(this.superPaymasterAddress);\n \n return await sp(this.client).setProtocolFee({\n newFeeBPS: bps,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async setTreasury(treasury: Address, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.superPaymasterAddress) {\n throw new Error('SuperPaymaster address required for this client');\n }\n const sp = superPaymasterActions(this.superPaymasterAddress);\n \n return await sp(this.client).setTreasury({\n treasury,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n}\n","import { type Address, type Hash, type Hex, parseEther } from 'viem';\nimport { type TransactionOptions } from '@aastar/core';\nimport { PaymasterOperatorClient, type OperatorClientConfig } from './PaymasterOperatorClient.js';\nimport { tokenActions, registryActions } from '@aastar/core'; // L2/L1 Actions\n\nexport interface OperatorStatus {\n isConfigured: boolean;\n isActive: boolean;\n balance: bigint;\n}\n\n/**\n * OperatorLifecycle - L3 Pattern\n * \n * Responsibilities:\n * 1. Managing the complete lifecycle of a Paymaster Operator\n * 2. Unifying setup (onboard), operation (config), and exit (withdraw)\n */\nexport class OperatorLifecycle extends PaymasterOperatorClient {\n\n constructor(config: OperatorClientConfig) {\n super(config);\n }\n\n // ===========================================\n // 1. Setup Phase (Onboarding)\n // ===========================================\n\n /**\n * Check if the account is ready to become an operator\n * (e.g., has GToken, has ROLE_COMMUNITY, etc.)\n */\n async checkReadiness(): Promise<OperatorStatus> {\n const isOp = await this.isOperator(this.getAddress());\n // For SuperPaymaster, balance is 'aPNTsBalance' (Collateral)\n const details = await this.getOperatorDetails();\n const balance = details.aPNTsBalance || 0n;\n \n return {\n isConfigured: isOp,\n isActive: isOp, // Simplification\n balance\n };\n }\n\n /**\n * One-click Setup: Register + Deposit + Deploy Node\n * Wraps existing registerAsSuperPaymasterOperator or deployAndRegisterPaymasterV4\n */\n async setupNode(params: {\n type: 'V4' | 'SUPER';\n stakeAmount?: bigint;\n depositAmount?: bigint;\n }, options?: TransactionOptions): Promise<Hash[]> {\n const hashes: Hash[] = [];\n\n if (params.type === 'SUPER') {\n const h = await this.registerAsSuperPaymasterOperator({\n stakeAmount: params.stakeAmount,\n depositAmount: params.depositAmount\n }, options);\n hashes.push(h);\n\n // Fetch Token Address and Configure\n const factory = await import('@aastar/core').then(m => m.xPNTsFactoryActions(this.xpntsFactory!)(this.getStartPublicClient()));\n const token = await factory.getTokenAddress({ community: this.getAddress() });\n \n if (token && token !== '0x0000000000000000000000000000000000000000') {\n const hConfig = await this.configureOperator(\n token,\n this.getAddress(), // Default treasury to self\n options\n );\n hashes.push(hConfig);\n }\n } else {\n const result = await this.deployAndRegisterPaymasterV4({\n stakeAmount: params.stakeAmount\n }, options);\n hashes.push(result.deployHash);\n hashes.push(result.registerHash);\n }\n\n return hashes;\n }\n\n // ===========================================\n // 2. Operational Phase (Config & Funds)\n // ===========================================\n\n // Inherits: addGasToken, configureOperator, depositCollateral from PaymasterOperatorClient\n\n async getOperatorStats(): Promise<any> {\n return await this.getOperatorDetails();\n }\n\n // ===========================================\n // 3. Exit Phase (Withdraw & Leave)\n // ===========================================\n\n /**\n * Start the exit process: Unstake from Registry/SuperPaymaster and Unlock funds\n */\n async initiateExit(options?: TransactionOptions): Promise<Hash> {\n // 1. Unlock Stake from SuperPaymaster (if applicable)\n return await super.initiateExit(options);\n }\n\n /**\n * Finalize exit: Withdraw all funds (Collateral + Rewards)\n */\n async withdrawAllFunds(to?: Address, options?: TransactionOptions): Promise<Hash[]> {\n const recipient = to || this.getAddress();\n const hashes: Hash[] = [];\n\n // 1. Withdraw Collateral from SuperPaymaster (if any)\n // Note: We need to know the balance to withdraw exact amount.\n // For current L3 pattern, we assume the user tracks it or we fetch it.\n const stats = await this.checkReadiness();\n if (stats.balance > 0n) {\n const hCol = await this.withdrawCollateral(recipient, stats.balance, options);\n hashes.push(hCol);\n }\n\n // 2. Exit Role in Registry (Unstake GToken)\n // This will fail if lock duration > 0 and not yet cooldown.\n // Or it will initiate cooldown.\n const client = this.getStartPublicClient();\n const registry = registryActions(this.registryAddress as Address); // Use local registry address\n const registryWriter = registryActions(this.registryAddress as Address)(this.client);\n \n // Check if we have the role\n // For Super Operator\n const ROLE_PAYMASTER_SUPER = await registry(client).ROLE_PAYMASTER_SUPER();\n const hasRole = await registry(client).hasRole({ user: this.getAddress(), roleId: ROLE_PAYMASTER_SUPER });\n \n if (hasRole) {\n const hExit = await registryWriter.exitRole({ roleId: ROLE_PAYMASTER_SUPER, account: options?.account });\n hashes.push(hExit);\n }\n\n return hashes;\n }\n\n // Helper: Get GToken Balance\n private async getTokenBalance(): Promise<bigint> {\n if (!this.tokenAddress) return 0n;\n const token = tokenActions()(this.getStartPublicClient());\n return await token.balanceOf({ token: this.tokenAddress, account: this.getAddress() });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { SimpleAccountFactoryABI } from './chunk-6QYXGMCR.js';
1
+ import { SimpleAccountFactoryABI } from './chunk-M5WFKETT.js';
2
2
  import { http, createWalletClient, encodeAbiParameters, keccak256, encodeFunctionData, concatHex } from 'viem';
3
3
  import { privateKeyToAccount } from 'viem/accounts';
4
4
 
@@ -118,5 +118,5 @@ async function toSimpleSmartAccount(parameters) {
118
118
  }
119
119
 
120
120
  export { UserOpClient, createEOAWalletClient, getUserOpHash, packUserOpLimits, toSimpleSmartAccount };
121
- //# sourceMappingURL=chunk-4EZD7LPE.js.map
122
- //# sourceMappingURL=chunk-4EZD7LPE.js.map
121
+ //# sourceMappingURL=chunk-E4CQFW75.js.map
122
+ //# sourceMappingURL=chunk-E4CQFW75.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../account/src/eoa.ts","../../account/src/index.ts","../../account/src/accounts/simple.ts"],"names":[],"mappings":"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","file":"chunk-4EZD7LPE.js","sourcesContent":["import { type WalletClient, type PublicClient, type Address, type Chain, type Transport, type Hash, type Hex, createWalletClient, http } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\n\nexport type EOAWalletClient = WalletClient & {\n sendTransaction: (args: { to: Address, value?: bigint, data?: Hex }) => Promise<Hash>;\n getAddress: () => Address;\n};\n\nexport const createEOAWalletClient = (\n privateKey: Hex, \n chain: Chain, \n transport: Transport = http()\n): EOAWalletClient => {\n const account = privateKeyToAccount(privateKey);\n const client = createWalletClient({\n account,\n chain,\n transport\n });\n\n return Object.assign(client, {\n async sendTransaction(args: { to: Address, value?: bigint, data?: Hex }) {\n return client.sendTransaction({\n ...args,\n account,\n chain\n });\n },\n getAddress: () => account.address\n }) as EOAWalletClient;\n};\n","import { type Hex, type Address, encodeAbiParameters, keccak256 } from 'viem';\n\nexport * from './eoa.js';\nexport * from './accounts/simple.js';\n\n/**\n * Common Pack Logic for v0.7 UserOperations\n */\nexport function packUserOpLimits(high: bigint, low: bigint): Hex {\n return `0x${((high << 128n) | low).toString(16).padStart(64, '0')}` as Hex;\n}\n\n/**\n * Local implementation of EntryPoint v0.7 getUserOpHash\n */\nexport function getUserOpHash(op: any, ep: Address, chainId: number): Hex {\n const packed = encodeAbiParameters(\n [\n { type: 'address' }, { type: 'uint256' }, { type: 'bytes32' }, { type: 'bytes32' },\n { type: 'bytes32' }, { type: 'uint256' }, { type: 'bytes32' }, { type: 'bytes32' }\n ],\n [\n op.sender, BigInt(op.nonce), \n keccak256(op.initCode && op.initCode !== \"0x\" ? op.initCode : '0x'), \n keccak256(op.callData),\n op.accountGasLimits, BigInt(op.preVerificationGas), op.gasFees,\n keccak256(op.paymasterAndData)\n ]\n );\n const enc = encodeAbiParameters(\n [{ type: 'bytes32' }, { type: 'address' }, { type: 'uint256' }],\n [keccak256(packed), ep, BigInt(chainId)]\n );\n return keccak256(enc);\n}\n\n/**\n * UserOperation Client for handling high-level flows\n */\nexport class UserOpClient {\n static async estimateGas(bundler: any, op: any, entryPoint: Address) {\n return bundler.request({\n method: 'eth_estimateUserOperationGas',\n params: [op, entryPoint]\n });\n }\n\n static async sendUserOp(bundler: any, op: any, entryPoint: Address) {\n return bundler.request({\n method: 'eth_sendUserOperation',\n params: [op, entryPoint]\n });\n }\n\n static async getReceipt(bundler: any, hash: Hex) {\n return bundler.request({\n method: 'eth_getUserOperationReceipt',\n params: [hash]\n });\n }\n}\n","import { \n type Address, \n type Hex, \n type LocalAccount, \n type SignableMessage, \n type TypedDataDefinition,\n type Hash,\n concatHex, \n encodeFunctionData, \n keccak256,\n} from 'viem';\nimport { SimpleAccountFactoryABI, type PublicClient } from '@aastar/core';\nimport { getUserOpHash } from '../index.js';\n\nexport type SimpleSmartAccount = LocalAccount & {\n signUserOperation: (userOp: any) => Promise<Hex>;\n getInitCode: () => Promise<Hex>;\n getDummySignature: () => Promise<Hex>;\n entryPoint: Address;\n};\n\nexport async function toSimpleSmartAccount(parameters: {\n client: any;\n owner: LocalAccount;\n factoryAddress: Address;\n entryPoint: { address: Address; version: '0.6' | '0.7' };\n salt?: bigint;\n index?: bigint;\n}): Promise<SimpleSmartAccount> {\n const { client, owner, factoryAddress, entryPoint, index = 0n, salt = 0n } = parameters;\n \n // Calculate initCode\n const factoryData = encodeFunctionData({\n abi: SimpleAccountFactoryABI,\n functionName: 'createAccount',\n args: [owner.address, salt]\n });\n const initCode = concatHex([factoryAddress, factoryData]);\n\n // Calculate counterfactual address\n const address = await client.readContract({\n address: factoryAddress,\n abi: SimpleAccountFactoryABI,\n functionName: 'getAddress',\n args: [owner.address, salt]\n });\n\n return {\n address,\n publicKey: owner.address,\n source: 'custom', \n type: 'local',\n entryPoint: entryPoint.address,\n \n async signMessage({ message }: { message: SignableMessage }): Promise<Hex> {\n // validating signature for smart account usually involves EIP-1271, \n // but here we just sign with owner for SimpleAccount which validates owner sig\n return owner.signMessage({ message });\n },\n\n async signTypedData(typedData: TypedDataDefinition): Promise<Hex> {\n return owner.signTypedData(typedData);\n },\n\n async signTransaction(transaction: any): Promise<Hex> {\n throw new Error('Smart Accounts cannot sign transactions directly. Use UserOperations.');\n },\n \n async signUserOperation(userOp: any): Promise<Hex> {\n const chainId = client.chain?.id || 31337; // Default to local anvil if not found\n const hash = getUserOpHash(userOp, entryPoint.address, chainId);\n return owner.signMessage({ message: { raw: hash } });\n },\n \n async getInitCode() {\n return initCode;\n },\n\n async getDummySignature() {\n return '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff';\n }\n\n } as any as SimpleSmartAccount;\n}\n"]}
1
+ {"version":3,"sources":["../../account/src/eoa.ts","../../account/src/index.ts","../../account/src/accounts/simple.ts"],"names":[],"mappings":"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","file":"chunk-E4CQFW75.js","sourcesContent":["import { type WalletClient, type PublicClient, type Address, type Chain, type Transport, type Hash, type Hex, createWalletClient, http } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\n\nexport type EOAWalletClient = WalletClient & {\n sendTransaction: (args: { to: Address, value?: bigint, data?: Hex }) => Promise<Hash>;\n getAddress: () => Address;\n};\n\nexport const createEOAWalletClient = (\n privateKey: Hex, \n chain: Chain, \n transport: Transport = http()\n): EOAWalletClient => {\n const account = privateKeyToAccount(privateKey);\n const client = createWalletClient({\n account,\n chain,\n transport\n });\n\n return Object.assign(client, {\n async sendTransaction(args: { to: Address, value?: bigint, data?: Hex }) {\n return client.sendTransaction({\n ...args,\n account,\n chain\n });\n },\n getAddress: () => account.address\n }) as EOAWalletClient;\n};\n","import { type Hex, type Address, encodeAbiParameters, keccak256 } from 'viem';\n\nexport * from './eoa.js';\nexport * from './accounts/simple.js';\n\n/**\n * Common Pack Logic for v0.7 UserOperations\n */\nexport function packUserOpLimits(high: bigint, low: bigint): Hex {\n return `0x${((high << 128n) | low).toString(16).padStart(64, '0')}` as Hex;\n}\n\n/**\n * Local implementation of EntryPoint v0.7 getUserOpHash\n */\nexport function getUserOpHash(op: any, ep: Address, chainId: number): Hex {\n const packed = encodeAbiParameters(\n [\n { type: 'address' }, { type: 'uint256' }, { type: 'bytes32' }, { type: 'bytes32' },\n { type: 'bytes32' }, { type: 'uint256' }, { type: 'bytes32' }, { type: 'bytes32' }\n ],\n [\n op.sender, BigInt(op.nonce), \n keccak256(op.initCode && op.initCode !== \"0x\" ? op.initCode : '0x'), \n keccak256(op.callData),\n op.accountGasLimits, BigInt(op.preVerificationGas), op.gasFees,\n keccak256(op.paymasterAndData)\n ]\n );\n const enc = encodeAbiParameters(\n [{ type: 'bytes32' }, { type: 'address' }, { type: 'uint256' }],\n [keccak256(packed), ep, BigInt(chainId)]\n );\n return keccak256(enc);\n}\n\n/**\n * UserOperation Client for handling high-level flows\n */\nexport class UserOpClient {\n static async estimateGas(bundler: any, op: any, entryPoint: Address) {\n return bundler.request({\n method: 'eth_estimateUserOperationGas',\n params: [op, entryPoint]\n });\n }\n\n static async sendUserOp(bundler: any, op: any, entryPoint: Address) {\n return bundler.request({\n method: 'eth_sendUserOperation',\n params: [op, entryPoint]\n });\n }\n\n static async getReceipt(bundler: any, hash: Hex) {\n return bundler.request({\n method: 'eth_getUserOperationReceipt',\n params: [hash]\n });\n }\n}\n","import { \n type Address, \n type Hex, \n type LocalAccount, \n type SignableMessage, \n type TypedDataDefinition,\n type Hash,\n concatHex, \n encodeFunctionData, \n keccak256,\n} from 'viem';\nimport { SimpleAccountFactoryABI, type PublicClient } from '@aastar/core';\nimport { getUserOpHash } from '../index.js';\n\nexport type SimpleSmartAccount = LocalAccount & {\n signUserOperation: (userOp: any) => Promise<Hex>;\n getInitCode: () => Promise<Hex>;\n getDummySignature: () => Promise<Hex>;\n entryPoint: Address;\n};\n\nexport async function toSimpleSmartAccount(parameters: {\n client: any;\n owner: LocalAccount;\n factoryAddress: Address;\n entryPoint: { address: Address; version: '0.6' | '0.7' };\n salt?: bigint;\n index?: bigint;\n}): Promise<SimpleSmartAccount> {\n const { client, owner, factoryAddress, entryPoint, index = 0n, salt = 0n } = parameters;\n \n // Calculate initCode\n const factoryData = encodeFunctionData({\n abi: SimpleAccountFactoryABI,\n functionName: 'createAccount',\n args: [owner.address, salt]\n });\n const initCode = concatHex([factoryAddress, factoryData]);\n\n // Calculate counterfactual address\n const address = await client.readContract({\n address: factoryAddress,\n abi: SimpleAccountFactoryABI,\n functionName: 'getAddress',\n args: [owner.address, salt]\n });\n\n return {\n address,\n publicKey: owner.address,\n source: 'custom', \n type: 'local',\n entryPoint: entryPoint.address,\n \n async signMessage({ message }: { message: SignableMessage }): Promise<Hex> {\n // validating signature for smart account usually involves EIP-1271, \n // but here we just sign with owner for SimpleAccount which validates owner sig\n return owner.signMessage({ message });\n },\n\n async signTypedData(typedData: TypedDataDefinition): Promise<Hex> {\n return owner.signTypedData(typedData);\n },\n\n async signTransaction(transaction: any): Promise<Hex> {\n throw new Error('Smart Accounts cannot sign transactions directly. Use UserOperations.');\n },\n \n async signUserOperation(userOp: any): Promise<Hex> {\n const chainId = client.chain?.id || 31337; // Default to local anvil if not found\n const hash = getUserOpHash(userOp, entryPoint.address, chainId);\n return owner.signMessage({ message: { raw: hash } });\n },\n \n async getInitCode() {\n return initCode;\n },\n\n async getDummySignature() {\n return '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff';\n }\n\n } as any as SimpleSmartAccount;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { channelActions } from './chunk-6QYXGMCR.js';
1
+ import { channelActions } from './chunk-M5WFKETT.js';
2
2
 
3
3
  // ../channel/src/voucher.ts
4
4
  var VOUCHER_TYPES = {
@@ -109,5 +109,5 @@ var ChannelClient = class {
109
109
  };
110
110
 
111
111
  export { ChannelClient, VOUCHER_TYPES, getVoucherDomain, signVoucher };
112
- //# sourceMappingURL=chunk-LXWIPTPX.js.map
113
- //# sourceMappingURL=chunk-LXWIPTPX.js.map
112
+ //# sourceMappingURL=chunk-ENSMYCU6.js.map
113
+ //# sourceMappingURL=chunk-ENSMYCU6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../channel/src/voucher.ts","../../channel/src/ChannelClient.ts"],"names":[],"mappings":"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","file":"chunk-LXWIPTPX.js","sourcesContent":["import { type Address, type Hex, type WalletClient } from 'viem';\n\nexport const VOUCHER_TYPES = {\n Voucher: [\n { name: 'channelId', type: 'bytes32' },\n { name: 'cumulativeAmount', type: 'uint128' },\n ],\n} as const;\n\nexport function getVoucherDomain(chainId: number, verifyingContract: Address) {\n return {\n name: 'MicroPaymentChannel',\n version: '1.0.0',\n chainId,\n verifyingContract,\n };\n}\n\nexport async function signVoucher(\n walletClient: WalletClient,\n params: {\n channelId: Hex;\n cumulativeAmount: bigint;\n chainId: number;\n verifyingContract: Address;\n }\n): Promise<Hex> {\n const domain = getVoucherDomain(params.chainId, params.verifyingContract);\n\n const account = walletClient.account;\n if (!account) {\n throw new Error('WalletClient must have an account');\n }\n\n return walletClient.signTypedData({\n account,\n domain,\n types: VOUCHER_TYPES,\n primaryType: 'Voucher',\n message: {\n channelId: params.channelId,\n cumulativeAmount: params.cumulativeAmount,\n },\n });\n}\n","import { type Address, type Hex, type Hash, type PublicClient, type WalletClient } from 'viem';\nimport { channelActions, type ChannelState } from '@aastar/core';\nimport type { SignedVoucher, ChannelConfig } from './types.js';\nimport { signVoucher } from './voucher.js';\n\nexport type ChannelClientConfig = {\n publicClient: PublicClient;\n walletClient: WalletClient;\n channelAddress: Address;\n chainId: number;\n};\n\nexport class ChannelClient {\n private readonly readActions;\n private readonly writeActions;\n private readonly config: ChannelClientConfig;\n\n constructor(config: ChannelClientConfig) {\n this.config = config;\n // Separate clients: publicClient for reads (no account required),\n // walletClient for writes. Unlike X402Client which is always write-first,\n // ChannelClient exposes read-heavy helpers (getChannel, verifyVoucher) that\n // callers may invoke without a wallet configured.\n this.readActions = channelActions(config.channelAddress)(config.publicClient);\n this.writeActions = channelActions(config.channelAddress)(config.walletClient);\n }\n\n async openChannel(channelConfig: ChannelConfig): Promise<Hash> {\n return this.writeActions.openChannel({\n payee: channelConfig.payee,\n token: channelConfig.token,\n deposit: channelConfig.deposit,\n salt: channelConfig.salt,\n authorizedSigner: channelConfig.authorizedSigner,\n account: this.config.walletClient.account!,\n });\n }\n\n async signVoucherOffline(channelId: Hex, cumulativeAmount: bigint): Promise<SignedVoucher> {\n const signature = await signVoucher(this.config.walletClient, {\n channelId,\n cumulativeAmount,\n chainId: this.config.chainId,\n verifyingContract: this.config.channelAddress,\n });\n\n return { channelId, cumulativeAmount, signature };\n }\n\n async settleChannel(voucher: SignedVoucher): Promise<Hash> {\n return this.writeActions.settleChannel({\n channelId: voucher.channelId,\n cumulativeAmount: voucher.cumulativeAmount,\n signature: voucher.signature,\n account: this.config.walletClient.account!,\n });\n }\n\n async closeChannel(voucher: SignedVoucher): Promise<Hash> {\n return this.writeActions.closeChannel({\n channelId: voucher.channelId,\n cumulativeAmount: voucher.cumulativeAmount,\n signature: voucher.signature,\n account: this.config.walletClient.account!,\n });\n }\n\n async topUpChannel(channelId: Hex, amount: bigint): Promise<Hash> {\n return this.writeActions.topUpChannel({\n channelId,\n amount,\n account: this.config.walletClient.account!,\n });\n }\n\n async requestClose(channelId: Hex): Promise<Hash> {\n return this.writeActions.requestCloseChannel({\n channelId,\n account: this.config.walletClient.account!,\n });\n }\n\n async withdraw(channelId: Hex): Promise<Hash> {\n return this.writeActions.withdrawChannel({\n channelId,\n account: this.config.walletClient.account!,\n });\n }\n\n async getChannelState(channelId: Hex): Promise<ChannelState> {\n return this.readActions.getChannel({ channelId });\n }\n\n async getCloseTimeout(): Promise<bigint> {\n return this.readActions.CLOSE_TIMEOUT();\n }\n\n async getVersion(): Promise<string> {\n return this.readActions.version();\n }\n}\n"]}
1
+ {"version":3,"sources":["../../channel/src/voucher.ts","../../channel/src/ChannelClient.ts"],"names":[],"mappings":"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","file":"chunk-ENSMYCU6.js","sourcesContent":["import { type Address, type Hex, type WalletClient } from 'viem';\n\nexport const VOUCHER_TYPES = {\n Voucher: [\n { name: 'channelId', type: 'bytes32' },\n { name: 'cumulativeAmount', type: 'uint128' },\n ],\n} as const;\n\nexport function getVoucherDomain(chainId: number, verifyingContract: Address) {\n return {\n name: 'MicroPaymentChannel',\n version: '1.0.0',\n chainId,\n verifyingContract,\n };\n}\n\nexport async function signVoucher(\n walletClient: WalletClient,\n params: {\n channelId: Hex;\n cumulativeAmount: bigint;\n chainId: number;\n verifyingContract: Address;\n }\n): Promise<Hex> {\n const domain = getVoucherDomain(params.chainId, params.verifyingContract);\n\n const account = walletClient.account;\n if (!account) {\n throw new Error('WalletClient must have an account');\n }\n\n return walletClient.signTypedData({\n account,\n domain,\n types: VOUCHER_TYPES,\n primaryType: 'Voucher',\n message: {\n channelId: params.channelId,\n cumulativeAmount: params.cumulativeAmount,\n },\n });\n}\n","import { type Address, type Hex, type Hash, type PublicClient, type WalletClient } from 'viem';\nimport { channelActions, type ChannelState } from '@aastar/core';\nimport type { SignedVoucher, ChannelConfig } from './types.js';\nimport { signVoucher } from './voucher.js';\n\nexport type ChannelClientConfig = {\n publicClient: PublicClient;\n walletClient: WalletClient;\n channelAddress: Address;\n chainId: number;\n};\n\nexport class ChannelClient {\n private readonly readActions;\n private readonly writeActions;\n private readonly config: ChannelClientConfig;\n\n constructor(config: ChannelClientConfig) {\n this.config = config;\n // Separate clients: publicClient for reads (no account required),\n // walletClient for writes. Unlike X402Client which is always write-first,\n // ChannelClient exposes read-heavy helpers (getChannel, verifyVoucher) that\n // callers may invoke without a wallet configured.\n this.readActions = channelActions(config.channelAddress)(config.publicClient);\n this.writeActions = channelActions(config.channelAddress)(config.walletClient);\n }\n\n async openChannel(channelConfig: ChannelConfig): Promise<Hash> {\n return this.writeActions.openChannel({\n payee: channelConfig.payee,\n token: channelConfig.token,\n deposit: channelConfig.deposit,\n salt: channelConfig.salt,\n authorizedSigner: channelConfig.authorizedSigner,\n account: this.config.walletClient.account!,\n });\n }\n\n async signVoucherOffline(channelId: Hex, cumulativeAmount: bigint): Promise<SignedVoucher> {\n const signature = await signVoucher(this.config.walletClient, {\n channelId,\n cumulativeAmount,\n chainId: this.config.chainId,\n verifyingContract: this.config.channelAddress,\n });\n\n return { channelId, cumulativeAmount, signature };\n }\n\n async settleChannel(voucher: SignedVoucher): Promise<Hash> {\n return this.writeActions.settleChannel({\n channelId: voucher.channelId,\n cumulativeAmount: voucher.cumulativeAmount,\n signature: voucher.signature,\n account: this.config.walletClient.account!,\n });\n }\n\n async closeChannel(voucher: SignedVoucher): Promise<Hash> {\n return this.writeActions.closeChannel({\n channelId: voucher.channelId,\n cumulativeAmount: voucher.cumulativeAmount,\n signature: voucher.signature,\n account: this.config.walletClient.account!,\n });\n }\n\n async topUpChannel(channelId: Hex, amount: bigint): Promise<Hash> {\n return this.writeActions.topUpChannel({\n channelId,\n amount,\n account: this.config.walletClient.account!,\n });\n }\n\n async requestClose(channelId: Hex): Promise<Hash> {\n return this.writeActions.requestCloseChannel({\n channelId,\n account: this.config.walletClient.account!,\n });\n }\n\n async withdraw(channelId: Hex): Promise<Hash> {\n return this.writeActions.withdrawChannel({\n channelId,\n account: this.config.walletClient.account!,\n });\n }\n\n async getChannelState(channelId: Hex): Promise<ChannelState> {\n return this.readActions.getChannel({ channelId });\n }\n\n async getCloseTimeout(): Promise<bigint> {\n return this.readActions.CLOSE_TIMEOUT();\n }\n\n async getVersion(): Promise<string> {\n return this.readActions.version();\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { BaseClient, registryActions } from './chunk-6QYXGMCR.js';
1
+ import { BaseClient, registryActions } from './chunk-M5WFKETT.js';
2
2
 
3
3
  // ../admin/src/ProtocolGovernance.ts
4
4
  var ProtocolGovernance = class extends BaseClient {
@@ -102,5 +102,5 @@ var ProtocolGovernance = class extends BaseClient {
102
102
  };
103
103
 
104
104
  export { ProtocolGovernance };
105
- //# sourceMappingURL=chunk-FJ7XECC5.js.map
106
- //# sourceMappingURL=chunk-FJ7XECC5.js.map
105
+ //# sourceMappingURL=chunk-EY2AJTGV.js.map
106
+ //# sourceMappingURL=chunk-EY2AJTGV.js.map