UNPKG

paystackly

Version:

A Typescript/Javascript library written on top of paystack.

112 lines (111 loc) 3.56 kB
import { BaseQuery, BaseResponse, PaginationMetadata, PayStackCurrency } from "../types"; /** ============= TRANSFER ============ */ export type TransferType = "nuban" | "basa" | "mobile_money"; export interface BaseTransferInitializerPayload { /** Recipient Type. It could be one of: nuban, mobile_money or basa */ type: TransferType; /** Currency for the account receiving the transfer */ currency: PayStackCurrency; } export interface CreateTransferPayload extends BaseTransferInitializerPayload { source: "balance"; amount: number; reference?: string; recipient: string; reason: string; } export interface CreateFinalizeTransferPayload { transfer_code: string; otp: string; } export type CreateTransferResponse = BaseResponse<Transfer>; interface Transfer { domain: string; amount: number; currency: PayStackCurrency; reference: string; source: "balance"; reason: string; recipient: number; status: "otp"; transfer_code: string; id: number; createdAt: Date; updatedAt: Date; } interface TransferRecipient { domain: string; type: string; currency: string; name: string; details: { account_number: string; account_name: string | null; bank_code: string; bank_name: string; }; description: string; metadata: any | null; recipient_code: string; active: boolean; id: number; integration: number; createdAt: string; updatedAt: string; } interface Data { source_details: any; failures: any; titan_code: string | null; transferred_at: Date | null; } interface BaseFinalizeTransferResponse extends Transfer, Data { } interface QueuedTransfer { reference: string; recipient: string; amount: number; transfer_code: string; currency: string; status: "received" | string; } interface QueuedTransfersResponse { data: QueuedTransfer[]; } export type FinalizeTransferResponse = BaseResponse<BaseFinalizeTransferResponse>; export interface BulkTransferPayload { source: Pick<CreateTransferPayload, "source">; currency: PayStackCurrency; transfers: Omit<CreateTransferPayload, "source" | "currency" | "type">[]; } export type BulkTransferResponse = BaseResponse<QueuedTransfersResponse>; export interface ListTransferQuery extends BaseQuery { /** Filter by customer ID */ customer?: string; } export type ListTransferResponse = BaseResponse<(Transfer & { recipient: TransferRecipient; })[] & PaginationMetadata>; export interface FetchTransferPayload { /** he transfer ID or code you want to fetch */ id: string; } export type FetchTransferResponse = BaseResponse<Transfer & { recipient: TransferRecipient; }>; export interface VerifyTransferPayload { /** he transfer ID or code you want to fetch */ reference: string; } export type VerifyTransferResponse = BaseResponse<Transfer & { recipient: TransferRecipient; }>; export declare abstract class BaseTransfer { abstract initialize(payload: CreateTransferPayload): Promise<CreateTransferResponse>; abstract finalize(payload: CreateFinalizeTransferPayload): Promise<CreateTransferResponse>; abstract intializeBulk(payload: BulkTransferPayload): Promise<BulkTransferResponse>; abstract list(query?: ListTransferQuery): Promise<ListTransferResponse>; abstract fetch(payload: FetchTransferPayload): Promise<FetchTransferResponse>; abstract verify(payload: VerifyTransferPayload): Promise<VerifyTransferResponse>; } export {};