@useinvio/nfse-sdk 3.0.0 → 3.2.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 (120) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/README.en.md +146 -0
  3. package/README.md +77 -518
  4. package/dist/agent.d.ts +131 -0
  5. package/dist/agent.js +551 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/certificate.d.ts +96 -0
  8. package/dist/certificate.js +218 -0
  9. package/dist/certificate.js.map +1 -0
  10. package/dist/certificateValidation.d.ts +11 -6
  11. package/dist/certificateValidation.js +23 -12
  12. package/dist/certificateValidation.js.map +1 -1
  13. package/dist/cli.d.ts +2 -0
  14. package/dist/cli.js +520 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/cliBin.d.ts +2 -0
  17. package/dist/cliBin.js +6 -0
  18. package/dist/cliBin.js.map +1 -0
  19. package/dist/cliExample.d.ts +6 -0
  20. package/dist/cliExample.js +29 -0
  21. package/dist/cliExample.js.map +1 -0
  22. package/dist/client.d.ts +51 -4
  23. package/dist/client.js +41 -10
  24. package/dist/client.js.map +1 -1
  25. package/dist/config.d.ts +3 -0
  26. package/dist/config.js +8 -0
  27. package/dist/config.js.map +1 -1
  28. package/dist/consultas.d.ts +34 -0
  29. package/dist/consultas.js +61 -0
  30. package/dist/consultas.js.map +1 -0
  31. package/dist/dpsJson.js +1 -41
  32. package/dist/dpsJson.js.map +1 -1
  33. package/dist/dpsJsonSchema.d.ts +17 -0
  34. package/dist/dpsJsonSchema.js +184 -0
  35. package/dist/dpsJsonSchema.js.map +1 -0
  36. package/dist/emissaoNota.d.ts +11 -6
  37. package/dist/emissaoNota.js +10 -6
  38. package/dist/emissaoNota.js.map +1 -1
  39. package/dist/eventoJson.d.ts +76 -0
  40. package/dist/eventoJson.js +128 -0
  41. package/dist/eventoJson.js.map +1 -0
  42. package/dist/eventosNfse.d.ts +38 -0
  43. package/dist/eventosNfse.js +73 -0
  44. package/dist/eventosNfse.js.map +1 -0
  45. package/dist/fiscalDomains.d.ts +22 -0
  46. package/dist/fiscalDomains.js +99 -0
  47. package/dist/fiscalDomains.js.map +1 -0
  48. package/dist/fiscalValidation.js +21 -53
  49. package/dist/fiscalValidation.js.map +1 -1
  50. package/dist/gzipB64.d.ts +5 -0
  51. package/dist/gzipB64.js +12 -0
  52. package/dist/gzipB64.js.map +1 -1
  53. package/dist/index.d.ts +22 -7
  54. package/dist/index.js +11 -4
  55. package/dist/index.js.map +1 -1
  56. package/dist/jsonSchemaCheck.d.ts +12 -0
  57. package/dist/jsonSchemaCheck.js +70 -0
  58. package/dist/jsonSchemaCheck.js.map +1 -0
  59. package/dist/loadPfx.d.ts +2 -0
  60. package/dist/loadPfx.js +2 -1
  61. package/dist/loadPfx.js.map +1 -1
  62. package/dist/mcpCli.d.ts +2 -0
  63. package/dist/mcpCli.js +7 -0
  64. package/dist/mcpCli.js.map +1 -0
  65. package/dist/mcpServer.d.ts +49 -0
  66. package/dist/mcpServer.js +159 -0
  67. package/dist/mcpServer.js.map +1 -0
  68. package/dist/nfseXml.d.ts +48 -0
  69. package/dist/nfseXml.js +86 -0
  70. package/dist/nfseXml.js.map +1 -0
  71. package/dist/rejeicoes.d.ts +50 -0
  72. package/dist/rejeicoes.js +62 -0
  73. package/dist/rejeicoes.js.map +1 -0
  74. package/dist/rejeicoesCatalog.d.ts +10 -0
  75. package/dist/rejeicoesCatalog.js +4449 -0
  76. package/dist/rejeicoesCatalog.js.map +1 -0
  77. package/dist/sefinClient.d.ts +107 -7
  78. package/dist/sefinClient.js +232 -22
  79. package/dist/sefinClient.js.map +1 -1
  80. package/dist/signXml.d.ts +3 -3
  81. package/dist/signXml.js +17 -7
  82. package/dist/signXml.js.map +1 -1
  83. package/dist/testing.d.ts +80 -0
  84. package/dist/testing.js +285 -0
  85. package/dist/testing.js.map +1 -0
  86. package/dist/xmlBuild.d.ts +11 -0
  87. package/dist/xmlBuild.js +44 -0
  88. package/dist/xmlBuild.js.map +1 -0
  89. package/dist/xmlInspection.d.ts +1 -1
  90. package/dist/xmlInspection.js +10 -9
  91. package/dist/xmlInspection.js.map +1 -1
  92. package/dist/xsdValidation.d.ts +24 -5
  93. package/dist/xsdValidation.js +97 -67
  94. package/dist/xsdValidation.js.map +1 -1
  95. package/docs/README.md +47 -0
  96. package/docs/REGRAS_NEGOCIO_EMISSAO.md +8 -8
  97. package/docs/conceitos/como-funciona.md +87 -0
  98. package/docs/guias/adn.md +51 -0
  99. package/docs/guias/agentes-ia.md +111 -0
  100. package/docs/guias/cancelar.md +70 -0
  101. package/docs/guias/certificado.md +88 -0
  102. package/docs/guias/cli.md +68 -0
  103. package/docs/guias/consultar.md +54 -0
  104. package/docs/guias/emitir.md +172 -0
  105. package/docs/guias/recuperar-emissao.md +33 -0
  106. package/docs/guias/rejeicoes.md +70 -0
  107. package/docs/guias/testes.md +79 -0
  108. package/docs/guias/timeouts.md +33 -0
  109. package/docs/referencia/ambientes.md +35 -0
  110. package/docs/referencia/api.md +137 -0
  111. package/docs/referencia/erros.md +55 -0
  112. package/docs/tutoriais/primeira-nfse.md +130 -0
  113. package/examples/README.md +3 -1
  114. package/examples/cancel-nfse.ts +29 -0
  115. package/examples/client-resource.ts +3 -5
  116. package/examples/emit-homologation.ts +3 -4
  117. package/examples/handle-errors.ts +3 -3
  118. package/examples/recover-emission.ts +29 -0
  119. package/llms.txt +97 -82
  120. package/package.json +31 -6
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Test helpers: a throwaway ICP-Brasil-style A1 certificate and an in-process
3
+ * mock of SEFIN and ADN. Together they run the full flow (emit, query,
4
+ * recover, cancel, DANFSe) with no real certificate, network or SEFIN account.
5
+ *
6
+ * import { createTestCertificate, installMockSefin } from '@useinvio/nfse-sdk/testing';
7
+ *
8
+ * Never use these in production: the certificate is self-signed and the mock
9
+ * only approximates SEFIN (it validates the XSD and signatures, not fiscal rules).
10
+ */
11
+ import { generateKeyPairSync, randomInt } from 'node:crypto';
12
+ import forge from 'node-forge';
13
+ import { NfseCertificate, resolveCredentials } from './certificate.js';
14
+ import { ADN_BASE_URL, SEFIN_BASE_URL } from './config.js';
15
+ import { gunzipBase64, gzipBase64 } from './gzipB64.js';
16
+ import { buscarRejeicao } from './rejeicoes.js';
17
+ import { setSefinTransport } from './sefinClient.js';
18
+ import { verifyDps } from './signXml.js';
19
+ import { directChildren, parseNfseXml } from './xmlInspection.js';
20
+ import { validateDpsXmlAgainstXsd, validatePedRegEventoXmlAgainstXsd } from './xsdValidation.js';
21
+ function icpOtherName(oid, value) {
22
+ const { asn1 } = forge;
23
+ const otherName = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [
24
+ asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(oid).getBytes()),
25
+ asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, value)]),
26
+ ]);
27
+ return asn1.toDer(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [otherName])).getBytes();
28
+ }
29
+ /** Creates a self-signed A1 certificate whose holder CNPJ/CPF is read like a real ICP-Brasil one. */
30
+ export function createTestCertificate(options = {}) {
31
+ const password = options.password ?? 'test';
32
+ const cpf = options.cpf?.replace(/\D/g, '');
33
+ const cnpj = cpf ? undefined : (options.cnpj ?? '12345678000195').replace(/\D/g, '');
34
+ const documento = cpf ?? cnpj;
35
+ const { privateKey: keyPem } = generateKeyPairSync('rsa', {
36
+ modulusLength: 2048,
37
+ privateKeyEncoding: { type: 'pkcs8', format: 'pem' },
38
+ publicKeyEncoding: { type: 'spki', format: 'pem' },
39
+ });
40
+ const key = forge.pki.privateKeyFromPem(keyPem);
41
+ const cert = forge.pki.createCertificate();
42
+ cert.publicKey = forge.pki.setRsaPublicKey(key.n, key.e);
43
+ cert.serialNumber = `0${randomInt(1, 2 ** 31).toString(16)}`;
44
+ const validDays = options.validDays ?? 365;
45
+ const now = Date.now();
46
+ cert.validity.notBefore = new Date(Math.min(now, now + validDays * 86_400_000) - 86_400_000);
47
+ cert.validity.notAfter = new Date(now + validDays * 86_400_000);
48
+ cert.setSubject([{ name: 'commonName', value: options.commonName ?? `EMPRESA DE TESTE LTDA:${documento}` }]);
49
+ cert.setIssuer([{ name: 'commonName', value: 'AC TESTE NFSE-SDK (NAO ICP-BRASIL)' }]);
50
+ const san = cpf
51
+ ? icpOtherName('2.16.76.1.3.1', `01011990${cpf}${'0'.repeat(11)}`)
52
+ : icpOtherName('2.16.76.1.3.3', cnpj);
53
+ cert.setExtensions([{ id: '2.5.29.17', value: san }]);
54
+ cert.sign(key, forge.md.sha256.create());
55
+ const certPem = forge.pki.certificateToPem(cert);
56
+ const p12 = forge.pkcs12.toPkcs12Asn1(key, [cert], password, { algorithm: '3des' });
57
+ const pfx = Buffer.from(forge.asn1.toDer(p12).getBytes(), 'binary');
58
+ return { certificate: NfseCertificate.fromPem({ key: keyPem, cert: certPem }), pfx, password, certPem, keyPem };
59
+ }
60
+ const json = (status, body) => ({ status, body: JSON.stringify(body) });
61
+ const errorBody = (codigo, descricao) => ({ erros: [{ Codigo: codigo, Descricao: descricao }] });
62
+ function officialError(codigo, fallback) {
63
+ return { Codigo: codigo, Descricao: buscarRejeicao(codigo)?.mensagem ?? fallback };
64
+ }
65
+ function text(element, ...path) {
66
+ let current = element;
67
+ for (const name of path)
68
+ current = current ? directChildren(current, name)[0] : undefined;
69
+ return current?.textContent ?? '';
70
+ }
71
+ function mod11(digits) {
72
+ let sum = 0;
73
+ let weight = 2;
74
+ for (let i = digits.length - 1; i >= 0; i--) {
75
+ sum += Number(digits[i]) * weight;
76
+ weight = weight === 9 ? 2 : weight + 1;
77
+ }
78
+ const dv = 11 - (sum % 11);
79
+ return String(dv >= 10 ? 0 : dv);
80
+ }
81
+ /**
82
+ * Installs an in-process SEFIN + ADN. Every SDK call is answered locally until
83
+ * `restore()`. Received DPS and events are checked against the official XSD and
84
+ * their XMLDSIG signature is verified with the calling certificate.
85
+ */
86
+ export function installMockSefin(options = {}) {
87
+ const notas = new Map();
88
+ const dps = new Map();
89
+ const requests = [];
90
+ const pending = [];
91
+ const custom = [];
92
+ let nNFSe = 0;
93
+ let nsu = 0;
94
+ const certPemOf = (certificate) => resolveCredentials(certificate).certPem;
95
+ const ambienteOf = (url) => url.origin === new URL(SEFIN_BASE_URL.producao).origin || url.origin === new URL(ADN_BASE_URL.producao).origin ? 'producao' : 'restrita';
96
+ function emitir(request) {
97
+ const body = JSON.parse(request.body ?? '{}');
98
+ if (typeof body.dpsXmlGZipB64 !== 'string')
99
+ return json(400, errorBody('E1235', 'Campo dpsXmlGZipB64 ausente.'));
100
+ const xml = gunzipBase64(body.dpsXmlGZipB64);
101
+ if (!options.skipXsd) {
102
+ try {
103
+ validateDpsXmlAgainstXsd(xml);
104
+ }
105
+ catch (error) {
106
+ return json(400, { erros: [{ ...officialError('E1235', 'Falha no esquema XML do DF-e.'), Complemento: error.message }] });
107
+ }
108
+ }
109
+ if (!verifyDps(xml, certPemOf(request.certificate))) {
110
+ return json(400, { erros: [officialError('E0714', 'Arquivo enviado com erro na assinatura.')] });
111
+ }
112
+ const root = parseNfseXml(xml, 'DPS');
113
+ const inf = directChildren(root, 'infDPS')[0];
114
+ const dpsId = inf.getAttribute('Id') ?? '';
115
+ const ambiente = ambienteOf(request.url);
116
+ if ((text(inf, 'tpAmb') === '1') !== (ambiente === 'producao')) {
117
+ return json(400, { erros: [officialError('E0006', 'Ambiente informado diverge do ambiente de recebimento.')] });
118
+ }
119
+ if (dps.has(dpsId))
120
+ return json(400, { erros: [officialError('E0014', 'DPS ja processada.')] });
121
+ const cnpj = text(inf, 'prest', 'CNPJ');
122
+ const cpf = text(inf, 'prest', 'CPF');
123
+ const cMun = (text(inf, 'cLocEmi') || options.codigoMunicipio || '3550308').padStart(7, '0');
124
+ const now = new Date();
125
+ const aamm = `${String(now.getFullYear()).slice(2)}${String(now.getMonth() + 1).padStart(2, '0')}`;
126
+ nNFSe += 1;
127
+ const base = `${cMun}${ambiente === 'producao' ? '1' : '2'}${cnpj ? '2' : '1'}${(cnpj || cpf).padStart(14, '0')}`
128
+ + `${String(nNFSe).padStart(13, '0')}${aamm}${String(randomInt(0, 1e9)).padStart(9, '0')}`;
129
+ const chaveAcesso = `${base}${mod11(base)}`;
130
+ const vServ = text(inf, 'valores', 'vServPrest', 'vServ') || '0.00';
131
+ const xNome = text(inf, 'prest', 'xNome') || 'EMITENTE DE TESTE';
132
+ const nfseXml = '<NFSe versao="1.01" xmlns="http://www.sped.fazenda.gov.br/nfse">'
133
+ + `<infNFSe Id="NFS${chaveAcesso}"><xLocEmi>Municipio ${cMun}</xLocEmi><xLocPrestacao>Municipio ${text(inf, 'serv', 'locPrest', 'cLocPrestacao') || cMun}</xLocPrestacao>`
134
+ + `<nNFSe>${nNFSe}</nNFSe><cLocIncid>${cMun}</cLocIncid><xLocIncid>Municipio ${cMun}</xLocIncid>`
135
+ + `<xTribNac>${text(inf, 'serv', 'cServ', 'cTribNac') || 'Servico'}</xTribNac><verAplic>MockSefin</verAplic><ambGer>2</ambGer>`
136
+ + `<tpEmis>1</tpEmis><cStat>100</cStat><dhProc>${now.toISOString().replace(/\.\d+Z$/, 'Z')}</dhProc><nDFSe>${nNFSe}</nDFSe>`
137
+ + `<emit>${cnpj ? `<CNPJ>${cnpj}</CNPJ>` : `<CPF>${cpf}</CPF>`}<xNome>${xNome}</xNome></emit>`
138
+ + `<valores><vLiq>${vServ}</vLiq></valores>`
139
+ + `${xml.replace(/^<\?xml[^>]*>\s*/, '')}</infNFSe></NFSe>`;
140
+ nsu += 1;
141
+ notas.set(chaveAcesso, { chaveAcesso, dpsId, ambiente, nfseXml, nsu, cancelada: false, eventos: [] });
142
+ dps.set(dpsId, chaveAcesso);
143
+ return json(201, {
144
+ tipoAmbiente: ambiente === 'producao' ? 1 : 2,
145
+ versaoAplicativo: 'MockSefin',
146
+ dataHoraProcessamento: now.toISOString(),
147
+ idDps: dpsId,
148
+ chaveAcesso,
149
+ nfseXmlGZipB64: gzipBase64(nfseXml),
150
+ alertas: [],
151
+ });
152
+ }
153
+ function registrarEvento(request, chave) {
154
+ const nota = notas.get(chave);
155
+ if (!nota)
156
+ return json(400, { erros: [officialError('E1831', 'A NFS-e indicada nao existe.')] });
157
+ const body = JSON.parse(request.body ?? '{}');
158
+ if (typeof body.pedidoRegistroEventoXmlGZipB64 !== 'string') {
159
+ return json(400, errorBody('E1235', 'Campo pedidoRegistroEventoXmlGZipB64 ausente.'));
160
+ }
161
+ const xml = gunzipBase64(body.pedidoRegistroEventoXmlGZipB64);
162
+ if (!options.skipXsd) {
163
+ try {
164
+ validatePedRegEventoXmlAgainstXsd(xml);
165
+ }
166
+ catch (error) {
167
+ return json(400, { erros: [{ ...officialError('E1235', 'Falha no esquema XML do DF-e.'), Complemento: error.message }] });
168
+ }
169
+ }
170
+ if (!verifyDps(xml, certPemOf(request.certificate)))
171
+ return json(400, { erros: [officialError('E0714', 'Arquivo enviado com erro na assinatura.')] });
172
+ const root = parseNfseXml(xml, 'pedRegEvento');
173
+ if ((text(directChildren(root, 'infPedReg')[0], 'tpAmb') === '1') !== (nota.ambiente === 'producao')) {
174
+ return json(400, { erros: [officialError('E1845', 'Ambiente informado diverge do ambiente de recebimento.')] });
175
+ }
176
+ const inf = directChildren(root, 'infPedReg')[0];
177
+ if (text(inf, 'chNFSe') !== chave)
178
+ return json(400, errorBody('MOCK_KEY_MISMATCH', 'chNFSe difere da chave do caminho (mock).'));
179
+ const tpEvento = (inf.getAttribute('Id') ?? '').slice(-6);
180
+ if (nota.cancelada)
181
+ return json(400, { erros: [officialError(tpEvento === '105102' ? 'E0845' : 'E0840', 'NFS-e ja cancelada.')] });
182
+ nota.cancelada = true;
183
+ const nSeqEvento = nota.eventos.filter((e) => e.tpEvento === tpEvento).length + 1;
184
+ const eventoXml = '<evento versao="1.01" xmlns="http://www.sped.fazenda.gov.br/nfse">'
185
+ + `<infEvento Id="EVT${chave}${tpEvento}${String(nSeqEvento).padStart(3, '0')}"><verAplic>MockSefin</verAplic><ambGer>2</ambGer>`
186
+ + `<nSeqEvento>${nSeqEvento}</nSeqEvento><dhProc>${new Date().toISOString()}</dhProc><nDFe>${nota.eventos.length + 1}</nDFe>`
187
+ + `${xml.replace(/^<\?xml[^>]*>\s*/, '')}</infEvento></evento>`;
188
+ nota.eventos.push({ tpEvento, nSeqEvento, pedRegEventoXml: xml, eventoXml });
189
+ nsu += 1;
190
+ return json(201, { tipoAmbiente: nota.ambiente === 'producao' ? 1 : 2, versaoAplicativo: 'MockSefin', dataHoraProcessamento: new Date().toISOString(), eventoXmlGZipB64: gzipBase64(eventoXml) });
191
+ }
192
+ const PDF = Buffer.from('%PDF-1.4\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[]/Count 0>>endobj\ntrailer<</Root 1 0 R>>\n%%EOF\n');
193
+ const routes = [
194
+ { service: 'sefin', method: 'POST', path: /^\/nfse$/, handler: (req) => emitir(req) },
195
+ { service: 'sefin', method: 'GET', path: /^\/nfse\/(\d{50})$/, handler: (_req, m) => {
196
+ const nota = notas.get(m[1]);
197
+ return nota ? json(200, { chaveAcesso: nota.chaveAcesso, nfseXmlGZipB64: gzipBase64(nota.nfseXml) }) : json(404, errorBody('MOCK_NOT_FOUND', 'NFS-e nao encontrada (mock).'));
198
+ } },
199
+ { service: 'sefin', method: 'GET', path: /^\/dps\/(DPS\d{42})$/, handler: (_req, m) => {
200
+ const chave = dps.get(m[1]);
201
+ return chave ? json(200, { idDps: m[1], chaveAcesso: chave }) : json(404, errorBody('MOCK_NOT_FOUND', 'DPS nao encontrada (mock).'));
202
+ } },
203
+ { service: 'sefin', method: 'POST', path: /^\/nfse\/(\d{50})\/eventos$/, handler: (req, m) => registrarEvento(req, m[1]) },
204
+ { service: 'sefin', method: 'GET', path: /^\/nfse\/(\d{50})\/eventos\/(\d{6})\/(\d{1,3})$/, handler: (_req, m) => {
205
+ const evento = notas.get(m[1])?.eventos.find((e) => e.tpEvento === m[2] && e.nSeqEvento === Number(m[3]));
206
+ return evento ? json(200, { eventoXmlGZipB64: gzipBase64(evento.eventoXml) }) : json(404, errorBody('MOCK_NOT_FOUND', 'Evento nao encontrado (mock).'));
207
+ } },
208
+ { service: 'adn', method: 'GET', path: /^\/danfse\/(\d{50})$/, handler: (_req, m) => notas.has(m[1]) ? { status: 200, contentType: 'application/pdf', body: PDF } : json(404, errorBody('MOCK_NOT_FOUND', 'NFS-e nao encontrada (mock).')) },
209
+ { service: 'adn', method: 'GET', path: /^\/contribuintes\/NFSe\/(\d{50})\/Eventos$/, handler: (_req, m) => {
210
+ const nota = notas.get(m[1]);
211
+ return nota ? json(200, { eventos: nota.eventos.map((e) => ({ tipoEvento: e.tpEvento, arquivoXml: gzipBase64(e.eventoXml) })) }) : json(404, errorBody('MOCK_NOT_FOUND', 'NFS-e nao encontrada (mock).'));
212
+ } },
213
+ { service: 'adn', method: 'GET', path: /^\/contribuintes\/DFe\/(\d+)$/, handler: (_req, m) => {
214
+ const lote = [...notas.values()].filter((n) => n.nsu > Number(m[1])).map((n) => ({ NSU: n.nsu, ChaveAcesso: n.chaveAcesso, TipoDocumento: 'NFSE', ArquivoXml: gzipBase64(n.nfseXml) }));
215
+ return json(200, { StatusProcessamento: lote.length ? 'DOCUMENTOS_LOCALIZADOS' : 'NENHUM_DOCUMENTO_LOCALIZADO', LoteDFe: lote });
216
+ } },
217
+ { service: 'adn', method: 'GET', path: /^\/parametrizacao\/(\d{7})\/convenio$/, handler: (_req, m) => json(200, { mensagem: 'Mock', parametrosConvenio: { codigoMunicipio: m[1], aderenteEmissorNacional: 1 } }) },
218
+ { service: 'adn', method: 'GET', path: /^\/parametrizacao\/.+$/, handler: () => json(200, { mensagem: 'Mock: parametro nao configurado.' }) },
219
+ ];
220
+ async function handle(request) {
221
+ const isAdn = Object.values(ADN_BASE_URL).some((base) => new URL(base).origin === request.url.origin);
222
+ const sefinBase = Object.values(SEFIN_BASE_URL).find((base) => request.url.href.startsWith(base));
223
+ const path = isAdn ? request.url.pathname : sefinBase ? request.url.pathname.slice(new URL(sefinBase).pathname.length) : request.url.pathname;
224
+ const log = { method: request.method, host: request.url.host, path: request.url.pathname + request.url.search };
225
+ requests.push(log);
226
+ const pendingIndex = pending.findIndex((p) => !p.path || p.path.test(path));
227
+ const control = pendingIndex >= 0 ? pending.splice(pendingIndex, 1)[0] : undefined;
228
+ if (control?.kind === 'fail') {
229
+ log.error = control.error.message;
230
+ throw control.error;
231
+ }
232
+ if (control?.kind === 'reject') {
233
+ log.status = control.status ?? 400;
234
+ return json(log.status, { erros: control.erros });
235
+ }
236
+ for (const route of custom) {
237
+ const match = request.method === route.method ? path.match(route.path) : null;
238
+ if (match)
239
+ return finish(await route.handler(request, match));
240
+ }
241
+ for (const route of routes) {
242
+ if (route.service === (isAdn ? 'adn' : 'sefin') && route.method === request.method) {
243
+ const match = path.match(route.path);
244
+ if (match)
245
+ return finish(await route.handler(request, match));
246
+ }
247
+ }
248
+ return finish(json(404, errorBody('MOCK_NO_ROUTE', `Rota nao simulada: ${request.method} ${path}`)));
249
+ function finish(response) {
250
+ log.status = response.status;
251
+ if (control?.kind === 'drop') {
252
+ log.error = control.error.message;
253
+ throw control.error;
254
+ }
255
+ return response;
256
+ }
257
+ }
258
+ const networkError = (message) => Object.assign(new Error(message), { code: 'ECONNRESET' });
259
+ const previous = setSefinTransport(handle);
260
+ let installed = true;
261
+ return {
262
+ notas,
263
+ requests,
264
+ rejectNext(erros, opts = {}) {
265
+ const list = typeof erros === 'string' ? [officialError(erros, `Rejeicao simulada ${erros}.`)] : erros;
266
+ pending.push({ kind: 'reject', erros: list, status: opts.status, path: opts.path });
267
+ },
268
+ failNext(error = networkError('socket hang up (mock)')) {
269
+ pending.push({ kind: 'fail', error });
270
+ },
271
+ dropResponseNext(error = networkError('connection dropped after processing (mock)')) {
272
+ pending.push({ kind: 'drop', error });
273
+ },
274
+ route(method, path, handler) {
275
+ custom.unshift({ method, path, handler });
276
+ },
277
+ restore() {
278
+ if (!installed)
279
+ return;
280
+ installed = false;
281
+ setSefinTransport(previous);
282
+ },
283
+ };
284
+ }
285
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../testing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /** Minimal XML builders shared by the DPS (dpsJson.ts) and event (eventoJson.ts) layouts. */
2
+ export declare function escapeXml(value: string | number): string;
3
+ export declare function escapeAttr(value: string | number): string;
4
+ export declare function attrs(values: Record<string, string>): string;
5
+ export declare function el(name: string, content: string, attrValues?: Record<string, string>): string;
6
+ export declare function textEl(name: string, value: string | number | undefined | null): string;
7
+ export declare function requiredTextEl(name: string, value: string | number | undefined | null): string;
8
+ export declare function onlyDigits(value: string): string;
9
+ export declare function pad(value: string, length: number): string;
10
+ /** Current time as AAAA-MM-DDThh:mm:ss-03:00 (America/Sao_Paulo), the format SEFIN expects. */
11
+ export declare function nowSaoPauloOffset(date?: Date): string;
@@ -0,0 +1,44 @@
1
+ /** Minimal XML builders shared by the DPS (dpsJson.ts) and event (eventoJson.ts) layouts. */
2
+ export function escapeXml(value) {
3
+ return String(value)
4
+ .replace(/&/g, '&amp;')
5
+ .replace(/</g, '&lt;')
6
+ .replace(/>/g, '&gt;');
7
+ }
8
+ export function escapeAttr(value) {
9
+ return escapeXml(value).replace(/"/g, '&quot;').replace(/'/g, '&apos;');
10
+ }
11
+ export function attrs(values) {
12
+ return Object.entries(values)
13
+ .map(([key, value]) => ` ${key}="${escapeAttr(value)}"`)
14
+ .join('');
15
+ }
16
+ export function el(name, content, attrValues = {}) {
17
+ return `<${name}${attrs(attrValues)}>${content}</${name}>`;
18
+ }
19
+ export function textEl(name, value) {
20
+ if (value === undefined || value === null || value === '')
21
+ return '';
22
+ return el(name, escapeXml(value));
23
+ }
24
+ export function requiredTextEl(name, value) {
25
+ if (value === undefined || value === null || value === '') {
26
+ throw new Error(`Campo obrigatorio ausente: ${name}`);
27
+ }
28
+ return el(name, escapeXml(value));
29
+ }
30
+ export function onlyDigits(value) {
31
+ return value.replace(/\D/g, '');
32
+ }
33
+ export function pad(value, length) {
34
+ return onlyDigits(value).padStart(length, '0');
35
+ }
36
+ /** Current time as AAAA-MM-DDThh:mm:ss-03:00 (America/Sao_Paulo), the format SEFIN expects. */
37
+ export function nowSaoPauloOffset(date = new Date()) {
38
+ const parts = new Intl.DateTimeFormat('en-CA', {
39
+ timeZone: 'America/Sao_Paulo', year: 'numeric', month: '2-digit', day: '2-digit',
40
+ hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23',
41
+ }).formatToParts(date).reduce((result, part) => ({ ...result, [part.type]: part.value }), {});
42
+ return `${parts.year}-${parts.month}-${parts.day}T${parts.hour}:${parts.minute}:${parts.second}-03:00`;
43
+ }
44
+ //# sourceMappingURL=xmlBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xmlBuild.js","sourceRoot":"","sources":["../xmlBuild.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Ambiente } from './config.js';
2
- export declare function parseNfseXml(xml: string, rootName: 'DPS' | 'NFSe'): Element;
2
+ export declare function parseNfseXml(xml: string, rootName: 'DPS' | 'NFSe' | 'pedRegEvento' | 'evento'): Element;
3
3
  export declare function directChildren(element: Element, name: string): Element[];
4
4
  export declare function dpsEnvironment(xml: string): Ambiente;
5
5
  export declare function assertEnvironment(actual: Ambiente, expected: Ambiente): void;
@@ -1,6 +1,6 @@
1
1
  import { DOMParser } from '@xmldom/xmldom';
2
- import { execFileSync } from 'node:child_process';
3
- import { XmllintUnavailableError } from './xsdValidation.js';
2
+ import { XmlDocument, XmlParseError } from 'libxml2-wasm';
3
+ import { SAFE_PARSE_OPTIONS, XsdEngineUnavailableError } from './xsdValidation.js';
4
4
  const NS = 'http://www.sped.fazenda.gov.br/nfse';
5
5
  export function parseNfseXml(xml, rootName) {
6
6
  const errors = [];
@@ -12,17 +12,18 @@ export function parseNfseXml(xml, rootName) {
12
12
  throw new Error(`XML ${rootName} invalido: documento malformado, raiz ou namespace inesperado.`);
13
13
  }
14
14
  // xmldom recovers silently from some malformed XML (e.g. unescaped '&').
15
- // Use the existing XML runtime for strict syntax checking, without fetching DTDs.
15
+ // Use libxml2 (WebAssembly) for strict syntax checking, without fetching DTDs.
16
+ let strict;
16
17
  try {
17
- execFileSync('xmllint', ['--noout', '--nonet', '-'], {
18
- input: xml, encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'],
19
- });
18
+ strict = XmlDocument.fromString(xml, { option: SAFE_PARSE_OPTIONS });
20
19
  }
21
20
  catch (error) {
22
- const failure = error;
23
- if (failure.status === 1)
21
+ if (error instanceof XmlParseError)
24
22
  throw new Error(`XML ${rootName} invalido: documento malformado.`);
25
- throw new XmllintUnavailableError(`Falha ao verificar XML ${rootName} com xmllint (${failure.code ?? failure.status ?? 'desconhecida'}).`, error);
23
+ throw new XsdEngineUnavailableError(`Falha ao verificar XML ${rootName}: ${error instanceof Error ? error.message : String(error)}`, error);
24
+ }
25
+ finally {
26
+ strict?.dispose();
26
27
  }
27
28
  return root;
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"xmlInspection.js","sourceRoot":"","sources":["../xmlInspection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,EAAE,GAAG,qCAAqC,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,QAAwB;IAChE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC7I,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;IAC/E,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7G,MAAM,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC;IACjC,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,EAAE,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE,CAAC;QAChI,MAAM,IAAI,KAAK,CAAC,OAAO,QAAQ,gEAAgE,CAAC,CAAC;IACnG,CAAC;IACD,yEAAyE;IACzE,kFAAkF;IAClF,IAAI,CAAC;QACH,YAAY,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE;YACnD,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAA2C,CAAC;QAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,QAAQ,kCAAkC,CAAC,CAAC;QAC7F,MAAM,IAAI,uBAAuB,CAAC,0BAA0B,QAAQ,iBAAiB,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,cAAc,IAAI,EAAE,KAAK,CAAC,CAAC;IACpJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,IAAY;IAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAmB,EAAE,CACrE,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAK,IAAgB,CAAC,SAAS,KAAK,IAAI,IAAK,IAAgB,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAChH,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAgB,EAAE,QAAkB;IACpE,IAAI,MAAM,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,IAA6B;IAC5E,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACrF,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IACpD,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACrG,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC7G,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3G,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnH,OAAO,UAAU,CAAC,CAAC,CAAW,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"xmlInspection.js","sourceRoot":"","sources":["../xmlInspection.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,34 @@ export declare class DpsXsdValidationError extends Error {
3
3
  readonly details: string[];
4
4
  constructor(details: string[]);
5
5
  }
6
+ /** The pedRegEvento XML violates the NFS-e v1.01 event XSD. */
7
+ export declare class PedRegEventoXsdValidationError extends Error {
8
+ readonly details: string[];
9
+ constructor(details: string[]);
10
+ }
6
11
  /**
7
- * `xmllint` could not be run to completion (missing binary, spawn failure, or
8
- * an unexpected crash without stderr). This is an infrastructure problem, not
9
- * proof that the XML is fiscally invalid, and callers must not treat it as a
12
+ * The embedded XSD engine (libxml2 compiled to WebAssembly) could not load the
13
+ * official schemas or crashed. This is an infrastructure problem, not proof
14
+ * that the XML is fiscally invalid, and callers must not treat it as a
10
15
  * permanent rejection.
11
16
  */
12
- export declare class XmllintUnavailableError extends Error {
17
+ export declare class XsdEngineUnavailableError extends Error {
13
18
  readonly cause: unknown;
14
19
  constructor(message: string, cause: unknown);
15
20
  }
16
- /** Validates a generated DPS against the official v1.01 schema before signing. */
21
+ /**
22
+ * @deprecated Since 3.1.0 the SDK no longer runs the `xmllint` binary.
23
+ * Kept as an alias so existing `instanceof XmllintUnavailableError` checks still work.
24
+ */
25
+ export declare const XmllintUnavailableError: typeof XsdEngineUnavailableError;
26
+ /** @deprecated Use {@link XsdEngineUnavailableError}. */
27
+ export type XmllintUnavailableError = XsdEngineUnavailableError;
28
+ /** Never load DTDs, external entities or network resources while parsing. */
29
+ export declare const SAFE_PARSE_OPTIONS: number;
30
+ /**
31
+ * Validates a DPS against the official v1.01 schema before signing.
32
+ * Runs in-process (libxml2 in WebAssembly): no `xmllint`, no temp files, no network.
33
+ */
17
34
  export declare function validateDpsXmlAgainstXsd(xml: string): void;
35
+ /** Validates a pedRegEvento (cancellation, substitution, ...) against the official v1.01 event schema. */
36
+ export declare function validatePedRegEventoXmlAgainstXsd(xml: string): void;