@daimo/pay
Version:
Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.
127 lines (126 loc) • 3.65 kB
TypeScript
import { DaimoPayHydratedOrderWithOrg, DaimoPayOrder, DaimoPayOrderID, DaimoPayOrderWithOrg, DaimoPayUserMetadata, ExternalPaymentOptionsString, SolanaPublicKey } from "@daimo/pay-common";
import { Address, Hex } from "viem";
/** Payment parameters. The payment is created only after user taps pay. */
export interface PayParams {
/** App ID, for authentication. */
appId: string;
/** Destination chain ID. */
toChain: number;
/** The destination token to send. */
toToken: Address;
/**
* The amount of the token to send.
* If not provided, the user will be prompted to enter an amount.
*/
toUnits?: string;
/** The final address to transfer to or contract to call. */
toAddress: Address;
/** Calldata for final call, or empty data for transfer. */
toCallData?: Hex;
/** The intent verb, such as Pay, Deposit, or Purchase. Default: Pay */
intent?: string;
/** Payment options. By default, all are enabled. */
paymentOptions?: ExternalPaymentOptionsString[];
/** Preferred chain IDs. */
preferredChains?: number[];
/** Preferred tokens. These appear first in the token list. */
preferredTokens?: {
chain: number;
address: Address;
}[];
/** Only allow payments on these EVM chains. */
evmChains?: number[];
/** External ID. E.g. a correlation ID. */
externalId?: string;
/** Developer metadata. E.g. correlation ID. */
metadata?: DaimoPayUserMetadata;
/** The address to refund to if the payment bounces or a refund is requested. */
refundAddress?: Address;
}
export type PaymentState = {
type: "idle";
} | {
type: "preview";
order: DaimoPayOrderWithOrg;
payParamsData: PayParamsData;
} | {
type: "unhydrated";
order: DaimoPayOrderWithOrg;
} | {
type: "payment_unpaid";
order: DaimoPayHydratedOrderWithOrg;
} | {
type: "payment_started";
order: DaimoPayHydratedOrderWithOrg;
} | {
type: "payment_completed";
order: DaimoPayHydratedOrderWithOrg;
} | {
type: "payment_bounced";
order: DaimoPayHydratedOrderWithOrg;
} | {
type: "error";
order: DaimoPayOrder | undefined;
message: string;
};
export type PaymentStateType = PaymentState["type"];
export declare const initialPaymentState: PaymentState;
export type PaymentEvent = {
type: "set_pay_params";
payParams: PayParams;
} | {
type: "set_pay_id";
payId: DaimoPayOrderID;
} | {
type: "set_chosen_usd";
usd: number;
} | {
type: "hydrate_order";
refundAddress?: Address;
} | {
type: "pay_source";
} | {
type: "pay_ethereum_source";
paymentTxHash: Hex;
sourceChainId: number;
payerAddress: Address;
sourceToken: Address;
sourceAmount: bigint;
} | {
type: "pay_solana_source";
paymentTxHash: string;
sourceToken: SolanaPublicKey;
} | {
type: "preview_generated";
order: DaimoPayOrderWithOrg;
payParamsData: PayParamsData;
} | {
type: "order_loaded";
order: DaimoPayOrderWithOrg;
} | {
type: "order_hydrated";
order: DaimoPayHydratedOrderWithOrg;
} | {
type: "payment_verified";
order: DaimoPayHydratedOrderWithOrg;
} | {
type: "order_refreshed";
order: DaimoPayOrderWithOrg | DaimoPayHydratedOrderWithOrg;
} | {
type: "dest_processed";
order: DaimoPayHydratedOrderWithOrg;
} | {
type: "error";
order: DaimoPayOrder | undefined;
message: string;
} | {
type: "reset";
};
type PayParamsData = {
appId: string;
};
/**
* Master payment reducer.
*/
export declare function paymentReducer(state: PaymentState, event: PaymentEvent): PaymentState;
export {};