UNPKG

voko-sdk

Version:
113 lines (112 loc) 4.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VokoClient = void 0; const types_1 = require("../core/types"); const models_1 = require("../core/models"); const errors_1 = require("../core/errors"); const types_2 = require("../core/types"); const adapter_registry_1 = require("../registry/adapter-registry"); class VokoClient { config; constructor(config) { this.config = config; this.validateProvider(); } async requestPayment(request) { try { const adapter = this.createAdapter(); const paymentRequest = { amount: request.amount, currency: request.currency || types_1.Currency.TZS, phoneNumber: request.phoneNumber, email: request.email, fullName: request.fullName, accountNumber: request.accountNumber, reference: request.reference || this.generateReference(), description: request.description, paymentMethod: request.paymentMethod, operator: request.operator, otp: request.otp, metadata: request.metadata || {}, callbackUrl: request.callbackUrl, }; const vokoRequest = new models_1.VokoPaymentRequest(paymentRequest); const response = await adapter.initiatePayment(vokoRequest); return response; } catch (error) { if (error instanceof errors_1.VokoError) { throw error; } throw new errors_1.VokoError('Payment request failed', types_2.VokoErrorCode.UNKNOWN_ERROR, undefined, error instanceof Error ? error.message : 'Unknown error'); } } async checkPaymentStatus(transactionId) { try { const adapter = this.createAdapter(); return await adapter.checkPaymentStatus({ transactionId, }); } catch (error) { if (error instanceof errors_1.VokoError) { throw error; } throw new errors_1.VokoError('Status check failed', types_2.VokoErrorCode.TRANSACTION_NOT_FOUND, undefined, error instanceof Error ? error.message : 'Unknown error'); } } async verifyWebhook(payload, signature) { const adapter = this.createAdapter(); return await adapter.verifyWebhook(payload, signature); } getSupportedPaymentMethods() { const adapter = this.createAdapter(); return adapter.getSupportedPaymentMethods(); } getSupportedOperators() { const adapter = this.createAdapter(); return adapter.getSupportedOperators(); } getProviderInfo() { return { provider: this.config.provider, environment: this.config.environment, }; } static validatePhoneNumber(phoneNumber) { return /^\+255[67]\d{8}$/.test(phoneNumber.replace(/[^\d+]/g, '')); } static normalizePhoneNumber(phoneNumber) { let cleaned = phoneNumber.replace(/[^\d+]/g, ''); if (cleaned.startsWith('0')) { cleaned = '+255' + cleaned.substring(1); } else if (cleaned.startsWith('255')) { cleaned = '+' + cleaned; } else if (!cleaned.startsWith('+255')) { cleaned = '+255' + cleaned; } return cleaned; } static getSupportedProviders() { return adapter_registry_1.AdapterRegistry.getSupportedProviders(); } validateProvider() { try { this.createAdapter(); } catch (error) { throw error; } } createAdapter() { return adapter_registry_1.AdapterRegistry.createAdapter(this.config); } generateReference() { const timestamp = Date.now(); const random = Math.random().toString(36).substring(2, 8); return `VOKO_${timestamp}_${random}`.toUpperCase(); } } exports.VokoClient = VokoClient;