@ripwords/myinvois-client 0.1.0 → 0.1.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 (577) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/README.md +128 -4
  3. package/bun.lock +59 -0
  4. package/dist/{0X-Yw7mZEro.d.cts → 0X-CTIq3y3a.d.ts} +1 -2
  5. package/dist/{0X-C4IRh_fJ.d.ts → 0X-Cr3M7hci.d.cts} +1 -1
  6. package/dist/{1X-D_aUVsuM.d.cts → 1X-Bu4oiv8D.d.ts} +1 -2
  7. package/dist/{1X-C-_KHV-Q.d.ts → 1X-BywXCqtn.d.ts} +1 -2
  8. package/dist/{1X-Brnls9Jh.d.ts → 1X-CWwmfCzo.d.cts} +1 -1
  9. package/dist/{1X-BwpSoT3o.d.cts → 1X-ClnJ79HH.d.cts} +1 -1
  10. package/dist/{2X-DkS1BoE5.d.ts → 2X-3fSEGIuE.d.ts} +1 -2
  11. package/dist/{2X-Bb6elyzV.d.cts → 2X-CV9eYhog.d.cts} +1 -1
  12. package/dist/{2X-UdQcQW24.d.ts → 2X-DNtkJ0tj.d.cts} +1 -1
  13. package/dist/{2X-hClUyw26.d.cts → 2X-DnG3FY1f.d.ts} +1 -2
  14. package/dist/{3X-C7VFD-n-.d.cts → 3X--VWVsC84.d.cts} +1 -1
  15. package/dist/{3X-CLMESDvz.d.cts → 3X-BOxfatu3.d.cts} +1 -1
  16. package/dist/{3X-DVDyspgb.d.ts → 3X-CLdmoel1.d.ts} +1 -2
  17. package/dist/{3X-DFI-4RQQ.d.ts → 3X-Ynjfgoll.d.ts} +1 -2
  18. package/dist/{4X-DIfvpU6V.d.cts → 4X-B5ePdMky.d.ts} +1 -2
  19. package/dist/{4X-CvScPJTf.d.cts → 4X-BTG6o1Gn.d.ts} +1 -2
  20. package/dist/{4X-CIJ2JJ2w.d.ts → 4X-By9PzHaY.d.cts} +1 -1
  21. package/dist/{4X-CUR8jlaZ.d.ts → 4X-C7fzDWJ_.d.cts} +1 -1
  22. package/dist/{5X-BOUxhadJ.d.cts → 5X-B5M0Cv_K.d.cts} +1 -1
  23. package/dist/{5X-C6db432h.d.ts → 5X-CNAFsDm2.d.cts} +1 -1
  24. package/dist/{5X-CkLu7Vyd.d.cts → 5X-CjSz1zxJ.d.ts} +1 -2
  25. package/dist/{5X-COsZHUaQ.d.ts → 5X-dhP6fyou.d.ts} +1 -2
  26. package/dist/{6X-Mf32k1d0.d.cts → 6X-B9KP_vEn.d.ts} +1 -2
  27. package/dist/{6X-DE7RJeV6.d.cts → 6X-BHaY0TCf.d.ts} +1 -2
  28. package/dist/{6X-ClZDKOTC.d.ts → 6X-C3elgd-n.d.cts} +1 -1
  29. package/dist/{6X-C_fFIcJC.d.ts → 6X-uObUP4VG.d.cts} +1 -1
  30. package/dist/{7X-DoCUcp-J.d.cts → 7X-BifJnY24.d.cts} +1 -1
  31. package/dist/{7X-Chtd6B66.d.cts → 7X-C4eX_tAk.d.ts} +1 -2
  32. package/dist/{7X-BZyesooz.d.ts → 7X-D3idQBl9.d.cts} +1 -1
  33. package/dist/{7X-kot_VccM.d.ts → 7X-DtkQutx2.d.ts} +1 -2
  34. package/dist/{8X-Dr9RunRw.d.cts → 8X-5n9seY3z.d.ts} +1 -2
  35. package/dist/{8X-DkuKAkHz.d.ts → 8X-C6UMFvQW.d.cts} +1 -1
  36. package/dist/{8X-DqZyMvyV.d.cts → 8X-D6HTLShY.d.ts} +1 -2
  37. package/dist/{8X-Df4DOBOe.d.ts → 8X-DioBXCJ0.d.cts} +1 -1
  38. package/dist/{9X-BaoZtjWF.d.cts → 9X-BjffnXuq.d.cts} +1 -1
  39. package/dist/{9X-BDgifncF.d.ts → 9X-CHZKsIdD.d.ts} +1 -2
  40. package/dist/{9X-BcAb6Uso.d.cts → 9X-CJjPJgIG.d.cts} +1 -1
  41. package/dist/{9X-BhBWlgxG.d.ts → 9X-Cpb6V4JC.d.ts} +1 -2
  42. package/dist/{AX-D6XHWdrY.d.ts → AX-C0w_r3PA.d.ts} +1 -2
  43. package/dist/{AX-BY72FohC.d.cts → AX-DrEd2Ov6.d.cts} +1 -1
  44. package/dist/{BX-D_0C8Qbd.d.ts → BX-C5jc6myN.d.cts} +1 -1
  45. package/dist/{BX-CA0OmrUZ.d.cts → BX-RadlZ-6m.d.ts} +1 -2
  46. package/dist/{CX-glpQSL8x.d.cts → CX-CT1Zzb9D.d.ts} +1 -2
  47. package/dist/{CX-HH4cSZRX.d.ts → CX-oSgvmn3h.d.cts} +1 -1
  48. package/dist/{DX-Dx22ax_I.d.ts → DX-CtUeTKMM.d.ts} +1 -2
  49. package/dist/{DX-DimL1MDM.d.cts → DX-ZIG0enmK.d.cts} +1 -1
  50. package/dist/{EX-BRWh1wFc.d.ts → EX-084Yu7Wt.d.ts} +1 -2
  51. package/dist/{EX-Cx87Ruxl.d.cts → EX-BpWZ5ADq.d.cts} +1 -1
  52. package/dist/{FX-RmjwAr40.d.ts → FX-BrbQM0CW.d.ts} +1 -2
  53. package/dist/{FX-D81UlxNN.d.cts → FX-CvYBEc51.d.cts} +1 -1
  54. package/dist/{GX-CJyo7oDp.d.ts → GX-CU8PZy0G.d.cts} +1 -1
  55. package/dist/{GX-9i7piP9G.d.cts → GX-gKj8iAAh.d.ts} +1 -2
  56. package/dist/{HX-XALBTdLA.d.ts → HX-9D-ZXTy5.d.ts} +1 -2
  57. package/dist/{HX-20GVJAvl.d.cts → HX-DoEErDeE.d.cts} +1 -1
  58. package/dist/{IX-D54NGPsc.d.cts → IX-DR4Fc92A.d.ts} +1 -2
  59. package/dist/{IX-6SZ55QKb.d.ts → IX-jLAUHe8i.d.cts} +1 -1
  60. package/dist/{JX-hQ1XRmLp.d.ts → JX-DIKa9ma-.d.ts} +1 -2
  61. package/dist/{JX-C1RYcwQX.d.cts → JX-DX8BjYQC.d.cts} +1 -1
  62. package/dist/{KX-BNwunEfn.d.ts → KX-DpsJ_unT.d.ts} +1 -2
  63. package/dist/{KX-gQHCIgtQ.d.cts → KX-fZb4_vhw.d.cts} +1 -1
  64. package/dist/{LX-CHYX3X3J.d.ts → LX-D_mI1bk-.d.cts} +1 -1
  65. package/dist/{LX-CPurJGIh.d.cts → LX-DeXPPWUX.d.ts} +1 -2
  66. package/dist/{MX-BnyW5eHf.d.cts → MX-CKMjg_zK.d.ts} +1 -2
  67. package/dist/{MX-BPGLWSUz.d.ts → MX-DlYZhpkT.d.cts} +1 -1
  68. package/dist/{NX-B11fQuco.d.cts → NX-DELEEbad.d.cts} +1 -1
  69. package/dist/{NX-RulN5Ml3.d.ts → NX-oYdb4NDo.d.ts} +1 -2
  70. package/dist/{OX-T-ydRXQS.d.cts → OX-Bid9es3D.d.ts} +1 -2
  71. package/dist/{OX-DgKVSp7I.d.ts → OX-CKPyrIFf.d.cts} +1 -1
  72. package/dist/{PX-DA4A2kEv.d.ts → PX-D7jy9CFk.d.ts} +1 -2
  73. package/dist/{PX-p0n1SzvU.d.cts → PX-SP6NxBtG.d.cts} +1 -1
  74. package/dist/{QX-DrFqsMEs.d.ts → QX-BFWOR4g3.d.ts} +1 -2
  75. package/dist/{QX-CI1NccIB.d.cts → QX-QZA7E2O-.d.cts} +1 -1
  76. package/dist/{RX-Cm7vFcFN.d.ts → RX-DBcgbdeE.d.cts} +1 -1
  77. package/dist/{RX-DnNKol22.d.cts → RX-XHgCyMV1.d.ts} +1 -2
  78. package/dist/{SX-CsPPTu-W.d.ts → SX-Cl8RN8oH.d.ts} +1 -2
  79. package/dist/{SX-BUjiWQYz.d.cts → SX-DmiJeCMN.d.cts} +1 -1
  80. package/dist/{TX-DCY25MdR.d.ts → TX-C1SoDobK.d.cts} +1 -1
  81. package/dist/{TX-DOEpsf05.d.cts → TX-ZymoIbtr.d.ts} +1 -2
  82. package/dist/{UX-DgUOnTFK.d.cts → UX-D-Ndd1ov.d.ts} +1 -2
  83. package/dist/{UX-DauyagHy.d.ts → UX-DFVynFhQ.d.cts} +1 -1
  84. package/dist/{VX-kUX6LM-3.d.cts → VX-B-1b34r7.d.ts} +1 -2
  85. package/dist/{VX-DD4scgCe.d.ts → VX-DsRum5k3.d.cts} +1 -1
  86. package/dist/{WX-DPfyPFFh.d.cts → WX-0GuMjPNZ.d.ts} +1 -2
  87. package/dist/{WX-CjkoppdY.d.ts → WX-VReU5R5M.d.cts} +1 -1
  88. package/dist/{XX-C4C1gQZH.d.cts → XX-CF2NANsy.d.ts} +1 -2
  89. package/dist/{XX-sbsIUOnA.d.ts → XX-ChAviUMj.d.cts} +1 -1
  90. package/dist/{YX-DUdO8mRC.d.ts → YX-B51BbNSg.d.ts} +1 -2
  91. package/dist/{YX-BeT-LsiA.d.cts → YX-QfzeMEKx.d.cts} +1 -1
  92. package/dist/{ZX-DwfcSA-D.d.ts → ZX-BMJS1iAv.d.ts} +1 -2
  93. package/dist/{ZX-BuVTTq-D.d.cts → ZX-Ca2E726a.d.cts} +1 -1
  94. package/dist/api/platform/platformLogin.d.ts +58 -60
  95. package/dist/api/platform/platformLogin.js +1 -1
  96. package/dist/certificate-DFK-788s.cjs +62 -0
  97. package/dist/certificate-DFK-788s.cjs.map +1 -0
  98. package/dist/certificate-aooIRf9A.js +49 -0
  99. package/dist/{classification-codes-C2X4xW5-.d.ts → classification-codes-BKxV-rO9.d.ts} +1 -2
  100. package/dist/{country-code-DsI8Mbzx.d.ts → country-code-CQuaiQm2.d.ts} +1 -2
  101. package/dist/{currencies-DKuDflOO.d.ts → currencies-BYJK-m6v.d.ts} +1 -2
  102. package/dist/document-CARHiGdp.cjs +472 -0
  103. package/dist/document-CARHiGdp.cjs.map +1 -0
  104. package/dist/document-D6VKMAtx.js +405 -0
  105. package/dist/documents-CJ8hqIGH.d.ts +858 -0
  106. package/dist/documents-MGs0EvXh.d.cts +859 -0
  107. package/dist/{e-invoice-C2TxhyrK.d.ts → e-invoice-CmbLQkHw.d.ts} +1 -2
  108. package/dist/{getBaseUrl-Dx6RDC8I.js → getBaseUrl-R3IdgCu3.js} +1 -2
  109. package/dist/{index-B1DSs-wd.d.cts → index-0-EvC6Nv.d.ts} +1 -2
  110. package/dist/{index-FTgB2nM6.d.ts → index-D2_HVwCz.d.cts} +1 -1
  111. package/dist/index.cjs +308 -12
  112. package/dist/index.cjs.map +1 -0
  113. package/dist/index.d.ts +233 -60
  114. package/dist/index.js +306 -11
  115. package/dist/index10.cjs +0 -34
  116. package/dist/index11.cjs +25 -15
  117. package/dist/index11.cjs.map +1 -1
  118. package/dist/index12.cjs +24 -0
  119. package/dist/index12.cjs.map +1 -0
  120. package/dist/index13.cjs +0 -13
  121. package/dist/index15.cjs +3 -2
  122. package/dist/index16.cjs +12 -16
  123. package/dist/index17.cjs +2 -2
  124. package/dist/index18.cjs +336 -204
  125. package/dist/index18.cjs.map +1 -1
  126. package/dist/index19.cjs +325 -105
  127. package/dist/index19.cjs.map +1 -1
  128. package/dist/index20.cjs +136 -133
  129. package/dist/index20.cjs.map +1 -1
  130. package/dist/index21.cjs +203 -59
  131. package/dist/index21.cjs.map +1 -1
  132. package/dist/index22.cjs +104 -262
  133. package/dist/index22.cjs.map +1 -1
  134. package/dist/index23.cjs +132 -74
  135. package/dist/index23.cjs.map +1 -1
  136. package/dist/index24.cjs +59 -102
  137. package/dist/index24.cjs.map +1 -1
  138. package/dist/index25.cjs +262 -68
  139. package/dist/index25.cjs.map +1 -1
  140. package/dist/index26.cjs +74 -107
  141. package/dist/index26.cjs.map +1 -1
  142. package/dist/index27.cjs +102 -95
  143. package/dist/index27.cjs.map +1 -1
  144. package/dist/index28.cjs +68 -13
  145. package/dist/index28.cjs.map +1 -1
  146. package/dist/index29.cjs +107 -33
  147. package/dist/index29.cjs.map +1 -1
  148. package/dist/index30.cjs +95 -14
  149. package/dist/index30.cjs.map +1 -1
  150. package/dist/index31.cjs +11 -22
  151. package/dist/index31.cjs.map +1 -1
  152. package/dist/index32.cjs +31 -13
  153. package/dist/index32.cjs.map +1 -1
  154. package/dist/index33.cjs +12 -7
  155. package/dist/index33.cjs.map +1 -1
  156. package/dist/index34.cjs +22 -7
  157. package/dist/index34.cjs.map +1 -1
  158. package/dist/index35.cjs +13 -10
  159. package/dist/index35.cjs.map +1 -1
  160. package/dist/index36.cjs +7 -6
  161. package/dist/index36.cjs.map +1 -1
  162. package/dist/index37.cjs +7 -101
  163. package/dist/index37.cjs.map +1 -1
  164. package/dist/index38.cjs +10 -106
  165. package/dist/index38.cjs.map +1 -1
  166. package/dist/index39.cjs +6 -119
  167. package/dist/index39.cjs.map +1 -1
  168. package/dist/index40.cjs +101 -106
  169. package/dist/index40.cjs.map +1 -1
  170. package/dist/index41.cjs +106 -98
  171. package/dist/index41.cjs.map +1 -1
  172. package/dist/index42.cjs +119 -118
  173. package/dist/index42.cjs.map +1 -1
  174. package/dist/index43.cjs +106 -127
  175. package/dist/index43.cjs.map +1 -1
  176. package/dist/index44.cjs +98 -117
  177. package/dist/index44.cjs.map +1 -1
  178. package/dist/index45.cjs +118 -14
  179. package/dist/index45.cjs.map +1 -1
  180. package/dist/index46.cjs +127 -95
  181. package/dist/index46.cjs.map +1 -1
  182. package/dist/index47.cjs +117 -142
  183. package/dist/index47.cjs.map +1 -1
  184. package/dist/index48.cjs +14 -114
  185. package/dist/index48.cjs.map +1 -1
  186. package/dist/index49.cjs +95 -144
  187. package/dist/index49.cjs.map +1 -1
  188. package/dist/index5.cjs +0 -25
  189. package/dist/index50.cjs +142 -113
  190. package/dist/index50.cjs.map +1 -1
  191. package/dist/index51.cjs +114 -17
  192. package/dist/index51.cjs.map +1 -1
  193. package/dist/index52.cjs +144 -112
  194. package/dist/index52.cjs.map +1 -1
  195. package/dist/index53.cjs +113 -47
  196. package/dist/index53.cjs.map +1 -1
  197. package/dist/index54.cjs +17 -14
  198. package/dist/index54.cjs.map +1 -1
  199. package/dist/index55.cjs +112 -28
  200. package/dist/index55.cjs.map +1 -1
  201. package/dist/index56.cjs +47 -22
  202. package/dist/index56.cjs.map +1 -1
  203. package/dist/index57.cjs +14 -9
  204. package/dist/index57.cjs.map +1 -1
  205. package/dist/index58.cjs +28 -8
  206. package/dist/index58.cjs.map +1 -1
  207. package/dist/index58.cts.map +1 -0
  208. package/dist/index59.cjs +22 -17
  209. package/dist/index59.cjs.map +1 -1
  210. package/dist/index59.cts.map +1 -1
  211. package/dist/index6.cjs +25 -0
  212. package/dist/{index5.cjs.map → index6.cjs.map} +1 -1
  213. package/dist/index60.cjs +9 -412
  214. package/dist/index60.cjs.map +1 -1
  215. package/dist/index60.cts.map +1 -0
  216. package/dist/index61.cjs +8 -8
  217. package/dist/index61.cjs.map +1 -1
  218. package/dist/index61.cts.map +1 -0
  219. package/dist/index62.cjs +17 -9
  220. package/dist/index62.cjs.map +1 -1
  221. package/dist/index62.cts.map +1 -1
  222. package/dist/index63.cjs +419 -0
  223. package/dist/index63.cjs.map +1 -0
  224. package/dist/index63.cts.map +1 -1
  225. package/dist/index64.cjs +15 -0
  226. package/dist/index64.cjs.map +1 -0
  227. package/dist/index64.cts.map +1 -1
  228. package/dist/index65.cjs +10 -116
  229. package/dist/index65.cjs.map +1 -1
  230. package/dist/index65.cts.map +1 -1
  231. package/dist/index66.cjs +2 -228
  232. package/dist/index66.cts.map +1 -1
  233. package/dist/index8.cjs +0 -25
  234. package/dist/index9.cjs +25 -0
  235. package/dist/{index8.cjs.map → index9.cjs.map} +1 -1
  236. package/dist/msic-codes-C8PJVOaA.d.ts +25 -0
  237. package/dist/{msic-codes-B_1W6lZF.d.cts → msic-codes-CIKdPqag.d.cts} +11 -11
  238. package/dist/{payment-modes-DHihrywe.d.cts → payment-modes-BOTSRC_X.d.ts} +1 -2
  239. package/dist/{payment-modes-B8dNy3SM.d.ts → payment-modes-ghFEXnUl.d.cts} +1 -1
  240. package/dist/platformLogin-PGzMhw1X.cjs.map +1 -1
  241. package/dist/{platformLogin-DsxWWUXr.js → platformLogin-f0bNAoZI.js} +1 -2
  242. package/dist/{signatures-C9QPZTQd.d.ts → signatures-W-_brwdb.d.ts} +1 -2
  243. package/dist/{signatures-BKi9DP2K.d.cts → signatures-hFbt_std.d.cts} +1 -1
  244. package/dist/{state-codes-DXSWtE6a.d.cts → state-codes-BlILGZ9d.d.cts} +1 -1
  245. package/dist/{state-codes-CxG1S9YY.d.ts → state-codes-oeFKlwXZ.d.ts} +1 -2
  246. package/dist/{tax-types-CgwxONDS.d.cts → tax-types-B5sQ8UyN.d.cts} +1 -1
  247. package/dist/{tax-types-CEpfSh5P.d.ts → tax-types-CsQ76JMf.d.ts} +1 -2
  248. package/dist/types/classification-codes.d.ts +1 -1
  249. package/dist/types/country-code.d.ts +1 -1
  250. package/dist/types/currencies.d.ts +1 -1
  251. package/dist/types/documents.d.ts +18 -0
  252. package/dist/types/e-invoice.d.ts +1 -1
  253. package/dist/types/index.d.ts +58 -59
  254. package/dist/types/msic/0X.d.ts +1 -1
  255. package/dist/types/msic/1X.d.ts +1 -1
  256. package/dist/types/msic/2X.d.ts +1 -1
  257. package/dist/types/msic/3X.d.ts +1 -1
  258. package/dist/types/msic/4X.d.ts +1 -1
  259. package/dist/types/msic/5X.d.ts +1 -1
  260. package/dist/types/msic/6X.d.ts +1 -1
  261. package/dist/types/msic/7X.d.ts +1 -1
  262. package/dist/types/msic/8X.d.ts +1 -1
  263. package/dist/types/msic/9X.d.ts +1 -1
  264. package/dist/types/msic-codes.d.ts +11 -11
  265. package/dist/types/payment-modes.d.ts +1 -1
  266. package/dist/types/signatures.d.ts +1 -1
  267. package/dist/types/state-codes.d.ts +1 -1
  268. package/dist/types/tax-types.d.ts +1 -1
  269. package/dist/types/unit/1X.d.ts +1 -1
  270. package/dist/types/unit/2X.d.ts +1 -1
  271. package/dist/types/unit/3X.d.ts +1 -1
  272. package/dist/types/unit/4X.d.ts +1 -1
  273. package/dist/types/unit/5X.d.ts +1 -1
  274. package/dist/types/unit/6X.d.ts +1 -1
  275. package/dist/types/unit/7X.d.ts +1 -1
  276. package/dist/types/unit/8X.d.ts +1 -1
  277. package/dist/types/unit/9X.d.ts +1 -1
  278. package/dist/types/unit/AX.d.ts +1 -1
  279. package/dist/types/unit/BX.d.ts +1 -1
  280. package/dist/types/unit/CX.d.ts +1 -1
  281. package/dist/types/unit/DX.d.ts +1 -1
  282. package/dist/types/unit/EX.d.ts +1 -1
  283. package/dist/types/unit/FX.d.ts +1 -1
  284. package/dist/types/unit/GX.d.ts +1 -1
  285. package/dist/types/unit/HX.d.ts +1 -1
  286. package/dist/types/unit/IX.d.ts +1 -1
  287. package/dist/types/unit/JX.d.ts +1 -1
  288. package/dist/types/unit/KX.d.ts +1 -1
  289. package/dist/types/unit/LX.d.ts +1 -1
  290. package/dist/types/unit/MX.d.ts +1 -1
  291. package/dist/types/unit/NX.d.ts +1 -1
  292. package/dist/types/unit/OX.d.ts +1 -1
  293. package/dist/types/unit/PX.d.ts +1 -1
  294. package/dist/types/unit/QX.d.ts +1 -1
  295. package/dist/types/unit/RX.d.ts +1 -1
  296. package/dist/types/unit/SX.d.ts +1 -1
  297. package/dist/types/unit/TX.d.ts +1 -1
  298. package/dist/types/unit/UX.d.ts +1 -1
  299. package/dist/types/unit/VX.d.ts +1 -1
  300. package/dist/types/unit/WX.d.ts +1 -1
  301. package/dist/types/unit/XX.d.ts +1 -1
  302. package/dist/types/unit/YX.d.ts +1 -1
  303. package/dist/types/unit/ZX.d.ts +1 -1
  304. package/dist/types/unit-types.d.ts +36 -36
  305. package/dist/unit-types-B41YFOLT.d.ts +55 -0
  306. package/dist/unit-types-CjWNk2wS.d.cts +56 -0
  307. package/dist/utils/base64.d.ts +1 -2
  308. package/dist/utils/base64.js +1 -2
  309. package/dist/utils/certificate.d.ts +22 -0
  310. package/dist/utils/certificate.js +3 -0
  311. package/dist/utils/document.d.ts +135 -0
  312. package/dist/utils/document.js +3 -0
  313. package/dist/utils/getBaseUrl.d.ts +1 -2
  314. package/dist/utils/getBaseUrl.js +1 -1
  315. package/dist/utils/helpers.d.ts +271 -0
  316. package/dist/utils/helpers.js +330 -0
  317. package/dist/utils/signature-diagnostics.d.ts +93 -0
  318. package/dist/utils/signature-diagnostics.js +326 -0
  319. package/dist/utils/validation.d.ts +46 -0
  320. package/dist/utils/validation.js +134 -0
  321. package/myinvois-cert.conf.template +23 -0
  322. package/package.json +9 -3
  323. package/scripts/gen-cert.sh +159 -0
  324. package/src/api/platform/platformLogin.ts +1 -1
  325. package/src/index.ts +528 -1
  326. package/src/types/documents.d.ts +870 -0
  327. package/src/types/index.d.ts +1 -1
  328. package/src/utils/certificate.ts +60 -0
  329. package/src/utils/document.ts +852 -0
  330. package/src/utils/helpers.ts +552 -0
  331. package/src/utils/signature-diagnostics.ts +583 -0
  332. package/src/utils/validation.ts +268 -0
  333. package/test/MyInvoiClientWithRealData.test.ts +9 -1
  334. package/test/MyInvoisClient.test.ts +7 -1
  335. package/test/dynamicInvoiceFeatures.test.ts +451 -0
  336. package/test/signAndSubmitInvoice.test.ts +271 -734
  337. package/test/signature-diagnostics.test.ts +130 -0
  338. package/tsconfig.json +0 -3
  339. package/dist/0X-C4IRh_fJ.d.ts.map +0 -1
  340. package/dist/0X-Yw7mZEro.d.cts.map +0 -1
  341. package/dist/1X-Brnls9Jh.d.ts.map +0 -1
  342. package/dist/1X-BwpSoT3o.d.cts.map +0 -1
  343. package/dist/1X-C-_KHV-Q.d.ts.map +0 -1
  344. package/dist/1X-D_aUVsuM.d.cts.map +0 -1
  345. package/dist/2X-Bb6elyzV.d.cts.map +0 -1
  346. package/dist/2X-DkS1BoE5.d.ts.map +0 -1
  347. package/dist/2X-UdQcQW24.d.ts.map +0 -1
  348. package/dist/2X-hClUyw26.d.cts.map +0 -1
  349. package/dist/3X-C7VFD-n-.d.cts.map +0 -1
  350. package/dist/3X-CLMESDvz.d.cts.map +0 -1
  351. package/dist/3X-DFI-4RQQ.d.ts.map +0 -1
  352. package/dist/3X-DVDyspgb.d.ts.map +0 -1
  353. package/dist/4X-CIJ2JJ2w.d.ts.map +0 -1
  354. package/dist/4X-CUR8jlaZ.d.ts.map +0 -1
  355. package/dist/4X-CvScPJTf.d.cts.map +0 -1
  356. package/dist/4X-DIfvpU6V.d.cts.map +0 -1
  357. package/dist/5X-BOUxhadJ.d.cts.map +0 -1
  358. package/dist/5X-C6db432h.d.ts.map +0 -1
  359. package/dist/5X-COsZHUaQ.d.ts.map +0 -1
  360. package/dist/5X-CkLu7Vyd.d.cts.map +0 -1
  361. package/dist/6X-C_fFIcJC.d.ts.map +0 -1
  362. package/dist/6X-ClZDKOTC.d.ts.map +0 -1
  363. package/dist/6X-DE7RJeV6.d.cts.map +0 -1
  364. package/dist/6X-Mf32k1d0.d.cts.map +0 -1
  365. package/dist/7X-BZyesooz.d.ts.map +0 -1
  366. package/dist/7X-Chtd6B66.d.cts.map +0 -1
  367. package/dist/7X-DoCUcp-J.d.cts.map +0 -1
  368. package/dist/7X-kot_VccM.d.ts.map +0 -1
  369. package/dist/8X-Df4DOBOe.d.ts.map +0 -1
  370. package/dist/8X-DkuKAkHz.d.ts.map +0 -1
  371. package/dist/8X-DqZyMvyV.d.cts.map +0 -1
  372. package/dist/8X-Dr9RunRw.d.cts.map +0 -1
  373. package/dist/9X-BDgifncF.d.ts.map +0 -1
  374. package/dist/9X-BaoZtjWF.d.cts.map +0 -1
  375. package/dist/9X-BcAb6Uso.d.cts.map +0 -1
  376. package/dist/9X-BhBWlgxG.d.ts.map +0 -1
  377. package/dist/AX-BY72FohC.d.cts.map +0 -1
  378. package/dist/AX-D6XHWdrY.d.ts.map +0 -1
  379. package/dist/BX-CA0OmrUZ.d.cts.map +0 -1
  380. package/dist/BX-D_0C8Qbd.d.ts.map +0 -1
  381. package/dist/CX-HH4cSZRX.d.ts.map +0 -1
  382. package/dist/CX-glpQSL8x.d.cts.map +0 -1
  383. package/dist/DX-DimL1MDM.d.cts.map +0 -1
  384. package/dist/DX-Dx22ax_I.d.ts.map +0 -1
  385. package/dist/EX-BRWh1wFc.d.ts.map +0 -1
  386. package/dist/EX-Cx87Ruxl.d.cts.map +0 -1
  387. package/dist/FX-D81UlxNN.d.cts.map +0 -1
  388. package/dist/FX-RmjwAr40.d.ts.map +0 -1
  389. package/dist/GX-9i7piP9G.d.cts.map +0 -1
  390. package/dist/GX-CJyo7oDp.d.ts.map +0 -1
  391. package/dist/HX-20GVJAvl.d.cts.map +0 -1
  392. package/dist/HX-XALBTdLA.d.ts.map +0 -1
  393. package/dist/IX-6SZ55QKb.d.ts.map +0 -1
  394. package/dist/IX-D54NGPsc.d.cts.map +0 -1
  395. package/dist/JX-C1RYcwQX.d.cts.map +0 -1
  396. package/dist/JX-hQ1XRmLp.d.ts.map +0 -1
  397. package/dist/KX-BNwunEfn.d.ts.map +0 -1
  398. package/dist/KX-gQHCIgtQ.d.cts.map +0 -1
  399. package/dist/LX-CHYX3X3J.d.ts.map +0 -1
  400. package/dist/LX-CPurJGIh.d.cts.map +0 -1
  401. package/dist/MX-BPGLWSUz.d.ts.map +0 -1
  402. package/dist/MX-BnyW5eHf.d.cts.map +0 -1
  403. package/dist/MyInvoisClient-BrNyMjS-.d.cts +0 -178
  404. package/dist/MyInvoisClient-BrNyMjS-.d.cts.map +0 -1
  405. package/dist/MyInvoisClient-CXu4pdl-.d.ts +0 -178
  406. package/dist/MyInvoisClient-CXu4pdl-.d.ts.map +0 -1
  407. package/dist/MyInvoisClient-Cnvb5iUC.js +0 -299
  408. package/dist/MyInvoisClient-Cnvb5iUC.js.map +0 -1
  409. package/dist/MyInvoisClient-DO1dJfQq.cjs +0 -304
  410. package/dist/MyInvoisClient-DO1dJfQq.cjs.map +0 -1
  411. package/dist/NX-B11fQuco.d.cts.map +0 -1
  412. package/dist/NX-RulN5Ml3.d.ts.map +0 -1
  413. package/dist/OX-DgKVSp7I.d.ts.map +0 -1
  414. package/dist/OX-T-ydRXQS.d.cts.map +0 -1
  415. package/dist/PX-DA4A2kEv.d.ts.map +0 -1
  416. package/dist/PX-p0n1SzvU.d.cts.map +0 -1
  417. package/dist/QX-CI1NccIB.d.cts.map +0 -1
  418. package/dist/QX-DrFqsMEs.d.ts.map +0 -1
  419. package/dist/RX-Cm7vFcFN.d.ts.map +0 -1
  420. package/dist/RX-DnNKol22.d.cts.map +0 -1
  421. package/dist/SX-BUjiWQYz.d.cts.map +0 -1
  422. package/dist/SX-CsPPTu-W.d.ts.map +0 -1
  423. package/dist/TX-DCY25MdR.d.ts.map +0 -1
  424. package/dist/TX-DOEpsf05.d.cts.map +0 -1
  425. package/dist/UX-DauyagHy.d.ts.map +0 -1
  426. package/dist/UX-DgUOnTFK.d.cts.map +0 -1
  427. package/dist/VX-DD4scgCe.d.ts.map +0 -1
  428. package/dist/VX-kUX6LM-3.d.cts.map +0 -1
  429. package/dist/WX-CjkoppdY.d.ts.map +0 -1
  430. package/dist/WX-DPfyPFFh.d.cts.map +0 -1
  431. package/dist/XX-C4C1gQZH.d.cts.map +0 -1
  432. package/dist/XX-sbsIUOnA.d.ts.map +0 -1
  433. package/dist/YX-BeT-LsiA.d.cts.map +0 -1
  434. package/dist/YX-DUdO8mRC.d.ts.map +0 -1
  435. package/dist/ZX-BuVTTq-D.d.cts.map +0 -1
  436. package/dist/ZX-DwfcSA-D.d.ts.map +0 -1
  437. package/dist/api/platform/platformLogin.d.ts.map +0 -1
  438. package/dist/canonicalize-C_fNNpYr.cjs +0 -80
  439. package/dist/canonicalize-C_fNNpYr.cjs.map +0 -1
  440. package/dist/canonicalize-DNUrCGad.js +0 -68
  441. package/dist/canonicalize-DNUrCGad.js.map +0 -1
  442. package/dist/classification-codes-B15PbWxz.d.cts.map +0 -1
  443. package/dist/classification-codes-C2X4xW5-.d.ts.map +0 -1
  444. package/dist/country-code-DPeNFMMi.d.cts.map +0 -1
  445. package/dist/country-code-DsI8Mbzx.d.ts.map +0 -1
  446. package/dist/currencies-DKuDflOO.d.ts.map +0 -1
  447. package/dist/currencies-S5g1gzBU.d.cts.map +0 -1
  448. package/dist/e-invoice-BuwtFnlI.d.cts.map +0 -1
  449. package/dist/e-invoice-C2TxhyrK.d.ts.map +0 -1
  450. package/dist/getBaseUrl-Dx6RDC8I.js.map +0 -1
  451. package/dist/hashCert-Bol7lIh2.js +0 -62
  452. package/dist/hashCert-Bol7lIh2.js.map +0 -1
  453. package/dist/hashCert-mlYEuYex.cjs +0 -68
  454. package/dist/hashCert-mlYEuYex.cjs.map +0 -1
  455. package/dist/hashSignedProperties-9vj5wlYR.js +0 -83
  456. package/dist/hashSignedProperties-9vj5wlYR.js.map +0 -1
  457. package/dist/hashSignedProperties-CU_ZqqmY.cjs +0 -95
  458. package/dist/hashSignedProperties-CU_ZqqmY.cjs.map +0 -1
  459. package/dist/index-B1DSs-wd.d.cts.map +0 -1
  460. package/dist/index-CJNLQVjx.d.ts +0 -1
  461. package/dist/index-FTgB2nM6.d.ts.map +0 -1
  462. package/dist/index-Wy1ONBjV.d.cts +0 -1
  463. package/dist/index10.cjs.map +0 -1
  464. package/dist/index66.cjs.map +0 -1
  465. package/dist/index67.cjs +0 -4
  466. package/dist/index67.cts.map +0 -1
  467. package/dist/index68.cjs +0 -3
  468. package/dist/index68.cts.map +0 -1
  469. package/dist/index69.cjs +0 -4
  470. package/dist/index69.cts.map +0 -1
  471. package/dist/index70.cjs +0 -3
  472. package/dist/index70.cts.map +0 -1
  473. package/dist/index71.cjs +0 -3
  474. package/dist/index71.cts.map +0 -1
  475. package/dist/index72.cjs +0 -3
  476. package/dist/index72.cts.map +0 -1
  477. package/dist/index73.cjs +0 -3
  478. package/dist/index73.cts.map +0 -1
  479. package/dist/invoice-1_1-BJVcw-oE.d.ts +0 -432
  480. package/dist/invoice-1_1-BJVcw-oE.d.ts.map +0 -1
  481. package/dist/invoice-1_1-DWdNPRzr.d.cts +0 -432
  482. package/dist/invoice-1_1-DWdNPRzr.d.cts.map +0 -1
  483. package/dist/invoice1-1-8S-QQn7P.cjs +0 -547
  484. package/dist/invoice1-1-8S-QQn7P.cjs.map +0 -1
  485. package/dist/invoice1-1-CHuLpkFz.js +0 -504
  486. package/dist/invoice1-1-CHuLpkFz.js.map +0 -1
  487. package/dist/msic-codes-B_1W6lZF.d.cts.map +0 -1
  488. package/dist/msic-codes-bs0lTfSZ.d.ts +0 -26
  489. package/dist/msic-codes-bs0lTfSZ.d.ts.map +0 -1
  490. package/dist/payment-modes-B8dNy3SM.d.ts.map +0 -1
  491. package/dist/payment-modes-DHihrywe.d.cts.map +0 -1
  492. package/dist/platformLogin-DsxWWUXr.js.map +0 -1
  493. package/dist/populateFinalDocument-BdyYzz5Y.cjs +0 -96
  494. package/dist/populateFinalDocument-BdyYzz5Y.cjs.map +0 -1
  495. package/dist/populateFinalDocument-BpLXmgLv.js +0 -90
  496. package/dist/populateFinalDocument-BpLXmgLv.js.map +0 -1
  497. package/dist/populateSignedProperties-BJMcBQ6S.cjs +0 -58
  498. package/dist/populateSignedProperties-BJMcBQ6S.cjs.map +0 -1
  499. package/dist/populateSignedProperties-BvGN-YZH.js +0 -52
  500. package/dist/populateSignedProperties-BvGN-YZH.js.map +0 -1
  501. package/dist/sign-B61Cy3gO.cjs +0 -40
  502. package/dist/sign-B61Cy3gO.cjs.map +0 -1
  503. package/dist/sign-DzHK7UhR.js +0 -34
  504. package/dist/sign-DzHK7UhR.js.map +0 -1
  505. package/dist/signatures-BKi9DP2K.d.cts.map +0 -1
  506. package/dist/signatures-C9QPZTQd.d.ts.map +0 -1
  507. package/dist/state-codes-CxG1S9YY.d.ts.map +0 -1
  508. package/dist/state-codes-DXSWtE6a.d.cts.map +0 -1
  509. package/dist/tax-types-CEpfSh5P.d.ts.map +0 -1
  510. package/dist/tax-types-CgwxONDS.d.cts.map +0 -1
  511. package/dist/transform-BLz0S687.cjs +0 -72
  512. package/dist/transform-BLz0S687.cjs.map +0 -1
  513. package/dist/transform-D1q-U6Zj.js +0 -66
  514. package/dist/transform-D1q-U6Zj.js.map +0 -1
  515. package/dist/types/documents/index.d.ts +0 -57
  516. package/dist/types/documents/invoice-1_1.d.ts +0 -56
  517. package/dist/unit-types-1bF0KhIp.d.ts +0 -56
  518. package/dist/unit-types-1bF0KhIp.d.ts.map +0 -1
  519. package/dist/unit-types-CsrkvgfG.d.cts +0 -56
  520. package/dist/unit-types-CsrkvgfG.d.cts.map +0 -1
  521. package/dist/utils/MyInvoisClient.d.ts +0 -60
  522. package/dist/utils/MyInvoisClient.js +0 -13
  523. package/dist/utils/base64.d.ts.map +0 -1
  524. package/dist/utils/base64.js.map +0 -1
  525. package/dist/utils/debug/debug-document-hash.d.ts +0 -100
  526. package/dist/utils/debug/debug-document-hash.d.ts.map +0 -1
  527. package/dist/utils/debug/debug-document-hash.js +0 -120
  528. package/dist/utils/debug/debug-document-hash.js.map +0 -1
  529. package/dist/utils/debug/debug-invoice-submission.d.ts +0 -152
  530. package/dist/utils/debug/debug-invoice-submission.d.ts.map +0 -1
  531. package/dist/utils/debug/debug-invoice-submission.js +0 -226
  532. package/dist/utils/debug/debug-invoice-submission.js.map +0 -1
  533. package/dist/utils/getBaseUrl.d.ts.map +0 -1
  534. package/dist/utils/invoice1-1.d.ts +0 -117
  535. package/dist/utils/invoice1-1.d.ts.map +0 -1
  536. package/dist/utils/invoice1-1.js +0 -10
  537. package/dist/utils/signature/canonicalize.d.ts +0 -26
  538. package/dist/utils/signature/canonicalize.d.ts.map +0 -1
  539. package/dist/utils/signature/canonicalize.js +0 -3
  540. package/dist/utils/signature/hashCert.d.ts +0 -15
  541. package/dist/utils/signature/hashCert.d.ts.map +0 -1
  542. package/dist/utils/signature/hashCert.js +0 -3
  543. package/dist/utils/signature/hashSignedProperties.d.ts +0 -25
  544. package/dist/utils/signature/hashSignedProperties.d.ts.map +0 -1
  545. package/dist/utils/signature/hashSignedProperties.js +0 -3
  546. package/dist/utils/signature/populateFinalDocument.d.ts +0 -23
  547. package/dist/utils/signature/populateFinalDocument.d.ts.map +0 -1
  548. package/dist/utils/signature/populateFinalDocument.js +0 -3
  549. package/dist/utils/signature/populateSignedProperties.d.ts +0 -23
  550. package/dist/utils/signature/populateSignedProperties.d.ts.map +0 -1
  551. package/dist/utils/signature/populateSignedProperties.js +0 -3
  552. package/dist/utils/signature/sign.d.ts +0 -16
  553. package/dist/utils/signature/sign.d.ts.map +0 -1
  554. package/dist/utils/signature/sign.js +0 -3
  555. package/dist/utils/signature/transform.d.ts +0 -16
  556. package/dist/utils/signature/transform.d.ts.map +0 -1
  557. package/dist/utils/signature/transform.js +0 -3
  558. package/src/types/documents/index.d.ts +0 -1
  559. package/src/types/documents/invoice-1_1.d.ts +0 -439
  560. package/src/utils/MyInvoisClient.ts +0 -501
  561. package/src/utils/debug/debug-document-hash.ts +0 -249
  562. package/src/utils/debug/debug-invoice-submission.ts +0 -355
  563. package/src/utils/invoice1-1.ts +0 -671
  564. package/src/utils/signature/canonicalize.ts +0 -104
  565. package/src/utils/signature/hashCert.ts +0 -115
  566. package/src/utils/signature/hashSignedProperties.ts +0 -155
  567. package/src/utils/signature/populateFinalDocument.ts +0 -187
  568. package/src/utils/signature/populateSignedProperties.ts +0 -87
  569. package/src/utils/signature/sign.ts +0 -51
  570. package/src/utils/signature/transform.ts +0 -99
  571. package/test/canonicalize.test.ts +0 -110
  572. package/test/hashCert.test.ts +0 -95
  573. package/test/hashSignedProperties.test.ts +0 -140
  574. package/test/populateFinalDocument.test.ts +0 -218
  575. package/test/populateSignedProperties.test.ts +0 -155
  576. package/test/sign.test.ts +0 -70
  577. package/test/transform.test.ts +0 -158
