UNPKG

splitwise-solana-client

Version:

Client SDK for Splitwise Solana Settlement

122 lines (121 loc) 3.37 kB
import { Connection, PublicKey, Transaction, Commitment } from '@solana/web3.js'; import { Program, AnchorProvider } from '@project-serum/anchor'; import { EventEmitter } from 'events'; import { Settlement, SettlementEvent } from './types'; export declare class SDKError extends Error { code: string; details?: any | undefined; constructor(message: string, code: string, details?: any | undefined); } export interface SplitwiseSettlementSDK { program: Program; connection: Connection; provider: AnchorProvider; } export interface InitializeSettlementParams { splitwiseId: string; amount: number; debtorWallet: PublicKey; creditorWallet: PublicKey; tokenMint: PublicKey; expiryTimestamp: number; minPaymentAmount?: number; } export interface MakePaymentParams { settlementAccount: PublicKey; amount: number; } export interface SettlementEventData { settlementAccount: PublicKey; eventType: SettlementEvent['eventType']; data: any; } export declare class SplitwiseSettlement extends EventEmitter { private sdk; private oracleEndpoint; private oracleApiKey; private commitment; private subscriptions; constructor(sdk: SplitwiseSettlementSDK, oracleEndpoint: string | undefined, oracleApiKey: string, commitment?: Commitment); /** * Initialize a new settlement for a Splitwise debt */ initializeSettlement(params: InitializeSettlementParams): Promise<{ transaction: Transaction; signature: string; settlementAccount: PublicKey; nonce: Uint8Array<ArrayBuffer>; }>; /** * Make a payment towards a settlement */ makePayment(params: MakePaymentParams): Promise<{ transaction: Transaction; signature: string; }>; /** * Cancel a settlement */ cancelSettlement(settlementAccount: PublicKey): Promise<{ transaction: Transaction; signature: string; }>; /** * Get settlement details */ getSettlement(settlementAccount: PublicKey): Promise<Settlement>; /** * Get all settlements for a user */ getUserSettlements(userWallet: PublicKey): Promise<{ publicKey: PublicKey; account: Settlement; }[]>; /** * Monitor a settlement for changes */ private monitorSettlement; private getEventType; /** * Stop monitoring a settlement */ stopMonitoring(settlementAccount: PublicKey): Promise<void>; /** * Get or create associated token account */ private getOrCreateAssociatedTokenAccount; /** * Find settlement PDA address */ private findSettlementAddress; /** * Send and confirm transaction with retry */ private sendAndConfirmTransaction; /** * Validate settlement for payment */ private validateSettlementForPayment; /** * Validate token accounts */ private validateTokenAccounts; /** * Check if error is retryable */ private isRetryableError; /** * Handle and standardize errors */ private handleError; private sleep; private isValidAmount; /** * Get oracle verification data */ private getOracleVerification; /** * Compute commitment hash for front-running protection */ private computeCommitmentHash; }