@ripwords/myinvois-client 0.0.10 → 0.1.0

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 (557) hide show
  1. package/bun.lock +89 -132
  2. package/dist/0X-C4IRh_fJ.d.ts +211 -0
  3. package/dist/0X-C4IRh_fJ.d.ts.map +1 -0
  4. package/dist/0X-Yw7mZEro.d.cts +211 -0
  5. package/dist/0X-Yw7mZEro.d.cts.map +1 -0
  6. package/dist/1X-Brnls9Jh.d.ts +112 -0
  7. package/dist/1X-Brnls9Jh.d.ts.map +1 -0
  8. package/dist/1X-BwpSoT3o.d.cts +20 -0
  9. package/dist/1X-BwpSoT3o.d.cts.map +1 -0
  10. package/dist/1X-C-_KHV-Q.d.ts +20 -0
  11. package/dist/1X-C-_KHV-Q.d.ts.map +1 -0
  12. package/dist/1X-D_aUVsuM.d.cts +112 -0
  13. package/dist/1X-D_aUVsuM.d.cts.map +1 -0
  14. package/dist/2X-Bb6elyzV.d.cts +40 -0
  15. package/dist/2X-Bb6elyzV.d.cts.map +1 -0
  16. package/dist/2X-DkS1BoE5.d.ts +40 -0
  17. package/dist/2X-DkS1BoE5.d.ts.map +1 -0
  18. package/dist/2X-UdQcQW24.d.ts +140 -0
  19. package/dist/2X-UdQcQW24.d.ts.map +1 -0
  20. package/dist/2X-hClUyw26.d.cts +140 -0
  21. package/dist/2X-hClUyw26.d.cts.map +1 -0
  22. package/dist/3X-C7VFD-n-.d.cts +21 -0
  23. package/dist/3X-C7VFD-n-.d.cts.map +1 -0
  24. package/dist/3X-CLMESDvz.d.cts +62 -0
  25. package/dist/3X-CLMESDvz.d.cts.map +1 -0
  26. package/dist/3X-DFI-4RQQ.d.ts +21 -0
  27. package/dist/3X-DFI-4RQQ.d.ts.map +1 -0
  28. package/dist/3X-DVDyspgb.d.ts +62 -0
  29. package/dist/3X-DVDyspgb.d.ts.map +1 -0
  30. package/dist/4X-CIJ2JJ2w.d.ts +31 -0
  31. package/dist/4X-CIJ2JJ2w.d.ts.map +1 -0
  32. package/dist/4X-CUR8jlaZ.d.ts +265 -0
  33. package/dist/4X-CUR8jlaZ.d.ts.map +1 -0
  34. package/dist/4X-CvScPJTf.d.cts +265 -0
  35. package/dist/4X-CvScPJTf.d.cts.map +1 -0
  36. package/dist/4X-DIfvpU6V.d.cts +31 -0
  37. package/dist/4X-DIfvpU6V.d.cts.map +1 -0
  38. package/dist/5X-BOUxhadJ.d.cts +22 -0
  39. package/dist/5X-BOUxhadJ.d.cts.map +1 -0
  40. package/dist/5X-C6db432h.d.ts +77 -0
  41. package/dist/5X-C6db432h.d.ts.map +1 -0
  42. package/dist/5X-COsZHUaQ.d.ts +22 -0
  43. package/dist/5X-COsZHUaQ.d.ts.map +1 -0
  44. package/dist/5X-CkLu7Vyd.d.cts +77 -0
  45. package/dist/5X-CkLu7Vyd.d.cts.map +1 -0
  46. package/dist/6X-C_fFIcJC.d.ts +105 -0
  47. package/dist/6X-C_fFIcJC.d.ts.map +1 -0
  48. package/dist/6X-ClZDKOTC.d.ts +16 -0
  49. package/dist/6X-ClZDKOTC.d.ts.map +1 -0
  50. package/dist/6X-DE7RJeV6.d.cts +16 -0
  51. package/dist/6X-DE7RJeV6.d.cts.map +1 -0
  52. package/dist/6X-Mf32k1d0.d.cts +105 -0
  53. package/dist/6X-Mf32k1d0.d.cts.map +1 -0
  54. package/dist/7X-BZyesooz.d.ts +16 -0
  55. package/dist/7X-BZyesooz.d.ts.map +1 -0
  56. package/dist/7X-Chtd6B66.d.cts +16 -0
  57. package/dist/7X-Chtd6B66.d.cts.map +1 -0
  58. package/dist/7X-DoCUcp-J.d.cts +71 -0
  59. package/dist/7X-DoCUcp-J.d.cts.map +1 -0
  60. package/dist/7X-kot_VccM.d.ts +71 -0
  61. package/dist/7X-kot_VccM.d.ts.map +1 -0
  62. package/dist/8X-Df4DOBOe.d.ts +110 -0
  63. package/dist/8X-Df4DOBOe.d.ts.map +1 -0
  64. package/dist/8X-DkuKAkHz.d.ts +19 -0
  65. package/dist/8X-DkuKAkHz.d.ts.map +1 -0
  66. package/dist/8X-DqZyMvyV.d.cts +19 -0
  67. package/dist/8X-DqZyMvyV.d.cts.map +1 -0
  68. package/dist/8X-Dr9RunRw.d.cts +110 -0
  69. package/dist/8X-Dr9RunRw.d.cts.map +1 -0
  70. package/dist/9X-BDgifncF.d.ts +15 -0
  71. package/dist/9X-BDgifncF.d.ts.map +1 -0
  72. package/dist/9X-BaoZtjWF.d.cts +98 -0
  73. package/dist/9X-BaoZtjWF.d.cts.map +1 -0
  74. package/dist/9X-BcAb6Uso.d.cts +15 -0
  75. package/dist/9X-BcAb6Uso.d.cts.map +1 -0
  76. package/dist/9X-BhBWlgxG.d.ts +98 -0
  77. package/dist/9X-BhBWlgxG.d.ts.map +1 -0
  78. package/dist/AX-BY72FohC.d.cts +111 -0
  79. package/dist/AX-BY72FohC.d.cts.map +1 -0
  80. package/dist/AX-D6XHWdrY.d.ts +111 -0
  81. package/dist/AX-D6XHWdrY.d.ts.map +1 -0
  82. package/dist/BX-CA0OmrUZ.d.cts +115 -0
  83. package/dist/BX-CA0OmrUZ.d.cts.map +1 -0
  84. package/dist/BX-D_0C8Qbd.d.ts +115 -0
  85. package/dist/BX-D_0C8Qbd.d.ts.map +1 -0
  86. package/dist/CX-HH4cSZRX.d.ts +128 -0
  87. package/dist/CX-HH4cSZRX.d.ts.map +1 -0
  88. package/dist/CX-glpQSL8x.d.cts +128 -0
  89. package/dist/CX-glpQSL8x.d.cts.map +1 -0
  90. package/dist/DX-DimL1MDM.d.cts +115 -0
  91. package/dist/DX-DimL1MDM.d.cts.map +1 -0
  92. package/dist/DX-Dx22ax_I.d.ts +115 -0
  93. package/dist/DX-Dx22ax_I.d.ts.map +1 -0
  94. package/dist/EX-BRWh1wFc.d.ts +107 -0
  95. package/dist/EX-BRWh1wFc.d.ts.map +1 -0
  96. package/dist/EX-Cx87Ruxl.d.cts +107 -0
  97. package/dist/EX-Cx87Ruxl.d.cts.map +1 -0
  98. package/dist/FX-D81UlxNN.d.cts +127 -0
  99. package/dist/FX-D81UlxNN.d.cts.map +1 -0
  100. package/dist/FX-RmjwAr40.d.ts +127 -0
  101. package/dist/FX-RmjwAr40.d.ts.map +1 -0
  102. package/dist/GX-9i7piP9G.d.cts +136 -0
  103. package/dist/GX-9i7piP9G.d.cts.map +1 -0
  104. package/dist/GX-CJyo7oDp.d.ts +136 -0
  105. package/dist/GX-CJyo7oDp.d.ts.map +1 -0
  106. package/dist/HX-20GVJAvl.d.cts +126 -0
  107. package/dist/HX-20GVJAvl.d.cts.map +1 -0
  108. package/dist/HX-XALBTdLA.d.ts +126 -0
  109. package/dist/HX-XALBTdLA.d.ts.map +1 -0
  110. package/dist/IX-6SZ55QKb.d.ts +23 -0
  111. package/dist/IX-6SZ55QKb.d.ts.map +1 -0
  112. package/dist/IX-D54NGPsc.d.cts +23 -0
  113. package/dist/IX-D54NGPsc.d.cts.map +1 -0
  114. package/dist/JX-C1RYcwQX.d.cts +104 -0
  115. package/dist/JX-C1RYcwQX.d.cts.map +1 -0
  116. package/dist/JX-hQ1XRmLp.d.ts +104 -0
  117. package/dist/JX-hQ1XRmLp.d.ts.map +1 -0
  118. package/dist/KX-BNwunEfn.d.ts +151 -0
  119. package/dist/KX-BNwunEfn.d.ts.map +1 -0
  120. package/dist/KX-gQHCIgtQ.d.cts +151 -0
  121. package/dist/KX-gQHCIgtQ.d.cts.map +1 -0
  122. package/dist/LX-CHYX3X3J.d.ts +123 -0
  123. package/dist/LX-CHYX3X3J.d.ts.map +1 -0
  124. package/dist/LX-CPurJGIh.d.cts +123 -0
  125. package/dist/LX-CPurJGIh.d.cts.map +1 -0
  126. package/dist/MX-BPGLWSUz.d.ts +153 -0
  127. package/dist/MX-BPGLWSUz.d.ts.map +1 -0
  128. package/dist/MX-BnyW5eHf.d.cts +153 -0
  129. package/dist/MX-BnyW5eHf.d.cts.map +1 -0
  130. package/dist/MyInvoisClient-BrNyMjS-.d.cts +178 -0
  131. package/dist/MyInvoisClient-BrNyMjS-.d.cts.map +1 -0
  132. package/dist/MyInvoisClient-CXu4pdl-.d.ts +178 -0
  133. package/dist/MyInvoisClient-CXu4pdl-.d.ts.map +1 -0
  134. package/dist/MyInvoisClient-Cnvb5iUC.js +299 -0
  135. package/dist/MyInvoisClient-Cnvb5iUC.js.map +1 -0
  136. package/dist/MyInvoisClient-DO1dJfQq.cjs +304 -0
  137. package/dist/MyInvoisClient-DO1dJfQq.cjs.map +1 -0
  138. package/dist/NX-B11fQuco.d.cts +122 -0
  139. package/dist/NX-B11fQuco.d.cts.map +1 -0
  140. package/dist/NX-RulN5Ml3.d.ts +122 -0
  141. package/dist/NX-RulN5Ml3.d.ts.map +1 -0
  142. package/dist/OX-DgKVSp7I.d.ts +26 -0
  143. package/dist/OX-DgKVSp7I.d.ts.map +1 -0
  144. package/dist/OX-T-ydRXQS.d.cts +26 -0
  145. package/dist/OX-T-ydRXQS.d.cts.map +1 -0
  146. package/dist/PX-DA4A2kEv.d.ts +121 -0
  147. package/dist/PX-DA4A2kEv.d.ts.map +1 -0
  148. package/dist/PX-p0n1SzvU.d.cts +121 -0
  149. package/dist/PX-p0n1SzvU.d.cts.map +1 -0
  150. package/dist/QX-CI1NccIB.d.cts +59 -0
  151. package/dist/QX-CI1NccIB.d.cts.map +1 -0
  152. package/dist/QX-DrFqsMEs.d.ts +59 -0
  153. package/dist/QX-DrFqsMEs.d.ts.map +1 -0
  154. package/dist/RX-Cm7vFcFN.d.ts +23 -0
  155. package/dist/RX-Cm7vFcFN.d.ts.map +1 -0
  156. package/dist/RX-DnNKol22.d.cts +23 -0
  157. package/dist/RX-DnNKol22.d.cts.map +1 -0
  158. package/dist/SX-BUjiWQYz.d.cts +40 -0
  159. package/dist/SX-BUjiWQYz.d.cts.map +1 -0
  160. package/dist/SX-CsPPTu-W.d.ts +40 -0
  161. package/dist/SX-CsPPTu-W.d.ts.map +1 -0
  162. package/dist/TX-DCY25MdR.d.ts +31 -0
  163. package/dist/TX-DCY25MdR.d.ts.map +1 -0
  164. package/dist/TX-DOEpsf05.d.cts +31 -0
  165. package/dist/TX-DOEpsf05.d.cts.map +1 -0
  166. package/dist/UX-DauyagHy.d.ts +18 -0
  167. package/dist/UX-DauyagHy.d.ts.map +1 -0
  168. package/dist/UX-DgUOnTFK.d.cts +18 -0
  169. package/dist/UX-DgUOnTFK.d.cts.map +1 -0
  170. package/dist/VX-DD4scgCe.d.ts +17 -0
  171. package/dist/VX-DD4scgCe.d.ts.map +1 -0
  172. package/dist/VX-kUX6LM-3.d.cts +17 -0
  173. package/dist/VX-kUX6LM-3.d.cts.map +1 -0
  174. package/dist/WX-CjkoppdY.d.ts +26 -0
  175. package/dist/WX-CjkoppdY.d.ts.map +1 -0
  176. package/dist/WX-DPfyPFFh.d.cts +26 -0
  177. package/dist/WX-DPfyPFFh.d.cts.map +1 -0
  178. package/dist/XX-C4C1gQZH.d.cts +828 -0
  179. package/dist/XX-C4C1gQZH.d.cts.map +1 -0
  180. package/dist/XX-sbsIUOnA.d.ts +828 -0
  181. package/dist/XX-sbsIUOnA.d.ts.map +1 -0
  182. package/dist/YX-BeT-LsiA.d.cts +20 -0
  183. package/dist/YX-BeT-LsiA.d.cts.map +1 -0
  184. package/dist/YX-DUdO8mRC.d.ts +20 -0
  185. package/dist/YX-DUdO8mRC.d.ts.map +1 -0
  186. package/dist/ZX-BuVTTq-D.d.cts +22 -0
  187. package/dist/ZX-BuVTTq-D.d.cts.map +1 -0
  188. package/dist/ZX-DwfcSA-D.d.ts +22 -0
  189. package/dist/ZX-DwfcSA-D.d.ts.map +1 -0
  190. package/dist/api/platform/platformLogin.d.ts +67 -0
  191. package/dist/api/platform/platformLogin.d.ts.map +1 -0
  192. package/dist/api/platform/platformLogin.js +3 -0
  193. package/dist/canonicalize-C_fNNpYr.cjs +80 -0
  194. package/dist/canonicalize-C_fNNpYr.cjs.map +1 -0
  195. package/dist/canonicalize-DNUrCGad.js +68 -0
  196. package/dist/canonicalize-DNUrCGad.js.map +1 -0
  197. package/dist/chunk-CUT6urMc.cjs +30 -0
  198. package/dist/classification-codes-B15PbWxz.d.cts +118 -0
  199. package/dist/classification-codes-B15PbWxz.d.cts.map +1 -0
  200. package/dist/classification-codes-C2X4xW5-.d.ts +118 -0
  201. package/dist/classification-codes-C2X4xW5-.d.ts.map +1 -0
  202. package/dist/country-code-DPeNFMMi.d.cts +543 -0
  203. package/dist/country-code-DPeNFMMi.d.cts.map +1 -0
  204. package/dist/country-code-DsI8Mbzx.d.ts +543 -0
  205. package/dist/country-code-DsI8Mbzx.d.ts.map +1 -0
  206. package/dist/currencies-DKuDflOO.d.ts +208 -0
  207. package/dist/currencies-DKuDflOO.d.ts.map +1 -0
  208. package/dist/currencies-S5g1gzBU.d.cts +208 -0
  209. package/dist/currencies-S5g1gzBU.d.cts.map +1 -0
  210. package/dist/e-invoice-BuwtFnlI.d.cts +44 -0
  211. package/dist/e-invoice-BuwtFnlI.d.cts.map +1 -0
  212. package/dist/e-invoice-C2TxhyrK.d.ts +44 -0
  213. package/dist/e-invoice-C2TxhyrK.d.ts.map +1 -0
  214. package/dist/getBaseUrl-CO7Jp27d.cjs +14 -0
  215. package/dist/getBaseUrl-CO7Jp27d.cjs.map +1 -0
  216. package/dist/getBaseUrl-Dx6RDC8I.js +8 -0
  217. package/dist/getBaseUrl-Dx6RDC8I.js.map +1 -0
  218. package/dist/hashCert-Bol7lIh2.js +62 -0
  219. package/dist/hashCert-Bol7lIh2.js.map +1 -0
  220. package/dist/hashCert-mlYEuYex.cjs +68 -0
  221. package/dist/hashCert-mlYEuYex.cjs.map +1 -0
  222. package/dist/hashSignedProperties-9vj5wlYR.js +83 -0
  223. package/dist/hashSignedProperties-9vj5wlYR.js.map +1 -0
  224. package/dist/hashSignedProperties-CU_ZqqmY.cjs +95 -0
  225. package/dist/hashSignedProperties-CU_ZqqmY.cjs.map +1 -0
  226. package/dist/index-B1DSs-wd.d.cts +16 -0
  227. package/dist/index-B1DSs-wd.d.cts.map +1 -0
  228. package/dist/index-CJNLQVjx.d.ts +1 -0
  229. package/dist/index-FTgB2nM6.d.ts +16 -0
  230. package/dist/index-FTgB2nM6.d.ts.map +1 -0
  231. package/dist/index-Wy1ONBjV.d.cts +1 -0
  232. package/dist/index.cjs +13 -103
  233. package/dist/index.d.ts +60 -5666
  234. package/dist/index.js +11 -99
  235. package/dist/index10.cjs +34 -0
  236. package/dist/index10.cjs.map +1 -0
  237. package/dist/index11.cjs +24 -0
  238. package/dist/index11.cjs.map +1 -0
  239. package/dist/index12.cjs +0 -0
  240. package/dist/index13.cjs +13 -0
  241. package/dist/index14.cjs +13 -0
  242. package/dist/index14.cjs.map +1 -0
  243. package/dist/index15.cjs +3 -0
  244. package/dist/index16.cjs +17 -0
  245. package/dist/index17.cjs +3 -0
  246. package/dist/index18.cjs +208 -0
  247. package/dist/index18.cjs.map +1 -0
  248. package/dist/index19.cjs +109 -0
  249. package/dist/index19.cjs.map +1 -0
  250. package/dist/index2.cjs +62 -0
  251. package/dist/index2.cjs.map +1 -0
  252. package/dist/index20.cjs +137 -0
  253. package/dist/index20.cjs.map +1 -0
  254. package/dist/index21.cjs +64 -0
  255. package/dist/index21.cjs.map +1 -0
  256. package/dist/index22.cjs +267 -0
  257. package/dist/index22.cjs.map +1 -0
  258. package/dist/index23.cjs +79 -0
  259. package/dist/index23.cjs.map +1 -0
  260. package/dist/index24.cjs +107 -0
  261. package/dist/index24.cjs.map +1 -0
  262. package/dist/index25.cjs +73 -0
  263. package/dist/index25.cjs.map +1 -0
  264. package/dist/index26.cjs +112 -0
  265. package/dist/index26.cjs.map +1 -0
  266. package/dist/index27.cjs +100 -0
  267. package/dist/index27.cjs.map +1 -0
  268. package/dist/index28.cjs +18 -0
  269. package/dist/index28.cjs.map +1 -0
  270. package/dist/index29.cjs +38 -0
  271. package/dist/index29.cjs.map +1 -0
  272. package/dist/index3.cjs +532 -0
  273. package/dist/index3.cjs.map +1 -0
  274. package/dist/index30.cjs +19 -0
  275. package/dist/index30.cjs.map +1 -0
  276. package/dist/index31.cjs +29 -0
  277. package/dist/index31.cjs.map +1 -0
  278. package/dist/index32.cjs +20 -0
  279. package/dist/index32.cjs.map +1 -0
  280. package/dist/index33.cjs +14 -0
  281. package/dist/index33.cjs.map +1 -0
  282. package/dist/index34.cjs +14 -0
  283. package/dist/index34.cjs.map +1 -0
  284. package/dist/index35.cjs +17 -0
  285. package/dist/index35.cjs.map +1 -0
  286. package/dist/index36.cjs +13 -0
  287. package/dist/index36.cjs.map +1 -0
  288. package/dist/index37.cjs +108 -0
  289. package/dist/index37.cjs.map +1 -0
  290. package/dist/index38.cjs +113 -0
  291. package/dist/index38.cjs.map +1 -0
  292. package/dist/index39.cjs +126 -0
  293. package/dist/index39.cjs.map +1 -0
  294. package/dist/index4.cjs +196 -0
  295. package/dist/index4.cjs.map +1 -0
  296. package/dist/index40.cjs +113 -0
  297. package/dist/index40.cjs.map +1 -0
  298. package/dist/index41.cjs +105 -0
  299. package/dist/index41.cjs.map +1 -0
  300. package/dist/index42.cjs +125 -0
  301. package/dist/index42.cjs.map +1 -0
  302. package/dist/index43.cjs +134 -0
  303. package/dist/index43.cjs.map +1 -0
  304. package/dist/index44.cjs +124 -0
  305. package/dist/index44.cjs.map +1 -0
  306. package/dist/index45.cjs +21 -0
  307. package/dist/index45.cjs.map +1 -0
  308. package/dist/index46.cjs +102 -0
  309. package/dist/index46.cjs.map +1 -0
  310. package/dist/index47.cjs +149 -0
  311. package/dist/index47.cjs.map +1 -0
  312. package/dist/index48.cjs +121 -0
  313. package/dist/index48.cjs.map +1 -0
  314. package/dist/index49.cjs +151 -0
  315. package/dist/index49.cjs.map +1 -0
  316. package/dist/index5.cjs +25 -0
  317. package/dist/index5.cjs.map +1 -0
  318. package/dist/index50.cjs +120 -0
  319. package/dist/index50.cjs.map +1 -0
  320. package/dist/index51.cjs +24 -0
  321. package/dist/index51.cjs.map +1 -0
  322. package/dist/index52.cjs +119 -0
  323. package/dist/index52.cjs.map +1 -0
  324. package/dist/index53.cjs +54 -0
  325. package/dist/index53.cjs.map +1 -0
  326. package/dist/index54.cjs +21 -0
  327. package/dist/index54.cjs.map +1 -0
  328. package/dist/index55.cjs +35 -0
  329. package/dist/index55.cjs.map +1 -0
  330. package/dist/index56.cjs +29 -0
  331. package/dist/index56.cjs.map +1 -0
  332. package/dist/index57.cjs +16 -0
  333. package/dist/index57.cjs.map +1 -0
  334. package/dist/index58.cjs +15 -0
  335. package/dist/index58.cjs.map +1 -0
  336. package/dist/index59.cjs +24 -0
  337. package/dist/index59.cjs.map +1 -0
  338. package/dist/index59.cts.map +1 -0
  339. package/dist/index6.cjs +0 -0
  340. package/dist/index60.cjs +419 -0
  341. package/dist/index60.cjs.map +1 -0
  342. package/dist/index61.cjs +15 -0
  343. package/dist/index61.cjs.map +1 -0
  344. package/dist/index62.cjs +16 -0
  345. package/dist/index62.cjs.map +1 -0
  346. package/dist/index62.cts.map +1 -0
  347. package/dist/index63.cjs +0 -0
  348. package/dist/index63.cts.map +1 -0
  349. package/dist/index64.cjs +0 -0
  350. package/dist/index64.cts.map +1 -0
  351. package/dist/index65.cjs +122 -0
  352. package/dist/index65.cjs.map +1 -0
  353. package/dist/index65.cts.map +1 -0
  354. package/dist/index66.cjs +229 -0
  355. package/dist/index66.cjs.map +1 -0
  356. package/dist/index66.cts.map +1 -0
  357. package/dist/index67.cjs +4 -0
  358. package/dist/index67.cts.map +1 -0
  359. package/dist/index68.cjs +3 -0
  360. package/dist/index68.cts.map +1 -0
  361. package/dist/index69.cjs +4 -0
  362. package/dist/index69.cts.map +1 -0
  363. package/dist/index7.cjs +0 -0
  364. package/dist/index70.cjs +3 -0
  365. package/dist/index70.cts.map +1 -0
  366. package/dist/index71.cjs +3 -0
  367. package/dist/index71.cts.map +1 -0
  368. package/dist/index72.cjs +3 -0
  369. package/dist/index72.cts.map +1 -0
  370. package/dist/index73.cjs +3 -0
  371. package/dist/index73.cts.map +1 -0
  372. package/dist/index8.cjs +25 -0
  373. package/dist/index8.cjs.map +1 -0
  374. package/dist/index9.cjs +0 -0
  375. package/dist/invoice-1_1-BJVcw-oE.d.ts +432 -0
  376. package/dist/invoice-1_1-BJVcw-oE.d.ts.map +1 -0
  377. package/dist/invoice-1_1-DWdNPRzr.d.cts +432 -0
  378. package/dist/invoice-1_1-DWdNPRzr.d.cts.map +1 -0
  379. package/dist/invoice1-1-8S-QQn7P.cjs +547 -0
  380. package/dist/invoice1-1-8S-QQn7P.cjs.map +1 -0
  381. package/dist/invoice1-1-CHuLpkFz.js +504 -0
  382. package/dist/invoice1-1-CHuLpkFz.js.map +1 -0
  383. package/dist/msic-codes-B_1W6lZF.d.cts +26 -0
  384. package/dist/msic-codes-B_1W6lZF.d.cts.map +1 -0
  385. package/dist/msic-codes-bs0lTfSZ.d.ts +26 -0
  386. package/dist/msic-codes-bs0lTfSZ.d.ts.map +1 -0
  387. package/dist/payment-modes-B8dNy3SM.d.ts +44 -0
  388. package/dist/payment-modes-B8dNy3SM.d.ts.map +1 -0
  389. package/dist/payment-modes-DHihrywe.d.cts +44 -0
  390. package/dist/payment-modes-DHihrywe.d.cts.map +1 -0
  391. package/dist/platformLogin-DsxWWUXr.js +31 -0
  392. package/dist/platformLogin-DsxWWUXr.js.map +1 -0
  393. package/dist/platformLogin-PGzMhw1X.cjs +37 -0
  394. package/dist/platformLogin-PGzMhw1X.cjs.map +1 -0
  395. package/dist/populateFinalDocument-BdyYzz5Y.cjs +96 -0
  396. package/dist/populateFinalDocument-BdyYzz5Y.cjs.map +1 -0
  397. package/dist/populateFinalDocument-BpLXmgLv.js +90 -0
  398. package/dist/populateFinalDocument-BpLXmgLv.js.map +1 -0
  399. package/dist/populateSignedProperties-BJMcBQ6S.cjs +58 -0
  400. package/dist/populateSignedProperties-BJMcBQ6S.cjs.map +1 -0
  401. package/dist/populateSignedProperties-BvGN-YZH.js +52 -0
  402. package/dist/populateSignedProperties-BvGN-YZH.js.map +1 -0
  403. package/dist/sign-B61Cy3gO.cjs +40 -0
  404. package/dist/sign-B61Cy3gO.cjs.map +1 -0
  405. package/dist/sign-DzHK7UhR.js +34 -0
  406. package/dist/sign-DzHK7UhR.js.map +1 -0
  407. package/dist/signatures-BKi9DP2K.d.cts +173 -0
  408. package/dist/signatures-BKi9DP2K.d.cts.map +1 -0
  409. package/dist/signatures-C9QPZTQd.d.ts +173 -0
  410. package/dist/signatures-C9QPZTQd.d.ts.map +1 -0
  411. package/dist/state-codes-CxG1S9YY.d.ts +62 -0
  412. package/dist/state-codes-CxG1S9YY.d.ts.map +1 -0
  413. package/dist/state-codes-DXSWtE6a.d.cts +62 -0
  414. package/dist/state-codes-DXSWtE6a.d.cts.map +1 -0
  415. package/dist/tax-types-CEpfSh5P.d.ts +42 -0
  416. package/dist/tax-types-CEpfSh5P.d.ts.map +1 -0
  417. package/dist/tax-types-CgwxONDS.d.cts +42 -0
  418. package/dist/tax-types-CgwxONDS.d.cts.map +1 -0
  419. package/dist/transform-BLz0S687.cjs +72 -0
  420. package/dist/transform-BLz0S687.cjs.map +1 -0
  421. package/dist/transform-D1q-U6Zj.js +66 -0
  422. package/dist/transform-D1q-U6Zj.js.map +1 -0
  423. package/dist/types/classification-codes.d.ts +2 -0
  424. package/dist/types/country-code.d.ts +2 -0
  425. package/dist/types/currencies.d.ts +2 -0
  426. package/dist/types/documents/index.d.ts +57 -0
  427. package/dist/types/documents/invoice-1_1.d.ts +56 -0
  428. package/dist/types/e-invoice.d.ts +2 -0
  429. package/dist/types/index.d.ts +59 -0
  430. package/dist/types/msic/0X.d.ts +2 -0
  431. package/dist/types/msic/1X.d.ts +2 -0
  432. package/dist/types/msic/2X.d.ts +2 -0
  433. package/dist/types/msic/3X.d.ts +2 -0
  434. package/dist/types/msic/4X.d.ts +2 -0
  435. package/dist/types/msic/5X.d.ts +2 -0
  436. package/dist/types/msic/6X.d.ts +2 -0
  437. package/dist/types/msic/7X.d.ts +2 -0
  438. package/dist/types/msic/8X.d.ts +2 -0
  439. package/dist/types/msic/9X.d.ts +2 -0
  440. package/dist/types/msic-codes.d.ts +12 -0
  441. package/dist/types/payment-modes.d.ts +2 -0
  442. package/dist/types/signatures.d.ts +2 -0
  443. package/dist/types/state-codes.d.ts +2 -0
  444. package/dist/types/tax-types.d.ts +2 -0
  445. package/dist/types/unit/1X.d.ts +2 -0
  446. package/dist/types/unit/2X.d.ts +2 -0
  447. package/dist/types/unit/3X.d.ts +2 -0
  448. package/dist/types/unit/4X.d.ts +2 -0
  449. package/dist/types/unit/5X.d.ts +2 -0
  450. package/dist/types/unit/6X.d.ts +2 -0
  451. package/dist/types/unit/7X.d.ts +2 -0
  452. package/dist/types/unit/8X.d.ts +2 -0
  453. package/dist/types/unit/9X.d.ts +2 -0
  454. package/dist/types/unit/AX.d.ts +2 -0
  455. package/dist/types/unit/BX.d.ts +2 -0
  456. package/dist/types/unit/CX.d.ts +2 -0
  457. package/dist/types/unit/DX.d.ts +2 -0
  458. package/dist/types/unit/EX.d.ts +2 -0
  459. package/dist/types/unit/FX.d.ts +2 -0
  460. package/dist/types/unit/GX.d.ts +2 -0
  461. package/dist/types/unit/HX.d.ts +2 -0
  462. package/dist/types/unit/IX.d.ts +2 -0
  463. package/dist/types/unit/JX.d.ts +2 -0
  464. package/dist/types/unit/KX.d.ts +2 -0
  465. package/dist/types/unit/LX.d.ts +2 -0
  466. package/dist/types/unit/MX.d.ts +2 -0
  467. package/dist/types/unit/NX.d.ts +2 -0
  468. package/dist/types/unit/OX.d.ts +2 -0
  469. package/dist/types/unit/PX.d.ts +2 -0
  470. package/dist/types/unit/QX.d.ts +2 -0
  471. package/dist/types/unit/RX.d.ts +2 -0
  472. package/dist/types/unit/SX.d.ts +2 -0
  473. package/dist/types/unit/TX.d.ts +2 -0
  474. package/dist/types/unit/UX.d.ts +2 -0
  475. package/dist/types/unit/VX.d.ts +2 -0
  476. package/dist/types/unit/WX.d.ts +2 -0
  477. package/dist/types/unit/XX.d.ts +2 -0
  478. package/dist/types/unit/YX.d.ts +2 -0
  479. package/dist/types/unit/ZX.d.ts +2 -0
  480. package/dist/types/unit-types.d.ts +37 -0
  481. package/dist/unit-types-1bF0KhIp.d.ts +56 -0
  482. package/dist/unit-types-1bF0KhIp.d.ts.map +1 -0
  483. package/dist/unit-types-CsrkvgfG.d.cts +56 -0
  484. package/dist/unit-types-CsrkvgfG.d.cts.map +1 -0
  485. package/dist/utils/MyInvoisClient.d.ts +60 -0
  486. package/dist/utils/MyInvoisClient.js +13 -0
  487. package/dist/utils/base64.d.ts +6 -0
  488. package/dist/utils/base64.d.ts.map +1 -0
  489. package/dist/utils/base64.js +11 -0
  490. package/dist/utils/base64.js.map +1 -0
  491. package/dist/utils/debug/debug-document-hash.d.ts +100 -0
  492. package/dist/utils/debug/debug-document-hash.d.ts.map +1 -0
  493. package/dist/utils/debug/debug-document-hash.js +120 -0
  494. package/dist/utils/debug/debug-document-hash.js.map +1 -0
  495. package/dist/utils/debug/debug-invoice-submission.d.ts +152 -0
  496. package/dist/utils/debug/debug-invoice-submission.d.ts.map +1 -0
  497. package/dist/utils/debug/debug-invoice-submission.js +226 -0
  498. package/dist/utils/debug/debug-invoice-submission.js.map +1 -0
  499. package/dist/utils/getBaseUrl.d.ts +5 -0
  500. package/dist/utils/getBaseUrl.d.ts.map +1 -0
  501. package/dist/utils/getBaseUrl.js +3 -0
  502. package/dist/utils/invoice1-1.d.ts +117 -0
  503. package/dist/utils/invoice1-1.d.ts.map +1 -0
  504. package/dist/utils/invoice1-1.js +10 -0
  505. package/dist/utils/signature/canonicalize.d.ts +26 -0
  506. package/dist/utils/signature/canonicalize.d.ts.map +1 -0
  507. package/dist/utils/signature/canonicalize.js +3 -0
  508. package/dist/utils/signature/hashCert.d.ts +15 -0
  509. package/dist/utils/signature/hashCert.d.ts.map +1 -0
  510. package/dist/utils/signature/hashCert.js +3 -0
  511. package/dist/utils/signature/hashSignedProperties.d.ts +25 -0
  512. package/dist/utils/signature/hashSignedProperties.d.ts.map +1 -0
  513. package/dist/utils/signature/hashSignedProperties.js +3 -0
  514. package/dist/utils/signature/populateFinalDocument.d.ts +23 -0
  515. package/dist/utils/signature/populateFinalDocument.d.ts.map +1 -0
  516. package/dist/utils/signature/populateFinalDocument.js +3 -0
  517. package/dist/utils/signature/populateSignedProperties.d.ts +23 -0
  518. package/dist/utils/signature/populateSignedProperties.d.ts.map +1 -0
  519. package/dist/utils/signature/populateSignedProperties.js +3 -0
  520. package/dist/utils/signature/sign.d.ts +16 -0
  521. package/dist/utils/signature/sign.d.ts.map +1 -0
  522. package/dist/utils/signature/sign.js +3 -0
  523. package/dist/utils/signature/transform.d.ts +16 -0
  524. package/dist/utils/signature/transform.d.ts.map +1 -0
  525. package/dist/utils/signature/transform.js +3 -0
  526. package/package.json +12 -5
  527. package/src/api/platform/platformLogin.ts +6 -1
  528. package/src/types/documents/invoice-1_1.d.ts +90 -0
  529. package/src/types/msic-codes.d.ts +1 -7
  530. package/src/utils/MyInvoisClient.ts +421 -8
  531. package/src/utils/base64.ts +7 -0
  532. package/src/utils/debug/debug-document-hash.ts +249 -0
  533. package/src/utils/debug/debug-invoice-submission.ts +355 -0
  534. package/src/utils/getBaseUrl.ts +1 -1
  535. package/src/utils/invoice1-1.ts +671 -0
  536. package/src/utils/signature/canonicalize.ts +104 -0
  537. package/src/utils/signature/hashCert.ts +115 -0
  538. package/src/utils/signature/hashSignedProperties.ts +155 -0
  539. package/src/utils/signature/populateFinalDocument.ts +187 -0
  540. package/src/utils/signature/populateSignedProperties.ts +87 -0
  541. package/src/utils/signature/sign.ts +51 -0
  542. package/src/utils/signature/transform.ts +99 -0
  543. package/test/MyInvoiClientWithRealData.test.ts +2 -1
  544. package/test/MyInvoisClient.test.ts +16 -8
  545. package/test/base64.test.ts +43 -0
  546. package/test/canonicalize.test.ts +110 -0
  547. package/test/hashCert.test.ts +95 -0
  548. package/test/hashSignedProperties.test.ts +140 -0
  549. package/test/populateFinalDocument.test.ts +218 -0
  550. package/test/populateSignedProperties.test.ts +155 -0
  551. package/test/sign.test.ts +70 -0
  552. package/test/signAndSubmitInvoice.test.ts +915 -0
  553. package/test/transform.test.ts +158 -0
  554. package/tsconfig.json +7 -1
  555. package/tsdown.config.ts +31 -0
  556. package/dist/index.cjs.map +0 -1
  557. package/rolldown.config.ts +0 -26
@@ -0,0 +1,218 @@
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
+ })
@@ -0,0 +1,155 @@
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
+ })
@@ -0,0 +1,70 @@
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
+ })