@anuragchvn-blip/mandatekit
Version:
Production-ready Web3 autopay SDK for crypto-based recurring payments using EIP-712 mandates
95 lines • 3.52 kB
TypeScript
/**
* 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