Types
Types used in the code examples
Last updated
Types used in the code examples
Last updated
enum PaymentChannel {
BANK = 'bank',
AIRTIME = 'airtime',
MOBILE_MONEY = 'mobile_money',
PAYBILL = 'paybill',
BUY_GOODS = 'buy_goods',
MERCHANT_BALANCE = 'merchant_balance',
CRYPTO = 'crypto',
}
enum CurrencyType {
FIAT = 'fiat',
CRYPTO = 'crypto',
MERCHANT_BALANCE = 'merchant_balance',
}
type OrderCurrencyDetails =
| OrderCryptoDetails
| OrderFiatDetails
| OrderMerchantDetails;
type OrderCryptoDetails = {
network: string;
asset: string;
contractAddress: string;
};
type OrderFiatDetails = {
countryIsoCode: string;
carriers?: { code: string; name: string; }[];
}
type OrderMerchantDetails = { merchantName: string }
type Cashout = {
exchangeRate: number;
feeSettings: FeeSetting[];
exchangeRateAfterFees: number;
amountBeforeFees: number;
amountAfterFees: number;
amountBeforeFeesUsd: number;
amountAfterFeesUsd: number;
chargedFees: ChargedFee[];
chargedFeesUsd: ChargedFee[];
totalChargedFees: number;
totalChargedFeesUsd: number;
chargedFeesPerRecipient: Partial<Record<FeeRecipient, number>>;
chargedFeesPerRecipientUsd: Partial<Record<FeeRecipient, number>>;
};
type FeeSetting =
| {
id: string;
recipient: FeeRecipient;
type: FeeType.FLAT_AMOUNT;
value: number;
min: number;
max: number | 'Infinity'
}
| {
id: string;
recipient: FeeRecipient;
type: FeeType.PERCENTAGE;
value: number;
min: number;
max: number | 'Infinity';
minCap?: number;
maxCap?: number
};
type ChargedFee = { id: string; type: FeeType; recipient: FeeRecipient; amount: number };
enum FeeRecipient { MERCHANT = 'merchant', PROVIDER = 'provider', PLATFORM = 'platform', BLOCKCHAIN = 'blockchain' }
enum FeeType { PERCENTAGE = 'percentage', FLAT_AMOUNT = 'flat_amount' }
type TransferInstructions =
| UssdTransferInstructions
| ManualTransferInstructions
| RedirectTransferInstructions
| StkPushTransferInstructions
| OtpStkPushTransferInstructions;
type UssdTransferInstructions = {
type: TransferType.USSD;
ussdCode: string;
instructionsText: string;
warningText?: string;
transferDetails: TransferDetail[];
fieldsToConfirmOrder?: RequiredField[];
};
type ManualTransferInstructions = {
type: TransferType.MANUAL;
instructionsText: string;
warningText?: string;
transferDetails: TransferDetail[];
fieldsToConfirmOrder: RequiredField[];
};
type RedirectTransferInstructions = {
type: TransferType.REDIRECT;
paymentUrl: string;
redirectedToPaymentUrl: boolean;
intermediateActionButtonText: string;
instructionsText: string;
warningText?: string;
transferDetails: TransferDetail[];
fieldsToConfirmOrder: RequiredField[];
};
type StkPushTransferInstructions = {
type: TransferType.STK_PUSH;
isIntermediateActionAvailable: boolean;
intermediateActionButtonText: string;
intermediateActionMaxAttempts: number;
intermediateActionAttempts: number;
intermediateActionNextAttemptAvailableAt: Date;
intermediateActionTimeoutMs: number;
instructionsText: string;
warningText?: string;
transferDetails: TransferDetail[];
fieldsToConfirmOrder: RequiredField[];
};
type OtpStkPushTransferInstructions = {
type: TransferType.OTP_STK_PUSH;
isIntermediateActionAvailable: boolean;
intermediateActionButtonText: string;
intermediateActionMaxAttempts: number;
intermediateActionAttempts: number;
intermediateActionNextAttemptAvailableAt: Date;
intermediateActionTimeoutMs: number;
fieldsForIntermediateAction: RequiredField[];
instructionsText: string;
warningText?: string;
transferDetails: TransferDetail[];
fieldsToConfirmOrder: RequiredField[];
};
enum TransferType {
MANUAL = 'manual',
REDIRECT = 'redirect',
STK_PUSH = 'stk_push',
OTP_STK_PUSH = 'otp_stk_push',
USSD = 'ussd'
}
type TransferDetail = { id: TransferDetailId; label: string; description?: string; value?: string };
enum TransferDetailId {
RECIPIENT_WALLET_ADDRESS = 'recipientWalletAddress',
SENDER_WALLET_ADDRESS = 'senderWalletAddress',
AMOUNT_TO_SEND = 'amountToSend',
CRYPTO_TRANSACTION_REQUEST_ADDITIONAL_DATA = 'cryptoTransactionRequestAdditionalData',
RECIPIENT_BANK_NAME = 'recipientBankName',
RECIPIENT_BANK_ACCOUNT_NUMBER = 'recipientBankAccountNumber',
RECIPIENT_BANK_ACCOUNT_NAME = 'recipientBankAccountName',
RECIPIENT_PHONE_NUMBER = 'recipientPhoneNumber',
BANK_TRANSFER_NARRATION = 'bankTransferNarration',
}
type RequiredField = {
key: string;
type: FieldType;
label: string;
required: boolean;
options?: { value: string; label: string }[];
defaultValue?: string;
};
enum FieldType {
NUMBER = 'number',
STRING = 'string',
DATE = 'date',
BOOLEAN = 'boolean',
EMAIL = 'email',
PHONE = 'phone',
ENUM = 'enum'
}
enum OrderStatus {
DEPOSIT_AWAITING = 'deposit_awaiting', // waiting for user to pay
DEPOSIT_EXPIRED = 'deposit_expired', // user did not pay in time
DEPOSIT_CANCELED = 'deposit_canceled', // user canceled the order
DEPOSIT_VALIDATING = 'deposit_validating', // order confirmed by a user, waiting for confirmation
DEPOSIT_INVALID = 'deposit_invalid', // deposit failed or was invalid
DEPOSIT_SUCCESSFUL = 'deposit_successful', // deposit validated successfully
PAYOUT_PENDING = 'payout_pending', // payout in progress
PAYOUT_SUCCESSFUL = 'payout_successful', // user received funds
PAYOUT_FAILED = 'payout_failed',
REFUND_PENDING = 'refund_pending',
REFUND_SUCCESSFUL = 'refund_successful',
REFUND_FAILED = 'refund_failed',
}
enum KycType { BASIC = 'basic', ADVANCED = 'advanced' }
enum KycStatus { INITIATED = 'initiated', APPROVED = 'approved', REJECTED = 'rejected', INVALID = 'invalid' }
type KycDocument = { _id: string; title: string; value: string; type: KycType; requiredFields: DocumentField[] }
type DocumentField =
| {
key: string;
type: 'number' | 'string' | 'date' | 'boolean' | 'email' | 'phone' | 'smile-identity-images';
label: string;
required: boolean;
defaultValue?: string | number | boolean;
regexp?: string;
regexpFlags?: string;
format?: string
}
| {
key: string;
type: 'enum';
label: string;
required: boolean;
options: { value: string; label: string }[];
defaultValue?: string;
regexp?: string;
regexpFlags?: string;
format?: string
};
enum OperationType { DEPOSIT = 'deposit', PAYOUT = 'payout' }