@@ -1,218 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { DOMParserImpl } from 'xmldom-ts'
3
- import * as xpath from 'xpath-ts'
4
- import { populateFinalDocument } from '../src/utils/signature/populateFinalDocument'
5
- import type { FinalDocumentData } from '../src/utils/signature/populateFinalDocument'
6
-
7
- // Define namespaces matching those in the function
8
- const ns = {
9
- inv: 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2',
10
- ext: 'urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2',
11
- sig: 'urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2',
12
- sac: 'urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2',
13
- ds: 'http://www.w3.org/2000/09/xmldsig#',
14
- }
15
- const select = xpath.useNamespaces(ns)
16
-
17
- // Sample XML structure mimicking the final signature part
18
- const sampleXmlTemplate = `
19
- <inv:Invoice xmlns:inv="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
20
- xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
21
- xmlns:sig="urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2"
22
- xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
23
- xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
24
- xmlns:sac="urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2"
25
- xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
26
- xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
27
- <ext:UBLExtensions>
28
- <ext:UBLExtension>
29
- <ext:ExtensionContent>
30
- <sig:UBLDocumentSignatures>
31
- <sac:SignatureInformation>
32
- <ds:Signature>
33
- <ds:SignedInfo>
34
- <ds:Reference URI="#id-xades-signed-props">
35
- <ds:DigestValue></ds:DigestValue>
36
- </ds:Reference>
37
- <ds:Reference Id="id-doc-signed-data">
38
- <ds:DigestValue></ds:DigestValue>
39
- </ds:Reference>
40
- </ds:SignedInfo>
41
- <ds:SignatureValue></ds:SignatureValue>
42
- <ds:KeyInfo>
43
- <ds:X509Data>
44
- <ds:X509Certificate></ds:X509Certificate>
45
- </ds:X509Data>
46
- </ds:KeyInfo>
47
- <!-- ds:Object containing xades:QualifyingProperties would normally be here -->
48
- </ds:Signature>
49
- </sac:SignatureInformation>
50
- </sig:UBLDocumentSignatures>
51
- </ext:ExtensionContent>
52
- </ext:UBLExtension>
53
- </ext:UBLExtensions>
54
- <!-- Required cac:Signature element that populateFinalDocument populates -->
55
- <cac:Signature>
56
- <cbc:ID></cbc:ID>
57
- <cbc:SignatureMethod></cbc:SignatureMethod>
58
- </cac:Signature>
59
- </inv:Invoice>
60
- `
61
-
62
- // Sample PEM for testing cleaning
63
- const sampleCertificatePem = `
64
- -----BEGIN CERTIFICATE-----
65
- SAMPLEBASE64DATA
66
- LINE2OFDATA
67
- -----END CERTIFICATE-----
68
- `
69
- const expectedCleanedCertificate = 'SAMPLEBASE64DATALINE2OFDATA'
70
-
71
- describe('populateFinalDocument', () => {
72
- const parser = new DOMParserImpl()
73
-
74
- it('should populate all final signature fields correctly', () => {
75
- const doc = parser.parseFromString(sampleXmlTemplate, 'application/xml')
76
- const testData: FinalDocumentData = {
77
- signatureValue: 'TEST_SIGNATURE_VALUE==',
78
- propsDigest: 'TEST_PROPS_DIGEST==',
79
- docDigest: 'TEST_DOC_DIGEST==',
80
- certificatePem: sampleCertificatePem,
81
- }
82
-
83
- populateFinalDocument(doc, testData)
84
-
85
- // Verify each populated value using XPath
86
- const signatureValueNodes = select('//ds:SignatureValue', doc) as Node[]
87
- expect(signatureValueNodes).toHaveLength(1)
88
- expect(signatureValueNodes[0].textContent).toBe(testData.signatureValue)
89
-
90
- const x509CertNodes = select('//ds:X509Certificate', doc) as Node[]
91
- expect(x509CertNodes).toHaveLength(1)
92
- expect(x509CertNodes[0].textContent).toBe(expectedCleanedCertificate) // Verify cleaned cert
93
-
94
- const propsDigestNodes = select(
95
- "//ds:Reference[@URI='#id-xades-signed-props']/ds:DigestValue",
96
- doc,
97
- ) as Node[]
98
- expect(propsDigestNodes).toHaveLength(1)
99
- expect(propsDigestNodes[0].textContent).toBe(testData.propsDigest)
100
-
101
- const docDigestNodes = select(
102
- "//ds:Reference[@Id='id-doc-signed-data']/ds:DigestValue",
103
- doc,
104
- ) as Node[]
105
- expect(docDigestNodes).toHaveLength(1)
106
- expect(docDigestNodes[0].textContent).toBe(testData.docDigest)
107
- })
108
-
109
- it('should throw error if SignatureValue element is missing', () => {
110
- const modifiedXml = sampleXmlTemplate.replace(
111
- '<ds:SignatureValue></ds:SignatureValue>',
112
- '',
113
- )
114
- const doc = parser.parseFromString(modifiedXml, 'application/xml')
115
- const testData: FinalDocumentData = {
116
- signatureValue: 's',
117
- propsDigest: 'p',
118
- docDigest: 'd',
119
- certificatePem: 'c',
120
- }
121
-
122
- expect(() => populateFinalDocument(doc, testData)).toThrow(
123
- /^Failed to set value for XPath .*ds:SignatureValue: Element not found/,
124
- )
125
- })
126
-
127
- it('should throw error if X509Certificate element is missing', () => {
128
- const modifiedXml = sampleXmlTemplate.replace(
129
- '<ds:X509Certificate></ds:X509Certificate>',
130
- '',
131
- )
132
- const doc = parser.parseFromString(modifiedXml, 'application/xml')
133
- const testData: FinalDocumentData = {
134
- signatureValue: 's',
135
- propsDigest: 'p',
136
- docDigest: 'd',
137
- certificatePem: 'c',
138
- }
139
-
140
- expect(() => populateFinalDocument(doc, testData)).toThrow(
141
- /^Failed to set value for XPath .*ds:X509Certificate: Element not found/,
142
- )
143
- })
144
-
145
- it('should throw error if propsDigest Reference element is missing', () => {
146
- // Parse the original XML
147
- const doc = parser.parseFromString(sampleXmlTemplate, 'application/xml')
148
-
149
- // Find and remove the target node using DOM manipulation
150
- const propsRefXPath = "//ds:Reference[@URI='#id-xades-signed-props']"
151
- const nodesToRemove = select(propsRefXPath, doc) as any[]
152
- expect(nodesToRemove).toHaveLength(1) // Ensure we found the node to remove
153
- const nodeToRemove = nodesToRemove[0]
154
- if (nodeToRemove.parentNode) {
155
- nodeToRemove.parentNode.removeChild(nodeToRemove)
156
- } else {
157
- throw new Error('Failed to find parent node for removal in test setup')
158
- }
159
-
160
- const testData: FinalDocumentData = {
161
- signatureValue: 's',
162
- propsDigest: 'p',
163
- docDigest: 'd',
164
- certificatePem: 'c',
165
- }
166
-
167
- // Regex adjusted slightly for flexibility (kept from previous step)
168
- expect(() => populateFinalDocument(doc, testData)).toThrow(
169
- /^Failed to set value for XPath .*@URI='#id-xades-signed-props'.*\/ds:DigestValue: Element not found for XPath: .*@URI='#id-xades-signed-props'.*\/ds:DigestValue$/,
170
- )
171
- })
172
-
173
- it('should throw error if docDigest Reference element is missing', () => {
174
- // Parse the original XML
175
- const doc = parser.parseFromString(sampleXmlTemplate, 'application/xml')
176
-
177
- // Find and remove the target node using DOM manipulation
178
- const docRefXPath = "//ds:Reference[@Id='id-doc-signed-data']"
179
- const nodesToRemove = select(docRefXPath, doc) as any[]
180
- expect(nodesToRemove).toHaveLength(1) // Ensure we found the node to remove
181
- const nodeToRemove = nodesToRemove[0]
182
- if (nodeToRemove.parentNode) {
183
- nodeToRemove.parentNode.removeChild(nodeToRemove)
184
- } else {
185
- throw new Error('Failed to find parent node for removal in test setup')
186
- }
187
-
188
- const testData: FinalDocumentData = {
189
- signatureValue: 's',
190
- propsDigest: 'p',
191
- docDigest: 'd',
192
- certificatePem: 'c',
193
- }
194
-
195
- // Regex adjusted slightly for flexibility (kept from previous step)
196
- expect(() => populateFinalDocument(doc, testData)).toThrow(
197
- /^Failed to set value for XPath .*@Id='id-doc-signed-data'.*\/ds:DigestValue: Element not found for XPath: .*@Id='id-doc-signed-data'.*\/ds:DigestValue$/,
198
- )
199
- })
200
-
201
- it('should throw error if multiple SignatureValue elements are found', () => {
202
- const modifiedXml = sampleXmlTemplate.replace(
203
- '<ds:SignatureValue></ds:SignatureValue>',
204
- '<ds:SignatureValue>1</ds:SignatureValue><ds:SignatureValue>2</ds:SignatureValue>',
205
- )
206
- const doc = parser.parseFromString(modifiedXml, 'application/xml')
207
- const testData: FinalDocumentData = {
208
- signatureValue: 's',
209
- propsDigest: 'p',
210
- docDigest: 'd',
211
- certificatePem: 'c',
212
- }
213
-
214
- expect(() => populateFinalDocument(doc, testData)).toThrow(
215
- /^Failed to set value for XPath .*ds:SignatureValue: Multiple elements found/,
216
- )
217
- })
218
- })
@@ -1,155 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { DOMParserImpl } from 'xmldom-ts'
3
- import * as xpath from 'xpath-ts'
4
- import { populateSignedProperties } from '../src/utils/signature/populateSignedProperties'
5
- import type { SignedPropertiesData } from '../src/utils/signature/populateSignedProperties'
6
-
7
- // Define namespaces matching those in the function
8
- const ns = {
9
- inv: 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2',
10
- ext: 'urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2',
11
- sig: 'urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2',
12
- sac: 'urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2',
13
- ds: 'http://www.w3.org/2000/09/xmldsig#',
14
- xades: 'http://uri.etsi.org/01903/v1.3.2#',
15
- }
16
- const select = xpath.useNamespaces(ns)
17
-
18
- // Sample XML structure mimicking the UBL signature part
19
- // Needs to include the full path for the properties to be populated.
20
- const sampleXmlTemplate = `
21
- <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
22
- xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
23
- xmlns:sig="urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2"
24
- xmlns:sac="urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2"
25
- xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
26
- xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
27
- <ext:UBLExtensions>
28
- <ext:UBLExtension>
29
- <ext:ExtensionContent>
30
- <sig:UBLDocumentSignatures>
31
- <sac:SignatureInformation>
32
- <ds:Signature>
33
- <ds:Object>
34
- <xades:QualifyingProperties>
35
- <xades:SignedProperties>
36
- <xades:SignedSignatureProperties>
37
- <xades:SigningTime></xades:SigningTime>
38
- <xades:SigningCertificate>
39
- <xades:Cert>
40
- <xades:CertDigest>
41
- <ds:DigestValue></ds:DigestValue>
42
- </xades:CertDigest>
43
- <xades:IssuerSerial>
44
- <ds:X509IssuerName></ds:X509IssuerName>
45
- <ds:X509SerialNumber></ds:X509SerialNumber>
46
- </xades:IssuerSerial>
47
- </xades:Cert>
48
- </xades:SigningCertificate>
49
- </xades:SignedSignatureProperties>
50
- </xades:SignedProperties>
51
- </xades:QualifyingProperties>
52
- </ds:Object>
53
- </ds:Signature>
54
- </sac:SignatureInformation>
55
- </sig:UBLDocumentSignatures>
56
- </ext:ExtensionContent>
57
- </ext:UBLExtension>
58
- </ext:UBLExtensions>
59
- <!-- Other Invoice Content -->
60
- </Invoice>
61
- `
62
-
63
- describe('populateSignedProperties', () => {
64
- const parser = new DOMParserImpl()
65
-
66
- it('should populate all specified properties correctly', () => {
67
- const doc = parser.parseFromString(sampleXmlTemplate, 'application/xml')
68
- const testData: SignedPropertiesData = {
69
- certDigest: 'TEST_CERT_DIGEST==',
70
- signingTime: '2024-01-01T12:00:00Z',
71
- issuerName: 'CN=Test Issuer, O=Test Org',
72
- serialNumber: '1234567890',
73
- }
74
-
75
- populateSignedProperties(doc, testData)
76
-
77
- // Verify each populated value using XPath
78
- const certDigestNodes = select(
79
- '//ds:DigestValue[ancestor::xades:CertDigest]',
80
- doc,
81
- ) as Node[]
82
- expect(certDigestNodes).toHaveLength(1)
83
- expect(certDigestNodes[0].textContent).toBe(testData.certDigest)
84
-
85
- const signingTimeNodes = select('//xades:SigningTime', doc) as Node[]
86
- expect(signingTimeNodes).toHaveLength(1)
87
- expect(signingTimeNodes[0].textContent).toBe(testData.signingTime)
88
-
89
- const issuerNameNodes = select('//ds:X509IssuerName', doc) as Node[]
90
- expect(issuerNameNodes).toHaveLength(1)
91
- expect(issuerNameNodes[0].textContent).toBe(testData.issuerName)
92
-
93
- const serialNumberNodes = select('//ds:X509SerialNumber', doc) as Node[]
94
- expect(serialNumberNodes).toHaveLength(1)
95
- expect(serialNumberNodes[0].textContent).toBe(testData.serialNumber)
96
- })
97
-
98
- it('should throw error if CertDigest element is missing', () => {
99
- // Create XML missing the target element
100
- const modifiedXml = sampleXmlTemplate.replace(
101
- '<ds:DigestValue></ds:DigestValue>',
102
- '',
103
- )
104
- const doc = parser.parseFromString(modifiedXml, 'application/xml')
105
- const testData: SignedPropertiesData = {
106
- certDigest: 'd',
107
- signingTime: 't',
108
- issuerName: 'i',
109
- serialNumber: 's',
110
- }
111
-
112
- expect(() => populateSignedProperties(doc, testData)).toThrow(
113
- /^Failed to set value for XPath .*ds:DigestValue: Element not found/,
114
- )
115
- })
116
-
117
- it('should throw error if SigningTime element is missing', () => {
118
- const modifiedXml = sampleXmlTemplate.replace(
119
- '<xades:SigningTime></xades:SigningTime>',
120
- '',
121
- )
122
- const doc = parser.parseFromString(modifiedXml, 'application/xml')
123
- const testData: SignedPropertiesData = {
124
- certDigest: 'd',
125
- signingTime: 't',
126
- issuerName: 'i',
127
- serialNumber: 's',
128
- }
129
-
130
- expect(() => populateSignedProperties(doc, testData)).toThrow(
131
- /^Failed to set value for XPath .*xades:SigningTime: Element not found/,
132
- )
133
- })
134
-
135
- // Add similar tests for missing IssuerName and SerialNumber if desired
136
-
137
- it('should throw error if multiple CertDigest elements are found', () => {
138
- // Create XML with duplicate target elements
139
- const modifiedXml = sampleXmlTemplate.replace(
140
- '<ds:DigestValue></ds:DigestValue>',
141
- '<ds:DigestValue>1</ds:DigestValue><ds:DigestValue>2</ds:DigestValue>',
142
- )
143
- const doc = parser.parseFromString(modifiedXml, 'application/xml')
144
- const testData: SignedPropertiesData = {
145
- certDigest: 'd',
146
- signingTime: 't',
147
- issuerName: 'i',
148
- serialNumber: 's',
149
- }
150
-
151
- expect(() => populateSignedProperties(doc, testData)).toThrow(
152
- /^Failed to set value for XPath .*ds:DigestValue: Multiple elements found/,
153
- )
154
- })
155
- })
package/test/sign.test.ts DELETED
@@ -1,70 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import * as crypto from 'crypto'
3
- import { signDocumentDigest } from '../src/utils/signature/sign'
4
-
5
- // Generate a test RSA key pair for signing/verifying
6
- const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {
7
- modulusLength: 2048, // Standard length
8
- publicKeyEncoding: {
9
- type: 'spki',
10
- format: 'pem',
11
- },
12
- privateKeyEncoding: {
13
- type: 'pkcs8',
14
- format: 'pem',
15
- },
16
- })
17
-
18
- describe('signDocumentDigest', () => {
19
- const sampleDocDigestBase64 = 'SampleDigestValueAsBase64=='
20
- const sampleDocDigestRaw = Buffer.from(sampleDocDigestBase64, 'base64')
21
-
22
- it('should generate a valid RSA-SHA256 signature in Base64 format', () => {
23
- const signatureBase64 = signDocumentDigest(
24
- sampleDocDigestBase64,
25
- privateKey,
26
- )
27
-
28
- // Verify the signature using the public key
29
- const verifier = crypto.createVerify('RSA-SHA256')
30
- verifier.update(sampleDocDigestRaw)
31
- verifier.end()
32
-
33
- const isValid = verifier.verify(publicKey, signatureBase64, 'base64')
34
-
35
- expect(isValid).toBe(true)
36
- // Check if the output is a valid Base64 string
37
- expect(() => Buffer.from(signatureBase64, 'base64')).not.toThrow()
38
- })
39
-
40
- it('should throw an error if the private key is invalid', () => {
41
- const invalidPrivateKey =
42
- '-----BEGIN INVALID KEY-----\nINVALID\n-----END INVALID KEY-----'
43
- expect(() =>
44
- signDocumentDigest(sampleDocDigestBase64, invalidPrivateKey),
45
- ).toThrow(/Failed to sign document digest/)
46
- // The specific internal crypto error message might vary, so we match our wrapper message
47
- })
48
-
49
- it('should handle Buffer as private key input', () => {
50
- const privateKeyBuffer = Buffer.from(privateKey)
51
- const signatureBase64 = signDocumentDigest(
52
- sampleDocDigestBase64,
53
- privateKeyBuffer,
54
- )
55
-
56
- const verifier = crypto.createVerify('RSA-SHA256')
57
- verifier.update(sampleDocDigestRaw)
58
- verifier.end()
59
- const isValid = verifier.verify(publicKey, signatureBase64, 'base64')
60
- expect(isValid).toBe(true)
61
- })
62
-
63
- it('should throw an error if the digest is not valid Base64', () => {
64
- const invalidBase64Digest = 'This is not base64'
65
- expect(() => signDocumentDigest(invalidBase64Digest, privateKey)).toThrow(
66
- 'Invalid Base64 characters detected in document digest.',
67
- )
68
- // Error likely occurs during Buffer.from() or the preceding regex check
69
- })
70
- })
@@ -1,158 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { transformXmlInvoice } from '../src/utils/signature/transform'
3
-
4
- // Helper function to normalize whitespace for comparisons
5
- const normalize = (str: string) => str.replace(/\s+/g, ' ').trim()
6
-
7
- describe('transformXmlInvoice', () => {
8
- it('should remove XML declaration, UBLExtensions, and Signature', () => {
9
- // Note: Backticks used for multi-line strings
10
- const inputXml = `<?xml version="1.0" encoding="UTF-8"?>
11
- <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
12
- xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
13
- xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
14
- xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2">
15
- <ext:UBLExtensions>
16
- <ext:UBLExtension>
17
- <ext:ExtensionContent>
18
- <!-- Signature Block -->
19
- </ext:ExtensionContent>
20
- </ext:UBLExtension>
21
- </ext:UBLExtensions>
22
- <cac:Signature>
23
- <cbc:ID>urn:oasis:names:specification:ubl:signature:Invoice</cbc:ID>
24
- <cac:SignatoryParty>
25
- <cac:PartyIdentification>
26
- <cbc:ID>SignerID</cbc:ID>
27
- </cac:PartyIdentification>
28
- </cac:SignatoryParty>
29
- <cac:DigitalSignatureAttachment>
30
- <cac:ExternalReference>
31
- <cbc:URI>#SignatureID</cbc:URI>
32
- </cac:ExternalReference>
33
- </cac:DigitalSignatureAttachment>
34
- </cac:Signature>
35
- <cbc:ID>INV123</cbc:ID>
36
- <cac:AccountingSupplierParty>
37
- <cac:Party>
38
- <cac:PartyName>
39
- <cbc:Name>Supplier Inc.</cbc:Name>
40
- </cac:PartyName>
41
- </cac:Party>
42
- </cac:AccountingSupplierParty>
43
- </Invoice>`
44
-
45
- const expectedXml = `
46
- <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
47
- xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
48
- xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
49
- xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2">
50
-
51
- <cbc:ID>INV123</cbc:ID>
52
- <cac:AccountingSupplierParty>
53
- <cac:Party>
54
- <cac:PartyName>
55
- <cbc:Name>Supplier Inc.</cbc:Name>
56
- </cac:PartyName>
57
- </cac:Party>
58
- </cac:AccountingSupplierParty>
59
- </Invoice>`
60
-
61
- expect(normalize(transformXmlInvoice(inputXml))).toEqual(
62
- normalize(expectedXml),
63
- )
64
- })
65
-
66
- it('should only remove XML declaration if others are absent', () => {
67
- const inputXml = `<?xml version="1.0" encoding="UTF-8"?>
68
- <Invoice><ID>1</ID></Invoice>`
69
- const expectedXml = `<Invoice><ID>1</ID></Invoice>`
70
- expect(transformXmlInvoice(inputXml)).toEqual(expectedXml)
71
- })
72
-
73
- it('should only remove UBLExtensions if others are absent', () => {
74
- const inputXml = `<Invoice xmlns:ext="urn:ext"><ext:UBLExtensions><data/></ext:UBLExtensions><ID>1</ID></Invoice>`
75
- const expectedXml = `<Invoice xmlns:ext="urn:ext"><ID>1</ID></Invoice>`
76
- expect(transformXmlInvoice(inputXml)).toEqual(expectedXml)
77
- })
78
-
79
- it('should only remove Signature if others are absent', () => {
80
- const inputXml = `<Invoice xmlns:cac="urn:cac"><cac:Signature><data/></cac:Signature><ID>1</ID></Invoice>`
81
- const expectedXml = `<Invoice xmlns:cac="urn:cac"><ID>1</ID></Invoice>`
82
- expect(transformXmlInvoice(inputXml)).toEqual(expectedXml)
83
- })
84
-
85
- it('should return unchanged XML if no transformations are needed', () => {
86
- const inputXml = `<Invoice><ID>1</ID><Amount>100</Amount></Invoice>`
87
- expect(transformXmlInvoice(inputXml)).toEqual(inputXml)
88
- })
89
-
90
- it('should handle XML without specified elements gracefully', () => {
91
- const inputXml = `<Invoice><ID>1</ID></Invoice>`
92
- const expectedXml = `<Invoice><ID>1</ID></Invoice>`
93
- expect(transformXmlInvoice(inputXml)).toEqual(expectedXml)
94
- })
95
-
96
- it('should throw an error for invalid XML', () => {
97
- // Correctly define invalidXml for this test scope
98
- const invalidXml = `<Invoice><ID>1</ID` // Missing closing tag
99
- // Adjust the regex to match the actual error format from the handler
100
- expect(() => transformXmlInvoice(invalidXml)).toThrow(
101
- /^ERROR: \[xmldom error\]/,
102
- )
103
- })
104
-
105
- it('should remove elements regardless of namespace prefixes', () => {
106
- const inputXml = `<?xml version="1.0"?>
107
- <inv:Invoice xmlns:inv="urn:invoice" xmlns:common="urn:common" xmlns:sig="urn:signature">
108
- <common:UBLExtensions><data/></common:UBLExtensions>
109
- <sig:Signature><data/></sig:Signature>
110
- <inv:ID>INV999</inv:ID>
111
- </inv:Invoice>`
112
- const expectedXml = `<inv:Invoice xmlns:inv="urn:invoice" xmlns:common="urn:common" xmlns:sig="urn:signature">
113
-
114
- <inv:ID>INV999</inv:ID>
115
- </inv:Invoice>`
116
-
117
- expect(normalize(transformXmlInvoice(inputXml))).toEqual(
118
- normalize(expectedXml),
119
- )
120
- })
121
-
122
- it('should handle self-closing UBLExtensions and Signature tags', () => {
123
- const inputXml = `<?xml version="1.0"?>
124
- <Invoice xmlns:ext="urn:ext" xmlns:cac="urn:cac">
125
- <ext:UBLExtensions />
126
- <cac:Signature />
127
- <ID>1</ID>
128
- </Invoice>`
129
- const expectedXml = `<Invoice xmlns:ext="urn:ext" xmlns:cac="urn:cac">
130
-
131
- <ID>1</ID>
132
- </Invoice>`
133
- expect(normalize(transformXmlInvoice(inputXml))).toEqual(
134
- normalize(expectedXml),
135
- )
136
- })
137
-
138
- it('should handle nested UBLExtensions/Signature (though unlikely structure)', () => {
139
- const inputXml = `<?xml version="1.0"?>
140
- <Invoice xmlns:ext="urn:ext" xmlns:cac="urn:cac">
141
- <SomeElement>
142
- <ext:UBLExtensions><Data1/></ext:UBLExtensions>
143
- </SomeElement>
144
- <cac:Signature><Data2/></cac:Signature>
145
- <ID>1</ID>
146
- </Invoice>`
147
- const expectedXml = `<Invoice xmlns:ext="urn:ext" xmlns:cac="urn:cac">
148
- <SomeElement>
149
-
150
- </SomeElement>
151
-
152
- <ID>1</ID>
153
- </Invoice>`
154
- expect(normalize(transformXmlInvoice(inputXml))).toEqual(
155
- normalize(expectedXml),
156
- )
157
- })
158
- })