UNPKG

tranxs

Version:

Tranxs is a powerful and easy-to-use Node.js library for integrating M-Pesa payment services into your application. It provides seamless support for all major M-Pesa transactions, including STK Push, B2C, B2B, C2B, Reversal, Account Balance, and Transacti

109 lines 4.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Mpesa = void 0; const axios_1 = __importDefault(require("axios")); const generateTimeStamp_1 = require("../utils/generateTimeStamp"); const cleanPhone_1 = require("../utils/cleanPhone"); const uuid_1 = require("uuid"); const segGen_1 = require("./segGen"); class Mpesa { credentials; environment; baseUrl; constructor(credentials, environment = "sandbox") { this.credentials = credentials; this.environment = environment; this.baseUrl = this.environment === "production" ? "https://api.safaricom.co.ke" : "https://sandbox.safaricom.co.ke"; } async generateToken() { const auth = Buffer.from(`${this.credentials.CONSUMER_KEY}:${this.credentials.CONSUMER_SECRET}`).toString("base64"); try { const response = await axios_1.default.get(`${this.baseUrl}/oauth/v1/generate`, { headers: { Authorization: `Basic ${auth}`, "Content-Type": "application/x-www-form-urlencoded", }, params: { grant_type: "client_credentials" }, }); return response.data.access_token; } catch (error) { console.error("Tranx Error:", error.response ? error.response.data : error.message); } return null; } async requestMpesaAPI(endpoint, payload) { const token = await this.generateToken(); if (!token) throw new Error("Unable to authenticate with Mpesa API."); try { const { data } = await axios_1.default.post(`${this.baseUrl}${endpoint}`, payload, { headers: { Authorization: `Bearer ${token}`, }, }); return data; } catch (error) { const status = error?.response?.status; const data = error?.response?.data; const message = typeof data === "object" ? JSON.stringify(data, null, 2) : data || error.message; throw new Error(`[Tranxs Error] ${status ? `Status: ${status}, ` : ""}Message: ${message}`); } } async stkPush(options) { const timestamp = (0, generateTimeStamp_1.generateTimestamp)(); const password = Buffer.from(this.credentials.BUSINESS_SHORT_CODE + (this.credentials.PASS_KEY || "") + timestamp).toString("base64"); const phone = (0, cleanPhone_1.cleanPhoneNumber)(options.phone); const payload = { BusinessShortCode: this.credentials.BUSINESS_SHORT_CODE, Password: password, Timestamp: timestamp, TransactionType: "CustomerPayBillOnline", Amount: options.amount, PartyA: phone, PartyB: this.credentials.BUSINESS_SHORT_CODE, PhoneNumber: phone, CallBackURL: options.callbackUrl, AccountReference: options.account, TransactionDesc: options.TransactionDesc, }; return { action: "Tranxs - Mpesa STK Push", response: await this.requestMpesaAPI("/mpesa/stkpush/v1/processrequest", payload), }; } async b2c(options) { const securityCredentials = (0, segGen_1.generateSecurityCredentials)(this.credentials.INITIATOR_PASSWORD); const phone = (0, cleanPhone_1.cleanPhoneNumber)(options.phone); const payload = { OriginatorConversationID: (0, uuid_1.v4)(), InitiatorName: this.credentials.INITIATOR_NAME, SecurityCredential: securityCredentials, CommandID: options.commandID, Amount: options.amount, PartyA: this.credentials.BUSINESS_SHORT_CODE, PartyB: phone, Remarks: options.remarks, QueueTimeOutURL: options.queueTimeOutURL, ResultURL: options.resultCallbackURL, Occasion: options.ocattion, }; return { action: "Tranxs - Mpesa B2C transaction", response: await this.requestMpesaAPI("/mpesa/b2c/v3/paymentrequest", payload), }; } } exports.Mpesa = Mpesa; //# sourceMappingURL=Mpesa.js.map