sunat-engine-nest 1.0.0

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.
Files changed (50) hide show
  1. package/dist/cdr/cdr-parser.service.d.ts +6 -0
  2. package/dist/cdr/cdr-parser.service.js +69 -0
  3. package/dist/cdr/cdr-parser.service.js.map +1 -0
  4. package/dist/gre/sunat-gre.client.d.ts +53 -0
  5. package/dist/gre/sunat-gre.client.js +155 -0
  6. package/dist/gre/sunat-gre.client.js.map +1 -0
  7. package/dist/index.d.ts +16 -0
  8. package/dist/index.js +29 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/pdf/document-pdf.service.d.ts +11 -0
  11. package/dist/pdf/document-pdf.service.js +230 -0
  12. package/dist/pdf/document-pdf.service.js.map +1 -0
  13. package/dist/signer/xml-signer.service.d.ts +12 -0
  14. package/dist/signer/xml-signer.service.js +110 -0
  15. package/dist/signer/xml-signer.service.js.map +1 -0
  16. package/dist/soap/sunat-soap.client.d.ts +54 -0
  17. package/dist/soap/sunat-soap.client.js +217 -0
  18. package/dist/soap/sunat-soap.client.js.map +1 -0
  19. package/dist/sunat-engine.module.d.ts +23 -0
  20. package/dist/sunat-engine.module.js +69 -0
  21. package/dist/sunat-engine.module.js.map +1 -0
  22. package/dist/sunat-engine.service.d.ts +20 -0
  23. package/dist/sunat-engine.service.js +228 -0
  24. package/dist/sunat-engine.service.js.map +1 -0
  25. package/dist/tsconfig.build.tsbuildinfo +1 -0
  26. package/dist/types/sunat.types.d.ts +263 -0
  27. package/dist/types/sunat.types.js +3 -0
  28. package/dist/types/sunat.types.js.map +1 -0
  29. package/dist/xml/common.builder.d.ts +38 -0
  30. package/dist/xml/common.builder.js +251 -0
  31. package/dist/xml/common.builder.js.map +1 -0
  32. package/dist/xml/despatch.builder.d.ts +2 -0
  33. package/dist/xml/despatch.builder.js +150 -0
  34. package/dist/xml/despatch.builder.js.map +1 -0
  35. package/dist/xml/invoice.builder.d.ts +2 -0
  36. package/dist/xml/invoice.builder.js +112 -0
  37. package/dist/xml/invoice.builder.js.map +1 -0
  38. package/dist/xml/namespaces.d.ts +67 -0
  39. package/dist/xml/namespaces.js +99 -0
  40. package/dist/xml/namespaces.js.map +1 -0
  41. package/dist/xml/note.builder.d.ts +2 -0
  42. package/dist/xml/note.builder.js +55 -0
  43. package/dist/xml/note.builder.js.map +1 -0
  44. package/dist/xml/summary.builder.d.ts +2 -0
  45. package/dist/xml/summary.builder.js +101 -0
  46. package/dist/xml/summary.builder.js.map +1 -0
  47. package/dist/xml/voided.builder.d.ts +2 -0
  48. package/dist/xml/voided.builder.js +36 -0
  49. package/dist/xml/voided.builder.js.map +1 -0
  50. package/package.json +46 -0
