@ripwords/myinvois-client 0.1.0 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (577) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/README.md +128 -4
  3. package/bun.lock +59 -0
  4. package/dist/{0X-Yw7mZEro.d.cts → 0X-CTIq3y3a.d.ts} +1 -2
  5. package/dist/{0X-C4IRh_fJ.d.ts → 0X-Cr3M7hci.d.cts} +1 -1
  6. package/dist/{1X-D_aUVsuM.d.cts → 1X-Bu4oiv8D.d.ts} +1 -2
  7. package/dist/{1X-C-_KHV-Q.d.ts → 1X-BywXCqtn.d.ts} +1 -2
  8. package/dist/{1X-Brnls9Jh.d.ts → 1X-CWwmfCzo.d.cts} +1 -1
  9. package/dist/{1X-BwpSoT3o.d.cts → 1X-ClnJ79HH.d.cts} +1 -1
  10. package/dist/{2X-DkS1BoE5.d.ts → 2X-3fSEGIuE.d.ts} +1 -2
  11. package/dist/{2X-Bb6elyzV.d.cts → 2X-CV9eYhog.d.cts} +1 -1
  12. package/dist/{2X-UdQcQW24.d.ts → 2X-DNtkJ0tj.d.cts} +1 -1
  13. package/dist/{2X-hClUyw26.d.cts → 2X-DnG3FY1f.d.ts} +1 -2
  14. package/dist/{3X-C7VFD-n-.d.cts → 3X--VWVsC84.d.cts} +1 -1
  15. package/dist/{3X-CLMESDvz.d.cts → 3X-BOxfatu3.d.cts} +1 -1
  16. package/dist/{3X-DVDyspgb.d.ts → 3X-CLdmoel1.d.ts} +1 -2
  17. package/dist/{3X-DFI-4RQQ.d.ts → 3X-Ynjfgoll.d.ts} +1 -2
  18. package/dist/{4X-DIfvpU6V.d.cts → 4X-B5ePdMky.d.ts} +1 -2
  19. package/dist/{4X-CvScPJTf.d.cts → 4X-BTG6o1Gn.d.ts} +1 -2
  20. package/dist/{4X-CIJ2JJ2w.d.ts → 4X-By9PzHaY.d.cts} +1 -1
  21. package/dist/{4X-CUR8jlaZ.d.ts → 4X-C7fzDWJ_.d.cts} +1 -1
  22. package/dist/{5X-BOUxhadJ.d.cts → 5X-B5M0Cv_K.d.cts} +1 -1
  23. package/dist/{5X-C6db432h.d.ts → 5X-CNAFsDm2.d.cts} +1 -1
  24. package/dist/{5X-CkLu7Vyd.d.cts → 5X-CjSz1zxJ.d.ts} +1 -2
  25. package/dist/{5X-COsZHUaQ.d.ts → 5X-dhP6fyou.d.ts} +1 -2
  26. package/dist/{6X-Mf32k1d0.d.cts → 6X-B9KP_vEn.d.ts} +1 -2
  27. package/dist/{6X-DE7RJeV6.d.cts → 6X-BHaY0TCf.d.ts} +1 -2
  28. package/dist/{6X-ClZDKOTC.d.ts → 6X-C3elgd-n.d.cts} +1 -1
  29. package/dist/{6X-C_fFIcJC.d.ts → 6X-uObUP4VG.d.cts} +1 -1
  30. package/dist/{7X-DoCUcp-J.d.cts → 7X-BifJnY24.d.cts} +1 -1
  31. package/dist/{7X-Chtd6B66.d.cts → 7X-C4eX_tAk.d.ts} +1 -2
  32. package/dist/{7X-BZyesooz.d.ts → 7X-D3idQBl9.d.cts} +1 -1
  33. package/dist/{7X-kot_VccM.d.ts → 7X-DtkQutx2.d.ts} +1 -2
  34. package/dist/{8X-Dr9RunRw.d.cts → 8X-5n9seY3z.d.ts} +1 -2
  35. package/dist/{8X-DkuKAkHz.d.ts → 8X-C6UMFvQW.d.cts} +1 -1
  36. package/dist/{8X-DqZyMvyV.d.cts → 8X-D6HTLShY.d.ts} +1 -2
  37. package/dist/{8X-Df4DOBOe.d.ts → 8X-DioBXCJ0.d.cts} +1 -1
  38. package/dist/{9X-BaoZtjWF.d.cts → 9X-BjffnXuq.d.cts} +1 -1
  39. package/dist/{9X-BDgifncF.d.ts → 9X-CHZKsIdD.d.ts} +1 -2
  40. package/dist/{9X-BcAb6Uso.d.cts → 9X-CJjPJgIG.d.cts} +1 -1
  41. package/dist/{9X-BhBWlgxG.d.ts → 9X-Cpb6V4JC.d.ts} +1 -2
  42. package/dist/{AX-D6XHWdrY.d.ts → AX-C0w_r3PA.d.ts} +1 -2
  43. package/dist/{AX-BY72FohC.d.cts → AX-DrEd2Ov6.d.cts} +1 -1
  44. package/dist/{BX-D_0C8Qbd.d.ts → BX-C5jc6myN.d.cts} +1 -1
  45. package/dist/{BX-CA0OmrUZ.d.cts → BX-RadlZ-6m.d.ts} +1 -2
  46. package/dist/{CX-glpQSL8x.d.cts → CX-CT1Zzb9D.d.ts} +1 -2
  47. package/dist/{CX-HH4cSZRX.d.ts → CX-oSgvmn3h.d.cts} +1 -1
  48. package/dist/{DX-Dx22ax_I.d.ts → DX-CtUeTKMM.d.ts} +1 -2
  49. package/dist/{DX-DimL1MDM.d.cts → DX-ZIG0enmK.d.cts} +1 -1
  50. package/dist/{EX-BRWh1wFc.d.ts → EX-084Yu7Wt.d.ts} +1 -2
  51. package/dist/{EX-Cx87Ruxl.d.cts → EX-BpWZ5ADq.d.cts} +1 -1
  52. package/dist/{FX-RmjwAr40.d.ts → FX-BrbQM0CW.d.ts} +1 -2
  53. package/dist/{FX-D81UlxNN.d.cts → FX-CvYBEc51.d.cts} +1 -1
  54. package/dist/{GX-CJyo7oDp.d.ts → GX-CU8PZy0G.d.cts} +1 -1
  55. package/dist/{GX-9i7piP9G.d.cts → GX-gKj8iAAh.d.ts} +1 -2
  56. package/dist/{HX-XALBTdLA.d.ts → HX-9D-ZXTy5.d.ts} +1 -2
  57. package/dist/{HX-20GVJAvl.d.cts → HX-DoEErDeE.d.cts} +1 -1
  58. package/dist/{IX-D54NGPsc.d.cts → IX-DR4Fc92A.d.ts} +1 -2
  59. package/dist/{IX-6SZ55QKb.d.ts → IX-jLAUHe8i.d.cts} +1 -1
  60. package/dist/{JX-hQ1XRmLp.d.ts → JX-DIKa9ma-.d.ts} +1 -2
  61. package/dist/{JX-C1RYcwQX.d.cts → JX-DX8BjYQC.d.cts} +1 -1
  62. package/dist/{KX-BNwunEfn.d.ts → KX-DpsJ_unT.d.ts} +1 -2
  63. package/dist/{KX-gQHCIgtQ.d.cts → KX-fZb4_vhw.d.cts} +1 -1
  64. package/dist/{LX-CHYX3X3J.d.ts → LX-D_mI1bk-.d.cts} +1 -1
  65. package/dist/{LX-CPurJGIh.d.cts → LX-DeXPPWUX.d.ts} +1 -2
  66. package/dist/{MX-BnyW5eHf.d.cts → MX-CKMjg_zK.d.ts} +1 -2
  67. package/dist/{MX-BPGLWSUz.d.ts → MX-DlYZhpkT.d.cts} +1 -1
  68. package/dist/{NX-B11fQuco.d.cts → NX-DELEEbad.d.cts} +1 -1
  69. package/dist/{NX-RulN5Ml3.d.ts → NX-oYdb4NDo.d.ts} +1 -2
  70. package/dist/{OX-T-ydRXQS.d.cts → OX-Bid9es3D.d.ts} +1 -2
  71. package/dist/{OX-DgKVSp7I.d.ts → OX-CKPyrIFf.d.cts} +1 -1
  72. package/dist/{PX-DA4A2kEv.d.ts → PX-D7jy9CFk.d.ts} +1 -2
  73. package/dist/{PX-p0n1SzvU.d.cts → PX-SP6NxBtG.d.cts} +1 -1
  74. package/dist/{QX-DrFqsMEs.d.ts → QX-BFWOR4g3.d.ts} +1 -2
  75. package/dist/{QX-CI1NccIB.d.cts → QX-QZA7E2O-.d.cts} +1 -1
  76. package/dist/{RX-Cm7vFcFN.d.ts → RX-DBcgbdeE.d.cts} +1 -1
  77. package/dist/{RX-DnNKol22.d.cts → RX-XHgCyMV1.d.ts} +1 -2
  78. package/dist/{SX-CsPPTu-W.d.ts → SX-Cl8RN8oH.d.ts} +1 -2
  79. package/dist/{SX-BUjiWQYz.d.cts → SX-DmiJeCMN.d.cts} +1 -1
  80. package/dist/{TX-DCY25MdR.d.ts → TX-C1SoDobK.d.cts} +1 -1
  81. package/dist/{TX-DOEpsf05.d.cts → TX-ZymoIbtr.d.ts} +1 -2
  82. package/dist/{UX-DgUOnTFK.d.cts → UX-D-Ndd1ov.d.ts} +1 -2
  83. package/dist/{UX-DauyagHy.d.ts → UX-DFVynFhQ.d.cts} +1 -1
  84. package/dist/{VX-kUX6LM-3.d.cts → VX-B-1b34r7.d.ts} +1 -2
  85. package/dist/{VX-DD4scgCe.d.ts → VX-DsRum5k3.d.cts} +1 -1
  86. package/dist/{WX-DPfyPFFh.d.cts → WX-0GuMjPNZ.d.ts} +1 -2
  87. package/dist/{WX-CjkoppdY.d.ts → WX-VReU5R5M.d.cts} +1 -1
  88. package/dist/{XX-C4C1gQZH.d.cts → XX-CF2NANsy.d.ts} +1 -2
  89. package/dist/{XX-sbsIUOnA.d.ts → XX-ChAviUMj.d.cts} +1 -1
  90. package/dist/{YX-DUdO8mRC.d.ts → YX-B51BbNSg.d.ts} +1 -2
  91. package/dist/{YX-BeT-LsiA.d.cts → YX-QfzeMEKx.d.cts} +1 -1
  92. package/dist/{ZX-DwfcSA-D.d.ts → ZX-BMJS1iAv.d.ts} +1 -2
  93. package/dist/{ZX-BuVTTq-D.d.cts → ZX-Ca2E726a.d.cts} +1 -1
  94. package/dist/api/platform/platformLogin.d.ts +58 -60
  95. package/dist/api/platform/platformLogin.js +1 -1
  96. package/dist/certificate-DFK-788s.cjs +62 -0
  97. package/dist/certificate-DFK-788s.cjs.map +1 -0
  98. package/dist/certificate-aooIRf9A.js +49 -0
  99. package/dist/{classification-codes-C2X4xW5-.d.ts → classification-codes-BKxV-rO9.d.ts} +1 -2
  100. package/dist/{country-code-DsI8Mbzx.d.ts → country-code-CQuaiQm2.d.ts} +1 -2
  101. package/dist/{currencies-DKuDflOO.d.ts → currencies-BYJK-m6v.d.ts} +1 -2
  102. package/dist/document-CARHiGdp.cjs +472 -0
  103. package/dist/document-CARHiGdp.cjs.map +1 -0
  104. package/dist/document-D6VKMAtx.js +405 -0
  105. package/dist/documents-CJ8hqIGH.d.ts +858 -0
  106. package/dist/documents-MGs0EvXh.d.cts +859 -0
  107. package/dist/{e-invoice-C2TxhyrK.d.ts → e-invoice-CmbLQkHw.d.ts} +1 -2
  108. package/dist/{getBaseUrl-Dx6RDC8I.js → getBaseUrl-R3IdgCu3.js} +1 -2
  109. package/dist/{index-B1DSs-wd.d.cts → index-0-EvC6Nv.d.ts} +1 -2
  110. package/dist/{index-FTgB2nM6.d.ts → index-D2_HVwCz.d.cts} +1 -1
  111. package/dist/index.cjs +308 -12
  112. package/dist/index.cjs.map +1 -0
  113. package/dist/index.d.ts +233 -60
  114. package/dist/index.js +306 -11
  115. package/dist/index10.cjs +0 -34
  116. package/dist/index11.cjs +25 -15
  117. package/dist/index11.cjs.map +1 -1
  118. package/dist/index12.cjs +24 -0
  119. package/dist/index12.cjs.map +1 -0
  120. package/dist/index13.cjs +0 -13
  121. package/dist/index15.cjs +3 -2
  122. package/dist/index16.cjs +12 -16
  123. package/dist/index17.cjs +2 -2
  124. package/dist/index18.cjs +336 -204
  125. package/dist/index18.cjs.map +1 -1
  126. package/dist/index19.cjs +325 -105
  127. package/dist/index19.cjs.map +1 -1
  128. package/dist/index20.cjs +136 -133
  129. package/dist/index20.cjs.map +1 -1
  130. package/dist/index21.cjs +203 -59
  131. package/dist/index21.cjs.map +1 -1
  132. package/dist/index22.cjs +104 -262
  133. package/dist/index22.cjs.map +1 -1
  134. package/dist/index23.cjs +132 -74
  135. package/dist/index23.cjs.map +1 -1
  136. package/dist/index24.cjs +59 -102
  137. package/dist/index24.cjs.map +1 -1
  138. package/dist/index25.cjs +262 -68
  139. package/dist/index25.cjs.map +1 -1
  140. package/dist/index26.cjs +74 -107
  141. package/dist/index26.cjs.map +1 -1
  142. package/dist/index27.cjs +102 -95
  143. package/dist/index27.cjs.map +1 -1
  144. package/dist/index28.cjs +68 -13
  145. package/dist/index28.cjs.map +1 -1
  146. package/dist/index29.cjs +107 -33
  147. package/dist/index29.cjs.map +1 -1
  148. package/dist/index30.cjs +95 -14
  149. package/dist/index30.cjs.map +1 -1
  150. package/dist/index31.cjs +11 -22
  151. package/dist/index31.cjs.map +1 -1
  152. package/dist/index32.cjs +31 -13
  153. package/dist/index32.cjs.map +1 -1
  154. package/dist/index33.cjs +12 -7
  155. package/dist/index33.cjs.map +1 -1
  156. package/dist/index34.cjs +22 -7
  157. package/dist/index34.cjs.map +1 -1
  158. package/dist/index35.cjs +13 -10
  159. package/dist/index35.cjs.map +1 -1
  160. package/dist/index36.cjs +7 -6
  161. package/dist/index36.cjs.map +1 -1
  162. package/dist/index37.cjs +7 -101
  163. package/dist/index37.cjs.map +1 -1
  164. package/dist/index38.cjs +10 -106
  165. package/dist/index38.cjs.map +1 -1
  166. package/dist/index39.cjs +6 -119
  167. package/dist/index39.cjs.map +1 -1
  168. package/dist/index40.cjs +101 -106
  169. package/dist/index40.cjs.map +1 -1
  170. package/dist/index41.cjs +106 -98
  171. package/dist/index41.cjs.map +1 -1
  172. package/dist/index42.cjs +119 -118
  173. package/dist/index42.cjs.map +1 -1
  174. package/dist/index43.cjs +106 -127
  175. package/dist/index43.cjs.map +1 -1
  176. package/dist/index44.cjs +98 -117
  177. package/dist/index44.cjs.map +1 -1
  178. package/dist/index45.cjs +118 -14
  179. package/dist/index45.cjs.map +1 -1
  180. package/dist/index46.cjs +127 -95
  181. package/dist/index46.cjs.map +1 -1
  182. package/dist/index47.cjs +117 -142
  183. package/dist/index47.cjs.map +1 -1
  184. package/dist/index48.cjs +14 -114
  185. package/dist/index48.cjs.map +1 -1
  186. package/dist/index49.cjs +95 -144
  187. package/dist/index49.cjs.map +1 -1
  188. package/dist/index5.cjs +0 -25
  189. package/dist/index50.cjs +142 -113
  190. package/dist/index50.cjs.map +1 -1
  191. package/dist/index51.cjs +114 -17
  192. package/dist/index51.cjs.map +1 -1
  193. package/dist/index52.cjs +144 -112
  194. package/dist/index52.cjs.map +1 -1
  195. package/dist/index53.cjs +113 -47
  196. package/dist/index53.cjs.map +1 -1
  197. package/dist/index54.cjs +17 -14
  198. package/dist/index54.cjs.map +1 -1
  199. package/dist/index55.cjs +112 -28
  200. package/dist/index55.cjs.map +1 -1
  201. package/dist/index56.cjs +47 -22
  202. package/dist/index56.cjs.map +1 -1
  203. package/dist/index57.cjs +14 -9
  204. package/dist/index57.cjs.map +1 -1
  205. package/dist/index58.cjs +28 -8
  206. package/dist/index58.cjs.map +1 -1
  207. package/dist/index58.cts.map +1 -0
  208. package/dist/index59.cjs +22 -17
  209. package/dist/index59.cjs.map +1 -1
  210. package/dist/index59.cts.map +1 -1
  211. package/dist/index6.cjs +25 -0
  212. package/dist/{index5.cjs.map → index6.cjs.map} +1 -1
  213. package/dist/index60.cjs +9 -412
  214. package/dist/index60.cjs.map +1 -1
  215. package/dist/index60.cts.map +1 -0
  216. package/dist/index61.cjs +8 -8
  217. package/dist/index61.cjs.map +1 -1
  218. package/dist/index61.cts.map +1 -0
  219. package/dist/index62.cjs +17 -9
  220. package/dist/index62.cjs.map +1 -1
  221. package/dist/index62.cts.map +1 -1
  222. package/dist/index63.cjs +419 -0
  223. package/dist/index63.cjs.map +1 -0
  224. package/dist/index63.cts.map +1 -1
  225. package/dist/index64.cjs +15 -0
  226. package/dist/index64.cjs.map +1 -0
  227. package/dist/index64.cts.map +1 -1
  228. package/dist/index65.cjs +10 -116
  229. package/dist/index65.cjs.map +1 -1
  230. package/dist/index65.cts.map +1 -1
  231. package/dist/index66.cjs +2 -228
  232. package/dist/index66.cts.map +1 -1
  233. package/dist/index8.cjs +0 -25
  234. package/dist/index9.cjs +25 -0
  235. package/dist/{index8.cjs.map → index9.cjs.map} +1 -1
  236. package/dist/msic-codes-C8PJVOaA.d.ts +25 -0
  237. package/dist/{msic-codes-B_1W6lZF.d.cts → msic-codes-CIKdPqag.d.cts} +11 -11
  238. package/dist/{payment-modes-DHihrywe.d.cts → payment-modes-BOTSRC_X.d.ts} +1 -2
  239. package/dist/{payment-modes-B8dNy3SM.d.ts → payment-modes-ghFEXnUl.d.cts} +1 -1
  240. package/dist/platformLogin-PGzMhw1X.cjs.map +1 -1
  241. package/dist/{platformLogin-DsxWWUXr.js → platformLogin-f0bNAoZI.js} +1 -2
  242. package/dist/{signatures-C9QPZTQd.d.ts → signatures-W-_brwdb.d.ts} +1 -2
  243. package/dist/{signatures-BKi9DP2K.d.cts → signatures-hFbt_std.d.cts} +1 -1
  244. package/dist/{state-codes-DXSWtE6a.d.cts → state-codes-BlILGZ9d.d.cts} +1 -1
  245. package/dist/{state-codes-CxG1S9YY.d.ts → state-codes-oeFKlwXZ.d.ts} +1 -2
  246. package/dist/{tax-types-CgwxONDS.d.cts → tax-types-B5sQ8UyN.d.cts} +1 -1
  247. package/dist/{tax-types-CEpfSh5P.d.ts → tax-types-CsQ76JMf.d.ts} +1 -2
  248. package/dist/types/classification-codes.d.ts +1 -1
  249. package/dist/types/country-code.d.ts +1 -1
  250. package/dist/types/currencies.d.ts +1 -1
  251. package/dist/types/documents.d.ts +18 -0
  252. package/dist/types/e-invoice.d.ts +1 -1
  253. package/dist/types/index.d.ts +58 -59
  254. package/dist/types/msic/0X.d.ts +1 -1
  255. package/dist/types/msic/1X.d.ts +1 -1
  256. package/dist/types/msic/2X.d.ts +1 -1
  257. package/dist/types/msic/3X.d.ts +1 -1
  258. package/dist/types/msic/4X.d.ts +1 -1
  259. package/dist/types/msic/5X.d.ts +1 -1
  260. package/dist/types/msic/6X.d.ts +1 -1
  261. package/dist/types/msic/7X.d.ts +1 -1
  262. package/dist/types/msic/8X.d.ts +1 -1
  263. package/dist/types/msic/9X.d.ts +1 -1
  264. package/dist/types/msic-codes.d.ts +11 -11
  265. package/dist/types/payment-modes.d.ts +1 -1
  266. package/dist/types/signatures.d.ts +1 -1
  267. package/dist/types/state-codes.d.ts +1 -1
  268. package/dist/types/tax-types.d.ts +1 -1
  269. package/dist/types/unit/1X.d.ts +1 -1
  270. package/dist/types/unit/2X.d.ts +1 -1
  271. package/dist/types/unit/3X.d.ts +1 -1
  272. package/dist/types/unit/4X.d.ts +1 -1
  273. package/dist/types/unit/5X.d.ts +1 -1
  274. package/dist/types/unit/6X.d.ts +1 -1
  275. package/dist/types/unit/7X.d.ts +1 -1
  276. package/dist/types/unit/8X.d.ts +1 -1
  277. package/dist/types/unit/9X.d.ts +1 -1
  278. package/dist/types/unit/AX.d.ts +1 -1
  279. package/dist/types/unit/BX.d.ts +1 -1
  280. package/dist/types/unit/CX.d.ts +1 -1
  281. package/dist/types/unit/DX.d.ts +1 -1
  282. package/dist/types/unit/EX.d.ts +1 -1
  283. package/dist/types/unit/FX.d.ts +1 -1
  284. package/dist/types/unit/GX.d.ts +1 -1
  285. package/dist/types/unit/HX.d.ts +1 -1
  286. package/dist/types/unit/IX.d.ts +1 -1
  287. package/dist/types/unit/JX.d.ts +1 -1
  288. package/dist/types/unit/KX.d.ts +1 -1
  289. package/dist/types/unit/LX.d.ts +1 -1
  290. package/dist/types/unit/MX.d.ts +1 -1
  291. package/dist/types/unit/NX.d.ts +1 -1
  292. package/dist/types/unit/OX.d.ts +1 -1
  293. package/dist/types/unit/PX.d.ts +1 -1
  294. package/dist/types/unit/QX.d.ts +1 -1
  295. package/dist/types/unit/RX.d.ts +1 -1
  296. package/dist/types/unit/SX.d.ts +1 -1
  297. package/dist/types/unit/TX.d.ts +1 -1
  298. package/dist/types/unit/UX.d.ts +1 -1
  299. package/dist/types/unit/VX.d.ts +1 -1
  300. package/dist/types/unit/WX.d.ts +1 -1
  301. package/dist/types/unit/XX.d.ts +1 -1
  302. package/dist/types/unit/YX.d.ts +1 -1
  303. package/dist/types/unit/ZX.d.ts +1 -1
  304. package/dist/types/unit-types.d.ts +36 -36
  305. package/dist/unit-types-B41YFOLT.d.ts +55 -0
  306. package/dist/unit-types-CjWNk2wS.d.cts +56 -0
  307. package/dist/utils/base64.d.ts +1 -2
  308. package/dist/utils/base64.js +1 -2
  309. package/dist/utils/certificate.d.ts +22 -0
  310. package/dist/utils/certificate.js +3 -0
  311. package/dist/utils/document.d.ts +135 -0
  312. package/dist/utils/document.js +3 -0
  313. package/dist/utils/getBaseUrl.d.ts +1 -2
  314. package/dist/utils/getBaseUrl.js +1 -1
  315. package/dist/utils/helpers.d.ts +271 -0
  316. package/dist/utils/helpers.js +330 -0
  317. package/dist/utils/signature-diagnostics.d.ts +93 -0
  318. package/dist/utils/signature-diagnostics.js +326 -0
  319. package/dist/utils/validation.d.ts +46 -0
  320. package/dist/utils/validation.js +134 -0
  321. package/myinvois-cert.conf.template +23 -0
  322. package/package.json +9 -3
  323. package/scripts/gen-cert.sh +159 -0
  324. package/src/api/platform/platformLogin.ts +1 -1
  325. package/src/index.ts +528 -1
  326. package/src/types/documents.d.ts +870 -0
  327. package/src/types/index.d.ts +1 -1
  328. package/src/utils/certificate.ts +60 -0
  329. package/src/utils/document.ts +852 -0
  330. package/src/utils/helpers.ts +552 -0
  331. package/src/utils/signature-diagnostics.ts +583 -0
  332. package/src/utils/validation.ts +268 -0
  333. package/test/MyInvoiClientWithRealData.test.ts +9 -1
  334. package/test/MyInvoisClient.test.ts +7 -1
  335. package/test/dynamicInvoiceFeatures.test.ts +451 -0
  336. package/test/signAndSubmitInvoice.test.ts +271 -734
  337. package/test/signature-diagnostics.test.ts +130 -0
  338. package/tsconfig.json +0 -3
  339. package/dist/0X-C4IRh_fJ.d.ts.map +0 -1
  340. package/dist/0X-Yw7mZEro.d.cts.map +0 -1
  341. package/dist/1X-Brnls9Jh.d.ts.map +0 -1
  342. package/dist/1X-BwpSoT3o.d.cts.map +0 -1
  343. package/dist/1X-C-_KHV-Q.d.ts.map +0 -1
  344. package/dist/1X-D_aUVsuM.d.cts.map +0 -1
  345. package/dist/2X-Bb6elyzV.d.cts.map +0 -1
  346. package/dist/2X-DkS1BoE5.d.ts.map +0 -1
  347. package/dist/2X-UdQcQW24.d.ts.map +0 -1
  348. package/dist/2X-hClUyw26.d.cts.map +0 -1
  349. package/dist/3X-C7VFD-n-.d.cts.map +0 -1
  350. package/dist/3X-CLMESDvz.d.cts.map +0 -1
  351. package/dist/3X-DFI-4RQQ.d.ts.map +0 -1
  352. package/dist/3X-DVDyspgb.d.ts.map +0 -1
  353. package/dist/4X-CIJ2JJ2w.d.ts.map +0 -1
  354. package/dist/4X-CUR8jlaZ.d.ts.map +0 -1
  355. package/dist/4X-CvScPJTf.d.cts.map +0 -1
  356. package/dist/4X-DIfvpU6V.d.cts.map +0 -1
  357. package/dist/5X-BOUxhadJ.d.cts.map +0 -1
  358. package/dist/5X-C6db432h.d.ts.map +0 -1
  359. package/dist/5X-COsZHUaQ.d.ts.map +0 -1
  360. package/dist/5X-CkLu7Vyd.d.cts.map +0 -1
  361. package/dist/6X-C_fFIcJC.d.ts.map +0 -1
  362. package/dist/6X-ClZDKOTC.d.ts.map +0 -1
  363. package/dist/6X-DE7RJeV6.d.cts.map +0 -1
  364. package/dist/6X-Mf32k1d0.d.cts.map +0 -1
  365. package/dist/7X-BZyesooz.d.ts.map +0 -1
  366. package/dist/7X-Chtd6B66.d.cts.map +0 -1
  367. package/dist/7X-DoCUcp-J.d.cts.map +0 -1
  368. package/dist/7X-kot_VccM.d.ts.map +0 -1
  369. package/dist/8X-Df4DOBOe.d.ts.map +0 -1
  370. package/dist/8X-DkuKAkHz.d.ts.map +0 -1
  371. package/dist/8X-DqZyMvyV.d.cts.map +0 -1
  372. package/dist/8X-Dr9RunRw.d.cts.map +0 -1
  373. package/dist/9X-BDgifncF.d.ts.map +0 -1
  374. package/dist/9X-BaoZtjWF.d.cts.map +0 -1
  375. package/dist/9X-BcAb6Uso.d.cts.map +0 -1
  376. package/dist/9X-BhBWlgxG.d.ts.map +0 -1
  377. package/dist/AX-BY72FohC.d.cts.map +0 -1
  378. package/dist/AX-D6XHWdrY.d.ts.map +0 -1
  379. package/dist/BX-CA0OmrUZ.d.cts.map +0 -1
  380. package/dist/BX-D_0C8Qbd.d.ts.map +0 -1
  381. package/dist/CX-HH4cSZRX.d.ts.map +0 -1
  382. package/dist/CX-glpQSL8x.d.cts.map +0 -1
  383. package/dist/DX-DimL1MDM.d.cts.map +0 -1
  384. package/dist/DX-Dx22ax_I.d.ts.map +0 -1
  385. package/dist/EX-BRWh1wFc.d.ts.map +0 -1
  386. package/dist/EX-Cx87Ruxl.d.cts.map +0 -1
  387. package/dist/FX-D81UlxNN.d.cts.map +0 -1
  388. package/dist/FX-RmjwAr40.d.ts.map +0 -1
  389. package/dist/GX-9i7piP9G.d.cts.map +0 -1
  390. package/dist/GX-CJyo7oDp.d.ts.map +0 -1
  391. package/dist/HX-20GVJAvl.d.cts.map +0 -1
  392. package/dist/HX-XALBTdLA.d.ts.map +0 -1
  393. package/dist/IX-6SZ55QKb.d.ts.map +0 -1
  394. package/dist/IX-D54NGPsc.d.cts.map +0 -1
  395. package/dist/JX-C1RYcwQX.d.cts.map +0 -1
  396. package/dist/JX-hQ1XRmLp.d.ts.map +0 -1
  397. package/dist/KX-BNwunEfn.d.ts.map +0 -1
  398. package/dist/KX-gQHCIgtQ.d.cts.map +0 -1
  399. package/dist/LX-CHYX3X3J.d.ts.map +0 -1
  400. package/dist/LX-CPurJGIh.d.cts.map +0 -1
  401. package/dist/MX-BPGLWSUz.d.ts.map +0 -1
  402. package/dist/MX-BnyW5eHf.d.cts.map +0 -1
  403. package/dist/MyInvoisClient-BrNyMjS-.d.cts +0 -178
  404. package/dist/MyInvoisClient-BrNyMjS-.d.cts.map +0 -1
  405. package/dist/MyInvoisClient-CXu4pdl-.d.ts +0 -178
  406. package/dist/MyInvoisClient-CXu4pdl-.d.ts.map +0 -1
  407. package/dist/MyInvoisClient-Cnvb5iUC.js +0 -299
  408. package/dist/MyInvoisClient-Cnvb5iUC.js.map +0 -1
  409. package/dist/MyInvoisClient-DO1dJfQq.cjs +0 -304
  410. package/dist/MyInvoisClient-DO1dJfQq.cjs.map +0 -1
  411. package/dist/NX-B11fQuco.d.cts.map +0 -1
  412. package/dist/NX-RulN5Ml3.d.ts.map +0 -1
  413. package/dist/OX-DgKVSp7I.d.ts.map +0 -1
  414. package/dist/OX-T-ydRXQS.d.cts.map +0 -1
  415. package/dist/PX-DA4A2kEv.d.ts.map +0 -1
  416. package/dist/PX-p0n1SzvU.d.cts.map +0 -1
  417. package/dist/QX-CI1NccIB.d.cts.map +0 -1
  418. package/dist/QX-DrFqsMEs.d.ts.map +0 -1
  419. package/dist/RX-Cm7vFcFN.d.ts.map +0 -1
  420. package/dist/RX-DnNKol22.d.cts.map +0 -1
  421. package/dist/SX-BUjiWQYz.d.cts.map +0 -1
  422. package/dist/SX-CsPPTu-W.d.ts.map +0 -1
  423. package/dist/TX-DCY25MdR.d.ts.map +0 -1
  424. package/dist/TX-DOEpsf05.d.cts.map +0 -1
  425. package/dist/UX-DauyagHy.d.ts.map +0 -1
  426. package/dist/UX-DgUOnTFK.d.cts.map +0 -1
  427. package/dist/VX-DD4scgCe.d.ts.map +0 -1
  428. package/dist/VX-kUX6LM-3.d.cts.map +0 -1
  429. package/dist/WX-CjkoppdY.d.ts.map +0 -1
  430. package/dist/WX-DPfyPFFh.d.cts.map +0 -1
  431. package/dist/XX-C4C1gQZH.d.cts.map +0 -1
  432. package/dist/XX-sbsIUOnA.d.ts.map +0 -1
  433. package/dist/YX-BeT-LsiA.d.cts.map +0 -1
  434. package/dist/YX-DUdO8mRC.d.ts.map +0 -1
  435. package/dist/ZX-BuVTTq-D.d.cts.map +0 -1
  436. package/dist/ZX-DwfcSA-D.d.ts.map +0 -1
  437. package/dist/api/platform/platformLogin.d.ts.map +0 -1
  438. package/dist/canonicalize-C_fNNpYr.cjs +0 -80
  439. package/dist/canonicalize-C_fNNpYr.cjs.map +0 -1
  440. package/dist/canonicalize-DNUrCGad.js +0 -68
  441. package/dist/canonicalize-DNUrCGad.js.map +0 -1
  442. package/dist/classification-codes-B15PbWxz.d.cts.map +0 -1
  443. package/dist/classification-codes-C2X4xW5-.d.ts.map +0 -1
  444. package/dist/country-code-DPeNFMMi.d.cts.map +0 -1
  445. package/dist/country-code-DsI8Mbzx.d.ts.map +0 -1
  446. package/dist/currencies-DKuDflOO.d.ts.map +0 -1
  447. package/dist/currencies-S5g1gzBU.d.cts.map +0 -1
  448. package/dist/e-invoice-BuwtFnlI.d.cts.map +0 -1
  449. package/dist/e-invoice-C2TxhyrK.d.ts.map +0 -1
  450. package/dist/getBaseUrl-Dx6RDC8I.js.map +0 -1
  451. package/dist/hashCert-Bol7lIh2.js +0 -62
  452. package/dist/hashCert-Bol7lIh2.js.map +0 -1
  453. package/dist/hashCert-mlYEuYex.cjs +0 -68
  454. package/dist/hashCert-mlYEuYex.cjs.map +0 -1
  455. package/dist/hashSignedProperties-9vj5wlYR.js +0 -83
  456. package/dist/hashSignedProperties-9vj5wlYR.js.map +0 -1
  457. package/dist/hashSignedProperties-CU_ZqqmY.cjs +0 -95
  458. package/dist/hashSignedProperties-CU_ZqqmY.cjs.map +0 -1
  459. package/dist/index-B1DSs-wd.d.cts.map +0 -1
  460. package/dist/index-CJNLQVjx.d.ts +0 -1
  461. package/dist/index-FTgB2nM6.d.ts.map +0 -1
  462. package/dist/index-Wy1ONBjV.d.cts +0 -1
  463. package/dist/index10.cjs.map +0 -1
  464. package/dist/index66.cjs.map +0 -1
  465. package/dist/index67.cjs +0 -4
  466. package/dist/index67.cts.map +0 -1
  467. package/dist/index68.cjs +0 -3
  468. package/dist/index68.cts.map +0 -1
  469. package/dist/index69.cjs +0 -4
  470. package/dist/index69.cts.map +0 -1
  471. package/dist/index70.cjs +0 -3
  472. package/dist/index70.cts.map +0 -1
  473. package/dist/index71.cjs +0 -3
  474. package/dist/index71.cts.map +0 -1
  475. package/dist/index72.cjs +0 -3
  476. package/dist/index72.cts.map +0 -1
  477. package/dist/index73.cjs +0 -3
  478. package/dist/index73.cts.map +0 -1
  479. package/dist/invoice-1_1-BJVcw-oE.d.ts +0 -432
  480. package/dist/invoice-1_1-BJVcw-oE.d.ts.map +0 -1
  481. package/dist/invoice-1_1-DWdNPRzr.d.cts +0 -432
  482. package/dist/invoice-1_1-DWdNPRzr.d.cts.map +0 -1
  483. package/dist/invoice1-1-8S-QQn7P.cjs +0 -547
  484. package/dist/invoice1-1-8S-QQn7P.cjs.map +0 -1
  485. package/dist/invoice1-1-CHuLpkFz.js +0 -504
  486. package/dist/invoice1-1-CHuLpkFz.js.map +0 -1
  487. package/dist/msic-codes-B_1W6lZF.d.cts.map +0 -1
  488. package/dist/msic-codes-bs0lTfSZ.d.ts +0 -26
  489. package/dist/msic-codes-bs0lTfSZ.d.ts.map +0 -1
  490. package/dist/payment-modes-B8dNy3SM.d.ts.map +0 -1
  491. package/dist/payment-modes-DHihrywe.d.cts.map +0 -1
  492. package/dist/platformLogin-DsxWWUXr.js.map +0 -1
  493. package/dist/populateFinalDocument-BdyYzz5Y.cjs +0 -96
  494. package/dist/populateFinalDocument-BdyYzz5Y.cjs.map +0 -1
  495. package/dist/populateFinalDocument-BpLXmgLv.js +0 -90
  496. package/dist/populateFinalDocument-BpLXmgLv.js.map +0 -1
  497. package/dist/populateSignedProperties-BJMcBQ6S.cjs +0 -58
  498. package/dist/populateSignedProperties-BJMcBQ6S.cjs.map +0 -1
  499. package/dist/populateSignedProperties-BvGN-YZH.js +0 -52
  500. package/dist/populateSignedProperties-BvGN-YZH.js.map +0 -1
  501. package/dist/sign-B61Cy3gO.cjs +0 -40
  502. package/dist/sign-B61Cy3gO.cjs.map +0 -1
  503. package/dist/sign-DzHK7UhR.js +0 -34
  504. package/dist/sign-DzHK7UhR.js.map +0 -1
  505. package/dist/signatures-BKi9DP2K.d.cts.map +0 -1
  506. package/dist/signatures-C9QPZTQd.d.ts.map +0 -1
  507. package/dist/state-codes-CxG1S9YY.d.ts.map +0 -1
  508. package/dist/state-codes-DXSWtE6a.d.cts.map +0 -1
  509. package/dist/tax-types-CEpfSh5P.d.ts.map +0 -1
  510. package/dist/tax-types-CgwxONDS.d.cts.map +0 -1
  511. package/dist/transform-BLz0S687.cjs +0 -72
  512. package/dist/transform-BLz0S687.cjs.map +0 -1
  513. package/dist/transform-D1q-U6Zj.js +0 -66
  514. package/dist/transform-D1q-U6Zj.js.map +0 -1
  515. package/dist/types/documents/index.d.ts +0 -57
  516. package/dist/types/documents/invoice-1_1.d.ts +0 -56
  517. package/dist/unit-types-1bF0KhIp.d.ts +0 -56
  518. package/dist/unit-types-1bF0KhIp.d.ts.map +0 -1
  519. package/dist/unit-types-CsrkvgfG.d.cts +0 -56
  520. package/dist/unit-types-CsrkvgfG.d.cts.map +0 -1
  521. package/dist/utils/MyInvoisClient.d.ts +0 -60
  522. package/dist/utils/MyInvoisClient.js +0 -13
  523. package/dist/utils/base64.d.ts.map +0 -1
  524. package/dist/utils/base64.js.map +0 -1
  525. package/dist/utils/debug/debug-document-hash.d.ts +0 -100
  526. package/dist/utils/debug/debug-document-hash.d.ts.map +0 -1
  527. package/dist/utils/debug/debug-document-hash.js +0 -120
  528. package/dist/utils/debug/debug-document-hash.js.map +0 -1
  529. package/dist/utils/debug/debug-invoice-submission.d.ts +0 -152
  530. package/dist/utils/debug/debug-invoice-submission.d.ts.map +0 -1
  531. package/dist/utils/debug/debug-invoice-submission.js +0 -226
  532. package/dist/utils/debug/debug-invoice-submission.js.map +0 -1
  533. package/dist/utils/getBaseUrl.d.ts.map +0 -1
  534. package/dist/utils/invoice1-1.d.ts +0 -117
  535. package/dist/utils/invoice1-1.d.ts.map +0 -1
  536. package/dist/utils/invoice1-1.js +0 -10
  537. package/dist/utils/signature/canonicalize.d.ts +0 -26
  538. package/dist/utils/signature/canonicalize.d.ts.map +0 -1
  539. package/dist/utils/signature/canonicalize.js +0 -3
  540. package/dist/utils/signature/hashCert.d.ts +0 -15
  541. package/dist/utils/signature/hashCert.d.ts.map +0 -1
  542. package/dist/utils/signature/hashCert.js +0 -3
  543. package/dist/utils/signature/hashSignedProperties.d.ts +0 -25
  544. package/dist/utils/signature/hashSignedProperties.d.ts.map +0 -1
  545. package/dist/utils/signature/hashSignedProperties.js +0 -3
  546. package/dist/utils/signature/populateFinalDocument.d.ts +0 -23
  547. package/dist/utils/signature/populateFinalDocument.d.ts.map +0 -1
  548. package/dist/utils/signature/populateFinalDocument.js +0 -3
  549. package/dist/utils/signature/populateSignedProperties.d.ts +0 -23
  550. package/dist/utils/signature/populateSignedProperties.d.ts.map +0 -1
  551. package/dist/utils/signature/populateSignedProperties.js +0 -3
  552. package/dist/utils/signature/sign.d.ts +0 -16
  553. package/dist/utils/signature/sign.d.ts.map +0 -1
  554. package/dist/utils/signature/sign.js +0 -3
  555. package/dist/utils/signature/transform.d.ts +0 -16
  556. package/dist/utils/signature/transform.d.ts.map +0 -1
  557. package/dist/utils/signature/transform.js +0 -3
  558. package/src/types/documents/index.d.ts +0 -1
  559. package/src/types/documents/invoice-1_1.d.ts +0 -439
  560. package/src/utils/MyInvoisClient.ts +0 -501
  561. package/src/utils/debug/debug-document-hash.ts +0 -249
  562. package/src/utils/debug/debug-invoice-submission.ts +0 -355
  563. package/src/utils/invoice1-1.ts +0 -671
  564. package/src/utils/signature/canonicalize.ts +0 -104
  565. package/src/utils/signature/hashCert.ts +0 -115
  566. package/src/utils/signature/hashSignedProperties.ts +0 -155
  567. package/src/utils/signature/populateFinalDocument.ts +0 -187
  568. package/src/utils/signature/populateSignedProperties.ts +0 -87
  569. package/src/utils/signature/sign.ts +0 -51
  570. package/src/utils/signature/transform.ts +0 -99
  571. package/test/canonicalize.test.ts +0 -110
  572. package/test/hashCert.test.ts +0 -95
  573. package/test/hashSignedProperties.test.ts +0 -140
  574. package/test/populateFinalDocument.test.ts +0 -218
  575. package/test/populateSignedProperties.test.ts +0 -155
  576. package/test/sign.test.ts +0 -70
  577. package/test/transform.test.ts +0 -158
