@alexasomba/paystack-inline
Version:
A strongly-typed, Promise-based TypeScript wrapper for Paystack Popup (inline.js).
125 lines • 3.9 kB
TypeScript
//#region src/index.d.ts
export interface PaystackPopGeneralOptions {
key: string;
amount: number;
email: string;
currency?: string;
ref?: string;
reference?: string;
firstName?: string;
firstname?: string;
lastName?: string;
lastname?: string;
phone?: string;
customerCode?: string;
customer_code?: string;
channels?: string[];
card?: boolean | string;
bank?: boolean | string;
paymentRequest?: string | number;
payment_request?: string | number;
paymentPage?: string | number;
payment_page?: string | number;
metadata?: Record<string, unknown>;
label?: string;
hash?: string;
order_id?: string | number;
transaction_type?: string;
language?: string;
connect_account?: string;
}
export interface PaystackPopCallbacks {
onError?: (error: {
message: string;
}) => void;
onCancel?: () => void;
onLoad?: (response: {
id: number;
customer: unknown;
accessCode: string;
}) => void;
onSuccess?: (response: {
id: number;
reference: string;
message: string;
}) => void;
onClose?: () => void;
callback?: (response: unknown) => void;
onBankTransferConfirmationPending?: () => void;
}
export interface PaystackPopSplitOptions {
subaccountCode?: string;
subaccount?: string;
split_code?: string;
split?: Record<string, unknown>;
connect_split?: string[];
bearer?: "account" | "subaccount";
transactionCharge?: string | number;
transaction_charge?: string | number;
}
export interface PaystackPopSubscriptionOptions {
planCode?: string;
plan?: string;
subscriptionCount?: number;
quantity?: number;
planInterval?: "hourly" | "daily" | "weekly" | "monthly" | "annually";
interval?: "hourly" | "daily" | "weekly" | "monthly" | "annually";
subscriptionLimit?: number | string;
invoice_limit?: number | string;
subscriptionStartDate?: string;
start_date?: string;
subscription?: string | number;
}
export interface PaystackPopNewTransactionOptions extends PaystackPopGeneralOptions, PaystackPopCallbacks, PaystackPopSplitOptions, PaystackPopSubscriptionOptions {}
export interface PaystackPopCheckoutOptions extends PaystackPopNewTransactionOptions {}
export interface PaystackPopPaymentRequestOptions extends PaystackPopNewTransactionOptions {
container: string;
loadPaystackCheckoutButton?: string;
styles?: {
theme?: "dark" | "light";
applePay?: {
width?: string;
height?: string;
borderRadius?: string;
type?: "plain" | "buy" | "donate";
locale?: string;
};
};
onElementsMount?: (elements: unknown) => void;
}
export interface PopupTransactionStatus {
status: "null" | "error" | "abandoned" | "auth" | "failed" | "success" | "pending";
id?: string;
errors?: unknown[];
response?: unknown;
checkoutUrl?: string;
}
export interface PopupTransaction {
id: string;
backgroundDiv: HTMLElement;
checkoutIframe: HTMLElement;
preCheckoutModal: HTMLElement | null;
paymentRequestContainer: HTMLElement | null;
getStatus(): PopupTransactionStatus;
}
export interface PaystackPopInstance {
newTransaction(options: PaystackPopNewTransactionOptions): PopupTransaction;
resumeTransaction(accessCode: string, callbacks?: PaystackPopCallbacks): PopupTransaction;
cancelTransaction(idOrTransaction: string | PopupTransaction): void;
preloadTransaction(options: PaystackPopNewTransactionOptions): () => void;
checkout(options: PaystackPopCheckoutOptions): Promise<PopupTransaction>;
paymentRequest(options: PaystackPopPaymentRequestOptions): Promise<PopupTransaction>;
}
declare global {
interface Window {
PaystackPop?: {
new (): PaystackPopInstance;
isLoaded(): boolean;
};
}
}
/**
* Dynamically loads the Paystack Popup script (inline.js) and returns the constructor class.
*/
export declare function loadPaystack(): Promise<NonNullable<Window["PaystackPop"]>>;
//#endregion