@dwast/verifactu-lib 0.1.0-beta.1 → 0.1.0-beta.3

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 (157) hide show
  1. package/dist/cjs/aeat/client.d.ts +115 -14
  2. package/dist/cjs/aeat/client.d.ts.map +1 -1
  3. package/dist/cjs/aeat/client.js +223 -47
  4. package/dist/cjs/aeat/client.js.map +1 -1
  5. package/dist/cjs/aeat/index.d.ts +1 -0
  6. package/dist/cjs/aeat/index.d.ts.map +1 -1
  7. package/dist/cjs/aeat/index.js +1 -0
  8. package/dist/cjs/aeat/index.js.map +1 -1
  9. package/dist/cjs/aeat/response.d.ts +80 -0
  10. package/dist/cjs/aeat/response.d.ts.map +1 -0
  11. package/dist/cjs/aeat/response.js +118 -0
  12. package/dist/cjs/aeat/response.js.map +1 -0
  13. package/dist/cjs/core/hash/chain.d.ts +42 -0
  14. package/dist/cjs/core/hash/chain.d.ts.map +1 -1
  15. package/dist/cjs/core/hash/chain.js +40 -0
  16. package/dist/cjs/core/hash/chain.js.map +1 -1
  17. package/dist/cjs/core/index.d.ts +2 -0
  18. package/dist/cjs/core/index.d.ts.map +1 -1
  19. package/dist/cjs/core/index.js +2 -0
  20. package/dist/cjs/core/index.js.map +1 -1
  21. package/dist/cjs/core/models/index.d.ts +0 -1
  22. package/dist/cjs/core/models/index.d.ts.map +1 -1
  23. package/dist/cjs/core/models/index.js +0 -1
  24. package/dist/cjs/core/models/index.js.map +1 -1
  25. package/dist/cjs/core/models/invoice.d.ts +42 -17
  26. package/dist/cjs/core/models/invoice.d.ts.map +1 -1
  27. package/dist/cjs/core/utils/date.d.ts +16 -0
  28. package/dist/cjs/core/utils/date.d.ts.map +1 -0
  29. package/dist/cjs/core/utils/date.js +27 -0
  30. package/dist/cjs/core/utils/date.js.map +1 -0
  31. package/dist/cjs/core/utils/index.d.ts +2 -0
  32. package/dist/cjs/core/utils/index.d.ts.map +1 -0
  33. package/dist/cjs/core/utils/index.js +18 -0
  34. package/dist/cjs/core/utils/index.js.map +1 -0
  35. package/dist/cjs/core/validation/index.d.ts +2 -0
  36. package/dist/cjs/core/validation/index.d.ts.map +1 -0
  37. package/dist/cjs/core/validation/index.js +18 -0
  38. package/dist/cjs/core/validation/index.js.map +1 -0
  39. package/dist/cjs/core/validation/validate.d.ts +18 -0
  40. package/dist/cjs/core/validation/validate.d.ts.map +1 -0
  41. package/dist/cjs/core/validation/validate.js +65 -0
  42. package/dist/cjs/core/validation/validate.js.map +1 -0
  43. package/dist/cjs/core/xml/generator.d.ts +117 -11
  44. package/dist/cjs/core/xml/generator.d.ts.map +1 -1
  45. package/dist/cjs/core/xml/generator.js +239 -64
  46. package/dist/cjs/core/xml/generator.js.map +1 -1
  47. package/dist/cjs/integration/accountability.d.ts +41 -0
  48. package/dist/cjs/integration/accountability.d.ts.map +1 -0
  49. package/dist/cjs/integration/accountability.js +92 -0
  50. package/dist/cjs/integration/accountability.js.map +1 -0
  51. package/dist/cjs/integration/index.d.ts +2 -0
  52. package/dist/cjs/integration/index.d.ts.map +1 -1
  53. package/dist/cjs/integration/index.js +2 -0
  54. package/dist/cjs/integration/index.js.map +1 -1
  55. package/dist/cjs/integration/p12.d.ts +58 -0
  56. package/dist/cjs/integration/p12.d.ts.map +1 -0
  57. package/dist/cjs/integration/p12.js +127 -0
  58. package/dist/cjs/integration/p12.js.map +1 -0
  59. package/dist/cjs/integration/repository.d.ts +4 -3
  60. package/dist/cjs/integration/repository.d.ts.map +1 -1
  61. package/dist/cjs/integration/service.d.ts +11 -2
  62. package/dist/cjs/integration/service.d.ts.map +1 -1
  63. package/dist/cjs/integration/service.js +115 -15
  64. package/dist/cjs/integration/service.js.map +1 -1
  65. package/dist/cjs/integration/tenant-credentials.d.ts +44 -0
  66. package/dist/cjs/integration/tenant-credentials.d.ts.map +1 -0
  67. package/dist/cjs/integration/tenant-credentials.js +62 -0
  68. package/dist/cjs/integration/tenant-credentials.js.map +1 -0
  69. package/dist/esm/aeat/client.d.ts +115 -14
  70. package/dist/esm/aeat/client.d.ts.map +1 -1
  71. package/dist/esm/aeat/client.js +218 -46
  72. package/dist/esm/aeat/client.js.map +1 -1
  73. package/dist/esm/aeat/index.d.ts +1 -0
  74. package/dist/esm/aeat/index.d.ts.map +1 -1
  75. package/dist/esm/aeat/index.js +1 -0
  76. package/dist/esm/aeat/index.js.map +1 -1
  77. package/dist/esm/aeat/response.d.ts +80 -0
  78. package/dist/esm/aeat/response.d.ts.map +1 -0
  79. package/dist/esm/aeat/response.js +115 -0
  80. package/dist/esm/aeat/response.js.map +1 -0
  81. package/dist/esm/core/hash/chain.d.ts +42 -0
  82. package/dist/esm/core/hash/chain.d.ts.map +1 -1
  83. package/dist/esm/core/hash/chain.js +37 -0
  84. package/dist/esm/core/hash/chain.js.map +1 -1
  85. package/dist/esm/core/index.d.ts +2 -0
  86. package/dist/esm/core/index.d.ts.map +1 -1
  87. package/dist/esm/core/index.js +2 -0
  88. package/dist/esm/core/index.js.map +1 -1
  89. package/dist/esm/core/models/index.d.ts +0 -1
  90. package/dist/esm/core/models/index.d.ts.map +1 -1
  91. package/dist/esm/core/models/index.js +0 -1
  92. package/dist/esm/core/models/index.js.map +1 -1
  93. package/dist/esm/core/models/invoice.d.ts +42 -17
  94. package/dist/esm/core/models/invoice.d.ts.map +1 -1
  95. package/dist/esm/core/utils/date.d.ts +16 -0
  96. package/dist/esm/core/utils/date.d.ts.map +1 -0
  97. package/dist/esm/core/utils/date.js +24 -0
  98. package/dist/esm/core/utils/date.js.map +1 -0
  99. package/dist/esm/core/utils/index.d.ts +2 -0
  100. package/dist/esm/core/utils/index.d.ts.map +1 -0
  101. package/dist/esm/core/utils/index.js +2 -0
  102. package/dist/esm/core/utils/index.js.map +1 -0
  103. package/dist/esm/core/validation/index.d.ts +2 -0
  104. package/dist/esm/core/validation/index.d.ts.map +1 -0
  105. package/dist/esm/core/validation/index.js +2 -0
  106. package/dist/esm/core/validation/index.js.map +1 -0
  107. package/dist/esm/core/validation/validate.d.ts +18 -0
  108. package/dist/esm/core/validation/validate.d.ts.map +1 -0
  109. package/dist/esm/core/validation/validate.js +62 -0
  110. package/dist/esm/core/validation/validate.js.map +1 -0
  111. package/dist/esm/core/xml/generator.d.ts +117 -11
  112. package/dist/esm/core/xml/generator.d.ts.map +1 -1
  113. package/dist/esm/core/xml/generator.js +233 -64
  114. package/dist/esm/core/xml/generator.js.map +1 -1
  115. package/dist/esm/integration/accountability.d.ts +41 -0
  116. package/dist/esm/integration/accountability.d.ts.map +1 -0
  117. package/dist/esm/integration/accountability.js +88 -0
  118. package/dist/esm/integration/accountability.js.map +1 -0
  119. package/dist/esm/integration/index.d.ts +2 -0
  120. package/dist/esm/integration/index.d.ts.map +1 -1
  121. package/dist/esm/integration/index.js +2 -0
  122. package/dist/esm/integration/index.js.map +1 -1
  123. package/dist/esm/integration/p12.d.ts +58 -0
  124. package/dist/esm/integration/p12.d.ts.map +1 -0
  125. package/dist/esm/integration/p12.js +119 -0
  126. package/dist/esm/integration/p12.js.map +1 -0
  127. package/dist/esm/integration/repository.d.ts +4 -3
  128. package/dist/esm/integration/repository.d.ts.map +1 -1
  129. package/dist/esm/integration/service.d.ts +11 -2
  130. package/dist/esm/integration/service.d.ts.map +1 -1
  131. package/dist/esm/integration/service.js +117 -17
  132. package/dist/esm/integration/service.js.map +1 -1
  133. package/dist/esm/integration/tenant-credentials.d.ts +44 -0
  134. package/dist/esm/integration/tenant-credentials.d.ts.map +1 -0
  135. package/dist/esm/integration/tenant-credentials.js +58 -0
  136. package/dist/esm/integration/tenant-credentials.js.map +1 -0
  137. package/package.json +3 -1
  138. package/readme.md +731 -38
  139. package/src/aeat/client.ts +298 -57
  140. package/src/aeat/index.ts +1 -0
  141. package/src/aeat/response.ts +198 -0
  142. package/src/core/hash/chain.ts +68 -0
  143. package/src/core/index.ts +2 -0
  144. package/src/core/models/index.ts +0 -1
  145. package/src/core/models/invoice.ts +40 -18
  146. package/src/core/utils/date.ts +27 -0
  147. package/src/core/utils/index.ts +1 -0
  148. package/src/core/validation/index.ts +1 -0
  149. package/src/core/validation/validate.ts +71 -0
  150. package/src/core/xml/generator.ts +312 -73
  151. package/src/integration/accountability.ts +125 -0
  152. package/src/integration/index.ts +2 -0
  153. package/src/integration/p12.ts +155 -0
  154. package/src/integration/repository.ts +4 -3
  155. package/src/integration/schema.sql +0 -14
  156. package/src/integration/service.ts +134 -16
  157. package/src/core/models/event.ts +0 -25
