cosmemilton-acbr-node 0.1.2 → 0.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 (52) hide show
  1. package/LICENSE +502 -502
  2. package/NOTICE +8 -8
  3. package/README.md +40 -11
  4. package/acbr.config.json +16 -16
  5. package/acbr.lock.json +0 -0
  6. package/dist/cli.js +39 -13
  7. package/dist/cli.js.map +2 -2
  8. package/dist/contract.json +0 -0
  9. package/dist/index.cjs +36 -11
  10. package/dist/index.cjs.map +2 -2
  11. package/dist/index.js +36 -11
  12. package/dist/index.js.map +2 -2
  13. package/dist/runtime.cjs +36 -11
  14. package/dist/runtime.cjs.map +2 -2
  15. package/dist/runtime.js +36 -11
  16. package/dist/runtime.js.map +2 -2
  17. package/dist/types/generated/acbr/index.d.ts +1 -0
  18. package/dist/types/generated/acbr/models.d.ts +0 -0
  19. package/dist/types/src/cli.d.ts +0 -0
  20. package/dist/types/src/config.d.ts +0 -0
  21. package/dist/types/src/contract-help.d.ts +0 -0
  22. package/dist/types/src/diagnostics.d.ts +2 -0
  23. package/dist/types/src/generator.d.ts +0 -0
  24. package/dist/types/src/index.d.ts +1 -0
  25. package/dist/types/src/native-build.d.ts +1 -0
  26. package/dist/types/src/offline-check.d.ts +0 -0
  27. package/dist/types/src/offline-fixture.d.ts +0 -0
  28. package/dist/types/src/runtime.d.ts +1 -0
  29. package/dist/types/src/source.d.ts +0 -0
  30. package/dist/types/src/types.d.ts +4 -2
  31. package/docs/API.md +116 -90
  32. package/docs/ARQUITETURA.md +19 -15
  33. package/docs/CI.md +60 -60
  34. package/docs/CLI.md +1 -1
  35. package/docs/DEPENDENCIAS-NATIVAS.md +93 -93
  36. package/docs/VALIDACAO.md +67 -67
  37. package/docs/examples/recuperar-xml.mjs +54 -0
  38. package/docs/licenses/fpc/COPYING.FPC +25 -25
  39. package/docs/licenses/fpc/COPYING.GPL.txt +340 -340
  40. package/docs/licenses/fpc/COPYING.LGPL.txt +504 -504
  41. package/docs/licenses/fpc/ORIGIN.json +21 -21
  42. package/docs/licenses/lazarus/COPYING.LGPL.txt +481 -481
  43. package/docs/licenses/lazarus/COPYING.modifiedLGPL.txt +26 -26
  44. package/docs/licenses/lazarus/COPYING.txt +46 -46
  45. package/docs/licenses/lazarus/ORIGIN.json +1 -1
  46. package/native/NativeMotor.pas +55 -3
  47. package/native/NativeProtocol.pas +3 -2
  48. package/native/NativeRecovery.pas +274 -0
  49. package/native/generated/AcbrModels.pas +0 -0
  50. package/package.json +76 -76
  51. package/scripts/build-native-deps.mjs +237 -237
  52. package/tools/extract-model.lpr +119 -119
package/dist/runtime.js CHANGED
@@ -9,6 +9,12 @@ import { TextDecoder } from "node:util";
9
9
  // src/diagnostics.ts
10
10
  var ETAPAS = /* @__PURE__ */ new Set(["configuracao", "documento", "runtime", "geracao", "validacao", "assinatura", "transmissao", "consulta", "cancelamento", "carta_correcao", "inutilizacao", "operacao", "limpeza"]);
11
11
  var CAMPOS = /* @__PURE__ */ new Set(["cnpj", "uf", "modelo", "ambiente", "contrato", "certificado", "certificado.senha", "certificado.pfx", "certificado.arquivo", "csc", "csc.id", "csc.valor", "timeoutMs", "limiteFila", "limiteBytes", "runtimeDirectory", "documento", "xml", "consulta", "chave", "recibo", "cancelamento", "protocolo", "justificativa", "cartaCorrecao", "correcao", "sequenciaEvento", "inutilizacao", "ano", "serie", "numeroInicial", "numeroFinal", "operacao", "signal"]);
