@dwast/verifactu-lib 0.1.0-beta.6 → 0.1.0-beta.7

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 (38) hide show
  1. package/dist/cjs/aeat/client.d.ts +5 -3
  2. package/dist/cjs/aeat/client.d.ts.map +1 -1
  3. package/dist/cjs/aeat/client.js +6 -7
  4. package/dist/cjs/aeat/client.js.map +1 -1
  5. package/dist/cjs/integration/index.d.ts +1 -0
  6. package/dist/cjs/integration/index.d.ts.map +1 -1
  7. package/dist/cjs/integration/index.js +1 -0
  8. package/dist/cjs/integration/index.js.map +1 -1
  9. package/dist/cjs/integration/p12.d.ts +28 -0
  10. package/dist/cjs/integration/p12.d.ts.map +1 -1
  11. package/dist/cjs/integration/p12.js +29 -0
  12. package/dist/cjs/integration/p12.js.map +1 -1
  13. package/dist/cjs/integration/validate.d.ts +54 -0
  14. package/dist/cjs/integration/validate.d.ts.map +1 -0
  15. package/dist/cjs/integration/validate.js +124 -0
  16. package/dist/cjs/integration/validate.js.map +1 -0
  17. package/dist/esm/aeat/client.d.ts +5 -3
  18. package/dist/esm/aeat/client.d.ts.map +1 -1
  19. package/dist/esm/aeat/client.js +6 -7
  20. package/dist/esm/aeat/client.js.map +1 -1
  21. package/dist/esm/integration/index.d.ts +1 -0
  22. package/dist/esm/integration/index.d.ts.map +1 -1
  23. package/dist/esm/integration/index.js +1 -0
  24. package/dist/esm/integration/index.js.map +1 -1
  25. package/dist/esm/integration/p12.d.ts +28 -0
  26. package/dist/esm/integration/p12.d.ts.map +1 -1
  27. package/dist/esm/integration/p12.js +28 -0
  28. package/dist/esm/integration/p12.js.map +1 -1
  29. package/dist/esm/integration/validate.d.ts +54 -0
  30. package/dist/esm/integration/validate.d.ts.map +1 -0
  31. package/dist/esm/integration/validate.js +121 -0
  32. package/dist/esm/integration/validate.js.map +1 -0
  33. package/package.json +1 -1
  34. package/readme.md +18 -1
  35. package/src/aeat/client.ts +6 -9
  36. package/src/integration/index.ts +1 -0
  37. package/src/integration/p12.ts +52 -0
  38. package/src/integration/validate.ts +171 -0
