{"version":3,"sources":["../../channel/src/voucher.ts","../../channel/src/ChannelClient.ts"],"names":["channelActions"],"mappings":"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","file":"chunk-R3JHG54F.cjs","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"]}