@ripwords/myinvois-client 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (575) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/README.md +128 -4
  3. package/bun.lock +59 -0
  4. package/dist/{0X-Yw7mZEro.d.cts → 0X-CG1S1WKn.d.ts} +1 -2
  5. package/dist/{0X-C4IRh_fJ.d.ts → 0X-ChfmeAYF.d.cts} +1 -1
  6. package/dist/{1X-D_aUVsuM.d.cts → 1X-CmlbG02M.d.ts} +1 -2
  7. package/dist/{1X-BwpSoT3o.d.cts → 1X-DFikQbP0.d.cts} +1 -1
  8. package/dist/{1X-C-_KHV-Q.d.ts → 1X-DbFshzup.d.ts} +1 -2
  9. package/dist/{1X-Brnls9Jh.d.ts → 1X-jFrFCOs0.d.cts} +1 -1
  10. package/dist/{2X-UdQcQW24.d.ts → 2X-5cE4ojEX.d.cts} +1 -1
  11. package/dist/{2X-hClUyw26.d.cts → 2X-DA6J6Wd7.d.ts} +1 -2
  12. package/dist/{2X-Bb6elyzV.d.cts → 2X-FWZ1rYVt.d.cts} +1 -1
  13. package/dist/{2X-DkS1BoE5.d.ts → 2X-eC_p0QJf.d.ts} +1 -2
  14. package/dist/{3X-C7VFD-n-.d.cts → 3X-D9duw0Ro.d.cts} +1 -1
  15. package/dist/{3X-DFI-4RQQ.d.ts → 3X-DbfkwdkO.d.ts} +1 -2
  16. package/dist/{3X-DVDyspgb.d.ts → 3X-GxuN79Ax.d.ts} +1 -2
  17. package/dist/{3X-CLMESDvz.d.cts → 3X-r9xbWJ2l.d.cts} +1 -1
  18. package/dist/{4X-CIJ2JJ2w.d.ts → 4X-1ZkK-uH5.d.cts} +1 -1
  19. package/dist/{4X-CUR8jlaZ.d.ts → 4X-CLO9OuKa.d.cts} +1 -1
  20. package/dist/{4X-DIfvpU6V.d.cts → 4X-CnHtgO6u.d.ts} +1 -2
  21. package/dist/{4X-CvScPJTf.d.cts → 4X-DYz_nYSD.d.ts} +1 -2
  22. package/dist/{5X-COsZHUaQ.d.ts → 5X-BzPEdkbC.d.ts} +1 -2
  23. package/dist/{5X-C6db432h.d.ts → 5X-BziH0a09.d.cts} +1 -1
  24. package/dist/{5X-BOUxhadJ.d.cts → 5X-Cfe39fFc.d.cts} +1 -1
  25. package/dist/{5X-CkLu7Vyd.d.cts → 5X-kBF74qx1.d.ts} +1 -2
  26. package/dist/{6X-C_fFIcJC.d.ts → 6X-BceErbps.d.cts} +1 -1
  27. package/dist/{6X-DE7RJeV6.d.cts → 6X-C_xpeu6J.d.ts} +1 -2
  28. package/dist/{6X-ClZDKOTC.d.ts → 6X-DLWEe1bP.d.cts} +1 -1
  29. package/dist/{6X-Mf32k1d0.d.cts → 6X-sQZfT0ZK.d.ts} +1 -2
  30. package/dist/{7X-Chtd6B66.d.cts → 7X-Bet2agJ6.d.ts} +1 -2
  31. package/dist/{7X-kot_VccM.d.ts → 7X-BoKQxMoO.d.ts} +1 -2
  32. package/dist/{7X-BZyesooz.d.ts → 7X-CucHYQsA.d.cts} +1 -1
  33. package/dist/{7X-DoCUcp-J.d.cts → 7X-CwPAqozm.d.cts} +1 -1
  34. package/dist/{8X-Df4DOBOe.d.ts → 8X-BIjJ9kaV.d.cts} +1 -1
  35. package/dist/{8X-Dr9RunRw.d.cts → 8X-BOEWATU3.d.ts} +1 -2
  36. package/dist/{8X-DkuKAkHz.d.ts → 8X-CJpqd5xp.d.cts} +1 -1
  37. package/dist/{8X-DqZyMvyV.d.cts → 8X-s5AzkHR-.d.ts} +1 -2
  38. package/dist/{9X-BDgifncF.d.ts → 9X-BBDP1gZ6.d.ts} +1 -2
  39. package/dist/{9X-BaoZtjWF.d.cts → 9X-CP5Xp6bE.d.cts} +1 -1
  40. package/dist/{9X-BcAb6Uso.d.cts → 9X-D3aOVCnz.d.cts} +1 -1
  41. package/dist/{9X-BhBWlgxG.d.ts → 9X-DAAZV4sr.d.ts} +1 -2
  42. package/dist/{AX-D6XHWdrY.d.ts → AX-CmpMMhII.d.ts} +1 -2
  43. package/dist/{AX-BY72FohC.d.cts → AX-DFzpxGOT.d.cts} +1 -1
  44. package/dist/{BX-D_0C8Qbd.d.ts → BX-CyiqNE6b.d.cts} +1 -1
  45. package/dist/{BX-CA0OmrUZ.d.cts → BX-j78z_ju_.d.ts} +1 -2
  46. package/dist/{CX-glpQSL8x.d.cts → CX-B6rEhQx7.d.ts} +1 -2
  47. package/dist/{CX-HH4cSZRX.d.ts → CX-BTPvC3Dv.d.cts} +1 -1
  48. package/dist/{DX-DimL1MDM.d.cts → DX-BD4-hTCh.d.cts} +1 -1
  49. package/dist/{DX-Dx22ax_I.d.ts → DX-CAmMnx5a.d.ts} +1 -2
  50. package/dist/{EX-BRWh1wFc.d.ts → EX-CXhSC85J.d.ts} +1 -2
  51. package/dist/{EX-Cx87Ruxl.d.cts → EX-mTHCH0Yk.d.cts} +1 -1
  52. package/dist/{FX-D81UlxNN.d.cts → FX-DOOMoQl2.d.cts} +1 -1
  53. package/dist/{FX-RmjwAr40.d.ts → FX-DYVIJ3l0.d.ts} +1 -2
  54. package/dist/{GX-CJyo7oDp.d.ts → GX-8URJ7WHz.d.cts} +1 -1
  55. package/dist/{GX-9i7piP9G.d.cts → GX-eBOVHqi6.d.ts} +1 -2
  56. package/dist/{HX-20GVJAvl.d.cts → HX-49z8CzsE.d.cts} +1 -1
  57. package/dist/{HX-XALBTdLA.d.ts → HX-Dz5T0xXI.d.ts} +1 -2
  58. package/dist/{IX-6SZ55QKb.d.ts → IX-B6kblmBs.d.cts} +1 -1
  59. package/dist/{IX-D54NGPsc.d.cts → IX-PiKYro5a.d.ts} +1 -2
  60. package/dist/{JX-C1RYcwQX.d.cts → JX-DMwHLGEE.d.cts} +1 -1
  61. package/dist/{JX-hQ1XRmLp.d.ts → JX-Dvnt0mSK.d.ts} +1 -2
  62. package/dist/{KX-BNwunEfn.d.ts → KX-BUb8e0yg.d.ts} +1 -2
  63. package/dist/{KX-gQHCIgtQ.d.cts → KX-DaJPkefl.d.cts} +1 -1
  64. package/dist/{LX-CHYX3X3J.d.ts → LX-BnILxjdS.d.cts} +1 -1
  65. package/dist/{LX-CPurJGIh.d.cts → LX-l5ZBaGov.d.ts} +1 -2
  66. package/dist/{MX-BPGLWSUz.d.ts → MX-BbPO8mTj.d.cts} +1 -1
  67. package/dist/{MX-BnyW5eHf.d.cts → MX-C7C15AWi.d.ts} +1 -2
  68. package/dist/{NX-RulN5Ml3.d.ts → NX-C7nFVC-D.d.ts} +1 -2
  69. package/dist/{NX-B11fQuco.d.cts → NX-xy5uw7H3.d.cts} +1 -1
  70. package/dist/{OX-DgKVSp7I.d.ts → OX-CIzARbON.d.cts} +1 -1
  71. package/dist/{OX-T-ydRXQS.d.cts → OX-Dmkvcaij.d.ts} +1 -2
  72. package/dist/{PX-DA4A2kEv.d.ts → PX-BKZ14N7N.d.ts} +1 -2
  73. package/dist/{PX-p0n1SzvU.d.cts → PX-CL8waFgx.d.cts} +1 -1
  74. package/dist/{QX-DrFqsMEs.d.ts → QX-6xdSNtxZ.d.ts} +1 -2
  75. package/dist/{QX-CI1NccIB.d.cts → QX-BowAYqZb.d.cts} +1 -1
  76. package/dist/{RX-DnNKol22.d.cts → RX-DFoiOK5q.d.ts} +1 -2
  77. package/dist/{RX-Cm7vFcFN.d.ts → RX-fWoWcHTG.d.cts} +1 -1
  78. package/dist/{SX-BUjiWQYz.d.cts → SX-CZ3e31OT.d.cts} +1 -1
  79. package/dist/{SX-CsPPTu-W.d.ts → SX-D-Szi9wa.d.ts} +1 -2
  80. package/dist/{TX-DCY25MdR.d.ts → TX-CJhJ-HYX.d.cts} +1 -1
  81. package/dist/{TX-DOEpsf05.d.cts → TX-DTfkGsqn.d.ts} +1 -2
  82. package/dist/{UX-DgUOnTFK.d.cts → UX-Bw4HHAj4.d.ts} +1 -2
  83. package/dist/{UX-DauyagHy.d.ts → UX-P7-u2y70.d.cts} +1 -1
  84. package/dist/{VX-DD4scgCe.d.ts → VX-C8Eu5gQf.d.cts} +1 -1
  85. package/dist/{VX-kUX6LM-3.d.cts → VX-DCv5x_hi.d.ts} +1 -2
  86. package/dist/{WX-DPfyPFFh.d.cts → WX-BYtJ5_if.d.ts} +1 -2
  87. package/dist/{WX-CjkoppdY.d.ts → WX-DkiaqB2V.d.cts} +1 -1
  88. package/dist/{XX-sbsIUOnA.d.ts → XX-D4p4iK-a.d.cts} +1 -1
  89. package/dist/{XX-C4C1gQZH.d.cts → XX-Jo1yJO3A.d.ts} +1 -2
  90. package/dist/{YX-DUdO8mRC.d.ts → YX-BvGmEsVG.d.ts} +1 -2
  91. package/dist/{YX-BeT-LsiA.d.cts → YX-Du8zv9qz.d.cts} +1 -1
  92. package/dist/{ZX-BuVTTq-D.d.cts → ZX-B4jFD-21.d.cts} +1 -1
  93. package/dist/{ZX-DwfcSA-D.d.ts → ZX-B59AJcBY.d.ts} +1 -2
  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-DMIMRJV0.cjs +472 -0
  103. package/dist/document-DMIMRJV0.cjs.map +1 -0
  104. package/dist/document-NQos5fSr.js +405 -0
  105. package/dist/documents-BVG7KIKY.d.ts +847 -0
  106. package/dist/documents-C066EC9m.d.cts +848 -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 +2 -63
  131. package/dist/index22.cjs +203 -262
  132. package/dist/index22.cjs.map +1 -1
  133. package/dist/index23.cjs +104 -74
  134. package/dist/index23.cjs.map +1 -1
  135. package/dist/index24.cjs +132 -102
  136. package/dist/index24.cjs.map +1 -1
  137. package/dist/index25.cjs +59 -68
  138. package/dist/index25.cjs.map +1 -1
  139. package/dist/index26.cjs +262 -107
  140. package/dist/index26.cjs.map +1 -1
  141. package/dist/index27.cjs +74 -95
  142. package/dist/index27.cjs.map +1 -1
  143. package/dist/index28.cjs +102 -13
  144. package/dist/index28.cjs.map +1 -1
  145. package/dist/index29.cjs +68 -33
  146. package/dist/index29.cjs.map +1 -1
  147. package/dist/index30.cjs +107 -14
  148. package/dist/index30.cjs.map +1 -1
  149. package/dist/index31.cjs +95 -24
  150. package/dist/index31.cjs.map +1 -1
  151. package/dist/index32.cjs +11 -13
  152. package/dist/index32.cjs.map +1 -1
  153. package/dist/index33.cjs +31 -7
  154. package/dist/index33.cjs.map +1 -1
  155. package/dist/index34.cjs +12 -7
  156. package/dist/index34.cjs.map +1 -1
  157. package/dist/index35.cjs +22 -10
  158. package/dist/index35.cjs.map +1 -1
  159. package/dist/index36.cjs +13 -6
  160. package/dist/index36.cjs.map +1 -1
  161. package/dist/index37.cjs +7 -101
  162. package/dist/index37.cjs.map +1 -1
  163. package/dist/index38.cjs +7 -106
  164. package/dist/index38.cjs.map +1 -1
  165. package/dist/index39.cjs +10 -119
  166. package/dist/index39.cjs.map +1 -1
  167. package/dist/index40.cjs +6 -106
  168. package/dist/index40.cjs.map +1 -1
  169. package/dist/index41.cjs +101 -98
  170. package/dist/index41.cjs.map +1 -1
  171. package/dist/index42.cjs +106 -118
  172. package/dist/index42.cjs.map +1 -1
  173. package/dist/index43.cjs +119 -127
  174. package/dist/index43.cjs.map +1 -1
  175. package/dist/index44.cjs +106 -117
  176. package/dist/index44.cjs.map +1 -1
  177. package/dist/index45.cjs +98 -14
  178. package/dist/index45.cjs.map +1 -1
  179. package/dist/index46.cjs +118 -95
  180. package/dist/index46.cjs.map +1 -1
  181. package/dist/index47.cjs +127 -142
  182. package/dist/index47.cjs.map +1 -1
  183. package/dist/index48.cjs +117 -114
  184. package/dist/index48.cjs.map +1 -1
  185. package/dist/index49.cjs +14 -144
  186. package/dist/index49.cjs.map +1 -1
  187. package/dist/index5.cjs +0 -25
  188. package/dist/index50.cjs +95 -113
  189. package/dist/index50.cjs.map +1 -1
  190. package/dist/index51.cjs +142 -17
  191. package/dist/index51.cjs.map +1 -1
  192. package/dist/index52.cjs +114 -112
  193. package/dist/index52.cjs.map +1 -1
  194. package/dist/index53.cjs +144 -47
  195. package/dist/index53.cjs.map +1 -1
  196. package/dist/index54.cjs +113 -14
  197. package/dist/index54.cjs.map +1 -1
  198. package/dist/index55.cjs +17 -28
  199. package/dist/index55.cjs.map +1 -1
  200. package/dist/index56.cjs +112 -22
  201. package/dist/index56.cjs.map +1 -1
  202. package/dist/index57.cjs +47 -9
  203. package/dist/index57.cjs.map +1 -1
  204. package/dist/index58.cjs +14 -8
  205. package/dist/index58.cjs.map +1 -1
  206. package/dist/index58.cts.map +1 -0
  207. package/dist/index59.cjs +28 -17
  208. package/dist/index59.cjs.map +1 -1
  209. package/dist/index59.cts.map +1 -1
  210. package/dist/index6.cjs +25 -0
  211. package/dist/{index5.cjs.map → index6.cjs.map} +1 -1
  212. package/dist/index60.cjs +22 -412
  213. package/dist/index60.cjs.map +1 -1
  214. package/dist/index60.cts.map +1 -0
  215. package/dist/index61.cjs +9 -8
  216. package/dist/index61.cjs.map +1 -1
  217. package/dist/index61.cts.map +1 -0
  218. package/dist/index62.cjs +8 -9
  219. package/dist/index62.cjs.map +1 -1
  220. package/dist/index62.cts.map +1 -1
  221. package/dist/index63.cjs +24 -0
  222. package/dist/index63.cjs.map +1 -0
  223. package/dist/index63.cts.map +1 -1
  224. package/dist/index64.cjs +419 -0
  225. package/dist/index64.cjs.map +1 -0
  226. package/dist/index64.cts.map +1 -1
  227. package/dist/index65.cjs +9 -116
  228. package/dist/index65.cjs.map +1 -1
  229. package/dist/index65.cts.map +1 -1
  230. package/dist/index66.cjs +10 -223
  231. package/dist/index66.cjs.map +1 -1
  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-B_1W6lZF.d.cts → msic-codes-CPWVNnpq.d.cts} +11 -11
  237. package/dist/msic-codes-DToUqTI6.d.ts +25 -0
  238. package/dist/{payment-modes-DHihrywe.d.cts → payment-modes-DA7uBIGb.d.ts} +1 -2
  239. package/dist/{payment-modes-B8dNy3SM.d.ts → payment-modes-FX88uyhP.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-CG175mpg.d.ts} +1 -2
  243. package/dist/{state-codes-DXSWtE6a.d.cts → state-codes-CNp_6051.d.cts} +1 -1
  244. package/dist/{state-codes-CxG1S9YY.d.ts → state-codes-dvoTe5pC.d.ts} +1 -2
  245. package/dist/{tax-types-CEpfSh5P.d.ts → tax-types-tosH5I0q.d.ts} +1 -2
  246. package/dist/types/classification-codes.d.ts +1 -1
  247. package/dist/types/country-code.d.ts +1 -1
  248. package/dist/types/currencies.d.ts +1 -1
  249. package/dist/types/documents.d.ts +7 -0
  250. package/dist/types/e-invoice.d.ts +1 -1
  251. package/dist/types/index.d.ts +58 -59
  252. package/dist/types/msic/0X.d.ts +1 -1
  253. package/dist/types/msic/1X.d.ts +1 -1
  254. package/dist/types/msic/2X.d.ts +1 -1
  255. package/dist/types/msic/3X.d.ts +1 -1
  256. package/dist/types/msic/4X.d.ts +1 -1
  257. package/dist/types/msic/5X.d.ts +1 -1
  258. package/dist/types/msic/6X.d.ts +1 -1
  259. package/dist/types/msic/7X.d.ts +1 -1
  260. package/dist/types/msic/8X.d.ts +1 -1
  261. package/dist/types/msic/9X.d.ts +1 -1
  262. package/dist/types/msic-codes.d.ts +11 -11
  263. package/dist/types/payment-modes.d.ts +1 -1
  264. package/dist/types/signatures.d.ts +1 -1
  265. package/dist/types/state-codes.d.ts +1 -1
  266. package/dist/types/tax-types.d.ts +1 -1
  267. package/dist/types/unit/1X.d.ts +1 -1
  268. package/dist/types/unit/2X.d.ts +1 -1
  269. package/dist/types/unit/3X.d.ts +1 -1
  270. package/dist/types/unit/4X.d.ts +1 -1
  271. package/dist/types/unit/5X.d.ts +1 -1
  272. package/dist/types/unit/6X.d.ts +1 -1
  273. package/dist/types/unit/7X.d.ts +1 -1
  274. package/dist/types/unit/8X.d.ts +1 -1
  275. package/dist/types/unit/9X.d.ts +1 -1
  276. package/dist/types/unit/AX.d.ts +1 -1
  277. package/dist/types/unit/BX.d.ts +1 -1
  278. package/dist/types/unit/CX.d.ts +1 -1
  279. package/dist/types/unit/DX.d.ts +1 -1
  280. package/dist/types/unit/EX.d.ts +1 -1
  281. package/dist/types/unit/FX.d.ts +1 -1
  282. package/dist/types/unit/GX.d.ts +1 -1
  283. package/dist/types/unit/HX.d.ts +1 -1
  284. package/dist/types/unit/IX.d.ts +1 -1
  285. package/dist/types/unit/JX.d.ts +1 -1
  286. package/dist/types/unit/KX.d.ts +1 -1
  287. package/dist/types/unit/LX.d.ts +1 -1
  288. package/dist/types/unit/MX.d.ts +1 -1
  289. package/dist/types/unit/NX.d.ts +1 -1
  290. package/dist/types/unit/OX.d.ts +1 -1
  291. package/dist/types/unit/PX.d.ts +1 -1
  292. package/dist/types/unit/QX.d.ts +1 -1
  293. package/dist/types/unit/RX.d.ts +1 -1
  294. package/dist/types/unit/SX.d.ts +1 -1
  295. package/dist/types/unit/TX.d.ts +1 -1
  296. package/dist/types/unit/UX.d.ts +1 -1
  297. package/dist/types/unit/VX.d.ts +1 -1
  298. package/dist/types/unit/WX.d.ts +1 -1
  299. package/dist/types/unit/XX.d.ts +1 -1
  300. package/dist/types/unit/YX.d.ts +1 -1
  301. package/dist/types/unit/ZX.d.ts +1 -1
  302. package/dist/types/unit-types.d.ts +36 -36
  303. package/dist/unit-types-BKZxwVYQ.d.ts +55 -0
  304. package/dist/unit-types-CaOA5ZDG.d.cts +56 -0
  305. package/dist/utils/base64.d.ts +1 -2
  306. package/dist/utils/base64.js +1 -2
  307. package/dist/utils/certificate.d.ts +22 -0
  308. package/dist/utils/certificate.js +3 -0
  309. package/dist/utils/document.d.ts +135 -0
  310. package/dist/utils/document.js +3 -0
  311. package/dist/utils/getBaseUrl.d.ts +1 -2
  312. package/dist/utils/getBaseUrl.js +1 -1
  313. package/dist/utils/helpers.d.ts +271 -0
  314. package/dist/utils/helpers.js +330 -0
  315. package/dist/utils/signature-diagnostics.d.ts +93 -0
  316. package/dist/utils/signature-diagnostics.js +326 -0
  317. package/dist/utils/validation.d.ts +46 -0
  318. package/dist/utils/validation.js +134 -0
  319. package/myinvois-cert.conf.template +23 -0
  320. package/package.json +9 -3
  321. package/scripts/gen-cert.sh +159 -0
  322. package/src/api/platform/platformLogin.ts +1 -1
  323. package/src/index.ts +528 -1
  324. package/src/types/documents.d.ts +862 -0
  325. package/src/types/index.d.ts +1 -1
  326. package/src/utils/certificate.ts +60 -0
  327. package/src/utils/document.ts +852 -0
  328. package/src/utils/helpers.ts +552 -0
  329. package/src/utils/signature-diagnostics.ts +583 -0
  330. package/src/utils/validation.ts +268 -0
  331. package/test/MyInvoiClientWithRealData.test.ts +9 -1
  332. package/test/MyInvoisClient.test.ts +7 -1
  333. package/test/dynamicInvoiceFeatures.test.ts +449 -0
  334. package/test/signAndSubmitInvoice.test.ts +269 -734
  335. package/test/signature-diagnostics.test.ts +128 -0
  336. package/tsconfig.json +0 -3
  337. package/dist/0X-C4IRh_fJ.d.ts.map +0 -1
  338. package/dist/0X-Yw7mZEro.d.cts.map +0 -1
  339. package/dist/1X-Brnls9Jh.d.ts.map +0 -1
  340. package/dist/1X-BwpSoT3o.d.cts.map +0 -1
  341. package/dist/1X-C-_KHV-Q.d.ts.map +0 -1
  342. package/dist/1X-D_aUVsuM.d.cts.map +0 -1
  343. package/dist/2X-Bb6elyzV.d.cts.map +0 -1
  344. package/dist/2X-DkS1BoE5.d.ts.map +0 -1
  345. package/dist/2X-UdQcQW24.d.ts.map +0 -1
  346. package/dist/2X-hClUyw26.d.cts.map +0 -1
  347. package/dist/3X-C7VFD-n-.d.cts.map +0 -1
  348. package/dist/3X-CLMESDvz.d.cts.map +0 -1
  349. package/dist/3X-DFI-4RQQ.d.ts.map +0 -1
  350. package/dist/3X-DVDyspgb.d.ts.map +0 -1
  351. package/dist/4X-CIJ2JJ2w.d.ts.map +0 -1
  352. package/dist/4X-CUR8jlaZ.d.ts.map +0 -1
  353. package/dist/4X-CvScPJTf.d.cts.map +0 -1
  354. package/dist/4X-DIfvpU6V.d.cts.map +0 -1
  355. package/dist/5X-BOUxhadJ.d.cts.map +0 -1
  356. package/dist/5X-C6db432h.d.ts.map +0 -1
  357. package/dist/5X-COsZHUaQ.d.ts.map +0 -1
  358. package/dist/5X-CkLu7Vyd.d.cts.map +0 -1
  359. package/dist/6X-C_fFIcJC.d.ts.map +0 -1
  360. package/dist/6X-ClZDKOTC.d.ts.map +0 -1
  361. package/dist/6X-DE7RJeV6.d.cts.map +0 -1
  362. package/dist/6X-Mf32k1d0.d.cts.map +0 -1
  363. package/dist/7X-BZyesooz.d.ts.map +0 -1
  364. package/dist/7X-Chtd6B66.d.cts.map +0 -1
  365. package/dist/7X-DoCUcp-J.d.cts.map +0 -1
  366. package/dist/7X-kot_VccM.d.ts.map +0 -1
  367. package/dist/8X-Df4DOBOe.d.ts.map +0 -1
  368. package/dist/8X-DkuKAkHz.d.ts.map +0 -1
  369. package/dist/8X-DqZyMvyV.d.cts.map +0 -1
  370. package/dist/8X-Dr9RunRw.d.cts.map +0 -1
  371. package/dist/9X-BDgifncF.d.ts.map +0 -1
  372. package/dist/9X-BaoZtjWF.d.cts.map +0 -1
  373. package/dist/9X-BcAb6Uso.d.cts.map +0 -1
  374. package/dist/9X-BhBWlgxG.d.ts.map +0 -1
  375. package/dist/AX-BY72FohC.d.cts.map +0 -1
  376. package/dist/AX-D6XHWdrY.d.ts.map +0 -1
  377. package/dist/BX-CA0OmrUZ.d.cts.map +0 -1
  378. package/dist/BX-D_0C8Qbd.d.ts.map +0 -1
  379. package/dist/CX-HH4cSZRX.d.ts.map +0 -1
  380. package/dist/CX-glpQSL8x.d.cts.map +0 -1
  381. package/dist/DX-DimL1MDM.d.cts.map +0 -1
  382. package/dist/DX-Dx22ax_I.d.ts.map +0 -1
  383. package/dist/EX-BRWh1wFc.d.ts.map +0 -1
  384. package/dist/EX-Cx87Ruxl.d.cts.map +0 -1
  385. package/dist/FX-D81UlxNN.d.cts.map +0 -1
  386. package/dist/FX-RmjwAr40.d.ts.map +0 -1
  387. package/dist/GX-9i7piP9G.d.cts.map +0 -1
  388. package/dist/GX-CJyo7oDp.d.ts.map +0 -1
  389. package/dist/HX-20GVJAvl.d.cts.map +0 -1
  390. package/dist/HX-XALBTdLA.d.ts.map +0 -1
  391. package/dist/IX-6SZ55QKb.d.ts.map +0 -1
  392. package/dist/IX-D54NGPsc.d.cts.map +0 -1
  393. package/dist/JX-C1RYcwQX.d.cts.map +0 -1
  394. package/dist/JX-hQ1XRmLp.d.ts.map +0 -1
  395. package/dist/KX-BNwunEfn.d.ts.map +0 -1
  396. package/dist/KX-gQHCIgtQ.d.cts.map +0 -1
  397. package/dist/LX-CHYX3X3J.d.ts.map +0 -1
  398. package/dist/LX-CPurJGIh.d.cts.map +0 -1
  399. package/dist/MX-BPGLWSUz.d.ts.map +0 -1
  400. package/dist/MX-BnyW5eHf.d.cts.map +0 -1
  401. package/dist/MyInvoisClient-BrNyMjS-.d.cts +0 -178
  402. package/dist/MyInvoisClient-BrNyMjS-.d.cts.map +0 -1
  403. package/dist/MyInvoisClient-CXu4pdl-.d.ts +0 -178
  404. package/dist/MyInvoisClient-CXu4pdl-.d.ts.map +0 -1
  405. package/dist/MyInvoisClient-Cnvb5iUC.js +0 -299
  406. package/dist/MyInvoisClient-Cnvb5iUC.js.map +0 -1
  407. package/dist/MyInvoisClient-DO1dJfQq.cjs +0 -304
  408. package/dist/MyInvoisClient-DO1dJfQq.cjs.map +0 -1
  409. package/dist/NX-B11fQuco.d.cts.map +0 -1
  410. package/dist/NX-RulN5Ml3.d.ts.map +0 -1
  411. package/dist/OX-DgKVSp7I.d.ts.map +0 -1
  412. package/dist/OX-T-ydRXQS.d.cts.map +0 -1
  413. package/dist/PX-DA4A2kEv.d.ts.map +0 -1
  414. package/dist/PX-p0n1SzvU.d.cts.map +0 -1
  415. package/dist/QX-CI1NccIB.d.cts.map +0 -1
  416. package/dist/QX-DrFqsMEs.d.ts.map +0 -1
  417. package/dist/RX-Cm7vFcFN.d.ts.map +0 -1
  418. package/dist/RX-DnNKol22.d.cts.map +0 -1
  419. package/dist/SX-BUjiWQYz.d.cts.map +0 -1
  420. package/dist/SX-CsPPTu-W.d.ts.map +0 -1
  421. package/dist/TX-DCY25MdR.d.ts.map +0 -1
  422. package/dist/TX-DOEpsf05.d.cts.map +0 -1
  423. package/dist/UX-DauyagHy.d.ts.map +0 -1
  424. package/dist/UX-DgUOnTFK.d.cts.map +0 -1
  425. package/dist/VX-DD4scgCe.d.ts.map +0 -1
  426. package/dist/VX-kUX6LM-3.d.cts.map +0 -1
  427. package/dist/WX-CjkoppdY.d.ts.map +0 -1
  428. package/dist/WX-DPfyPFFh.d.cts.map +0 -1
  429. package/dist/XX-C4C1gQZH.d.cts.map +0 -1
  430. package/dist/XX-sbsIUOnA.d.ts.map +0 -1
  431. package/dist/YX-BeT-LsiA.d.cts.map +0 -1
  432. package/dist/YX-DUdO8mRC.d.ts.map +0 -1
  433. package/dist/ZX-BuVTTq-D.d.cts.map +0 -1
  434. package/dist/ZX-DwfcSA-D.d.ts.map +0 -1
  435. package/dist/api/platform/platformLogin.d.ts.map +0 -1
  436. package/dist/canonicalize-C_fNNpYr.cjs +0 -80
  437. package/dist/canonicalize-C_fNNpYr.cjs.map +0 -1
  438. package/dist/canonicalize-DNUrCGad.js +0 -68
  439. package/dist/canonicalize-DNUrCGad.js.map +0 -1
  440. package/dist/classification-codes-B15PbWxz.d.cts.map +0 -1
  441. package/dist/classification-codes-C2X4xW5-.d.ts.map +0 -1
  442. package/dist/country-code-DPeNFMMi.d.cts.map +0 -1
  443. package/dist/country-code-DsI8Mbzx.d.ts.map +0 -1
  444. package/dist/currencies-DKuDflOO.d.ts.map +0 -1
  445. package/dist/currencies-S5g1gzBU.d.cts.map +0 -1
  446. package/dist/e-invoice-BuwtFnlI.d.cts.map +0 -1
  447. package/dist/e-invoice-C2TxhyrK.d.ts.map +0 -1
  448. package/dist/getBaseUrl-Dx6RDC8I.js.map +0 -1
  449. package/dist/hashCert-Bol7lIh2.js +0 -62
  450. package/dist/hashCert-Bol7lIh2.js.map +0 -1
  451. package/dist/hashCert-mlYEuYex.cjs +0 -68
  452. package/dist/hashCert-mlYEuYex.cjs.map +0 -1
  453. package/dist/hashSignedProperties-9vj5wlYR.js +0 -83
  454. package/dist/hashSignedProperties-9vj5wlYR.js.map +0 -1
  455. package/dist/hashSignedProperties-CU_ZqqmY.cjs +0 -95
  456. package/dist/hashSignedProperties-CU_ZqqmY.cjs.map +0 -1
  457. package/dist/index-B1DSs-wd.d.cts.map +0 -1
  458. package/dist/index-CJNLQVjx.d.ts +0 -1
  459. package/dist/index-FTgB2nM6.d.ts.map +0 -1
  460. package/dist/index-Wy1ONBjV.d.cts +0 -1
  461. package/dist/index10.cjs.map +0 -1
  462. package/dist/index21.cjs.map +0 -1
  463. package/dist/index67.cjs +0 -4
  464. package/dist/index67.cts.map +0 -1
  465. package/dist/index68.cjs +0 -3
  466. package/dist/index68.cts.map +0 -1
  467. package/dist/index69.cjs +0 -4
  468. package/dist/index69.cts.map +0 -1
  469. package/dist/index70.cjs +0 -3
  470. package/dist/index70.cts.map +0 -1
  471. package/dist/index71.cjs +0 -3
  472. package/dist/index71.cts.map +0 -1
  473. package/dist/index72.cjs +0 -3
  474. package/dist/index72.cts.map +0 -1
  475. package/dist/index73.cjs +0 -3
  476. package/dist/index73.cts.map +0 -1
  477. package/dist/invoice-1_1-BJVcw-oE.d.ts +0 -432
  478. package/dist/invoice-1_1-BJVcw-oE.d.ts.map +0 -1
  479. package/dist/invoice-1_1-DWdNPRzr.d.cts +0 -432
  480. package/dist/invoice-1_1-DWdNPRzr.d.cts.map +0 -1
  481. package/dist/invoice1-1-8S-QQn7P.cjs +0 -547
  482. package/dist/invoice1-1-8S-QQn7P.cjs.map +0 -1
  483. package/dist/invoice1-1-CHuLpkFz.js +0 -504
  484. package/dist/invoice1-1-CHuLpkFz.js.map +0 -1
  485. package/dist/msic-codes-B_1W6lZF.d.cts.map +0 -1
  486. package/dist/msic-codes-bs0lTfSZ.d.ts +0 -26
  487. package/dist/msic-codes-bs0lTfSZ.d.ts.map +0 -1
  488. package/dist/payment-modes-B8dNy3SM.d.ts.map +0 -1
  489. package/dist/payment-modes-DHihrywe.d.cts.map +0 -1
  490. package/dist/platformLogin-DsxWWUXr.js.map +0 -1
  491. package/dist/populateFinalDocument-BdyYzz5Y.cjs +0 -96
  492. package/dist/populateFinalDocument-BdyYzz5Y.cjs.map +0 -1
  493. package/dist/populateFinalDocument-BpLXmgLv.js +0 -90
  494. package/dist/populateFinalDocument-BpLXmgLv.js.map +0 -1
  495. package/dist/populateSignedProperties-BJMcBQ6S.cjs +0 -58
  496. package/dist/populateSignedProperties-BJMcBQ6S.cjs.map +0 -1
  497. package/dist/populateSignedProperties-BvGN-YZH.js +0 -52
  498. package/dist/populateSignedProperties-BvGN-YZH.js.map +0 -1
  499. package/dist/sign-B61Cy3gO.cjs +0 -40
  500. package/dist/sign-B61Cy3gO.cjs.map +0 -1
  501. package/dist/sign-DzHK7UhR.js +0 -34
  502. package/dist/sign-DzHK7UhR.js.map +0 -1
  503. package/dist/signatures-BKi9DP2K.d.cts.map +0 -1
  504. package/dist/signatures-C9QPZTQd.d.ts.map +0 -1
  505. package/dist/state-codes-CxG1S9YY.d.ts.map +0 -1
  506. package/dist/state-codes-DXSWtE6a.d.cts.map +0 -1
  507. package/dist/tax-types-CEpfSh5P.d.ts.map +0 -1
  508. package/dist/tax-types-CgwxONDS.d.cts.map +0 -1
  509. package/dist/transform-BLz0S687.cjs +0 -72
  510. package/dist/transform-BLz0S687.cjs.map +0 -1
  511. package/dist/transform-D1q-U6Zj.js +0 -66
  512. package/dist/transform-D1q-U6Zj.js.map +0 -1
  513. package/dist/types/documents/index.d.ts +0 -57
  514. package/dist/types/documents/invoice-1_1.d.ts +0 -56
  515. package/dist/unit-types-1bF0KhIp.d.ts +0 -56
  516. package/dist/unit-types-1bF0KhIp.d.ts.map +0 -1
  517. package/dist/unit-types-CsrkvgfG.d.cts +0 -56
  518. package/dist/unit-types-CsrkvgfG.d.cts.map +0 -1
  519. package/dist/utils/MyInvoisClient.d.ts +0 -60
  520. package/dist/utils/MyInvoisClient.js +0 -13
  521. package/dist/utils/base64.d.ts.map +0 -1
  522. package/dist/utils/base64.js.map +0 -1
  523. package/dist/utils/debug/debug-document-hash.d.ts +0 -100
  524. package/dist/utils/debug/debug-document-hash.d.ts.map +0 -1
  525. package/dist/utils/debug/debug-document-hash.js +0 -120
  526. package/dist/utils/debug/debug-document-hash.js.map +0 -1
  527. package/dist/utils/debug/debug-invoice-submission.d.ts +0 -152
  528. package/dist/utils/debug/debug-invoice-submission.d.ts.map +0 -1
  529. package/dist/utils/debug/debug-invoice-submission.js +0 -226
  530. package/dist/utils/debug/debug-invoice-submission.js.map +0 -1
  531. package/dist/utils/getBaseUrl.d.ts.map +0 -1
  532. package/dist/utils/invoice1-1.d.ts +0 -117
  533. package/dist/utils/invoice1-1.d.ts.map +0 -1
  534. package/dist/utils/invoice1-1.js +0 -10
  535. package/dist/utils/signature/canonicalize.d.ts +0 -26
  536. package/dist/utils/signature/canonicalize.d.ts.map +0 -1
  537. package/dist/utils/signature/canonicalize.js +0 -3
  538. package/dist/utils/signature/hashCert.d.ts +0 -15
  539. package/dist/utils/signature/hashCert.d.ts.map +0 -1
  540. package/dist/utils/signature/hashCert.js +0 -3
  541. package/dist/utils/signature/hashSignedProperties.d.ts +0 -25
  542. package/dist/utils/signature/hashSignedProperties.d.ts.map +0 -1
  543. package/dist/utils/signature/hashSignedProperties.js +0 -3
  544. package/dist/utils/signature/populateFinalDocument.d.ts +0 -23
  545. package/dist/utils/signature/populateFinalDocument.d.ts.map +0 -1
  546. package/dist/utils/signature/populateFinalDocument.js +0 -3
  547. package/dist/utils/signature/populateSignedProperties.d.ts +0 -23
  548. package/dist/utils/signature/populateSignedProperties.d.ts.map +0 -1
  549. package/dist/utils/signature/populateSignedProperties.js +0 -3
  550. package/dist/utils/signature/sign.d.ts +0 -16
  551. package/dist/utils/signature/sign.d.ts.map +0 -1
  552. package/dist/utils/signature/sign.js +0 -3
  553. package/dist/utils/signature/transform.d.ts +0 -16
  554. package/dist/utils/signature/transform.d.ts.map +0 -1
  555. package/dist/utils/signature/transform.js +0 -3
  556. package/src/types/documents/index.d.ts +0 -1
  557. package/src/types/documents/invoice-1_1.d.ts +0 -439
  558. package/src/utils/MyInvoisClient.ts +0 -501
  559. package/src/utils/debug/debug-document-hash.ts +0 -249
  560. package/src/utils/debug/debug-invoice-submission.ts +0 -355
  561. package/src/utils/invoice1-1.ts +0 -671
  562. package/src/utils/signature/canonicalize.ts +0 -104
  563. package/src/utils/signature/hashCert.ts +0 -115
  564. package/src/utils/signature/hashSignedProperties.ts +0 -155
  565. package/src/utils/signature/populateFinalDocument.ts +0 -187
  566. package/src/utils/signature/populateSignedProperties.ts +0 -87
  567. package/src/utils/signature/sign.ts +0 -51
  568. package/src/utils/signature/transform.ts +0 -99
  569. package/test/canonicalize.test.ts +0 -110
  570. package/test/hashCert.test.ts +0 -95
  571. package/test/hashSignedProperties.test.ts +0 -140
  572. package/test/populateFinalDocument.test.ts +0 -218
  573. package/test/populateSignedProperties.test.ts +0 -155
  574. package/test/sign.test.ts +0 -70
  575. 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
- })