{"version":3,"sources":["../../dapp/src/ui/index.ts","../../dapp/src/ui/hooks/useCreditScore.ts","../../dapp/src/ui/hooks/useSuperPaymaster.ts","../../dapp/src/eip1193.ts","../../dapp/src/eip6963.ts"],"names":["parseAbi","useState","useEffect","createAAStarPublicClient","RegistryABI","useCallback","getSuperPaymasterMiddleware","createPublicClient","http","hashMessage","hexToBytes","hashTypedData","encodeFunctionData"],"mappings":"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","file":"dapp.cjs","sourcesContent":["\nimport { type Address, parseAbi, type WalletClient, type Hex } from 'viem';\n\nconst DVT_ABI = parseAbi([\n    'function registerValidator(bytes)',\n    'function createProposal(address, uint8, string)',\n    'function signProposal(uint256, bytes)'\n]);\n\nexport class DVTClient {\n    static async registerValidator(wallet: WalletClient, dvtAddr: Address, blsPublicKey: Hex) {\n        return wallet.writeContract({\n            address: dvtAddr,\n            abi: DVT_ABI,\n            functionName: 'registerValidator',\n            args: [blsPublicKey],\n            chain: wallet.chain\n        } as any);\n    }\n    \n    // Additional methods for proposal creation/signing would go here\n}\n","\nimport { useState, useEffect } from 'react';\nimport { createAAStarPublicClient, RegistryABI } from '@aastar/core';\nimport { type Address, type Chain, type Transport } from 'viem';\n\ntype UseCreditScoreConfig = {\n    chain: any;\n    rpcUrl?: string; // Optional if transport is provided\n    registryAddress: Address;\n    userAddress: Address;\n    transport?: any;\n};\n\nexport function useCreditScore({ chain, rpcUrl, registryAddress, userAddress }: UseCreditScoreConfig) {\n    const [creditLimit, setCreditLimit] = useState<bigint | null>(null);\n    const [loading, setLoading] = useState(false);\n\n    useEffect(() => {\n        if (!registryAddress || !userAddress || !rpcUrl) return;\n\n        const fetchCredit = async () => {\n            setLoading(true);\n            try {\n                const client = createAAStarPublicClient(rpcUrl, chain as any);\n                const limit = await client.readContract({\n                    address: registryAddress,\n                    abi: RegistryABI as any,\n                    functionName: 'getCreditLimit',\n                    args: [userAddress]\n                });\n                setCreditLimit(limit as bigint);\n            } catch (e) {\n                console.error(\"Failed to fetch credit limit:\", e);\n                setCreditLimit(0n);\n            } finally {\n                setLoading(false);\n            }\n        };\n\n        fetchCredit();\n    }, [chain, rpcUrl, registryAddress, userAddress]);\n\n    return { creditLimit, loading };\n}\n","\nimport { useState, useCallback } from 'react';\nimport { getSuperPaymasterMiddleware, type PaymasterConfig } from '@aastar/paymaster';\n\ntype UseSuperPaymasterResult = {\n    generatePaymasterAndData: (userOp: any) => Promise<string>;\n    isLoading: boolean;\n    error: Error | null;\n};\n\nexport function useSuperPaymaster(config: PaymasterConfig): UseSuperPaymasterResult {\n    const [isLoading, setIsLoading] = useState(false);\n    const [error, setError] = useState<Error | null>(null);\n\n    const generatePaymasterAndData = useCallback(async (userOp: any) => {\n        setIsLoading(true);\n        setError(null);\n        try {\n            const middleware = getSuperPaymasterMiddleware(config);\n            const result = await middleware.sponsorUserOperation({ userOperation: userOp });\n            return result.paymasterAndData as string;\n        } catch (err: any) {\n            setError(err);\n            throw err;\n        } finally {\n            setIsLoading(false);\n        }\n    }, [config.paymasterAddress, config.operator, config.verificationGasLimit, config.postOpGasLimit]);\n\n    return { generatePaymasterAndData, isLoading, error };\n}\n","/**\n * eip1193.ts — EIP-1193 compatible provider wrapping AirAccount M7.\n *\n * Intercepts eth_sendTransaction and converts it to an ERC-4337 v0.7\n * PackedUserOperation submitted to the bundler via eth_sendUserOperation.\n * All other JSON-RPC methods are forwarded to the public RPC.\n */\n\nimport {\n  createPublicClient,\n  encodeFunctionData,\n  hashMessage,\n  hashTypedData,\n  hexToBytes,\n  http,\n  type Address,\n  type Hex,\n} from \"viem\";\n\n// AirAccount execute() — ERC-4337 smart account entry point for single calls\nconst EXECUTE_ABI = [\n  {\n    name: \"execute\",\n    type: \"function\",\n    stateMutability: \"nonpayable\",\n    inputs: [\n      { name: \"dest\", type: \"address\" },\n      { name: \"value\", type: \"uint256\" },\n      { name: \"func\", type: \"bytes\" },\n    ],\n    outputs: [],\n  },\n] as const;\n\n// EntryPoint v0.7 getNonce + getUserOpHash\nconst ENTRYPOINT_ABI = [\n  {\n    name: \"getNonce\",\n    type: \"function\",\n    stateMutability: \"view\",\n    inputs: [\n      { name: \"sender\", type: \"address\" },\n      { name: \"key\", type: \"uint192\" },\n    ],\n    outputs: [{ name: \"nonce\", type: \"uint256\" }],\n  },\n  {\n    name: \"getUserOpHash\",\n    type: \"function\",\n    stateMutability: \"view\",\n    inputs: [\n      {\n        name: \"packedUserOp\",\n        type: \"tuple\",\n        components: [\n          { name: \"sender\", type: \"address\" },\n          { name: \"nonce\", type: \"uint256\" },\n          { name: \"initCode\", type: \"bytes\" },\n          { name: \"callData\", type: \"bytes\" },\n          { name: \"accountGasLimits\", type: \"bytes32\" },\n          { name: \"preVerificationGas\", type: \"uint256\" },\n          { name: \"gasFees\", type: \"bytes32\" },\n          { name: \"paymasterAndData\", type: \"bytes\" },\n          { name: \"signature\", type: \"bytes\" },\n        ],\n      },\n    ],\n    outputs: [{ type: \"bytes32\" }],\n  },\n] as const;\n\nconst DEFAULT_ENTRYPOINT = \"0x0000000071727De22E5E9d8BAf0edAc6f37da032\" as Address;\n\nexport interface AirAccountProviderConfig {\n  /** EVM chain ID */\n  chainId: number;\n  /** Public JSON-RPC URL */\n  rpcUrl: string;\n  /** ERC-4337 bundler URL */\n  bundlerUrl: string;\n  /** EntryPoint v0.7 address (defaults to canonical) */\n  entryPoint?: Address;\n  /** The user's AirAccount smart contract address */\n  accountAddress: Address;\n  /**\n   * Signs the UserOp hash and returns a 65-byte hex signature.\n   * For passkey/ECDSA, format as M7 composite validator signature.\n   */\n  signer: (userOpHash: Hex) => Promise<Hex>;\n}\n\ntype EthSendTransactionParams = {\n  from?: Address;\n  to: Address;\n  data?: Hex;\n  value?: Hex;\n  gas?: Hex;\n};\n\n/**\n * AirAccountEIP1193Provider — drop-in EIP-1193 wallet backed by an AirAccount M7 smart account.\n *\n * Usage:\n * ```ts\n * const provider = new AirAccountEIP1193Provider({\n *   chainId: 11155111,\n *   rpcUrl: 'https://rpc.sepolia.org',\n *   bundlerUrl: 'https://api.pimlico.io/v2/11155111/rpc?apikey=...',\n *   accountAddress: '0x...',\n *   signer: async (hash) => passkeySign(hash),\n * });\n * // Pass to wagmi, ethers.js BrowserProvider, or window.ethereum\n * ```\n */\nexport class AirAccountEIP1193Provider {\n  private readonly config: AirAccountProviderConfig;\n  private readonly client: ReturnType<typeof createPublicClient>;\n  private readonly listeners = new Map<string, Set<(...args: unknown[]) => void>>();\n\n  constructor(config: AirAccountProviderConfig) {\n    this.config = config;\n    this.client = createPublicClient({ transport: http(config.rpcUrl) });\n  }\n\n  async request({ method, params }: { method: string; params?: unknown[] }): Promise<unknown> {\n    switch (method) {\n      case \"eth_chainId\":\n        return `0x${this.config.chainId.toString(16)}`;\n\n      case \"eth_accounts\":\n      case \"eth_requestAccounts\":\n        return [this.config.accountAddress];\n\n      case \"eth_sendTransaction\": {\n        const tx = (params as [EthSendTransactionParams])[0];\n        return this._sendTransaction(tx);\n      }\n\n      case \"personal_sign\": {\n        // params: [hexData, address] — sign raw bytes with EIP-191 prefix\n        const [data] = params as [Hex, Address];\n        const hash = hashMessage({ raw: hexToBytes(data) });\n        return this.config.signer(hash);\n      }\n\n      case \"eth_signTypedData_v4\": {\n        // params: [address, typedDataJson] — sign EIP-712 typed data\n        const [, typedDataJson] = params as [Address, string];\n        const typedData = JSON.parse(typedDataJson) as {\n          domain: Parameters<typeof hashTypedData>[0][\"domain\"];\n          types: Parameters<typeof hashTypedData>[0][\"types\"];\n          primaryType: string;\n          message: Record<string, unknown>;\n        };\n        const hash = hashTypedData({\n          domain: typedData.domain,\n          types: typedData.types,\n          primaryType: typedData.primaryType,\n          message: typedData.message,\n        });\n        return this.config.signer(hash);\n      }\n\n      default:\n        return this._forwardToRpc(method, params);\n    }\n  }\n\n  on(event: string, listener: (...args: unknown[]) => void): this {\n    if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n    this.listeners.get(event)!.add(listener);\n    return this;\n  }\n\n  removeListener(event: string, listener: (...args: unknown[]) => void): this {\n    this.listeners.get(event)?.delete(listener);\n    return this;\n  }\n\n  // ── Private ──────────────────────────────────────────────────────\n\n  private async _sendTransaction(tx: EthSendTransactionParams): Promise<Hex> {\n    const entryPoint = this.config.entryPoint ?? DEFAULT_ENTRYPOINT;\n\n    // Encode execute(to, value, data) for the AirAccount\n    const callData = encodeFunctionData({\n      abi: EXECUTE_ABI,\n      functionName: \"execute\",\n      args: [tx.to, BigInt(tx.value ?? \"0x0\"), tx.data ?? \"0x\"],\n    });\n\n    // Fetch nonce and gas fees in parallel\n    const [nonce, feeData] = await Promise.all([\n      this.client.readContract({\n        address: entryPoint,\n        abi: ENTRYPOINT_ABI,\n        functionName: \"getNonce\",\n        args: [this.config.accountAddress, 0n],\n      }) as Promise<bigint>,\n      this.client.estimateFeesPerGas(),\n    ]);\n\n    const maxFeePerGas = feeData.maxFeePerGas ?? 1_000_000_000n;\n    const maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? 100_000_000n;\n\n    // Pack gas limits into bytes32 fields (ERC-4337 v0.7 packed format)\n    const verificationGasLimit = 200_000n;\n    const callGasLimit = BigInt(tx.gas ?? \"0x30000\");\n    const accountGasLimits = `0x${((verificationGasLimit << 128n) | callGasLimit).toString(16).padStart(64, \"0\")}` as Hex;\n    const gasFees = `0x${((maxPriorityFeePerGas << 128n) | maxFeePerGas).toString(16).padStart(64, \"0\")}` as Hex;\n\n    const userOp = {\n      sender: this.config.accountAddress,\n      nonce,\n      initCode: \"0x\" as Hex,\n      callData,\n      accountGasLimits,\n      preVerificationGas: 50_000n,\n      gasFees,\n      paymasterAndData: \"0x\" as Hex,\n      signature: \"0x\" as Hex,\n    };\n\n    // Get UserOp hash from EntryPoint\n    const userOpHash = await this.client.readContract({\n      address: entryPoint,\n      abi: ENTRYPOINT_ABI,\n      functionName: \"getUserOpHash\",\n      args: [userOp],\n    }) as Hex;\n\n    // Sign and attach\n    userOp.signature = await this.config.signer(userOpHash);\n\n    // Submit to bundler\n    const resp = await fetch(this.config.bundlerUrl, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({\n        jsonrpc: \"2.0\",\n        id: 1,\n        method: \"eth_sendUserOperation\",\n        params: [\n          {\n            sender: userOp.sender,\n            nonce: `0x${userOp.nonce.toString(16)}`,\n            initCode: userOp.initCode,\n            callData: userOp.callData,\n            accountGasLimits: userOp.accountGasLimits,\n            preVerificationGas: `0x${userOp.preVerificationGas.toString(16)}`,\n            gasFees: userOp.gasFees,\n            paymasterAndData: userOp.paymasterAndData,\n            signature: userOp.signature,\n          },\n          entryPoint,\n        ],\n      }),\n    });\n\n    const result = (await resp.json()) as { result?: Hex; error?: { message: string } };\n    if (result.error) throw new Error(result.error.message);\n    return result.result!;\n  }\n\n  private async _forwardToRpc(method: string, params?: unknown[]): Promise<unknown> {\n    const resp = await fetch(this.config.rpcUrl, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({ jsonrpc: \"2.0\", id: 1, method, params: params ?? [] }),\n    });\n    const result = (await resp.json()) as { result?: unknown; error?: { message: string } };\n    if (result.error) throw new Error(result.error.message);\n    return result.result;\n  }\n}\n","/**\n * eip6963.ts — EIP-6963 Multi Injected Provider Discovery for AirAccount.\n *\n * Announces AirAccount as an EIP-1193 wallet via the eip6963:announceProvider\n * DOM event, enabling DApps to auto-discover it without relying on window.ethereum.\n *\n * Reference: https://eips.ethereum.org/EIPS/eip-6963\n */\n\nimport type { AirAccountEIP1193Provider } from \"./eip1193.js\";\n\nexport interface EIP6963ProviderInfo {\n  /** Globally unique wallet identifier (UUID v4). Must not change across sessions. */\n  uuid: string;\n  /** Human-readable wallet name displayed in DApp UI */\n  name: string;\n  /** Wallet icon as a data URI (SVG or PNG, base64) */\n  icon: string;\n  /** Reverse-DNS identifier, e.g. \"community.aastar.airaccount\" */\n  rdns: string;\n}\n\nexport interface EIP6963ProviderDetail {\n  info: EIP6963ProviderInfo;\n  provider: AirAccountEIP1193Provider;\n}\n\n// AirAccount default icon (minimal SVG placeholder)\nconst DEFAULT_ICON =\n  \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMjQiIGZpbGw9IiMxQTFBMkUiLz48dGV4dCB4PSIxMiIgeT0iMzIiIGZvbnQtc2l6ZT0iMjQiIGZpbGw9IiNGRkYiPkFBPC90ZXh0Pjwvc3ZnPg==\";\n\n// Stable UUID for AirAccount — must not change between sessions per EIP-6963 spec\nconst AIRACCOUNT_UUID = \"d4e5f6a7-b8c9-4d0e-8f2a-3b4c5d6e7f80\";\n\n/**\n * Announce AirAccount as an EIP-6963 wallet so DApps can auto-discover it.\n *\n * Call this once at app startup. Returns a cleanup function that removes the\n * event listener when the wallet is no longer available.\n *\n * @example\n * ```ts\n * const provider = new AirAccountEIP1193Provider({ ... });\n * const cleanup = announceAirAccount(provider);\n * // later: cleanup() to stop announcing\n * ```\n */\nexport function announceAirAccount(\n  provider: AirAccountEIP1193Provider,\n  info: Partial<EIP6963ProviderInfo> = {},\n): () => void {\n  const providerDetail: EIP6963ProviderDetail = Object.freeze({\n    info: Object.freeze({\n      uuid: AIRACCOUNT_UUID,\n      name: \"AirAccount\",\n      icon: DEFAULT_ICON,\n      rdns: \"community.aastar.airaccount\",\n      ...info,\n    }),\n    provider,\n  });\n\n  const announce = () => {\n    window.dispatchEvent(\n      new CustomEvent(\"eip6963:announceProvider\", { detail: providerDetail }),\n    );\n  };\n\n  // Announce immediately so DApps already listening receive it\n  announce();\n\n  // Re-announce whenever a DApp requests wallet discovery\n  window.addEventListener(\"eip6963:requestProvider\", announce);\n\n  return () => window.removeEventListener(\"eip6963:requestProvider\", announce);\n}\n\n/**\n * Listen for EIP-6963 wallet announcements from other providers in the page.\n * Useful for composing AirAccount with MetaMask fallback, etc.\n *\n * Returns a cleanup function to stop listening.\n */\nexport function watchProviders(\n  onProvider: (detail: EIP6963ProviderDetail) => void,\n): () => void {\n  const handler = (event: Event) => {\n    onProvider((event as CustomEvent<EIP6963ProviderDetail>).detail);\n  };\n\n  window.addEventListener(\"eip6963:announceProvider\", handler);\n  // Trigger all existing wallets to re-announce\n  window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n  return () => window.removeEventListener(\"eip6963:announceProvider\", handler);\n}\n"]}