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)

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

PropertyModifierTypeDescriptionDefined in
nameabstractProviderNameUnique 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

ParameterType
_orderIdstring

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

ParameterType
payloadCreateOrderPayload

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

ParameterType
payloadDisbursePayload

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

ParameterType
_phoneOrAccountstring

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

ParameterType
orderIdstring

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:

  1. Verify its own cryptographic signature (HMAC, checksum, etc.)
  2. Parse the raw body into structured data
  3. Return a normalized PaymentEvent

The SDK handles UUID assignment, event persistence, plugin hooks, and user-registered handler emission after this method returns.

Parameters

ParameterType
rawBodystring | Buffer<ArrayBufferLike>
headersRecord<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

ParameterType
_paramsListOrdersParams

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

ParameterType
_payloadDisbursePayload

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

ParameterType
_payloadCreateOrderPayload

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

ParameterType
_orderIdstring
_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.

On this page