n8n-nodes-efibank
Version:
Nó personalizado para integração com as APIs Cobranças e Pix do Efi Bank, permitindo operações de pagamentos, recebimentos e gerenciamento de transações financeiras.
134 lines • 5.62 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EfiBankPixApi = void 0;
const forge = __importStar(require("node-forge"));
class EfiBankPixApi {
constructor() {
this.name = 'EfiBankPixApi';
this.displayName = 'Efí Bank | API Pix';
this.documentationUrl = 'https://dev.efipay.com.br/docs/api-pix/credenciais';
this.properties = [
{
displayName: 'Ambiente',
name: 'environment',
type: 'options',
options: [
{ name: 'Homologação', value: 'homolog' },
{ name: 'Produção', value: 'prod' },
],
default: 'homolog',
required: true,
description: 'Selecione o ambiente correto para suas credenciais',
},
{
displayName: 'Chave Client ID Produção',
name: 'clientIdProd',
type: 'string',
default: '',
required: true,
},
{
displayName: 'Chave Client Secret Produção',
name: 'clientSecretProd',
type: 'string',
default: '',
required: true,
},
{
displayName: 'Chave Client ID Homologação',
name: 'clientIdHomolog',
type: 'string',
default: '',
required: true,
},
{
displayName: 'Chave Client Secret Homologação',
name: 'clientSecretHomolog',
type: 'string',
default: '',
required: true,
},
{
displayName: 'Certificado',
name: 'certificatePem',
type: 'string',
default: '',
required: true,
description: 'Cole o conteúdo completo do certificado PEM (BEGIN/END)',
},
{
displayName: 'Key',
name: 'keyPem',
type: 'string',
default: '',
required: true,
description: 'Cole o conteúdo completo da chave privada PEM (BEGIN/END)',
},
];
}
convertPemToP12Base64(credentials) {
try {
const certificatePem = String(credentials.certificatePem || "").replace(/\\n/g, "\n");
const keyPem = String(credentials.keyPem || "").replace(/\\n/g, "\n");
const certificate = forge.pki.certificateFromPem(certificatePem);
const privateKey = forge.pki.privateKeyFromPem(keyPem);
const p12Asn1 = forge.pkcs12.toPkcs12Asn1(privateKey, [certificate], '', {
friendlyName: 'Efi Bank Certificate',
generateLocalKeyId: true,
});
const p12Der = forge.asn1.toDer(p12Asn1).getBytes();
const certificate_base64 = Buffer.from(p12Der, 'binary').toString('base64');
return certificate_base64;
}
catch (error) {
console.error('Erro ao converter PEM para P12 Base64:', error);
throw new Error(`Falha na conversão de certificados: ${error.message}`);
}
}
async authenticate(credentials, requestOptions) {
const isProd = credentials.environment === "prod";
const clientId = isProd ? credentials.clientIdProd : credentials.clientIdHomolog;
const clientSecret = isProd ? credentials.clientSecretProd : credentials.clientSecretHomolog;
const encodedApiKey = Buffer.from(`${clientId}:${clientSecret}`).toString("base64");
const certificate_base64 = this.convertPemToP12Base64(credentials);
requestOptions.headers = requestOptions.headers || {};
requestOptions.body = requestOptions.body || {};
requestOptions.headers.Authorization = `Basic ${encodedApiKey}`;
requestOptions.headers["Content-Type"] = "application/json";
const bodyData = requestOptions.body;
bodyData.grant_type = "client_credentials";
bodyData.certificate_base64 = certificate_base64;
console.log("Request Options:", {
url: requestOptions.url,
method: requestOptions.method,
headers: requestOptions.headers,
bodyKeys: Object.keys(bodyData),
});
return requestOptions;
}
}
exports.EfiBankPixApi = EfiBankPixApi;
//# sourceMappingURL=EfiBankPixApi.credentials.js.map