mpesa-mz-sdk
Version:
SDK para integração com a API M-Pesa de Moçambique
55 lines (54 loc) • 2.12 kB
JavaScript
;
// src/utils.ts
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.encodePublicKeyToBase64 = encodePublicKeyToBase64;
exports.generateUniqueReference = generateUniqueReference;
exports.generateBearerToken = generateBearerToken;
exports.formatPublicKey = formatPublicKey;
const crypto_1 = __importDefault(require("crypto"));
/**
* Codifica a Public Key em Base64.
* @param publicKey A Public Key fornecida pela M-Pesa.
* @returns A Public Key codificada em Base64.
*/
function encodePublicKeyToBase64(publicKey) {
return Buffer.from(publicKey).toString('base64');
}
/**
* Gera uma referência única para transações.
* @param prefix Um prefixo para a referência (ex: 'C2B', 'B2C').
* @returns Uma string de referência única.
*/
function generateUniqueReference(prefix = 'REF') {
const timestamp = new Date().getTime();
const random = Math.floor(Math.random() * 10000);
return `${prefix}-${timestamp}-${random}`;
}
/**
* Gera o Bearer token criptografando o apiKey com a publicKey (PKCS1_PADDING) e codificando em Base64.
* @param apiKey Sua apiKey do portal M-Pesa
* @param publicKey Sua publicKey do portal M-Pesa (formato PEM)
* @returns Bearer token para o header Authorization
*/
function generateBearerToken(apiKey, publicKey) {
const buffer = Buffer.from(apiKey, 'utf8');
const encrypted = crypto_1.default.publicEncrypt({
key: publicKey,
padding: crypto_1.default.constants.RSA_PKCS1_PADDING,
}, buffer);
return encrypted.toString('base64');
}
/**
* Garante que a chave pública está no formato PEM correto.
* @param key Chave pública (com ou sem delimitadores)
* @returns Chave pública em formato PEM
*/
function formatPublicKey(key) {
var _a;
if (key.includes('BEGIN PUBLIC KEY'))
return key;
return `-----BEGIN PUBLIC KEY-----\n${(_a = key.match(/.{1,64}/g)) === null || _a === void 0 ? void 0 : _a.join('\n')}\n-----END PUBLIC KEY-----`;
}