UNPKG

hypay-adapter

Version:

Provides an XRPL payment adapter.

255 lines (245 loc) 8.21 kB
import { TxResponse, Transaction } from 'xrpl'; type TransactionResult = { validated: boolean; success: boolean; submitted: boolean; resolved: boolean; txid: string | null; createdAt?: string; expiresAt?: string; code?: string; message?: string; raw?: any; }; interface ErrorResponse { code: number; message: string; data?: any; } type NETWORK_TYPES = 'LOCALNET' | 'TESTNET' | 'DEVNET' | 'MAINNET'; declare namespace WalletTypes { type Name = 'GEM' | 'XAMAN' | 'GIRRIN' | 'XRPL'; interface Connection { isReady: boolean; address: string; publicKey?: string; providerName: WalletTypes.Name; } interface connectPaymentParams { /** * Redirect URI for sign-in. * Required when using a native app. */ redirectUri?: string; } interface CreatePaymentParams { /** * Amount to send in drops (1 XRP = 1,000,000 drops) */ amount: string; /** * Address of destination. * If you prefer not to use the address provided at instantiation, use it. */ desitination?: string; /** * Optional metadata. */ meta_data?: { /** * A unique identifier for the transaction. * Useful for tracking the payment in your backend systems. */ identifier?: string; /** * A short, user-friendly instruction shown during the signing process. * Helps the user understand what they are approving. */ instruction?: string; /** * Optional structured data (e.g. memo or order details). */ blob?: Record<string, unknown>; }; } interface SignAndSubmitParams { payloadUuid: string; } interface RejectParams { id: number; reason: ErrorResponse; } interface RequestParams { method: string; params: any; } interface RespondParams { requestId: string; result?: any; error?: ErrorResponse; } interface PingParams { } interface DisconnectParams { reason: ErrorResponse; } type WalletConnectionResult = Promise<WalletTypes.Connection>; /** * If the environment is ready, return true. * If it is not a supported environment at xaman, return false and provide the signUri. */ type WalletSignAndSubmitResult = Promise<{ isReady: boolean; signUri?: string; }>; type AcknowledgedPromise = Promise<{ acknowledged: () => Promise<void>; }>; type WalletQueue<T> = { state: 'IDLE' | 'ACTIVE'; queue: T[]; }; } /** * AbstractWallet defines a unified interface for interacting with * various wallet providers such as Xaman, Gem, Girin, etc. */ declare abstract class AbstractWallet { protected networkType: NETWORK_TYPES; protected networkAddress: string; constructor(network?: NETWORK_TYPES); /** * Initialize the wallet SDK or internal state. */ abstract init(): Promise<void>; /** * Establish a connection to the wallet and return connection info. */ abstract connect(params?: WalletTypes.connectPaymentParams): WalletTypes.WalletConnectionResult; /** * create a payment transaction. */ abstract createPaymentTx(params: WalletTypes.CreatePaymentParams): Promise<string>; /** * Sign a payload or transaction using the connected wallet and submit a signed transaction to the XRP Ledger. */ abstract signAndSubmit(params: WalletTypes.SignAndSubmitParams): WalletTypes.WalletSignAndSubmitResult; /** * Check the result or status of a submitted payload. */ abstract getSubmittedTxResult(payloadUuid: string): Promise<TransactionResult>; /** * Check the result or status of a submitted transaction. */ /** * Send a general request to the wallet. */ abstract request(params: WalletTypes.RequestParams): Promise<string>; /** * Respond to a previously received request, if applicable. */ abstract respond(params: WalletTypes.RespondParams): Promise<void>; /** * Check the connection status (if supported by the provider). */ abstract ping(params?: WalletTypes.PingParams): Promise<{ pong: boolean; }>; /** * Explicitly disconnect from the wallet. */ abstract disconnect(params?: WalletTypes.DisconnectParams): Promise<void>; /** * Format a human-readable authentication message. */ abstract formatAuthMessage(params: { payload: string; origin: string; }): string; getTransactionWithTxid(txid?: string): Promise<TxResponse<Transaction>>; getCurrentFee(): Promise<{ medianFee: string; }>; } declare class XamanWallet$1 extends AbstractWallet { private destinationAddress; private connectedAddress; private xumm; private txidTopayloadUuidMapper; private authBaseUrl; private signBaseUrl; private apiKey; private apiSecret; constructor(destination: string, apiCredentials: { key: string; secret: string; network?: NETWORK_TYPES; }); init(): Promise<void>; connect(params?: WalletTypes.connectPaymentParams): WalletTypes.WalletConnectionResult; createPaymentTx({ amount, desitination, meta_data }: WalletTypes.CreatePaymentParams): Promise<string>; signAndSubmit({ payloadUuid }: WalletTypes.SignAndSubmitParams): WalletTypes.WalletSignAndSubmitResult; getSubmittedTxResult(payloadUuid: string): Promise<TransactionResult>; request({ method, params }: WalletTypes.RequestParams): Promise<string>; respond(_: WalletTypes.RespondParams): Promise<void>; ping(): Promise<{ pong: boolean; }>; disconnect(): Promise<void>; formatAuthMessage(params: { payload: string; origin: string; }): string; } declare class GemWallet$1 extends AbstractWallet { private destinationAddress; private connectedAddress; private payloadUuidToTxidMapper; private payloadMapper; constructor(destination: string); init(): Promise<void>; connect(): WalletTypes.WalletConnectionResult; createPaymentTx({ amount }: WalletTypes.CreatePaymentParams): Promise<string>; signAndSubmit({ payloadUuid }: WalletTypes.SignAndSubmitParams): WalletTypes.WalletSignAndSubmitResult; getSubmittedTxResult(payloadUuid: string): Promise<TransactionResult>; request({ method, params }: WalletTypes.RequestParams): Promise<string>; respond(_: WalletTypes.RespondParams): Promise<void>; ping(): Promise<{ pong: boolean; }>; disconnect(): Promise<void>; formatAuthMessage(params: { payload: string; origin: string; }): string; } declare class RawXRPLWallet extends AbstractWallet { private destinationAddress; private connectedAddress; private payloadUuidToTxidMapper; private payloadMapper; private client; private wallet; constructor(destination: string, secret: string, network?: NETWORK_TYPES); private getNodeUrl; init(): Promise<void>; connect(): WalletTypes.WalletConnectionResult; changeConntectedAddress(secret: string): void; createPaymentTx({ amount, desitination, meta_data }: WalletTypes.CreatePaymentParams): Promise<string>; signAndSubmit({ payloadUuid }: WalletTypes.SignAndSubmitParams): WalletTypes.WalletSignAndSubmitResult; getSubmittedTxResult(payloadUuid: string): Promise<TransactionResult>; request({ method, params }: WalletTypes.RequestParams): Promise<string>; respond(_: WalletTypes.RespondParams): Promise<void>; ping(): Promise<{ pong: boolean; }>; disconnect(): Promise<void>; formatAuthMessage(params: { payload: string; origin: string; }): string; } declare const XamanWallet: typeof XamanWallet$1; declare const GemWallet: typeof GemWallet$1; declare const XRPLWallet: typeof RawXRPLWallet; export { GemWallet, XRPLWallet, XamanWallet };