@ramiidv/arca-sdk 0.1.0 → 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.
- package/README.md +251 -136
- package/dist/arca.d.ts +88 -2
- package/dist/arca.d.ts.map +1 -1
- package/dist/arca.js +138 -5
- package/dist/arca.js.map +1 -1
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +36 -0
- package/dist/constants.js.map +1 -1
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +44 -0
- package/dist/errors.js.map +1 -0
- package/dist/facturacion.d.ts +39 -0
- package/dist/facturacion.d.ts.map +1 -0
- package/dist/facturacion.js +189 -0
- package/dist/facturacion.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/soap-client.d.ts +2 -2
- package/dist/soap-client.d.ts.map +1 -1
- package/dist/soap-client.js +29 -13
- package/dist/soap-client.js.map +1 -1
- package/dist/types.d.ts +96 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/wsaa.d.ts +5 -0
- package/dist/wsaa.d.ts.map +1 -1
- package/dist/wsaa.js +28 -7
- package/dist/wsaa.js.map +1 -1
- package/dist/wsfe.d.ts +6 -1
- package/dist/wsfe.d.ts.map +1 -1
- package/dist/wsfe.js +28 -16
- package/dist/wsfe.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { Arca } from "./arca.js";
|
|
2
|
+
// Errors
|
|
3
|
+
export { ArcaError, ArcaAuthError, ArcaWSFEError, ArcaSoapError, } from "./errors.js";
|
|
2
4
|
// Constants / Enums
|
|
3
|
-
export { ENDPOINTS, WSFE_NAMESPACE, CbteTipo, Concepto, DocTipo, IvaTipo, IVA_RATES, Moneda, TributoTipo, } from "./constants.js";
|
|
5
|
+
export { ENDPOINTS, WSFE_NAMESPACE, CbteTipo, Concepto, DocTipo, IvaTipo, IVA_RATES, Moneda, TributoTipo, NOTA_CREDITO_MAP, NOTA_DEBITO_MAP, } from "./constants.js";
|
|
4
6
|
// Low-level clients (for advanced usage)
|
|
5
7
|
export { WsaaClient } from "./wsaa.js";
|
|
6
8
|
export { WsfeClient } from "./wsfe.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,SAAS;AACT,OAAO,EACL,SAAS,EACT,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAkCrB,oBAAoB;AACpB,OAAO,EACL,SAAS,EACT,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,OAAO,EACP,SAAS,EACT,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,yCAAyC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/soap-client.d.ts
CHANGED
|
@@ -10,10 +10,10 @@ export declare function buildXml(obj: Record<string, any>): string;
|
|
|
10
10
|
* Realiza una llamada SOAP genérica usando fetch nativo.
|
|
11
11
|
* Retorna el XML de respuesta completo.
|
|
12
12
|
*/
|
|
13
|
-
export declare function soapCall(endpoint: string, bodyContent: string, soapAction?: string): Promise<string>;
|
|
13
|
+
export declare function soapCall(endpoint: string, bodyContent: string, soapAction?: string, timeoutMs?: number): Promise<string>;
|
|
14
14
|
/**
|
|
15
15
|
* Realiza una llamada SOAP al WSFE (WSFEv1).
|
|
16
16
|
* Construye el envelope con el namespace correcto y el SOAPAction.
|
|
17
17
|
*/
|
|
18
|
-
export declare function wsfeSoapCall(endpoint: string, method: string, params: Record<string, any
|
|
18
|
+
export declare function wsfeSoapCall(endpoint: string, method: string, params: Record<string, any>, timeoutMs?: number): Promise<Record<string, any>>;
|
|
19
19
|
//# sourceMappingURL=soap-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soap-client.d.ts","sourceRoot":"","sources":["../src/soap-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"soap-client.d.ts","sourceRoot":"","sources":["../src/soap-client.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAEzD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,GAAE,MAAe,GACzB,OAAO,CAAC,MAAM,CAAC,CAgDjB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,SAAS,GAAE,MAAe,GACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAkD9B"}
|
package/dist/soap-client.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { XMLParser, XMLBuilder } from "fast-xml-parser";
|
|
2
|
+
import { ArcaSoapError } from "./errors.js";
|
|
2
3
|
const xmlParser = new XMLParser({
|
|
3
4
|
ignoreAttributes: false,
|
|
4
5
|
attributeNamePrefix: "@_",
|
|
@@ -29,7 +30,7 @@ export function buildXml(obj) {
|
|
|
29
30
|
* Realiza una llamada SOAP genérica usando fetch nativo.
|
|
30
31
|
* Retorna el XML de respuesta completo.
|
|
31
32
|
*/
|
|
32
|
-
export async function soapCall(endpoint, bodyContent, soapAction) {
|
|
33
|
+
export async function soapCall(endpoint, bodyContent, soapAction, timeoutMs = 30_000) {
|
|
33
34
|
const soapEnvelope = `<?xml version="1.0" encoding="utf-8"?>
|
|
34
35
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
|
35
36
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
@@ -44,14 +45,29 @@ export async function soapCall(endpoint, bodyContent, soapAction) {
|
|
|
44
45
|
if (soapAction) {
|
|
45
46
|
headers["SOAPAction"] = `"${soapAction}"`;
|
|
46
47
|
}
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
const controller = new AbortController();
|
|
49
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
50
|
+
let response;
|
|
51
|
+
try {
|
|
52
|
+
response = await fetch(endpoint, {
|
|
53
|
+
method: "POST",
|
|
54
|
+
headers,
|
|
55
|
+
body: soapEnvelope,
|
|
56
|
+
signal: controller.signal,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
if (err?.name === "AbortError") {
|
|
61
|
+
throw new ArcaSoapError(`SOAP request timeout after ${timeoutMs}ms: ${endpoint}`);
|
|
62
|
+
}
|
|
63
|
+
throw new ArcaSoapError(`SOAP request failed: ${err?.message ?? err}`);
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
}
|
|
52
68
|
const responseText = await response.text();
|
|
53
69
|
if (!response.ok) {
|
|
54
|
-
throw new
|
|
70
|
+
throw new ArcaSoapError(`SOAP HTTP ${response.status}: ${response.statusText}\n${responseText}`, response.status);
|
|
55
71
|
}
|
|
56
72
|
return responseText;
|
|
57
73
|
}
|
|
@@ -59,7 +75,7 @@ export async function soapCall(endpoint, bodyContent, soapAction) {
|
|
|
59
75
|
* Realiza una llamada SOAP al WSFE (WSFEv1).
|
|
60
76
|
* Construye el envelope con el namespace correcto y el SOAPAction.
|
|
61
77
|
*/
|
|
62
|
-
export async function wsfeSoapCall(endpoint, method, params) {
|
|
78
|
+
export async function wsfeSoapCall(endpoint, method, params, timeoutMs = 30_000) {
|
|
63
79
|
const namespace = "http://ar.gov.afip.dif.FEV1/";
|
|
64
80
|
const bodyContent = buildXml({
|
|
65
81
|
[method]: {
|
|
@@ -68,31 +84,31 @@ export async function wsfeSoapCall(endpoint, method, params) {
|
|
|
68
84
|
},
|
|
69
85
|
});
|
|
70
86
|
const soapAction = `${namespace}${method}`;
|
|
71
|
-
const responseXml = await soapCall(endpoint, bodyContent, soapAction);
|
|
87
|
+
const responseXml = await soapCall(endpoint, bodyContent, soapAction, timeoutMs);
|
|
72
88
|
const parsed = parseXml(responseXml);
|
|
73
89
|
// Extraer el body del SOAP envelope
|
|
74
90
|
const envelope = parsed["soap:Envelope"] ||
|
|
75
91
|
parsed["soapenv:Envelope"] ||
|
|
76
92
|
parsed["S:Envelope"];
|
|
77
93
|
if (!envelope) {
|
|
78
|
-
throw new
|
|
94
|
+
throw new ArcaSoapError(`Respuesta SOAP inválida:\n${responseXml}`);
|
|
79
95
|
}
|
|
80
96
|
const body = envelope["soap:Body"] || envelope["soapenv:Body"] || envelope["S:Body"];
|
|
81
97
|
if (!body) {
|
|
82
98
|
// Verificar si hay un SOAP Fault
|
|
83
|
-
throw new
|
|
99
|
+
throw new ArcaSoapError(`SOAP Body no encontrado en la respuesta:\n${responseXml}`);
|
|
84
100
|
}
|
|
85
101
|
// Verificar SOAP Fault
|
|
86
102
|
const fault = body["soap:Fault"] || body["soapenv:Fault"] || body["S:Fault"];
|
|
87
103
|
if (fault) {
|
|
88
104
|
const faultString = fault.faultstring || fault.Reason || "Error desconocido";
|
|
89
|
-
throw new
|
|
105
|
+
throw new ArcaSoapError(`SOAP Fault: ${faultString}`);
|
|
90
106
|
}
|
|
91
107
|
const responseKey = `${method}Response`;
|
|
92
108
|
const resultKey = `${method}Result`;
|
|
93
109
|
const methodResponse = body[responseKey];
|
|
94
110
|
if (!methodResponse) {
|
|
95
|
-
throw new
|
|
111
|
+
throw new ArcaSoapError(`Respuesta del método ${method} no encontrada:\n${responseXml}`);
|
|
96
112
|
}
|
|
97
113
|
return methodResponse[resultKey] ?? methodResponse;
|
|
98
114
|
}
|
package/dist/soap-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soap-client.js","sourceRoot":"","sources":["../src/soap-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"soap-client.js","sourceRoot":"","sources":["../src/soap-client.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export interface ArcaConfig {
|
|
|
9
9
|
production?: boolean;
|
|
10
10
|
/** Tiempo de vida del token en minutos (default: 720 = 12 horas) */
|
|
11
11
|
tokenTTLMinutes?: number;
|
|
12
|
+
/** Timeout para requests HTTP en milisegundos (default: 30000 = 30 segundos) */
|
|
13
|
+
requestTimeoutMs?: number;
|
|
12
14
|
}
|
|
13
15
|
export interface AccessTicket {
|
|
14
16
|
token: string;
|
|
@@ -225,4 +227,98 @@ export interface CotizacionResult {
|
|
|
225
227
|
Err: WsError | WsError[];
|
|
226
228
|
};
|
|
227
229
|
}
|
|
230
|
+
export interface LineItem {
|
|
231
|
+
/** Importe neto (sin IVA) */
|
|
232
|
+
neto: number;
|
|
233
|
+
/**
|
|
234
|
+
* Tipo de alícuota IVA (usar enum IvaTipo).
|
|
235
|
+
* Si no se especifica y exento=false, el item se trata como no gravado (ImpTotConc).
|
|
236
|
+
*/
|
|
237
|
+
iva?: number;
|
|
238
|
+
/** Si true, el importe es exento de IVA (va a ImpOpEx) */
|
|
239
|
+
exento?: boolean;
|
|
240
|
+
}
|
|
241
|
+
export interface FacturarOpts {
|
|
242
|
+
/** Punto de venta */
|
|
243
|
+
ptoVta: number;
|
|
244
|
+
/** Tipo de comprobante (usar enum CbteTipo) */
|
|
245
|
+
cbteTipo: number;
|
|
246
|
+
/** Items de la factura con importes netos */
|
|
247
|
+
items: LineItem[];
|
|
248
|
+
/** Concepto. Default: PRODUCTOS. Se auto-detecta SERVICIOS si se provee `servicio` */
|
|
249
|
+
concepto?: number;
|
|
250
|
+
/** Tipo de documento del receptor (usar enum DocTipo). Default: CONSUMIDOR_FINAL */
|
|
251
|
+
docTipo?: number;
|
|
252
|
+
/** Número de documento del receptor. Default: 0 */
|
|
253
|
+
docNro?: number;
|
|
254
|
+
/** Fecha del comprobante (Date o string YYYYMMDD). Default: hoy (timezone Argentina) */
|
|
255
|
+
fecha?: Date | string;
|
|
256
|
+
/** Para servicios: fechas de período y vencimiento de pago */
|
|
257
|
+
servicio?: {
|
|
258
|
+
desde: Date | string;
|
|
259
|
+
hasta: Date | string;
|
|
260
|
+
vtoPago: Date | string;
|
|
261
|
+
};
|
|
262
|
+
/** Código de moneda (usar enum Moneda). Default: PES */
|
|
263
|
+
moneda?: string;
|
|
264
|
+
/** Cotización de la moneda. Default: 1 */
|
|
265
|
+
cotizacion?: number;
|
|
266
|
+
/** Tributos adicionales */
|
|
267
|
+
tributos?: Tributo[];
|
|
268
|
+
/** Datos opcionales (ej: CBU para FCE) */
|
|
269
|
+
opcionales?: Opcional[];
|
|
270
|
+
}
|
|
271
|
+
export interface ComprobanteRef {
|
|
272
|
+
/** Tipo del comprobante original (usar enum CbteTipo) */
|
|
273
|
+
tipo: number;
|
|
274
|
+
/** Punto de venta del comprobante original */
|
|
275
|
+
ptoVta: number;
|
|
276
|
+
/** Número del comprobante original */
|
|
277
|
+
nro: number;
|
|
278
|
+
/** CUIT del emisor (requerido para FCE) */
|
|
279
|
+
cuit?: number;
|
|
280
|
+
/** Fecha del comprobante original (Date o string YYYYMMDD) */
|
|
281
|
+
fecha?: Date | string;
|
|
282
|
+
}
|
|
283
|
+
export interface NotaCreditoOpts extends Omit<FacturarOpts, "cbteTipo"> {
|
|
284
|
+
/** Comprobante original al que se asocia la nota de crédito.
|
|
285
|
+
* El tipo de NC se infiere automáticamente del tipo del comprobante original. */
|
|
286
|
+
comprobanteOriginal: ComprobanteRef;
|
|
287
|
+
}
|
|
288
|
+
export interface NotaDebitoOpts extends Omit<FacturarOpts, "cbteTipo"> {
|
|
289
|
+
/** Comprobante original al que se asocia la nota de débito.
|
|
290
|
+
* El tipo de ND se infiere automáticamente del tipo del comprobante original. */
|
|
291
|
+
comprobanteOriginal: ComprobanteRef;
|
|
292
|
+
}
|
|
293
|
+
export interface Importes {
|
|
294
|
+
total: number;
|
|
295
|
+
neto: number;
|
|
296
|
+
iva: number;
|
|
297
|
+
exento: number;
|
|
298
|
+
noGravado: number;
|
|
299
|
+
tributos: number;
|
|
300
|
+
}
|
|
301
|
+
export interface FacturaResult {
|
|
302
|
+
/** Si el comprobante fue aprobado por ARCA */
|
|
303
|
+
aprobada: boolean;
|
|
304
|
+
/** CAE otorgado (solo si aprobada) */
|
|
305
|
+
cae?: string;
|
|
306
|
+
/** Fecha de vencimiento del CAE en formato YYYYMMDD */
|
|
307
|
+
caeVencimiento?: string;
|
|
308
|
+
/** Número de comprobante asignado */
|
|
309
|
+
cbteNro: number;
|
|
310
|
+
/** Punto de venta */
|
|
311
|
+
ptoVta: number;
|
|
312
|
+
/** Tipo de comprobante */
|
|
313
|
+
cbteTipo: number;
|
|
314
|
+
/** Importes calculados y enviados */
|
|
315
|
+
importes: Importes;
|
|
316
|
+
/** Observaciones de ARCA (pueden existir incluso si fue aprobada) */
|
|
317
|
+
observaciones: {
|
|
318
|
+
code: number;
|
|
319
|
+
msg: string;
|
|
320
|
+
}[];
|
|
321
|
+
/** Resultado crudo de FECAESolicitar */
|
|
322
|
+
raw: FECAESolicitarResult;
|
|
323
|
+
}
|
|
228
324
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/wsaa.d.ts
CHANGED
|
@@ -5,17 +5,22 @@ export declare class WsaaClient {
|
|
|
5
5
|
private production;
|
|
6
6
|
private tokenTTLMinutes;
|
|
7
7
|
private ticketCache;
|
|
8
|
+
private pendingLogins;
|
|
9
|
+
private timeoutMs;
|
|
8
10
|
constructor(opts: {
|
|
9
11
|
cert: string;
|
|
10
12
|
key: string;
|
|
11
13
|
production: boolean;
|
|
12
14
|
tokenTTLMinutes: number;
|
|
15
|
+
timeoutMs: number;
|
|
13
16
|
});
|
|
14
17
|
/**
|
|
15
18
|
* Obtiene un Ticket de Acceso (TA) para el servicio indicado.
|
|
16
19
|
* Cachea el ticket y lo reutiliza si no expiró.
|
|
20
|
+
* Deduplicates concurrent login requests for the same service.
|
|
17
21
|
*/
|
|
18
22
|
getAccessTicket(service: string): Promise<AccessTicket>;
|
|
23
|
+
private performLogin;
|
|
19
24
|
/**
|
|
20
25
|
* Invalida el ticket cacheado para un servicio.
|
|
21
26
|
*/
|
package/dist/wsaa.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsaa.d.ts","sourceRoot":"","sources":["../src/wsaa.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"wsaa.d.ts","sourceRoot":"","sources":["../src/wsaa.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO/C,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,aAAa,CAAiD;IACtE,OAAO,CAAC,SAAS,CAAS;gBAEd,IAAI,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,OAAO,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KACnB;IAQD;;;;OAIG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;YAsB/C,YAAY;IAM1B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,OAAO,CAAC,SAAS;IAuBjB;;;OAGG;IACH,OAAO,CAAC,OAAO;IAgCf;;OAEG;YACW,QAAQ;CAuDvB"}
|
package/dist/wsaa.js
CHANGED
|
@@ -1,32 +1,53 @@
|
|
|
1
1
|
import forge from "node-forge";
|
|
2
2
|
import { ENDPOINTS, WSAA_NAMESPACE } from "./constants.js";
|
|
3
3
|
import { soapCall, parseXml, buildXml } from "./soap-client.js";
|
|
4
|
+
import { ArcaAuthError } from "./errors.js";
|
|
5
|
+
/** Margen de seguridad antes de considerar un token expirado (2 minutos). */
|
|
6
|
+
const EXPIRY_MARGIN_MS = 2 * 60_000;
|
|
4
7
|
export class WsaaClient {
|
|
5
8
|
cert;
|
|
6
9
|
key;
|
|
7
10
|
production;
|
|
8
11
|
tokenTTLMinutes;
|
|
9
12
|
ticketCache = new Map();
|
|
13
|
+
pendingLogins = new Map();
|
|
14
|
+
timeoutMs;
|
|
10
15
|
constructor(opts) {
|
|
11
16
|
this.cert = opts.cert;
|
|
12
17
|
this.key = opts.key;
|
|
13
18
|
this.production = opts.production;
|
|
14
19
|
this.tokenTTLMinutes = opts.tokenTTLMinutes;
|
|
20
|
+
this.timeoutMs = opts.timeoutMs;
|
|
15
21
|
}
|
|
16
22
|
/**
|
|
17
23
|
* Obtiene un Ticket de Acceso (TA) para el servicio indicado.
|
|
18
24
|
* Cachea el ticket y lo reutiliza si no expiró.
|
|
25
|
+
* Deduplicates concurrent login requests for the same service.
|
|
19
26
|
*/
|
|
20
27
|
async getAccessTicket(service) {
|
|
21
28
|
const cached = this.ticketCache.get(service);
|
|
22
|
-
if (cached && cached.expirationTime
|
|
29
|
+
if (cached && cached.expirationTime.getTime() - Date.now() > EXPIRY_MARGIN_MS) {
|
|
23
30
|
return cached;
|
|
24
31
|
}
|
|
32
|
+
// Dedup: si ya hay un login en curso para este servicio, reusar la promesa
|
|
33
|
+
const pending = this.pendingLogins.get(service);
|
|
34
|
+
if (pending)
|
|
35
|
+
return pending;
|
|
36
|
+
const loginPromise = this.performLogin(service);
|
|
37
|
+
this.pendingLogins.set(service, loginPromise);
|
|
38
|
+
try {
|
|
39
|
+
const ticket = await loginPromise;
|
|
40
|
+
this.ticketCache.set(service, ticket);
|
|
41
|
+
return ticket;
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
this.pendingLogins.delete(service);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async performLogin(service) {
|
|
25
48
|
const tra = this.createTRA(service);
|
|
26
49
|
const cms = this.signTRA(tra);
|
|
27
|
-
|
|
28
|
-
this.ticketCache.set(service, ticket);
|
|
29
|
-
return ticket;
|
|
50
|
+
return this.loginCms(cms);
|
|
30
51
|
}
|
|
31
52
|
/**
|
|
32
53
|
* Invalida el ticket cacheado para un servicio.
|
|
@@ -96,7 +117,7 @@ export class WsaaClient {
|
|
|
96
117
|
? ENDPOINTS.wsaa.production
|
|
97
118
|
: ENDPOINTS.wsaa.testing;
|
|
98
119
|
const soapBody = `<loginCms xmlns="${WSAA_NAMESPACE}"><in0>${cmsBase64}</in0></loginCms>`;
|
|
99
|
-
const responseXml = await soapCall(endpoint, soapBody, "loginCms");
|
|
120
|
+
const responseXml = await soapCall(endpoint, soapBody, "loginCms", this.timeoutMs);
|
|
100
121
|
const parsed = parseXml(responseXml);
|
|
101
122
|
// Navegar la estructura del response SOAP
|
|
102
123
|
const envelope = parsed["soapenv:Envelope"] ||
|
|
@@ -108,7 +129,7 @@ export class WsaaClient {
|
|
|
108
129
|
const loginResponse = body?.loginCmsResponse || body?.["ns2:loginCmsResponse"];
|
|
109
130
|
const loginReturn = loginResponse?.loginCmsReturn || loginResponse?.["ns2:loginCmsReturn"];
|
|
110
131
|
if (!loginReturn) {
|
|
111
|
-
throw new
|
|
132
|
+
throw new ArcaAuthError(`WSAA: respuesta inesperada del servidor.\n${responseXml}`);
|
|
112
133
|
}
|
|
113
134
|
// loginReturn es un XML string embebido, parsearlo
|
|
114
135
|
const taXml = parseXml(loginReturn);
|
|
@@ -117,7 +138,7 @@ export class WsaaClient {
|
|
|
117
138
|
const token = taXml.loginTicketResponse?.credentials?.token ?? credentials?.token;
|
|
118
139
|
const sign = taXml.loginTicketResponse?.credentials?.sign ?? credentials?.sign;
|
|
119
140
|
if (!token || !sign) {
|
|
120
|
-
throw new
|
|
141
|
+
throw new ArcaAuthError(`WSAA: no se pudo obtener token/sign de la respuesta.\n${loginReturn}`);
|
|
121
142
|
}
|
|
122
143
|
const headerExp = taXml.loginTicketResponse?.header?.expirationTime ??
|
|
123
144
|
credentials?.expirationTime;
|
package/dist/wsaa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsaa.js","sourceRoot":"","sources":["../src/wsaa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"wsaa.js","sourceRoot":"","sources":["../src/wsaa.ts"],"names":[],"mappings":"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"}
|
package/dist/wsfe.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { WsfeAuth, InvoiceRequest, FECAESolicitarResult, FECompConsultarResult, ServerStatus, ParamItem, MonedaItem, PtoVentaItem, CotizacionResult } from "./types.js";
|
|
2
2
|
export declare class WsfeClient {
|
|
3
3
|
private endpoint;
|
|
4
|
-
|
|
4
|
+
private timeoutMs;
|
|
5
|
+
constructor(production: boolean, timeoutMs?: number);
|
|
5
6
|
/**
|
|
6
7
|
* Solicita CAE (Código de Autorización Electrónica) para uno o más comprobantes.
|
|
7
8
|
*/
|
|
@@ -22,6 +23,10 @@ export declare class WsfeClient {
|
|
|
22
23
|
* Obtiene los tipos de comprobante disponibles.
|
|
23
24
|
*/
|
|
24
25
|
getTiposComprobante(auth: WsfeAuth): Promise<ParamItem[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Obtiene los tipos de concepto disponibles.
|
|
28
|
+
*/
|
|
29
|
+
getTiposConcepto(auth: WsfeAuth): Promise<ParamItem[]>;
|
|
25
30
|
/**
|
|
26
31
|
* Obtiene los tipos de documento disponibles.
|
|
27
32
|
*/
|
package/dist/wsfe.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsfe.d.ts","sourceRoot":"","sources":["../src/wsfe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wsfe.d.ts","sourceRoot":"","sources":["../src/wsfe.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EAEd,oBAAoB,EAEpB,qBAAqB,EACrB,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,EACZ,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAcpB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;gBAEd,UAAU,EAAE,OAAO,EAAE,SAAS,GAAE,MAAe;IAW3D;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,oBAAoB,CAAC;IA8BhC;;OAEG;IACG,iBAAiB,CACrB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;IAgBlB;;OAEG;IACG,oBAAoB,CACxB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC;IAkBjC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAK3C;;OAEG;IACG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAY/D;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAY5D;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAY7D;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAYvD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAYvD;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAY3D;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAY5D;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAY7D;;OAEG;IACG,aAAa,CACjB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC;IAe5B;;OAEG;IACG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAe1D,OAAO,CAAC,eAAe;CAsExB"}
|
package/dist/wsfe.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ENDPOINTS } from "./constants.js";
|
|
2
2
|
import { wsfeSoapCall } from "./soap-client.js";
|
|
3
|
+
import { ArcaWSFEError } from "./errors.js";
|
|
3
4
|
function toArray(val) {
|
|
4
5
|
if (val === undefined || val === null)
|
|
5
6
|
return [];
|
|
@@ -8,16 +9,17 @@ function toArray(val) {
|
|
|
8
9
|
function checkErrors(result) {
|
|
9
10
|
if (result.Errors) {
|
|
10
11
|
const errs = toArray(result.Errors.Err);
|
|
11
|
-
|
|
12
|
-
throw new Error(`WSFE Error: ${msg}`);
|
|
12
|
+
throw new ArcaWSFEError(errs.map((e) => ({ code: e.Code, msg: e.Msg })));
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
export class WsfeClient {
|
|
16
16
|
endpoint;
|
|
17
|
-
|
|
17
|
+
timeoutMs;
|
|
18
|
+
constructor(production, timeoutMs = 30_000) {
|
|
18
19
|
this.endpoint = production
|
|
19
20
|
? ENDPOINTS.wsfe.production
|
|
20
21
|
: ENDPOINTS.wsfe.testing;
|
|
22
|
+
this.timeoutMs = timeoutMs;
|
|
21
23
|
}
|
|
22
24
|
// ============================================================
|
|
23
25
|
// Facturación
|
|
@@ -40,7 +42,8 @@ export class WsfeClient {
|
|
|
40
42
|
},
|
|
41
43
|
},
|
|
42
44
|
};
|
|
43
|
-
const result = (await wsfeSoapCall(this.endpoint, "FECAESolicitar", params));
|
|
45
|
+
const result = (await wsfeSoapCall(this.endpoint, "FECAESolicitar", params, this.timeoutMs));
|
|
46
|
+
checkErrors(result);
|
|
44
47
|
return result;
|
|
45
48
|
}
|
|
46
49
|
/**
|
|
@@ -51,7 +54,7 @@ export class WsfeClient {
|
|
|
51
54
|
Auth: auth,
|
|
52
55
|
PtoVta: ptoVta,
|
|
53
56
|
CbteTipo: cbteTipo,
|
|
54
|
-
}));
|
|
57
|
+
}, this.timeoutMs));
|
|
55
58
|
checkErrors(result);
|
|
56
59
|
return result.CbteNro;
|
|
57
60
|
}
|
|
@@ -66,7 +69,7 @@ export class WsfeClient {
|
|
|
66
69
|
CbteNro: cbteNro,
|
|
67
70
|
PtoVta: ptoVta,
|
|
68
71
|
},
|
|
69
|
-
}));
|
|
72
|
+
}, this.timeoutMs));
|
|
70
73
|
checkErrors(result);
|
|
71
74
|
return result;
|
|
72
75
|
}
|
|
@@ -77,23 +80,32 @@ export class WsfeClient {
|
|
|
77
80
|
* Verifica el estado de los servidores de ARCA.
|
|
78
81
|
*/
|
|
79
82
|
async serverStatus() {
|
|
80
|
-
const result = await wsfeSoapCall(this.endpoint, "FEDummy", {});
|
|
83
|
+
const result = await wsfeSoapCall(this.endpoint, "FEDummy", {}, this.timeoutMs);
|
|
81
84
|
return result;
|
|
82
85
|
}
|
|
83
86
|
/**
|
|
84
87
|
* Obtiene los tipos de comprobante disponibles.
|
|
85
88
|
*/
|
|
86
89
|
async getTiposComprobante(auth) {
|
|
87
|
-
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposCbte", { Auth: auth });
|
|
90
|
+
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposCbte", { Auth: auth }, this.timeoutMs);
|
|
88
91
|
checkErrors(result);
|
|
89
92
|
const items = result.ResultGet?.CbteTipo;
|
|
90
93
|
return toArray(items);
|
|
91
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Obtiene los tipos de concepto disponibles.
|
|
97
|
+
*/
|
|
98
|
+
async getTiposConcepto(auth) {
|
|
99
|
+
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposConcepto", { Auth: auth }, this.timeoutMs);
|
|
100
|
+
checkErrors(result);
|
|
101
|
+
const items = result.ResultGet?.ConceptoTipo;
|
|
102
|
+
return toArray(items);
|
|
103
|
+
}
|
|
92
104
|
/**
|
|
93
105
|
* Obtiene los tipos de documento disponibles.
|
|
94
106
|
*/
|
|
95
107
|
async getTiposDocumento(auth) {
|
|
96
|
-
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposDoc", { Auth: auth });
|
|
108
|
+
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposDoc", { Auth: auth }, this.timeoutMs);
|
|
97
109
|
checkErrors(result);
|
|
98
110
|
const items = result.ResultGet?.DocTipo;
|
|
99
111
|
return toArray(items);
|
|
@@ -102,7 +114,7 @@ export class WsfeClient {
|
|
|
102
114
|
* Obtiene los tipos de IVA disponibles.
|
|
103
115
|
*/
|
|
104
116
|
async getTiposIva(auth) {
|
|
105
|
-
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposIva", { Auth: auth });
|
|
117
|
+
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposIva", { Auth: auth }, this.timeoutMs);
|
|
106
118
|
checkErrors(result);
|
|
107
119
|
const items = result.ResultGet?.IvaTipo;
|
|
108
120
|
return toArray(items);
|
|
@@ -111,7 +123,7 @@ export class WsfeClient {
|
|
|
111
123
|
* Obtiene las monedas disponibles.
|
|
112
124
|
*/
|
|
113
125
|
async getMonedas(auth) {
|
|
114
|
-
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposMonedas", { Auth: auth });
|
|
126
|
+
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposMonedas", { Auth: auth }, this.timeoutMs);
|
|
115
127
|
checkErrors(result);
|
|
116
128
|
const items = result.ResultGet?.Moneda;
|
|
117
129
|
return toArray(items);
|
|
@@ -120,7 +132,7 @@ export class WsfeClient {
|
|
|
120
132
|
* Obtiene los tipos de tributo disponibles.
|
|
121
133
|
*/
|
|
122
134
|
async getTiposTributo(auth) {
|
|
123
|
-
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposTributos", { Auth: auth });
|
|
135
|
+
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposTributos", { Auth: auth }, this.timeoutMs);
|
|
124
136
|
checkErrors(result);
|
|
125
137
|
const items = result.ResultGet?.TributoTipo;
|
|
126
138
|
return toArray(items);
|
|
@@ -129,7 +141,7 @@ export class WsfeClient {
|
|
|
129
141
|
* Obtiene los tipos de opcionales disponibles.
|
|
130
142
|
*/
|
|
131
143
|
async getTiposOpcional(auth) {
|
|
132
|
-
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposOpcional", { Auth: auth });
|
|
144
|
+
const result = await wsfeSoapCall(this.endpoint, "FEParamGetTiposOpcional", { Auth: auth }, this.timeoutMs);
|
|
133
145
|
checkErrors(result);
|
|
134
146
|
const items = result.ResultGet?.OpcionalTipo;
|
|
135
147
|
return toArray(items);
|
|
@@ -138,7 +150,7 @@ export class WsfeClient {
|
|
|
138
150
|
* Obtiene los puntos de venta habilitados.
|
|
139
151
|
*/
|
|
140
152
|
async getPuntosVenta(auth) {
|
|
141
|
-
const result = await wsfeSoapCall(this.endpoint, "FEParamGetPtosVenta", { Auth: auth });
|
|
153
|
+
const result = await wsfeSoapCall(this.endpoint, "FEParamGetPtosVenta", { Auth: auth }, this.timeoutMs);
|
|
142
154
|
checkErrors(result);
|
|
143
155
|
const items = result.ResultGet?.PtoVenta;
|
|
144
156
|
return toArray(items);
|
|
@@ -150,7 +162,7 @@ export class WsfeClient {
|
|
|
150
162
|
const result = (await wsfeSoapCall(this.endpoint, "FEParamGetCotizacion", {
|
|
151
163
|
Auth: auth,
|
|
152
164
|
MonId: monedaId,
|
|
153
|
-
}));
|
|
165
|
+
}, this.timeoutMs));
|
|
154
166
|
checkErrors(result);
|
|
155
167
|
return result;
|
|
156
168
|
}
|
|
@@ -158,7 +170,7 @@ export class WsfeClient {
|
|
|
158
170
|
* Obtiene la cantidad máxima de registros por request de FECAESolicitar.
|
|
159
171
|
*/
|
|
160
172
|
async getCantMaxRegistros(auth) {
|
|
161
|
-
const result = await wsfeSoapCall(this.endpoint, "FECompTotXRequest", { Auth: auth });
|
|
173
|
+
const result = await wsfeSoapCall(this.endpoint, "FECompTotXRequest", { Auth: auth }, this.timeoutMs);
|
|
162
174
|
checkErrors(result);
|
|
163
175
|
return result.RegXReq ?? 0;
|
|
164
176
|
}
|