splitwise-solana-client
Version:
Client SDK for Splitwise Solana Settlement
122 lines (121 loc) • 3.37 kB
TypeScript
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;
}