sunat-engine-nest 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/ose/ose.client.d.ts +24 -0
- package/dist/ose/ose.client.js +101 -0
- package/dist/ose/ose.client.js.map +1 -0
- package/dist/sunat-engine.module.d.ts +8 -0
- package/dist/sunat-engine.module.js +3 -0
- package/dist/sunat-engine.module.js.map +1 -1
- package/dist/sunat-engine.service.d.ts +4 -1
- package/dist/sunat-engine.service.js +24 -51
- package/dist/sunat-engine.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -238,6 +238,59 @@ interface EngineResponse {
|
|
|
238
238
|
| `beta` | e-beta.sunat.gob.pe | gre-test.nubefact.com |
|
|
239
239
|
| `produccion` | e-factura.sunat.gob.pe | api-cpe.sunat.gob.pe |
|
|
240
240
|
|
|
241
|
+
## Proveedor: SUNAT directo vs OSE
|
|
242
|
+
|
|
243
|
+
Puedes elegir enviar tus comprobantes **directamente a SUNAT** o a través de un **OSE (Operador de Servicios Electrónicos)** autorizado como Nubefact, EFACT, DigiFlow, Bizlinks, entre otros.
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
// Envío directo a SUNAT (por defecto)
|
|
247
|
+
SunatEngineModule.forRoot({
|
|
248
|
+
provider: 'sunat',
|
|
249
|
+
sunat: { ruc: '...', solUser: '...', solPass: '...', certPem: '...' },
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
// Envío a través de un OSE
|
|
253
|
+
SunatEngineModule.forRoot({
|
|
254
|
+
provider: 'ose',
|
|
255
|
+
sunat: { ruc: '...', certPem: '...' }, // solo se usa para firmar el XML
|
|
256
|
+
ose: {
|
|
257
|
+
url: 'https://api.tuose.com/v1/documents',
|
|
258
|
+
token: 'TU_TOKEN_OSE', // Bearer token
|
|
259
|
+
// o en lugar de token:
|
|
260
|
+
// username: 'usuario',
|
|
261
|
+
// password: 'clave',
|
|
262
|
+
},
|
|
263
|
+
})
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Con variables de entorno:
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
SunatEngineModule.forRootAsync({
|
|
270
|
+
useFactory: (config: ConfigService) => ({
|
|
271
|
+
provider: config.get('PROVIDER'), // 'sunat' | 'ose'
|
|
272
|
+
sunat: {
|
|
273
|
+
ruc: config.get('SUNAT_RUC'),
|
|
274
|
+
solUser: config.get('SUNAT_SOL_USER'),
|
|
275
|
+
solPass: config.get('SUNAT_SOL_PASS'),
|
|
276
|
+
certPem: config.get('SUNAT_CERT_PEM'),
|
|
277
|
+
},
|
|
278
|
+
ose: {
|
|
279
|
+
url: config.get('OSE_URL'),
|
|
280
|
+
token: config.get('OSE_TOKEN'),
|
|
281
|
+
},
|
|
282
|
+
}),
|
|
283
|
+
})
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
```env
|
|
287
|
+
PROVIDER=ose
|
|
288
|
+
OSE_URL=https://api.tuose.com/v1/documents
|
|
289
|
+
OSE_TOKEN=tu_token_aqui
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
> El `OseClient` es genérico y compatible con cualquier OSE que acepte `{ fileName, contentFile }` (ZIP en base64) vía POST con autenticación Bearer o Basic.
|
|
293
|
+
|
|
241
294
|
## Soporte y actualizaciones
|
|
242
295
|
|
|
243
296
|
SUNAT actualiza continuamente sus esquemas, validaciones y normativas de facturación electrónica. Este paquete recibe mantenimiento activo para mantenerse alineado con cada cambio oficial, garantizando que tu integración siga funcionando sin interrupciones.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export { SunatEngineModule, SUNAT_ENGINE_OPTIONS } from './sunat-engine.module';
|
|
2
|
-
export type { SunatEngineOptions, SunatEngineAsyncOptions, SunatEngineGreOptions } from './sunat-engine.module';
|
|
2
|
+
export type { SunatEngineOptions, SunatEngineAsyncOptions, SunatEngineGreOptions, SunatEngineCredentialsOptions, SunatEngineOseOptions } from './sunat-engine.module';
|
|
3
3
|
export { SunatEngineService } from './sunat-engine.service';
|
|
4
4
|
export { XmlSignerService } from './signer/xml-signer.service';
|
|
5
5
|
export { SunatSoapClient } from './soap/sunat-soap.client';
|
|
6
6
|
export type { SoapSendResult, SunatEndpointType } from './soap/sunat-soap.client';
|
|
7
7
|
export { SunatGreClient } from './gre/sunat-gre.client';
|
|
8
|
+
export { OseClient } from './ose/ose.client';
|
|
9
|
+
export type { OseClientOptions } from './ose/ose.client';
|
|
8
10
|
export { CdrParserService } from './cdr/cdr-parser.service';
|
|
9
11
|
export { DocumentPdfService } from './pdf/document-pdf.service';
|
|
10
12
|
export type { PdfFormat } from './pdf/document-pdf.service';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildVoidedXml = exports.buildSummaryXml = exports.buildDespatchXml = exports.buildNoteXml = exports.buildInvoiceXml = exports.DocumentPdfService = exports.CdrParserService = exports.SunatGreClient = exports.SunatSoapClient = exports.XmlSignerService = exports.SunatEngineService = exports.SUNAT_ENGINE_OPTIONS = exports.SunatEngineModule = void 0;
|
|
3
|
+
exports.buildVoidedXml = exports.buildSummaryXml = exports.buildDespatchXml = exports.buildNoteXml = exports.buildInvoiceXml = exports.DocumentPdfService = exports.CdrParserService = exports.OseClient = exports.SunatGreClient = exports.SunatSoapClient = exports.XmlSignerService = exports.SunatEngineService = exports.SUNAT_ENGINE_OPTIONS = exports.SunatEngineModule = void 0;
|
|
4
4
|
var sunat_engine_module_1 = require("./sunat-engine.module");
|
|
5
5
|
Object.defineProperty(exports, "SunatEngineModule", { enumerable: true, get: function () { return sunat_engine_module_1.SunatEngineModule; } });
|
|
6
6
|
Object.defineProperty(exports, "SUNAT_ENGINE_OPTIONS", { enumerable: true, get: function () { return sunat_engine_module_1.SUNAT_ENGINE_OPTIONS; } });
|
|
@@ -12,6 +12,8 @@ var sunat_soap_client_1 = require("./soap/sunat-soap.client");
|
|
|
12
12
|
Object.defineProperty(exports, "SunatSoapClient", { enumerable: true, get: function () { return sunat_soap_client_1.SunatSoapClient; } });
|
|
13
13
|
var sunat_gre_client_1 = require("./gre/sunat-gre.client");
|
|
14
14
|
Object.defineProperty(exports, "SunatGreClient", { enumerable: true, get: function () { return sunat_gre_client_1.SunatGreClient; } });
|
|
15
|
+
var ose_client_1 = require("./ose/ose.client");
|
|
16
|
+
Object.defineProperty(exports, "OseClient", { enumerable: true, get: function () { return ose_client_1.OseClient; } });
|
|
15
17
|
var cdr_parser_service_1 = require("./cdr/cdr-parser.service");
|
|
16
18
|
Object.defineProperty(exports, "CdrParserService", { enumerable: true, get: function () { return cdr_parser_service_1.CdrParserService; } });
|
|
17
19
|
var document_pdf_service_1 = require("./pdf/document-pdf.service");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,6DAAgF;AAAvE,wHAAA,iBAAiB,OAAA;AAAE,2HAAA,oBAAoB,OAAA;AAIhD,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAG3B,kEAA+D;AAAtD,sHAAA,gBAAgB,OAAA;AACzB,8DAA2D;AAAlD,oHAAA,eAAe,OAAA;AAExB,2DAAwD;AAA/C,kHAAA,cAAc,OAAA;AACvB,+DAA4D;AAAnD,sHAAA,gBAAgB,OAAA;AACzB,mEAAgE;AAAvD,0HAAA,kBAAkB,OAAA;AAI3B,yDAAwD;AAA/C,kHAAA,eAAe,OAAA;AACxB,mDAAkD;AAAzC,4GAAA,YAAY,OAAA;AACrB,2DAA0D;AAAjD,oHAAA,gBAAgB,OAAA;AACzB,yDAAwD;AAA/C,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,gHAAA,cAAc,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,6DAAgF;AAAvE,wHAAA,iBAAiB,OAAA;AAAE,2HAAA,oBAAoB,OAAA;AAIhD,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAG3B,kEAA+D;AAAtD,sHAAA,gBAAgB,OAAA;AACzB,8DAA2D;AAAlD,oHAAA,eAAe,OAAA;AAExB,2DAAwD;AAA/C,kHAAA,cAAc,OAAA;AACvB,+CAA6C;AAApC,uGAAA,SAAS,OAAA;AAElB,+DAA4D;AAAnD,sHAAA,gBAAgB,OAAA;AACzB,mEAAgE;AAAvD,0HAAA,kBAAkB,OAAA;AAI3B,yDAAwD;AAA/C,kHAAA,eAAe,OAAA;AACxB,mDAAkD;AAAzC,4GAAA,YAAY,OAAA;AACrB,2DAA0D;AAAjD,oHAAA,gBAAgB,OAAA;AACzB,yDAAwD;AAA/C,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,gHAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SoapSendResult } from '../soap/sunat-soap.client';
|
|
2
|
+
export interface OseClientOptions {
|
|
3
|
+
url: string;
|
|
4
|
+
token?: string;
|
|
5
|
+
username?: string;
|
|
6
|
+
password?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class OseClient {
|
|
9
|
+
private readonly logger;
|
|
10
|
+
sendBill(params: {
|
|
11
|
+
fileName: string;
|
|
12
|
+
xmlSigned: string;
|
|
13
|
+
ose: OseClientOptions;
|
|
14
|
+
}): Promise<SoapSendResult>;
|
|
15
|
+
sendSummary(params: {
|
|
16
|
+
fileName: string;
|
|
17
|
+
xmlSigned: string;
|
|
18
|
+
ose: OseClientOptions;
|
|
19
|
+
}): Promise<SoapSendResult>;
|
|
20
|
+
private parseResponse;
|
|
21
|
+
private buildAuth;
|
|
22
|
+
private handleError;
|
|
23
|
+
private createZip;
|
|
24
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var OseClient_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.OseClient = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const axios_1 = require("axios");
|
|
13
|
+
const JSZip = require("jszip");
|
|
14
|
+
let OseClient = OseClient_1 = class OseClient {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.logger = new common_1.Logger(OseClient_1.name);
|
|
17
|
+
}
|
|
18
|
+
async sendBill(params) {
|
|
19
|
+
const contentFile = await this.createZip(params.fileName, params.xmlSigned);
|
|
20
|
+
try {
|
|
21
|
+
const response = await axios_1.default.post(params.ose.url, { fileName: params.fileName.replace(/\.zip$/i, ''), contentFile }, {
|
|
22
|
+
headers: {
|
|
23
|
+
'Content-Type': 'application/json',
|
|
24
|
+
'Authorization': this.buildAuth(params.ose),
|
|
25
|
+
},
|
|
26
|
+
timeout: 60_000,
|
|
27
|
+
});
|
|
28
|
+
return this.parseResponse(response.data);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
return this.handleError(err);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async sendSummary(params) {
|
|
35
|
+
const contentFile = await this.createZip(params.fileName, params.xmlSigned);
|
|
36
|
+
try {
|
|
37
|
+
const response = await axios_1.default.post(params.ose.url, { fileName: params.fileName.replace(/\.zip$/i, ''), contentFile }, {
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
'Authorization': this.buildAuth(params.ose),
|
|
41
|
+
},
|
|
42
|
+
timeout: 60_000,
|
|
43
|
+
});
|
|
44
|
+
return this.parseResponse(response.data);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return this.handleError(err);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
parseResponse(data) {
|
|
51
|
+
if (!data) {
|
|
52
|
+
return { success: false, error: { code: 'EMPTY_RESPONSE', message: 'El OSE no devolvió respuesta' } };
|
|
53
|
+
}
|
|
54
|
+
const cdrZip = data.cdrZip || data.cdr || data.applicationResponse || data.contentFile || undefined;
|
|
55
|
+
const ticket = data.ticket ?? data.numTicket;
|
|
56
|
+
const codeRaw = data.cdrResponse?.code ?? data.code ?? data.codigoRespuesta;
|
|
57
|
+
const code = codeRaw !== undefined ? String(codeRaw) : undefined;
|
|
58
|
+
const description = data.cdrResponse?.description ?? data.description ?? data.descripcion;
|
|
59
|
+
const success = data.success !== undefined ? Boolean(data.success) : code === '0';
|
|
60
|
+
if (!success) {
|
|
61
|
+
return {
|
|
62
|
+
success: false,
|
|
63
|
+
error: {
|
|
64
|
+
code: code ?? 'OSE_ERROR',
|
|
65
|
+
message: description ?? 'Error devuelto por el OSE',
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return { success: true, cdrZipBase64: cdrZip, ticket };
|
|
70
|
+
}
|
|
71
|
+
buildAuth(ose) {
|
|
72
|
+
if (ose.token)
|
|
73
|
+
return `Bearer ${ose.token}`;
|
|
74
|
+
if (ose.username && ose.password) {
|
|
75
|
+
return `Basic ${Buffer.from(`${ose.username}:${ose.password}`).toString('base64')}`;
|
|
76
|
+
}
|
|
77
|
+
return '';
|
|
78
|
+
}
|
|
79
|
+
handleError(err) {
|
|
80
|
+
const data = err.response?.data;
|
|
81
|
+
if (data) {
|
|
82
|
+
const msg = data.message ?? data.description ?? data.descripcion ?? JSON.stringify(data);
|
|
83
|
+
const code = String(data.code ?? data.codigoRespuesta ?? err.response?.status ?? 'OSE_ERROR');
|
|
84
|
+
return { success: false, error: { code, message: msg } };
|
|
85
|
+
}
|
|
86
|
+
this.logger.error(`Error OSE: ${err.message}`);
|
|
87
|
+
return { success: false, error: { code: 'NETWORK_ERROR', message: err.message } };
|
|
88
|
+
}
|
|
89
|
+
async createZip(fileName, xmlContent) {
|
|
90
|
+
const zip = new JSZip();
|
|
91
|
+
const xmlFileName = fileName.replace(/\.zip$/i, '.xml');
|
|
92
|
+
zip.file(xmlFileName, xmlContent, { compression: 'DEFLATE' });
|
|
93
|
+
const zipBuffer = await zip.generateAsync({ type: 'nodebuffer' });
|
|
94
|
+
return zipBuffer.toString('base64');
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
exports.OseClient = OseClient;
|
|
98
|
+
exports.OseClient = OseClient = OseClient_1 = __decorate([
|
|
99
|
+
(0, common_1.Injectable)()
|
|
100
|
+
], OseClient);
|
|
101
|
+
//# sourceMappingURL=ose.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ose.client.js","sourceRoot":"","sources":["../../src/ose/ose.client.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAoD;AACpD,iCAA0C;AAC1C,+BAA+B;AAqBxB,IAAM,SAAS,iBAAf,MAAM,SAAS;IAAf;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,WAAS,CAAC,IAAI,CAAC,CAAC;IA0GvD,CAAC;IAxGC,KAAK,CAAC,QAAQ,CAAC,MAId;QACC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,EACd,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,EACjE;gBACE,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;iBAC5C;gBACD,OAAO,EAAE,MAAM;aAChB,CACF,CAAC;YAEF,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,WAAW,CAAC,GAAiB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAIjB;QACC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,EACd,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,EACjE;gBACE,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;iBAC5C;gBACD,OAAO,EAAE,MAAM;aAChB,CACF,CAAC;YAEF,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,WAAW,CAAC,GAAiB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,IAAS;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,8BAA8B,EAAE,EAAE,CAAC;QACxG,CAAC;QAED,MAAM,MAAM,GAAuB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC;QACxH,MAAM,MAAM,GAAuB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC;QAEjE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC;QAC5E,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,MAAM,WAAW,GAAuB,IAAI,CAAC,WAAW,EAAE,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;QAC9G,MAAM,OAAO,GAAY,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;QAE3F,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,IAAI,IAAI,WAAW;oBACzB,OAAO,EAAE,WAAW,IAAI,2BAA2B;iBACpD;aACF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACzD,CAAC;IAEO,SAAS,CAAC,GAAqB;QACrC,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,UAAU,GAAG,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjC,OAAO,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtF,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,WAAW,CAAC,GAAe;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAW,CAAC;QACvC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,GAAG,GAAW,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACjG,MAAM,IAAI,GAAW,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,WAAW,CAAC,CAAC;YACtG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACpF,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,UAAkB;QAC1D,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAClE,OAAO,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;CACF,CAAA;AA3GY,8BAAS;oBAAT,SAAS;IADrB,IAAA,mBAAU,GAAE;GACA,SAAS,CA2GrB"}
|
|
@@ -17,8 +17,16 @@ export interface SunatEngineCredentialsOptions {
|
|
|
17
17
|
certKey?: string;
|
|
18
18
|
endpointMode?: 'beta' | 'produccion';
|
|
19
19
|
}
|
|
20
|
+
export interface SunatEngineOseOptions {
|
|
21
|
+
url: string;
|
|
22
|
+
token?: string;
|
|
23
|
+
username?: string;
|
|
24
|
+
password?: string;
|
|
25
|
+
}
|
|
20
26
|
export interface SunatEngineOptions {
|
|
27
|
+
provider?: 'sunat' | 'ose';
|
|
21
28
|
sunat?: SunatEngineCredentialsOptions;
|
|
29
|
+
ose?: SunatEngineOseOptions;
|
|
22
30
|
gre?: SunatEngineGreOptions;
|
|
23
31
|
}
|
|
24
32
|
export interface SunatEngineAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
@@ -15,12 +15,14 @@ const sunat_soap_client_1 = require("./soap/sunat-soap.client");
|
|
|
15
15
|
const sunat_gre_client_1 = require("./gre/sunat-gre.client");
|
|
16
16
|
const cdr_parser_service_1 = require("./cdr/cdr-parser.service");
|
|
17
17
|
const document_pdf_service_1 = require("./pdf/document-pdf.service");
|
|
18
|
+
const ose_client_1 = require("./ose/ose.client");
|
|
18
19
|
exports.SUNAT_ENGINE_OPTIONS = 'SUNAT_ENGINE_OPTIONS';
|
|
19
20
|
const ENGINE_PROVIDERS = [
|
|
20
21
|
sunat_engine_service_1.SunatEngineService,
|
|
21
22
|
xml_signer_service_1.XmlSignerService,
|
|
22
23
|
sunat_soap_client_1.SunatSoapClient,
|
|
23
24
|
sunat_gre_client_1.SunatGreClient,
|
|
25
|
+
ose_client_1.OseClient,
|
|
24
26
|
cdr_parser_service_1.CdrParserService,
|
|
25
27
|
document_pdf_service_1.DocumentPdfService,
|
|
26
28
|
];
|
|
@@ -29,6 +31,7 @@ const ENGINE_EXPORTS = [
|
|
|
29
31
|
xml_signer_service_1.XmlSignerService,
|
|
30
32
|
sunat_soap_client_1.SunatSoapClient,
|
|
31
33
|
sunat_gre_client_1.SunatGreClient,
|
|
34
|
+
ose_client_1.OseClient,
|
|
32
35
|
cdr_parser_service_1.CdrParserService,
|
|
33
36
|
document_pdf_service_1.DocumentPdfService,
|
|
34
37
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sunat-engine.module.js","sourceRoot":"","sources":["../src/sunat-engine.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA+E;AAC/E,iEAA4D;AAC5D,oEAA+D;AAC/D,gEAA2D;AAC3D,6DAAwD;AACxD,iEAA4D;AAC5D,qEAAgE;
|
|
1
|
+
{"version":3,"file":"sunat-engine.module.js","sourceRoot":"","sources":["../src/sunat-engine.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA+E;AAC/E,iEAA4D;AAC5D,oEAA+D;AAC/D,gEAA2D;AAC3D,6DAAwD;AACxD,iEAA4D;AAC5D,qEAAgE;AAChE,iDAA6C;AA2ChC,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAI3D,MAAM,gBAAgB,GAAG;IACvB,yCAAkB;IAClB,qCAAgB;IAChB,mCAAe;IACf,iCAAc;IACd,sBAAS;IACT,qCAAgB;IAChB,yCAAkB;CACnB,CAAC;AAEF,MAAM,cAAc,GAAG;IACrB,yCAAkB;IAClB,qCAAgB;IAChB,mCAAe;IACf,iCAAc;IACd,sBAAS;IACT,qCAAgB;IAChB,yCAAkB;CACnB,CAAC;AAIK,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAc5B,MAAM,CAAC,OAAO,CAAC,UAA8B,EAAE;QAC7C,OAAO;YACL,MAAM,EAAE,mBAAiB;YACzB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,4BAAoB,EAAE,QAAQ,EAAE,OAAO,EAAE;gBACpD,GAAG,gBAAgB;aACpB;YACD,OAAO,EAAE,cAAc;SACxB,CAAC;IACJ,CAAC;IAkBD,MAAM,CAAC,YAAY,CAAC,YAAqC;QACvD,OAAO;YACL,MAAM,EAAE,mBAAiB;YACzB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,EAAE;YACnC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,4BAAoB;oBAC7B,UAAU,EAAE,YAAY,CAAC,UAAU;oBACnC,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,EAAE;iBAClC;gBACD,GAAG,gBAAgB;aACpB;YACD,OAAO,EAAE,cAAc;SACxB,CAAC;IACJ,CAAC;CACF,CAAA;AA1DY,8CAAiB;4BAAjB,iBAAiB;IAF7B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,iBAAiB,CA0D7B"}
|
|
@@ -2,16 +2,19 @@ import { CompanyCredentials, EngineResponse, InvoicePayload, NotePayload, Despat
|
|
|
2
2
|
import { XmlSignerService } from './signer/xml-signer.service';
|
|
3
3
|
import { SunatSoapClient } from './soap/sunat-soap.client';
|
|
4
4
|
import { SunatGreClient } from './gre/sunat-gre.client';
|
|
5
|
+
import { OseClient } from './ose/ose.client';
|
|
5
6
|
import { CdrParserService } from './cdr/cdr-parser.service';
|
|
6
7
|
import { SunatEngineOptions } from './sunat-engine.module';
|
|
7
8
|
export declare class SunatEngineService {
|
|
8
9
|
private readonly signer;
|
|
9
10
|
private readonly soap;
|
|
10
11
|
private readonly gre;
|
|
12
|
+
private readonly oseClient;
|
|
11
13
|
private readonly cdrParser;
|
|
12
14
|
private readonly options;
|
|
13
15
|
private readonly logger;
|
|
14
|
-
constructor(signer: XmlSignerService, soap: SunatSoapClient, gre: SunatGreClient, cdrParser: CdrParserService, options: SunatEngineOptions);
|
|
16
|
+
constructor(signer: XmlSignerService, soap: SunatSoapClient, gre: SunatGreClient, oseClient: OseClient, cdrParser: CdrParserService, options: SunatEngineOptions);
|
|
17
|
+
private useOse;
|
|
15
18
|
private resolveCredentials;
|
|
16
19
|
sendInvoice(payload: InvoicePayload, credentials?: Partial<CompanyCredentials>): Promise<EngineResponse>;
|
|
17
20
|
sendNote(payload: NotePayload, credentials?: Partial<CompanyCredentials>): Promise<EngineResponse>;
|
|
@@ -23,17 +23,22 @@ const voided_builder_1 = require("./xml/voided.builder");
|
|
|
23
23
|
const xml_signer_service_1 = require("./signer/xml-signer.service");
|
|
24
24
|
const sunat_soap_client_1 = require("./soap/sunat-soap.client");
|
|
25
25
|
const sunat_gre_client_1 = require("./gre/sunat-gre.client");
|
|
26
|
+
const ose_client_1 = require("./ose/ose.client");
|
|
26
27
|
const cdr_parser_service_1 = require("./cdr/cdr-parser.service");
|
|
27
28
|
const sunat_engine_module_1 = require("./sunat-engine.module");
|
|
28
29
|
let SunatEngineService = SunatEngineService_1 = class SunatEngineService {
|
|
29
|
-
constructor(signer, soap, gre, cdrParser, options) {
|
|
30
|
+
constructor(signer, soap, gre, oseClient, cdrParser, options) {
|
|
30
31
|
this.signer = signer;
|
|
31
32
|
this.soap = soap;
|
|
32
33
|
this.gre = gre;
|
|
34
|
+
this.oseClient = oseClient;
|
|
33
35
|
this.cdrParser = cdrParser;
|
|
34
36
|
this.options = options;
|
|
35
37
|
this.logger = new common_1.Logger(SunatEngineService_1.name);
|
|
36
38
|
}
|
|
39
|
+
useOse() {
|
|
40
|
+
return (this.options.provider ?? 'sunat') === 'ose';
|
|
41
|
+
}
|
|
37
42
|
resolveCredentials(perCall) {
|
|
38
43
|
const global = this.options.sunat ?? {};
|
|
39
44
|
const merged = { ...global, ...perCall };
|
|
@@ -47,20 +52,13 @@ let SunatEngineService = SunatEngineService_1 = class SunatEngineService {
|
|
|
47
52
|
const xmlUnsigned = (0, invoice_builder_1.buildInvoiceXml)(payload);
|
|
48
53
|
const { signedXml, hash } = this.signDocument(xmlUnsigned, creds);
|
|
49
54
|
const fileName = this.soap.buildZipFileName(creds.ruc, payload.tipoDoc, payload.serie, payload.correlativo);
|
|
50
|
-
const result =
|
|
51
|
-
|
|
52
|
-
solUser: creds.solUser,
|
|
53
|
-
solPass: creds.solPass,
|
|
54
|
-
fileName,
|
|
55
|
-
xmlSigned: signedXml,
|
|
56
|
-
mode: creds.endpointMode ?? 'beta',
|
|
57
|
-
});
|
|
55
|
+
const result = this.useOse()
|
|
56
|
+
? await this.oseClient.sendBill({ fileName, xmlSigned: signedXml, ose: this.options.ose })
|
|
57
|
+
: await this.soap.sendBill({ ruc: creds.ruc, solUser: creds.solUser, solPass: creds.solPass, fileName, xmlSigned: signedXml, mode: creds.endpointMode ?? 'beta' });
|
|
58
58
|
if (!result.success) {
|
|
59
59
|
return { xml: Buffer.from(signedXml).toString('base64'), hash, sunatResponse: { success: false, error: result.error } };
|
|
60
60
|
}
|
|
61
|
-
const cdrResponse = result.cdrZipBase64
|
|
62
|
-
? await this.cdrParser.parse(result.cdrZipBase64)
|
|
63
|
-
: undefined;
|
|
61
|
+
const cdrResponse = result.cdrZipBase64 ? await this.cdrParser.parse(result.cdrZipBase64) : undefined;
|
|
64
62
|
return {
|
|
65
63
|
xml: Buffer.from(signedXml).toString('base64'),
|
|
66
64
|
hash,
|
|
@@ -76,26 +74,14 @@ let SunatEngineService = SunatEngineService_1 = class SunatEngineService {
|
|
|
76
74
|
const xmlUnsigned = (0, note_builder_1.buildNoteXml)(payload);
|
|
77
75
|
const { signedXml, hash } = this.signDocument(xmlUnsigned, creds);
|
|
78
76
|
const fileName = this.soap.buildZipFileName(creds.ruc, payload.tipoDoc, payload.serie, payload.correlativo);
|
|
79
|
-
const result =
|
|
80
|
-
|
|
81
|
-
solUser: creds.solUser,
|
|
82
|
-
|
|
83
|
-
fileName,
|
|
84
|
-
xmlSigned: signedXml,
|
|
85
|
-
mode: creds.endpointMode ?? 'beta',
|
|
86
|
-
});
|
|
87
|
-
const cdrResponse = result.cdrZipBase64
|
|
88
|
-
? await this.cdrParser.parse(result.cdrZipBase64)
|
|
89
|
-
: undefined;
|
|
77
|
+
const result = this.useOse()
|
|
78
|
+
? await this.oseClient.sendBill({ fileName, xmlSigned: signedXml, ose: this.options.ose })
|
|
79
|
+
: await this.soap.sendBill({ ruc: creds.ruc, solUser: creds.solUser, solPass: creds.solPass, fileName, xmlSigned: signedXml, mode: creds.endpointMode ?? 'beta' });
|
|
80
|
+
const cdrResponse = result.cdrZipBase64 ? await this.cdrParser.parse(result.cdrZipBase64) : undefined;
|
|
90
81
|
return {
|
|
91
82
|
xml: Buffer.from(signedXml).toString('base64'),
|
|
92
83
|
hash,
|
|
93
|
-
sunatResponse: {
|
|
94
|
-
success: result.success,
|
|
95
|
-
cdrZip: result.cdrZipBase64,
|
|
96
|
-
cdrResponse,
|
|
97
|
-
error: result.error,
|
|
98
|
-
},
|
|
84
|
+
sunatResponse: { success: result.success, cdrZip: result.cdrZipBase64, cdrResponse, error: result.error },
|
|
99
85
|
};
|
|
100
86
|
}
|
|
101
87
|
async sendDespatch(payload, credentials) {
|
|
@@ -130,22 +116,13 @@ let SunatEngineService = SunatEngineService_1 = class SunatEngineService {
|
|
|
130
116
|
const { signedXml, hash } = this.signDocument(xmlUnsigned, creds);
|
|
131
117
|
const fecha = payload.fecResumen.slice(0, 10);
|
|
132
118
|
const fileName = this.soap.buildSummaryFileName(creds.ruc, 'RC', fecha, payload.correlativo);
|
|
133
|
-
const result =
|
|
134
|
-
|
|
135
|
-
solUser: creds.solUser,
|
|
136
|
-
solPass: creds.solPass,
|
|
137
|
-
fileName,
|
|
138
|
-
xmlSigned: signedXml,
|
|
139
|
-
mode: creds.endpointMode ?? 'beta',
|
|
140
|
-
});
|
|
119
|
+
const result = this.useOse()
|
|
120
|
+
? await this.oseClient.sendSummary({ fileName, xmlSigned: signedXml, ose: this.options.ose })
|
|
121
|
+
: await this.soap.sendSummary({ ruc: creds.ruc, solUser: creds.solUser, solPass: creds.solPass, fileName, xmlSigned: signedXml, mode: creds.endpointMode ?? 'beta' });
|
|
141
122
|
return {
|
|
142
123
|
xml: Buffer.from(signedXml).toString('base64'),
|
|
143
124
|
hash,
|
|
144
|
-
sunatResponse: {
|
|
145
|
-
success: result.success,
|
|
146
|
-
ticket: result.ticket,
|
|
147
|
-
error: result.error,
|
|
148
|
-
},
|
|
125
|
+
sunatResponse: { success: result.success, ticket: result.ticket, error: result.error },
|
|
149
126
|
};
|
|
150
127
|
}
|
|
151
128
|
async sendVoided(payload, credentials) {
|
|
@@ -154,14 +131,9 @@ let SunatEngineService = SunatEngineService_1 = class SunatEngineService {
|
|
|
154
131
|
const { signedXml, hash } = this.signDocument(xmlUnsigned, creds);
|
|
155
132
|
const fecha = payload.fecGeneracion.slice(0, 10);
|
|
156
133
|
const fileName = this.soap.buildSummaryFileName(creds.ruc, 'RA', fecha, payload.correlativo);
|
|
157
|
-
const result =
|
|
158
|
-
|
|
159
|
-
solUser: creds.solUser,
|
|
160
|
-
solPass: creds.solPass,
|
|
161
|
-
fileName,
|
|
162
|
-
xmlSigned: signedXml,
|
|
163
|
-
mode: creds.endpointMode ?? 'beta',
|
|
164
|
-
});
|
|
134
|
+
const result = this.useOse()
|
|
135
|
+
? await this.oseClient.sendSummary({ fileName, xmlSigned: signedXml, ose: this.options.ose })
|
|
136
|
+
: await this.soap.sendSummary({ ruc: creds.ruc, solUser: creds.solUser, solPass: creds.solPass, fileName, xmlSigned: signedXml, mode: creds.endpointMode ?? 'beta' });
|
|
165
137
|
return {
|
|
166
138
|
xml: Buffer.from(signedXml).toString('base64'),
|
|
167
139
|
hash,
|
|
@@ -239,10 +211,11 @@ let SunatEngineService = SunatEngineService_1 = class SunatEngineService {
|
|
|
239
211
|
exports.SunatEngineService = SunatEngineService;
|
|
240
212
|
exports.SunatEngineService = SunatEngineService = SunatEngineService_1 = __decorate([
|
|
241
213
|
(0, common_1.Injectable)(),
|
|
242
|
-
__param(
|
|
214
|
+
__param(5, (0, common_1.Inject)(sunat_engine_module_1.SUNAT_ENGINE_OPTIONS)),
|
|
243
215
|
__metadata("design:paramtypes", [xml_signer_service_1.XmlSignerService,
|
|
244
216
|
sunat_soap_client_1.SunatSoapClient,
|
|
245
217
|
sunat_gre_client_1.SunatGreClient,
|
|
218
|
+
ose_client_1.OseClient,
|
|
246
219
|
cdr_parser_service_1.CdrParserService, Object])
|
|
247
220
|
], SunatEngineService);
|
|
248
221
|
//# sourceMappingURL=sunat-engine.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sunat-engine.service.js","sourceRoot":"","sources":["../src/sunat-engine.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4D;AAU5D,2DAAwD;AACxD,qDAAkD;AAClD,6DAA0D;AAC1D,2DAAwD;AACxD,yDAAsD;AACtD,oEAA+D;AAC/D,gEAA2D;AAC3D,6DAAwD;AACxD,iEAA4D;AAC5D,+DAAiF;AAG1E,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAG7B,YACmB,MAAwB,EACxB,IAAqB,EACrB,GAAmB,EACnB,SAA2B,EACd,OAA4C;
|
|
1
|
+
{"version":3,"file":"sunat-engine.service.js","sourceRoot":"","sources":["../src/sunat-engine.service.ts"],"names":[],"mappings":"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"}
|