@@ -0,0 +1,228 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var SunatEngineService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.SunatEngineService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const invoice_builder_1 = require("./xml/invoice.builder");
16
+ const note_builder_1 = require("./xml/note.builder");
17
+ const despatch_builder_1 = require("./xml/despatch.builder");
18
+ const summary_builder_1 = require("./xml/summary.builder");
19
+ const voided_builder_1 = require("./xml/voided.builder");
20
+ const xml_signer_service_1 = require("./signer/xml-signer.service");
21
+ const sunat_soap_client_1 = require("./soap/sunat-soap.client");
22
+ const sunat_gre_client_1 = require("./gre/sunat-gre.client");
23
+ const cdr_parser_service_1 = require("./cdr/cdr-parser.service");
24
+ let SunatEngineService = SunatEngineService_1 = class SunatEngineService {
25
+ constructor(signer, soap, gre, cdrParser) {
26
+ this.signer = signer;
27
+ this.soap = soap;
28
+ this.gre = gre;
29
+ this.cdrParser = cdrParser;
30
+ this.logger = new common_1.Logger(SunatEngineService_1.name);
31
+ }
32
+ async sendInvoice(payload, credentials) {
33
+ const xmlUnsigned = (0, invoice_builder_1.buildInvoiceXml)(payload);
34
+ const { signedXml, hash } = this.signDocument(xmlUnsigned, credentials);
35
+ const fileName = this.soap.buildZipFileName(credentials.ruc, payload.tipoDoc, payload.serie, payload.correlativo);
36
+ const result = await this.soap.sendBill({
37
+ ruc: credentials.ruc,
38
+ solUser: credentials.solUser,
39
+ solPass: credentials.solPass,
40
+ fileName,
41
+ xmlSigned: signedXml,
42
+ mode: credentials.endpointMode ?? 'beta',
43
+ });
44
+ if (!result.success) {
45
+ return { xml: Buffer.from(signedXml).toString('base64'), hash, sunatResponse: { success: false, error: result.error } };
46
+ }
47
+ const cdrResponse = result.cdrZipBase64
48
+ ? await this.cdrParser.parse(result.cdrZipBase64)
49
+ : undefined;
50
+ return {
51
+ xml: Buffer.from(signedXml).toString('base64'),
52
+ hash,
53
+ sunatResponse: {
54
+ success: cdrResponse?.code === '0' || !result.error,
55
+ cdrZip: result.cdrZipBase64,
56
+ cdrResponse,
57
+ },
58
+ };
59
+ }
60
+ async sendNote(payload, credentials) {
61
+ const xmlUnsigned = (0, note_builder_1.buildNoteXml)(payload);
62
+ const { signedXml, hash } = this.signDocument(xmlUnsigned, credentials);
63
+ const fileName = this.soap.buildZipFileName(credentials.ruc, payload.tipoDoc, payload.serie, payload.correlativo);
64
+ const result = await this.soap.sendBill({
65
+ ruc: credentials.ruc,
66
+ solUser: credentials.solUser,
67
+ solPass: credentials.solPass,
68
+ fileName,
69
+ xmlSigned: signedXml,
70
+ mode: credentials.endpointMode ?? 'beta',
71
+ });
72
+ const cdrResponse = result.cdrZipBase64
73
+ ? await this.cdrParser.parse(result.cdrZipBase64)
74
+ : undefined;
75
+ return {
76
+ xml: Buffer.from(signedXml).toString('base64'),
77
+ hash,
78
+ sunatResponse: {
79
+ success: result.success,
80
+ cdrZip: result.cdrZipBase64,
81
+ cdrResponse,
82
+ error: result.error,
83
+ },
84
+ };
85
+ }
86
+ async sendDespatch(payload, credentials) {
87
+ const xmlUnsigned = (0, despatch_builder_1.buildDespatchXml)(payload);
88
+ const { signedXml, hash } = this.signDocument(xmlUnsigned, credentials);
89
+ const result = await this.gre.sendGRE({
90
+ ruc: credentials.ruc,
91
+ solUser: credentials.solUser,
92
+ solPass: credentials.solPass,
93
+ serie: payload.serie,
94
+ correlativo: payload.correlativo,
95
+ signedXml,
96
+ clientId: credentials.greClientId,
97
+ clientSecret: credentials.greClientSecret,
98
+ authUrl: credentials.greAuthUrl,
99
+ apiUrl: credentials.greApiUrl,
100
+ });
101
+ return {
102
+ xml: Buffer.from(signedXml).toString('base64'),
103
+ hash,
104
+ sunatResponse: {
105
+ success: result.success,
106
+ ticket: result.ticket,
107
+ error: result.error,
108
+ },
109
+ };
110
+ }
111
+ async sendSummary(payload, credentials) {
112
+ const xmlUnsigned = (0, summary_builder_1.buildSummaryXml)(payload);
113
+ const { signedXml, hash } = this.signDocument(xmlUnsigned, credentials);
114
+ const fecha = payload.fecResumen.slice(0, 10);
115
+ const fileName = this.soap.buildSummaryFileName(credentials.ruc, 'RC', fecha, payload.correlativo);
116
+ const result = await this.soap.sendSummary({
117
+ ruc: credentials.ruc,
118
+ solUser: credentials.solUser,
119
+ solPass: credentials.solPass,
120
+ fileName,
121
+ xmlSigned: signedXml,
122
+ mode: credentials.endpointMode ?? 'beta',
123
+ });
124
+ return {
125
+ xml: Buffer.from(signedXml).toString('base64'),
126
+ hash,
127
+ sunatResponse: {
128
+ success: result.success,
129
+ ticket: result.ticket,
130
+ error: result.error,
131
+ },
132
+ };
133
+ }
134
+ async sendVoided(payload, credentials) {
135
+ const xmlUnsigned = (0, voided_builder_1.buildVoidedXml)(payload);
136
+ const { signedXml, hash } = this.signDocument(xmlUnsigned, credentials);
137
+ const fecha = payload.fecGeneracion.slice(0, 10);
138
+ const fileName = this.soap.buildSummaryFileName(credentials.ruc, 'RA', fecha, payload.correlativo);
139
+ const result = await this.soap.sendSummary({
140
+ ruc: credentials.ruc,
141
+ solUser: credentials.solUser,
142
+ solPass: credentials.solPass,
143
+ fileName,
144
+ xmlSigned: signedXml,
145
+ mode: credentials.endpointMode ?? 'beta',
146
+ });
147
+ return {
148
+ xml: Buffer.from(signedXml).toString('base64'),
149
+ hash,
150
+ sunatResponse: {
151
+ success: result.success,
152
+ ticket: result.ticket,
153
+ error: result.error,
154
+ },
155
+ };
156
+ }
157
+ async getTicketStatus(ticket, credentials, endpointType = 'factura') {
158
+ if (endpointType === 'guia') {
159
+ const result = await this.gre.getStatus({
160
+ ruc: credentials.ruc,
161
+ solUser: credentials.solUser,
162
+ solPass: credentials.solPass,
163
+ ticket,
164
+ clientId: credentials.greClientId,
165
+ clientSecret: credentials.greClientSecret,
166
+ authUrl: credentials.greAuthUrl,
167
+ apiUrl: credentials.greApiUrl,
168
+ });
169
+ const cdrResponse = result.cdrZipBase64
170
+ ? await this.cdrParser.parse(result.cdrZipBase64)
171
+ : undefined;
172
+ return {
173
+ sunatResponse: {
174
+ success: result.success,
175
+ cdrZip: result.cdrZipBase64,
176
+ cdrResponse,
177
+ error: result.error,
178
+ },
179
+ };
180
+ }
181
+ const result = await this.soap.getStatus({
182
+ ruc: credentials.ruc,
183
+ solUser: credentials.solUser,
184
+ solPass: credentials.solPass,
185
+ ticket,
186
+ mode: credentials.endpointMode ?? 'beta',
187
+ endpointType,
188
+ });
189
+ const cdrResponse = result.cdrZipBase64
190
+ ? await this.cdrParser.parse(result.cdrZipBase64)
191
+ : undefined;
192
+ return {
193
+ sunatResponse: {
194
+ success: result.success,
195
+ cdrZip: result.cdrZipBase64,
196
+ cdrResponse,
197
+ error: result.error,
198
+ },
199
+ };
200
+ }
201
+ signDocument(xmlUnsigned, credentials) {
202
+ let privateKeyPem = credentials.certKey ?? '';
203
+ let certPem = credentials.certPem;
204
+ if (!certPem.includes('-----BEGIN')) {
205
+ const extracted = this.signer.loadP12(certPem);
206
+ privateKeyPem = extracted.privateKeyPem;
207
+ certPem = extracted.certPem;
208
+ }
209
+ else {
210
+ certPem = this.signer.normalizeCertPem(certPem);
211
+ if (!privateKeyPem) {
212
+ throw new Error('certKey (clave privada PEM) requerida cuando certPem es PEM y no p12');
213
+ }
214
+ }
215
+ const signedXml = this.signer.sign(xmlUnsigned, privateKeyPem, certPem);
216
+ const hash = this.signer.hashXml(signedXml);
217
+ return { signedXml, hash };
218
+ }
219
+ };
220
+ exports.SunatEngineService = SunatEngineService;
221
+ exports.SunatEngineService = SunatEngineService = SunatEngineService_1 = __decorate([
222
+ (0, common_1.Injectable)(),
223
+ __metadata("design:paramtypes", [xml_signer_service_1.XmlSignerService,
224
+ sunat_soap_client_1.SunatSoapClient,
225
+ sunat_gre_client_1.SunatGreClient,
226
+ cdr_parser_service_1.CdrParserService])
227
+ ], SunatEngineService);
228
+ //# sourceMappingURL=sunat-engine.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sunat-engine.service.js","sourceRoot":"","sources":["../src/sunat-engine.service.ts"],"names":[],"mappings":"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"}