@@ -84,9 +84,11 @@ export interface VerifactuClientConfig {
84
84
  * 1. `config.env` (si se pasa explícito).
85
85
  * 2. Variable de entorno `VERIFACTU_ENV` (si está definida).
86
86
  * 3. Variable de entorno `NODE_ENV` (si está definida).
87
- * 4. `test` (por defecto): si no se puede determinar el entorno, se usa la
88
- * URL de pruebas de AEAT para no enviar facturas reales a producción por
89
- * error de configuración.
87
+ * 4. `test` (por defecto).
88
+ *
89
+ * Regla: **solo `production` usa la URL de producción; cualquier otro valor
90
+ * (o ninguno) usa `test`**. Así nunca se envían facturas reales a producción
91
+ * por un valor de entorno inesperado.
90
92
  */
91
93
  export declare function resolveEnv(config: Pick<VerifactuClientConfig, 'env'>): VerifactuEnv;
92
94
  /**
@@ -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,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC,GAAG,YAAY,CAQnF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,SAAS,GAAG,aAAa,GAAG,KAAK,CAAC,GAAG,MAAM,CAM7G;AAED,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,iEAAiE;IACjE,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAYD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAExB,MAAM,EAAE,qBAAqB;IAiBzC;;OAEG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAelD;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE;QACzB,8CAA8C;QAC9C,QAAQ,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,0EAA0E;QAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gEAAgE;QAChE,SAAS,EAAE,MAAM,CAAC;QAClB,qEAAqE;QACrE,OAAO,EAAE,MAAM,CAAC;QAChB,4EAA4E;QAC5E,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,UAAU,CAAC;IAsCvB;;OAEG;IACH,OAAO,CAAC,OAAO;IAwCf;;;;;;OAMG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU;CAyErE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"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"}
@@ -58,16 +58,15 @@ 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): si no se puede determinar el entorno, se usa la
62
- * URL de pruebas de AEAT para no enviar facturas reales a producción por
63
- * error de configuración.
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
- if (raw === 'production' || raw === 'test' || raw === 'development') {
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.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ export * from './repository.js';
2
2
  export * from './service.js';
3
3
  export * from './p12.js';
4
4
  export * from './accountability.js';
5
+ export * from './validate.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -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":"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"}
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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"}
@@ -84,9 +84,11 @@ export interface VerifactuClientConfig {
84
84
  * 1. `config.env` (si se pasa explícito).
85
85
  * 2. Variable de entorno `VERIFACTU_ENV` (si está definida).
86
86
  * 3. Variable de entorno `NODE_ENV` (si está definida).
87
- * 4. `test` (por defecto): si no se puede determinar el entorno, se usa la
88
- * URL de pruebas de AEAT para no enviar facturas reales a producción por
89
- * error de configuración.
87
+ * 4. `test` (por defecto).
88
+ *
89
+ * Regla: **solo `production` usa la URL de producción; cualquier otro valor
90
+ * (o ninguno) usa `test`**. Así nunca se envían facturas reales a producción
91
+ * por un valor de entorno inesperado.
90
92
  */
91
93
  export declare function resolveEnv(config: Pick<VerifactuClientConfig, 'env'>): VerifactuEnv;
92
94
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"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"}
@@ -50,16 +50,15 @@ 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): si no se puede determinar el entorno, se usa la
54
- * URL de pruebas de AEAT para no enviar facturas reales a producción por
55
- * error de configuración.
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
- if (raw === 'production' || raw === 'test' || raw === 'development') {
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.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/aeat/client.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ export * from './repository.js';
2
2
  export * from './service.js';
3
3
  export * from './p12.js';
4
4
  export * from './accountability.js';
5
+ export * from './validate.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -2,4 +2,5 @@ export * from './repository.js';
2
2
  export * from './service.js';
3
3
  export * from './p12.js';
4
4
  export * from './accountability.js';
5
+ export * from './validate.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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.js","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"}
@@ -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"}
@@ -65,6 +65,34 @@ export function extractNifFromCertificate(pem) {
65
65
  return null;
66
66
  }
67
67
  }
