consultame-sdk 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.
- package/README.md +585 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +324 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +298 -0
- package/dist/index.mjs.map +1 -0
- package/dist/shared/dto/responseDigitalSign.dto.d.ts +5 -0
- package/dist/shared/dto/responseDigitalSign.dto.d.ts.map +1 -0
- package/dist/shared/functions/functions.utils.d.ts +10 -0
- package/dist/shared/functions/functions.utils.d.ts.map +1 -0
- package/dist/shared/utils/dictionary.utils.d.ts +9 -0
- package/dist/shared/utils/dictionary.utils.d.ts.map +1 -0
- package/dist/sifen/applications/dtos/cancelDocument.dto.d.ts +6 -0
- package/dist/sifen/applications/dtos/cancelDocument.dto.d.ts.map +1 -0
- package/dist/sifen/applications/dtos/consultBatch.dto.d.ts +5 -0
- package/dist/sifen/applications/dtos/consultBatch.dto.d.ts.map +1 -0
- package/dist/sifen/applications/dtos/consultDocument.dto.d.ts +6 -0
- package/dist/sifen/applications/dtos/consultDocument.dto.d.ts.map +1 -0
- package/dist/sifen/applications/dtos/consultRuc.dto.d.ts +5 -0
- package/dist/sifen/applications/dtos/consultRuc.dto.d.ts.map +1 -0
- package/dist/sifen/applications/dtos/digitalSign.dto.d.ts +5 -0
- package/dist/sifen/applications/dtos/digitalSign.dto.d.ts.map +1 -0
- package/dist/sifen/applications/dtos/generateId.dto.d.ts +4 -0
- package/dist/sifen/applications/dtos/generateId.dto.d.ts.map +1 -0
- package/dist/sifen/applications/dtos/generationQr.dto.d.ts +7 -0
- package/dist/sifen/applications/dtos/generationQr.dto.d.ts.map +1 -0
- package/dist/sifen/applications/dtos/index.d.ts +6 -0
- package/dist/sifen/applications/dtos/index.d.ts.map +1 -0
- package/dist/sifen/applications/dtos/invalidationInvoice.dto.d.ts +11 -0
- package/dist/sifen/applications/dtos/invalidationInvoice.dto.d.ts.map +1 -0
- package/dist/sifen/applications/services/sifen.service.d.ts +16 -0
- package/dist/sifen/applications/services/sifen.service.d.ts.map +1 -0
- package/dist/sifen/domain/repository/sifen.repository.d.ts +14 -0
- package/dist/sifen/domain/repository/sifen.repository.d.ts.map +1 -0
- package/dist/sifen/domain/useCases/consultBatch.useCase.d.ts +8 -0
- package/dist/sifen/domain/useCases/consultBatch.useCase.d.ts.map +1 -0
- package/dist/sifen/domain/useCases/consultDocument.useCase.d.ts +8 -0
- package/dist/sifen/domain/useCases/consultDocument.useCase.d.ts.map +1 -0
- package/dist/sifen/domain/useCases/consultRuc.useCase.d.ts +8 -0
- package/dist/sifen/domain/useCases/consultRuc.useCase.d.ts.map +1 -0
- package/dist/sifen/domain/useCases/generateQr.useCase.d.ts +8 -0
- package/dist/sifen/domain/useCases/generateQr.useCase.d.ts.map +1 -0
- package/dist/sifen/domain/useCases/index.d.ts +6 -0
- package/dist/sifen/domain/useCases/index.d.ts.map +1 -0
- package/dist/sifen/domain/useCases/obtainDigitalSign.useCase.d.ts +8 -0
- package/dist/sifen/domain/useCases/obtainDigitalSign.useCase.d.ts.map +1 -0
- package/dist/sifen/infrastructure/persistence/sifen.persistence.d.ts +15 -0
- package/dist/sifen/infrastructure/persistence/sifen.persistence.d.ts.map +1 -0
- package/package.json +69 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fs = require('fs');
|
|
4
|
+
var forge = require('node-forge');
|
|
5
|
+
var xml2js = require('xml2js');
|
|
6
|
+
var sha256 = require('crypto-js/sha256');
|
|
7
|
+
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
function _interopNamespace(e) {
|
|
11
|
+
if (e && e.__esModule) return e;
|
|
12
|
+
var n = Object.create(null);
|
|
13
|
+
if (e) {
|
|
14
|
+
Object.keys(e).forEach(function (k) {
|
|
15
|
+
if (k !== 'default') {
|
|
16
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
17
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return e[k]; }
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
n.default = e;
|
|
25
|
+
return Object.freeze(n);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
var forge__namespace = /*#__PURE__*/_interopNamespace(forge);
|
|
29
|
+
var xml2js__namespace = /*#__PURE__*/_interopNamespace(xml2js);
|
|
30
|
+
var sha256__default = /*#__PURE__*/_interopDefault(sha256);
|
|
31
|
+
|
|
32
|
+
// src/sifen/domain/useCases/consultBatch.useCase.ts
|
|
33
|
+
var ConsultBatchUseCase = class {
|
|
34
|
+
constructor(sifenRepository) {
|
|
35
|
+
this.sifenRepository = sifenRepository;
|
|
36
|
+
}
|
|
37
|
+
sifenRepository;
|
|
38
|
+
execute(consultBatchDto) {
|
|
39
|
+
const batch = this.sifenRepository.consultBatch(consultBatchDto);
|
|
40
|
+
return batch;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// src/sifen/domain/useCases/consultRuc.useCase.ts
|
|
45
|
+
var ConsultRucUseCase = class {
|
|
46
|
+
constructor(sifenRepository) {
|
|
47
|
+
this.sifenRepository = sifenRepository;
|
|
48
|
+
}
|
|
49
|
+
sifenRepository;
|
|
50
|
+
execute(consultRucDto) {
|
|
51
|
+
const ruc = this.sifenRepository.consultRuc(consultRucDto);
|
|
52
|
+
return ruc;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// src/sifen/domain/useCases/consultDocument.useCase.ts
|
|
57
|
+
var ConsultDocumentUseCase = class {
|
|
58
|
+
constructor(sifenRepository) {
|
|
59
|
+
this.sifenRepository = sifenRepository;
|
|
60
|
+
}
|
|
61
|
+
sifenRepository;
|
|
62
|
+
execute(consultDocumentDto) {
|
|
63
|
+
const document = this.sifenRepository.consultDocument(consultDocumentDto);
|
|
64
|
+
return document;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// src/sifen/domain/useCases/obtainDigitalSign.useCase.ts
|
|
69
|
+
var ObtainDigitalSignUseCase = class {
|
|
70
|
+
constructor(sifenRepository) {
|
|
71
|
+
this.sifenRepository = sifenRepository;
|
|
72
|
+
}
|
|
73
|
+
sifenRepository;
|
|
74
|
+
execute(digitalSignDto) {
|
|
75
|
+
const digitalSign = this.sifenRepository.obtainDigitalSign(digitalSignDto);
|
|
76
|
+
return digitalSign;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// src/sifen/domain/useCases/generateQr.useCase.ts
|
|
81
|
+
var GenerateQrUseCase = class {
|
|
82
|
+
constructor(sifenRepository) {
|
|
83
|
+
this.sifenRepository = sifenRepository;
|
|
84
|
+
}
|
|
85
|
+
sifenRepository;
|
|
86
|
+
async execute(generationQrDto) {
|
|
87
|
+
const generationQr = await this.sifenRepository.generateQr(generationQrDto);
|
|
88
|
+
return generationQr;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
function normalizeXML(xml) {
|
|
92
|
+
xml = xml.split("\r\n").join("");
|
|
93
|
+
xml = xml.split("\n").join("");
|
|
94
|
+
xml = xml.split(" ").join("");
|
|
95
|
+
xml = xml.split(" ").join("");
|
|
96
|
+
xml = xml.split("> <").join("><");
|
|
97
|
+
xml = xml.split("> <").join("><");
|
|
98
|
+
xml = xml.replace(/\r?\n|\r/g, "");
|
|
99
|
+
return xml;
|
|
100
|
+
}
|
|
101
|
+
var generateConsultRucXml = (consultRucDto) => {
|
|
102
|
+
return `<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
|
|
103
|
+
<env:Header/>
|
|
104
|
+
<env:Body>
|
|
105
|
+
<rEnviConsRUC xmlns="http://ekuatia.set.gov.py/sifen/xsd">
|
|
106
|
+
<dId>${consultRucDto.id}</dId>
|
|
107
|
+
<dRUCCons>${consultRucDto.ruc}</dRUCCons>
|
|
108
|
+
</rEnviConsRUC>
|
|
109
|
+
</env:Body>
|
|
110
|
+
</env:Envelope>
|
|
111
|
+
`;
|
|
112
|
+
};
|
|
113
|
+
var generateConsultDocumentXml = (consultDocumentDto) => {
|
|
114
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
115
|
+
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
|
|
116
|
+
<env:Header/>
|
|
117
|
+
<env:Body>
|
|
118
|
+
<rEnviConsDeRequest xmlns="http://ekuatia.set.gov.py/sifen/xsd">
|
|
119
|
+
<dId>${consultDocumentDto.id}</dId>
|
|
120
|
+
<dCDC>${consultDocumentDto.cdc}</dCDC>
|
|
121
|
+
</rEnviConsDeRequest>
|
|
122
|
+
</env:Body>
|
|
123
|
+
</env:Envelope>
|
|
124
|
+
`;
|
|
125
|
+
};
|
|
126
|
+
var generateConsultBatchXml = (consultBatchDto) => {
|
|
127
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
128
|
+
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
|
|
129
|
+
<env:Header/>
|
|
130
|
+
<env:Body>
|
|
131
|
+
<rEnviConsLoteDe xmlns="http://ekuatia.set.gov.py/sifen/xsd">
|
|
132
|
+
<dId>${consultBatchDto.id}</dId>
|
|
133
|
+
<dProtConsLote>${consultBatchDto.codigoLote}</dProtConsLote>
|
|
134
|
+
</rEnviConsLoteDe>
|
|
135
|
+
</env:Body>
|
|
136
|
+
</env:Envelope>
|
|
137
|
+
`;
|
|
138
|
+
};
|
|
139
|
+
var OIDS_KEYS = [forge__namespace.pki.oids.pkcs8ShroudedKeyBag, forge__namespace.pki.oids.keyBag];
|
|
140
|
+
var obtainBags = (almacen) => almacen.safeContents.flatMap((contenido) => contenido.safeBags);
|
|
141
|
+
var readDigitalSign = (digitalSignDto) => {
|
|
142
|
+
const { camino, contrase\u00F1a } = digitalSignDto;
|
|
143
|
+
const contenidoPfx = fs.readFileSync(camino, { encoding: "binary" });
|
|
144
|
+
const estructuraAsn1 = forge__namespace.asn1.fromDer(contenidoPfx);
|
|
145
|
+
const almacen = forge__namespace.pkcs12.pkcs12FromAsn1(estructuraAsn1, contrase\u00F1a);
|
|
146
|
+
const bolsas = obtainBags(almacen);
|
|
147
|
+
const bolsaLlave = bolsas.find(
|
|
148
|
+
(bolsa) => OIDS_KEYS.includes(bolsa.type) && bolsa.key
|
|
149
|
+
);
|
|
150
|
+
if (!bolsaLlave?.key) {
|
|
151
|
+
throw new Error("La firma digital no contiene una llave privada");
|
|
152
|
+
}
|
|
153
|
+
const bolsaCertificado = bolsas.find(
|
|
154
|
+
(bolsa) => bolsa.type === forge__namespace.pki.oids.certBag && bolsa.cert
|
|
155
|
+
);
|
|
156
|
+
if (!bolsaCertificado?.cert) {
|
|
157
|
+
throw new Error("La firma digital no contiene un certificado");
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
certificado: forge__namespace.pki.certificateToPem(bolsaCertificado.cert),
|
|
161
|
+
llavePrivada: forge__namespace.pki.privateKeyToPem(bolsaLlave.key)
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
var generateQr = async (generationQrDto) => {
|
|
165
|
+
try {
|
|
166
|
+
const { xml, idCsc, csc, ambiente } = generationQrDto;
|
|
167
|
+
const xmlObject = await xml2js__namespace.parseStringPromise(xml);
|
|
168
|
+
if (!(xmlObject && xmlObject["rDE"] && xmlObject["rDE"]["Signature"] && xmlObject["rDE"]["Signature"])) {
|
|
169
|
+
throw new Error("XML debe estar firmado digitalmente para generar el QR");
|
|
170
|
+
}
|
|
171
|
+
xmlObject["rDE"]["gCamFuFD"] = {};
|
|
172
|
+
let linkQr = "";
|
|
173
|
+
if (ambiente === "test" /* TEST */) {
|
|
174
|
+
linkQr = "https://ekuatia.set.gov.py/consultas-test" /* TEST */;
|
|
175
|
+
} else {
|
|
176
|
+
linkQr = "https://ekuatia.set.gov.py/consultas" /* PRODUCCION */;
|
|
177
|
+
}
|
|
178
|
+
linkQr += "/qr?";
|
|
179
|
+
let qr = "";
|
|
180
|
+
const newVersion = xmlObject["rDE"]["dVerFor"][0];
|
|
181
|
+
qr += "nVersion=" + newVersion + "&";
|
|
182
|
+
const id = xmlObject["rDE"]["DE"][0]["$"]["Id"];
|
|
183
|
+
qr += "Id=" + id + "&";
|
|
184
|
+
let dFeEmiDE = xmlObject["rDE"]["DE"][0]["gDatGralOpe"][0]["dFeEmiDE"][0];
|
|
185
|
+
dFeEmiDE = Buffer.from(dFeEmiDE, "utf8").toString("hex");
|
|
186
|
+
qr += "dFeEmiDE=" + dFeEmiDE + "&";
|
|
187
|
+
let dRucRec = "";
|
|
188
|
+
if (xmlObject["rDE"]["DE"][0]["gDatGralOpe"][0]["gDatRec"][0]["iNatRec"][0] == 1) {
|
|
189
|
+
dRucRec = xmlObject["rDE"]["DE"][0]["gDatGralOpe"][0]["gDatRec"][0]["dRucRec"][0];
|
|
190
|
+
qr += "dRucRec=" + dRucRec + "&";
|
|
191
|
+
} else {
|
|
192
|
+
dRucRec = xmlObject["rDE"]["DE"][0]["gDatGralOpe"][0]["gDatRec"][0]["dNumIDRec"][0];
|
|
193
|
+
qr += "dNumIDRec=" + dRucRec + "&";
|
|
194
|
+
}
|
|
195
|
+
let dTotGralOpe = 0;
|
|
196
|
+
if (xmlObject["rDE"]["DE"][0]["gTotSub"] && xmlObject["rDE"]["DE"][0]["gTotSub"][0] && xmlObject["rDE"]["DE"][0]["gTotSub"][0]["dTotGralOpe"] && xmlObject["rDE"]["DE"][0]["gTotSub"][0]["dTotGralOpe"][0]) {
|
|
197
|
+
dTotGralOpe = xmlObject["rDE"]["DE"][0]["gTotSub"][0]["dTotGralOpe"][0];
|
|
198
|
+
}
|
|
199
|
+
qr += "dTotGralOpe=" + dTotGralOpe + "&";
|
|
200
|
+
let dTotIVA = 0;
|
|
201
|
+
if (xmlObject["rDE"]["DE"][0]["gTotSub"] && xmlObject["rDE"]["DE"][0]["gTotSub"][0] && xmlObject["rDE"]["DE"][0]["gTotSub"][0]["dTotIVA"] && xmlObject["rDE"]["DE"][0]["gTotSub"][0]["dTotIVA"][0]) {
|
|
202
|
+
dTotIVA = xmlObject["rDE"]["DE"][0]["gTotSub"][0]["dTotIVA"][0];
|
|
203
|
+
}
|
|
204
|
+
qr += "dTotIVA=" + dTotIVA + "&";
|
|
205
|
+
let cItems = 0;
|
|
206
|
+
if (xmlObject["rDE"]["DE"][0]["gDtipDE"][0] && xmlObject["rDE"]["DE"][0]["gDtipDE"][0]["gCamItem"] && xmlObject["rDE"]["DE"][0]["gDtipDE"][0]["gCamItem"].length > 0) {
|
|
207
|
+
cItems = xmlObject["rDE"]["DE"][0]["gDtipDE"][0]["gCamItem"].length;
|
|
208
|
+
}
|
|
209
|
+
qr += "cItems=" + cItems + "&";
|
|
210
|
+
let digestValue = xmlObject["rDE"]["Signature"][0]["SignedInfo"][0]["Reference"][0]["DigestValue"][0];
|
|
211
|
+
digestValue = Buffer.from(digestValue, "utf8").toString("hex");
|
|
212
|
+
qr += "DigestValue=" + digestValue + "&";
|
|
213
|
+
qr += "IdCSC=" + idCsc;
|
|
214
|
+
const valueForHash = qr;
|
|
215
|
+
const valueHashed = sha256__default.default(valueForHash + csc);
|
|
216
|
+
qr += "&cHashQR=" + valueHashed;
|
|
217
|
+
xmlObject["rDE"]["gCamFuFD"]["dCarQR"] = {
|
|
218
|
+
_: linkQr + qr
|
|
219
|
+
};
|
|
220
|
+
const builder = new xml2js__namespace.Builder();
|
|
221
|
+
const xmlWithQR = builder.buildObject(xmlObject);
|
|
222
|
+
return xmlWithQR;
|
|
223
|
+
} catch (error) {
|
|
224
|
+
throw error;
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
// src/sifen/infrastructure/persistence/sifen.persistence.ts
|
|
229
|
+
var SifenPersistence = class {
|
|
230
|
+
consultRuc(consultRucDto) {
|
|
231
|
+
const rucXml = generateConsultRucXml(consultRucDto);
|
|
232
|
+
const xmlFormated = normalizeXML(rucXml);
|
|
233
|
+
return xmlFormated;
|
|
234
|
+
}
|
|
235
|
+
consultBatch(consultBatchDto) {
|
|
236
|
+
const batchXml = generateConsultBatchXml(consultBatchDto);
|
|
237
|
+
const xmlFormated = normalizeXML(batchXml);
|
|
238
|
+
return xmlFormated;
|
|
239
|
+
}
|
|
240
|
+
consultDocument(ConsultDocumentDto) {
|
|
241
|
+
const documentXml = generateConsultDocumentXml(ConsultDocumentDto);
|
|
242
|
+
const xmlFormated = normalizeXML(documentXml);
|
|
243
|
+
return xmlFormated;
|
|
244
|
+
}
|
|
245
|
+
cancelationInvoice(cancelInvoiceDto) {
|
|
246
|
+
throw new Error("Method not implemented.");
|
|
247
|
+
}
|
|
248
|
+
invalidationInvoice(invalidationInvoiceDto) {
|
|
249
|
+
try {
|
|
250
|
+
throw new Error("Method not implemented.");
|
|
251
|
+
} catch (error) {
|
|
252
|
+
console.log(error);
|
|
253
|
+
throw error;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
obtainDigitalSign(digitalSignDto) {
|
|
257
|
+
try {
|
|
258
|
+
const digitalSign = readDigitalSign(digitalSignDto);
|
|
259
|
+
return digitalSign;
|
|
260
|
+
} catch (error) {
|
|
261
|
+
console.log(error);
|
|
262
|
+
throw error;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
async generateQr(generationQrDto) {
|
|
266
|
+
try {
|
|
267
|
+
const digitalSign = await generateQr(generationQrDto);
|
|
268
|
+
return digitalSign;
|
|
269
|
+
} catch (error) {
|
|
270
|
+
console.log(error);
|
|
271
|
+
throw error;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
// src/sifen/applications/services/sifen.service.ts
|
|
277
|
+
var SifenService = class {
|
|
278
|
+
consultRucUseCase;
|
|
279
|
+
consultBatchUseCase;
|
|
280
|
+
consultDocumentUseCase;
|
|
281
|
+
obtainDigitalSignUseCase;
|
|
282
|
+
generateQrUseCase;
|
|
283
|
+
sifenRepository;
|
|
284
|
+
constructor() {
|
|
285
|
+
this.sifenRepository = new SifenPersistence();
|
|
286
|
+
this.consultRucUseCase = new ConsultRucUseCase(this.sifenRepository);
|
|
287
|
+
this.consultBatchUseCase = new ConsultBatchUseCase(this.sifenRepository);
|
|
288
|
+
this.consultDocumentUseCase = new ConsultDocumentUseCase(
|
|
289
|
+
this.sifenRepository
|
|
290
|
+
);
|
|
291
|
+
this.obtainDigitalSignUseCase = new ObtainDigitalSignUseCase(
|
|
292
|
+
this.sifenRepository
|
|
293
|
+
);
|
|
294
|
+
this.generateQrUseCase = new GenerateQrUseCase(this.sifenRepository);
|
|
295
|
+
}
|
|
296
|
+
consultRuc(consultRucDto) {
|
|
297
|
+
const ruc = this.consultRucUseCase.execute(consultRucDto);
|
|
298
|
+
return ruc;
|
|
299
|
+
}
|
|
300
|
+
consultBatch(consultBatchDto) {
|
|
301
|
+
const batch = this.consultBatchUseCase.execute(consultBatchDto);
|
|
302
|
+
return batch;
|
|
303
|
+
}
|
|
304
|
+
consultDocument(consultDocumentDto) {
|
|
305
|
+
const invoice = this.consultDocumentUseCase.execute(consultDocumentDto);
|
|
306
|
+
return invoice;
|
|
307
|
+
}
|
|
308
|
+
obtainDigitalSign(digitalSignDto) {
|
|
309
|
+
const digitalSign = this.obtainDigitalSignUseCase.execute(digitalSignDto);
|
|
310
|
+
return digitalSign;
|
|
311
|
+
}
|
|
312
|
+
async generateQr(generationQrDto) {
|
|
313
|
+
try {
|
|
314
|
+
const generationQr = await this.generateQrUseCase.execute(generationQrDto);
|
|
315
|
+
return generationQr;
|
|
316
|
+
} catch (error) {
|
|
317
|
+
throw error;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
exports.SifenService = SifenService;
|
|
323
|
+
//# sourceMappingURL=index.js.map
|
|
324
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sifen/domain/useCases/consultBatch.useCase.ts","../src/sifen/domain/useCases/consultRuc.useCase.ts","../src/sifen/domain/useCases/consultDocument.useCase.ts","../src/sifen/domain/useCases/obtainDigitalSign.useCase.ts","../src/sifen/domain/useCases/generateQr.useCase.ts","../src/shared/functions/functions.utils.ts","../src/sifen/infrastructure/persistence/sifen.persistence.ts","../src/sifen/applications/services/sifen.service.ts"],"names":["forge","readFileSync","xml2js","sha256"],"mappings":"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","file":"index.js","sourcesContent":["import { ConsultBatchDto } from \"../../applications/dtos\";\r\nimport { SifenRepository } from \"../repository/sifen.repository\";\r\n\r\nexport class ConsultBatchUseCase {\r\n constructor(private readonly sifenRepository: SifenRepository) {}\r\n\r\n execute(consultBatchDto: ConsultBatchDto) {\r\n const batch = this.sifenRepository.consultBatch(consultBatchDto);\r\n\r\n return batch;\r\n }\r\n}\r\n","import { ConsultRucDto } from \"../../applications/dtos\";\r\nimport { SifenRepository } from \"../repository/sifen.repository\";\r\n\r\nexport class ConsultRucUseCase {\r\n constructor(private readonly sifenRepository: SifenRepository) {}\r\n\r\n execute(consultRucDto: ConsultRucDto) {\r\n const ruc = this.sifenRepository.consultRuc(consultRucDto);\r\n\r\n return ruc;\r\n }\r\n}\r\n","import { ConsultDocumentDto } from \"../../applications/dtos\";\r\nimport { SifenRepository } from \"../repository/sifen.repository\";\r\n\r\nexport class ConsultDocumentUseCase {\r\n constructor(private readonly sifenRepository: SifenRepository) {}\r\n\r\n execute(consultDocumentDto: ConsultDocumentDto) {\r\n const document = this.sifenRepository.consultDocument(consultDocumentDto);\r\n\r\n return document;\r\n }\r\n}\r\n","import { DigitalSignDto } from \"../../applications/dtos\";\r\nimport { SifenRepository } from \"../repository/sifen.repository\";\r\n\r\nexport class ObtainDigitalSignUseCase {\r\n constructor(private readonly sifenRepository: SifenRepository) {}\r\n\r\n execute(digitalSignDto: DigitalSignDto) {\r\n const digitalSign = this.sifenRepository.obtainDigitalSign(digitalSignDto);\r\n\r\n return digitalSign;\r\n }\r\n}\r\n","import { GenerationQrDto } from \"../../applications/dtos\";\r\nimport { SifenRepository } from \"../repository/sifen.repository\";\r\n\r\nexport class GenerateQrUseCase {\r\n constructor(private readonly sifenRepository: SifenRepository) {}\r\n\r\n async execute(generationQrDto: GenerationQrDto): Promise<string> {\r\n const generationQr = await this.sifenRepository.generateQr(generationQrDto);\r\n\r\n return generationQr;\r\n }\r\n}\r\n","import {\r\n ConsultBatchDto,\r\n ConsultDocumentDto,\r\n ConsultRucDto,\r\n DigitalSignDto,\r\n GenerationQrDto,\r\n} from \"../../sifen/applications/dtos\";\r\nimport { readFileSync } from \"fs\";\r\nimport * as forge from \"node-forge\";\r\nimport { ResponseDigitalSign } from \"../dto/responseDigitalSign.dto\";\r\nimport * as xml2js from \"xml2js\";\r\nimport { LINK_SIFEN, SIFEN_ENVIRONMENT } from \"../utils/dictionary.utils\";\r\nimport sha256 from \"crypto-js/sha256\";\r\n\r\nexport const calculateDigitVerification = (\r\n value: string,\r\n baseMax: number = 11,\r\n): string => {\r\n let v_total = 0;\r\n let v_resto = 0;\r\n let k = 0;\r\n let v_numero_aux = 0;\r\n let v_numero_al = \"\";\r\n let v_caracter = \"\";\r\n let v_digit = 0;\r\n\r\n // Cambia la ultima letra por ascii en caso que la cedula termine en letra\r\n for (let i = 0; i < value.length; i++) {\r\n v_caracter = value.toUpperCase().substring(i, i + 1);\r\n if (!(v_caracter.charCodeAt(0) >= 48 && v_caracter.charCodeAt(0) <= 57)) {\r\n v_numero_al = v_numero_al + v_caracter.charCodeAt(0);\r\n } else {\r\n v_numero_al = v_numero_al + v_caracter;\r\n }\r\n }\r\n\r\n // Calcula el DV\r\n k = 2;\r\n v_total = 0;\r\n // FOR i IN REVERSE 1 .. LENGTH(v_numero_al) LOOP\r\n for (let i = v_numero_al.length; i > 0; i--) {\r\n if (k > baseMax) {\r\n k = 2;\r\n }\r\n v_numero_aux = parseInt(v_numero_al.substring(i - 1, i));\r\n v_total = v_total + v_numero_aux * k;\r\n k = k + 1;\r\n }\r\n v_resto = v_total % 11;\r\n if (v_resto > 1) {\r\n v_digit = 11 - v_resto;\r\n } else {\r\n v_digit = 0;\r\n }\r\n return v_digit.toString();\r\n};\r\n\r\nexport function normalizeXML(xml: string): string {\r\n xml = xml.split(\"\\r\\n\").join(\"\");\r\n xml = xml.split(\"\\n\").join(\"\");\r\n xml = xml.split(\"\\t\").join(\"\");\r\n xml = xml.split(\" \").join(\"\");\r\n xml = xml.split(\"> <\").join(\"><\");\r\n xml = xml.split(\"> <\").join(\"><\");\r\n xml = xml.replace(/\\r?\\n|\\r/g, \"\");\r\n return xml;\r\n}\r\n\r\nexport const generateConsultRucXml = (consultRucDto: ConsultRucDto): string => {\r\n return `<env:Envelope xmlns:env=\"http://www.w3.org/2003/05/soap-envelope\">\\n\\\r\n <env:Header/>\\n\\\r\n <env:Body>\\n\\\r\n <rEnviConsRUC xmlns=\"http://ekuatia.set.gov.py/sifen/xsd\">\\n\\\r\n <dId>${consultRucDto.id}</dId>\\n\\\r\n <dRUCCons>${consultRucDto.ruc}</dRUCCons>\\n\\\r\n </rEnviConsRUC>\\n\\\r\n </env:Body>\\n\\\r\n </env:Envelope>\\n`;\r\n};\r\n\r\nexport const generateConsultDocumentXml = (\r\n consultDocumentDto: ConsultDocumentDto,\r\n): string => {\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n\\\r\n <env:Envelope xmlns:env=\"http://www.w3.org/2003/05/soap-envelope\">\\n\\\r\n <env:Header/>\\n\\\r\n <env:Body>\\n\\\r\n <rEnviConsDeRequest xmlns=\"http://ekuatia.set.gov.py/sifen/xsd\">\\n\\\r\n <dId>${consultDocumentDto.id}</dId>\\n\\\r\n <dCDC>${consultDocumentDto.cdc}</dCDC>\\n\\\r\n </rEnviConsDeRequest>\\n\\\r\n </env:Body>\\n\\\r\n </env:Envelope>\\n`;\r\n};\r\n\r\nexport const generateConsultBatchXml = (\r\n consultBatchDto: ConsultBatchDto,\r\n): string => {\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n\\\r\n <env:Envelope xmlns:env=\"http://www.w3.org/2003/05/soap-envelope\">\\n\\\r\n <env:Header/>\\n\\\r\n <env:Body>\\n\\\r\n <rEnviConsLoteDe xmlns=\"http://ekuatia.set.gov.py/sifen/xsd\">\\n\\\r\n <dId>${consultBatchDto.id}</dId>\\n\\\r\n <dProtConsLote>${consultBatchDto.codigoLote}</dProtConsLote>\\n\\\r\n </rEnviConsLoteDe>\\n\\\r\n </env:Body>\\n\\\r\n </env:Envelope>\\n`;\r\n};\r\n\r\nconst OIDS_KEYS = [forge.pki.oids.pkcs8ShroudedKeyBag, forge.pki.oids.keyBag];\r\n\r\nconst obtainBags = (almacen: forge.pkcs12.Pkcs12Pfx): forge.pkcs12.Bag[] =>\r\n almacen.safeContents.flatMap((contenido) => contenido.safeBags);\r\n\r\nexport const readDigitalSign = (\r\n digitalSignDto: DigitalSignDto,\r\n): ResponseDigitalSign => {\r\n const { camino, contraseña } = digitalSignDto;\r\n\r\n const contenidoPfx = readFileSync(camino, { encoding: \"binary\" });\r\n const estructuraAsn1 = forge.asn1.fromDer(contenidoPfx);\r\n const almacen = forge.pkcs12.pkcs12FromAsn1(estructuraAsn1, contraseña);\r\n\r\n const bolsas = obtainBags(almacen);\r\n\r\n const bolsaLlave = bolsas.find(\r\n (bolsa) => OIDS_KEYS.includes(bolsa.type) && bolsa.key,\r\n );\r\n if (!bolsaLlave?.key) {\r\n throw new Error(\"La firma digital no contiene una llave privada\");\r\n }\r\n\r\n const bolsaCertificado = bolsas.find(\r\n (bolsa) => bolsa.type === forge.pki.oids.certBag && bolsa.cert,\r\n );\r\n if (!bolsaCertificado?.cert) {\r\n throw new Error(\"La firma digital no contiene un certificado\");\r\n }\r\n\r\n return {\r\n certificado: forge.pki.certificateToPem(bolsaCertificado.cert),\r\n llavePrivada: forge.pki.privateKeyToPem(bolsaLlave.key),\r\n };\r\n};\r\n\r\nexport const generateQr = async (\r\n generationQrDto: GenerationQrDto,\r\n): Promise<string> => {\r\n try {\r\n const { xml, idCsc, csc, ambiente } = generationQrDto;\r\n\r\n const xmlObject = await xml2js.parseStringPromise(xml);\r\n\r\n if (\r\n !(\r\n xmlObject &&\r\n xmlObject[\"rDE\"] &&\r\n xmlObject[\"rDE\"][\"Signature\"] &&\r\n xmlObject[\"rDE\"][\"Signature\"]\r\n )\r\n ) {\r\n throw new Error(\"XML debe estar firmado digitalmente para generar el QR\");\r\n }\r\n\r\n xmlObject[\"rDE\"][\"gCamFuFD\"] = {};\r\n\r\n let linkQr: string = \"\";\r\n\r\n if (ambiente === SIFEN_ENVIRONMENT.TEST) {\r\n linkQr = LINK_SIFEN.TEST;\r\n } else {\r\n linkQr = LINK_SIFEN.PRODUCCION;\r\n }\r\n\r\n linkQr += \"/qr?\";\r\n\r\n let qr: string = \"\";\r\n\r\n const newVersion = xmlObject[\"rDE\"][\"dVerFor\"][0];\r\n\r\n qr += \"nVersion=\" + newVersion + \"&\";\r\n\r\n const id = xmlObject[\"rDE\"][\"DE\"][0][\"$\"][\"Id\"];\r\n qr += \"Id=\" + id + \"&\";\r\n\r\n let dFeEmiDE = xmlObject[\"rDE\"][\"DE\"][0][\"gDatGralOpe\"][0][\"dFeEmiDE\"][0];\r\n dFeEmiDE = Buffer.from(dFeEmiDE, \"utf8\").toString(\"hex\");\r\n qr += \"dFeEmiDE=\" + dFeEmiDE + \"&\";\r\n\r\n let dRucRec: string = \"\";\r\n\r\n if (\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gDatGralOpe\"][0][\"gDatRec\"][0][\"iNatRec\"][0] ==\r\n 1\r\n ) {\r\n dRucRec =\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gDatGralOpe\"][0][\"gDatRec\"][0][\"dRucRec\"][0];\r\n qr += \"dRucRec=\" + dRucRec + \"&\";\r\n } else {\r\n dRucRec =\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gDatGralOpe\"][0][\"gDatRec\"][0][\r\n \"dNumIDRec\"\r\n ][0];\r\n qr += \"dNumIDRec=\" + dRucRec + \"&\";\r\n }\r\n\r\n let dTotGralOpe: number = 0;\r\n\r\n if (\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gTotSub\"] &&\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gTotSub\"][0] &&\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gTotSub\"][0][\"dTotGralOpe\"] &&\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gTotSub\"][0][\"dTotGralOpe\"][0]\r\n ) {\r\n dTotGralOpe = xmlObject[\"rDE\"][\"DE\"][0][\"gTotSub\"][0][\"dTotGralOpe\"][0];\r\n }\r\n qr += \"dTotGralOpe=\" + dTotGralOpe + \"&\";\r\n\r\n let dTotIVA: number = 0;\r\n\r\n if (\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gTotSub\"] &&\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gTotSub\"][0] &&\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gTotSub\"][0][\"dTotIVA\"] &&\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gTotSub\"][0][\"dTotIVA\"][0]\r\n ) {\r\n dTotIVA = xmlObject[\"rDE\"][\"DE\"][0][\"gTotSub\"][0][\"dTotIVA\"][0];\r\n }\r\n qr += \"dTotIVA=\" + dTotIVA + \"&\";\r\n\r\n let cItems: number = 0;\r\n\r\n if (\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gDtipDE\"][0] &&\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gDtipDE\"][0][\"gCamItem\"] &&\r\n xmlObject[\"rDE\"][\"DE\"][0][\"gDtipDE\"][0][\"gCamItem\"].length > 0\r\n ) {\r\n cItems = xmlObject[\"rDE\"][\"DE\"][0][\"gDtipDE\"][0][\"gCamItem\"].length;\r\n }\r\n\r\n qr += \"cItems=\" + cItems + \"&\";\r\n\r\n let digestValue =\r\n xmlObject[\"rDE\"][\"Signature\"][0][\"SignedInfo\"][0][\"Reference\"][0][\r\n \"DigestValue\"\r\n ][0];\r\n\r\n digestValue = Buffer.from(digestValue, \"utf8\").toString(\"hex\");\r\n qr += \"DigestValue=\" + digestValue + \"&\";\r\n\r\n qr += \"IdCSC=\" + idCsc;\r\n\r\n const valueForHash = qr;\r\n const valueHashed = sha256(valueForHash + csc);\r\n\r\n qr += \"&cHashQR=\" + valueHashed;\r\n\r\n xmlObject[\"rDE\"][\"gCamFuFD\"][\"dCarQR\"] = {\r\n _: linkQr + qr,\r\n };\r\n const builder = new xml2js.Builder();\r\n\r\n const xmlWithQR = builder.buildObject(xmlObject);\r\n\r\n return xmlWithQR;\r\n } catch (error) {\r\n throw error;\r\n }\r\n};\r\n","import { ResponseDigitalSign } from \"../../../shared/dto/responseDigitalSign.dto\";\r\nimport {\r\n generateConsultBatchXml,\r\n generateConsultDocumentXml,\r\n generateConsultRucXml,\r\n readDigitalSign,\r\n normalizeXML,\r\n generateQr,\r\n} from \"../../../shared/functions/functions.utils\";\r\nimport {\r\n ConsultRucDto,\r\n ConsultBatchDto,\r\n ConsultDocumentDto,\r\n DigitalSignDto,\r\n GenerationQrDto,\r\n} from \"../../applications/dtos\";\r\nimport { CancelInvoiceDto } from \"../../applications/dtos/cancelDocument.dto\";\r\nimport { InvalidationInvoiceDto } from \"../../applications/dtos/invalidationInvoice.dto\";\r\nimport { SifenRepository } from \"../../domain/repository/sifen.repository\";\r\n\r\nexport class SifenPersistence implements SifenRepository {\r\n consultRuc(consultRucDto: ConsultRucDto): string {\r\n const rucXml = generateConsultRucXml(consultRucDto);\r\n\r\n const xmlFormated = normalizeXML(rucXml);\r\n\r\n return xmlFormated;\r\n }\r\n\r\n consultBatch(consultBatchDto: ConsultBatchDto): string {\r\n const batchXml = generateConsultBatchXml(consultBatchDto);\r\n\r\n const xmlFormated = normalizeXML(batchXml);\r\n\r\n return xmlFormated;\r\n }\r\n\r\n consultDocument(ConsultDocumentDto: ConsultDocumentDto): string {\r\n const documentXml = generateConsultDocumentXml(ConsultDocumentDto);\r\n\r\n const xmlFormated = normalizeXML(documentXml);\r\n\r\n return xmlFormated;\r\n }\r\n\r\n cancelationInvoice(cancelInvoiceDto: CancelInvoiceDto): string {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n invalidationInvoice(invalidationInvoiceDto: InvalidationInvoiceDto): string {\r\n try {\r\n throw new Error(\"Method not implemented.\");\r\n } catch (error) {\r\n console.log(error);\r\n throw error;\r\n }\r\n }\r\n\r\n obtainDigitalSign(digitalSignDto: DigitalSignDto): ResponseDigitalSign {\r\n try {\r\n const digitalSign = readDigitalSign(digitalSignDto);\r\n\r\n return digitalSign;\r\n } catch (error) {\r\n console.log(error);\r\n throw error;\r\n }\r\n }\r\n\r\n async generateQr(generationQrDto: GenerationQrDto): Promise<string> {\r\n try {\r\n const digitalSign = await generateQr(generationQrDto);\r\n\r\n return digitalSign;\r\n } catch (error) {\r\n console.log(error);\r\n throw error;\r\n }\r\n }\r\n}\r\n","import { SifenRepository } from \"../../domain/repository/sifen.repository\";\r\nimport {\r\n ConsultBatchUseCase,\r\n ConsultDocumentUseCase,\r\n ConsultRucUseCase,\r\n GenerateQrUseCase,\r\n ObtainDigitalSignUseCase,\r\n} from \"../../domain/useCases\";\r\nimport { SifenPersistence } from \"../../infrastructure/persistence/sifen.persistence\";\r\nimport {\r\n ConsultBatchDto,\r\n ConsultDocumentDto,\r\n ConsultRucDto,\r\n DigitalSignDto,\r\n GenerationQrDto,\r\n} from \"../dtos\";\r\n\r\nexport class SifenService {\r\n private readonly consultRucUseCase: ConsultRucUseCase;\r\n private readonly consultBatchUseCase: ConsultBatchUseCase;\r\n private readonly consultDocumentUseCase: ConsultDocumentUseCase;\r\n private readonly obtainDigitalSignUseCase: ObtainDigitalSignUseCase;\r\n private readonly generateQrUseCase: GenerateQrUseCase;\r\n private readonly sifenRepository: SifenRepository;\r\n\r\n constructor() {\r\n this.sifenRepository = new SifenPersistence();\r\n this.consultRucUseCase = new ConsultRucUseCase(this.sifenRepository);\r\n this.consultBatchUseCase = new ConsultBatchUseCase(this.sifenRepository);\r\n this.consultDocumentUseCase = new ConsultDocumentUseCase(\r\n this.sifenRepository,\r\n );\r\n this.obtainDigitalSignUseCase = new ObtainDigitalSignUseCase(\r\n this.sifenRepository,\r\n );\r\n this.generateQrUseCase = new GenerateQrUseCase(this.sifenRepository);\r\n }\r\n\r\n consultRuc(consultRucDto: ConsultRucDto) {\r\n const ruc = this.consultRucUseCase.execute(consultRucDto);\r\n return ruc;\r\n }\r\n\r\n consultBatch(consultBatchDto: ConsultBatchDto) {\r\n const batch = this.consultBatchUseCase.execute(consultBatchDto);\r\n return batch;\r\n }\r\n\r\n consultDocument(consultDocumentDto: ConsultDocumentDto) {\r\n const invoice = this.consultDocumentUseCase.execute(consultDocumentDto);\r\n return invoice;\r\n }\r\n\r\n obtainDigitalSign(digitalSignDto: DigitalSignDto) {\r\n const digitalSign = this.obtainDigitalSignUseCase.execute(digitalSignDto);\r\n return digitalSign;\r\n }\r\n\r\n async generateQr(generationQrDto: GenerationQrDto): Promise<string> {\r\n try {\r\n const generationQr =\r\n await this.generateQrUseCase.execute(generationQrDto);\r\n\r\n return generationQr;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n}\r\n"]}
|