@dwast/verifactu-lib 0.1.0-beta.6 → 0.1.0-beta.8
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/cjs/aeat/client.d.ts +10 -17
- package/dist/cjs/aeat/client.d.ts.map +1 -1
- package/dist/cjs/aeat/client.js +9 -15
- package/dist/cjs/aeat/client.js.map +1 -1
- package/dist/cjs/integration/accountability.d.ts +3 -2
- package/dist/cjs/integration/accountability.d.ts.map +1 -1
- package/dist/cjs/integration/accountability.js +1 -1
- package/dist/cjs/integration/accountability.js.map +1 -1
- package/dist/cjs/integration/index.d.ts +1 -0
- package/dist/cjs/integration/index.d.ts.map +1 -1
- package/dist/cjs/integration/index.js +1 -0
- package/dist/cjs/integration/index.js.map +1 -1
- package/dist/cjs/integration/p12.d.ts +28 -0
- package/dist/cjs/integration/p12.d.ts.map +1 -1
- package/dist/cjs/integration/p12.js +29 -0
- package/dist/cjs/integration/p12.js.map +1 -1
- package/dist/cjs/integration/validate.d.ts +54 -0
- package/dist/cjs/integration/validate.d.ts.map +1 -0
- package/dist/cjs/integration/validate.js +124 -0
- package/dist/cjs/integration/validate.js.map +1 -0
- package/dist/esm/aeat/client.d.ts +10 -17
- package/dist/esm/aeat/client.d.ts.map +1 -1
- package/dist/esm/aeat/client.js +9 -15
- package/dist/esm/aeat/client.js.map +1 -1
- package/dist/esm/integration/accountability.d.ts +3 -2
- package/dist/esm/integration/accountability.d.ts.map +1 -1
- package/dist/esm/integration/accountability.js +1 -1
- package/dist/esm/integration/accountability.js.map +1 -1
- package/dist/esm/integration/index.d.ts +1 -0
- package/dist/esm/integration/index.d.ts.map +1 -1
- package/dist/esm/integration/index.js +1 -0
- package/dist/esm/integration/index.js.map +1 -1
- package/dist/esm/integration/p12.d.ts +28 -0
- package/dist/esm/integration/p12.d.ts.map +1 -1
- package/dist/esm/integration/p12.js +28 -0
- package/dist/esm/integration/p12.js.map +1 -1
- package/dist/esm/integration/validate.d.ts +54 -0
- package/dist/esm/integration/validate.d.ts.map +1 -0
- package/dist/esm/integration/validate.js +121 -0
- package/dist/esm/integration/validate.js.map +1 -0
- package/package.json +1 -1
- package/readme.md +23 -4
- package/src/aeat/client.ts +11 -23
- package/src/integration/accountability.ts +4 -4
- package/src/integration/index.ts +1 -0
- package/src/integration/p12.ts +52 -0
- package/src/integration/validate.ts +171 -0
|
@@ -58,11 +58,7 @@ export type VerifactuEnv = 'production' | 'test' | 'development';
|
|
|
58
58
|
* `key` (PEM) extraídos de un `.p12` (ver `readP12` en `integration/p12.ts`).
|
|
59
59
|
*/
|
|
60
60
|
export interface VerifactuClientConfig {
|
|
61
|
-
/** URL
|
|
62
|
-
baseUrl?: string;
|
|
63
|
-
/** URL del endpoint SOAP del servicio AEAT en PRUEBAS/desarrollo. */
|
|
64
|
-
testBaseUrl?: string;
|
|
65
|
-
/** Entorno de ejecución. Si no es `production`, se usa `testBaseUrl`. */
|
|
61
|
+
/** Entorno de ejecución. Solo `production` usa la URL de producción; el resto usa la de pruebas. */
|
|
66
62
|
env?: VerifactuEnv;
|
|
67
63
|
/** Token de autenticación (OAuth) alternativo al certificado. */
|
|
68
64
|
authToken?: string;
|
|
@@ -84,24 +80,21 @@ export interface VerifactuClientConfig {
|
|
|
84
80
|
* 1. `config.env` (si se pasa explícito).
|
|
85
81
|
* 2. Variable de entorno `VERIFACTU_ENV` (si está definida).
|
|
86
82
|
* 3. Variable de entorno `NODE_ENV` (si está definida).
|
|
87
|
-
* 4. `test` (por defecto)
|
|
88
|
-
*
|
|
89
|
-
*
|
|
83
|
+
* 4. `test` (por defecto).
|
|
84
|
+
*
|
|
85
|
+
* Regla: **solo `production` usa la URL de producción; cualquier otro valor
|
|
86
|
+
* (o ninguno) usa `test`**. Así nunca se envían facturas reales a producción
|
|
87
|
+
* por un valor de entorno inesperado.
|
|
90
88
|
*/
|
|
91
89
|
export declare function resolveEnv(config: Pick<VerifactuClientConfig, 'env'>): VerifactuEnv;
|
|
92
90
|
/**
|
|
93
91
|
* Resuelve la URL base efectiva según el entorno.
|
|
94
92
|
*
|
|
95
|
-
* Regla: **
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
* - Si el entorno es `test`/`development`, usa `testBaseUrl` o, si no se
|
|
99
|
-
* aporta, la URL de pruebas de AEAT (`AEAT_TEST_SOAP_URL`).
|
|
100
|
-
*
|
|
101
|
-
* Así, para hacer pruebas basta con `new VerifactuClient({ env: 'test', cert, key })`
|
|
102
|
-
* o con `VERIFACTU_ENV=test` en el entorno, sin conocer la URL de desarrollo.
|
|
93
|
+
* Regla: **solo `production` usa la URL de producción; cualquier otro valor
|
|
94
|
+
* (o ninguno) usa la URL de pruebas** (`AEAT_TEST_SOAP_URL`). Así nunca se
|
|
95
|
+
* envían facturas reales a producción por un valor de entorno inesperado.
|
|
103
96
|
*/
|
|
104
|
-
export declare function resolveBaseUrl(config: Pick<VerifactuClientConfig, '
|
|
97
|
+
export declare function resolveBaseUrl(config: Pick<VerifactuClientConfig, 'env'>): string;
|
|
105
98
|
export interface SendResult {
|
|
106
99
|
/** Identificador de la operación devuelto por AEAT. */
|
|
107
100
|
operationId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAExI;;;GAGG;AACH,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,cAAc,oGACwE,CAAC;AAEpG;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,6FACuD,CAAC;AAC7F,eAAO,MAAM,kBAAkB,+EAC+C,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,iCAAiC,iGACkD,CAAC;AACjG,eAAO,MAAM,2BAA2B,mFAC0C,CAAC;AAEnF;;GAEG;AACH,eAAO,MAAM,uBAAuB,+BAA+B,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,mBAAmB,qIACoG,CAAC;AAErI;;GAEG;AACH,eAAO,MAAM,uBAAuB,4HACuF,CAAC;AAE5H;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,MAAM,GAAG,aAAa,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/aeat/client.js
CHANGED
|
@@ -58,28 +58,22 @@ exports.AEAT_CONSULTA_NAMESPACE = 'https://www2.agenciatributaria.gob.es/static_
|
|
|
58
58
|
* 1. `config.env` (si se pasa explícito).
|
|
59
59
|
* 2. Variable de entorno `VERIFACTU_ENV` (si está definida).
|
|
60
60
|
* 3. Variable de entorno `NODE_ENV` (si está definida).
|
|
61
|
-
* 4. `test` (por defecto)
|
|
62
|
-
*
|
|
63
|
-
*
|
|
61
|
+
* 4. `test` (por defecto).
|
|
62
|
+
*
|
|
63
|
+
* Regla: **solo `production` usa la URL de producción; cualquier otro valor
|
|
64
|
+
* (o ninguno) usa `test`**. Así nunca se envían facturas reales a producción
|
|
65
|
+
* por un valor de entorno inesperado.
|
|
64
66
|
*/
|
|
65
67
|
function resolveEnv(config) {
|
|
66
68
|
const raw = config.env ?? process.env.VERIFACTU_ENV ?? process.env.NODE_ENV ?? 'test';
|
|
67
|
-
|
|
68
|
-
return raw;
|
|
69
|
-
}
|
|
70
|
-
throw new Error(`Entorno VERIFACTU inválido: "${raw}". Usa "production", "test" o "development".`);
|
|
69
|
+
return raw === 'production' ? 'production' : 'test';
|
|
71
70
|
}
|
|
72
71
|
/**
|
|
73
72
|
* Resuelve la URL base efectiva según el entorno.
|
|
74
73
|
*
|
|
75
|
-
* Regla: **
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* - Si el entorno es `test`/`development`, usa `testBaseUrl` o, si no se
|
|
79
|
-
* aporta, la URL de pruebas de AEAT (`AEAT_TEST_SOAP_URL`).
|
|
80
|
-
*
|
|
81
|
-
* Así, para hacer pruebas basta con `new VerifactuClient({ env: 'test', cert, key })`
|
|
82
|
-
* o con `VERIFACTU_ENV=test` en el entorno, sin conocer la URL de desarrollo.
|
|
74
|
+
* Regla: **solo `production` usa la URL de producción; cualquier otro valor
|
|
75
|
+
* (o ninguno) usa la URL de pruebas** (`AEAT_TEST_SOAP_URL`). Así nunca se
|
|
76
|
+
* envían facturas reales a producción por un valor de entorno inesperado.
|
|
83
77
|
*/
|
|
84
78
|
function resolveBaseUrl(config) {
|
|
85
79
|
const env = resolveEnv(config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Invoice } from '../core/models/invoice.js';
|
|
2
|
+
import { type VerifactuEnv } from '../aeat/client.js';
|
|
2
3
|
import type { VerifactuRepository, StoredRecord } from './repository.js';
|
|
3
4
|
/**
|
|
4
5
|
* Configuración de la integración de accountability (contabilidad).
|
|
@@ -8,8 +9,8 @@ import type { VerifactuRepository, StoredRecord } from './repository.js';
|
|
|
8
9
|
* siempre en `nif` (la librería no interpreta los campos del certificado).
|
|
9
10
|
*/
|
|
10
11
|
export interface AccountabilityConfig {
|
|
11
|
-
/** URL
|
|
12
|
-
|
|
12
|
+
/** Entorno de ejecución. Solo `production` usa la URL de producción; el resto usa la de pruebas. */
|
|
13
|
+
env?: VerifactuEnv;
|
|
13
14
|
/** NIF del emisor. */
|
|
14
15
|
nif: string;
|
|
15
16
|
/** Certificado de cliente en PEM (mTLS). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountability.d.ts","sourceRoot":"","sources":["../../../src/integration/accountability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"accountability.d.ts","sourceRoot":"","sources":["../../../src/integration/accountability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAKzD,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzE;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,oGAAoG;IACpG,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,sBAAsB;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAGV,UAAU,EAAE,mBAAmB,EAChD,MAAM,EAAE,oBAAoB;IAwB9B;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CA0D/D"}
|
|
@@ -34,7 +34,7 @@ class AccountabilityService {
|
|
|
34
34
|
throw new Error('AccountabilityService requiere un .p12 (p12Buffer + p12Password) o cert/key PEM.');
|
|
35
35
|
}
|
|
36
36
|
this.nif = config.nif;
|
|
37
|
-
this.client = new client_js_1.VerifactuClient({
|
|
37
|
+
this.client = new client_js_1.VerifactuClient({ env: config.env, cert, key });
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Registra una factura (alta) ante la AEAT, usando el certificado del
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountability.js","sourceRoot":"","sources":["../../../src/integration/accountability.ts"],"names":[],"mappings":";;;AACA,2DAA8D;AAC9D,oDAA4D;AAC5D,4CAAkD;AAClD,mDAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"accountability.js","sourceRoot":"","sources":["../../../src/integration/accountability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integration/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integration/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
|
|
@@ -18,4 +18,5 @@ __exportStar(require("./repository.js"), exports);
|
|
|
18
18
|
__exportStar(require("./service.js"), exports);
|
|
19
19
|
__exportStar(require("./p12.js"), exports);
|
|
20
20
|
__exportStar(require("./accountability.js"), exports);
|
|
21
|
+
__exportStar(require("./validate.js"), exports);
|
|
21
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integration/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,+CAA6B;AAC7B,2CAAyB;AACzB,sDAAoC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integration/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,+CAA6B;AAC7B,2CAAyB;AACzB,sDAAoC;AACpC,gDAA8B"}
|
|
@@ -46,6 +46,34 @@ export interface CertificateInfo {
|
|
|
46
46
|
/** Nombre o razón social del titular. */
|
|
47
47
|
nombreRazon: string;
|
|
48
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Campos decodificados de un certificado en PEM (para mostrar/validar).
|
|
51
|
+
*/
|
|
52
|
+
export interface DecodedCertificate {
|
|
53
|
+
/** NIF del titular. */
|
|
54
|
+
nif?: string;
|
|
55
|
+
/** Nombre o razón social del titular. */
|
|
56
|
+
nombreRazon?: string;
|
|
57
|
+
/** NIF del obligado representado (si el certificado es de un representante, `(R: X)`). */
|
|
58
|
+
representedNif?: string;
|
|
59
|
+
/** Número de serie del certificado. */
|
|
60
|
+
serialNumber?: string;
|
|
61
|
+
/** Emisor (CN u O del issuer). */
|
|
62
|
+
issuer?: string;
|
|
63
|
+
/** Sujeto (CN). */
|
|
64
|
+
subject?: string;
|
|
65
|
+
/** Fecha de validez desde (ISO). */
|
|
66
|
+
validFrom?: string;
|
|
67
|
+
/** Fecha de validez hasta (ISO). */
|
|
68
|
+
validTo?: string;
|
|
69
|
+
/** `true` si el certificado está caducado. */
|
|
70
|
+
expired?: boolean;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Decodifica los campos de un certificado en PEM. Devuelve un objeto vacío si
|
|
74
|
+
* no se puede parsear.
|
|
75
|
+
*/
|
|
76
|
+
export declare function decodeCertificate(pem: string): DecodedCertificate;
|
|
49
77
|
/**
|
|
50
78
|
* Extrae el NIF y el nombre/razón del titular de un certificado en PEM.
|
|
51
79
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p12.d.ts","sourceRoot":"","sources":["../../../src/integration/p12.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,0CAA0C;IAC1C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CA6BpE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBpE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAuC1E"}
|
|
1
|
+
{"version":3,"file":"p12.d.ts","sourceRoot":"","sources":["../../../src/integration/p12.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,0CAA0C;IAC1C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CA6BpE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBpE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAsBjE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAuC1E"}
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.readP12 = readP12;
|
|
7
7
|
exports.extractNifFromCertificate = extractNifFromCertificate;
|
|
8
|
+
exports.decodeCertificate = decodeCertificate;
|
|
8
9
|
exports.extractCertificateInfo = extractCertificateInfo;
|
|
9
10
|
const node_forge_1 = __importDefault(require("node-forge"));
|
|
10
11
|
/**
|
|
@@ -73,6 +74,34 @@ function extractNifFromCertificate(pem) {
|
|
|
73
74
|
return null;
|
|
74
75
|
}
|
|
75
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Decodifica los campos de un certificado en PEM. Devuelve un objeto vacío si
|
|
79
|
+
* no se puede parsear.
|
|
80
|
+
*/
|
|
81
|
+
function decodeCertificate(pem) {
|
|
82
|
+
try {
|
|
83
|
+
const cert = node_forge_1.default.pki.certificateFromPem(pem);
|
|
84
|
+
const info = extractCertificateInfo(pem);
|
|
85
|
+
const now = new Date();
|
|
86
|
+
const validTo = cert.validity.notAfter;
|
|
87
|
+
const cn = cert.subject.getField('CN')?.value;
|
|
88
|
+
const representedNif = typeof cn === 'string' ? (cn.match(/\(R:\s*([A-Z0-9]{8,9})\)/i)?.[1] ?? undefined) : undefined;
|
|
89
|
+
return {
|
|
90
|
+
nif: info?.nif,
|
|
91
|
+
nombreRazon: info?.nombreRazon,
|
|
92
|
+
representedNif,
|
|
93
|
+
serialNumber: cert.serialNumber,
|
|
94
|
+
issuer: cert.issuer.getField('CN')?.value ?? cert.issuer.getField('O')?.value,
|
|
95
|
+
subject: cn,
|
|
96
|
+
validFrom: cert.validity.notBefore.toISOString(),
|
|
97
|
+
validTo: validTo.toISOString(),
|
|
98
|
+
expired: validTo.getTime() < now.getTime(),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return {};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
76
105
|
/**
|
|
77
106
|
* Extrae el NIF y el nombre/razón del titular de un certificado en PEM.
|
|
78
107
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p12.js","sourceRoot":"","sources":["../../../src/integration/p12.ts"],"names":[],"mappings":";;;;;AAkCA,0BA6BC;AASD,8DAuBC;
|
|
1
|
+
{"version":3,"file":"p12.js","sourceRoot":"","sources":["../../../src/integration/p12.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type VerifactuEnv } from '../aeat/client.js';
|
|
2
|
+
import { type DecodedCertificate } from './p12.js';
|
|
3
|
+
/**
|
|
4
|
+
* Respuesta de AEAT a la factura de prueba de validación.
|
|
5
|
+
*/
|
|
6
|
+
export interface AeatValidationResponse {
|
|
7
|
+
/** Estado devuelto por AEAT (`OK` | `ERROR`). */
|
|
8
|
+
status: string;
|
|
9
|
+
/** Mensaje de AEAT. */
|
|
10
|
+
message?: string;
|
|
11
|
+
/** CSV de la factura de prueba (si AEAT la aceptó). */
|
|
12
|
+
csv?: string;
|
|
13
|
+
/** Identificador de la operación. */
|
|
14
|
+
operationId?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Resultado de la validación de un `.p12` contra AEAT.
|
|
18
|
+
*/
|
|
19
|
+
export interface P12ValidationResult {
|
|
20
|
+
/** `true` si AEAT aceptó la factura de prueba con este certificado. */
|
|
21
|
+
valid: boolean;
|
|
22
|
+
/** Campos decodificados del certificado (para mostrar/validar la pass). */
|
|
23
|
+
certificate?: DecodedCertificate;
|
|
24
|
+
/** Respuesta de AEAT a la factura de prueba. */
|
|
25
|
+
aeat?: AeatValidationResponse;
|
|
26
|
+
/** Mensaje informativo. */
|
|
27
|
+
message?: string;
|
|
28
|
+
/** Descripción del error cuando la validación falla. */
|
|
29
|
+
error?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ValidateP12Options {
|
|
32
|
+
/** Entorno contra el que validar. Por defecto `test` (desarrollo). */
|
|
33
|
+
env?: VerifactuEnv;
|
|
34
|
+
/** Timeout de la petición en ms. */
|
|
35
|
+
timeoutMs?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Valida un `.p12`/`.pfx` contra el entorno de AEAT indicado (por defecto el
|
|
39
|
+
* de **pruebas/desarrollo**).
|
|
40
|
+
*
|
|
41
|
+
* Pasos:
|
|
42
|
+
* 1. Lee el `.p12` y extrae certificado + clave privada (valida la contraseña).
|
|
43
|
+
* 2. Decodifica los campos del certificado (NIF, nombre, validez, emisor...).
|
|
44
|
+
* 3. Construye un `VerifactuClient` con mTLS y **emite una factura de prueba**
|
|
45
|
+
* en el entorno indicado. Si AEAT la acepta, el certificado es válido.
|
|
46
|
+
*
|
|
47
|
+
* Devuelve los campos decodificados (para mostrar) y la respuesta de AEAT.
|
|
48
|
+
*
|
|
49
|
+
* @param buffer Contenido del `.p12`/`.pfx`.
|
|
50
|
+
* @param password Contraseña del `.p12`.
|
|
51
|
+
* @param options Entorno y timeout.
|
|
52
|
+
*/
|
|
53
|
+
export declare function validateP12AgainstAEAT(buffer: Buffer, password: string, options?: ValidateP12Options): Promise<P12ValidationResult>;
|
|
54
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/integration/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAsD,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAMvG;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,KAAK,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,gDAAgD;IAChD,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CAmG9B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateP12AgainstAEAT = validateP12AgainstAEAT;
|
|
4
|
+
const client_js_1 = require("../aeat/client.js");
|
|
5
|
+
const p12_js_1 = require("./p12.js");
|
|
6
|
+
const chain_js_1 = require("../core/hash/chain.js");
|
|
7
|
+
const generator_js_1 = require("../core/xml/generator.js");
|
|
8
|
+
const date_js_1 = require("../core/utils/date.js");
|
|
9
|
+
/** Convierte una fecha a `DD-MM-YYYY` (formato XSD `fecha` de AEAT). */
|
|
10
|
+
function toDdMmYyyy(d) {
|
|
11
|
+
const dd = String(d.getDate()).padStart(2, '0');
|
|
12
|
+
const mm = String(d.getMonth() + 1).padStart(2, '0');
|
|
13
|
+
return `${dd}-${mm}-${d.getFullYear()}`;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Valida un `.p12`/`.pfx` contra el entorno de AEAT indicado (por defecto el
|
|
17
|
+
* de **pruebas/desarrollo**).
|
|
18
|
+
*
|
|
19
|
+
* Pasos:
|
|
20
|
+
* 1. Lee el `.p12` y extrae certificado + clave privada (valida la contraseña).
|
|
21
|
+
* 2. Decodifica los campos del certificado (NIF, nombre, validez, emisor...).
|
|
22
|
+
* 3. Construye un `VerifactuClient` con mTLS y **emite una factura de prueba**
|
|
23
|
+
* en el entorno indicado. Si AEAT la acepta, el certificado es válido.
|
|
24
|
+
*
|
|
25
|
+
* Devuelve los campos decodificados (para mostrar) y la respuesta de AEAT.
|
|
26
|
+
*
|
|
27
|
+
* @param buffer Contenido del `.p12`/`.pfx`.
|
|
28
|
+
* @param password Contraseña del `.p12`.
|
|
29
|
+
* @param options Entorno y timeout.
|
|
30
|
+
*/
|
|
31
|
+
async function validateP12AgainstAEAT(buffer, password, options = {}) {
|
|
32
|
+
const env = options.env ?? 'test';
|
|
33
|
+
let content;
|
|
34
|
+
try {
|
|
35
|
+
content = (0, p12_js_1.readP12)(buffer, password);
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
return { valid: false, error: `No se pudo leer el .p12: ${e.message}` };
|
|
39
|
+
}
|
|
40
|
+
const cert = content.certificates[0];
|
|
41
|
+
const key = content.keys[0];
|
|
42
|
+
if (!cert || !key) {
|
|
43
|
+
return { valid: false, error: 'El .p12 no contiene certificado y clave privada.' };
|
|
44
|
+
}
|
|
45
|
+
const certificate = (0, p12_js_1.decodeCertificate)(cert);
|
|
46
|
+
// El emisor de la factura es el OBLIGADO (representado). Si el certificado es
|
|
47
|
+
// de un representante, el NIF del obligado está en `representedNif`.
|
|
48
|
+
const obligadoNif = certificate.representedNif ?? certificate.nif ?? '';
|
|
49
|
+
const nombreRazon = certificate.nombreRazon ?? '';
|
|
50
|
+
const client = new client_js_1.VerifactuClient({
|
|
51
|
+
env,
|
|
52
|
+
cert,
|
|
53
|
+
key,
|
|
54
|
+
timeoutMs: options.timeoutMs ?? 15_000,
|
|
55
|
+
});
|
|
56
|
+
// Factura de prueba mínima para validar el certificado end-to-end.
|
|
57
|
+
const now = new Date();
|
|
58
|
+
const numeroInstalacion = `VAL${Date.now()}`;
|
|
59
|
+
const invoice = {
|
|
60
|
+
id: { serie: 'T', numero: `VAL${Date.now()}`, fechaExpedicion: toDdMmYyyy(now) },
|
|
61
|
+
emisor: { nif: obligadoNif, nombreRazon },
|
|
62
|
+
tipoFactura: 'F1',
|
|
63
|
+
tipoDesglose: 'S1',
|
|
64
|
+
descripcion: 'Factura de prueba de validación de certificado',
|
|
65
|
+
destinatarios: [{ nombreRazon, nif: obligadoNif }],
|
|
66
|
+
desglose: {
|
|
67
|
+
detalles: [
|
|
68
|
+
{ calificacionOperacion: 'S1', claveRegimen: '01', tipoImpositivo: 21, baseImponible: 1, cuotaRepercutida: 0.21 },
|
|
69
|
+
],
|
|
70
|
+
cuotaTotal: 0.21,
|
|
71
|
+
importeTotal: 1.21,
|
|
72
|
+
},
|
|
73
|
+
sistemaInformatico: {
|
|
74
|
+
nombreRazon,
|
|
75
|
+
nif: obligadoNif,
|
|
76
|
+
nombreSistemaInformatico: 'VALIDACION',
|
|
77
|
+
idSistemaInformatico: '01',
|
|
78
|
+
version: '1.0',
|
|
79
|
+
numeroInstalacion,
|
|
80
|
+
},
|
|
81
|
+
fechaHoraHusoGenRegistro: (0, date_js_1.nowIsoWithOffset)(),
|
|
82
|
+
huella: '',
|
|
83
|
+
};
|
|
84
|
+
try {
|
|
85
|
+
// El hash se calcula sobre el MISMO `fechaHoraHusoGenRegistro` que va en el
|
|
86
|
+
// XML (si no, la huella no coincide con el contenido y AEAT lo rechaza).
|
|
87
|
+
const hash = (0, chain_js_1.computeRegistroAlta)({
|
|
88
|
+
idEmisorFactura: obligadoNif,
|
|
89
|
+
numSerieFactura: `${invoice.id.serie ?? ''}${invoice.id.numero}`,
|
|
90
|
+
fechaExpedicionFactura: invoice.id.fechaExpedicion,
|
|
91
|
+
tipoFactura: invoice.tipoFactura,
|
|
92
|
+
cuotaTotal: invoice.desglose.cuotaTotal.toFixed(2),
|
|
93
|
+
importeTotal: invoice.desglose.importeTotal.toFixed(2),
|
|
94
|
+
huellaAnterior: null,
|
|
95
|
+
fechaHoraHusoGenRegistro: invoice.fechaHoraHusoGenRegistro,
|
|
96
|
+
});
|
|
97
|
+
invoice.huella = hash;
|
|
98
|
+
const registroAltaXml = (0, generator_js_1.generateInvoiceXml)(invoice, null);
|
|
99
|
+
const cabecera = (0, generator_js_1.buildCabecera)({ nombreRazon, nif: obligadoNif }, cert, p12_js_1.extractCertificateInfo);
|
|
100
|
+
const xml = (0, generator_js_1.generateSuministroXml)(registroAltaXml, cabecera);
|
|
101
|
+
const result = await client.sendRecord(xml);
|
|
102
|
+
return {
|
|
103
|
+
valid: result.status === 'OK',
|
|
104
|
+
certificate,
|
|
105
|
+
aeat: {
|
|
106
|
+
status: result.status,
|
|
107
|
+
message: result.message,
|
|
108
|
+
csv: result.registro?.csv,
|
|
109
|
+
operationId: result.operationId,
|
|
110
|
+
},
|
|
111
|
+
message: result.status === 'OK'
|
|
112
|
+
? `Certificado aceptado por AEAT (${env}). Factura de prueba enviada.`
|
|
113
|
+
: `AEAT respondió con error: ${result.message ?? result.errorCode ?? ''}`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
return {
|
|
118
|
+
valid: false,
|
|
119
|
+
certificate,
|
|
120
|
+
error: `AEAT rechazó el certificado: ${e.message}`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/integration/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,11 +58,7 @@ export type VerifactuEnv = 'production' | 'test' | 'development';
|
|
|
58
58
|
* `key` (PEM) extraídos de un `.p12` (ver `readP12` en `integration/p12.ts`).
|
|
59
59
|
*/
|
|
60
60
|
export interface VerifactuClientConfig {
|
|
61
|
-
/** URL
|
|
62
|
-
baseUrl?: string;
|
|
63
|
-
/** URL del endpoint SOAP del servicio AEAT en PRUEBAS/desarrollo. */
|
|
64
|
-
testBaseUrl?: string;
|
|
65
|
-
/** Entorno de ejecución. Si no es `production`, se usa `testBaseUrl`. */
|
|
61
|
+
/** Entorno de ejecución. Solo `production` usa la URL de producción; el resto usa la de pruebas. */
|
|
66
62
|
env?: VerifactuEnv;
|
|
67
63
|
/** Token de autenticación (OAuth) alternativo al certificado. */
|
|
68
64
|
authToken?: string;
|
|
@@ -84,24 +80,21 @@ export interface VerifactuClientConfig {
|
|
|
84
80
|
* 1. `config.env` (si se pasa explícito).
|
|
85
81
|
* 2. Variable de entorno `VERIFACTU_ENV` (si está definida).
|
|
86
82
|
* 3. Variable de entorno `NODE_ENV` (si está definida).
|
|
87
|
-
* 4. `test` (por defecto)
|
|
88
|
-
*
|
|
89
|
-
*
|
|
83
|
+
* 4. `test` (por defecto).
|
|
84
|
+
*
|
|
85
|
+
* Regla: **solo `production` usa la URL de producción; cualquier otro valor
|
|
86
|
+
* (o ninguno) usa `test`**. Así nunca se envían facturas reales a producción
|
|
87
|
+
* por un valor de entorno inesperado.
|
|
90
88
|
*/
|
|
91
89
|
export declare function resolveEnv(config: Pick<VerifactuClientConfig, 'env'>): VerifactuEnv;
|
|
92
90
|
/**
|
|
93
91
|
* Resuelve la URL base efectiva según el entorno.
|
|
94
92
|
*
|
|
95
|
-
* Regla: **
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
* - Si el entorno es `test`/`development`, usa `testBaseUrl` o, si no se
|
|
99
|
-
* aporta, la URL de pruebas de AEAT (`AEAT_TEST_SOAP_URL`).
|
|
100
|
-
*
|
|
101
|
-
* Así, para hacer pruebas basta con `new VerifactuClient({ env: 'test', cert, key })`
|
|
102
|
-
* o con `VERIFACTU_ENV=test` en el entorno, sin conocer la URL de desarrollo.
|
|
93
|
+
* Regla: **solo `production` usa la URL de producción; cualquier otro valor
|
|
94
|
+
* (o ninguno) usa la URL de pruebas** (`AEAT_TEST_SOAP_URL`). Así nunca se
|
|
95
|
+
* envían facturas reales a producción por un valor de entorno inesperado.
|
|
103
96
|
*/
|
|
104
|
-
export declare function resolveBaseUrl(config: Pick<VerifactuClientConfig, '
|
|
97
|
+
export declare function resolveBaseUrl(config: Pick<VerifactuClientConfig, 'env'>): string;
|
|
105
98
|
export interface SendResult {
|
|
106
99
|
/** Identificador de la operación devuelto por AEAT. */
|
|
107
100
|
operationId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAExI;;;GAGG;AACH,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,cAAc,oGACwE,CAAC;AAEpG;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,6FACuD,CAAC;AAC7F,eAAO,MAAM,kBAAkB,+EAC+C,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,iCAAiC,iGACkD,CAAC;AACjG,eAAO,MAAM,2BAA2B,mFAC0C,CAAC;AAEnF;;GAEG;AACH,eAAO,MAAM,uBAAuB,+BAA+B,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,mBAAmB,qIACoG,CAAC;AAErI;;GAEG;AACH,eAAO,MAAM,uBAAuB,4HACuF,CAAC;AAE5H;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,MAAM,GAAG,aAAa,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/aeat/client.js
CHANGED
|
@@ -50,28 +50,22 @@ export const AEAT_CONSULTA_NAMESPACE = 'https://www2.agenciatributaria.gob.es/st
|
|
|
50
50
|
* 1. `config.env` (si se pasa explícito).
|
|
51
51
|
* 2. Variable de entorno `VERIFACTU_ENV` (si está definida).
|
|
52
52
|
* 3. Variable de entorno `NODE_ENV` (si está definida).
|
|
53
|
-
* 4. `test` (por defecto)
|
|
54
|
-
*
|
|
55
|
-
*
|
|
53
|
+
* 4. `test` (por defecto).
|
|
54
|
+
*
|
|
55
|
+
* Regla: **solo `production` usa la URL de producción; cualquier otro valor
|
|
56
|
+
* (o ninguno) usa `test`**. Así nunca se envían facturas reales a producción
|
|
57
|
+
* por un valor de entorno inesperado.
|
|
56
58
|
*/
|
|
57
59
|
export function resolveEnv(config) {
|
|
58
60
|
const raw = config.env ?? process.env.VERIFACTU_ENV ?? process.env.NODE_ENV ?? 'test';
|
|
59
|
-
|
|
60
|
-
return raw;
|
|
61
|
-
}
|
|
62
|
-
throw new Error(`Entorno VERIFACTU inválido: "${raw}". Usa "production", "test" o "development".`);
|
|
61
|
+
return raw === 'production' ? 'production' : 'test';
|
|
63
62
|
}
|
|
64
63
|
/**
|
|
65
64
|
* Resuelve la URL base efectiva según el entorno.
|
|
66
65
|
*
|
|
67
|
-
* Regla: **
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* - Si el entorno es `test`/`development`, usa `testBaseUrl` o, si no se
|
|
71
|
-
* aporta, la URL de pruebas de AEAT (`AEAT_TEST_SOAP_URL`).
|
|
72
|
-
*
|
|
73
|
-
* Así, para hacer pruebas basta con `new VerifactuClient({ env: 'test', cert, key })`
|
|
74
|
-
* o con `VERIFACTU_ENV=test` en el entorno, sin conocer la URL de desarrollo.
|
|
66
|
+
* Regla: **solo `production` usa la URL de producción; cualquier otro valor
|
|
67
|
+
* (o ninguno) usa la URL de pruebas** (`AEAT_TEST_SOAP_URL`). Así nunca se
|
|
68
|
+
* envían facturas reales a producción por un valor de entorno inesperado.
|
|
75
69
|
*/
|
|
76
70
|
export function resolveBaseUrl(config) {
|
|
77
71
|
const env = resolveEnv(config);
|