@dwast/verifactu-lib 0.1.0-beta.0 → 0.1.0-beta.2
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 +162 -0
- package/dist/cjs/aeat/client.d.ts.map +1 -0
- package/dist/cjs/aeat/client.js +267 -0
- package/dist/cjs/aeat/client.js.map +1 -0
- package/dist/cjs/aeat/index.d.ts +3 -0
- package/dist/cjs/aeat/index.d.ts.map +1 -0
- package/dist/cjs/aeat/index.js +19 -0
- package/dist/cjs/aeat/index.js.map +1 -0
- package/dist/cjs/aeat/response.d.ts +78 -0
- package/dist/cjs/aeat/response.d.ts.map +1 -0
- package/dist/cjs/aeat/response.js +117 -0
- package/dist/cjs/aeat/response.js.map +1 -0
- package/dist/{core → cjs/core}/hash/chain.d.ts +42 -0
- package/dist/cjs/core/hash/chain.d.ts.map +1 -0
- package/dist/cjs/core/hash/chain.js +167 -0
- package/dist/cjs/core/hash/chain.js.map +1 -0
- package/dist/cjs/core/hash/index.d.ts.map +1 -0
- package/dist/cjs/core/hash/index.js +18 -0
- package/dist/cjs/core/hash/index.js.map +1 -0
- package/dist/{core → cjs/core}/index.d.ts +2 -0
- package/dist/cjs/core/index.d.ts.map +1 -0
- package/dist/cjs/core/index.js +23 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/core/models/event.d.ts.map +1 -0
- package/dist/cjs/core/models/event.js +3 -0
- package/dist/{core → cjs/core}/models/event.js.map +1 -1
- package/dist/cjs/core/models/index.d.ts.map +1 -0
- package/dist/cjs/core/models/index.js +19 -0
- package/dist/cjs/core/models/index.js.map +1 -0
- package/dist/{core → cjs/core}/models/invoice.d.ts +42 -17
- package/dist/cjs/core/models/invoice.d.ts.map +1 -0
- package/dist/cjs/core/models/invoice.js +3 -0
- package/dist/{core → cjs/core}/models/invoice.js.map +1 -1
- package/dist/cjs/core/qr/index.d.ts.map +1 -0
- package/dist/cjs/core/qr/index.js +18 -0
- package/dist/cjs/core/qr/index.js.map +1 -0
- package/dist/cjs/core/qr/qr.d.ts.map +1 -0
- package/dist/cjs/core/qr/qr.js +19 -0
- package/dist/cjs/core/qr/qr.js.map +1 -0
- package/dist/cjs/core/utils/date.d.ts +16 -0
- package/dist/cjs/core/utils/date.d.ts.map +1 -0
- package/dist/cjs/core/utils/date.js +27 -0
- package/dist/cjs/core/utils/date.js.map +1 -0
- package/dist/cjs/core/utils/index.d.ts +2 -0
- package/dist/cjs/core/utils/index.d.ts.map +1 -0
- package/dist/cjs/core/utils/index.js +18 -0
- package/dist/cjs/core/utils/index.js.map +1 -0
- package/dist/cjs/core/validation/index.d.ts +2 -0
- package/dist/cjs/core/validation/index.d.ts.map +1 -0
- package/dist/cjs/core/validation/index.js +18 -0
- package/dist/cjs/core/validation/index.js.map +1 -0
- package/dist/cjs/core/validation/validate.d.ts +18 -0
- package/dist/cjs/core/validation/validate.d.ts.map +1 -0
- package/dist/cjs/core/validation/validate.js +65 -0
- package/dist/cjs/core/validation/validate.js.map +1 -0
- package/dist/cjs/core/xml/generator.d.ts +140 -0
- package/dist/cjs/core/xml/generator.d.ts.map +1 -0
- package/dist/cjs/core/xml/generator.js +269 -0
- package/dist/cjs/core/xml/generator.js.map +1 -0
- package/dist/cjs/core/xml/index.d.ts.map +1 -0
- package/dist/cjs/core/xml/index.js +18 -0
- package/dist/cjs/core/xml/index.js.map +1 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/integration/accountability.d.ts +41 -0
- package/dist/cjs/integration/accountability.d.ts.map +1 -0
- package/dist/cjs/integration/accountability.js +92 -0
- package/dist/cjs/integration/accountability.js.map +1 -0
- package/dist/cjs/integration/index.d.ts +5 -0
- package/dist/cjs/integration/index.d.ts.map +1 -0
- package/dist/cjs/integration/index.js +21 -0
- package/dist/cjs/integration/index.js.map +1 -0
- package/dist/cjs/integration/p12.d.ts +58 -0
- package/dist/cjs/integration/p12.d.ts.map +1 -0
- package/dist/cjs/integration/p12.js +127 -0
- package/dist/cjs/integration/p12.js.map +1 -0
- package/dist/{integration → cjs/integration}/repository.d.ts +2 -0
- package/dist/cjs/integration/repository.d.ts.map +1 -0
- package/dist/cjs/integration/repository.js +3 -0
- package/dist/cjs/integration/repository.js.map +1 -0
- package/dist/{integration → cjs/integration}/service.d.ts +11 -2
- package/dist/cjs/integration/service.d.ts.map +1 -0
- package/dist/cjs/integration/service.js +230 -0
- package/dist/cjs/integration/service.js.map +1 -0
- package/dist/cjs/integration/tenant-credentials.d.ts +44 -0
- package/dist/cjs/integration/tenant-credentials.d.ts.map +1 -0
- package/dist/cjs/integration/tenant-credentials.js +62 -0
- package/dist/cjs/integration/tenant-credentials.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/esm/aeat/client.d.ts +162 -0
- package/dist/esm/aeat/client.d.ts.map +1 -0
- package/dist/esm/aeat/client.js +259 -0
- package/dist/esm/aeat/client.js.map +1 -0
- package/dist/esm/aeat/index.d.ts +3 -0
- package/dist/esm/aeat/index.d.ts.map +1 -0
- package/dist/esm/aeat/index.js +3 -0
- package/dist/esm/aeat/index.js.map +1 -0
- package/dist/esm/aeat/response.d.ts +78 -0
- package/dist/esm/aeat/response.d.ts.map +1 -0
- package/dist/esm/aeat/response.js +114 -0
- package/dist/esm/aeat/response.js.map +1 -0
- package/dist/esm/core/hash/chain.d.ts +139 -0
- package/dist/esm/core/hash/chain.d.ts.map +1 -0
- package/dist/{core → esm/core}/hash/chain.js +37 -0
- package/dist/esm/core/hash/chain.js.map +1 -0
- package/dist/esm/core/hash/index.d.ts +2 -0
- package/dist/esm/core/hash/index.d.ts.map +1 -0
- package/dist/esm/core/hash/index.js.map +1 -0
- package/dist/esm/core/index.d.ts +7 -0
- package/dist/esm/core/index.d.ts.map +1 -0
- package/dist/{core → esm/core}/index.js +2 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/models/event.d.ts +25 -0
- package/dist/esm/core/models/event.d.ts.map +1 -0
- package/dist/esm/core/models/event.js.map +1 -0
- package/dist/esm/core/models/index.d.ts +3 -0
- package/dist/esm/core/models/index.d.ts.map +1 -0
- package/dist/esm/core/models/index.js.map +1 -0
- package/dist/esm/core/models/invoice.d.ts +115 -0
- package/dist/esm/core/models/invoice.d.ts.map +1 -0
- package/dist/esm/core/models/invoice.js.map +1 -0
- package/dist/esm/core/qr/index.d.ts +2 -0
- package/dist/esm/core/qr/index.d.ts.map +1 -0
- package/dist/esm/core/qr/index.js.map +1 -0
- package/dist/esm/core/qr/qr.d.ts +13 -0
- package/dist/esm/core/qr/qr.d.ts.map +1 -0
- package/dist/esm/core/qr/qr.js.map +1 -0
- package/dist/esm/core/utils/date.d.ts +16 -0
- package/dist/esm/core/utils/date.d.ts.map +1 -0
- package/dist/esm/core/utils/date.js +24 -0
- package/dist/esm/core/utils/date.js.map +1 -0
- package/dist/esm/core/utils/index.d.ts +2 -0
- package/dist/esm/core/utils/index.d.ts.map +1 -0
- package/dist/esm/core/utils/index.js +2 -0
- package/dist/esm/core/utils/index.js.map +1 -0
- package/dist/esm/core/validation/index.d.ts +2 -0
- package/dist/esm/core/validation/index.d.ts.map +1 -0
- package/dist/esm/core/validation/index.js +2 -0
- package/dist/esm/core/validation/index.js.map +1 -0
- package/dist/esm/core/validation/validate.d.ts +18 -0
- package/dist/esm/core/validation/validate.d.ts.map +1 -0
- package/dist/esm/core/validation/validate.js +62 -0
- package/dist/esm/core/validation/validate.js.map +1 -0
- package/dist/esm/core/xml/generator.d.ts +140 -0
- package/dist/esm/core/xml/generator.d.ts.map +1 -0
- package/dist/esm/core/xml/generator.js +259 -0
- package/dist/esm/core/xml/generator.js.map +1 -0
- package/dist/esm/core/xml/index.d.ts +2 -0
- package/dist/esm/core/xml/index.d.ts.map +1 -0
- package/dist/esm/core/xml/index.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/integration/accountability.d.ts +41 -0
- package/dist/esm/integration/accountability.d.ts.map +1 -0
- package/dist/esm/integration/accountability.js +88 -0
- package/dist/esm/integration/accountability.js.map +1 -0
- package/dist/esm/integration/index.d.ts +5 -0
- package/dist/esm/integration/index.d.ts.map +1 -0
- package/dist/esm/integration/index.js +5 -0
- package/dist/esm/integration/index.js.map +1 -0
- package/dist/esm/integration/p12.d.ts +58 -0
- package/dist/esm/integration/p12.d.ts.map +1 -0
- package/dist/esm/integration/p12.js +119 -0
- package/dist/esm/integration/p12.js.map +1 -0
- package/dist/esm/integration/repository.d.ts +79 -0
- package/dist/esm/integration/repository.d.ts.map +1 -0
- package/dist/esm/integration/repository.js.map +1 -0
- package/dist/esm/integration/service.d.ts +45 -0
- package/dist/esm/integration/service.d.ts.map +1 -0
- package/dist/{integration → esm/integration}/service.js +101 -15
- package/dist/esm/integration/service.js.map +1 -0
- package/dist/esm/integration/tenant-credentials.d.ts +44 -0
- package/dist/esm/integration/tenant-credentials.d.ts.map +1 -0
- package/dist/esm/integration/tenant-credentials.js +58 -0
- package/dist/esm/integration/tenant-credentials.js.map +1 -0
- package/package.json +45 -13
- package/readme.md +566 -42
- package/src/aeat/client.ts +296 -55
- package/src/aeat/index.ts +1 -0
- package/src/aeat/response.ts +195 -0
- package/src/core/hash/chain.ts +68 -0
- package/src/core/index.ts +2 -0
- package/src/core/models/invoice.ts +40 -18
- package/src/core/utils/date.ts +27 -0
- package/src/core/utils/index.ts +1 -0
- package/src/core/validation/index.ts +1 -0
- package/src/core/validation/validate.ts +71 -0
- package/src/core/xml/generator.ts +306 -73
- package/src/integration/accountability.ts +125 -0
- package/src/integration/index.ts +2 -0
- package/src/integration/p12.ts +155 -0
- package/src/integration/repository.ts +2 -0
- package/src/integration/service.ts +113 -14
- package/dist/aeat/client.d.ts +0 -57
- package/dist/aeat/client.d.ts.map +0 -1
- package/dist/aeat/client.js +0 -87
- package/dist/aeat/client.js.map +0 -1
- package/dist/aeat/index.d.ts +0 -2
- package/dist/aeat/index.d.ts.map +0 -1
- package/dist/aeat/index.js +0 -2
- package/dist/aeat/index.js.map +0 -1
- package/dist/core/hash/chain.d.ts.map +0 -1
- package/dist/core/hash/chain.js.map +0 -1
- package/dist/core/hash/index.d.ts.map +0 -1
- package/dist/core/hash/index.js.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/core/models/event.d.ts.map +0 -1
- package/dist/core/models/index.d.ts.map +0 -1
- package/dist/core/models/index.js.map +0 -1
- package/dist/core/models/invoice.d.ts.map +0 -1
- package/dist/core/qr/index.d.ts.map +0 -1
- package/dist/core/qr/index.js.map +0 -1
- package/dist/core/qr/qr.d.ts.map +0 -1
- package/dist/core/qr/qr.js.map +0 -1
- package/dist/core/xml/generator.d.ts +0 -32
- package/dist/core/xml/generator.d.ts.map +0 -1
- package/dist/core/xml/generator.js +0 -103
- package/dist/core/xml/generator.js.map +0 -1
- package/dist/core/xml/index.d.ts.map +0 -1
- package/dist/core/xml/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/integration/index.d.ts +0 -3
- package/dist/integration/index.d.ts.map +0 -1
- package/dist/integration/index.js +0 -3
- package/dist/integration/index.js.map +0 -1
- package/dist/integration/repository.d.ts.map +0 -1
- package/dist/integration/repository.js.map +0 -1
- package/dist/integration/service.d.ts.map +0 -1
- package/dist/integration/service.js.map +0 -1
- /package/dist/{core → cjs/core}/hash/index.d.ts +0 -0
- /package/dist/{core → cjs/core}/models/event.d.ts +0 -0
- /package/dist/{core → cjs/core}/models/index.d.ts +0 -0
- /package/dist/{core → cjs/core}/qr/index.d.ts +0 -0
- /package/dist/{core → cjs/core}/qr/qr.d.ts +0 -0
- /package/dist/{core → cjs/core}/xml/index.d.ts +0 -0
- /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/dist/{core → esm/core}/hash/index.js +0 -0
- /package/dist/{core → esm/core}/models/event.js +0 -0
- /package/dist/{core → esm/core}/models/index.js +0 -0
- /package/dist/{core → esm/core}/models/invoice.js +0 -0
- /package/dist/{core → esm/core}/qr/index.js +0 -0
- /package/dist/{core → esm/core}/qr/qr.js +0 -0
- /package/dist/{core → esm/core}/xml/index.js +0 -0
- /package/dist/{index.js → esm/index.js} +0 -0
- /package/dist/{integration → esm/integration}/repository.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
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;AAYD;;;;;;;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,79 @@
|
|
|
1
|
+
import type { Event } from '../core/models/event.js';
|
|
2
|
+
/**
|
|
3
|
+
* Estado de un registro de facturación en el sistema consumidor.
|
|
4
|
+
*/
|
|
5
|
+
export type RecordStatus = 'PENDING' | 'SENT' | 'CONFIRMED' | 'REJECTED' | 'ANNULLED';
|
|
6
|
+
/**
|
|
7
|
+
* Registro de facturación persistido en el sistema consumidor.
|
|
8
|
+
*/
|
|
9
|
+
export interface StoredRecord {
|
|
10
|
+
/** Identificador interno del registro. */
|
|
11
|
+
id: string;
|
|
12
|
+
/** Referencia a la factura (serie + número). */
|
|
13
|
+
invoiceId: string;
|
|
14
|
+
/** NIF del emisor de la factura. */
|
|
15
|
+
emisorNif: string;
|
|
16
|
+
/** XML Verifactu generado. */
|
|
17
|
+
xml: string;
|
|
18
|
+
/** Hash del propio registro (huella). */
|
|
19
|
+
hash: string;
|
|
20
|
+
/** Hash del registro anterior en la cadena. */
|
|
21
|
+
previousHash: string | null;
|
|
22
|
+
/** Payload del QR Verifactu (URL de verificación con el hash). */
|
|
23
|
+
qrPayload?: string;
|
|
24
|
+
/** Estado del registro. */
|
|
25
|
+
status: RecordStatus;
|
|
26
|
+
/** Fecha/hora de creación. */
|
|
27
|
+
createdAt: string;
|
|
28
|
+
/** Fecha/hora de última actualización. */
|
|
29
|
+
updatedAt: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Respuesta de AEAT persistida en el sistema consumidor.
|
|
33
|
+
*
|
|
34
|
+
* La AEAT exige conservar la respuesta de cada envío para poder acreditar
|
|
35
|
+
* la remisión. El sistema consumidor DEBE guardar estas respuestas en una
|
|
36
|
+
* tabla (ver `schema.sql`).
|
|
37
|
+
*/
|
|
38
|
+
export interface StoredResponse {
|
|
39
|
+
/** Identificador interno de la respuesta. */
|
|
40
|
+
id: string;
|
|
41
|
+
/** Referencia al registro enviado. */
|
|
42
|
+
recordId: string;
|
|
43
|
+
/** Identificador de la operación devuelto por AEAT. */
|
|
44
|
+
operationId: string;
|
|
45
|
+
/** Estado devuelto por AEAT. */
|
|
46
|
+
status: 'OK' | 'ERROR';
|
|
47
|
+
/** Mensaje de AEAT. */
|
|
48
|
+
message?: string;
|
|
49
|
+
/** Código de error de AEAT (si lo hay). */
|
|
50
|
+
errorCode?: string;
|
|
51
|
+
/** Cuerpo completo de la respuesta (para auditoría). */
|
|
52
|
+
rawResponse?: string;
|
|
53
|
+
/** Fecha/hora de la respuesta. */
|
|
54
|
+
receivedAt: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Repositorio que el sistema consumidor DEBE implementar para persistir
|
|
58
|
+
* los registros y las respuestas de Verifactu.
|
|
59
|
+
*
|
|
60
|
+
* La librería no impone un ORM concreto (Mongoose, Prisma, etc.): define
|
|
61
|
+
* esta interfaz y el sistema consumidor la adapta a su stack MERN.
|
|
62
|
+
*/
|
|
63
|
+
export interface VerifactuRepository {
|
|
64
|
+
/** Guarda un registro de facturación. */
|
|
65
|
+
saveRecord(record: StoredRecord): Promise<void>;
|
|
66
|
+
/** Actualiza el estado de un registro. */
|
|
67
|
+
updateRecordStatus(id: string, status: RecordStatus): Promise<void>;
|
|
68
|
+
/** Obtiene un registro por su id. */
|
|
69
|
+
getRecord(id: string): Promise<StoredRecord | null>;
|
|
70
|
+
/** Obtiene el último registro (para conocer el hash anterior). */
|
|
71
|
+
getLastRecord(): Promise<StoredRecord | null>;
|
|
72
|
+
/** Guarda la respuesta de AEAT. */
|
|
73
|
+
saveResponse(response: StoredResponse): Promise<void>;
|
|
74
|
+
/** Obtiene las respuestas de un registro. */
|
|
75
|
+
getResponses(recordId: string): Promise<StoredResponse[]>;
|
|
76
|
+
/** Guarda un evento. */
|
|
77
|
+
saveEvent(event: Event): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/integration/repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,MAAM,GACN,WAAW,GACX,UAAU,GACV,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,qCAAqC;IACrC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACpD,kEAAkE;IAClE,aAAa,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,mCAAmC;IACnC,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,6CAA6C;IAC7C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1D,wBAAwB;IACxB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/integration/repository.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Invoice } from '../core/models/invoice.js';
|
|
2
|
+
import { type EventoInput } from '../core/xml/generator.js';
|
|
3
|
+
import type { VerifactuClient } from '../aeat/client.js';
|
|
4
|
+
import type { VerifactuRepository, StoredRecord } from './repository.js';
|
|
5
|
+
/**
|
|
6
|
+
* Servicio de orquestación de Verifactu.
|
|
7
|
+
*
|
|
8
|
+
* Une el núcleo puro (generación XML + hash) con el cliente AEAT y la
|
|
9
|
+
* persistencia. El sistema consumidor DEBE proporcionar un repositorio que
|
|
10
|
+
* implemente `VerifactuRepository` (ver `repository.ts` y `schema.sql`).
|
|
11
|
+
*/
|
|
12
|
+
export declare class VerifactuService {
|
|
13
|
+
private readonly repository;
|
|
14
|
+
private readonly client;
|
|
15
|
+
private readonly certificatePem?;
|
|
16
|
+
constructor(repository: VerifactuRepository, client: VerifactuClient, certificatePem?: string | undefined);
|
|
17
|
+
/**
|
|
18
|
+
* Registra una factura: genera el XML, calcula el hash encadenado, guarda
|
|
19
|
+
* el registro y lo envía a AEAT, persistiendo la respuesta.
|
|
20
|
+
*/
|
|
21
|
+
registerInvoice(invoice: Invoice): Promise<StoredRecord>;
|
|
22
|
+
/**
|
|
23
|
+
* Anula una factura previamente registrada.
|
|
24
|
+
*
|
|
25
|
+
* Genera un registro de anulación que referencia la factura anulada,
|
|
26
|
+
* lo envía a AEAT y marca la factura original como ANNULLED.
|
|
27
|
+
*/
|
|
28
|
+
annulInvoice(invoiceId: string, invoice?: Invoice): Promise<StoredRecord>;
|
|
29
|
+
/**
|
|
30
|
+
* Modifica una factura previamente registrada.
|
|
31
|
+
*
|
|
32
|
+
* Verifactu no tiene un tipo "modificación": se implementa como anulación
|
|
33
|
+
* del registro original + alta con los datos corregidos. El usuario solo
|
|
34
|
+
* envía la referencia a la factura original y la factura corregida.
|
|
35
|
+
*/
|
|
36
|
+
modifyInvoice(invoiceId: string, correctedInvoice: Invoice): Promise<StoredRecord>;
|
|
37
|
+
/**
|
|
38
|
+
* Registra un evento (RegistroEvento) ante AEAT.
|
|
39
|
+
*
|
|
40
|
+
* Genera el XML del evento, calcula su huella encadenada con el último
|
|
41
|
+
* registro, persiste el evento y lo envía a AEAT.
|
|
42
|
+
*/
|
|
43
|
+
registerEvent(evento: EventoInput): Promise<StoredRecord>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/integration/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAqG,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAM/J,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAQzE;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAFf,UAAU,EAAE,mBAAmB,EAC/B,MAAM,EAAE,eAAe,EACvB,cAAc,CAAC,EAAE,MAAM,YAAA;IAG1C;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAiE9D;;;;;OAKG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IA8E/E;;;;;;OAMG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAQxF;;;;;OAKG;IACG,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAoDhE"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import { generateInvoiceXml, generateAnulacionXml } from '../core/xml/generator.js';
|
|
2
|
-
import { computeRegistroAlta, computeRegistroAnulacion } from '../core/hash/chain.js';
|
|
1
|
+
import { generateInvoiceXml, generateSuministroXml, buildCabecera, generateAnulacionXml, generateEventoXml } from '../core/xml/generator.js';
|
|
2
|
+
import { computeRegistroAlta, computeRegistroAnulacion, computeRegistroEvento } from '../core/hash/chain.js';
|
|
3
3
|
import { buildQrPayload } from '../core/qr/qr.js';
|
|
4
|
+
import { nowIsoWithOffset } from '../core/utils/date.js';
|
|
5
|
+
import { validateInvoice } from '../core/validation/validate.js';
|
|
6
|
+
import { extractCertificateInfo } from './p12.js';
|
|
7
|
+
/** Convierte `YYYY-MM-DD` a `DD-MM-YYYY` (formato XSD `fecha` de AEAT). */
|
|
8
|
+
function toDdMmYyyy(iso) {
|
|
9
|
+
const [y, m, d] = iso.split('-');
|
|
10
|
+
return `${d}-${m}-${y}`;
|
|
11
|
+
}
|
|
4
12
|
/**
|
|
5
13
|
* Servicio de orquestación de Verifactu.
|
|
6
14
|
*
|
|
@@ -11,20 +19,30 @@ import { buildQrPayload } from '../core/qr/qr.js';
|
|
|
11
19
|
export class VerifactuService {
|
|
12
20
|
repository;
|
|
13
21
|
client;
|
|
14
|
-
|
|
22
|
+
certificatePem;
|
|
23
|
+
constructor(repository, client, certificatePem) {
|
|
15
24
|
this.repository = repository;
|
|
16
25
|
this.client = client;
|
|
26
|
+
this.certificatePem = certificatePem;
|
|
17
27
|
}
|
|
18
28
|
/**
|
|
19
29
|
* Registra una factura: genera el XML, calcula el hash encadenado, guarda
|
|
20
30
|
* el registro y lo envía a AEAT, persistiendo la respuesta.
|
|
21
31
|
*/
|
|
22
32
|
async registerInvoice(invoice) {
|
|
33
|
+
// 0. Validar la factura antes de generar el XML.
|
|
34
|
+
const validation = validateInvoice(invoice);
|
|
35
|
+
if (!validation.valid) {
|
|
36
|
+
throw new Error(`Factura inválida: ${validation.errors.join('; ')}`);
|
|
37
|
+
}
|
|
23
38
|
// 1. Obtener el hash del último registro para encadenar.
|
|
24
39
|
const last = await this.repository.getLastRecord();
|
|
25
40
|
const previousHash = last?.hash ?? null;
|
|
26
41
|
// 2. Generar XML y calcular la huella (hash) del registro.
|
|
27
|
-
const
|
|
42
|
+
const registroAltaXml = generateInvoiceXml(invoice, previousHash);
|
|
43
|
+
const cabecera = buildCabecera({ nombreRazon: invoice.emisor.nombreRazon, nif: invoice.emisor.nif }, this.certificatePem, extractCertificateInfo);
|
|
44
|
+
const xml = generateSuministroXml(registroAltaXml, cabecera);
|
|
45
|
+
const fechaHoraHusoGenRegistro = nowIsoWithOffset();
|
|
28
46
|
const hash = computeRegistroAlta({
|
|
29
47
|
idEmisorFactura: invoice.emisor.nif,
|
|
30
48
|
numSerieFactura: `${invoice.id.serie ?? ''}${invoice.id.numero}`,
|
|
@@ -33,13 +51,14 @@ export class VerifactuService {
|
|
|
33
51
|
cuotaTotal: invoice.desglose.cuotaTotal.toFixed(2),
|
|
34
52
|
importeTotal: invoice.desglose.importeTotal.toFixed(2),
|
|
35
53
|
huellaAnterior: previousHash,
|
|
36
|
-
fechaHoraHusoGenRegistro
|
|
54
|
+
fechaHoraHusoGenRegistro,
|
|
37
55
|
});
|
|
38
56
|
// 3. Persistir el registro como PENDING.
|
|
39
57
|
const now = new Date().toISOString();
|
|
40
58
|
const record = {
|
|
41
59
|
id: `${invoice.id.serie ?? ''}${invoice.id.numero}`,
|
|
42
60
|
invoiceId: `${invoice.id.serie ?? ''}${invoice.id.numero}`,
|
|
61
|
+
emisorNif: invoice.emisor.nif,
|
|
43
62
|
xml,
|
|
44
63
|
hash,
|
|
45
64
|
previousHash,
|
|
@@ -70,7 +89,7 @@ export class VerifactuService {
|
|
|
70
89
|
* Genera un registro de anulación que referencia la factura anulada,
|
|
71
90
|
* lo envía a AEAT y marca la factura original como ANNULLED.
|
|
72
91
|
*/
|
|
73
|
-
async annulInvoice(invoiceId) {
|
|
92
|
+
async annulInvoice(invoiceId, invoice) {
|
|
74
93
|
// 1. Obtener la factura original (para su huella) y el último registro.
|
|
75
94
|
const original = await this.repository.getRecord(invoiceId);
|
|
76
95
|
if (!original) {
|
|
@@ -78,25 +97,39 @@ export class VerifactuService {
|
|
|
78
97
|
}
|
|
79
98
|
const last = await this.repository.getLastRecord();
|
|
80
99
|
const previousHash = last?.hash ?? null;
|
|
100
|
+
const fechaHoraHusoGenRegistro = nowIsoWithOffset();
|
|
101
|
+
const fechaExpedicionFacturaAnulada = toDdMmYyyy(invoice?.id.fechaExpedicion ?? new Date().toISOString().slice(0, 10));
|
|
102
|
+
const sistemaInformatico = invoice?.sistemaInformatico ?? {
|
|
103
|
+
nombreRazon: 'Sistema',
|
|
104
|
+
nif: original.emisorNif,
|
|
105
|
+
nombreSistemaInformatico: 'SIF',
|
|
106
|
+
idSistemaInformatico: '01',
|
|
107
|
+
version: '1.0',
|
|
108
|
+
numeroInstalacion: '1',
|
|
109
|
+
};
|
|
81
110
|
// 2. Generar XML de anulación y calcular la huella.
|
|
82
|
-
const xml = generateAnulacionXml({
|
|
83
|
-
idEmisorFacturaAnulada: original.invoiceId,
|
|
84
|
-
numSerieFacturaAnulada: original.invoiceId,
|
|
85
|
-
fechaExpedicionFacturaAnulada: new Date().toISOString().slice(0, 10),
|
|
86
|
-
huellaFacturaAnulada: original.hash,
|
|
87
|
-
}, previousHash);
|
|
88
111
|
const hash = computeRegistroAnulacion({
|
|
89
|
-
idEmisorFacturaAnulada: original.
|
|
112
|
+
idEmisorFacturaAnulada: original.emisorNif,
|
|
90
113
|
numSerieFacturaAnulada: original.invoiceId,
|
|
91
|
-
fechaExpedicionFacturaAnulada
|
|
114
|
+
fechaExpedicionFacturaAnulada,
|
|
92
115
|
huellaAnterior: previousHash,
|
|
93
|
-
fechaHoraHusoGenRegistro
|
|
116
|
+
fechaHoraHusoGenRegistro,
|
|
94
117
|
});
|
|
118
|
+
const xml = generateAnulacionXml({
|
|
119
|
+
idEmisorFacturaAnulada: original.emisorNif,
|
|
120
|
+
numSerieFacturaAnulada: original.invoiceId,
|
|
121
|
+
fechaExpedicionFacturaAnulada,
|
|
122
|
+
huellaFacturaAnulada: original.hash,
|
|
123
|
+
sistemaInformatico,
|
|
124
|
+
fechaHoraHusoGenRegistro,
|
|
125
|
+
huella: hash,
|
|
126
|
+
}, previousHash);
|
|
95
127
|
// 3. Persistir el registro de anulación como PENDING.
|
|
96
128
|
const now = new Date().toISOString();
|
|
97
129
|
const record = {
|
|
98
130
|
id: `${invoiceId}-ANUL`,
|
|
99
131
|
invoiceId,
|
|
132
|
+
emisorNif: original.emisorNif,
|
|
100
133
|
xml,
|
|
101
134
|
hash,
|
|
102
135
|
previousHash,
|
|
@@ -136,5 +169,58 @@ export class VerifactuService {
|
|
|
136
169
|
// 2. Emitir la factura corregida como un nuevo alta.
|
|
137
170
|
return this.registerInvoice(correctedInvoice);
|
|
138
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Registra un evento (RegistroEvento) ante AEAT.
|
|
174
|
+
*
|
|
175
|
+
* Genera el XML del evento, calcula su huella encadenada con el último
|
|
176
|
+
* registro, persiste el evento y lo envía a AEAT.
|
|
177
|
+
*/
|
|
178
|
+
async registerEvent(evento) {
|
|
179
|
+
// 1. Obtener el hash del último registro para encadenar.
|
|
180
|
+
const last = await this.repository.getLastRecord();
|
|
181
|
+
const previousHash = last?.hash ?? null;
|
|
182
|
+
// 2. Generar XML y calcular la huella del evento.
|
|
183
|
+
const si = evento.sistemaInformatico;
|
|
184
|
+
const hash = computeRegistroEvento({
|
|
185
|
+
nifSistemaInformatico: si.nif,
|
|
186
|
+
id: '',
|
|
187
|
+
idSistemaInformatico: si.idSistemaInformatico,
|
|
188
|
+
version: si.version,
|
|
189
|
+
numeroInstalacion: si.numeroInstalacion,
|
|
190
|
+
nifObligado: evento.obligadoEmision.nif,
|
|
191
|
+
tipoEvento: evento.tipoEvento,
|
|
192
|
+
huellaAnterior: previousHash,
|
|
193
|
+
fechaHoraHusoGenEvento: evento.fechaHoraHusoGenEvento,
|
|
194
|
+
});
|
|
195
|
+
const xml = generateEventoXml({ ...evento, huellaEvento: hash });
|
|
196
|
+
// 3. Persistir el evento.
|
|
197
|
+
const now = new Date().toISOString();
|
|
198
|
+
const record = {
|
|
199
|
+
id: `EV-${evento.tipoEvento}-${Date.now()}`,
|
|
200
|
+
invoiceId: evento.obligadoEmision.nif,
|
|
201
|
+
emisorNif: evento.obligadoEmision.nif,
|
|
202
|
+
xml,
|
|
203
|
+
hash,
|
|
204
|
+
previousHash,
|
|
205
|
+
status: 'PENDING',
|
|
206
|
+
createdAt: now,
|
|
207
|
+
updatedAt: now,
|
|
208
|
+
};
|
|
209
|
+
await this.repository.saveRecord(record);
|
|
210
|
+
// 4. Enviar a AEAT y persistir la respuesta.
|
|
211
|
+
const result = await this.client.sendRecord(xml);
|
|
212
|
+
await this.repository.saveResponse({
|
|
213
|
+
id: `${record.id}-${Date.now()}`,
|
|
214
|
+
recordId: record.id,
|
|
215
|
+
operationId: result.operationId,
|
|
216
|
+
status: result.status,
|
|
217
|
+
message: result.message,
|
|
218
|
+
receivedAt: new Date().toISOString(),
|
|
219
|
+
});
|
|
220
|
+
// 5. Actualizar el estado.
|
|
221
|
+
const status = result.status === 'OK' ? 'CONFIRMED' : 'REJECTED';
|
|
222
|
+
await this.repository.updateRecordStatus(record.id, status);
|
|
223
|
+
return { ...record, status };
|
|
224
|
+
}
|
|
139
225
|
}
|
|
140
226
|
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/integration/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,26 +1,51 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dwast/verifactu-lib",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.2",
|
|
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
|
-
"main": "./dist/index.js",
|
|
7
|
-
"
|
|
6
|
+
"main": "./dist/cjs/index.js",
|
|
7
|
+
"module": "./dist/esm/index.js",
|
|
8
|
+
"types": "./dist/cjs/index.d.ts",
|
|
8
9
|
"exports": {
|
|
9
10
|
".": {
|
|
10
|
-
"
|
|
11
|
-
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/esm/index.d.ts",
|
|
13
|
+
"default": "./dist/esm/index.js"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/cjs/index.d.ts",
|
|
17
|
+
"default": "./dist/cjs/index.js"
|
|
18
|
+
}
|
|
12
19
|
},
|
|
13
20
|
"./core": {
|
|
14
|
-
"
|
|
15
|
-
|
|
21
|
+
"import": {
|
|
22
|
+
"types": "./dist/esm/core/index.d.ts",
|
|
23
|
+
"default": "./dist/esm/core/index.js"
|
|
24
|
+
},
|
|
25
|
+
"require": {
|
|
26
|
+
"types": "./dist/cjs/core/index.d.ts",
|
|
27
|
+
"default": "./dist/cjs/core/index.js"
|
|
28
|
+
}
|
|
16
29
|
},
|
|
17
30
|
"./aeat": {
|
|
18
|
-
"
|
|
19
|
-
|
|
31
|
+
"import": {
|
|
32
|
+
"types": "./dist/esm/aeat/index.d.ts",
|
|
33
|
+
"default": "./dist/esm/aeat/index.js"
|
|
34
|
+
},
|
|
35
|
+
"require": {
|
|
36
|
+
"types": "./dist/cjs/aeat/index.d.ts",
|
|
37
|
+
"default": "./dist/cjs/aeat/index.js"
|
|
38
|
+
}
|
|
20
39
|
},
|
|
21
40
|
"./integration": {
|
|
22
|
-
"
|
|
23
|
-
|
|
41
|
+
"import": {
|
|
42
|
+
"types": "./dist/esm/integration/index.d.ts",
|
|
43
|
+
"default": "./dist/esm/integration/index.js"
|
|
44
|
+
},
|
|
45
|
+
"require": {
|
|
46
|
+
"types": "./dist/cjs/integration/index.d.ts",
|
|
47
|
+
"default": "./dist/cjs/integration/index.js"
|
|
48
|
+
}
|
|
24
49
|
}
|
|
25
50
|
},
|
|
26
51
|
"files": [
|
|
@@ -28,8 +53,10 @@
|
|
|
28
53
|
"src"
|
|
29
54
|
],
|
|
30
55
|
"scripts": {
|
|
31
|
-
"build": "
|
|
32
|
-
"
|
|
56
|
+
"build": "npm run build:esm && npm run build:cjs && node scripts/postbuild.mjs",
|
|
57
|
+
"build:esm": "tsc -p tsconfig.esm.json",
|
|
58
|
+
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
59
|
+
"typecheck": "tsc -p tsconfig.base.json --noEmit",
|
|
33
60
|
"test": "vitest run",
|
|
34
61
|
"test:watch": "vitest",
|
|
35
62
|
"lint": "eslint src test",
|
|
@@ -50,8 +77,13 @@
|
|
|
50
77
|
"engines": {
|
|
51
78
|
"node": ">=18"
|
|
52
79
|
},
|
|
80
|
+
"dependencies": {
|
|
81
|
+
"fast-xml-parser": "^5.11.1",
|
|
82
|
+
"node-forge": "^1.3.1"
|
|
83
|
+
},
|
|
53
84
|
"devDependencies": {
|
|
54
85
|
"@types/node": "^20.11.0",
|
|
86
|
+
"@types/node-forge": "^1.3.14",
|
|
55
87
|
"typescript": "^5.4.0",
|
|
56
88
|
"vitest": "^1.6.0"
|
|
57
89
|
}
|