68
+ /**
69
+ * Decodifica los campos de un certificado en PEM. Devuelve un objeto vacío si
70
+ * no se puede parsear.
71
+ */
72
+ export function decodeCertificate(pem) {
73
+ try {
74
+ const cert = forge.pki.certificateFromPem(pem);
75
+ const info = extractCertificateInfo(pem);
76
+ const now = new Date();
77
+ const validTo = cert.validity.notAfter;
78
+ const cn = cert.subject.getField('CN')?.value;
79
+ const representedNif = typeof cn === 'string' ? (cn.match(/\(R:\s*([A-Z0-9]{8,9})\)/i)?.[1] ?? undefined) : undefined;
80
+ return {
81
+ nif: info?.nif,
82
+ nombreRazon: info?.nombreRazon,
83
+ representedNif,
84
+ serialNumber: cert.serialNumber,
85
+ issuer: cert.issuer.getField('CN')?.value ?? cert.issuer.getField('O')?.value,
86
+ subject: cn,
87
+ validFrom: cert.validity.notBefore.toISOString(),
88
+ validTo: validTo.toISOString(),
89
+ expired: validTo.getTime() < now.getTime(),
90
+ };
91
+ }
92
+ catch {
93
+ return {};
94
+ }
95
+ }
68
96
  /**
69
97
  * Extrae el NIF y el nombre/razón del titular de un certificado en PEM.
70
98
  *
@@ -1 +1 @@
1
- {"version":3,"file":"p12.js","sourceRoot":"","sources":["../../../src/integration/p12.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"p12.js","sourceRoot":"","sources":["../../../src/integration/p12.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AA0B/B;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,QAAgB;IACtD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAExD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC;YACnC,IAAI,GAAuB,CAAC;YAC5B,IAAI,KAAc,CAAC;YAEnB,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3C,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACnB,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC;YACzB,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAEtC,6DAA6D;QAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,KAAK,CAAC;QACnE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC5F,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,4DAA4D;QAC5D,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,KAAK,CAAC;QAC7D,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAoCD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;QAC9C,MAAM,cAAc,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtH,OAAO;YACL,GAAG,EAAE,IAAI,EAAE,GAAG;YACd,WAAW,EAAE,IAAI,EAAE,WAAW;YAC9B,cAAc;YACd,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK;YAC7E,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE;YAChD,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE;SAC3C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAEtC,MAAM;QACN,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,KAAK,CAAC;QACnE,IAAI,GAAG,GAAkB,IAAI,CAAC;QAC9B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC5F,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,KAAK,CAAC;YAC7D,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,wDAAwD;QACxD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,KAAK,CAAC;QAC/D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,KAAK,CAAC;QAC/D,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,KAAK;YAAE,WAAW,IAAI,KAAK,CAAC;QAChC,IAAI,OAAO;YAAE,WAAW,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;QAC/D,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,KAAK,CAAC;YAC7D,IAAI,EAAE,EAAE,CAAC;gBACP,WAAW,GAAG,MAAM,CAAC,EAAG,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC5F,CAAC;QACH,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -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,121 @@
1
+ import { VerifactuClient } from '../aeat/client.js';
2
+ import { readP12, decodeCertificate, extractCertificateInfo } from './p12.js';
3
+ import { computeRegistroAlta } from '../core/hash/chain.js';
4
+ import { generateInvoiceXml, generateSuministroXml, buildCabecera } from '../core/xml/generator.js';
5
+ import { nowIsoWithOffset } from '../core/utils/date.js';
6
+ /** Convierte una fecha a `DD-MM-YYYY` (formato XSD `fecha` de AEAT). */
7
+ function toDdMmYyyy(d) {
8
+ const dd = String(d.getDate()).padStart(2, '0');
9
+ const mm = String(d.getMonth() + 1).padStart(2, '0');
10
+ return `${dd}-${mm}-${d.getFullYear()}`;
11
+ }
12
+ /**
13
+ * Valida un `.p12`/`.pfx` contra el entorno de AEAT indicado (por defecto el
14
+ * de **pruebas/desarrollo**).
15
+ *
16
+ * Pasos:
17
+ * 1. Lee el `.p12` y extrae certificado + clave privada (valida la contraseña).
18
+ * 2. Decodifica los campos del certificado (NIF, nombre, validez, emisor...).
19
+ * 3. Construye un `VerifactuClient` con mTLS y **emite una factura de prueba**
20
+ * en el entorno indicado. Si AEAT la acepta, el certificado es válido.
21
+ *
22
+ * Devuelve los campos decodificados (para mostrar) y la respuesta de AEAT.
23
+ *
24
+ * @param buffer Contenido del `.p12`/`.pfx`.
25
+ * @param password Contraseña del `.p12`.
26
+ * @param options Entorno y timeout.
27
+ */
28
+ export async function validateP12AgainstAEAT(buffer, password, options = {}) {
29
+ const env = options.env ?? 'test';
30
+ let content;
31
+ try {
32
+ content = readP12(buffer, password);
33
+ }
34
+ catch (e) {
35
+ return { valid: false, error: `No se pudo leer el .p12: ${e.message}` };
36
+ }
37
+ const cert = content.certificates[0];
38
+ const key = content.keys[0];
39
+ if (!cert || !key) {
40
+ return { valid: false, error: 'El .p12 no contiene certificado y clave privada.' };
41
+ }
42
+ const certificate = decodeCertificate(cert);
43
+ // El emisor de la factura es el OBLIGADO (representado). Si el certificado es
44
+ // de un representante, el NIF del obligado está en `representedNif`.
45
+ const obligadoNif = certificate.representedNif ?? certificate.nif ?? '';
46
+ const nombreRazon = certificate.nombreRazon ?? '';
47
+ const client = new VerifactuClient({
48
+ env,
49
+ cert,
50
+ key,
51
+ timeoutMs: options.timeoutMs ?? 15_000,
52
+ });
53
+ // Factura de prueba mínima para validar el certificado end-to-end.
54
+ const now = new Date();
55
+ const numeroInstalacion = `VAL${Date.now()}`;
56
+ const invoice = {
57
+ id: { serie: 'T', numero: `VAL${Date.now()}`, fechaExpedicion: toDdMmYyyy(now) },
58
+ emisor: { nif: obligadoNif, nombreRazon },
59
+ tipoFactura: 'F1',
60
+ tipoDesglose: 'S1',
61
+ descripcion: 'Factura de prueba de validación de certificado',
62
+ destinatarios: [{ nombreRazon, nif: obligadoNif }],
63
+ desglose: {
64
+ detalles: [
65
+ { calificacionOperacion: 'S1', claveRegimen: '01', tipoImpositivo: 21, baseImponible: 1, cuotaRepercutida: 0.21 },
66
+ ],
67
+ cuotaTotal: 0.21,
68
+ importeTotal: 1.21,
69
+ },
70
+ sistemaInformatico: {
71
+ nombreRazon,
72
+ nif: obligadoNif,
73
+ nombreSistemaInformatico: 'VALIDACION',
74
+ idSistemaInformatico: '01',
75
+ version: '1.0',
76
+ numeroInstalacion,
77
+ },
78
+ fechaHoraHusoGenRegistro: nowIsoWithOffset(),
79
+ huella: '',
80
+ };
81
+ try {
82
+ // El hash se calcula sobre el MISMO `fechaHoraHusoGenRegistro` que va en el
83
+ // XML (si no, la huella no coincide con el contenido y AEAT lo rechaza).
84
+ const hash = computeRegistroAlta({
85
+ idEmisorFactura: obligadoNif,
86
+ numSerieFactura: `${invoice.id.serie ?? ''}${invoice.id.numero}`,
87
+ fechaExpedicionFactura: invoice.id.fechaExpedicion,
88
+ tipoFactura: invoice.tipoFactura,
89
+ cuotaTotal: invoice.desglose.cuotaTotal.toFixed(2),
90
+ importeTotal: invoice.desglose.importeTotal.toFixed(2),
91
+ huellaAnterior: null,
92
+ fechaHoraHusoGenRegistro: invoice.fechaHoraHusoGenRegistro,
93
+ });
94
+ invoice.huella = hash;
95
+ const registroAltaXml = generateInvoiceXml(invoice, null);
96
+ const cabecera = buildCabecera({ nombreRazon, nif: obligadoNif }, cert, extractCertificateInfo);
97
+ const xml = generateSuministroXml(registroAltaXml, cabecera);
98
+ const result = await client.sendRecord(xml);
99
+ return {
100
+ valid: result.status === 'OK',
101
+ certificate,
102
+ aeat: {
103
+ status: result.status,
104
+ message: result.message,
105
+ csv: result.registro?.csv,
106
+ operationId: result.operationId,
107
+ },
108
+ message: result.status === 'OK'
109
+ ? `Certificado aceptado por AEAT (${env}). Factura de prueba enviada.`
110
+ : `AEAT respondió con error: ${result.message ?? result.errorCode ?? ''}`,
111
+ };
112
+ }
113
+ catch (e) {
114
+ return {
115
+ valid: false,
116
+ certificate,
117
+ error: `AEAT rechazó el certificado: ${e.message}`,
118
+ };
119
+ }
120
+ }
121
+ //# 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dwast/verifactu-lib",
3
- "version": "0.1.0-beta.6",
3
+ "version": "0.1.0-beta.7",
4
4
  "description": "Librería para la gestión de Verifactu (RD 1007/2023): modelo de datos, encadenado hash, generación XML, QR y cliente AEAT.",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
