UNPKG

@anuragchvn-blip/mandatekit

Version:

Production-ready Web3 autopay SDK for crypto-based recurring payments using EIP-712 mandates

95 lines 3.52 kB
/** * Relayer module - Automated execution engine for pull-based payments * @module relayer */ import type { Hex, PublicClient, WalletClient, Transport, Chain } from 'viem'; import type { SignedMandate, RelayerConfig, ExecutionPlan, PaymentRecord, MandateDomain } from '../types/index.js'; /** * Relayer client interface for automated payment execution */ export interface RelayerClient { /** Schedule a mandate for automated execution */ scheduleMandate: (signedMandate: SignedMandate) => Promise<ExecutionPlan>; /** Execute a pull payment for a mandate */ executePullPayment: (mandateId: Hex) => Promise<PaymentRecord>; /** Get execution plan for a mandate */ getExecutionPlan: (signedMandate: SignedMandate, executionCount?: number) => Promise<ExecutionPlan>; /** Verify a payment record */ verifyPaymentRecord: (record: PaymentRecord) => Promise<boolean>; /** Get all pending mandates ready for execution */ getPendingMandates: () => Promise<SignedMandate[]>; /** Cancel a scheduled mandate (DEPRECATED - use cancelMandateWithProof) */ cancelMandate: (mandateId: Hex) => Promise<boolean>; /** Cancel mandate with signature proof (secure method) */ cancelMandateWithProof: (mandate: SignedMandate) => Promise<boolean>; } /** * Creates a Relayer client for automated mandate execution * * @param config - Relayer configuration * @param publicClient - Viem public client for reading blockchain state * @param walletClient - Viem wallet client for executing transactions * @param domain - EIP-712 domain configuration * @returns RelayerClient instance * * @example * ```typescript * import { createRelayerClient } from '@mandatekit/sdk/relayer'; * import { createPublicClient, createWalletClient, http } from 'viem'; * import { privateKeyToAccount } from 'viem/accounts'; * import { mainnet } from 'viem/chains'; * * const publicClient = createPublicClient({ * chain: mainnet, * transport: http(), * }); * * const account = privateKeyToAccount('0x...'); * const walletClient = createWalletClient({ * account, * chain: mainnet, * transport: http(), * }); * * const relayer = createRelayerClient( * { * rpcUrl: 'https://eth-mainnet.alchemyapi.io/v2/...', * chainId: 1, * registryAddress: '0x...', * account: account.address, * }, * publicClient, * walletClient, * { * name: 'MandateRegistry', * version: '1', * chainId: 1, * verifyingContract: '0x...', * } * ); * * // Schedule a mandate * const plan = await relayer.scheduleMandate(signedMandate); * * // Execute payment when due * const record = await relayer.executePullPayment(mandateId); * ``` */ export declare function createRelayerClient<TChain extends Chain = Chain, TTransport extends Transport = Transport>(config: RelayerConfig, _publicClient: PublicClient<TTransport, TChain>, _walletClient: WalletClient<TTransport, TChain>, domain: MandateDomain): RelayerClient; /** * Create a simple scheduler that periodically checks for pending mandates * * @param relayer - RelayerClient instance * @param intervalSeconds - Check interval in seconds * @returns Stop function to cancel the scheduler * * @example * ```typescript * const stop = createScheduler(relayer, 60); // Check every minute * * // Later, stop the scheduler * stop(); * ``` */ export declare function createScheduler(relayer: RelayerClient, intervalSeconds?: number): () => void; //# sourceMappingURL=index.d.ts.map