facturas 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-WPHD2GQJ.mjs → chunk-B2M64SIK.mjs} +2 -2
- package/dist/{chunk-DHN6OQJP.mjs → chunk-C2KX652X.mjs} +17 -1
- package/dist/chunk-C2KX652X.mjs.map +1 -0
- package/dist/{chunk-MRBFLBWX.mjs → chunk-JP3LVU7K.mjs} +2 -2
- package/dist/{chunk-EZ4HA3LC.mjs → chunk-NT2A6YMO.mjs} +9 -2
- package/dist/chunk-NT2A6YMO.mjs.map +1 -0
- package/dist/{chunk-U3HODOOP.mjs → chunk-T5N62FRZ.mjs} +2639 -2502
- package/dist/chunk-T5N62FRZ.mjs.map +1 -0
- package/dist/{chunk-4RD5VQWC.mjs → chunk-TMSP5QPZ.mjs} +3 -3
- package/dist/{chunk-OORNZFI5.mjs → chunk-TXFYTMO4.mjs} +3 -3
- package/dist/cli.d.ts +2 -2
- package/dist/cli.mjs +7 -7
- package/dist/{client-D1IH1NCf.d.ts → client-BIkLOgBA.d.ts} +85 -11
- package/dist/constants.d.ts +25 -1
- package/dist/constants.mjs +3 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.mjs +1 -1
- package/dist/{fiscal-evidence-B6UTFGmY.d.ts → fiscal-evidence-Bg4o9nxt.d.ts} +16 -3
- package/dist/index.d.ts +4 -50
- package/dist/index.mjs +15 -9
- package/dist/index.mjs.map +1 -1
- package/dist/padron.mjs +2 -2
- package/dist/wsfe.d.ts +1 -1
- package/dist/wsfe.mjs +3 -3
- package/dist/wsmtxca.d.ts +1 -1
- package/dist/wsmtxca.mjs +3 -3
- package/package.json +1 -1
- package/dist/chunk-DHN6OQJP.mjs.map +0 -1
- package/dist/chunk-EZ4HA3LC.mjs.map +0 -1
- package/dist/chunk-U3HODOOP.mjs.map +0 -1
- /package/dist/{chunk-WPHD2GQJ.mjs.map → chunk-B2M64SIK.mjs.map} +0 -0
- /package/dist/{chunk-MRBFLBWX.mjs.map → chunk-JP3LVU7K.mjs.map} +0 -0
- /package/dist/{chunk-4RD5VQWC.mjs.map → chunk-TMSP5QPZ.mjs.map} +0 -0
- /package/dist/{chunk-OORNZFI5.mjs.map → chunk-TXFYTMO4.mjs.map} +0 -0
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
ArcaServiceError,
|
|
4
4
|
ArcaSoapFaultError,
|
|
5
5
|
isArcaAuthenticationError
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-NT2A6YMO.mjs";
|
|
7
7
|
|
|
8
8
|
// src/internal/authentication.ts
|
|
9
9
|
var WSFE_AUTHENTICATION_CODES = {
|
|
@@ -176,4 +176,4 @@ export {
|
|
|
176
176
|
createArcaAuthenticationEvidence,
|
|
177
177
|
executeWithAuthenticationRecovery
|
|
178
178
|
};
|
|
179
|
-
//# sourceMappingURL=chunk-
|
|
179
|
+
//# sourceMappingURL=chunk-B2M64SIK.mjs.map
|
|
@@ -15,6 +15,21 @@ var ARCA_DOCUMENT_TYPES = {
|
|
|
15
15
|
DNI: 96,
|
|
16
16
|
CONSUMIDOR_FINAL: 99
|
|
17
17
|
};
|
|
18
|
+
var ARCA_WSMTXCA_GENERIC_CODES = {
|
|
19
|
+
"7790001001030": "Descuentos y bonificaciones comerciales",
|
|
20
|
+
"7790001001047": "Conceptos financieros",
|
|
21
|
+
"7790001001054": "Ventas varias",
|
|
22
|
+
"7790001001061": "Bienes de uso",
|
|
23
|
+
"7790001001078": "Servicios prestados",
|
|
24
|
+
"7790001001085": "Fletes",
|
|
25
|
+
"7790001001092": "Alquileres",
|
|
26
|
+
"7790001001115": "Dep\xF3sito y servicios de log\xEDstica",
|
|
27
|
+
"7790001001122": "Repuestos y accesorios",
|
|
28
|
+
"7790001001139": "Ajustes impositivos",
|
|
29
|
+
"7790001001146": "Actividades comerciales no codificadas",
|
|
30
|
+
"7790001001153": "Venta de material de rezago",
|
|
31
|
+
"7790001001856": "Anticipos y se\xF1as"
|
|
32
|
+
};
|
|
18
33
|
var ARCA_RECEIVER_VAT_CONDITIONS = {
|
|
19
34
|
RESPONSABLE_INSCRIPTO: 1,
|
|
20
35
|
EXENTO: 4,
|
|
@@ -91,6 +106,7 @@ var ARCA_INVOICE_CLASS_BY_ISSUER = {
|
|
|
91
106
|
export {
|
|
92
107
|
ARCA_VOUCHER_TYPES,
|
|
93
108
|
ARCA_DOCUMENT_TYPES,
|
|
109
|
+
ARCA_WSMTXCA_GENERIC_CODES,
|
|
94
110
|
ARCA_RECEIVER_VAT_CONDITIONS,
|
|
95
111
|
ARCA_CONCEPT_TYPES,
|
|
96
112
|
ARCA_VAT_RATES,
|
|
@@ -101,4 +117,4 @@ export {
|
|
|
101
117
|
ARCA_FINAL_CONSUMER_IDENTIFICATION_THRESHOLD_MINOR_UNITS,
|
|
102
118
|
ARCA_INVOICE_CLASS_BY_ISSUER
|
|
103
119
|
};
|
|
104
|
-
//# sourceMappingURL=chunk-
|
|
120
|
+
//# sourceMappingURL=chunk-C2KX652X.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts"],"sourcesContent":["/** Common ARCA reference data for readable userland code and examples. */\nexport const ARCA_VOUCHER_TYPES = {\n FACTURA_A: 1,\n NOTA_DEBITO_A: 2,\n NOTA_CREDITO_A: 3,\n FACTURA_B: 6,\n NOTA_DEBITO_B: 7,\n NOTA_CREDITO_B: 8,\n FACTURA_C: 11,\n NOTA_DEBITO_C: 12,\n NOTA_CREDITO_C: 13,\n} as const;\n\n/** Common document types accepted by ARCA services. */\nexport const ARCA_DOCUMENT_TYPES = {\n CUIT: 80,\n DNI: 96,\n CONSUMIDOR_FINAL: 99,\n} as const;\n\n/**\n * ARCA's generic WSMTXCA item codes, keyed by the `matrixCode` to send.\n * RG 2904, Anexo VII: for concepts outside the issuer's main line of goods,\n * which carry their GTIN instead. Samples and promotional material use\n * `7790001001054` (Ventas varias).\n * https://www.afip.gob.ar/fe/documentos/codigosGenericosYEspecificos.xls\n */\nexport const ARCA_WSMTXCA_GENERIC_CODES = {\n \"7790001001030\": \"Descuentos y bonificaciones comerciales\",\n \"7790001001047\": \"Conceptos financieros\",\n \"7790001001054\": \"Ventas varias\",\n \"7790001001061\": \"Bienes de uso\",\n \"7790001001078\": \"Servicios prestados\",\n \"7790001001085\": \"Fletes\",\n \"7790001001092\": \"Alquileres\",\n \"7790001001115\": \"Depósito y servicios de logística\",\n \"7790001001122\": \"Repuestos y accesorios\",\n \"7790001001139\": \"Ajustes impositivos\",\n \"7790001001146\": \"Actividades comerciales no codificadas\",\n \"7790001001153\": \"Venta de material de rezago\",\n \"7790001001856\": \"Anticipos y señas\",\n} as const;\n\n/**\n * Common receiver IVA condition identifiers used by WSFE.\n * Allowed values depend on the voucher class and ARCA's live catalog.\n */\nexport const ARCA_RECEIVER_VAT_CONDITIONS = {\n RESPONSABLE_INSCRIPTO: 1,\n EXENTO: 4,\n CONSUMIDOR_FINAL: 5,\n MONOTRIBUTISTA: 6,\n IVA_NO_ALCANZADO: 15,\n} as const;\n\n/** Supported invoice concept types for WSFE requests. */\nexport const ARCA_CONCEPT_TYPES = {\n PRODUCTOS: 1,\n SERVICIOS: 2,\n PRODUCTOS_Y_SERVICIOS: 3,\n} as const;\n\n/** Common IVA rate identifiers used by WSFE. */\nexport const ARCA_VAT_RATES = {\n IVA_0: 3,\n IVA_10_5: 4,\n IVA_21: 5,\n IVA_27: 6,\n IVA_5: 8,\n IVA_2_5: 9,\n} as const;\n\n/** ISO currency codes accepted by the high-level WSFE builders. */\nexport const ISO_CURRENCIES = {\n ARS: \"ARS\",\n USD: \"USD\",\n} as const;\n\n/** ARCA currency identifiers keyed by their corresponding ISO currency. */\nexport const ARCA_CURRENCY_IDS = {\n ARS: \"PES\",\n USD: \"DOL\",\n} as const;\n\n/** Legal assertions supported by the invoice high-level API; never inferred from Padrón. */\nexport type IssuerCondition =\n | \"responsable_inscripto\"\n | \"monotributo\"\n | \"exento\"\n | \"no_alcanzado\";\nexport type ReceiverCondition = IssuerCondition | \"consumidor_final\";\nexport type VoucherClass = \"A\" | \"B\" | \"C\";\n\nexport const ARCA_RECEIVER_CONDITION_IDS = {\n responsable_inscripto: ARCA_RECEIVER_VAT_CONDITIONS.RESPONSABLE_INSCRIPTO,\n monotributo: ARCA_RECEIVER_VAT_CONDITIONS.MONOTRIBUTISTA,\n exento: ARCA_RECEIVER_VAT_CONDITIONS.EXENTO,\n consumidor_final: ARCA_RECEIVER_VAT_CONDITIONS.CONSUMIDOR_FINAL,\n no_alcanzado: ARCA_RECEIVER_VAT_CONDITIONS.IVA_NO_ALCANZADO,\n} as const satisfies Record<ReceiverCondition, number>;\n\nexport const ARCA_ISSUER_CONDITION_IDS = {\n responsable_inscripto: 1,\n monotributo: 6,\n exento: 4,\n no_alcanzado: 15,\n} as const satisfies Record<IssuerCondition, number>;\n\n/** The ARCA identifier of each issuer condition, accepted wherever a name is. */\nexport type IssuerConditionId =\n (typeof ARCA_ISSUER_CONDITION_IDS)[IssuerCondition];\n\n// RG 5866/2026, art. 1(f), effective 2026-07-01 (art. 4).\n// https://www.argentina.gob.ar/normativa/nacional/norma-427092/texto\nexport const ARCA_FINAL_CONSUMER_IDENTIFICATION_THRESHOLD_MINOR_UNITS =\n 1_000_000_000n;\n\n// WSFE v4.7, physical PDF p. 203, validations 10243/10246; issuer asserted first.\n// ARCA checks actual issuer eligibility independently at authorization.\nexport const ARCA_INVOICE_CLASS_BY_ISSUER = {\n responsable_inscripto: {\n responsable_inscripto: \"A\",\n monotributo: \"A\",\n exento: \"B\",\n consumidor_final: \"B\",\n no_alcanzado: \"B\",\n },\n monotributo: {\n responsable_inscripto: \"C\",\n monotributo: \"C\",\n exento: \"C\",\n consumidor_final: \"C\",\n no_alcanzado: \"C\",\n },\n exento: {\n responsable_inscripto: \"C\",\n monotributo: \"C\",\n exento: \"C\",\n consumidor_final: \"C\",\n no_alcanzado: \"C\",\n },\n no_alcanzado: {\n responsable_inscripto: \"C\",\n monotributo: \"C\",\n exento: \"C\",\n consumidor_final: \"C\",\n no_alcanzado: \"C\",\n },\n} as const satisfies Record<\n IssuerCondition,\n Record<ReceiverCondition, VoucherClass>\n>;\n"],"mappings":";AACO,IAAM,qBAAqB;AAAA,EAChC,WAAW;AAAA,EACX,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,eAAe;AAAA,EACf,gBAAgB;AAClB;AAGO,IAAM,sBAAsB;AAAA,EACjC,MAAM;AAAA,EACN,KAAK;AAAA,EACL,kBAAkB;AACpB;AASO,IAAM,6BAA6B;AAAA,EACxC,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AACnB;AAMO,IAAM,+BAA+B;AAAA,EAC1C,uBAAuB;AAAA,EACvB,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,kBAAkB;AACpB;AAGO,IAAM,qBAAqB;AAAA,EAChC,WAAW;AAAA,EACX,WAAW;AAAA,EACX,uBAAuB;AACzB;AAGO,IAAM,iBAAiB;AAAA,EAC5B,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AACX;AAGO,IAAM,iBAAiB;AAAA,EAC5B,KAAK;AAAA,EACL,KAAK;AACP;AAGO,IAAM,oBAAoB;AAAA,EAC/B,KAAK;AAAA,EACL,KAAK;AACP;AAWO,IAAM,8BAA8B;AAAA,EACzC,uBAAuB,6BAA6B;AAAA,EACpD,aAAa,6BAA6B;AAAA,EAC1C,QAAQ,6BAA6B;AAAA,EACrC,kBAAkB,6BAA6B;AAAA,EAC/C,cAAc,6BAA6B;AAC7C;AAEO,IAAM,4BAA4B;AAAA,EACvC,uBAAuB;AAAA,EACvB,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,cAAc;AAChB;AAQO,IAAM,2DACX;AAIK,IAAM,+BAA+B;AAAA,EAC1C,uBAAuB;AAAA,IACrB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,cAAc;AAAA,EAChB;AAAA,EACA,QAAQ;AAAA,IACN,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,cAAc;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACZ,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,cAAc;AAAA,EAChB;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ArcaSoapFaultError
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NT2A6YMO.mjs";
|
|
4
4
|
|
|
5
5
|
// src/services/padron.ts
|
|
6
6
|
function createPadronService(options) {
|
|
@@ -240,4 +240,4 @@ async function executePadronOperation(options, service, operation, body) {
|
|
|
240
240
|
export {
|
|
241
241
|
createPadronService
|
|
242
242
|
};
|
|
243
|
-
//# sourceMappingURL=chunk-
|
|
243
|
+
//# sourceMappingURL=chunk-JP3LVU7K.mjs.map
|
|
@@ -98,10 +98,13 @@ var ArcaInputError = class extends ArcaError {
|
|
|
98
98
|
name = "ArcaInputError";
|
|
99
99
|
field;
|
|
100
100
|
expected;
|
|
101
|
+
/** With `ARCA_INPUT_DATE_OUTSIDE_WINDOW`, the dates ARCA accepts today. */
|
|
102
|
+
window;
|
|
101
103
|
constructor(message, options) {
|
|
102
104
|
super(message, options.code, options);
|
|
103
105
|
this.field = options.field;
|
|
104
106
|
this.expected = options.expected;
|
|
107
|
+
this.window = options.window;
|
|
105
108
|
}
|
|
106
109
|
};
|
|
107
110
|
var ArcaAuthenticationError = class extends ArcaError {
|
|
@@ -211,7 +214,11 @@ function toArcaSafeErrorMetadata(error) {
|
|
|
211
214
|
}
|
|
212
215
|
const fields = { code: error.code };
|
|
213
216
|
if (error instanceof ArcaInputError) {
|
|
214
|
-
Object.assign(fields, {
|
|
217
|
+
Object.assign(fields, {
|
|
218
|
+
field: error.field,
|
|
219
|
+
expected: error.expected,
|
|
220
|
+
window: error.window
|
|
221
|
+
});
|
|
215
222
|
} else if (error instanceof ArcaAuthenticationError) {
|
|
216
223
|
Object.assign(fields, {
|
|
217
224
|
service: error.service,
|
|
@@ -264,4 +271,4 @@ export {
|
|
|
264
271
|
ArcaServiceError,
|
|
265
272
|
toArcaSafeErrorMetadata
|
|
266
273
|
};
|
|
267
|
-
//# sourceMappingURL=chunk-
|
|
274
|
+
//# sourceMappingURL=chunk-NT2A6YMO.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/redaction.ts","../src/errors.ts"],"sourcesContent":["export const MAX_DIAGNOSTIC_PREVIEW_LENGTH = 4096;\n\nconst MAX_DIAGNOSTIC_SCALAR_LENGTH = 512;\nconst SENSITIVE_XML_ELEMENT_NAME = \"((?:[A-Za-z_][\\\\w.-]*:)?(?:Token|Sign))\";\nconst PAIRED_SENSITIVE_XML_ELEMENT = new RegExp(\n `<${SENSITIVE_XML_ELEMENT_NAME}\\\\b[^>]*>[\\\\s\\\\S]*?<\\\\/\\\\1\\\\s*>`,\n \"gi\"\n);\nconst SELF_CLOSING_SENSITIVE_XML_ELEMENT = new RegExp(\n `<${SENSITIVE_XML_ELEMENT_NAME}\\\\b[^>]*\\\\/\\\\s*>`,\n \"gi\"\n);\nconst UNTERMINATED_SENSITIVE_XML_ELEMENT = new RegExp(\n `<${SENSITIVE_XML_ELEMENT_NAME}\\\\b[^>]*>[^<]*`,\n \"gi\"\n);\n\nexport type ResponseBodyDiagnostic = {\n responseBodyLength: number;\n responseBodyPreview: string;\n};\n\nexport type SafeErrorDiagnostic = {\n errorName?: string;\n errorCode?: string;\n statusCode?: number;\n contentType?: string;\n responseBodyLength?: number;\n responseBodyPreview?: string;\n faultCode?: string;\n};\n\n/** Redacts credential-bearing XML elements and applies the global preview bound. */\nexport function redactDiagnosticPreview(\n value: string,\n requestedMaxLength = MAX_DIAGNOSTIC_PREVIEW_LENGTH\n): string {\n const maxLength = normalizePreviewLength(requestedMaxLength);\n\n return value\n .replace(\n PAIRED_SENSITIVE_XML_ELEMENT,\n (_match, tagName: string) => `<${tagName}>[REDACTED]</${tagName}>`\n )\n .replace(\n SELF_CLOSING_SENSITIVE_XML_ELEMENT,\n (_match, tagName: string) => `<${tagName}>[REDACTED]</${tagName}>`\n )\n .replace(\n UNTERMINATED_SENSITIVE_XML_ELEMENT,\n (_match, tagName: string) => `<${tagName}>[REDACTED]`\n )\n .slice(0, maxLength);\n}\n\n/** Produces the only response-body shape allowed in errors and logs. */\nexport function createResponseBodyDiagnostic(\n responseBody: string,\n requestedMaxLength = MAX_DIAGNOSTIC_PREVIEW_LENGTH\n): ResponseBodyDiagnostic {\n return {\n responseBodyLength: responseBody.length,\n responseBodyPreview: redactDiagnosticPreview(\n responseBody,\n requestedMaxLength\n ),\n };\n}\n\n/** Extracts a scalar allowlist from an error without exposing the error or cause. */\nexport function createSafeErrorDiagnostic(error: unknown): SafeErrorDiagnostic {\n if (!(error && typeof error === \"object\")) {\n return {};\n }\n\n const candidate = error as Record<string, unknown>;\n const diagnostic: SafeErrorDiagnostic = {};\n\n assignSafeString(diagnostic, \"errorName\", candidate.name);\n assignSafeString(diagnostic, \"errorCode\", candidate.code);\n assignSafeNumber(diagnostic, \"statusCode\", candidate.statusCode);\n assignSafeString(diagnostic, \"contentType\", candidate.contentType);\n assignSafeNumber(\n diagnostic,\n \"responseBodyLength\",\n candidate.responseBodyLength\n );\n if (typeof candidate.responseBodyPreview === \"string\") {\n diagnostic.responseBodyPreview = redactDiagnosticPreview(\n candidate.responseBodyPreview\n );\n }\n assignSafeString(diagnostic, \"faultCode\", candidate.faultCode);\n\n return diagnostic;\n}\n\nfunction normalizePreviewLength(requestedMaxLength: number): number {\n if (!Number.isFinite(requestedMaxLength)) {\n return MAX_DIAGNOSTIC_PREVIEW_LENGTH;\n }\n\n return Math.max(\n 0,\n Math.min(Math.trunc(requestedMaxLength), MAX_DIAGNOSTIC_PREVIEW_LENGTH)\n );\n}\n\nfunction assignSafeString<\n TKey extends \"errorName\" | \"errorCode\" | \"contentType\" | \"faultCode\",\n>(target: SafeErrorDiagnostic, key: TKey, value: unknown): void {\n if (typeof value === \"string\") {\n target[key] = redactDiagnosticPreview(value, MAX_DIAGNOSTIC_SCALAR_LENGTH);\n }\n}\n\nfunction assignSafeNumber<TKey extends \"statusCode\" | \"responseBodyLength\">(\n target: SafeErrorDiagnostic,\n key: TKey,\n value: unknown\n): void {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n target[key] = value;\n }\n}\n","import { redactDiagnosticPreview } from \"./internal/redaction\";\nimport type { ArcaServiceName } from \"./internal/types\";\nimport type {\n ArcaFiscalIssue,\n ArcaFiscalResultLevel,\n ArcaFiscalResults,\n} from \"./services/fiscal-evidence\";\n\n/** Base error class for all ARCA-related errors. */\nexport class ArcaError extends Error {\n readonly code: string;\n override readonly name: string = \"ArcaError\";\n\n constructor(message: string, code = \"ARCA_ERROR\", options?: ErrorOptions) {\n super(message, options);\n this.code = code;\n }\n}\n\n/** Thrown when the ARCA client configuration is missing or invalid. */\nexport class ArcaConfigurationError extends ArcaError {\n override readonly name: string = \"ArcaConfigurationError\";\n\n constructor(message: string, options?: ErrorOptions) {\n super(message, \"ARCA_CONFIGURATION_ERROR\", options);\n }\n}\n\n/** Stable routing codes for caller-provided input failures. */\nexport type ArcaInputErrorCode =\n | \"ARCA_INPUT_IDEMPOTENCY_MISMATCH\"\n | \"ARCA_INPUT_RESERVATION_NOT_FOUND\"\n | \"ARCA_INPUT_INVALID_DATE\"\n | \"ARCA_INPUT_DATE_OUTSIDE_WINDOW\"\n | \"ARCA_INPUT_INVALID_AMOUNT\"\n | \"ARCA_INPUT_AMOUNT_PRECISION\"\n | \"ARCA_INPUT_AMOUNT_MISMATCH\"\n | \"ARCA_INPUT_INVALID_EXCHANGE_RATE\"\n | \"ARCA_INPUT_INVALID_VALUE\"\n | \"ARCA_INPUT_MISSING_FIELD\"\n | \"ARCA_INPUT_RESERVED_FIELD\";\n\n/** The first and last day ARCA accepts, both `YYYY-MM-DD` and inclusive. */\nexport type VoucherDateWindow = { from: string; to: string };\n\nexport type ArcaInputErrorOptions = ErrorOptions & {\n code: ArcaInputErrorCode;\n field?: string;\n expected?: string;\n window?: VoucherDateWindow;\n};\n\n/**\n * Thrown when caller-provided input data is missing or invalid. From\n * `issue()`, `issueCreditNote()` or `issueDebitNote()` it means that call sent\n * no authorization request, so ARCA issued nothing for it.\n */\nexport class ArcaInputError extends ArcaError {\n declare readonly code: ArcaInputErrorCode;\n override readonly name: string = \"ArcaInputError\";\n readonly field?: string;\n readonly expected?: string;\n /** With `ARCA_INPUT_DATE_OUTSIDE_WINDOW`, the dates ARCA accepts today. */\n readonly window?: VoucherDateWindow;\n\n constructor(message: string, options: ArcaInputErrorOptions) {\n super(message, options.code, options);\n this.field = options.field;\n this.expected = options.expected;\n this.window = options.window;\n }\n}\n\n/** Stable reasons exposed for explicit ARCA authentication rejections. */\nexport type ArcaAuthenticationReason =\n | \"invalid_token\"\n | \"unauthorized_computer\"\n | \"missing_relationship\"\n | \"authentication_rejected\";\n\nexport type ArcaAuthenticationErrorOptions = ErrorOptions & {\n reason: ArcaAuthenticationReason;\n service: ArcaServiceName;\n operation: string;\n providerCode?: string | number;\n};\n\n/** Thrown when ARCA explicitly rejects credentials before an operation runs. */\nexport class ArcaAuthenticationError extends ArcaError {\n declare readonly code: \"ARCA_AUTHENTICATION_ERROR\";\n override readonly name: string = \"ArcaAuthenticationError\";\n readonly reason: ArcaAuthenticationReason;\n readonly service: ArcaServiceName;\n readonly operation: string;\n readonly providerCode?: string | number;\n\n constructor(message: string, options: ArcaAuthenticationErrorOptions) {\n super(\n redactDiagnosticPreview(message),\n \"ARCA_AUTHENTICATION_ERROR\",\n options\n );\n this.reason = options.reason;\n this.service = options.service;\n this.operation = options.operation;\n this.providerCode = normalizeProviderCode(options.providerCode);\n }\n}\n\n/** Narrows unknown failures to the explicit authentication error contract. */\nexport function isArcaAuthenticationError(\n error: unknown\n): error is ArcaAuthenticationError {\n return error instanceof ArcaAuthenticationError;\n}\n\n/** Thrown when an HTTP request to an ARCA endpoint fails at the transport level. */\nexport class ArcaTransportError extends ArcaError {\n override readonly name: string = \"ArcaTransportError\";\n readonly statusCode?: number;\n readonly contentType?: string;\n readonly responseBodyLength?: number;\n readonly responseBodyPreview?: string;\n\n constructor(\n message: string,\n options?: ErrorOptions & {\n statusCode?: number;\n contentType?: string;\n responseBodyLength?: number;\n responseBodyPreview?: string;\n }\n ) {\n super(message, \"ARCA_TRANSPORT_ERROR\", options);\n this.statusCode = options?.statusCode;\n this.contentType = options?.contentType;\n this.responseBodyLength = options?.responseBodyLength;\n this.responseBodyPreview =\n options?.responseBodyPreview === undefined\n ? undefined\n : redactDiagnosticPreview(options.responseBodyPreview);\n }\n}\n\n/** Thrown when the SOAP response contains a Fault element. */\nexport class ArcaSoapFaultError extends ArcaError {\n override readonly name: string = \"ArcaSoapFaultError\";\n readonly faultCode?: string;\n\n constructor(\n message: string,\n options?: ErrorOptions & {\n faultCode?: string;\n }\n ) {\n super(redactDiagnosticPreview(message), \"ARCA_SOAP_FAULT\", options);\n this.faultCode =\n options?.faultCode === undefined\n ? undefined\n : redactDiagnosticPreview(options.faultCode);\n }\n}\n\n/** Thrown when a response cannot be parsed as a valid SOAP envelope. */\nexport class ArcaInvalidSoapResponseError extends ArcaError {\n override readonly name: string = \"ArcaInvalidSoapResponseError\";\n readonly service?: ArcaServiceName;\n readonly operation?: string;\n readonly endpointUrl?: string;\n readonly statusCode?: number;\n readonly contentType?: string;\n readonly responseBodyLength?: number;\n readonly responseBodyPreview?: string;\n\n constructor(\n message: string,\n options?: ErrorOptions & {\n service?: ArcaServiceName;\n operation?: string;\n endpointUrl?: string;\n statusCode?: number;\n contentType?: string;\n responseBodyLength?: number;\n responseBodyPreview?: string;\n }\n ) {\n super(message, \"ARCA_INVALID_SOAP_RESPONSE\", options);\n this.service = options?.service;\n this.operation = options?.operation;\n this.endpointUrl = options?.endpointUrl;\n this.statusCode = options?.statusCode;\n this.contentType = options?.contentType;\n this.responseBodyLength = options?.responseBodyLength;\n this.responseBodyPreview =\n options?.responseBodyPreview === undefined\n ? undefined\n : redactDiagnosticPreview(options.responseBodyPreview);\n }\n}\n\n/** Thrown when an ARCA service (WSFE, WSMTXCA, Padron) returns a domain-level error. */\nexport class ArcaServiceError extends ArcaError {\n override readonly name: string = \"ArcaServiceError\";\n readonly serviceCode?: string | number;\n readonly service?: ArcaServiceName;\n readonly operation?: string;\n readonly result?: string;\n readonly resultLevel?: ArcaFiscalResultLevel;\n readonly results?: ArcaFiscalResults;\n readonly cae?: string;\n readonly issues?: readonly ArcaFiscalIssue[];\n\n constructor(\n message: string,\n options?: ErrorOptions & {\n serviceCode?: string | number;\n service?: ArcaServiceName;\n operation?: string;\n result?: string;\n resultLevel?: ArcaFiscalResultLevel;\n results?: ArcaFiscalResults;\n cae?: string;\n issues?: readonly ArcaFiscalIssue[];\n }\n ) {\n super(message, \"ARCA_SERVICE_ERROR\", options);\n this.serviceCode = options?.serviceCode;\n this.service = options?.service;\n this.operation = options?.operation;\n this.result = options?.result;\n this.resultLevel = options?.resultLevel;\n this.results = options?.results;\n this.cae = options?.cae;\n this.issues = options?.issues;\n }\n}\n\nfunction normalizeProviderCode(\n providerCode: string | number | undefined\n): string | number | undefined {\n if (typeof providerCode === \"number\") {\n return Number.isFinite(providerCode) ? providerCode : undefined;\n }\n if (typeof providerCode === \"string\") {\n return redactDiagnosticPreview(providerCode, 512);\n }\n return undefined;\n}\n\n/**\n * Narrow error evidence, safe to log or store: the typed fields the error\n * classes declare, never a cause, stack, raw response, response body preview,\n * endpoint URL, fiscal issues or CAE.\n */\nexport type ArcaSafeErrorMetadata = {\n name: string;\n message: string;\n code?: string;\n statusCode?: number;\n contentType?: string;\n service?: ArcaServiceName;\n operation?: string;\n /** ArcaAuthenticationError's stable reason. */\n reason?: ArcaAuthenticationReason;\n providerCode?: string | number;\n faultCode?: string;\n field?: string;\n expected?: string;\n window?: VoucherDateWindow;\n /** ArcaServiceError's provider code, always as a string. */\n serviceCode?: string;\n result?: string;\n resultLevel?: ArcaFiscalResultLevel;\n};\n\nexport function toArcaSafeErrorMetadata(error: unknown): ArcaSafeErrorMetadata {\n if (!(error instanceof Error)) {\n return { name: \"UnknownError\", message: String(error) };\n }\n const metadata: ArcaSafeErrorMetadata = {\n name: error.name,\n message: error.message,\n };\n if (!(error instanceof ArcaError)) {\n return metadata;\n }\n const fields: Partial<ArcaSafeErrorMetadata> = { code: error.code };\n if (error instanceof ArcaInputError) {\n Object.assign(fields, {\n field: error.field,\n expected: error.expected,\n window: error.window,\n });\n } else if (error instanceof ArcaAuthenticationError) {\n Object.assign(fields, {\n service: error.service,\n operation: error.operation,\n reason: error.reason,\n providerCode: error.providerCode,\n });\n } else if (error instanceof ArcaTransportError) {\n Object.assign(fields, {\n statusCode: error.statusCode,\n contentType: error.contentType,\n });\n } else if (error instanceof ArcaSoapFaultError) {\n Object.assign(fields, { faultCode: error.faultCode });\n } else if (error instanceof ArcaInvalidSoapResponseError) {\n Object.assign(fields, {\n service: error.service,\n operation: error.operation,\n statusCode: error.statusCode,\n contentType: error.contentType,\n });\n } else if (error instanceof ArcaServiceError) {\n Object.assign(fields, {\n service: error.service,\n operation: error.operation,\n serviceCode:\n error.serviceCode === undefined ? undefined : String(error.serviceCode),\n result: error.result,\n resultLevel: error.resultLevel,\n });\n }\n for (const [key, value] of Object.entries(fields)) {\n if (value !== undefined) {\n (metadata as Record<string, unknown>)[key] = value;\n }\n }\n return metadata;\n}\n"],"mappings":"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","names":[]}
|