package/readme.md CHANGED
@@ -446,7 +446,7 @@ const client = new VerifactuClient({
446
446
  | `namespace` | Namespace del servicio |
447
447
  | `timeoutMs` | Timeout de petición (default 10s) |
448
448
 
449
- **Regla de entorno:** el entorno se resuelve así: `config.env` → `VERIFACTU_ENV` → `NODE_ENV` → **`test`** (por defecto). Si el entorno es `production`, usa `AEAT_PRODUCTION_SOAP_URL`; si es `test`/`development`, usa `AEAT_TEST_SOAP_URL`. Para hacer pruebas basta con `new VerifactuClient({ env: 'test', cert, key })` o con `VERIFACTU_ENV=test`. Si no se puede determinar el entorno, se usa la URL de **pruebas** para no enviar facturas reales a producción por error de configuración.
449
+ **Regla de entorno:** el entorno se resuelve así: `config.env` → `VERIFACTU_ENV` → `NODE_ENV` → **`test`** (por defecto). Si el entorno es `production`, usa `AEAT_PRODUCTION_SOAP_URL`; si es `test`/`development`, usa `AEAT_TEST_SOAP_URL`. Si el valor no es `production`/`test`/`development`, se usa `test` como fallback (nunca lanza error), para no enviar facturas reales a producción por un valor inesperado.
450
450
 
451
451
  ### Métodos
452
452
 
@@ -660,6 +660,23 @@ const info = extractCertificateInfo(certPem); // { nif, nombreRazon } | null
660
660
  const nif = extractNifFromCertificate(certPem); // NIF del certificado | null
661
661
  ```
662
662
 
663
+ ### Validación del `.p12` contra AEAT (`validateP12AgainstAEAT`)
664
+
665
+ Valida un `.p12`/`.pfx` contra el entorno de AEAT (por defecto **pruebas/desarrollo**): lee el `.p12` (comprueba la contraseña), decodifica los campos del certificado y **emite una factura de prueba** en AEAT. Devuelve los campos decodificados (para mostrar) y la respuesta de AEAT.
666
+
667
+ ```ts
668
+ import { validateP12AgainstAEAT } from '@dwast/verifactu-lib/integration';
669
+
670
+ const result = await validateP12AgainstAEAT(buffer, password, { env: 'test' });
671
+
672
+ // result.valid → true si AEAT aceptó la factura de prueba
673
+ // result.certificate → { nif, nombreRazon, representedNif, serialNumber, issuer, subject, validFrom, validTo, expired }
674
+ // result.aeat → { status, message, csv, operationId }
675
+ ```
676
+
677
+ - Si el certificado es de un **representante**, el NIF del obligado se extrae del commonName (`(R: XXXXXXXXX)`) y se usa como emisor de la factura de prueba; `buildCabecera` añade el bloque `Representante` automáticamente.
678
+ - `valid` es `true` solo si AEAT acepta la factura de prueba (`status: 'OK'`).
679
+
663
680
  ### Detección de representante
664
681
 
665
682
  Si el NIF del certificado difiere del NIF del obligado a emitir, el certificado actúa como **representante** y se añade el bloque `Representante` en la cabecera:
@@ -105,18 +105,15 @@ export interface VerifactuClientConfig {
105
105
  * 1. `config.env` (si se pasa explícito).
106
106
  * 2. Variable de entorno `VERIFACTU_ENV` (si está definida).
107
107
  * 3. Variable de entorno `NODE_ENV` (si está definida).
108
- * 4. `test` (por defecto): si no se puede determinar el entorno, se usa la
109
- * URL de pruebas de AEAT para no enviar facturas reales a producción por
110
- * error de configuración.
108
+ * 4. `test` (por defecto).
109
+ *
110
+ * Regla: **solo `production` usa la URL de producción; cualquier otro valor
111
+ * (o ninguno) usa `test`**. Así nunca se envían facturas reales a producción
112
+ * por un valor de entorno inesperado.
111
113
  */
112
114
  export function resolveEnv(config: Pick<VerifactuClientConfig, 'env'>): VerifactuEnv {
113
115
  const raw = config.env ?? process.env.VERIFACTU_ENV ?? process.env.NODE_ENV ?? 'test';
114
- if (raw === 'production' || raw === 'test' || raw === 'development') {
115
- return raw;
116
- }
117
- throw new Error(
118
- `Entorno VERIFACTU inválido: "${raw}". Usa "production", "test" o "development".`,
119
- );
116
+ return raw === 'production' ? 'production' : 'test';
120
117
  }
121
118
 
122
119
  /**
@@ -2,3 +2,4 @@ export * from './repository.js';
2
2
  export * from './service.js';
3
3
  export * from './p12.js';
4
4
  export * from './accountability.js';
5
+ export * from './validate.js';
@@ -105,6 +105,58 @@ export interface CertificateInfo {
105
105
  nombreRazon: string;
106
106
  }
107
107
 
108
+ /**
109
+ * Campos decodificados de un certificado en PEM (para mostrar/validar).
110
+ */
111
+ export interface DecodedCertificate {
112
+ /** NIF del titular. */
113
+ nif?: string;
114
+ /** Nombre o razón social del titular. */
115
+ nombreRazon?: string;
116
+ /** NIF del obligado representado (si el certificado es de un representante, `(R: X)`). */
117
+ representedNif?: string;
118
+ /** Número de serie del certificado. */
119
+ serialNumber?: string;
120
+ /** Emisor (CN u O del issuer). */
121
+ issuer?: string;
122
+ /** Sujeto (CN). */
123
+ subject?: string;
124
+ /** Fecha de validez desde (ISO). */
125
+ validFrom?: string;
126
+ /** Fecha de validez hasta (ISO). */
127
+ validTo?: string;
128
+ /** `true` si el certificado está caducado. */
129
+ expired?: boolean;
130
+ }
131
+
132
+ /**
133
+ * Decodifica los campos de un certificado en PEM. Devuelve un objeto vacío si
134
+ * no se puede parsear.
135
+ */
136
+ export function decodeCertificate(pem: string): DecodedCertificate {
137
+ try {
138
+ const cert = forge.pki.certificateFromPem(pem);
139
+ const info = extractCertificateInfo(pem);
140
+ const now = new Date();
141
+ const validTo = cert.validity.notAfter;
142
+ const cn = cert.subject.getField('CN')?.value;
143
+ const representedNif = typeof cn === 'string' ? (cn.match(/\(R:\s*([A-Z0-9]{8,9})\)/i)?.[1] ?? undefined) : undefined;
144
+ return {
145
+ nif: info?.nif,
146
+ nombreRazon: info?.nombreRazon,
147
+ representedNif,
148
+ serialNumber: cert.serialNumber,
149
+ issuer: cert.issuer.getField('CN')?.value ?? cert.issuer.getField('O')?.value,
150
+ subject: cn,
151
+ validFrom: cert.validity.notBefore.toISOString(),
152
+ validTo: validTo.toISOString(),
153
+ expired: validTo.getTime() < now.getTime(),
154
+ };
155
+ } catch {
156
+ return {};
157
+ }
158
+ }
159
+
108
160
  /**
109
161
  * Extrae el NIF y el nombre/razón del titular de un certificado en PEM.
110
162
  *
@@ -0,0 +1,171 @@
1
+ import { VerifactuClient, type VerifactuEnv } from '../aeat/client.js';
2
+ import { readP12, decodeCertificate, extractCertificateInfo, type DecodedCertificate } from './p12.js';
3
+ import { computeRegistroAlta } from '../core/hash/chain.js';
4
+ import { generateInvoiceXml, generateSuministroXml, buildCabecera } from '../core/xml/generator.js';
5
+ import { nowIsoWithOffset } from '../core/utils/date.js';
6
+ import type { Invoice } from '../core/models/invoice.js';
7
+
8
+ /**
9
+ * Respuesta de AEAT a la factura de prueba de validación.
10
+ */
11
+ export interface AeatValidationResponse {
12
+ /** Estado devuelto por AEAT (`OK` | `ERROR`). */
13
+ status: string;
14
+ /** Mensaje de AEAT. */
15
+ message?: string;
16
+ /** CSV de la factura de prueba (si AEAT la aceptó). */
17
+ csv?: string;
18
+ /** Identificador de la operación. */
19
+ operationId?: string;
20
+ }
21
+
22
+ /**
23
+ * Resultado de la validación de un `.p12` contra AEAT.
24
+ */
25
+ export interface P12ValidationResult {
26
+ /** `true` si AEAT aceptó la factura de prueba con este certificado. */
27
+ valid: boolean;
28
+ /** Campos decodificados del certificado (para mostrar/validar la pass). */
29
+ certificate?: DecodedCertificate;
30
+ /** Respuesta de AEAT a la factura de prueba. */
31
+ aeat?: AeatValidationResponse;
32
+ /** Mensaje informativo. */
33
+ message?: string;
34
+ /** Descripción del error cuando la validación falla. */
35
+ error?: string;
36
+ }
37
+
38
+ export interface ValidateP12Options {
39
+ /** Entorno contra el que validar. Por defecto `test` (desarrollo). */
40
+ env?: VerifactuEnv;
41
+ /** Timeout de la petición en ms. */
42
+ timeoutMs?: number;
43
+ }
44
+
45
+ /** Convierte una fecha a `DD-MM-YYYY` (formato XSD `fecha` de AEAT). */
46
+ function toDdMmYyyy(d: Date): string {
47
+ const dd = String(d.getDate()).padStart(2, '0');
48
+ const mm = String(d.getMonth() + 1).padStart(2, '0');
49
+ return `${dd}-${mm}-${d.getFullYear()}`;
50
+ }
51
+
52
+ /**
53
+ * Valida un `.p12`/`.pfx` contra el entorno de AEAT indicado (por defecto el
54
+ * de **pruebas/desarrollo**).
55
+ *
56
+ * Pasos:
57
+ * 1. Lee el `.p12` y extrae certificado + clave privada (valida la contraseña).
58
+ * 2. Decodifica los campos del certificado (NIF, nombre, validez, emisor...).
59
+ * 3. Construye un `VerifactuClient` con mTLS y **emite una factura de prueba**
60
+ * en el entorno indicado. Si AEAT la acepta, el certificado es válido.
61
+ *
62
+ * Devuelve los campos decodificados (para mostrar) y la respuesta de AEAT.
63
+ *
64
+ * @param buffer Contenido del `.p12`/`.pfx`.
65
+ * @param password Contraseña del `.p12`.
66
+ * @param options Entorno y timeout.
67
+ */
68
+ export async function validateP12AgainstAEAT(
69
+ buffer: Buffer,
70
+ password: string,
71
+ options: ValidateP12Options = {},
72
+ ): Promise<P12ValidationResult> {
73
+ const env = options.env ?? 'test';
74
+
75
+ let content;
76
+ try {
77
+ content = readP12(buffer, password);
78
+ } catch (e) {
79
+ return { valid: false, error: `No se pudo leer el .p12: ${(e as Error).message}` };
80
+ }
81
+
82
+ const cert = content.certificates[0];
83
+ const key = content.keys[0];
84
+ if (!cert || !key) {
85
+ return { valid: false, error: 'El .p12 no contiene certificado y clave privada.' };
86
+ }
87
+
88
+ const certificate = decodeCertificate(cert);
89
+ // El emisor de la factura es el OBLIGADO (representado). Si el certificado es
90
+ // de un representante, el NIF del obligado está en `representedNif`.
91
+ const obligadoNif = certificate.representedNif ?? certificate.nif ?? '';
92
+ const nombreRazon = certificate.nombreRazon ?? '';
93
+
94
+ const client = new VerifactuClient({
95
+ env,
96
+ cert,
97
+ key,
98
+ timeoutMs: options.timeoutMs ?? 15_000,
99
+ });
100
+
101
+ // Factura de prueba mínima para validar el certificado end-to-end.
102
+ const now = new Date();
103
+ const numeroInstalacion = `VAL${Date.now()}`;
104
+ const invoice: Invoice = {
105
+ id: { serie: 'T', numero: `VAL${Date.now()}`, fechaExpedicion: toDdMmYyyy(now) },
106
+ emisor: { nif: obligadoNif, nombreRazon },
107
+ tipoFactura: 'F1',
108
+ tipoDesglose: 'S1',
109
+ descripcion: 'Factura de prueba de validación de certificado',
110
+ destinatarios: [{ nombreRazon, nif: obligadoNif }],
111
+ desglose: {
112
+ detalles: [
113
+ { calificacionOperacion: 'S1', claveRegimen: '01', tipoImpositivo: 21, baseImponible: 1, cuotaRepercutida: 0.21 },
114
+ ],
115
+ cuotaTotal: 0.21,
116
+ importeTotal: 1.21,
117
+ },
118
+ sistemaInformatico: {
119
+ nombreRazon,
120
+ nif: obligadoNif,
121
+ nombreSistemaInformatico: 'VALIDACION',
122
+ idSistemaInformatico: '01',
123
+ version: '1.0',
124
+ numeroInstalacion,
125
+ },
126
+ fechaHoraHusoGenRegistro: nowIsoWithOffset(),
127
+ huella: '',
128
+ };
129
+
130
+ try {
131
+ // El hash se calcula sobre el MISMO `fechaHoraHusoGenRegistro` que va en el
132
+ // XML (si no, la huella no coincide con el contenido y AEAT lo rechaza).
133
+ const hash = computeRegistroAlta({
134
+ idEmisorFactura: obligadoNif,
135
+ numSerieFactura: `${invoice.id.serie ?? ''}${invoice.id.numero}`,
136
+ fechaExpedicionFactura: invoice.id.fechaExpedicion,
137
+ tipoFactura: invoice.tipoFactura,
138
+ cuotaTotal: invoice.desglose.cuotaTotal.toFixed(2),
139
+ importeTotal: invoice.desglose.importeTotal.toFixed(2),
140
+ huellaAnterior: null,
141
+ fechaHoraHusoGenRegistro: invoice.fechaHoraHusoGenRegistro,
142
+ });
143
+ invoice.huella = hash;
144
+
145
+ const registroAltaXml = generateInvoiceXml(invoice, null);
146
+ const cabecera = buildCabecera({ nombreRazon, nif: obligadoNif }, cert, extractCertificateInfo);
147
+ const xml = generateSuministroXml(registroAltaXml, cabecera);
148
+ const result = await client.sendRecord(xml);
149
+
150
+ return {
151
+ valid: result.status === 'OK',
152
+ certificate,
153
+ aeat: {
154
+ status: result.status,
155
+ message: result.message,
156
+ csv: result.registro?.csv,
157
+ operationId: result.operationId,
158
+ },
159
+ message:
160
+ result.status === 'OK'
161
+ ? `Certificado aceptado por AEAT (${env}). Factura de prueba enviada.`
162
+ : `AEAT respondió con error: ${result.message ?? result.errorCode ?? ''}`,
163
+ };
164
+ } catch (e) {
165
+ return {
166
+ valid: false,
167
+ certificate,
168
+ error: `AEAT rechazó el certificado: ${(e as Error).message}`,
169
+ };
170
+ }
171
+ }