UNPKG

@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
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 {};