hypay-adapter
Version:
Provides an XRPL payment adapter.
255 lines (245 loc) • 8.21 kB
text/typescript
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 };