Abstract Class: BasePaymentProvider
Defined in: packages/pesa/src/providers/base.ts:73
Abstract base class every provider adapter must implement.
Since
0.1.0
The SDK calls only these methods — no provider-specific logic ever leaks into application code.
Required methods (must implement)
- createOrder — initiate a checkout / USSD push / redirect
- getPaymentStatus — poll or fetch current payment status
- handleWebhook — parse + verify an incoming webhook
- disburse — B2C / wallet-out disbursement
Optional methods (override to enable)
Default implementations throw PesaUnsupportedError. Applications can feature-detect capability:
if (pesa.refund) {
await pesa.refund('order_123', 5000);
}Writing a provider adapter
import { BasePaymentProvider } from '@borapesa/pesa';
import type { ProviderName, CreateOrderPayload, OrderResult } from '@borapesa/pesa';
export class MyProvider extends BasePaymentProvider {
readonly name: ProviderName = 'selcom';
async createOrder(payload: CreateOrderPayload): Promise<OrderResult> {
// Call your provider's API
const res = await fetch('https://api.provider.com/order', {
method: 'POST',
body: JSON.stringify(payload),
});
const data = await res.json();
return {
orderId: data.transactionId,
reference: payload.reference,
status: 'PENDING',
};
}
async getPaymentStatus(orderId: string): Promise<PaymentStatus> { ... }
async handleWebhook(rawBody, headers): Promise<PaymentEvent> { ... }
async disburse(payload): Promise<DisburseResult> { ... }
}Constructors
Constructor
new BasePaymentProvider(): BasePaymentProvider;Returns
BasePaymentProvider
Properties
| Property | Modifier | Type | Description | Defined in |
|---|---|---|---|---|
name | abstract | ProviderName | Unique provider identifier. | packages/pesa/src/providers/base.ts:75 |
Methods
cancelOrder()?
optional cancelOrder(_orderId): Promise<CancelOrderResult>;Defined in: packages/pesa/src/providers/base.ts:130
Cancel a pending or in-progress order.
Parameters
| Parameter | Type |
|---|---|
_orderId | string |
Returns
Promise<CancelOrderResult>
Throws
PesaUnsupportedError — if the provider does not support cancellation.
createOrder()
abstract createOrder(payload): Promise<OrderResult>;Defined in: packages/pesa/src/providers/base.ts:86
Initiate a checkout / USSD push / redirect.
The SDK calls validateCreateOrderPayload() before this,
so you can assume amount > 0, reference is non-empty,
and customer.phone is in MSISDN format.
Parameters
| Parameter | Type |
|---|---|
payload | CreateOrderPayload |
Returns
Promise<OrderResult>
disburse()
abstract disburse(payload): Promise<DisburseResult>;Defined in: packages/pesa/src/providers/base.ts:112
B2C / wallet-out disbursement.
The SDK calls validateDisbursePayload() before this.
Parameters
| Parameter | Type |
|---|---|
payload | DisbursePayload |
Returns
Promise<DisburseResult>
getNameLookup()?
optional getNameLookup(_phoneOrAccount): Promise<NameLookupResult>;Defined in: packages/pesa/src/providers/base.ts:173
Resolve the account holder name for a phone or account number.
Useful for verifying recipient identity before disbursing.
Parameters
| Parameter | Type |
|---|---|
_phoneOrAccount | string |
Returns
Promise<NameLookupResult>
Throws
PesaUnsupportedError — if the provider does not support name lookup.
getPaymentStatus()
abstract getPaymentStatus(orderId): Promise<PaymentStatus>;Defined in: packages/pesa/src/providers/base.ts:89
Poll or fetch the current payment status for an order.
Parameters
| Parameter | Type |
|---|---|
orderId | string |
Returns
Promise<PaymentStatus>
handleWebhook()
abstract handleWebhook(rawBody, headers): Promise<PaymentEvent>;Defined in: packages/pesa/src/providers/base.ts:102
Parse + verify an incoming webhook.
The provider must:
- Verify its own cryptographic signature (HMAC, checksum, etc.)
- Parse the raw body into structured data
- Return a normalized PaymentEvent
The SDK handles UUID assignment, event persistence, plugin hooks, and user-registered handler emission after this method returns.
Parameters
| Parameter | Type |
|---|---|
rawBody | string | Buffer<ArrayBufferLike> |
headers | Record<string, string> |
Returns
Promise<PaymentEvent>
listOrders()?
optional listOrders(_params): Promise<ListOrdersResult>;Defined in: packages/pesa/src/providers/base.ts:182
List payment orders for a date range.
Parameters
| Parameter | Type |
|---|---|
_params | ListOrdersParams |
Returns
Promise<ListOrdersResult>
Throws
PesaUnsupportedError — if the provider does not support listing orders.
previewDisburse()?
optional previewDisburse(_payload): Promise<PreviewResult>;Defined in: packages/pesa/src/providers/base.ts:162
Preview / dry-run a disbursement before committing.
Parameters
| Parameter | Type |
|---|---|
_payload | DisbursePayload |
Returns
Promise<PreviewResult>
Throws
PesaUnsupportedError — if the provider does not support preview.
previewOrder()?
optional previewOrder(_payload): Promise<PreviewResult>;Defined in: packages/pesa/src/providers/base.ts:153
Preview / dry-run a payment before committing.
Returns expected fees and validity without charging the customer.
Parameters
| Parameter | Type |
|---|---|
_payload | CreateOrderPayload |
Returns
Promise<PreviewResult>
Throws
PesaUnsupportedError — if the provider does not support preview.
refund()?
optional refund(_orderId, _amount?): Promise<RefundResult>;Defined in: packages/pesa/src/providers/base.ts:121
Refund a completed payment.
Parameters
| Parameter | Type |
|---|---|
_orderId | string |
_amount? | number |
Returns
Promise<RefundResult>
Throws
PesaUnsupportedError — if the provider does not support refunds.
validateCredentials()?
optional validateCredentials(): Promise<{
message?: string;
valid: boolean;
}>;Defined in: packages/pesa/src/providers/base.ts:142
Validate that a provider config works (health check).
Useful for startup checks or /health endpoints.
Returns
Promise<{
message?: string;
valid: boolean;
}>
{ valid: true } if credentials are correct.
Throws
PesaUnsupportedError — if the provider does not support validation.