UNPKG

thunderpix

Version:

Biblioteca javascript de padronização de gateways de pagamentos PIX

273 lines (272 loc) 10.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const axios_1 = __importDefault(require("axios")); const index_1 = require("../../utils/all/index"); const index_2 = __importDefault(require("../../utils/QueryString/index")); class PrimepagProvider { baseUrl; clientId; clientSecret; accessToken; providerInfo = { name: 'Primepag', description: 'O Banco Digital Completo para Suas Transações Financeiras. Simples, Seguro e Inovador.', documentation: 'https://primepag.com.br/desenvolvedores', isOnline: true, vendor: { name: 'Banco Primepag', shotname: 'prime', url: 'https://primepag.com.br', api: 'https://api.primepag.com.br', versions: [ { name: 'br.com.primepag.api-v1', version: '1.2.9', path: '/', } ], }, }; constructor(configs) { if (configs.isTest) { this.baseUrl = 'https://api-stg.primepag.com.br'; } else { this.baseUrl = 'https://api.primepag.com.br'; } this.clientId = configs.clientId; this.clientSecret = configs.clientSecret; this.accessToken = null; } async generateToken() { const auth = Buffer.from(`${this.clientId}:${this.clientSecret}`).toString('base64'); const response = await axios_1.default.post(`${this.baseUrl}/auth/generate_token`, { grant_type: 'client_credentials', }, { headers: { Authorization: `Basic ${auth}`, 'Content-Type': 'application/json', }, }); this.accessToken = response.data.access_token; } getHeaders() { if (!this.accessToken) { throw new Error('Token de acesso não foi gerado.'); } return { Authorization: `Bearer ${this.accessToken}`, 'Content-Type': 'application/json', }; } async gerarQrCode(valueCents, expirationTime, generatorName, generatorDocument) { const payload = { value_cents: valueCents, generator_name: generatorName, generator_document: generatorDocument, expiration_time: expirationTime, }; const response = await axios_1.default.post(`${this.baseUrl}/v1/pix/qrcodes`, payload, { headers: this.getHeaders(), }); return response.data; } async listarQRCodes(page = 1, registrationStartDate, registrationEndDate, paymentStartDate, paymentEndDate) { const params = { page, registration_start_date: registrationStartDate, registration_end_date: registrationEndDate, payment_start_date: paymentStartDate, payment_end_date: paymentEndDate, }; if (!params.payment_start_date) { delete params.payment_start_date; } if (!params.payment_end_date) { delete params.payment_end_date; } var query = index_2.default.stringify(params); const response = await axios_1.default.get(`${this.baseUrl}/v1/pix/qrcodes?${query}`, { headers: this.getHeaders(), }); return response.data; } async consultarQrCodePorReferencia(referenceCode) { const response = await axios_1.default.get(`${this.baseUrl}/v1/pix/qrcodes/${referenceCode}`, { headers: this.getHeaders(), }); return response.data; } async consultarQrCodePorEndToEnd(endToEnd) { const response = await axios_1.default.get(`${this.baseUrl}/v1/pix/qrcodes/${endToEnd}/end_to_end`, { headers: this.getHeaders(), }); return response.data; } async cadastrarPagamento(initiationType, idempotentId, valueCents, receiverName, receiverDocument, pixKeyType, pixKey, bankIspb, agency, account, accountType, authorized = false) { const payload = { initiation_type: initiationType, idempotent_id: idempotentId, value_cents: valueCents, receiver_name: receiverName, receiver_document: receiverDocument, pix_key_type: pixKeyType, pix_key: pixKey, receiver_bank_ispb: bankIspb, receiver_agency: agency, receiver_account: account, receiver_account_type: accountType, authorized, }; const response = await axios_1.default.post(`${this.baseUrl}/v1/pix/payments`, payload, { headers: this.getHeaders(), }); return response.data; } async listarPagamentos(page = 1, registrationStartDate, registrationEndDate, paymentStartDate, paymentEndDate) { const params = { page, registration_start_date: registrationStartDate, registration_end_date: registrationEndDate, payment_start_date: paymentStartDate, payment_end_date: paymentEndDate, }; if (!params.payment_start_date) { delete params.payment_start_date; } if (!params.payment_end_date) { delete params.payment_end_date; } var query = index_2.default.stringify(params); const response = await axios_1.default.get(`${this.baseUrl}/v1/pix/payments?${query}`, { headers: this.getHeaders() }); return response.data; } async cadastrarWebhook(webhookTypeId, url, authorization) { const payload = { url, authorization, }; const response = await axios_1.default.post(`${this.baseUrl}/v1/webhooks/${webhookTypeId}`, payload, { headers: this.getHeaders(), }); return response.data; } async Balance() { const response = await axios_1.default.get(`${this.baseUrl}/v1/account/balance`, { headers: this.getHeaders(), }); return { valueCents: response.data.account.value_cents, valueFloat: (response.data.account.value_cents / 100) }; } async generatingPixBilling(body) { var valueCents = Number.isInteger(body.valueCents) ? body.valueCents : Math.round(body.valueCents * 100); var expireTimestamp = Math.round(new Date().getTime() / 1000 + (body.expires ?? 3600)); await this.generateToken(); var data = await this.gerarQrCode(valueCents, expireTimestamp); return { qrcode: data.qrcode.image_base64, pixkey: data.qrcode.content, value: { original: body.valueCents, cents: valueCents, fixed: (valueCents / 100).toFixed(2), float: valueCents / 100, }, expires: { timestamp: expireTimestamp, dateTime: new Date(expireTimestamp * 1000).toLocaleString('pt-BR'), iso: new Date(expireTimestamp * 1000).toISOString(), }, code: data.qrcode.reference_code ?? (0, index_1.randomUUID)(), }; } async listingPixBilling(body) { await this.generateToken(); var data = await this.listarQRCodes(body.page ?? 1, body.registrationDateStart ?? new Date().toISOString(), body.registrationDateEnd ?? new Date().toISOString()); data = data.qrcodes.map((mp) => { return { referenceCode: mp.reference_code, valueCents: mp.value_cents, content: mp.content, status: mp.status, generatorName: mp.generator_name, generatorDocument: mp.generator_document, payerName: mp.payer_name, payerDocument: mp.payer_document, registrationDate: mp.registration_date, paymentDate: mp.payment_date, endToEnd: mp.end_to_end, }; }); return data; } async searchPixBilling(body) { await this.generateToken(); var data = await this.consultarQrCodePorReferencia(body.reference); var qrcode = { referenceCode: data.qrcode.reference_code, valueCents: data.qrcode.value_cents, content: data.qrcode.content, status: data.qrcode.status, generatorName: data.qrcode.generator_name, generatorDocument: data.qrcode.generator_document, payerName: data.qrcode.payer_name, payerDocument: data.qrcode.payer_document, payerBankName: data.qrcode.payer_bank_name, payerAgency: data.qrcode.payer_agency, payerAccount: data.qrcode.payer_account, payerAccountType: data.qrcode.payer_account_type, registrationDate: data.qrcode.registration_date, paymentDate: data.qrcode.payment_date, endToEnd: data.qrcode.end_to_end, }; return qrcode; } async generateProviderWidthdraw(body) { await this.generateToken(); var data = await this.cadastrarPagamento(body.initiationType, body.idempotentId, body.valueCents, body.receiverName, body.receiverDocument, body.pixKeyType, body.pixKey, body.bankIspb, body.agency, body.account, body.accountType, body.authorized ?? true); return data.payment; } async listProviderWidthdraw(body) { await this.generateToken(); var data = await this.listarPagamentos(body.page, body.registrationDateStart, body.registrationDateEnd, body.paymentStartDate, body.paymentEndDate); data = data.payments.map((mp) => { return { referenceCode: mp.reference_code, idempotentId: mp.idempotent_id, valueCents: mp.value_cents, pixKeyType: mp.pix_key_type, pixKey: mp.pix_key, receiverName: mp.receiver_name, receiverDocument: mp.receiver_document, status: mp.status, registrationDate: mp.registration_date, paymentDate: mp.payment_date, cancellationDate: mp.cancellation_date, cancellationReason: mp.cancellation_reason, endToEnd: mp.end_to_end, }; }); return data; } async getBalance() { await this.generateToken(); return await this.Balance(); } async searchProviderWidthdraw(body) { await this.generateToken(); return { search: [] }; } } exports.default = PrimepagProvider;