12
+ var MAX_RECOVERED_XML_BYTES = 4 * 1024 * 1024;
13
+ function base64XmlRecuperadoValido(value) {
14
+ if (typeof value !== "string" || value.length === 0 || value.length > Math.ceil(MAX_RECOVERED_XML_BYTES / 3) * 4) return false;
15
+ const bytes = Buffer.from(value, "base64");
16
+ return bytes.length > 0 && bytes.length <= MAX_RECOVERED_XML_BYTES && bytes.toString("base64") === value;
17
+ }
12
18
  var CATALOGO = {
13
19
  CONFIGURACAO_INVALIDA: ["configuracao", "A configura\xE7\xE3o cont\xE9m um campo inv\xE1lido.", "Confira o campo indicado e seu tipo antes de continuar."],
14
20
  CONTRATO_INVALIDO: ["configuracao", "O contrato do cliente \xE9 inv\xE1lido.", "Use o contrato gerado junto com o cliente."],
@@ -24,6 +30,7 @@ var CATALOGO = {
24
30
  XML_NAO_ASSINADO: ["assinatura", "A opera\xE7\xE3o exige XML previamente assinado.", "Conclua a assinatura e a valida\xE7\xE3o antes de transmitir."],
25
31
  XML_ALTERADO: ["assinatura", "O XML assinado foi alterado.", "Use exatamente o XML assinado e persistido; n\xE3o edite seu conte\xFAdo."],
26
32
  RETORNO_INVALIDO: ["transmissao", "A identidade ou o protocolo do retorno fiscal \xE9 inv\xE1lido.", "Consulte a situa\xE7\xE3o fiscal antes de decidir repetir a opera\xE7\xE3o."],
33
+ RECUPERACAO_NAO_COMPROVADA: ["consulta", "A consulta n\xE3o comprovou a recupera\xE7\xE3o do XML autorizado.", "Preserve o XML assinado original e confira a situa\xE7\xE3o fiscal. N\xE3o transmita a nota para tentar recuperar o protocolo."],
27
34
  OPERACAO_FISCAL_FALHOU: ["operacao", "O motor n\xE3o conseguiu concluir a etapa fiscal.", "Confira a configura\xE7\xE3o da etapa, os dados do XML e as depend\xEAncias do runtime."],
28
35
  TLS_SERVIDOR_INVALIDO: ["transmissao", "A verifica\xE7\xE3o TLS do servi\xE7o fiscal falhou.", "Confira o servi\xE7o e a cadeia de confian\xE7a; mantenha a verifica\xE7\xE3o TLS habilitada."],
29
36
  CSC_INVALIDO: ["configuracao", "A configura\xE7\xE3o do CSC \xE9 inv\xE1lida.", "Confira id e valor do CSC sem registrar seu conte\xFAdo."],
@@ -32,6 +39,7 @@ var CATALOGO = {
32
39
  RUNTIME_INVALIDO: ["runtime", "O runtime fiscal \xE9 inv\xE1lido.", "Use um runtime distribu\xEDdo e compat\xEDvel com a plataforma."],
33
40
  RUNTIME_INCOMPLETO: ["runtime", "Falta um arquivo do runtime fiscal.", "Reinstale o runtime da plataforma."],
34
41
  RUNTIME_ALTERADO: ["runtime", "A integridade do runtime fiscal n\xE3o foi confirmada.", "Reinstale o runtime; n\xE3o desative a verifica\xE7\xE3o dos hashes."],
42
+ RUNTIME_SEM_CAPACIDADE: ["runtime", "O runtime instalado n\xE3o oferece esta opera\xE7\xE3o.", "Atualize o pacote principal e o runtime da plataforma para vers\xF5es compat\xEDveis com a opera\xE7\xE3o solicitada."],
35
43
  CONTRATO_DIVERGENTE: ["runtime", "Cliente e motor usam contratos diferentes.", "Use vers\xF5es compat\xEDveis ou regenere e recompile ambos."],
36
44
  DOCUMENTO_INVALIDO: ["documento", "O documento cont\xE9m dados incompat\xEDveis com o modelo.", "Valide os campos e tipos do documento antes de gerar o XML."],
37
45
  OPERACAO_INVALIDA: ["operacao", "Os par\xE2metros da opera\xE7\xE3o s\xE3o inv\xE1lidos.", "Informe um objeto com os campos exigidos pela opera\xE7\xE3o."],
@@ -58,7 +66,7 @@ var CATALOGO = {
58
66
  FALHA_LOCAL: ["operacao", "N\xE3o foi poss\xEDvel concluir a opera\xE7\xE3o local.", "Confira a etapa e os tipos dos dados; n\xE3o registre o erro bruto."]
59
67
  };
60
68
  function etapaDaOperacao(comando) {
61
- return { gerarXml: "geracao", validar: "validacao", assinar: "assinatura", transmitir: "transmissao", consultar: "consulta", cancelar: "cancelamento", cartaCorrecao: "carta_correcao", inutilizar: "inutilizacao" }[comando] ?? "operacao";
69
+ return { gerarXml: "geracao", validar: "validacao", assinar: "assinatura", transmitir: "transmissao", consultar: "consulta", recuperarXml: "consulta", cancelar: "cancelamento", cartaCorrecao: "carta_correcao", inutilizar: "inutilizacao" }[comando] ?? "operacao";
62
70
  }
63
71
  function criarDiagnosticoErro(codigo, desconhecido = false, detalhes = {}) {
64
72
  const safeCode = Object.hasOwn(CATALOGO, codigo) ? codigo : "FALHA_LOCAL";
@@ -98,18 +106,30 @@ function diagnosticarResultado(resultado, comando) {
98
106
  const protocolo = typeof resultado.protocolo === "string" && /^\d{15}$/.test(resultado.protocolo);
99
107
  const chave = typeof resultado.chave === "string" && /^\d{44}$/.test(resultado.chave);
100
108
  const autorizacao = (comando === "transmitir" || comando === "consultar") && resultado.estado === "AUTORIZADO" && [100, 150].includes(resultado.cStat) && protocolo && chave && (comando === "consultar" || resultado.envioIniciado !== false);
109
+ const xmlRecuperado = comando === "recuperarXml" && base64XmlRecuperadoValido(resultado.xmlBase64);
110
+ const recuperacao = comando === "recuperarXml" && resultado.estado === "XML_RECUPERADO" && resultado.cStat === 100 && protocolo && chave && semEvento && xmlRecuperado;
101
111
  const evento = comando === "cancelar" && resultado.estado === "CANCELADO" && [135, 136].includes(resultado.cStat) && chave || comando === "cartaCorrecao" && resultado.estado === "EVENTO_REGISTRADO" && resultado.cStat === 135 && chave || comando === "inutilizar" && resultado.estado === "INUTILIZADO" && resultado.cStat === 102;
102
112
  if (local && resultado.sucesso === true && semEvento) {
103
113
  statusEnvio = "nao_enviado";
104
114
  codigo = "ETAPA_LOCAL_CONCLUIDA";
105
115
  mensagem = "A etapa local foi conclu\xEDda; esta opera\xE7\xE3o n\xE3o transmitiu a nota.";
106
116
  acao = "Confira o resultado antes de seguir para a pr\xF3xima etapa.";
117
+ } else if (resultado.sucesso === true && recuperacao) {
118
+ statusEnvio = "autorizado";
119
+ codigo = "XML_RECUPERADO";
120
+ mensagem = "O XML autorizado foi recuperado por consulta; esta opera\xE7\xE3o n\xE3o transmitiu a nota.";
121
+ acao = "Guarde o XML recuperado com o protocolo de autoriza\xE7\xE3o.";
122
+ } else if (comando === "recuperarXml" && resultado.sucesso === false && resultado.codigo === "RECUPERACAO_NAO_COMPROVADA" && ["CONSULTADO", "ERRO"].includes(resultado.estado) && semEvento) {
123
+ statusEnvio = "nao_enviado";
124
+ codigo = "RECUPERACAO_NAO_COMPROVADA";
125
+ mensagem = CATALOGO.RECUPERACAO_NAO_COMPROVADA[1];
126
+ acao = CATALOGO.RECUPERACAO_NAO_COMPROVADA[2];
107
127
  } else if (resultado.sucesso === true && (autorizacao || evento && protocolo && resultado.envioIniciado !== false)) {
108
128
  statusEnvio = "autorizado";
109
129
  codigo = "OPERACAO_CONFIRMADA";
110
130
  mensagem = { AUTORIZADO: "A nota foi autorizada.", CANCELADO: "O cancelamento foi confirmado.", EVENTO_REGISTRADO: "O evento foi registrado.", INUTILIZADO: "A faixa foi inutilizada." }[resultado.estado];
111
131
  acao = "Guarde o resultado fiscal. N\xE3o repita esta opera\xE7\xE3o.";
112
- } else if (resultado.sucesso === false && (comando === "consultar" || resultado.envioIniciado !== false) && ["transmitir", "consultar", "cancelar", "cartaCorrecao", "inutilizar"].includes(comando) && Number.isInteger(resultado.cStat) && Number(resultado.cStat) > 0 && Number(resultado.cStat) <= 9999 && (resultado.estado === "DENEGADO" && [110, 301, 302].includes(resultado.cStat) || resultado.estado === "REJEITADO" && ![100, 150, 110, 301, 302, 101, 151, 155, 103, 104, 105, 108, 109, 204, 539, 573, 135, 136, 102, 217].includes(resultado.cStat))) {
132
+ } else if (resultado.sucesso === false && (comando === "consultar" || comando === "recuperarXml" || resultado.envioIniciado !== false) && ["transmitir", "consultar", "recuperarXml", "cancelar", "cartaCorrecao", "inutilizar"].includes(comando) && Number.isInteger(resultado.cStat) && Number(resultado.cStat) > 0 && Number(resultado.cStat) <= 9999 && (resultado.estado === "DENEGADO" && [110, 301, 302].includes(resultado.cStat) || resultado.estado === "REJEITADO" && ![100, 150, 110, 301, 302, 101, 151, 155, 103, 104, 105, 108, 109, 204, 539, 573, 135, 136, 102, 217].includes(resultado.cStat))) {
113
133
  statusEnvio = "rejeitado";
114
134
  codigo = resultado.estado === "DENEGADO" ? "NOTA_DENEGADA" : "OPERACAO_REJEITADA";
115
135
  mensagem = resultado.estado === "DENEGADO" ? "A nota foi denegada." : "A opera\xE7\xE3o foi rejeitada.";
@@ -152,7 +172,7 @@ var ErroAcbrNode = class extends Error {
152
172
  };
153
173
 
154
174
  // src/runtime.ts
155
- var STATES = /* @__PURE__ */ new Set(["DENEGADO", "XML_GERADO", "VALIDADO", "ASSINADO", "AUTORIZADO", "REJEITADO", "PENDENTE", "INDETERMINADO", "CONSULTADO", "CANCELADO", "EVENTO_REGISTRADO", "INUTILIZADO", "ERRO"]);
175
+ var STATES = /* @__PURE__ */ new Set(["DENEGADO", "XML_GERADO", "VALIDADO", "ASSINADO", "XML_RECUPERADO", "AUTORIZADO", "REJEITADO", "PENDENTE", "INDETERMINADO", "CONSULTADO", "CANCELADO", "EVENTO_REGISTRADO", "INUTILIZADO", "ERRO"]);
156
176
  var UFS = new Set("AC AL AP AM BA CE DF ES GO MA MT MS MG PA PB PR PE PI RJ RN RS RO RR SC SP SE TO".split(" "));
157
177
  var MAX_BYTES = 8 * 1024 * 1024;
158
178
  var MAX_TEARDOWN_MS = 1e3;
@@ -184,6 +204,7 @@ async function resolveRuntime(directory, contract) {
184
204
  throw fail("RUNTIME_AUSENTE", "Manifesto do runtime n\xE3o encontrado.");
185
205
  }
186
206
  if (!validContract(m) || m.formatVersion !== 1 || !plain(m.files) || typeof m.executable !== "string" || m.platform !== process.platform || m.arch !== process.arch) throw fail("RUNTIME_INVALIDO", "Manifesto ou plataforma do runtime inv\xE1lidos.");
207
+ if (m.capabilities !== void 0 && (!Array.isArray(m.capabilities) || !m.capabilities.every((value) => typeof value === "string" && /^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(value)))) throw fail("RUNTIME_INVALIDO", "Capacidades do runtime inv\xE1lidas.");
187
208
  if (m.sourceRevision !== contract.sourceRevision || m.contractHash !== contract.contractHash) throw fail("CONTRATO_DIVERGENTE", "Cliente e motor foram gerados de contratos diferentes; regenere e recompile.");
188
209
  for (const [name, hash] of Object.entries(m.files)) {
189
210
  if (typeof hash !== "string" || !/^[a-f0-9]{64}$/.test(hash)) throw fail("RUNTIME_INVALIDO", "Hash inv\xE1lido no runtime.");
@@ -198,7 +219,7 @@ async function resolveRuntime(directory, contract) {
198
219
  if (createHash("sha256").update(data).digest("hex") !== hash) throw fail("RUNTIME_ALTERADO", "O runtime n\xE3o corresponde ao manifesto distribu\xEDdo.");
199
220
  }
200
221
  if (!m.files[m.executable]) throw fail("RUNTIME_INVALIDO", "O execut\xE1vel n\xE3o consta no invent\xE1rio.");
201
- return { directory: root, executable: confined(root, m.executable) };
222
+ return { directory: root, executable: confined(root, m.executable), capabilities: new Set(m.capabilities ?? []) };
202
223
  }
203
224
  function criarEmissor(options) {
204
225
  const configFail = (campo) => fail("CONFIGURACAO_INVALIDA", "Informe campos e tipos v\xE1lidos na configura\xE7\xE3o.", void 0, false, { etapa: "configuracao", campo });
@@ -215,7 +236,7 @@ function criarEmissor(options) {
215
236
  if (options.validaDocumento !== void 0 && typeof options.validaDocumento !== "function" || options.criaProcesso !== void 0 && typeof options.criaProcesso !== "function") throw configFail();
216
237
  const cfg = { cnpj: options.cnpj, uf: options.uf, modelo: options.modelo, ambiente: options.ambiente, csc: options.csc ? { ...options.csc } : void 0 };
217
238
  const certificate = cert ? { ...cert, pfx: cert.pfx ? Buffer.from(cert.pfx) : void 0 } : void 0;
218
- const contract = { ...options.contrato };
239
+ const contract = { sourceRevision: options.contrato.sourceRevision, contractHash: options.contrato.contractHash };
219
240
  const timeout = options.timeoutMs ?? 12e4, capacity = options.limiteFila ?? 32, bytesLimit = options.limiteBytes ?? MAX_BYTES;
220
241
  if (!Number.isInteger(timeout) || timeout < 1 || timeout > 12e4) throw configFail("timeoutMs");
221
242
  if (!Number.isInteger(capacity) || capacity < 0 || capacity > 1e3) throw configFail("limiteFila");
@@ -238,6 +259,7 @@ function criarEmissor(options) {
238
259
  async function execute(item) {
239
260
  if (closed || item.signal?.aborted) throw fail("OPERACAO_CANCELADA", "Opera\xE7\xE3o cancelada antes da execu\xE7\xE3o.");
240
261
  const runtime = await (runtimePromise ??= resolveRuntime(options.runtimeDirectory, contract));
262
+ if (item.req.comando === "recuperarXml" && !runtime.capabilities.has("recuperarXml")) throw fail("RUNTIME_SEM_CAPACIDADE", "O runtime n\xE3o oferece recupera\xE7\xE3o de XML; atualize o pacote e o runtime compat\xEDvel.", item.req, false, { etapa: "runtime" });
241
263
  if (closed || item.signal?.aborted) throw fail("OPERACAO_CANCELADA", "Opera\xE7\xE3o cancelada antes da execu\xE7\xE3o.");
242
264
  return await new Promise((done, rejectExecution) => {
243
265
  let stopError;
@@ -360,9 +382,11 @@ function criarEmissor(options) {
360
382
  continue;
361
383
  }
362
384
  if (result || frame.versao !== 1 || frame.sourceRevision !== contract.sourceRevision || frame.contractHash !== contract.contractHash || typeof frame.sucesso !== "boolean" || !STATES.has(String(frame.estado))) throw Error();
363
- if (frame.xmlBase64 !== void 0 && (typeof frame.xmlBase64 !== "string" || !frame.xmlBase64.length || Buffer.from(frame.xmlBase64, "base64").toString("base64") !== frame.xmlBase64)) throw Error();
385
+ if (frame.xmlBase64 !== void 0 && (item.req.comando === "recuperarXml" ? !base64XmlRecuperadoValido(frame.xmlBase64) : typeof frame.xmlBase64 !== "string" || !frame.xmlBase64.length || Buffer.from(frame.xmlBase64, "base64").toString("base64") !== frame.xmlBase64)) throw Error();
364
386
  if (frame.cStat !== void 0 && (!Number.isInteger(frame.cStat) || Number(frame.cStat) < 1 || Number(frame.cStat) > 9999)) throw Error();
365
387
  if (frame.envioIniciado !== void 0 && typeof frame.envioIniciado !== "boolean" || sending && frame.envioIniciado === false) throw Error();
388
+ if (frame.estado === "XML_RECUPERADO" && item.req.comando !== "recuperarXml") throw Error();
389
+ if (item.req.comando === "recuperarXml" && (frame.sucesso === true || frame.estado === "XML_RECUPERADO") && (frame.sucesso !== true || frame.estado !== "XML_RECUPERADO" || frame.cStat !== 100 || typeof frame.chave !== "string" || !/^\d{44}$/.test(frame.chave) || typeof frame.protocolo !== "string" || !/^\d{15}$/.test(frame.protocolo) || typeof frame.xmlBase64 !== "string" || frame.envioIniciado === true || sending)) throw Error();
366
390
  const fiscal = frame;
367
391
  result = { ...fiscal, diagnostico: diagnosticarResultado(sending ? { ...fiscal, envioIniciado: true } : fiscal, item.req.comando) };
368
392
  } catch {
@@ -412,7 +436,7 @@ function criarEmissor(options) {
412
436
  if (signal !== void 0 && (!plain(signal) || typeof signal.aborted !== "boolean" || typeof signal.addEventListener !== "function" || typeof signal.removeEventListener !== "function")) throw fail("OPERACAO_INVALIDA", "Informe op\xE7\xF5es v\xE1lidas para a opera\xE7\xE3o.", void 0, false, { etapa: etapaDaOperacao(command), campo: "signal" });
413
437
  if (closed) throw closedError();
414
438
  if (operation.signal?.aborted) throw fail("OPERACAO_CANCELADA", "Opera\xE7\xE3o cancelada antes da execu\xE7\xE3o.");
415
- if (["assinar", "transmitir", "consultar", "cancelar", "cartaCorrecao", "inutilizar"].includes(command) && !certificate) throw fail("CERTIFICADO_AUSENTE", "A opera\xE7\xE3o exige um certificado A1.");
439
+ if (["assinar", "transmitir", "consultar", "recuperarXml", "cancelar", "cartaCorrecao", "inutilizar"].includes(command) && !certificate) throw fail("CERTIFICADO_AUSENTE", "A opera\xE7\xE3o exige um certificado A1.", void 0, false, { etapa: etapaDaOperacao(command) });
416
440
  if (command === "gerarXml") options.validaDocumento?.(data.documento);
417
441
  const config = { ...cfg };
418
442
  if (certificate) {
@@ -427,7 +451,7 @@ function criarEmissor(options) {
427
451
  }
428
452
  let bytes, req;
429
453
  try {
430
- bytes = Buffer.from(JSON.stringify({ versao: 1, id: randomUUID(), ...contract, comando: command, config, ...data }) + "\n", "utf8");
454
+ bytes = Buffer.from(JSON.stringify({ ...data, ...contract, versao: 1, id: randomUUID(), comando: command, config }) + "\n", "utf8");
431
455
  if (bytes.length > bytesLimit) throw Error();
432
456
  req = JSON.parse(bytes.toString("utf8"));
433
457
  } catch {
@@ -478,25 +502,26 @@ function criarEmissor(options) {
478
502
  validar: (xml, op) => request("validar", xmlData(xml), op),
479
503
  assinar: (xml, op) => request("assinar", xmlData(xml), op),
480
504
  transmitir: (xml, op) => request("transmitir", xmlData(xml), op),
505
+ recuperarXml: (xmlAssinado, opcoes) => request("recuperarXml", xmlData(xmlAssinado), opcoes),
481
506
  consultar: (consulta, op) => {
482
507
  checkObject(consulta, "consulta");
483
508
  checkKey(consulta.chave);
484
509
  if (consulta.recibo !== void 0 && (typeof consulta.recibo !== "string" || !/^\d{15}$/.test(consulta.recibo))) throw fail("RECIBO_INVALIDO", "Recibo inv\xE1lido.", void 0, false, { campo: "recibo" });
485
- return request("consultar", consulta, op);
510
+ return request("consultar", { chave: consulta.chave, ...consulta.recibo !== void 0 ? { recibo: consulta.recibo } : {} }, op);
486
511
  },
487
512
  cancelar: (data, op) => {
488
513
  checkObject(data, "cancelamento");
489
514
  checkKey(data.chave);
490
515
  reason(data.justificativa);
491
516
  if (typeof data.protocolo !== "string" || !/^\d{15}$/.test(data.protocolo)) throw fail("PROTOCOLO_INVALIDO", "Protocolo inv\xE1lido.", void 0, false, { campo: "protocolo" });
492
- return request("cancelar", data, op);
517
+ return request("cancelar", { chave: data.chave, protocolo: data.protocolo, justificativa: data.justificativa }, op);
493
518
  },
494
519
  cartaCorrecao: (data, op) => {
495
520
  checkObject(data, "cartaCorrecao");
496
521
  if (cfg.modelo !== 55) throw fail("OPERACAO_NAO_SUPORTADA", "Carta de corre\xE7\xE3o exige NF-e modelo 55.");
497
522
  checkKey(data.chave);
498
523
  if (typeof data.correcao !== "string" || data.correcao.length < 15 || data.correcao.length > 1e3 || !Number.isInteger(data.sequenciaEvento ?? 1) || (data.sequenciaEvento ?? 1) < 1 || (data.sequenciaEvento ?? 1) > 20) throw fail("CORRECAO_INVALIDA", "Dados da carta de corre\xE7\xE3o inv\xE1lidos.", void 0, false, { campo: "cartaCorrecao" });
499
- return request("cartaCorrecao", { ...data, sequenciaEvento: data.sequenciaEvento ?? 1 }, op);
524
+ return request("cartaCorrecao", { chave: data.chave, correcao: data.correcao, sequenciaEvento: data.sequenciaEvento ?? 1 }, op);
500
525
  },
501
526
  inutilizar: (data, op) => {
502
527
  checkObject(data, "inutilizacao");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/runtime.ts", "../src/diagnostics.ts", "../src/types.ts"],
4
- "sourcesContent": ["import { spawn, type ChildProcessWithoutNullStreams, type SpawnOptionsWithoutStdio } from 'node:child_process';\nimport { readFile, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { createHash, randomUUID } from 'node:crypto';\nimport { TextDecoder } from 'node:util';\nimport { ErroAcbrNode, type DetalhesErroAcbr, type ConfiguracaoEmissor, type Contrato, type ConfiguracaoMotor, type RequisicaoMotor, type ResultadoFiscal, type RuntimeManifest, type OpcoesOperacao, type Consulta, type Cancelamento, type CartaCorrecao, type Inutilizacao } from './types.js';\nimport { diagnosticarResultado, etapaDaOperacao } from './diagnostics.js';\nexport * from './types.js';\nexport { diagnosticarErro, diagnosticarResultado } from './diagnostics.js';\ntype Launch = (exe: string, args: string[], config: SpawnOptionsWithoutStdio) => ChildProcessWithoutNullStreams;\nexport interface OpcoesEmissor extends ConfiguracaoEmissor {\n contrato: Contrato; runtimeDirectory?: string; timeoutMs?: number; limiteFila?: number; limiteBytes?: number;\n validaDocumento?: (documento: unknown) => void;\n /** Inje\u00E7\u00E3o para testes offline. O padr\u00E3o sempre inicia o motor distribu\u00EDdo. */\n criaProcesso?: Launch;\n}\nconst STATES = new Set(['DENEGADO','XML_GERADO','VALIDADO','ASSINADO','AUTORIZADO','REJEITADO','PENDENTE','INDETERMINADO','CONSULTADO','CANCELADO','EVENTO_REGISTRADO','INUTILIZADO','ERRO']);\nconst UFS = new Set('AC AL AP AM BA CE DF ES GO MA MT MS MG PA PB PR PE PI RJ RN RS RO RR SC SP SE TO'.split(' '));\nconst MAX_BYTES = 8 * 1024 * 1024;\nconst MAX_TEARDOWN_MS = 1000;\nconst plain = (v: unknown): v is Record<string,unknown> => v !== null && typeof v === 'object' && !Array.isArray(v);\nconst validContract = (v: unknown): v is Contrato => plain(v) && Number.isInteger(v.sourceRevision) && Number(v.sourceRevision)>0 && typeof v.contractHash==='string' && /^[a-f0-9]{64}$/.test(v.contractHash);\nconst fail = (code: string, message: string, req?: RequisicaoMotor, unknown=false, detalhes?:DetalhesErroAcbr) => new ErroAcbrNode(code,message,unknown,req?.comando==='transmitir'?req.xmlBase64:undefined,{...(req?{etapa:etapaDaOperacao(req.comando)}:{}),...detalhes});\nfunction confined(root: string, relative: string): string {\n const file=path.resolve(root,relative), part=path.relative(root,file);\n if(!relative || path.isAbsolute(relative) || part==='..' || part.startsWith('..'+path.sep)) throw fail('RUNTIME_INVALIDO','Caminho inv\u00E1lido no runtime.');\n return file;\n}\nasync function resolveRuntime(directory: string | undefined, contract: Contrato): Promise<{directory:string;executable:string}> {\n if(!validContract(contract)) throw fail('CONTRATO_INVALIDO','Contrato gerado inv\u00E1lido.');\n let root=directory;\n if(!root) {\n if(!['linux','win32'].includes(process.platform) || process.arch!=='x64') throw fail('PLATAFORMA_NAO_SUPORTADA','Esta vers\u00E3o exige Linux ou Windows x64.');\n try { const require=createRequire(typeof __filename!=='undefined'?__filename:import.meta.url); root=path.join(path.dirname(require.resolve('cosmemilton-acbr-node-'+process.platform+'-x64/package.json')),'runtime'); }\n catch { throw fail('RUNTIME_AUSENTE','Instale o pacote de runtime da plataforma ou informe runtimeDirectory.'); }\n }\n root=path.resolve(root);\n let m: RuntimeManifest;\n try { m=JSON.parse(await readFile(path.join(root,'manifest.json'),'utf8')); } catch { throw fail('RUNTIME_AUSENTE','Manifesto do runtime n\u00E3o encontrado.'); }\n if(!validContract(m) || m.formatVersion!==1 || !plain(m.files) || typeof m.executable!=='string' || m.platform!==process.platform || m.arch!==process.arch) throw fail('RUNTIME_INVALIDO','Manifesto ou plataforma do runtime inv\u00E1lidos.');\n if(m.sourceRevision!==contract.sourceRevision || m.contractHash!==contract.contractHash) throw fail('CONTRATO_DIVERGENTE','Cliente e motor foram gerados de contratos diferentes; regenere e recompile.');\n for(const [name,hash] of Object.entries(m.files)) {\n if(typeof hash!=='string'||!/^[a-f0-9]{64}$/.test(hash)) throw fail('RUNTIME_INVALIDO','Hash inv\u00E1lido no runtime.');\n const file=confined(root,name); let data:Buffer;\n try { if(!(await stat(file)).isFile()) throw Error(); data=await readFile(file); } catch { throw fail('RUNTIME_INCOMPLETO','Arquivo do runtime ausente.'); }\n if(createHash('sha256').update(data).digest('hex')!==hash) throw fail('RUNTIME_ALTERADO','O runtime n\u00E3o corresponde ao manifesto distribu\u00EDdo.');\n }\n if(!m.files[m.executable]) throw fail('RUNTIME_INVALIDO','O execut\u00E1vel n\u00E3o consta no invent\u00E1rio.');\n return {directory:root,executable:confined(root,m.executable)};\n}\ninterface Pending { req:RequisicaoMotor; bytes:Buffer; signal?:AbortSignal; resolve:(v:ResultadoFiscal)=>void; reject:(e:unknown)=>void; abort?:()=>void }\nexport function criarEmissor(options: OpcoesEmissor) {\n const configFail=(campo?:string)=>fail('CONFIGURACAO_INVALIDA','Informe campos e tipos v\u00E1lidos na configura\u00E7\u00E3o.',undefined,false,{etapa:'configuracao',campo});\n if(!plain(options))throw configFail();\n if(typeof options.cnpj!=='string'||!/^\\d{14}$/.test(options.cnpj))throw configFail('cnpj');\n if(typeof options.uf!=='string'||!UFS.has(options.uf))throw configFail('uf');\n if(![55,65].includes(options.modelo))throw configFail('modelo');\n if(![1,2].includes(options.ambiente))throw configFail('ambiente');\n if(!validContract(options.contrato)) throw fail('CONTRATO_INVALIDO','Contrato gerado inv\u00E1lido.');\n const cert=options.certificado;\n if(cert!==undefined && (!plain(cert)||typeof cert.senha!=='string'||!!cert.pfx===!!cert.arquivo||cert.pfx!==undefined&&!(cert.pfx instanceof Uint8Array)||cert.arquivo!==undefined&&(typeof cert.arquivo!=='string'||!cert.arquivo))) throw fail('CERTIFICADO_INVALIDO','Informe A1 em pfx ou arquivo e sua senha.',undefined,false,{campo:'certificado'});\n if(options.csc!==undefined && (!plain(options.csc)||typeof options.csc.id!=='string'||!/^\\d{1,6}$/.test(options.csc.id)||typeof options.csc.valor!=='string'||!options.csc.valor||options.csc.valor.length>256)) throw fail('CSC_INVALIDO','CSC inv\u00E1lido.',undefined,false,{campo:'csc'});\n if(options.runtimeDirectory!==undefined&&(typeof options.runtimeDirectory!=='string'||!options.runtimeDirectory))throw configFail('runtimeDirectory');\n if(options.validaDocumento!==undefined&&typeof options.validaDocumento!=='function'||options.criaProcesso!==undefined&&typeof options.criaProcesso!=='function')throw configFail();\n const cfg:Omit<ConfiguracaoEmissor, 'certificado'>={cnpj:options.cnpj,uf:options.uf,modelo:options.modelo,ambiente:options.ambiente,csc:options.csc?{...options.csc}:undefined};\n const certificate=cert?{...cert,pfx:cert.pfx?Buffer.from(cert.pfx):undefined}:undefined;\n const contract={...options.contrato};\n const timeout=options.timeoutMs??120_000, capacity=options.limiteFila??32, bytesLimit=options.limiteBytes??MAX_BYTES;\n if(!Number.isInteger(timeout)||timeout<1||timeout>120000)throw configFail('timeoutMs');\n if(!Number.isInteger(capacity)||capacity<0||capacity>1000)throw configFail('limiteFila');\n if(!Number.isInteger(bytesLimit)||bytesLimit<256||bytesLimit>MAX_BYTES)throw configFail('limiteBytes');\n const launch:Launch=options.criaProcesso??((exe,args,config)=>spawn(exe,args,{...config,stdio:['pipe','pipe','pipe']}));\n let runtimePromise:ReturnType<typeof resolveRuntime>|undefined, closed=false, teardownFailed=false, current:{stop:()=>void;done:Promise<void>}|undefined;\n const queue:Pending[]=[];\n const closedError=()=>{const error=fail('EMISSOR_FECHADO','Emissor encerrado.');if(teardownFailed)error.anotarFalhaLimpeza();return error;};\n const rejectQueue=()=>{for(const item of queue.splice(0)){item.signal?.removeEventListener('abort',item.abort!);item.bytes.fill(0);item.reject(closedError());}};\n async function execute(item:Pending):Promise<ResultadoFiscal> {\n if(closed||item.signal?.aborted) throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\n const runtime=await (runtimePromise??=resolveRuntime(options.runtimeDirectory,contract));\n if(closed||item.signal?.aborted) throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\n return await new Promise<ResultadoFiscal>((done,rejectExecution)=>{\n let stopError:ErroAcbrNode|undefined; let child:ChildProcessWithoutNullStreams|undefined, finished=false, started=false, sending=false, total=0, rest=Buffer.alloc(0), result:ResultadoFiscal|undefined;\n let teardownTimer:ReturnType<typeof setTimeout>|undefined;\n let finishCurrent!:()=>void; const doneCurrent=new Promise<void>(r=>{finishCurrent=r;});\n const uncertain=()=>['transmitir','cancelar','cartaCorrecao','inutilizar'].includes(item.req.comando)&&started || sending;\n const finish=(error?:unknown)=>{\n if(finished)return; finished=true;clearTimeout(timer);clearTimeout(teardownTimer);item.signal?.removeEventListener('abort',abort);\n item.bytes.fill(0);if(current?.done===doneCurrent)current=undefined;finishCurrent();error?rejectExecution(error):done(result!);\n };\n const detachOwnedChild=()=>{\n // Somente os handles retornados por este launch; nunca enumera ou encerra processos alheios.\n for(const pipe of [child?.stdin,child?.stdout,child?.stderr]){\n try{pipe?.destroy();}catch{}\n try{(pipe as {unref?:()=>void}|undefined)?.unref?.();}catch{}\n }\n try{child?.unref();}catch{}\n };\n const teardownFallback=()=>{\n if(finished)return;\n stopError??=fail('FALHA_MOTOR','O motor n\u00E3o foi encerrado.',item.req,uncertain());\n stopError.anotarFalhaLimpeza();teardownFailed=true;closed=true;\n rejectQueue();certificate?.pfx?.fill(0);\n // Finaliza antes de destroy/unref: esses m\u00E9todos podem disparar eventos s\u00EDncronos.\n finish(stopError);detachOwnedChild();\n };\n const stop=(code:string,message:string)=>{\n if(finished||stopError)return;\n stopError=fail(code,message,item.req,uncertain());\n if(!child?.pid){finish(stopError);detachOwnedChild();return;}\n teardownTimer=setTimeout(teardownFallback,MAX_TEARDOWN_MS);\n try{if(child.kill('SIGKILL')!==true)teardownFallback();}catch{teardownFallback();}\n };\n const abort=()=>stop('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada; confira a situa\u00E7\u00E3o fiscal quando o envio foi iniciado.');\n const timer=setTimeout(()=>stop('TIMEOUT_MOTOR','O motor excedeu o prazo; consulte a situa\u00E7\u00E3o antes de transmitir novamente.'),timeout);\n current={stop:()=>stop('EMISSOR_FECHADO','Emissor encerrado.'),done:doneCurrent};\n const env:NodeJS.ProcessEnv={};\n for(const key of ['PATH','Path','SystemRoot','WINDIR','TEMP','TMP','HOME','LANG','LC_ALL']) if(process.env[key]!==undefined)env[key]=process.env[key];\n if(process.platform==='linux')env.LD_LIBRARY_PATH=path.join(runtime.directory,'lib');\n if(process.platform==='win32'){const inheritedPath=env.Path??env.PATH??'';delete env.Path;env.PATH=path.join(runtime.directory,'lib')+';'+runtime.directory+';'+inheritedPath;}\n const modules=path.join(runtime.directory,'ossl-modules'); env.OPENSSL_MODULES=modules; env.OPENSSL_CONF=path.join(runtime.directory,'openssl.cnf');\n try { child=launch(runtime.executable,['--parent-pid',String(process.pid)],{cwd:runtime.directory,env,windowsHide:true,shell:false,stdio:['pipe','pipe','pipe']}); started=typeof child.pid==='number'; }\n catch { finish(fail('FALHA_INICIAR_MOTOR','N\u00E3o foi poss\u00EDvel iniciar o motor.',item.req)); return; }\n item.signal?.addEventListener('abort',abort,{once:true});\n child.on('spawn',()=>{started=true;});\n child.on('error',()=>{if(finished)return;if(stopError){teardownFallback();return;}stop('FALHA_INICIAR_MOTOR','N\u00E3o foi poss\u00EDvel iniciar o motor.');});\n child.stdin.on('error',()=>stop('FALHA_PIPE','N\u00E3o foi poss\u00EDvel comunicar com o motor.'));\n child.stdout.on('error',()=>stop('FALHA_PIPE','N\u00E3o foi poss\u00EDvel comunicar com o motor.'));\n child.stderr.on('error',()=>stop('FALHA_PIPE','N\u00E3o foi poss\u00EDvel comunicar com o motor.'));\n child.stderr.on('data',()=>{}); // stderr bruto nunca \u00E9 exposto: pode conter mensagens de depend\u00EAncias.\n child.stdout.on('data',(chunk:Buffer)=>{\n if(finished||stopError)return;total+=chunk.length;if(total>bytesLimit){stop('RESPOSTA_EXCESSIVA','Resposta do motor excede o limite.');return;}\n rest=Buffer.concat([rest,chunk]);let end:number;\n while((end=rest.indexOf(10))>=0) {\n const line=rest.subarray(0,end);rest=rest.subarray(end+1);if(!line.length)continue;\n try {\n const frame=JSON.parse(new TextDecoder('utf-8',{fatal:true}).decode(line));\n if(!plain(frame)||frame.id!==item.req.id)throw Error();\n if(frame.tipo==='envioIniciado'){sending=true;continue;}\n if(result||frame.versao!==1||frame.sourceRevision!==contract.sourceRevision||frame.contractHash!==contract.contractHash||typeof frame.sucesso!=='boolean'||!STATES.has(String(frame.estado)))throw Error();\n if(frame.xmlBase64!==undefined&&(typeof frame.xmlBase64!=='string'||!frame.xmlBase64.length||Buffer.from(frame.xmlBase64,'base64').toString('base64')!==frame.xmlBase64))throw Error();\n if(frame.cStat!==undefined&&(!Number.isInteger(frame.cStat)||Number(frame.cStat)<1||Number(frame.cStat)>9999))throw Error();\n if(frame.envioIniciado!==undefined&&typeof frame.envioIniciado!=='boolean'||sending&&frame.envioIniciado===false)throw Error();\n const fiscal=frame as unknown as ResultadoFiscal;\n result={...fiscal,diagnostico:diagnosticarResultado(sending?{...fiscal,envioIniciado:true}:fiscal,item.req.comando)};\n }catch{stop('RESPOSTA_INVALIDA','O motor retornou uma resposta inv\u00E1lida.');return;}\n }\n });\n child.on('close',(code)=>{\n if(finished)return;\n if(stopError){finish(stopError);return;}\n if(code!==0||rest.length||!result){finish(fail('FALHA_MOTOR','O motor encerrou sem resposta fiscal v\u00E1lida.',item.req,uncertain()));return;}\n finish();\n });\n child.stdin.end(item.bytes);\n if(item.signal?.aborted)abort();\n });\n }\n let busy=false;\n async function next(){if(busy)return;const item=queue.shift();if(!item)return;busy=true;item.signal?.removeEventListener('abort',item.abort!);try{const result=await execute(item);item.resolve(result);}catch(e){item.bytes.fill(0);item.reject(e);}finally{busy=false;void next();}}\n async function request(command:RequisicaoMotor['comando'],data:Partial<RequisicaoMotor>,operation:OpcoesOperacao={}):Promise<ResultadoFiscal> {\n const rawOperation:unknown=operation;\n if(!plain(rawOperation))throw fail('OPERACAO_INVALIDA','Informe op\u00E7\u00F5es v\u00E1lidas para a opera\u00E7\u00E3o.',undefined,false,{etapa:etapaDaOperacao(command),campo:'operacao'});\n const signal:unknown=operation.signal;\n if(signal!==undefined&&(!plain(signal)||typeof signal.aborted!=='boolean'||typeof signal.addEventListener!=='function'||typeof signal.removeEventListener!=='function'))throw fail('OPERACAO_INVALIDA','Informe op\u00E7\u00F5es v\u00E1lidas para a opera\u00E7\u00E3o.',undefined,false,{etapa:etapaDaOperacao(command),campo:'signal'});\n if(closed)throw closedError();\n if(operation.signal?.aborted)throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\n if(['assinar','transmitir','consultar','cancelar','cartaCorrecao','inutilizar'].includes(command)&&!certificate)throw fail('CERTIFICADO_AUSENTE','A opera\u00E7\u00E3o exige um certificado A1.');\n if(command==='gerarXml')options.validaDocumento?.(data.documento);\n const config:ConfiguracaoMotor={...cfg};\n if(certificate){let pfx:Buffer;try{pfx=certificate.pfx??await readFile(certificate.arquivo!);}catch{throw fail('CERTIFICADO_AUSENTE','N\u00E3o foi poss\u00EDvel ler o A1 configurado.');}if(pfx.length>2*1024*1024)throw fail('CERTIFICADO_EXCESSIVO','Certificado excede o limite.');config.certificado={pfxBase64:pfx.toString('base64'),senha:certificate.senha};}\n let bytes:Buffer, req:RequisicaoMotor;\n try{bytes=Buffer.from(JSON.stringify({versao:1,id:randomUUID(),...contract,comando:command,config,...data})+'\\n','utf8');if(bytes.length>bytesLimit)throw Error();req=JSON.parse(bytes.toString('utf8'));}catch{throw fail('REQUISICAO_INVALIDA','Dados da opera\u00E7\u00E3o inv\u00E1lidos ou acima do limite.');}\n return new Promise((resolve,reject)=>{\n if(closed){bytes.fill(0);reject(closedError());return;}\n if(busy&&queue.length>=capacity){bytes.fill(0);reject(fail('FILA_CHEIA','A fila fiscal est\u00E1 cheia.'));return;}\n const item:Pending={req,bytes,signal:operation.signal,resolve,reject};\n item.abort=()=>{const i=queue.indexOf(item);if(i>=0){queue.splice(i,1);bytes.fill(0);operation.signal?.removeEventListener('abort',item.abort!);reject(fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.'));}};\n operation.signal?.addEventListener('abort',item.abort,{once:true});queue.push(item);if(operation.signal?.aborted)item.abort();void next();\n });\n }\n const xmlData=(xml:string)=>{if(typeof xml!=='string'||!xml.trim()||Buffer.byteLength(xml,'utf8')>2*1024*1024)throw fail('XML_INVALIDO','XML vazio ou acima do limite.',undefined,false,{campo:'xml'});return {xmlBase64:Buffer.from(xml,'utf8').toString('base64')};};\n const checkKey=(key:string)=>{if(typeof key!=='string'||!/^\\d{44}$/.test(key))throw fail('CHAVE_INVALIDA','Chave fiscal inv\u00E1lida.',undefined,false,{campo:'chave'});};\n const reason=(value:string)=>{if(typeof value!=='string'||value.length<15||value.length>255)throw fail('JUSTIFICATIVA_INVALIDA','Justificativa deve ter de 15 a 255 caracteres.',undefined,false,{campo:'justificativa'});};\n const checkObject=(data:unknown,campo:string)=>{if(!plain(data))throw fail('OPERACAO_INVALIDA','Informe os par\u00E2metros da opera\u00E7\u00E3o como objeto.',undefined,false,{campo});};\n return {\n gerarXml:(documento:object,op?:OpcoesOperacao)=>request('gerarXml',{documento},op),\n validar:(xml:string,op?:OpcoesOperacao)=>request('validar',xmlData(xml),op),\n assinar:(xml:string,op?:OpcoesOperacao)=>request('assinar',xmlData(xml),op),\n transmitir:(xml:string,op?:OpcoesOperacao)=>request('transmitir',xmlData(xml),op),\n consultar:(consulta:Consulta,op?:OpcoesOperacao)=>{checkObject(consulta,'consulta');checkKey(consulta.chave);if(consulta.recibo!==undefined&&(typeof consulta.recibo!=='string'||!/^\\d{15}$/.test(consulta.recibo)))throw fail('RECIBO_INVALIDO','Recibo inv\u00E1lido.',undefined,false,{campo:'recibo'});return request('consultar',consulta,op);},\n cancelar:(data:Cancelamento,op?:OpcoesOperacao)=>{checkObject(data,'cancelamento');checkKey(data.chave);reason(data.justificativa);if(typeof data.protocolo!=='string'||!/^\\d{15}$/.test(data.protocolo))throw fail('PROTOCOLO_INVALIDO','Protocolo inv\u00E1lido.',undefined,false,{campo:'protocolo'});return request('cancelar',data,op);},\n cartaCorrecao:(data:CartaCorrecao,op?:OpcoesOperacao)=>{checkObject(data,'cartaCorrecao');if(cfg.modelo!==55)throw fail('OPERACAO_NAO_SUPORTADA','Carta de corre\u00E7\u00E3o exige NF-e modelo 55.');checkKey(data.chave);if(typeof data.correcao!=='string'||data.correcao.length<15||data.correcao.length>1000||!Number.isInteger(data.sequenciaEvento??1)||(data.sequenciaEvento??1)<1||(data.sequenciaEvento??1)>20)throw fail('CORRECAO_INVALIDA','Dados da carta de corre\u00E7\u00E3o inv\u00E1lidos.',undefined,false,{campo:'cartaCorrecao'});return request('cartaCorrecao',{...data,sequenciaEvento:data.sequenciaEvento??1},op);},\n inutilizar:(data:Inutilizacao,op?:OpcoesOperacao)=>{checkObject(data,'inutilizacao');reason(data.justificativa);if(!Number.isInteger(data.ano)||data.ano<0||data.ano>99||!Number.isInteger(data.serie)||data.serie<0||data.serie>999||!Number.isInteger(data.numeroInicial)||data.numeroInicial<1||!Number.isInteger(data.numeroFinal)||data.numeroFinal<data.numeroInicial||data.numeroFinal>999999999)throw fail('INUTILIZACAO_INVALIDA','Faixa de inutiliza\u00E7\u00E3o inv\u00E1lida.',undefined,false,{campo:'inutilizacao'});return request('inutilizar',{inutilizacao:{ano:data.ano,serie:data.serie,numeroInicial:data.numeroInicial,numeroFinal:data.numeroFinal},justificativa:data.justificativa},op);},\n async fechar(){if(!closed){closed=true;rejectQueue();}const running=current;try{running?.stop();if(running)await running.done;}finally{certificate?.pfx?.fill(0);}}\n };\n}\nexport type Emissor = ReturnType<typeof criarEmissor>;\n", "import { ErroAcbrNode, type Comando, type DetalhesErroAcbr, type DiagnosticoAcbr, type EtapaAcbr, type ResultadoFiscal, type StatusEnvio } from './types.js';\n\nconst ETAPAS = new Set<EtapaAcbr>(['configuracao','documento','runtime','geracao','validacao','assinatura','transmissao','consulta','cancelamento','carta_correcao','inutilizacao','operacao','limpeza']);\nconst CAMPOS = new Set(['cnpj','uf','modelo','ambiente','contrato','certificado','certificado.senha','certificado.pfx','certificado.arquivo','csc','csc.id','csc.valor','timeoutMs','limiteFila','limiteBytes','runtimeDirectory','documento','xml','consulta','chave','recibo','cancelamento','protocolo','justificativa','cartaCorrecao','correcao','sequenciaEvento','inutilizacao','ano','serie','numeroInicial','numeroFinal','operacao','signal']);\nconst CATALOGO: Record<string, [EtapaAcbr, string, string]> = {\n CONFIGURACAO_INVALIDA: ['configuracao','A configura\u00E7\u00E3o cont\u00E9m um campo inv\u00E1lido.','Confira o campo indicado e seu tipo antes de continuar.'],\n CONTRATO_INVALIDO: ['configuracao','O contrato do cliente \u00E9 inv\u00E1lido.','Use o contrato gerado junto com o cliente.'],\n CERTIFICADO_INVALIDO: ['configuracao','O certificado A1 ou sua configura\u00E7\u00E3o \u00E9 inv\u00E1lido.','Confira formato e validade do A1, pfx ou arquivo e a senha digitada, sem registrar esses dados.'],\n CERTIFICADO_DIVERGENTE: ['assinatura','O certificado n\u00E3o corresponde \u00E0 raiz CNPJ do emitente.','Confira o CNPJ configurado e selecione o A1 correspondente ao emitente.'],\n DEPENDENCIA_AUSENTE: ['runtime','Uma depend\u00EAncia do motor fiscal n\u00E3o est\u00E1 dispon\u00EDvel.','Reinstale o runtime completo da plataforma; confira a disponibilidade do OpenSSL distribu\u00EDdo.'],\n SCHEMAS_AUSENTES: ['runtime','Os schemas fiscais n\u00E3o est\u00E3o dispon\u00EDveis.','Reinstale o runtime completo da plataforma.'],\n SERVICOS_AUSENTES: ['runtime','A configura\u00E7\u00E3o dos servi\u00E7os fiscais n\u00E3o est\u00E1 dispon\u00EDvel.','Reinstale o runtime completo da plataforma.'],\n CSC_AUSENTE: ['configuracao','A opera\u00E7\u00E3o de NFC-e exige CSC.','Informe id e valor do CSC na configura\u00E7\u00E3o sem registrar seu conte\u00FAdo.'],\n IDENTIDADE_DIVERGENTE: ['documento','A identidade fiscal n\u00E3o corresponde \u00E0 configura\u00E7\u00E3o ou ao retorno.','Confira emitente, UF, modelo, ambiente e chave do documento antes de continuar.'],\n XML_SCHEMA_INVALIDO: ['validacao','O XML n\u00E3o atende aos schemas fiscais.','Confira os campos obrigat\u00F3rios e os tributos; a valida\u00E7\u00E3o de XML assinado deve ocorrer ap\u00F3s a assinatura.'],\n ASSINATURA_INVALIDA: ['assinatura','A assinatura do XML n\u00E3o foi validada.','Confira o A1 correspondente e use o XML assinado sem altera\u00E7\u00F5es.'],\n XML_NAO_ASSINADO: ['assinatura','A opera\u00E7\u00E3o exige XML previamente assinado.','Conclua a assinatura e a valida\u00E7\u00E3o antes de transmitir.'],\n XML_ALTERADO: ['assinatura','O XML assinado foi alterado.','Use exatamente o XML assinado e persistido; n\u00E3o edite seu conte\u00FAdo.'],\n RETORNO_INVALIDO: ['transmissao','A identidade ou o protocolo do retorno fiscal \u00E9 inv\u00E1lido.','Consulte a situa\u00E7\u00E3o fiscal antes de decidir repetir a opera\u00E7\u00E3o.'],\n OPERACAO_FISCAL_FALHOU: ['operacao','O motor n\u00E3o conseguiu concluir a etapa fiscal.','Confira a configura\u00E7\u00E3o da etapa, os dados do XML e as depend\u00EAncias do runtime.'],\n TLS_SERVIDOR_INVALIDO: ['transmissao','A verifica\u00E7\u00E3o TLS do servi\u00E7o fiscal falhou.','Confira o servi\u00E7o e a cadeia de confian\u00E7a; mantenha a verifica\u00E7\u00E3o TLS habilitada.'],\n CSC_INVALIDO: ['configuracao','A configura\u00E7\u00E3o do CSC \u00E9 inv\u00E1lida.','Confira id e valor do CSC sem registrar seu conte\u00FAdo.'],\n PLATAFORMA_NAO_SUPORTADA: ['runtime','A plataforma n\u00E3o \u00E9 suportada.','Execute em Windows ou Linux x64 com Node.js 22.12 ou superior.'],\n RUNTIME_AUSENTE: ['runtime','O motor fiscal n\u00E3o foi encontrado.','Instale o runtime da plataforma incluindo depend\u00EAncias opcionais.'],\n RUNTIME_INVALIDO: ['runtime','O runtime fiscal \u00E9 inv\u00E1lido.','Use um runtime distribu\u00EDdo e compat\u00EDvel com a plataforma.'],\n RUNTIME_INCOMPLETO: ['runtime','Falta um arquivo do runtime fiscal.','Reinstale o runtime da plataforma.'],\n RUNTIME_ALTERADO: ['runtime','A integridade do runtime fiscal n\u00E3o foi confirmada.','Reinstale o runtime; n\u00E3o desative a verifica\u00E7\u00E3o dos hashes.'],\n CONTRATO_DIVERGENTE: ['runtime','Cliente e motor usam contratos diferentes.','Use vers\u00F5es compat\u00EDveis ou regenere e recompile ambos.'],\n DOCUMENTO_INVALIDO: ['documento','O documento cont\u00E9m dados incompat\u00EDveis com o modelo.','Valide os campos e tipos do documento antes de gerar o XML.'],\n OPERACAO_INVALIDA: ['operacao','Os par\u00E2metros da opera\u00E7\u00E3o s\u00E3o inv\u00E1lidos.','Informe um objeto com os campos exigidos pela opera\u00E7\u00E3o.'],\n OPERACAO_CANCELADA: ['operacao','A opera\u00E7\u00E3o foi cancelada.','Confira o estado do envio antes de decidir continuar.'],\n TIMEOUT_MOTOR: ['runtime','O motor excedeu o tempo de espera.','Confira o estado do envio antes de repetir a opera\u00E7\u00E3o.'],\n EMISSOR_FECHADO: ['operacao','O emissor foi encerrado.','Crie um novo emissor para continuar.'],\n FALHA_INICIAR_MOTOR: ['runtime','N\u00E3o foi poss\u00EDvel iniciar o motor fiscal.','Confira a instala\u00E7\u00E3o e as permiss\u00F5es de execu\u00E7\u00E3o do runtime.'],\n FALHA_PIPE: ['runtime','A comunica\u00E7\u00E3o com o motor foi interrompida.','Confira a instala\u00E7\u00E3o e o estado do envio antes de continuar.'],\n RESPOSTA_EXCESSIVA: ['runtime','A resposta do motor excedeu o limite.','Confira o tamanho da opera\u00E7\u00E3o e a vers\u00E3o do runtime.'],\n RESPOSTA_INVALIDA: ['runtime','O motor devolveu uma resposta inv\u00E1lida.','Confira a compatibilidade do runtime e o estado do envio.'],\n FALHA_MOTOR: ['runtime','O motor encerrou sem uma resposta fiscal v\u00E1lida.','Confira a instala\u00E7\u00E3o e o estado do envio antes de continuar.'],\n CERTIFICADO_AUSENTE: ['configuracao','O certificado A1 n\u00E3o est\u00E1 dispon\u00EDvel para esta opera\u00E7\u00E3o.','Configure um A1 acess\u00EDvel e sua senha sem registrar esses dados.'],\n CERTIFICADO_EXCESSIVO: ['configuracao','O certificado excede o limite de tamanho.','Use um arquivo A1 de at\u00E9 2 MiB.'],\n REQUISICAO_INVALIDA: ['operacao','Os dados n\u00E3o puderam ser serializados ou excedem o limite.','Use dados JSON e reduza o tamanho da opera\u00E7\u00E3o.'],\n FILA_CHEIA: ['operacao','A fila fiscal est\u00E1 cheia.','Aguarde a opera\u00E7\u00E3o atual terminar antes de iniciar outra.'],\n XML_INVALIDO: ['documento','O XML est\u00E1 vazio, tem tipo inv\u00E1lido ou excede o limite.','Informe o XML como texto UTF-8 de at\u00E9 2 MiB.'],\n CHAVE_INVALIDA: ['documento','A chave fiscal tem formato inv\u00E1lido.','Informe a chave como texto com 44 d\u00EDgitos.'],\n RECIBO_INVALIDO: ['documento','O recibo tem formato inv\u00E1lido.','Informe o recibo como texto com 15 d\u00EDgitos.'],\n JUSTIFICATIVA_INVALIDA: ['documento','A justificativa tem tamanho inv\u00E1lido.','Informe uma justificativa com 15 a 255 caracteres.'],\n PROTOCOLO_INVALIDO: ['documento','O protocolo tem formato inv\u00E1lido.','Informe o protocolo como texto com 15 d\u00EDgitos.'],\n OPERACAO_NAO_SUPORTADA: ['operacao','A opera\u00E7\u00E3o n\u00E3o \u00E9 suportada para este modelo.','Carta de corre\u00E7\u00E3o exige NF-e modelo 55.'],\n CORRECAO_INVALIDA: ['documento','Os dados da carta de corre\u00E7\u00E3o s\u00E3o inv\u00E1lidos.','Confira a corre\u00E7\u00E3o de 15 a 1000 caracteres e a sequ\u00EAncia de 1 a 20.'],\n INUTILIZACAO_INVALIDA: ['documento','A faixa de inutiliza\u00E7\u00E3o \u00E9 inv\u00E1lida.','Confira ano, s\u00E9rie e n\u00FAmeros inicial e final.'],\n FALHA_LOCAL: ['operacao','N\u00E3o foi poss\u00EDvel concluir a opera\u00E7\u00E3o local.','Confira a etapa e os tipos dos dados; n\u00E3o registre o erro bruto.']\n};\n\nexport function etapaDaOperacao(comando: Comando): EtapaAcbr {\n return ({gerarXml:'geracao',validar:'validacao',assinar:'assinatura',transmitir:'transmissao',consultar:'consulta',cancelar:'cancelamento',cartaCorrecao:'carta_correcao',inutilizar:'inutilizacao'} as const)[comando]??'operacao';\n}\n\n/** Apenas cat\u00E1logo e metadados conhecidos; nunca copia message, stack, stderr ou causa bruta. */\nexport function criarDiagnosticoErro(codigo: string, desconhecido = false, detalhes: DetalhesErroAcbr = {}): DiagnosticoAcbr {\n const safeCode = Object.hasOwn(CATALOGO, codigo) ? codigo : 'FALHA_LOCAL';\n const [defaultStage, mensagem, defaultAction] = CATALOGO[safeCode];\n const etapa = detalhes.etapa && ETAPAS.has(detalhes.etapa) ? detalhes.etapa : defaultStage;\n const campo = detalhes.campo && CAMPOS.has(detalhes.campo) ? detalhes.campo : undefined;\n const acoesConfig:Record<string,string>={cnpj:'Informe o CNPJ como texto com 14 d\u00EDgitos.',uf:'Informe a sigla da UF em letras mai\u00FAsculas, por exemplo PE.',modelo:'Informe o n\u00FAmero 55 para NF-e ou 65 para NFC-e, sem aspas.',ambiente:'Informe o n\u00FAmero 2 para homologa\u00E7\u00E3o ou 1 para produ\u00E7\u00E3o, sem aspas.',timeoutMs:'Informe um n\u00FAmero inteiro de 1 a 120000 milissegundos.',limiteFila:'Informe um n\u00FAmero inteiro de 0 a 1000.',limiteBytes:'Informe um n\u00FAmero inteiro de 256 a 8388608 bytes.',runtimeDirectory:'Informe o diret\u00F3rio do runtime como texto n\u00E3o vazio.'};\n const acao=safeCode==='CONFIGURACAO_INVALIDA'&&campo&&Object.hasOwn(acoesConfig,campo)?acoesConfig[campo]:defaultAction;\n const causa = Object.freeze({codigo:safeCode,etapa,...(campo ? {campo} : {})});\n return Object.freeze({codigo:safeCode,etapa,...(campo ? {campo} : {}),mensagem,\n acao:desconhecido ? 'Consulte a situa\u00E7\u00E3o fiscal antes de repetir. O envio pode ter ocorrido; n\u00E3o retransmita automaticamente.' : acao,\n statusEnvio:desconhecido ? 'resultado_incerto' : 'nao_enviado',causa});\n}\n\nexport function diagnosticarErro(erro: unknown): DiagnosticoAcbr {\n return erro instanceof ErroAcbrNode ? erro.diagnostico : criarDiagnosticoErro('FALHA_LOCAL',true);\n}\n\nexport function adicionarDiagnosticoLimpeza(diagnostico: DiagnosticoAcbr): DiagnosticoAcbr {\n const acao=diagnostico.statusEnvio==='resultado_incerto'\n ? 'Encerre esta aplica\u00E7\u00E3o antes de iniciar outro motor e consulte a situa\u00E7\u00E3o fiscal antes de repetir qualquer envio.'\n : 'Encerre esta aplica\u00E7\u00E3o antes de iniciar outro motor. As pr\u00F3ximas opera\u00E7\u00F5es deste emissor foram bloqueadas.';\n const limpeza=Object.freeze({codigo:'ENCERRAMENTO_MOTOR_NAO_CONFIRMADO' as const,etapa:'limpeza' as const,mensagem:'N\u00E3o foi poss\u00EDvel confirmar o encerramento do motor fiscal.',acao});\n return Object.freeze({...diagnostico,acao,limpeza});\n}\n\n/** Status refere-se \u00E0 opera\u00E7\u00E3o atual; uma etapa local n\u00E3o prova aus\u00EAncia de envios anteriores. */\nexport function diagnosticarResultado(resultado: ResultadoFiscal, comando: Comando): DiagnosticoAcbr {\n const etapa = etapaDaOperacao(comando);\n if(!resultado||typeof resultado!=='object')return criarDiagnosticoErro('FALHA_LOCAL',true,{etapa});\n if(resultado.envioIniciado!==undefined&&typeof resultado.envioIniciado!=='boolean')return criarDiagnosticoErro('RESPOSTA_INVALIDA',true,{etapa});\n let statusEnvio: StatusEnvio = 'resultado_incerto', codigo = 'RESULTADO_INCERTO';\n let mensagem = 'A situa\u00E7\u00E3o fiscal ainda n\u00E3o foi confirmada.';\n let acao = 'Consulte a situa\u00E7\u00E3o fiscal antes de repetir. N\u00E3o retransmita automaticamente.';\n const local=(comando==='gerarXml'&&resultado.estado==='XML_GERADO')||(comando==='validar'&&resultado.estado==='VALIDADO')||(comando==='assinar'&&resultado.estado==='ASSINADO');\n const semEvento=resultado.envioIniciado===false||resultado.envioIniciado===undefined;\n const protocolo=typeof resultado.protocolo==='string'&&/^\\d{15}$/.test(resultado.protocolo);\n const chave=typeof resultado.chave==='string'&&/^\\d{44}$/.test(resultado.chave);\n const autorizacao=(comando==='transmitir'||comando==='consultar')&&resultado.estado==='AUTORIZADO'&&[100,150].includes(resultado.cStat!)&&protocolo&&chave&&(comando==='consultar'||resultado.envioIniciado!==false);\n const evento=(comando==='cancelar'&&resultado.estado==='CANCELADO'&&[135,136].includes(resultado.cStat!)&&chave)||(comando==='cartaCorrecao'&&resultado.estado==='EVENTO_REGISTRADO'&&resultado.cStat===135&&chave)||(comando==='inutilizar'&&resultado.estado==='INUTILIZADO'&&resultado.cStat===102);\n if (local && resultado.sucesso===true && semEvento) {\n statusEnvio='nao_enviado';codigo='ETAPA_LOCAL_CONCLUIDA';mensagem='A etapa local foi conclu\u00EDda; esta opera\u00E7\u00E3o n\u00E3o transmitiu a nota.';acao='Confira o resultado antes de seguir para a pr\u00F3xima etapa.';\n } else if (resultado.sucesso===true && (autorizacao||evento&&protocolo&&resultado.envioIniciado!==false)) {\n statusEnvio='autorizado';codigo='OPERACAO_CONFIRMADA';\n mensagem=({AUTORIZADO:'A nota foi autorizada.',CANCELADO:'O cancelamento foi confirmado.',EVENTO_REGISTRADO:'O evento foi registrado.',INUTILIZADO:'A faixa foi inutilizada.'} as Record<string,string>)[resultado.estado];\n acao='Guarde o resultado fiscal. N\u00E3o repita esta opera\u00E7\u00E3o.';\n } else if (resultado.sucesso===false && (comando==='consultar'||resultado.envioIniciado!==false) && ['transmitir','consultar','cancelar','cartaCorrecao','inutilizar'].includes(comando) && Number.isInteger(resultado.cStat) && Number(resultado.cStat)>0 && Number(resultado.cStat)<=9999 && (resultado.estado==='DENEGADO'&&[110,301,302].includes(resultado.cStat!)||resultado.estado==='REJEITADO'&&![100,150,110,301,302,101,151,155,103,104,105,108,109,204,539,573,135,136,102,217].includes(resultado.cStat!))) {\n statusEnvio='rejeitado';codigo=resultado.estado==='DENEGADO'?'NOTA_DENEGADA':'OPERACAO_REJEITADA';\n mensagem=resultado.estado==='DENEGADO'?'A nota foi denegada.':'A opera\u00E7\u00E3o foi rejeitada.';\n acao=resultado.estado==='DENEGADO'?'Consulte a situa\u00E7\u00E3o fiscal e a orienta\u00E7\u00E3o respons\u00E1vel antes de usar a numera\u00E7\u00E3o.':'Confira o cStat e revise os dados antes de decidir uma nova tentativa.';\n } else if (resultado.estado==='ERRO' && resultado.envioIniciado===false) {\n if(typeof resultado.codigo==='string'&&Object.hasOwn(CATALOGO,resultado.codigo))return criarDiagnosticoErro(resultado.codigo,false,{etapa});\n statusEnvio='nao_enviado';codigo='FALHA_ANTES_ENVIO';mensagem='O motor informou falha antes de iniciar o envio desta opera\u00E7\u00E3o.';acao='Revise a configura\u00E7\u00E3o e os dados antes de continuar.';\n }\n const cStat=Number.isInteger(resultado.cStat)&&Number(resultado.cStat)>0&&Number(resultado.cStat)<=9999 ? resultado.cStat : undefined;\n return Object.freeze({codigo,etapa,mensagem,acao,statusEnvio,...(cStat!==undefined?{cStat}:{})});\n}\n", "export const PROTOCOL_VERSION = 1 as const;\nexport type Modelo = 55 | 65;\nexport type Ambiente = 1 | 2;\nexport type Comando = 'gerarXml' | 'validar' | 'assinar' | 'transmitir' | 'consultar' | 'cancelar' | 'cartaCorrecao' | 'inutilizar';\nexport interface Contrato { sourceRevision: number; contractHash: string }\nexport interface CertificadoA1 { pfx?: Uint8Array; arquivo?: string; senha: string }\nexport interface ConfiguracaoEmissor { cnpj: string; uf: string; modelo: Modelo; ambiente: Ambiente; certificado?: CertificadoA1; csc?: { id: string; valor: string } }\nexport interface ConfiguracaoMotor extends Omit<ConfiguracaoEmissor, 'certificado'> { certificado?: { pfxBase64: string; senha: string } }\nexport interface RequisicaoMotor extends Contrato {\n versao: 1; id: string; comando: Comando; config: ConfiguracaoMotor;\n documento?: object; xmlBase64?: string; chave?: string; recibo?: string;\n protocolo?: string; justificativa?: string; correcao?: string; sequenciaEvento?: number;\n inutilizacao?: { ano: number; serie: number; numeroInicial: number; numeroFinal: number };\n}\nexport type Estado = 'DENEGADO' | 'XML_GERADO' | 'VALIDADO' | 'ASSINADO' | 'AUTORIZADO' | 'REJEITADO' | 'PENDENTE' | 'INDETERMINADO' | 'CONSULTADO' | 'CANCELADO' | 'EVENTO_REGISTRADO' | 'INUTILIZADO' | 'ERRO';\nexport interface ResultadoFiscal extends Contrato {\n versao: 1; id: string; sucesso: boolean; estado: Estado; codigo?: string;\n cStat?: number; xMotivo?: string; chave?: string; protocolo?: string; recibo?: string;\n xmlBase64?: string; envioIniciado?: boolean;\n /** Resumo seguro para interfaces e logs; n\u00E3o cont\u00E9m XML, identidade fiscal ou xMotivo bruto. */\n diagnostico?: DiagnosticoAcbr;\n}\nexport interface RuntimeManifest extends Contrato {\n formatVersion: 1; platform: string; arch: string; executable: string; files: Record<string, string>;\n}\nexport interface OpcoesOperacao { signal?: AbortSignal }\nexport interface Consulta { chave: string; recibo?: string }\nexport interface Cancelamento { chave: string; protocolo: string; justificativa: string }\nexport interface CartaCorrecao { chave: string; correcao: string; sequenciaEvento?: number }\nexport interface Inutilizacao { ano: number; serie: number; numeroInicial: number; numeroFinal: number; justificativa: string }\nexport type StatusEnvio = 'nao_enviado' | 'rejeitado' | 'autorizado' | 'resultado_incerto';\nexport type EtapaAcbr = 'configuracao' | 'documento' | 'runtime' | 'geracao' | 'validacao' | 'assinatura' | 'transmissao' | 'consulta' | 'cancelamento' | 'carta_correcao' | 'inutilizacao' | 'operacao' | 'limpeza';\nexport interface DiagnosticoAcbr {\n readonly codigo: string; readonly etapa: EtapaAcbr; readonly campo?: string;\n readonly mensagem: string; readonly acao: string; readonly statusEnvio: StatusEnvio;\n readonly cStat?: number;\n readonly causa?: Readonly<{ codigo: string; etapa: EtapaAcbr; campo?: string }>;\n readonly limpeza?: Readonly<{codigo:'ENCERRAMENTO_MOTOR_NAO_CONFIRMADO';etapa:'limpeza';mensagem:string;acao:string}>;\n}\nexport interface DetalhesErroAcbr { etapa?: EtapaAcbr; campo?: string }\nexport class ErroAcbrNode extends Error {\n readonly name = 'ErroAcbrNode';\n #diagnostico: DiagnosticoAcbr;\n get diagnostico(): DiagnosticoAcbr { return this.#diagnostico; }\n constructor(readonly codigo: string, mensagem: string, readonly resultadoDesconhecido = false, readonly xmlBase64?: string, detalhes?: DetalhesErroAcbr) {\n super(mensagem);\n this.#diagnostico = criarDiagnosticoErro(codigo, resultadoDesconhecido, detalhes);\n // Recupera\u00E7\u00E3o permanece dispon\u00EDvel por acesso expl\u00EDcito, sem vazar XML em console/JSON.\n Object.defineProperty(this, 'xmlBase64', { value: xmlBase64, enumerable: false });\n Object.defineProperty(this, 'cause', { value: this.diagnostico.causa, enumerable: false });\n }\n /** Acrescenta apenas o aviso est\u00E1tico de limpeza, preservando o erro da opera\u00E7\u00E3o. */\n anotarFalhaLimpeza(): void { this.#diagnostico = adicionarDiagnosticoLimpeza(this.#diagnostico); }\n toJSON(): DiagnosticoAcbr { return this.diagnostico; }\n}\nimport { criarDiagnosticoErro, adicionarDiagnosticoLimpeza } from './diagnostics.js';\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { spawn, type ChildProcessWithoutNullStreams, type SpawnOptionsWithoutStdio } from 'node:child_process';\r\nimport { readFile, stat } from 'node:fs/promises';\r\nimport path from 'node:path';\r\nimport { createRequire } from 'node:module';\r\nimport { createHash, randomUUID } from 'node:crypto';\r\nimport { TextDecoder } from 'node:util';\r\nimport { ErroAcbrNode, type DetalhesErroAcbr, type ConfiguracaoEmissor, type Contrato, type ConfiguracaoMotor, type RequisicaoMotor, type ResultadoFiscal, type RuntimeManifest, type OpcoesOperacao, type Consulta, type Cancelamento, type CartaCorrecao, type Inutilizacao } from './types.js';\r\nimport { diagnosticarResultado, etapaDaOperacao, base64XmlRecuperadoValido } from './diagnostics.js';\r\nexport * from './types.js';\r\nexport { diagnosticarErro, diagnosticarResultado } from './diagnostics.js';\r\ntype Launch = (exe: string, args: string[], config: SpawnOptionsWithoutStdio) => ChildProcessWithoutNullStreams;\r\nexport interface OpcoesEmissor extends ConfiguracaoEmissor {\r\n contrato: Contrato; runtimeDirectory?: string; timeoutMs?: number; limiteFila?: number; limiteBytes?: number;\r\n validaDocumento?: (documento: unknown) => void;\r\n /** Inje\u00E7\u00E3o para testes offline. O padr\u00E3o sempre inicia o motor distribu\u00EDdo. */\r\n criaProcesso?: Launch;\r\n}\r\nconst STATES = new Set(['DENEGADO','XML_GERADO','VALIDADO','ASSINADO','XML_RECUPERADO','AUTORIZADO','REJEITADO','PENDENTE','INDETERMINADO','CONSULTADO','CANCELADO','EVENTO_REGISTRADO','INUTILIZADO','ERRO']);\r\nconst UFS = new Set('AC AL AP AM BA CE DF ES GO MA MT MS MG PA PB PR PE PI RJ RN RS RO RR SC SP SE TO'.split(' '));\r\nconst MAX_BYTES = 8 * 1024 * 1024;\r\nconst MAX_TEARDOWN_MS = 1000;\r\nconst plain = (v: unknown): v is Record<string,unknown> => v !== null && typeof v === 'object' && !Array.isArray(v);\r\nconst validContract = (v: unknown): v is Contrato => plain(v) && Number.isInteger(v.sourceRevision) && Number(v.sourceRevision)>0 && typeof v.contractHash==='string' && /^[a-f0-9]{64}$/.test(v.contractHash);\r\nconst fail = (code: string, message: string, req?: RequisicaoMotor, unknown=false, detalhes?:DetalhesErroAcbr) => new ErroAcbrNode(code,message,unknown,req?.comando==='transmitir'?req.xmlBase64:undefined,{...(req?{etapa:etapaDaOperacao(req.comando)}:{}),...detalhes});\r\nfunction confined(root: string, relative: string): string {\r\n const file=path.resolve(root,relative), part=path.relative(root,file);\r\n if(!relative || path.isAbsolute(relative) || part==='..' || part.startsWith('..'+path.sep)) throw fail('RUNTIME_INVALIDO','Caminho inv\u00E1lido no runtime.');\r\n return file;\r\n}\r\nasync function resolveRuntime(directory: string | undefined, contract: Contrato): Promise<{directory:string;executable:string;capabilities:ReadonlySet<string>}> {\r\n if(!validContract(contract)) throw fail('CONTRATO_INVALIDO','Contrato gerado inv\u00E1lido.');\r\n let root=directory;\r\n if(!root) {\r\n if(!['linux','win32'].includes(process.platform) || process.arch!=='x64') throw fail('PLATAFORMA_NAO_SUPORTADA','Esta vers\u00E3o exige Linux ou Windows x64.');\r\n try { const require=createRequire(typeof __filename!=='undefined'?__filename:import.meta.url); root=path.join(path.dirname(require.resolve('cosmemilton-acbr-node-'+process.platform+'-x64/package.json')),'runtime'); }\r\n catch { throw fail('RUNTIME_AUSENTE','Instale o pacote de runtime da plataforma ou informe runtimeDirectory.'); }\r\n }\r\n root=path.resolve(root);\r\n let m: RuntimeManifest;\r\n try { m=JSON.parse(await readFile(path.join(root,'manifest.json'),'utf8')); } catch { throw fail('RUNTIME_AUSENTE','Manifesto do runtime n\u00E3o encontrado.'); }\r\n if(!validContract(m) || m.formatVersion!==1 || !plain(m.files) || typeof m.executable!=='string' || m.platform!==process.platform || m.arch!==process.arch) throw fail('RUNTIME_INVALIDO','Manifesto ou plataforma do runtime inv\u00E1lidos.');\r\n if(m.capabilities!==undefined&&(!Array.isArray(m.capabilities)||!m.capabilities.every(value=>typeof value==='string'&&/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(value))))throw fail('RUNTIME_INVALIDO','Capacidades do runtime inv\u00E1lidas.');\r\n if(m.sourceRevision!==contract.sourceRevision || m.contractHash!==contract.contractHash) throw fail('CONTRATO_DIVERGENTE','Cliente e motor foram gerados de contratos diferentes; regenere e recompile.');\r\n for(const [name,hash] of Object.entries(m.files)) {\r\n if(typeof hash!=='string'||!/^[a-f0-9]{64}$/.test(hash)) throw fail('RUNTIME_INVALIDO','Hash inv\u00E1lido no runtime.');\r\n const file=confined(root,name); let data:Buffer;\r\n try { if(!(await stat(file)).isFile()) throw Error(); data=await readFile(file); } catch { throw fail('RUNTIME_INCOMPLETO','Arquivo do runtime ausente.'); }\r\n if(createHash('sha256').update(data).digest('hex')!==hash) throw fail('RUNTIME_ALTERADO','O runtime n\u00E3o corresponde ao manifesto distribu\u00EDdo.');\r\n }\r\n if(!m.files[m.executable]) throw fail('RUNTIME_INVALIDO','O execut\u00E1vel n\u00E3o consta no invent\u00E1rio.');\r\n return {directory:root,executable:confined(root,m.executable),capabilities:new Set(m.capabilities??[])};\r\n}\r\ninterface Pending { req:RequisicaoMotor; bytes:Buffer; signal?:AbortSignal; resolve:(v:ResultadoFiscal)=>void; reject:(e:unknown)=>void; abort?:()=>void }\r\nexport function criarEmissor(options: OpcoesEmissor) {\r\n const configFail=(campo?:string)=>fail('CONFIGURACAO_INVALIDA','Informe campos e tipos v\u00E1lidos na configura\u00E7\u00E3o.',undefined,false,{etapa:'configuracao',campo});\r\n if(!plain(options))throw configFail();\r\n if(typeof options.cnpj!=='string'||!/^\\d{14}$/.test(options.cnpj))throw configFail('cnpj');\r\n if(typeof options.uf!=='string'||!UFS.has(options.uf))throw configFail('uf');\r\n if(![55,65].includes(options.modelo))throw configFail('modelo');\r\n if(![1,2].includes(options.ambiente))throw configFail('ambiente');\r\n if(!validContract(options.contrato)) throw fail('CONTRATO_INVALIDO','Contrato gerado inv\u00E1lido.');\r\n const cert=options.certificado;\r\n if(cert!==undefined && (!plain(cert)||typeof cert.senha!=='string'||!!cert.pfx===!!cert.arquivo||cert.pfx!==undefined&&!(cert.pfx instanceof Uint8Array)||cert.arquivo!==undefined&&(typeof cert.arquivo!=='string'||!cert.arquivo))) throw fail('CERTIFICADO_INVALIDO','Informe A1 em pfx ou arquivo e sua senha.',undefined,false,{campo:'certificado'});\r\n if(options.csc!==undefined && (!plain(options.csc)||typeof options.csc.id!=='string'||!/^\\d{1,6}$/.test(options.csc.id)||typeof options.csc.valor!=='string'||!options.csc.valor||options.csc.valor.length>256)) throw fail('CSC_INVALIDO','CSC inv\u00E1lido.',undefined,false,{campo:'csc'});\r\n if(options.runtimeDirectory!==undefined&&(typeof options.runtimeDirectory!=='string'||!options.runtimeDirectory))throw configFail('runtimeDirectory');\r\n if(options.validaDocumento!==undefined&&typeof options.validaDocumento!=='function'||options.criaProcesso!==undefined&&typeof options.criaProcesso!=='function')throw configFail();\r\n const cfg:Omit<ConfiguracaoEmissor, 'certificado'>={cnpj:options.cnpj,uf:options.uf,modelo:options.modelo,ambiente:options.ambiente,csc:options.csc?{...options.csc}:undefined};\r\n const certificate=cert?{...cert,pfx:cert.pfx?Buffer.from(cert.pfx):undefined}:undefined;\r\n const contract={sourceRevision:options.contrato.sourceRevision,contractHash:options.contrato.contractHash};\r\n const timeout=options.timeoutMs??120_000, capacity=options.limiteFila??32, bytesLimit=options.limiteBytes??MAX_BYTES;\r\n if(!Number.isInteger(timeout)||timeout<1||timeout>120000)throw configFail('timeoutMs');\r\n if(!Number.isInteger(capacity)||capacity<0||capacity>1000)throw configFail('limiteFila');\r\n if(!Number.isInteger(bytesLimit)||bytesLimit<256||bytesLimit>MAX_BYTES)throw configFail('limiteBytes');\r\n const launch:Launch=options.criaProcesso??((exe,args,config)=>spawn(exe,args,{...config,stdio:['pipe','pipe','pipe']}));\r\n let runtimePromise:ReturnType<typeof resolveRuntime>|undefined, closed=false, teardownFailed=false, current:{stop:()=>void;done:Promise<void>}|undefined;\r\n const queue:Pending[]=[];\r\n const closedError=()=>{const error=fail('EMISSOR_FECHADO','Emissor encerrado.');if(teardownFailed)error.anotarFalhaLimpeza();return error;};\r\n const rejectQueue=()=>{for(const item of queue.splice(0)){item.signal?.removeEventListener('abort',item.abort!);item.bytes.fill(0);item.reject(closedError());}};\r\n async function execute(item:Pending):Promise<ResultadoFiscal> {\r\n if(closed||item.signal?.aborted) throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\r\n const runtime=await (runtimePromise??=resolveRuntime(options.runtimeDirectory,contract));\r\n if(item.req.comando==='recuperarXml'&&!runtime.capabilities.has('recuperarXml'))throw fail('RUNTIME_SEM_CAPACIDADE','O runtime n\u00E3o oferece recupera\u00E7\u00E3o de XML; atualize o pacote e o runtime compat\u00EDvel.',item.req,false,{etapa:'runtime'});\r\n if(closed||item.signal?.aborted) throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\r\n return await new Promise<ResultadoFiscal>((done,rejectExecution)=>{\r\n let stopError:ErroAcbrNode|undefined; let child:ChildProcessWithoutNullStreams|undefined, finished=false, started=false, sending=false, total=0, rest=Buffer.alloc(0), result:ResultadoFiscal|undefined;\r\n let teardownTimer:ReturnType<typeof setTimeout>|undefined;\r\n let finishCurrent!:()=>void; const doneCurrent=new Promise<void>(r=>{finishCurrent=r;});\r\n const uncertain=()=>['transmitir','cancelar','cartaCorrecao','inutilizar'].includes(item.req.comando)&&started || sending;\r\n const finish=(error?:unknown)=>{\r\n if(finished)return; finished=true;clearTimeout(timer);clearTimeout(teardownTimer);item.signal?.removeEventListener('abort',abort);\r\n item.bytes.fill(0);if(current?.done===doneCurrent)current=undefined;finishCurrent();error?rejectExecution(error):done(result!);\r\n };\r\n const detachOwnedChild=()=>{\r\n // Somente os handles retornados por este launch; nunca enumera ou encerra processos alheios.\r\n for(const pipe of [child?.stdin,child?.stdout,child?.stderr]){\r\n try{pipe?.destroy();}catch{}\r\n try{(pipe as {unref?:()=>void}|undefined)?.unref?.();}catch{}\r\n }\r\n try{child?.unref();}catch{}\r\n };\r\n const teardownFallback=()=>{\r\n if(finished)return;\r\n stopError??=fail('FALHA_MOTOR','O motor n\u00E3o foi encerrado.',item.req,uncertain());\r\n stopError.anotarFalhaLimpeza();teardownFailed=true;closed=true;\r\n rejectQueue();certificate?.pfx?.fill(0);\r\n // Finaliza antes de destroy/unref: esses m\u00E9todos podem disparar eventos s\u00EDncronos.\r\n finish(stopError);detachOwnedChild();\r\n };\r\n const stop=(code:string,message:string)=>{\r\n if(finished||stopError)return;\r\n stopError=fail(code,message,item.req,uncertain());\r\n if(!child?.pid){finish(stopError);detachOwnedChild();return;}\r\n teardownTimer=setTimeout(teardownFallback,MAX_TEARDOWN_MS);\r\n try{if(child.kill('SIGKILL')!==true)teardownFallback();}catch{teardownFallback();}\r\n };\r\n const abort=()=>stop('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada; confira a situa\u00E7\u00E3o fiscal quando o envio foi iniciado.');\r\n const timer=setTimeout(()=>stop('TIMEOUT_MOTOR','O motor excedeu o prazo; consulte a situa\u00E7\u00E3o antes de transmitir novamente.'),timeout);\r\n current={stop:()=>stop('EMISSOR_FECHADO','Emissor encerrado.'),done:doneCurrent};\r\n const env:NodeJS.ProcessEnv={};\r\n for(const key of ['PATH','Path','SystemRoot','WINDIR','TEMP','TMP','HOME','LANG','LC_ALL']) if(process.env[key]!==undefined)env[key]=process.env[key];\r\n if(process.platform==='linux')env.LD_LIBRARY_PATH=path.join(runtime.directory,'lib');\r\n if(process.platform==='win32'){const inheritedPath=env.Path??env.PATH??'';delete env.Path;env.PATH=path.join(runtime.directory,'lib')+';'+runtime.directory+';'+inheritedPath;}\r\n const modules=path.join(runtime.directory,'ossl-modules'); env.OPENSSL_MODULES=modules; env.OPENSSL_CONF=path.join(runtime.directory,'openssl.cnf');\r\n try { child=launch(runtime.executable,['--parent-pid',String(process.pid)],{cwd:runtime.directory,env,windowsHide:true,shell:false,stdio:['pipe','pipe','pipe']}); started=typeof child.pid==='number'; }\r\n catch { finish(fail('FALHA_INICIAR_MOTOR','N\u00E3o foi poss\u00EDvel iniciar o motor.',item.req)); return; }\r\n item.signal?.addEventListener('abort',abort,{once:true});\r\n child.on('spawn',()=>{started=true;});\r\n child.on('error',()=>{if(finished)return;if(stopError){teardownFallback();return;}stop('FALHA_INICIAR_MOTOR','N\u00E3o foi poss\u00EDvel iniciar o motor.');});\r\n child.stdin.on('error',()=>stop('FALHA_PIPE','N\u00E3o foi poss\u00EDvel comunicar com o motor.'));\r\n child.stdout.on('error',()=>stop('FALHA_PIPE','N\u00E3o foi poss\u00EDvel comunicar com o motor.'));\r\n child.stderr.on('error',()=>stop('FALHA_PIPE','N\u00E3o foi poss\u00EDvel comunicar com o motor.'));\r\n child.stderr.on('data',()=>{}); // stderr bruto nunca \u00E9 exposto: pode conter mensagens de depend\u00EAncias.\r\n child.stdout.on('data',(chunk:Buffer)=>{\r\n if(finished||stopError)return;total+=chunk.length;if(total>bytesLimit){stop('RESPOSTA_EXCESSIVA','Resposta do motor excede o limite.');return;}\r\n rest=Buffer.concat([rest,chunk]);let end:number;\r\n while((end=rest.indexOf(10))>=0) {\r\n const line=rest.subarray(0,end);rest=rest.subarray(end+1);if(!line.length)continue;\r\n try {\r\n const frame=JSON.parse(new TextDecoder('utf-8',{fatal:true}).decode(line));\r\n if(!plain(frame)||frame.id!==item.req.id)throw Error();\r\n if(frame.tipo==='envioIniciado'){sending=true;continue;}\r\n if(result||frame.versao!==1||frame.sourceRevision!==contract.sourceRevision||frame.contractHash!==contract.contractHash||typeof frame.sucesso!=='boolean'||!STATES.has(String(frame.estado)))throw Error();\r\n if(frame.xmlBase64!==undefined&&(item.req.comando==='recuperarXml'?!base64XmlRecuperadoValido(frame.xmlBase64):typeof frame.xmlBase64!=='string'||!frame.xmlBase64.length||Buffer.from(frame.xmlBase64,'base64').toString('base64')!==frame.xmlBase64))throw Error();\r\n if(frame.cStat!==undefined&&(!Number.isInteger(frame.cStat)||Number(frame.cStat)<1||Number(frame.cStat)>9999))throw Error();\r\n if(frame.envioIniciado!==undefined&&typeof frame.envioIniciado!=='boolean'||sending&&frame.envioIniciado===false)throw Error();\r\n if(frame.estado==='XML_RECUPERADO'&&item.req.comando!=='recuperarXml')throw Error();\r\n if(item.req.comando==='recuperarXml'&&(frame.sucesso===true||frame.estado==='XML_RECUPERADO')&&(frame.sucesso!==true||frame.estado!=='XML_RECUPERADO'||frame.cStat!==100||typeof frame.chave!=='string'||!/^\\d{44}$/.test(frame.chave)||typeof frame.protocolo!=='string'||!/^\\d{15}$/.test(frame.protocolo)||typeof frame.xmlBase64!=='string'||frame.envioIniciado===true||sending))throw Error();\r\n const fiscal=frame as unknown as ResultadoFiscal;\r\n result={...fiscal,diagnostico:diagnosticarResultado(sending?{...fiscal,envioIniciado:true}:fiscal,item.req.comando)};\r\n }catch{stop('RESPOSTA_INVALIDA','O motor retornou uma resposta inv\u00E1lida.');return;}\r\n }\r\n });\r\n child.on('close',(code)=>{\r\n if(finished)return;\r\n if(stopError){finish(stopError);return;}\r\n if(code!==0||rest.length||!result){finish(fail('FALHA_MOTOR','O motor encerrou sem resposta fiscal v\u00E1lida.',item.req,uncertain()));return;}\r\n finish();\r\n });\r\n child.stdin.end(item.bytes);\r\n if(item.signal?.aborted)abort();\r\n });\r\n }\r\n let busy=false;\r\n async function next(){if(busy)return;const item=queue.shift();if(!item)return;busy=true;item.signal?.removeEventListener('abort',item.abort!);try{const result=await execute(item);item.resolve(result);}catch(e){item.bytes.fill(0);item.reject(e);}finally{busy=false;void next();}}\r\n async function request(command:RequisicaoMotor['comando'],data:Partial<RequisicaoMotor>,operation:OpcoesOperacao={}):Promise<ResultadoFiscal> {\r\n const rawOperation:unknown=operation;\r\n if(!plain(rawOperation))throw fail('OPERACAO_INVALIDA','Informe op\u00E7\u00F5es v\u00E1lidas para a opera\u00E7\u00E3o.',undefined,false,{etapa:etapaDaOperacao(command),campo:'operacao'});\r\n const signal:unknown=operation.signal;\r\n if(signal!==undefined&&(!plain(signal)||typeof signal.aborted!=='boolean'||typeof signal.addEventListener!=='function'||typeof signal.removeEventListener!=='function'))throw fail('OPERACAO_INVALIDA','Informe op\u00E7\u00F5es v\u00E1lidas para a opera\u00E7\u00E3o.',undefined,false,{etapa:etapaDaOperacao(command),campo:'signal'});\r\n if(closed)throw closedError();\r\n if(operation.signal?.aborted)throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\r\n if(['assinar','transmitir','consultar','recuperarXml','cancelar','cartaCorrecao','inutilizar'].includes(command)&&!certificate)throw fail('CERTIFICADO_AUSENTE','A opera\u00E7\u00E3o exige um certificado A1.',undefined,false,{etapa:etapaDaOperacao(command)});\r\n if(command==='gerarXml')options.validaDocumento?.(data.documento);\r\n const config:ConfiguracaoMotor={...cfg};\r\n if(certificate){let pfx:Buffer;try{pfx=certificate.pfx??await readFile(certificate.arquivo!);}catch{throw fail('CERTIFICADO_AUSENTE','N\u00E3o foi poss\u00EDvel ler o A1 configurado.');}if(pfx.length>2*1024*1024)throw fail('CERTIFICADO_EXCESSIVO','Certificado excede o limite.');config.certificado={pfxBase64:pfx.toString('base64'),senha:certificate.senha};}\r\n let bytes:Buffer, req:RequisicaoMotor;\r\n try{bytes=Buffer.from(JSON.stringify({...data,...contract,versao:1,id:randomUUID(),comando:command,config})+'\\n','utf8');if(bytes.length>bytesLimit)throw Error();req=JSON.parse(bytes.toString('utf8'));}catch{throw fail('REQUISICAO_INVALIDA','Dados da opera\u00E7\u00E3o inv\u00E1lidos ou acima do limite.');}\r\n return new Promise((resolve,reject)=>{\r\n if(closed){bytes.fill(0);reject(closedError());return;}\r\n if(busy&&queue.length>=capacity){bytes.fill(0);reject(fail('FILA_CHEIA','A fila fiscal est\u00E1 cheia.'));return;}\r\n const item:Pending={req,bytes,signal:operation.signal,resolve,reject};\r\n item.abort=()=>{const i=queue.indexOf(item);if(i>=0){queue.splice(i,1);bytes.fill(0);operation.signal?.removeEventListener('abort',item.abort!);reject(fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.'));}};\r\n operation.signal?.addEventListener('abort',item.abort,{once:true});queue.push(item);if(operation.signal?.aborted)item.abort();void next();\r\n });\r\n }\r\n const xmlData=(xml:string)=>{if(typeof xml!=='string'||!xml.trim()||Buffer.byteLength(xml,'utf8')>2*1024*1024)throw fail('XML_INVALIDO','XML vazio ou acima do limite.',undefined,false,{campo:'xml'});return {xmlBase64:Buffer.from(xml,'utf8').toString('base64')};};\r\n const checkKey=(key:string)=>{if(typeof key!=='string'||!/^\\d{44}$/.test(key))throw fail('CHAVE_INVALIDA','Chave fiscal inv\u00E1lida.',undefined,false,{campo:'chave'});};\r\n const reason=(value:string)=>{if(typeof value!=='string'||value.length<15||value.length>255)throw fail('JUSTIFICATIVA_INVALIDA','Justificativa deve ter de 15 a 255 caracteres.',undefined,false,{campo:'justificativa'});};\r\n const checkObject=(data:unknown,campo:string)=>{if(!plain(data))throw fail('OPERACAO_INVALIDA','Informe os par\u00E2metros da opera\u00E7\u00E3o como objeto.',undefined,false,{campo});};\r\n return {\r\n gerarXml:(documento:object,op?:OpcoesOperacao)=>request('gerarXml',{documento},op),\r\n validar:(xml:string,op?:OpcoesOperacao)=>request('validar',xmlData(xml),op),\r\n assinar:(xml:string,op?:OpcoesOperacao)=>request('assinar',xmlData(xml),op),\r\n transmitir:(xml:string,op?:OpcoesOperacao)=>request('transmitir',xmlData(xml),op),\r\n recuperarXml:(xmlAssinado:string,opcoes?:OpcoesOperacao)=>request('recuperarXml',xmlData(xmlAssinado),opcoes),\r\n consultar:(consulta:Consulta,op?:OpcoesOperacao)=>{checkObject(consulta,'consulta');checkKey(consulta.chave);if(consulta.recibo!==undefined&&(typeof consulta.recibo!=='string'||!/^\\d{15}$/.test(consulta.recibo)))throw fail('RECIBO_INVALIDO','Recibo inv\u00E1lido.',undefined,false,{campo:'recibo'});return request('consultar',{chave:consulta.chave,...(consulta.recibo!==undefined?{recibo:consulta.recibo}:{})},op);},\r\n cancelar:(data:Cancelamento,op?:OpcoesOperacao)=>{checkObject(data,'cancelamento');checkKey(data.chave);reason(data.justificativa);if(typeof data.protocolo!=='string'||!/^\\d{15}$/.test(data.protocolo))throw fail('PROTOCOLO_INVALIDO','Protocolo inv\u00E1lido.',undefined,false,{campo:'protocolo'});return request('cancelar',{chave:data.chave,protocolo:data.protocolo,justificativa:data.justificativa},op);},\r\n cartaCorrecao:(data:CartaCorrecao,op?:OpcoesOperacao)=>{checkObject(data,'cartaCorrecao');if(cfg.modelo!==55)throw fail('OPERACAO_NAO_SUPORTADA','Carta de corre\u00E7\u00E3o exige NF-e modelo 55.');checkKey(data.chave);if(typeof data.correcao!=='string'||data.correcao.length<15||data.correcao.length>1000||!Number.isInteger(data.sequenciaEvento??1)||(data.sequenciaEvento??1)<1||(data.sequenciaEvento??1)>20)throw fail('CORRECAO_INVALIDA','Dados da carta de corre\u00E7\u00E3o inv\u00E1lidos.',undefined,false,{campo:'cartaCorrecao'});return request('cartaCorrecao',{chave:data.chave,correcao:data.correcao,sequenciaEvento:data.sequenciaEvento??1},op);},\r\n inutilizar:(data:Inutilizacao,op?:OpcoesOperacao)=>{checkObject(data,'inutilizacao');reason(data.justificativa);if(!Number.isInteger(data.ano)||data.ano<0||data.ano>99||!Number.isInteger(data.serie)||data.serie<0||data.serie>999||!Number.isInteger(data.numeroInicial)||data.numeroInicial<1||!Number.isInteger(data.numeroFinal)||data.numeroFinal<data.numeroInicial||data.numeroFinal>999999999)throw fail('INUTILIZACAO_INVALIDA','Faixa de inutiliza\u00E7\u00E3o inv\u00E1lida.',undefined,false,{campo:'inutilizacao'});return request('inutilizar',{inutilizacao:{ano:data.ano,serie:data.serie,numeroInicial:data.numeroInicial,numeroFinal:data.numeroFinal},justificativa:data.justificativa},op);},\r\n async fechar(){if(!closed){closed=true;rejectQueue();}const running=current;try{running?.stop();if(running)await running.done;}finally{certificate?.pfx?.fill(0);}}\r\n };\r\n}\r\nexport type Emissor = ReturnType<typeof criarEmissor>;\r\n", "import { ErroAcbrNode, type Comando, type DetalhesErroAcbr, type DiagnosticoAcbr, type EtapaAcbr, type ResultadoFiscal, type StatusEnvio } from './types.js';\r\n\r\nconst ETAPAS = new Set<EtapaAcbr>(['configuracao','documento','runtime','geracao','validacao','assinatura','transmissao','consulta','cancelamento','carta_correcao','inutilizacao','operacao','limpeza']);\r\nconst CAMPOS = new Set(['cnpj','uf','modelo','ambiente','contrato','certificado','certificado.senha','certificado.pfx','certificado.arquivo','csc','csc.id','csc.valor','timeoutMs','limiteFila','limiteBytes','runtimeDirectory','documento','xml','consulta','chave','recibo','cancelamento','protocolo','justificativa','cartaCorrecao','correcao','sequenciaEvento','inutilizacao','ano','serie','numeroInicial','numeroFinal','operacao','signal']);\r\nconst MAX_RECOVERED_XML_BYTES = 4 * 1024 * 1024;\r\n/** Limite do envelope recuperado; a entrada assinada mant\u00E9m seu limite de 2 MiB. */\r\nexport function base64XmlRecuperadoValido(value: unknown): value is string {\r\n if(typeof value!=='string'||value.length===0||value.length>Math.ceil(MAX_RECOVERED_XML_BYTES/3)*4)return false;\r\n const bytes=Buffer.from(value,'base64');\r\n return bytes.length>0&&bytes.length<=MAX_RECOVERED_XML_BYTES&&bytes.toString('base64')===value;\r\n}\r\nconst CATALOGO: Record<string, [EtapaAcbr, string, string]> = {\r\n CONFIGURACAO_INVALIDA: ['configuracao','A configura\u00E7\u00E3o cont\u00E9m um campo inv\u00E1lido.','Confira o campo indicado e seu tipo antes de continuar.'],\r\n CONTRATO_INVALIDO: ['configuracao','O contrato do cliente \u00E9 inv\u00E1lido.','Use o contrato gerado junto com o cliente.'],\r\n CERTIFICADO_INVALIDO: ['configuracao','O certificado A1 ou sua configura\u00E7\u00E3o \u00E9 inv\u00E1lido.','Confira formato e validade do A1, pfx ou arquivo e a senha digitada, sem registrar esses dados.'],\r\n CERTIFICADO_DIVERGENTE: ['assinatura','O certificado n\u00E3o corresponde \u00E0 raiz CNPJ do emitente.','Confira o CNPJ configurado e selecione o A1 correspondente ao emitente.'],\r\n DEPENDENCIA_AUSENTE: ['runtime','Uma depend\u00EAncia do motor fiscal n\u00E3o est\u00E1 dispon\u00EDvel.','Reinstale o runtime completo da plataforma; confira a disponibilidade do OpenSSL distribu\u00EDdo.'],\r\n SCHEMAS_AUSENTES: ['runtime','Os schemas fiscais n\u00E3o est\u00E3o dispon\u00EDveis.','Reinstale o runtime completo da plataforma.'],\r\n SERVICOS_AUSENTES: ['runtime','A configura\u00E7\u00E3o dos servi\u00E7os fiscais n\u00E3o est\u00E1 dispon\u00EDvel.','Reinstale o runtime completo da plataforma.'],\r\n CSC_AUSENTE: ['configuracao','A opera\u00E7\u00E3o de NFC-e exige CSC.','Informe id e valor do CSC na configura\u00E7\u00E3o sem registrar seu conte\u00FAdo.'],\r\n IDENTIDADE_DIVERGENTE: ['documento','A identidade fiscal n\u00E3o corresponde \u00E0 configura\u00E7\u00E3o ou ao retorno.','Confira emitente, UF, modelo, ambiente e chave do documento antes de continuar.'],\r\n XML_SCHEMA_INVALIDO: ['validacao','O XML n\u00E3o atende aos schemas fiscais.','Confira os campos obrigat\u00F3rios e os tributos; a valida\u00E7\u00E3o de XML assinado deve ocorrer ap\u00F3s a assinatura.'],\r\n ASSINATURA_INVALIDA: ['assinatura','A assinatura do XML n\u00E3o foi validada.','Confira o A1 correspondente e use o XML assinado sem altera\u00E7\u00F5es.'],\r\n XML_NAO_ASSINADO: ['assinatura','A opera\u00E7\u00E3o exige XML previamente assinado.','Conclua a assinatura e a valida\u00E7\u00E3o antes de transmitir.'],\r\n XML_ALTERADO: ['assinatura','O XML assinado foi alterado.','Use exatamente o XML assinado e persistido; n\u00E3o edite seu conte\u00FAdo.'],\r\n RETORNO_INVALIDO: ['transmissao','A identidade ou o protocolo do retorno fiscal \u00E9 inv\u00E1lido.','Consulte a situa\u00E7\u00E3o fiscal antes de decidir repetir a opera\u00E7\u00E3o.'],\r\n RECUPERACAO_NAO_COMPROVADA: ['consulta','A consulta n\u00E3o comprovou a recupera\u00E7\u00E3o do XML autorizado.','Preserve o XML assinado original e confira a situa\u00E7\u00E3o fiscal. N\u00E3o transmita a nota para tentar recuperar o protocolo.'],\r\n OPERACAO_FISCAL_FALHOU: ['operacao','O motor n\u00E3o conseguiu concluir a etapa fiscal.','Confira a configura\u00E7\u00E3o da etapa, os dados do XML e as depend\u00EAncias do runtime.'],\r\n TLS_SERVIDOR_INVALIDO: ['transmissao','A verifica\u00E7\u00E3o TLS do servi\u00E7o fiscal falhou.','Confira o servi\u00E7o e a cadeia de confian\u00E7a; mantenha a verifica\u00E7\u00E3o TLS habilitada.'],\r\n CSC_INVALIDO: ['configuracao','A configura\u00E7\u00E3o do CSC \u00E9 inv\u00E1lida.','Confira id e valor do CSC sem registrar seu conte\u00FAdo.'],\r\n PLATAFORMA_NAO_SUPORTADA: ['runtime','A plataforma n\u00E3o \u00E9 suportada.','Execute em Windows ou Linux x64 com Node.js 22.12 ou superior.'],\r\n RUNTIME_AUSENTE: ['runtime','O motor fiscal n\u00E3o foi encontrado.','Instale o runtime da plataforma incluindo depend\u00EAncias opcionais.'],\r\n RUNTIME_INVALIDO: ['runtime','O runtime fiscal \u00E9 inv\u00E1lido.','Use um runtime distribu\u00EDdo e compat\u00EDvel com a plataforma.'],\r\n RUNTIME_INCOMPLETO: ['runtime','Falta um arquivo do runtime fiscal.','Reinstale o runtime da plataforma.'],\r\n RUNTIME_ALTERADO: ['runtime','A integridade do runtime fiscal n\u00E3o foi confirmada.','Reinstale o runtime; n\u00E3o desative a verifica\u00E7\u00E3o dos hashes.'],\r\n RUNTIME_SEM_CAPACIDADE: ['runtime','O runtime instalado n\u00E3o oferece esta opera\u00E7\u00E3o.','Atualize o pacote principal e o runtime da plataforma para vers\u00F5es compat\u00EDveis com a opera\u00E7\u00E3o solicitada.'],\r\n CONTRATO_DIVERGENTE: ['runtime','Cliente e motor usam contratos diferentes.','Use vers\u00F5es compat\u00EDveis ou regenere e recompile ambos.'],\r\n DOCUMENTO_INVALIDO: ['documento','O documento cont\u00E9m dados incompat\u00EDveis com o modelo.','Valide os campos e tipos do documento antes de gerar o XML.'],\r\n OPERACAO_INVALIDA: ['operacao','Os par\u00E2metros da opera\u00E7\u00E3o s\u00E3o inv\u00E1lidos.','Informe um objeto com os campos exigidos pela opera\u00E7\u00E3o.'],\r\n OPERACAO_CANCELADA: ['operacao','A opera\u00E7\u00E3o foi cancelada.','Confira o estado do envio antes de decidir continuar.'],\r\n TIMEOUT_MOTOR: ['runtime','O motor excedeu o tempo de espera.','Confira o estado do envio antes de repetir a opera\u00E7\u00E3o.'],\r\n EMISSOR_FECHADO: ['operacao','O emissor foi encerrado.','Crie um novo emissor para continuar.'],\r\n FALHA_INICIAR_MOTOR: ['runtime','N\u00E3o foi poss\u00EDvel iniciar o motor fiscal.','Confira a instala\u00E7\u00E3o e as permiss\u00F5es de execu\u00E7\u00E3o do runtime.'],\r\n FALHA_PIPE: ['runtime','A comunica\u00E7\u00E3o com o motor foi interrompida.','Confira a instala\u00E7\u00E3o e o estado do envio antes de continuar.'],\r\n RESPOSTA_EXCESSIVA: ['runtime','A resposta do motor excedeu o limite.','Confira o tamanho da opera\u00E7\u00E3o e a vers\u00E3o do runtime.'],\r\n RESPOSTA_INVALIDA: ['runtime','O motor devolveu uma resposta inv\u00E1lida.','Confira a compatibilidade do runtime e o estado do envio.'],\r\n FALHA_MOTOR: ['runtime','O motor encerrou sem uma resposta fiscal v\u00E1lida.','Confira a instala\u00E7\u00E3o e o estado do envio antes de continuar.'],\r\n CERTIFICADO_AUSENTE: ['configuracao','O certificado A1 n\u00E3o est\u00E1 dispon\u00EDvel para esta opera\u00E7\u00E3o.','Configure um A1 acess\u00EDvel e sua senha sem registrar esses dados.'],\r\n CERTIFICADO_EXCESSIVO: ['configuracao','O certificado excede o limite de tamanho.','Use um arquivo A1 de at\u00E9 2 MiB.'],\r\n REQUISICAO_INVALIDA: ['operacao','Os dados n\u00E3o puderam ser serializados ou excedem o limite.','Use dados JSON e reduza o tamanho da opera\u00E7\u00E3o.'],\r\n FILA_CHEIA: ['operacao','A fila fiscal est\u00E1 cheia.','Aguarde a opera\u00E7\u00E3o atual terminar antes de iniciar outra.'],\r\n XML_INVALIDO: ['documento','O XML est\u00E1 vazio, tem tipo inv\u00E1lido ou excede o limite.','Informe o XML como texto UTF-8 de at\u00E9 2 MiB.'],\r\n CHAVE_INVALIDA: ['documento','A chave fiscal tem formato inv\u00E1lido.','Informe a chave como texto com 44 d\u00EDgitos.'],\r\n RECIBO_INVALIDO: ['documento','O recibo tem formato inv\u00E1lido.','Informe o recibo como texto com 15 d\u00EDgitos.'],\r\n JUSTIFICATIVA_INVALIDA: ['documento','A justificativa tem tamanho inv\u00E1lido.','Informe uma justificativa com 15 a 255 caracteres.'],\r\n PROTOCOLO_INVALIDO: ['documento','O protocolo tem formato inv\u00E1lido.','Informe o protocolo como texto com 15 d\u00EDgitos.'],\r\n OPERACAO_NAO_SUPORTADA: ['operacao','A opera\u00E7\u00E3o n\u00E3o \u00E9 suportada para este modelo.','Carta de corre\u00E7\u00E3o exige NF-e modelo 55.'],\r\n CORRECAO_INVALIDA: ['documento','Os dados da carta de corre\u00E7\u00E3o s\u00E3o inv\u00E1lidos.','Confira a corre\u00E7\u00E3o de 15 a 1000 caracteres e a sequ\u00EAncia de 1 a 20.'],\r\n INUTILIZACAO_INVALIDA: ['documento','A faixa de inutiliza\u00E7\u00E3o \u00E9 inv\u00E1lida.','Confira ano, s\u00E9rie e n\u00FAmeros inicial e final.'],\r\n FALHA_LOCAL: ['operacao','N\u00E3o foi poss\u00EDvel concluir a opera\u00E7\u00E3o local.','Confira a etapa e os tipos dos dados; n\u00E3o registre o erro bruto.']\r\n};\r\n\r\nexport function etapaDaOperacao(comando: Comando): EtapaAcbr {\r\n return ({gerarXml:'geracao',validar:'validacao',assinar:'assinatura',transmitir:'transmissao',consultar:'consulta',recuperarXml:'consulta',cancelar:'cancelamento',cartaCorrecao:'carta_correcao',inutilizar:'inutilizacao'} as const)[comando]??'operacao';\r\n}\r\n\r\n/** Apenas cat\u00E1logo e metadados conhecidos; nunca copia message, stack, stderr ou causa bruta. */\r\nexport function criarDiagnosticoErro(codigo: string, desconhecido = false, detalhes: DetalhesErroAcbr = {}): DiagnosticoAcbr {\r\n const safeCode = Object.hasOwn(CATALOGO, codigo) ? codigo : 'FALHA_LOCAL';\r\n const [defaultStage, mensagem, defaultAction] = CATALOGO[safeCode];\r\n const etapa = detalhes.etapa && ETAPAS.has(detalhes.etapa) ? detalhes.etapa : defaultStage;\r\n const campo = detalhes.campo && CAMPOS.has(detalhes.campo) ? detalhes.campo : undefined;\r\n const acoesConfig:Record<string,string>={cnpj:'Informe o CNPJ como texto com 14 d\u00EDgitos.',uf:'Informe a sigla da UF em letras mai\u00FAsculas, por exemplo PE.',modelo:'Informe o n\u00FAmero 55 para NF-e ou 65 para NFC-e, sem aspas.',ambiente:'Informe o n\u00FAmero 2 para homologa\u00E7\u00E3o ou 1 para produ\u00E7\u00E3o, sem aspas.',timeoutMs:'Informe um n\u00FAmero inteiro de 1 a 120000 milissegundos.',limiteFila:'Informe um n\u00FAmero inteiro de 0 a 1000.',limiteBytes:'Informe um n\u00FAmero inteiro de 256 a 8388608 bytes.',runtimeDirectory:'Informe o diret\u00F3rio do runtime como texto n\u00E3o vazio.'};\r\n const acao=safeCode==='CONFIGURACAO_INVALIDA'&&campo&&Object.hasOwn(acoesConfig,campo)?acoesConfig[campo]:defaultAction;\r\n const causa = Object.freeze({codigo:safeCode,etapa,...(campo ? {campo} : {})});\r\n return Object.freeze({codigo:safeCode,etapa,...(campo ? {campo} : {}),mensagem,\r\n acao:desconhecido ? 'Consulte a situa\u00E7\u00E3o fiscal antes de repetir. O envio pode ter ocorrido; n\u00E3o retransmita automaticamente.' : acao,\r\n statusEnvio:desconhecido ? 'resultado_incerto' : 'nao_enviado',causa});\r\n}\r\n\r\nexport function diagnosticarErro(erro: unknown): DiagnosticoAcbr {\r\n return erro instanceof ErroAcbrNode ? erro.diagnostico : criarDiagnosticoErro('FALHA_LOCAL',true);\r\n}\r\n\r\nexport function adicionarDiagnosticoLimpeza(diagnostico: DiagnosticoAcbr): DiagnosticoAcbr {\r\n const acao=diagnostico.statusEnvio==='resultado_incerto'\r\n ? 'Encerre esta aplica\u00E7\u00E3o antes de iniciar outro motor e consulte a situa\u00E7\u00E3o fiscal antes de repetir qualquer envio.'\r\n : 'Encerre esta aplica\u00E7\u00E3o antes de iniciar outro motor. As pr\u00F3ximas opera\u00E7\u00F5es deste emissor foram bloqueadas.';\r\n const limpeza=Object.freeze({codigo:'ENCERRAMENTO_MOTOR_NAO_CONFIRMADO' as const,etapa:'limpeza' as const,mensagem:'N\u00E3o foi poss\u00EDvel confirmar o encerramento do motor fiscal.',acao});\r\n return Object.freeze({...diagnostico,acao,limpeza});\r\n}\r\n\r\n/** Status refere-se \u00E0 opera\u00E7\u00E3o atual; uma etapa local n\u00E3o prova aus\u00EAncia de envios anteriores. */\r\nexport function diagnosticarResultado(resultado: ResultadoFiscal, comando: Comando): DiagnosticoAcbr {\r\n const etapa = etapaDaOperacao(comando);\r\n if(!resultado||typeof resultado!=='object')return criarDiagnosticoErro('FALHA_LOCAL',true,{etapa});\r\n if(resultado.envioIniciado!==undefined&&typeof resultado.envioIniciado!=='boolean')return criarDiagnosticoErro('RESPOSTA_INVALIDA',true,{etapa});\r\n let statusEnvio: StatusEnvio = 'resultado_incerto', codigo = 'RESULTADO_INCERTO';\r\n let mensagem = 'A situa\u00E7\u00E3o fiscal ainda n\u00E3o foi confirmada.';\r\n let acao = 'Consulte a situa\u00E7\u00E3o fiscal antes de repetir. N\u00E3o retransmita automaticamente.';\r\n const local=(comando==='gerarXml'&&resultado.estado==='XML_GERADO')||(comando==='validar'&&resultado.estado==='VALIDADO')||(comando==='assinar'&&resultado.estado==='ASSINADO');\r\n const semEvento=resultado.envioIniciado===false||resultado.envioIniciado===undefined;\r\n const protocolo=typeof resultado.protocolo==='string'&&/^\\d{15}$/.test(resultado.protocolo);\r\n const chave=typeof resultado.chave==='string'&&/^\\d{44}$/.test(resultado.chave);\r\n const autorizacao=(comando==='transmitir'||comando==='consultar')&&resultado.estado==='AUTORIZADO'&&[100,150].includes(resultado.cStat!)&&protocolo&&chave&&(comando==='consultar'||resultado.envioIniciado!==false);\r\n const xmlRecuperado=comando==='recuperarXml'&&base64XmlRecuperadoValido(resultado.xmlBase64);\r\n const recuperacao=comando==='recuperarXml'&&resultado.estado==='XML_RECUPERADO'&&resultado.cStat===100&&protocolo&&chave&&semEvento&&xmlRecuperado;\r\n const evento=(comando==='cancelar'&&resultado.estado==='CANCELADO'&&[135,136].includes(resultado.cStat!)&&chave)||(comando==='cartaCorrecao'&&resultado.estado==='EVENTO_REGISTRADO'&&resultado.cStat===135&&chave)||(comando==='inutilizar'&&resultado.estado==='INUTILIZADO'&&resultado.cStat===102);\r\n if (local && resultado.sucesso===true && semEvento) {\r\n statusEnvio='nao_enviado';codigo='ETAPA_LOCAL_CONCLUIDA';mensagem='A etapa local foi conclu\u00EDda; esta opera\u00E7\u00E3o n\u00E3o transmitiu a nota.';acao='Confira o resultado antes de seguir para a pr\u00F3xima etapa.';\r\n } else if (resultado.sucesso===true && recuperacao) {\r\n statusEnvio='autorizado';codigo='XML_RECUPERADO';mensagem='O XML autorizado foi recuperado por consulta; esta opera\u00E7\u00E3o n\u00E3o transmitiu a nota.';acao='Guarde o XML recuperado com o protocolo de autoriza\u00E7\u00E3o.';\r\n } else if (comando==='recuperarXml'&&resultado.sucesso===false&&resultado.codigo==='RECUPERACAO_NAO_COMPROVADA'&&['CONSULTADO','ERRO'].includes(resultado.estado)&&semEvento) {\r\n statusEnvio='nao_enviado';codigo='RECUPERACAO_NAO_COMPROVADA';mensagem=CATALOGO.RECUPERACAO_NAO_COMPROVADA[1];acao=CATALOGO.RECUPERACAO_NAO_COMPROVADA[2];\r\n } else if (resultado.sucesso===true && (autorizacao||evento&&protocolo&&resultado.envioIniciado!==false)) {\r\n statusEnvio='autorizado';codigo='OPERACAO_CONFIRMADA';\r\n mensagem=({AUTORIZADO:'A nota foi autorizada.',CANCELADO:'O cancelamento foi confirmado.',EVENTO_REGISTRADO:'O evento foi registrado.',INUTILIZADO:'A faixa foi inutilizada.'} as Record<string,string>)[resultado.estado];\r\n acao='Guarde o resultado fiscal. N\u00E3o repita esta opera\u00E7\u00E3o.';\r\n } else if (resultado.sucesso===false && (comando==='consultar'||comando==='recuperarXml'||resultado.envioIniciado!==false) && ['transmitir','consultar','recuperarXml','cancelar','cartaCorrecao','inutilizar'].includes(comando) && Number.isInteger(resultado.cStat) && Number(resultado.cStat)>0 && Number(resultado.cStat)<=9999 && (resultado.estado==='DENEGADO'&&[110,301,302].includes(resultado.cStat!)||resultado.estado==='REJEITADO'&&![100,150,110,301,302,101,151,155,103,104,105,108,109,204,539,573,135,136,102,217].includes(resultado.cStat!))) {\r\n statusEnvio='rejeitado';codigo=resultado.estado==='DENEGADO'?'NOTA_DENEGADA':'OPERACAO_REJEITADA';\r\n mensagem=resultado.estado==='DENEGADO'?'A nota foi denegada.':'A opera\u00E7\u00E3o foi rejeitada.';\r\n acao=resultado.estado==='DENEGADO'?'Consulte a situa\u00E7\u00E3o fiscal e a orienta\u00E7\u00E3o respons\u00E1vel antes de usar a numera\u00E7\u00E3o.':'Confira o cStat e revise os dados antes de decidir uma nova tentativa.';\r\n } else if (resultado.estado==='ERRO' && resultado.envioIniciado===false) {\r\n if(typeof resultado.codigo==='string'&&Object.hasOwn(CATALOGO,resultado.codigo))return criarDiagnosticoErro(resultado.codigo,false,{etapa});\r\n statusEnvio='nao_enviado';codigo='FALHA_ANTES_ENVIO';mensagem='O motor informou falha antes de iniciar o envio desta opera\u00E7\u00E3o.';acao='Revise a configura\u00E7\u00E3o e os dados antes de continuar.';\r\n }\r\n const cStat=Number.isInteger(resultado.cStat)&&Number(resultado.cStat)>0&&Number(resultado.cStat)<=9999 ? resultado.cStat : undefined;\r\n return Object.freeze({codigo,etapa,mensagem,acao,statusEnvio,...(cStat!==undefined?{cStat}:{})});\r\n}\r\n", "export const PROTOCOL_VERSION = 1 as const;\r\nexport type Modelo = 55 | 65;\r\nexport type Ambiente = 1 | 2;\r\nexport type Comando = 'gerarXml' | 'validar' | 'assinar' | 'transmitir' | 'consultar' | 'recuperarXml' | 'cancelar' | 'cartaCorrecao' | 'inutilizar';\r\nexport interface Contrato { sourceRevision: number; contractHash: string }\r\nexport interface CertificadoA1 { pfx?: Uint8Array; arquivo?: string; senha: string }\r\nexport interface ConfiguracaoEmissor { cnpj: string; uf: string; modelo: Modelo; ambiente: Ambiente; certificado?: CertificadoA1; csc?: { id: string; valor: string } }\r\nexport interface ConfiguracaoMotor extends Omit<ConfiguracaoEmissor, 'certificado'> { certificado?: { pfxBase64: string; senha: string } }\r\nexport interface RequisicaoMotor extends Contrato {\r\n versao: 1; id: string; comando: Comando; config: ConfiguracaoMotor;\r\n documento?: object; xmlBase64?: string; chave?: string; recibo?: string;\r\n protocolo?: string; justificativa?: string; correcao?: string; sequenciaEvento?: number;\r\n inutilizacao?: { ano: number; serie: number; numeroInicial: number; numeroFinal: number };\r\n}\r\nexport type Estado = 'DENEGADO' | 'XML_GERADO' | 'VALIDADO' | 'ASSINADO' | 'XML_RECUPERADO' | 'AUTORIZADO' | 'REJEITADO' | 'PENDENTE' | 'INDETERMINADO' | 'CONSULTADO' | 'CANCELADO' | 'EVENTO_REGISTRADO' | 'INUTILIZADO' | 'ERRO';\r\nexport interface ResultadoFiscal extends Contrato {\r\n versao: 1; id: string; sucesso: boolean; estado: Estado; codigo?: string;\r\n cStat?: number; xMotivo?: string; chave?: string; protocolo?: string; recibo?: string;\r\n xmlBase64?: string; envioIniciado?: boolean;\r\n /** Resumo seguro para interfaces e logs; n\u00E3o cont\u00E9m XML, identidade fiscal ou xMotivo bruto. */\r\n diagnostico?: DiagnosticoAcbr;\r\n}\r\nexport interface RuntimeManifest extends Contrato {\r\n formatVersion: 1; platform: string; arch: string; executable: string; files: Record<string, string>;\r\n /** Opera\u00E7\u00F5es adicionais anunciadas pelo motor, sem alterar o protocolo-base. */\r\n capabilities?: readonly string[];\r\n}\r\nexport interface OpcoesOperacao { signal?: AbortSignal }\r\nexport interface Consulta { chave: string; recibo?: string }\r\nexport interface Cancelamento { chave: string; protocolo: string; justificativa: string }\r\nexport interface CartaCorrecao { chave: string; correcao: string; sequenciaEvento?: number }\r\nexport interface Inutilizacao { ano: number; serie: number; numeroInicial: number; numeroFinal: number; justificativa: string }\r\nexport type StatusEnvio = 'nao_enviado' | 'rejeitado' | 'autorizado' | 'resultado_incerto';\r\nexport type EtapaAcbr = 'configuracao' | 'documento' | 'runtime' | 'geracao' | 'validacao' | 'assinatura' | 'transmissao' | 'consulta' | 'cancelamento' | 'carta_correcao' | 'inutilizacao' | 'operacao' | 'limpeza';\r\nexport interface DiagnosticoAcbr {\r\n readonly codigo: string; readonly etapa: EtapaAcbr; readonly campo?: string;\r\n readonly mensagem: string; readonly acao: string; readonly statusEnvio: StatusEnvio;\r\n readonly cStat?: number;\r\n readonly causa?: Readonly<{ codigo: string; etapa: EtapaAcbr; campo?: string }>;\r\n readonly limpeza?: Readonly<{codigo:'ENCERRAMENTO_MOTOR_NAO_CONFIRMADO';etapa:'limpeza';mensagem:string;acao:string}>;\r\n}\r\nexport interface DetalhesErroAcbr { etapa?: EtapaAcbr; campo?: string }\r\nexport class ErroAcbrNode extends Error {\r\n readonly name = 'ErroAcbrNode';\r\n #diagnostico: DiagnosticoAcbr;\r\n get diagnostico(): DiagnosticoAcbr { return this.#diagnostico; }\r\n constructor(readonly codigo: string, mensagem: string, readonly resultadoDesconhecido = false, readonly xmlBase64?: string, detalhes?: DetalhesErroAcbr) {\r\n super(mensagem);\r\n this.#diagnostico = criarDiagnosticoErro(codigo, resultadoDesconhecido, detalhes);\r\n // Recupera\u00E7\u00E3o permanece dispon\u00EDvel por acesso expl\u00EDcito, sem vazar XML em console/JSON.\r\n Object.defineProperty(this, 'xmlBase64', { value: xmlBase64, enumerable: false });\r\n Object.defineProperty(this, 'cause', { value: this.diagnostico.causa, enumerable: false });\r\n }\r\n /** Acrescenta apenas o aviso est\u00E1tico de limpeza, preservando o erro da opera\u00E7\u00E3o. */\r\n anotarFalhaLimpeza(): void { this.#diagnostico = adicionarDiagnosticoLimpeza(this.#diagnostico); }\r\n toJSON(): DiagnosticoAcbr { return this.diagnostico; }\r\n}\r\nimport { criarDiagnosticoErro, adicionarDiagnosticoLimpeza } from './diagnostics.js';\r\n"],
5
+ "mappings": "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",
6
6
  "names": ["require"]
7
7
  }
@@ -20,6 +20,7 @@ export declare function criarEmissor(options: Omit<OpcoesEmissor, "contrato" | "
20
20
  validar: (xml: string, op?: OpcoesOperacao) => Promise<import("cosmemilton-acbr-node/runtime").ResultadoFiscal>;
21
21
  assinar: (xml: string, op?: OpcoesOperacao) => Promise<import("cosmemilton-acbr-node/runtime").ResultadoFiscal>;
22
22
  transmitir: (xml: string, op?: OpcoesOperacao) => Promise<import("cosmemilton-acbr-node/runtime").ResultadoFiscal>;
23
+ recuperarXml: (xmlAssinado: string, opcoes?: OpcoesOperacao) => Promise<import("cosmemilton-acbr-node/runtime").ResultadoFiscal>;
23
24
  consultar: (consulta: import("cosmemilton-acbr-node/runtime").Consulta, op?: OpcoesOperacao) => Promise<import("cosmemilton-acbr-node/runtime").ResultadoFiscal>;
24
25
  cancelar: (data: import("cosmemilton-acbr-node/runtime").Cancelamento, op?: OpcoesOperacao) => Promise<import("cosmemilton-acbr-node/runtime").ResultadoFiscal>;
25
26
  cartaCorrecao: (data: import("cosmemilton-acbr-node/runtime").CartaCorrecao, op?: OpcoesOperacao) => Promise<import("cosmemilton-acbr-node/runtime").ResultadoFiscal>;
File without changes
File without changes
File without changes
File without changes
@@ -1,4 +1,6 @@
1
1
  import { type Comando, type DetalhesErroAcbr, type DiagnosticoAcbr, type EtapaAcbr, type ResultadoFiscal } from './types.js';
2
+ /** Limite do envelope recuperado; a entrada assinada mantém seu limite de 2 MiB. */
3
+ export declare function base64XmlRecuperadoValido(value: unknown): value is string;
2
4
  export declare function etapaDaOperacao(comando: Comando): EtapaAcbr;
3
5
  /** Apenas catálogo e metadados conhecidos; nunca copia message, stack, stderr ou causa bruta. */
4
6
  export declare function criarDiagnosticoErro(codigo: string, desconhecido?: boolean, detalhes?: DetalhesErroAcbr): DiagnosticoAcbr;
File without changes
@@ -21,6 +21,7 @@ export declare function criarEmissor(options: OpcoesCriarEmissor): {
21
21
  validar: (xml: string, op?: OpcoesOperacao) => Promise<import("./types.js").ResultadoFiscal>;
22
22
  assinar: (xml: string, op?: OpcoesOperacao) => Promise<import("./types.js").ResultadoFiscal>;
23
23
  transmitir: (xml: string, op?: OpcoesOperacao) => Promise<import("./types.js").ResultadoFiscal>;
24
+ recuperarXml: (xmlAssinado: string, opcoes?: OpcoesOperacao) => Promise<import("./types.js").ResultadoFiscal>;
24
25
  consultar: (consulta: import("./types.js").Consulta, op?: OpcoesOperacao) => Promise<import("./types.js").ResultadoFiscal>;
25
26
  cancelar: (data: import("./types.js").Cancelamento, op?: OpcoesOperacao) => Promise<import("./types.js").ResultadoFiscal>;
26
27
  cartaCorrecao: (data: import("./types.js").CartaCorrecao, op?: OpcoesOperacao) => Promise<import("./types.js").ResultadoFiscal>;
@@ -10,6 +10,7 @@ export interface BuiltRuntimeManifest {
10
10
  systemDependencies?: string[];
11
11
  testOnly?: boolean;
12
12
  generatedFileHashes: Record<string, string>;
13
+ capabilities?: string[];
13
14
  }
14
15
  export declare function runtimeDirectory(config: AcbrConfig): string;
15
16
  export declare function findLazarus(config: AcbrConfig): Promise<string>;
File without changes
File without changes
@@ -18,6 +18,7 @@ export declare function criarEmissor(options: OpcoesEmissor): {
18
18
  validar: (xml: string, op?: OpcoesOperacao) => Promise<ResultadoFiscal>;
19
19
  assinar: (xml: string, op?: OpcoesOperacao) => Promise<ResultadoFiscal>;
20
20
  transmitir: (xml: string, op?: OpcoesOperacao) => Promise<ResultadoFiscal>;
21
+ recuperarXml: (xmlAssinado: string, opcoes?: OpcoesOperacao) => Promise<ResultadoFiscal>;
21
22
  consultar: (consulta: Consulta, op?: OpcoesOperacao) => Promise<ResultadoFiscal>;
22
23
  cancelar: (data: Cancelamento, op?: OpcoesOperacao) => Promise<ResultadoFiscal>;
23
24
  cartaCorrecao: (data: CartaCorrecao, op?: OpcoesOperacao) => Promise<ResultadoFiscal>;
File without changes