@@ -0,0 +1,44 @@
1
+ import { AccountabilityService } from './accountability.js';
2
+ import type { VerifactuRepository } from './repository.js';
3
+ /**
4
+ * Carga el `.p12` y el NIF de un tenant desde la base de datos.
5
+ * Lo implementa la aplicación (cada app decide cómo guarda el `.p12`).
6
+ */
7
+ export interface TenantP12Loader {
8
+ /** Devuelve el contenido del `.p12` de un tenant. */
9
+ getP12(tenantId: string): Promise<Buffer>;
10
+ /** Devuelve el NIF del tenant. */
11
+ getNif(tenantId: string): Promise<string>;
12
+ }
13
+ /**
14
+ * Almacén de credenciales por tenant.
15
+ *
16
+ * La contraseña del `.p12` se pide UNA vez al iniciar el proceso de
17
+ * facturación y se cachea en memoria (nunca se guarda en la BD). El `.p12`
18
+ * se carga de la BD por tenant, y el `AccountabilityService` se crea con la
19
+ * contraseña cacheada.
20
+ */
21
+ export declare class TenantCredentialStore {
22
+ private readonly loader;
23
+ private readonly baseUrl;
24
+ private readonly repository;
25
+ /** Contraseñas cacheadas en memoria por tenant. */
26
+ private readonly passwords;
27
+ constructor(loader: TenantP12Loader, baseUrl: string, repository: VerifactuRepository);
28
+ /**
29
+ * Establece la contraseña de un tenant (se pide una vez al iniciar).
30
+ */
31
+ setPassword(tenantId: string, password: string): void;
32
+ /**
33
+ * Devuelve el `AccountabilityService` de un tenant, usando la contraseña
34
+ * cacheada y el `.p12` cargado de la BD.
35
+ */
36
+ getService(tenantId: string): Promise<AccountabilityService>;
37
+ /**
38
+ * Limpia la contraseña cacheada de un tenant (p. ej. al cerrar sesión).
39
+ */
40
+ clear(tenantId: string): void;
41
+ /** Limpia todas las contraseñas cacheadas. */
42
+ clearAll(): void;
43
+ }
44
+ //# sourceMappingURL=tenant-credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-credentials.d.ts","sourceRoot":"","sources":["../../../src/integration/tenant-credentials.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,kCAAkC;IAClC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,qBAAa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN7B,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;gBAGpC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,mBAAmB;IAGlD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIrD;;;OAGG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmBlE;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI7B,8CAA8C;IAC9C,QAAQ,IAAI,IAAI;CAGjB"}
@@ -0,0 +1,58 @@
1
+ import { AccountabilityService } from './accountability.js';
2
+ /**
3
+ * Almacén de credenciales por tenant.
4
+ *
5
+ * La contraseña del `.p12` se pide UNA vez al iniciar el proceso de
6
+ * facturación y se cachea en memoria (nunca se guarda en la BD). El `.p12`
7
+ * se carga de la BD por tenant, y el `AccountabilityService` se crea con la
8
+ * contraseña cacheada.
9
+ */
10
+ export class TenantCredentialStore {
11
+ loader;
12
+ baseUrl;
13
+ repository;
14
+ /** Contraseñas cacheadas en memoria por tenant. */
15
+ passwords = new Map();
16
+ constructor(loader, baseUrl, repository) {
17
+ this.loader = loader;
18
+ this.baseUrl = baseUrl;
19
+ this.repository = repository;
20
+ }
21
+ /**
22
+ * Establece la contraseña de un tenant (se pide una vez al iniciar).
23
+ */
24
+ setPassword(tenantId, password) {
25
+ this.passwords.set(tenantId, password);
26
+ }
27
+ /**
28
+ * Devuelve el `AccountabilityService` de un tenant, usando la contraseña
29
+ * cacheada y el `.p12` cargado de la BD.
30
+ */
31
+ async getService(tenantId) {
32
+ const password = this.passwords.get(tenantId);
33
+ if (!password) {
34
+ throw new Error(`No hay contraseña cacheada para el tenant ${tenantId}. Llama a setPassword primero.`);
35
+ }
36
+ const [p12Buffer, nif] = await Promise.all([
37
+ this.loader.getP12(tenantId),
38
+ this.loader.getNif(tenantId),
39
+ ]);
40
+ return new AccountabilityService(this.repository, {
41
+ baseUrl: this.baseUrl,
42
+ nif,
43
+ p12Buffer,
44
+ p12Password: password,
45
+ });
46
+ }
47
+ /**
48
+ * Limpia la contraseña cacheada de un tenant (p. ej. al cerrar sesión).
49
+ */
50
+ clear(tenantId) {
51
+ this.passwords.delete(tenantId);
52
+ }
53
+ /** Limpia todas las contraseñas cacheadas. */
54
+ clearAll() {
55
+ this.passwords.clear();
56
+ }
57
+ }
58
+ //# sourceMappingURL=tenant-credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-credentials.js","sourceRoot":"","sources":["../../../src/integration/tenant-credentials.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAc5D;;;;;;;GAOG;AACH,MAAM,OAAO,qBAAqB;IAKb;IACA;IACA;IANnB,mDAAmD;IAClC,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEvD,YACmB,MAAuB,EACvB,OAAe,EACf,UAA+B;QAF/B,WAAM,GAAN,MAAM,CAAiB;QACvB,YAAO,GAAP,OAAO,CAAQ;QACf,eAAU,GAAV,UAAU,CAAqB;IAC/C,CAAC;IAEJ;;OAEG;IACH,WAAW,CAAC,QAAgB,EAAE,QAAgB;QAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,gCAAgC,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC7B,CAAC,CAAC;QAEH,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE;YAChD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG;YACH,SAAS;YACT,WAAW,EAAE,QAAQ;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAgB;QACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,8CAA8C;IAC9C,QAAQ;QACN,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dwast/verifactu-lib",
3
- "version": "0.1.0-beta.1",
3
+ "version": "0.1.0-beta.3",
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",
@@ -78,10 +78,12 @@
78
78
  "node": ">=18"
79
79
  },
80
80
  "dependencies": {
81
+ "fast-xml-parser": "^5.11.1",
81
82
  "node-forge": "^1.3.1"
82
83
  },
83
84
  "devDependencies": {
84
85
  "@types/node": "^20.11.0",
86
+ "@types/node-forge": "^1.3.14",
85
87
  "typescript": "^5.4.0",
86
88
  "vitest": "^1.6.0"
87
89
  }