@@ -1,249 +0,0 @@
1
- import * as crypto from 'crypto'
2
- import { DOMParserImpl } from 'xmldom-ts'
3
- import type { InvoiceV1_1 } from '../../types'
4
- import { generateDocumentHash, generateSignedInvoiceXML } from '../invoice1-1'
5
- import type { SigningCredentials } from '../../types/documents/invoice-1_1.d.ts'
6
-
7
- /**
8
- * Debug Document Hash Issues
9
- *
10
- * This helps identify why MyInvois is rejecting the document hash
11
- */
12
-
13
- /**
14
- * Compare different hash calculation methods to identify the correct approach
15
- */
16
- export async function debugDocumentHash(
17
- invoiceData: InvoiceV1_1,
18
- signingCredentials: SigningCredentials,
19
- ): Promise<{
20
- signedXML: string
21
- documentHashes: {
22
- submissionHash: string // The hash sent in submission payload
23
- signatureDocDigest: string // The digest value inside the signature
24
- rawDocumentHash: string // Hash of raw signed XML
25
- minifiedDocumentHash: string // Hash of minified signed XML
26
- transformedDocumentHash: string // Hash of transformed document (used in signature)
27
- }
28
- areEqual: {
29
- submissionVsSignature: boolean
30
- submissionVsRaw: boolean
31
- submissionVsMinified: boolean
32
- submissionVsTransformed: boolean
33
- }
34
- recommendations: string[]
35
- }> {
36
- console.log('\n🔍 DEBUGGING DOCUMENT HASH VALIDATION')
37
- console.log('=====================================')
38
-
39
- // Generate the signed XML
40
- const signedXML = await generateSignedInvoiceXML(
41
- invoiceData,
42
- signingCredentials,
43
- )
44
-
45
- console.log(`\n📄 Generated signed XML (${signedXML.length} chars)`)
46
- console.log('First 200 chars:', signedXML.substring(0, 200) + '...')
47
-
48
- // 1. Calculate the hash used in submission payload (current implementation)
49
- const submissionHash = generateDocumentHash(signedXML)
50
- console.log(`\n📊 SUBMISSION HASH: ${submissionHash}`)
51
-
52
- // 2. Extract the digest value from the signature itself
53
- const parser = new DOMParserImpl()
54
- const doc = parser.parseFromString(signedXML, 'application/xml')
55
- const digestElements = doc.getElementsByTagName('ds:DigestValue')
56
- let signatureDocDigest = ''
57
-
58
- if (digestElements.length > 0) {
59
- // First DigestValue should be the document digest
60
- signatureDocDigest = digestElements[0]?.textContent || ''
61
- console.log(`📊 SIGNATURE DOC DIGEST: ${signatureDocDigest}`)
62
- } else {
63
- console.error('❌ No DigestValue elements found in signature!')
64
- }
65
-
66
- // 3. Calculate hash of raw signed XML (what we're currently sending)
67
- const rawDocumentHash = crypto
68
- .createHash('sha256')
69
- .update(signedXML, 'utf8')
70
- .digest('hex')
71
- console.log(`📊 RAW DOCUMENT HASH: ${rawDocumentHash}`)
72
-
73
- // 4. Calculate hash of minified XML (MyInvois recommendation)
74
- const minifiedXML = signedXML
75
- .replace(/>\s+</g, '><')
76
- .replace(/\s+/g, ' ')
77
- .replace(/>\s/g, '>')
78
- .replace(/\s</g, '<')
79
- .trim()
80
- const minifiedDocumentHash = crypto
81
- .createHash('sha256')
82
- .update(minifiedXML, 'utf8')
83
- .digest('hex')
84
- console.log(`📊 MINIFIED DOCUMENT HASH: ${minifiedDocumentHash}`)
85
-
86
- // 5. Calculate hash of the document as it was transformed for signature creation
87
- // Note: We can't easily recreate the exact transformation without the template,
88
- // so we'll skip this comparison for now
89
- console.log(
90
- `📊 TRANSFORMED DOCUMENT HASH: [Skipped - requires internal template access]`,
91
- )
92
-
93
- // Compare available hashes
94
- const areEqual = {
95
- submissionVsSignature:
96
- submissionHash ===
97
- Buffer.from(signatureDocDigest, 'base64').toString('hex'),
98
- submissionVsRaw: submissionHash === rawDocumentHash,
99
- submissionVsMinified: submissionHash === minifiedDocumentHash,
100
- submissionVsTransformed: false, // Skip this comparison
101
- }
102
-
103
- console.log('\n🔍 HASH COMPARISONS:')
104
- console.log(
105
- `Submission vs Signature: ${areEqual.submissionVsSignature ? '✅' : '❌'}`,
106
- )
107
- console.log(
108
- `Submission vs Raw: ${areEqual.submissionVsRaw ? '✅' : '❌'}`,
109
- )
110
- console.log(
111
- `Submission vs Minified: ${areEqual.submissionVsMinified ? '✅' : '❌'}`,
112
- )
113
- console.log(
114
- `Submission vs Transformed: ${areEqual.submissionVsTransformed ? '✅' : '❌'}`,
115
- )
116
-
117
- // Generate recommendations
118
- const recommendations: string[] = []
119
-
120
- if (!areEqual.submissionVsSignature) {
121
- recommendations.push(
122
- '❌ Submission hash does not match signature digest - this is likely the root cause!',
123
- )
124
- recommendations.push(
125
- '💡 Consider using the same hash calculation method for both signature and submission',
126
- )
127
- }
128
-
129
- if (!areEqual.submissionVsRaw) {
130
- recommendations.push(
131
- '⚠️ Current implementation calculates different hashes for signature vs submission',
132
- )
133
- }
134
-
135
- if (areEqual.submissionVsMinified && !areEqual.submissionVsRaw) {
136
- recommendations.push('💡 Try using minified XML hash for submission')
137
- }
138
-
139
- if (areEqual.submissionVsTransformed) {
140
- recommendations.push(
141
- '💡 The transformed document hash matches - this might be what MyInvois expects',
142
- )
143
- }
144
-
145
- // Check if we're using the wrong document for submission hash
146
- if (!areEqual.submissionVsSignature) {
147
- recommendations.push(
148
- '🔧 POTENTIAL FIX: Use the digest value from signature as documentHash in submission',
149
- )
150
- recommendations.push(
151
- '🔧 ALTERNATIVE: Ensure submission hash uses same canonicalization as signature creation',
152
- )
153
- }
154
-
155
- console.log('\n💡 RECOMMENDATIONS:')
156
- recommendations.forEach(rec => console.log(` ${rec}`))
157
-
158
- return {
159
- signedXML,
160
- documentHashes: {
161
- submissionHash,
162
- signatureDocDigest,
163
- rawDocumentHash,
164
- minifiedDocumentHash,
165
- transformedDocumentHash: '',
166
- },
167
- areEqual,
168
- recommendations,
169
- }
170
- }
171
-
172
- /**
173
- * Test different approaches to calculate the submission hash
174
- */
175
- export async function testSubmissionHashMethods(
176
- invoiceData: InvoiceV1_1,
177
- signingCredentials: SigningCredentials,
178
- ): Promise<{
179
- methods: {
180
- current: string // Current implementation
181
- signatureDigest: string // Use digest from signature
182
- canonicalized: string // Use same canonicalization as signature
183
- transformed: string // Use transformed document
184
- }
185
- recommendations: string[]
186
- }> {
187
- console.log('\n🧪 TESTING SUBMISSION HASH METHODS')
188
- console.log('==================================')
189
-
190
- // Generate signed XML
191
- const signedXML = await generateSignedInvoiceXML(
192
- invoiceData,
193
- signingCredentials,
194
- )
195
-
196
- // Method 1: Current implementation (direct SHA256 of signed XML)
197
- const currentHash = generateDocumentHash(signedXML)
198
- console.log(`Method 1 - Current: ${currentHash}`)
199
-
200
- // Method 2: Extract digest from signature
201
- const parser = new DOMParserImpl()
202
- const doc = parser.parseFromString(signedXML, 'application/xml')
203
- const digestElements = doc.getElementsByTagName('ds:DigestValue')
204
- const signatureDigest = digestElements[0]?.textContent || ''
205
- const signatureDigestHex = Buffer.from(signatureDigest, 'base64').toString(
206
- 'hex',
207
- )
208
- console.log(`Method 2 - Signature Digest: ${signatureDigestHex}`)
209
-
210
- // Method 3: Use same canonicalization as signature creation
211
- // Note: Skip this method as it requires internal template access
212
- console.log(`Method 3 - Canonicalized: [Skipped - requires internal access]`)
213
-
214
- // Method 4: Hash the transformed document directly
215
- // Note: Skip this method as it requires internal template access
216
- console.log(`Method 4 - Transformed: [Skipped - requires internal access]`)
217
-
218
- const methods = {
219
- current: currentHash,
220
- signatureDigest: signatureDigestHex,
221
- canonicalized: '', // Skipped
222
- transformed: '', // Skipped
223
- }
224
-
225
- const recommendations: string[] = []
226
-
227
- if (methods.current !== methods.signatureDigest) {
228
- recommendations.push(
229
- '🔧 PRIMARY RECOMMENDATION: Use signature digest as submission hash',
230
- )
231
- recommendations.push(
232
- ' Update generateDocumentHash() to extract digest from signed XML',
233
- )
234
- }
235
-
236
- if (methods.current !== methods.canonicalized) {
237
- recommendations.push(
238
- '🔧 ALTERNATIVE: Use canonicalized document hash for submission',
239
- )
240
- }
241
-
242
- console.log('\n💡 RECOMMENDATIONS:')
243
- recommendations.forEach(rec => console.log(` ${rec}`))
244
-
245
- return {
246
- methods,
247
- recommendations,
248
- }
249
- }
@@ -1,355 +0,0 @@
1
- import { DOMParserImpl } from 'xmldom-ts'
2
- import {
3
- extractCertificateInfo,
4
- generateSignedInvoiceXML,
5
- generateUBLXMLTemplate,
6
- validateKeyPair,
7
- } from '../invoice1-1'
8
- import type {
9
- InvoiceV1_1,
10
- SigningCredentials,
11
- } from '../../types/documents/invoice-1_1.d.ts'
12
- import { transformXmlInvoice } from '../signature/transform'
13
- import {
14
- canonicalizeAndHashDocument,
15
- canonicalizeAndHashDocumentWithC14N11Fallback,
16
- } from '../signature/canonicalize'
17
-
18
- /**
19
- * Tests both canonicalization algorithms and compares their output
20
- * This can help determine if the algorithm difference affects signature validation
21
- * @param xmlDocument - The XML document string to test
22
- * @returns Object with canonicalization results and comparison
23
- */
24
- export const testCanonicalizationAlgorithms = async (
25
- xmlDocument: string,
26
- ): Promise<{
27
- exclusiveC14N: { success: boolean; digest?: string; error?: string }
28
- c14n11Fallback: { success: boolean; digest?: string; error?: string }
29
- areEqual: boolean
30
- }> => {
31
- const parser = new DOMParserImpl()
32
- const doc = parser.parseFromString(xmlDocument, 'application/xml')
33
-
34
- const results = {
35
- exclusiveC14N: { success: false } as any,
36
- c14n11Fallback: { success: false } as any,
37
- areEqual: false,
38
- }
39
-
40
- // Test Exclusive C14N
41
- try {
42
- const exclusiveDigest = await canonicalizeAndHashDocument(
43
- doc,
44
- 'http://www.w3.org/2001/10/xml-exc-c14n#',
45
- )
46
- results.exclusiveC14N = { success: true, digest: exclusiveDigest }
47
- } catch (error: any) {
48
- results.exclusiveC14N = { success: false, error: error.message }
49
- }
50
-
51
- // Test C14N 1.1 fallback
52
- try {
53
- const c14n11Digest =
54
- await canonicalizeAndHashDocumentWithC14N11Fallback(doc)
55
- results.c14n11Fallback = { success: true, digest: c14n11Digest }
56
- } catch (error: any) {
57
- results.c14n11Fallback = { success: false, error: error.message }
58
- }
59
-
60
- // Compare results
61
- if (results.exclusiveC14N.success && results.c14n11Fallback.success) {
62
- results.areEqual =
63
- results.exclusiveC14N.digest === results.c14n11Fallback.digest
64
- }
65
-
66
- return results
67
- }
68
-
69
- /**
70
- * Simple validation function that checks basic XML structure requirements
71
- */
72
- export function validateXMLStructure(xmlString: string): {
73
- isValid: boolean
74
- errors: string[]
75
- warnings: string[]
76
- } {
77
- const errors: string[] = []
78
- const warnings: string[] = []
79
-
80
- try {
81
- const parser = new DOMParserImpl()
82
- const doc = parser.parseFromString(xmlString, 'application/xml')
83
-
84
- // Check for parser errors
85
- const parserErrors = doc.getElementsByTagName('parsererror')
86
- if (parserErrors.length > 0) {
87
- errors.push('XML parsing failed')
88
- return { isValid: false, errors, warnings }
89
- }
90
-
91
- // Check required elements
92
- const requiredElements = [
93
- 'Invoice',
94
- 'UBLExtensions',
95
- 'cbc:ID',
96
- 'cbc:IssueDate',
97
- 'cbc:IssueTime',
98
- 'cbc:InvoiceTypeCode',
99
- 'ds:Signature',
100
- 'ds:SignatureValue',
101
- 'ds:X509Certificate',
102
- ]
103
-
104
- for (const element of requiredElements) {
105
- const elements = element.includes(':')
106
- ? doc.getElementsByTagName(element)
107
- : doc.getElementsByTagName(element)
108
-
109
- if (elements.length === 0) {
110
- errors.push(`Missing required element: ${element}`)
111
- }
112
- }
113
-
114
- // Check namespace declarations
115
- const expectedNamespaces = [
116
- 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2',
117
- 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2',
118
- 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2',
119
- ]
120
-
121
- for (const ns of expectedNamespaces) {
122
- if (!xmlString.includes(ns)) {
123
- warnings.push(`Missing namespace declaration: ${ns}`)
124
- }
125
- }
126
- } catch (error: any) {
127
- errors.push(`XML validation error: ${error.message}`)
128
- }
129
-
130
- return {
131
- isValid: errors.length === 0,
132
- errors,
133
- warnings,
134
- }
135
- }
136
-
137
- /**
138
- * Comprehensive debugging function to help identify issues with generated XML
139
- * This validates the structure against MyInvois requirements and provides detailed feedback
140
- */
141
- export async function debugSignedInvoiceXML(
142
- invoiceInfo: InvoiceV1_1,
143
- signingCredentials: SigningCredentials,
144
- ): Promise<{
145
- success: boolean
146
- signedXML?: string
147
- validationResults: {
148
- xmlStructure: { valid: boolean; errors: string[] }
149
- signatureElements: { valid: boolean; errors: string[] }
150
- digestValues: { valid: boolean; errors: string[] }
151
- certificateInfo: { valid: boolean; errors: string[] }
152
- canonicalizationTest: any
153
- }
154
- stepByStepResults: {
155
- step1_template: { success: boolean; error?: string }
156
- step2_transform: { success: boolean; error?: string }
157
- step3_docDigest: { success: boolean; digest?: string; error?: string }
158
- step4_signature: { success: boolean; signature?: string; error?: string }
159
- step5_certDigest: { success: boolean; digest?: string; error?: string }
160
- step6_signedProps: { success: boolean; error?: string }
161
- step7_propsDigest: { success: boolean; digest?: string; error?: string }
162
- step8_finalDoc: { success: boolean; error?: string }
163
- }
164
- }> {
165
- const stepResults = {
166
- step1_template: { success: false } as any,
167
- step2_transform: { success: false } as any,
168
- step3_docDigest: { success: false } as any,
169
- step4_signature: { success: false } as any,
170
- step5_certDigest: { success: false } as any,
171
- step6_signedProps: { success: false } as any,
172
- step7_propsDigest: { success: false } as any,
173
- step8_finalDoc: { success: false } as any,
174
- }
175
-
176
- const validationResults = {
177
- xmlStructure: { valid: false, errors: [] as string[] },
178
- signatureElements: { valid: false, errors: [] as string[] },
179
- digestValues: { valid: false, errors: [] as string[] },
180
- certificateInfo: { valid: false, errors: [] as string[] },
181
- canonicalizationTest: null as any,
182
- }
183
-
184
- let signedXML: string | undefined
185
-
186
- try {
187
- // Step 1: Generate template
188
- try {
189
- const xmlTemplate = generateUBLXMLTemplate(invoiceInfo)
190
- stepResults.step1_template = { success: true }
191
-
192
- // Validate XML structure
193
- const parser = new DOMParserImpl()
194
- const doc = parser.parseFromString(xmlTemplate, 'application/xml')
195
- const parserErrors = doc.getElementsByTagName('parsererror')
196
- if (parserErrors.length > 0) {
197
- validationResults.xmlStructure.errors.push(
198
- 'XML template parsing failed',
199
- )
200
- } else {
201
- validationResults.xmlStructure.valid = true
202
- }
203
- } catch (error: any) {
204
- stepResults.step1_template = { success: false, error: error.message }
205
- validationResults.xmlStructure.errors.push(
206
- `Template generation failed: ${error.message}`,
207
- )
208
- }
209
-
210
- // Step 2: Transform
211
- try {
212
- const xmlTemplate = generateUBLXMLTemplate(invoiceInfo)
213
- const transformedXml = transformXmlInvoice(xmlTemplate)
214
- stepResults.step2_transform = { success: true }
215
-
216
- // Check if transformation worked correctly
217
- if (transformedXml.includes('UBLExtensions')) {
218
- validationResults.xmlStructure.errors.push(
219
- 'UBLExtensions not properly removed in transformation',
220
- )
221
- }
222
- if (transformedXml.includes('<cac:Signature>')) {
223
- validationResults.xmlStructure.errors.push(
224
- 'cac:Signature elements not properly removed in transformation',
225
- )
226
- }
227
- } catch (error: any) {
228
- stepResults.step2_transform = { success: false, error: error.message }
229
- }
230
-
231
- // Test canonicalization
232
- try {
233
- const xmlTemplate = generateUBLXMLTemplate(invoiceInfo)
234
- validationResults.canonicalizationTest =
235
- await testCanonicalizationAlgorithms(xmlTemplate)
236
- } catch (error: any) {
237
- validationResults.canonicalizationTest = { error: error.message }
238
- }
239
-
240
- // Continue with full signing process
241
- try {
242
- signedXML = await generateSignedInvoiceXML(
243
- invoiceInfo,
244
- signingCredentials,
245
- )
246
-
247
- // Parse the final signed XML for validation
248
- const parser = new DOMParserImpl()
249
- const finalDoc = parser.parseFromString(signedXML, 'application/xml')
250
-
251
- // Check signature elements are populated
252
- const signatureValue =
253
- finalDoc.getElementsByTagName('ds:SignatureValue')[0]
254
- const x509Certificate =
255
- finalDoc.getElementsByTagName('ds:X509Certificate')[0]
256
- const digestValues = finalDoc.getElementsByTagName('ds:DigestValue')
257
-
258
- if (!signatureValue || !signatureValue.textContent?.trim()) {
259
- validationResults.signatureElements.errors.push(
260
- 'SignatureValue is empty',
261
- )
262
- }
263
-
264
- if (!x509Certificate || !x509Certificate.textContent?.trim()) {
265
- validationResults.signatureElements.errors.push(
266
- 'X509Certificate is empty',
267
- )
268
- }
269
-
270
- if (digestValues.length < 2) {
271
- validationResults.digestValues.errors.push(
272
- 'Missing digest values (expected at least 2)',
273
- )
274
- } else {
275
- let emptyDigests = 0
276
- for (let i = 0; i < digestValues.length; i++) {
277
- const digestElement = digestValues[i]
278
- if (!digestElement || !digestElement.textContent?.trim()) {
279
- emptyDigests++
280
- }
281
- }
282
- if (emptyDigests > 0) {
283
- validationResults.digestValues.errors.push(
284
- `${emptyDigests} digest values are empty`,
285
- )
286
- }
287
- }
288
-
289
- // Validate certificate info
290
- try {
291
- const certInfo = extractCertificateInfo(
292
- signingCredentials.certificatePem,
293
- )
294
- const keyPairValid = validateKeyPair(
295
- signingCredentials.certificatePem,
296
- signingCredentials.privateKeyPem,
297
- )
298
-
299
- if (!keyPairValid) {
300
- validationResults.certificateInfo.errors.push(
301
- 'Certificate and private key do not match',
302
- )
303
- }
304
-
305
- if (!certInfo.issuerName || !certInfo.serialNumber) {
306
- validationResults.certificateInfo.errors.push(
307
- 'Certificate info extraction failed',
308
- )
309
- }
310
-
311
- if (validationResults.certificateInfo.errors.length === 0) {
312
- validationResults.certificateInfo.valid = true
313
- }
314
- } catch (error: any) {
315
- validationResults.certificateInfo.errors.push(
316
- `Certificate validation failed: ${error.message}`,
317
- )
318
- }
319
-
320
- // Set validation flags
321
- if (validationResults.signatureElements.errors.length === 0) {
322
- validationResults.signatureElements.valid = true
323
- }
324
- if (validationResults.digestValues.errors.length === 0) {
325
- validationResults.digestValues.valid = true
326
- }
327
-
328
- // Mark individual steps as successful if we got here
329
- stepResults.step3_docDigest = { success: true }
330
- stepResults.step4_signature = { success: true }
331
- stepResults.step5_certDigest = { success: true }
332
- stepResults.step6_signedProps = { success: true }
333
- stepResults.step7_propsDigest = { success: true }
334
- stepResults.step8_finalDoc = { success: true }
335
- } catch (error: any) {
336
- console.error('Error during signing process:', error)
337
- stepResults.step8_finalDoc = { success: false, error: error.message }
338
- }
339
- } catch (error: any) {
340
- console.error('Fatal error in debugging:', error)
341
- }
342
-
343
- const allValid =
344
- validationResults.xmlStructure.valid &&
345
- validationResults.signatureElements.valid &&
346
- validationResults.digestValues.valid &&
347
- validationResults.certificateInfo.valid
348
-
349
- return {
350
- success: allValid,
351
- signedXML,
352
- validationResults,
353
- stepByStepResults: stepResults,
354
- }
355
- }