@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
@@ -0,0 +1,405 @@
1
+ import crypto, { X509Certificate } from "crypto";
2
+
3
+ //#region src/utils/document.ts
4
+ /**
5
+ * MyInvois v1.1 Document Generation and Signing Utilities
6
+ * Strictly follows: https://sdk.myinvois.hasil.gov.my/documents/invoice-v1-1
7
+ * JSON Signature Guide: https://sdk.myinvois.hasil.gov.my/signature-creation-json/
8
+ */
9
+ /**
10
+ * Helper function to recursively sort object keys for JSON canonicalization
11
+ */
12
+ function sortObjectKeys(obj) {
13
+ if (obj === null || typeof obj !== "object") return obj;
14
+ if (Array.isArray(obj)) return obj.map(sortObjectKeys);
15
+ const sortedObj = {};
16
+ const keys = Object.keys(obj).sort();
17
+ for (const key of keys) sortedObj[key] = sortObjectKeys(obj[key]);
18
+ return sortedObj;
19
+ }
20
+ /**
21
+ * Enhanced canonicalization following MyInvois specification exactly
22
+ * Key changes: ensure consistent ordering and formatting
23
+ */
24
+ const canonicalizeJSON = (obj) => {
25
+ const sortedObj = sortObjectKeys(obj);
26
+ return JSON.stringify(sortedObj, null, 0);
27
+ };
28
+ /**
29
+ * Generates a clean invoice object following MyInvois v1.1 specification exactly
30
+ * This is the base invoice structure WITHOUT signature elements (for hash calculation)
31
+ *
32
+ * Key requirements from working documents:
33
+ * - All mandatory fields must be present
34
+ * - Many optional fields must be present even if empty
35
+ * - Specific field ordering and structure
36
+ * - Correct listID values (e.g., "3166-1" not "ISO3166-1")
37
+ */
38
+ const generateCleanInvoiceObject = (invoice) => {
39
+ return {
40
+ ID: [{ _: invoice.eInvoiceCodeOrNumber }],
41
+ IssueDate: [{ _: invoice.eInvoiceDate }],
42
+ IssueTime: [{ _: invoice.eInvoiceTime }],
43
+ InvoiceTypeCode: [{
44
+ _: invoice.eInvoiceTypeCode,
45
+ listVersionID: invoice.eInvoiceVersion || "1.1"
46
+ }],
47
+ DocumentCurrencyCode: [{ _: invoice.invoiceCurrencyCode }],
48
+ AccountingSupplierParty: [{ Party: [{
49
+ IndustryClassificationCode: [{
50
+ _: invoice.supplier.industryClassificationCode,
51
+ name: invoice.supplier.industryClassificationDescription
52
+ }],
53
+ PartyIdentification: [{ ID: [{
54
+ _: invoice.supplier.tin,
55
+ schemeID: "TIN"
56
+ }] }, { ID: [{
57
+ _: invoice.supplier.registrationNumber,
58
+ schemeID: invoice.supplier.registrationType || "NRIC"
59
+ }] }],
60
+ PostalAddress: [{
61
+ CityName: [{ _: invoice.supplier.address.cityName }],
62
+ CountrySubentityCode: [{ _: invoice.supplier.address.state }],
63
+ AddressLine: [{ Line: [{ _: invoice.supplier.address.addressLine0 }] }],
64
+ Country: [{ IdentificationCode: [{
65
+ _: invoice.supplier.address.country || "MYS",
66
+ listID: "3166-1",
67
+ listAgencyID: "ISO"
68
+ }] }]
69
+ }],
70
+ PartyLegalEntity: [{ RegistrationName: [{ _: invoice.supplier.name }] }],
71
+ Contact: [{ Telephone: [{ _: invoice.supplier.contactNumber || "" }] }]
72
+ }] }],
73
+ AccountingCustomerParty: [{ Party: [{
74
+ PartyIdentification: [
75
+ { ID: [{
76
+ _: invoice.buyer.tin,
77
+ schemeID: "TIN"
78
+ }] },
79
+ { ID: [{
80
+ _: invoice.buyer.registrationNumber,
81
+ schemeID: invoice.buyer.registrationType || "NRIC"
82
+ }] },
83
+ { ID: [{
84
+ _: invoice.buyer.sstRegistrationNumber || "NA",
85
+ schemeID: "SST"
86
+ }] }
87
+ ],
88
+ PostalAddress: [{
89
+ CityName: [{ _: invoice.buyer.address.cityName }],
90
+ CountrySubentityCode: [{ _: invoice.buyer.address.state }],
91
+ AddressLine: [{ Line: [{ _: invoice.buyer.address.addressLine0 }] }],
92
+ Country: [{ IdentificationCode: [{
93
+ _: invoice.buyer.address.country || "MYS",
94
+ listID: "3166-1",
95
+ listAgencyID: "ISO"
96
+ }] }]
97
+ }],
98
+ PartyLegalEntity: [{ RegistrationName: [{ _: invoice.buyer.name }] }],
99
+ Contact: [{ Telephone: [{ _: invoice.buyer.contactNumber || "" }] }]
100
+ }] }],
101
+ TaxTotal: [{
102
+ TaxAmount: [{
103
+ _: invoice.taxTotal.taxAmount,
104
+ currencyID: invoice.invoiceCurrencyCode
105
+ }],
106
+ TaxSubtotal: [{
107
+ TaxableAmount: [{
108
+ _: invoice.legalMonetaryTotal.taxExclusiveAmount,
109
+ currencyID: invoice.invoiceCurrencyCode
110
+ }],
111
+ TaxAmount: [{
112
+ _: invoice.taxTotal.taxAmount,
113
+ currencyID: invoice.invoiceCurrencyCode
114
+ }],
115
+ TaxCategory: [{
116
+ ID: [{ _: invoice.invoiceLineItems[0]?.taxType || "01" }],
117
+ TaxScheme: [{ ID: [{
118
+ _: "OTH",
119
+ schemeAgencyID: "6",
120
+ schemeID: "UN/ECE 5153"
121
+ }] }]
122
+ }]
123
+ }]
124
+ }],
125
+ LegalMonetaryTotal: [{
126
+ LineExtensionAmount: [{
127
+ _: invoice.legalMonetaryTotal.taxExclusiveAmount,
128
+ currencyID: invoice.invoiceCurrencyCode
129
+ }],
130
+ TaxExclusiveAmount: [{
131
+ _: invoice.legalMonetaryTotal.taxExclusiveAmount,
132
+ currencyID: invoice.invoiceCurrencyCode
133
+ }],
134
+ TaxInclusiveAmount: [{
135
+ _: invoice.legalMonetaryTotal.taxInclusiveAmount,
136
+ currencyID: invoice.invoiceCurrencyCode
137
+ }],
138
+ PayableAmount: [{
139
+ _: invoice.legalMonetaryTotal.payableAmount,
140
+ currencyID: invoice.invoiceCurrencyCode
141
+ }]
142
+ }],
143
+ InvoiceLine: invoice.invoiceLineItems.map((item, index) => ({
144
+ ID: [{ _: (index + 1).toString() }],
145
+ Item: [{
146
+ CommodityClassification: [{ ItemClassificationCode: [{
147
+ _: item.itemClassificationCode,
148
+ listID: "CLASS"
149
+ }] }],
150
+ Description: [{ _: item.itemDescription }]
151
+ }],
152
+ ItemPriceExtension: [{ Amount: [{
153
+ _: item.totalTaxableAmountPerLine,
154
+ currencyID: invoice.invoiceCurrencyCode
155
+ }] }],
156
+ LineExtensionAmount: [{
157
+ _: item.totalTaxableAmountPerLine,
158
+ currencyID: invoice.invoiceCurrencyCode
159
+ }],
160
+ Price: [{ PriceAmount: [{
161
+ _: item.unitPrice,
162
+ currencyID: invoice.invoiceCurrencyCode
163
+ }] }],
164
+ TaxTotal: [{
165
+ TaxAmount: [{
166
+ _: item.taxAmount,
167
+ currencyID: invoice.invoiceCurrencyCode
168
+ }],
169
+ TaxSubtotal: [{
170
+ TaxableAmount: [{
171
+ _: item.totalTaxableAmountPerLine,
172
+ currencyID: invoice.invoiceCurrencyCode
173
+ }],
174
+ TaxAmount: [{
175
+ _: item.taxAmount,
176
+ currencyID: invoice.invoiceCurrencyCode
177
+ }],
178
+ TaxCategory: [{
179
+ ID: [{ _: item.taxType }],
180
+ TaxScheme: [{ ID: [{
181
+ _: "OTH",
182
+ schemeAgencyID: "6",
183
+ schemeID: "UN/ECE 5153"
184
+ }] }]
185
+ }]
186
+ }]
187
+ }]
188
+ })),
189
+ TaxExchangeRate: invoice.currencyExchangeRate ? [{
190
+ SourceCurrencyCode: [{ _: invoice.invoiceCurrencyCode }],
191
+ TargetCurrencyCode: [{ _: "MYR" }],
192
+ CalculationRate: [{ _: invoice.currencyExchangeRate }]
193
+ }] : void 0
194
+ };
195
+ };
196
+ /**
197
+ * Generates the complete UBL document structure with namespace declarations
198
+ */
199
+ const generateCleanUBLDocument = (invoices) => {
200
+ return {
201
+ _D: "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
202
+ _A: "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
203
+ _B: "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
204
+ Invoice: invoices.map(generateCleanInvoiceObject)
205
+ };
206
+ };
207
+ /**
208
+ * Step 2: Calculate Document Digest
209
+ * FIXED: Remove UBLExtensions and Signature before hashing (DS322)
210
+ * Based on working implementation pattern
211
+ */
212
+ const calculateDocumentDigest = (invoices) => {
213
+ const cleanDocument = generateCleanUBLDocument(invoices);
214
+ const documentForHashing = JSON.parse(JSON.stringify(cleanDocument));
215
+ if (documentForHashing.Invoice && Array.isArray(documentForHashing.Invoice)) documentForHashing.Invoice.forEach((invoice) => {
216
+ delete invoice.UBLExtensions;
217
+ delete invoice.Signature;
218
+ });
219
+ const documentString = JSON.stringify(documentForHashing);
220
+ const hash = crypto.createHash("sha256");
221
+ hash.update(documentString, "utf8");
222
+ return hash.digest("base64");
223
+ };
224
+ /**
225
+ * Step 4: Calculate Certificate Digest
226
+ * Enhanced to handle certificate content properly
227
+ */
228
+ const calculateCertificateDigest = (certificatePem) => {
229
+ const certificateContent = certificatePem.replace(/-----BEGIN CERTIFICATE-----/g, "").replace(/-----END CERTIFICATE-----/g, "").replace(/\s+/g, "");
230
+ const certificateBinary = Buffer.from(certificateContent, "base64");
231
+ const hash = crypto.createHash("sha256");
232
+ hash.update(certificateBinary);
233
+ return hash.digest("base64");
234
+ };
235
+ /**
236
+ * Enhanced certificate info extraction with better error handling
237
+ * FIXED: Normalize issuer name format to match MyInvois expectations (DS326)
238
+ */
239
+ const extractCertificateInfo = (certificatePem) => {
240
+ try {
241
+ const cert = new X509Certificate(certificatePem);
242
+ const serialNumberHex = cert.serialNumber;
243
+ const normalizeDistinguishedName = (dn) => {
244
+ const normalized = dn.split("\n").map((line) => line.trim()).filter((line) => line.length > 0).join(", ");
245
+ return normalized.replace(/\s*=\s*/g, "=").replace(/,\s+/g, ", ").replace(/\r/g, "").replace(/\s{2,}/g, " ").trim();
246
+ };
247
+ const formatSerialNumber = (serialHex) => {
248
+ const decimal = BigInt("0x" + serialHex).toString();
249
+ return decimal;
250
+ };
251
+ return {
252
+ issuerName: normalizeDistinguishedName(cert.issuer),
253
+ serialNumber: formatSerialNumber(serialNumberHex),
254
+ subjectName: normalizeDistinguishedName(cert.subject)
255
+ };
256
+ } catch (error) {
257
+ throw new Error(`Failed to extract certificate info: ${error instanceof Error ? error.message : String(error)}`);
258
+ }
259
+ };
260
+ /**
261
+ * Step 5: Create SignedProperties with enhanced structure
262
+ * FIXED: Simplified structure to match MyInvois expectations (DS320)
263
+ * Following MyInvois JSON signature specification exactly
264
+ */
265
+ const createSignedProperties = (certificateDigest, signingTime, issuerName, serialNumber) => {
266
+ return { SignedProperties: [{
267
+ Id: "id-xades-signed-props",
268
+ SignedSignatureProperties: [{
269
+ SigningTime: [{ _: signingTime }],
270
+ SigningCertificate: [{ Cert: [{
271
+ CertDigest: [{
272
+ DigestMethod: [{ Algorithm: "http://www.w3.org/2001/04/xmlenc#sha256" }],
273
+ DigestValue: [{ _: certificateDigest }]
274
+ }],
275
+ IssuerSerial: [{
276
+ X509IssuerName: [{ _: issuerName }],
277
+ X509SerialNumber: [{ _: serialNumber }]
278
+ }]
279
+ }] }]
280
+ }]
281
+ }] };
282
+ };
283
+ /**
284
+ * Step 6: Calculate SignedProperties Digest
285
+ * FIXED: Add Target wrapper and use direct JSON stringify (DS320)
286
+ * Based on working implementation pattern
287
+ */
288
+ const calculateSignedPropertiesDigest = (signedProperties) => {
289
+ const signedPropertiesWithTarget = {
290
+ Target: "signature",
291
+ SignedProperties: signedProperties.SignedProperties
292
+ };
293
+ const signedPropertiesString = JSON.stringify(signedPropertiesWithTarget);
294
+ const hash = crypto.createHash("sha256");
295
+ hash.update(signedPropertiesString, "utf8");
296
+ return hash.digest("base64");
297
+ };
298
+ /**
299
+ * Step 3: Create SignedInfo and calculate signature
300
+ * Enhanced with better structure and signature generation
301
+ */
302
+ const createSignedInfoAndSign = (docDigest, propsDigest, privateKeyPem) => {
303
+ const signedInfo = {
304
+ CanonicalizationMethod: [{
305
+ _: "",
306
+ Algorithm: "http://www.w3.org/2006/12/xml-c14n11"
307
+ }],
308
+ SignatureMethod: [{
309
+ _: "",
310
+ Algorithm: "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
311
+ }],
312
+ Reference: [{
313
+ Id: "id-doc-signed-data",
314
+ Type: "",
315
+ URI: "",
316
+ DigestMethod: [{
317
+ _: "",
318
+ Algorithm: "http://www.w3.org/2001/04/xmlenc#sha256"
319
+ }],
320
+ DigestValue: [{ _: docDigest }]
321
+ }, {
322
+ Id: "id-xades-signed-props",
323
+ Type: "http://uri.etsi.org/01903/v1.3.2#SignedProperties",
324
+ URI: "#id-xades-signed-props",
325
+ DigestMethod: [{
326
+ _: "",
327
+ Algorithm: "http://www.w3.org/2001/04/xmlenc#sha256"
328
+ }],
329
+ DigestValue: [{ _: propsDigest }]
330
+ }]
331
+ };
332
+ const signedInfoString = JSON.stringify(signedInfo);
333
+ try {
334
+ const signer = crypto.createSign("RSA-SHA256");
335
+ signer.update(signedInfoString, "utf8");
336
+ const signatureValue = signer.sign(privateKeyPem, "base64");
337
+ return {
338
+ signedInfo,
339
+ signatureValue
340
+ };
341
+ } catch (error) {
342
+ throw new Error(`Signature generation failed: ${error instanceof Error ? error.message : String(error)}`);
343
+ }
344
+ };
345
+ /**
346
+ * Complete document generation with signatures
347
+ * Follows the complete MyInvois JSON signature creation process (Steps 1-7)
348
+ */
349
+ const generateCompleteDocument = (invoices, signingCredentials) => {
350
+ try {
351
+ const docDigest = calculateDocumentDigest(invoices);
352
+ const signingTime = (/* @__PURE__ */ new Date()).toISOString();
353
+ const certInfo = extractCertificateInfo(signingCredentials.certificatePem);
354
+ const certificateDigest = calculateCertificateDigest(signingCredentials.certificatePem);
355
+ const signedProperties = createSignedProperties(certificateDigest, signingTime, certInfo.issuerName, certInfo.serialNumber);
356
+ const propsDigest = calculateSignedPropertiesDigest(signedProperties);
357
+ const { signedInfo, signatureValue } = createSignedInfoAndSign(docDigest, propsDigest, signingCredentials.privateKeyPem);
358
+ const certificate = signingCredentials.certificatePem.replace(/-----BEGIN CERTIFICATE-----/g, "").replace(/-----END CERTIFICATE-----/g, "").replace(/\s+/g, "");
359
+ const signedInvoices = invoices.map((invoice) => {
360
+ const cleanInvoice = generateCleanInvoiceObject(invoice);
361
+ return {
362
+ ...cleanInvoice,
363
+ UBLExtensions: [{ UBLExtension: [{
364
+ ExtensionURI: [{ _: "urn:oasis:names:specification:ubl:dsig:enveloped:xades" }],
365
+ ExtensionContent: [{ UBLDocumentSignatures: [{ SignatureInformation: [{
366
+ ID: [{ _: "urn:oasis:names:specification:ubl:signature:1" }],
367
+ ReferencedSignatureID: [{ _: "urn:oasis:names:specification:ubl:signature:Invoice" }],
368
+ Signature: [{
369
+ Id: "signature",
370
+ Object: [{ QualifyingProperties: [{
371
+ Target: "signature",
372
+ SignedProperties: signedProperties.SignedProperties
373
+ }] }],
374
+ KeyInfo: [{ X509Data: [{
375
+ X509Certificate: [{ _: certificate }],
376
+ X509SubjectName: [{ _: certInfo.subjectName }],
377
+ X509IssuerSerial: [{
378
+ X509IssuerName: [{ _: certInfo.issuerName }],
379
+ X509SerialNumber: [{ _: certInfo.serialNumber }]
380
+ }]
381
+ }] }],
382
+ SignatureValue: [{ _: signatureValue }],
383
+ SignedInfo: [signedInfo]
384
+ }]
385
+ }] }] }]
386
+ }] }],
387
+ Signature: [{
388
+ ID: [{ _: "urn:oasis:names:specification:ubl:signature:Invoice" }],
389
+ SignatureMethod: [{ _: "urn:oasis:names:specification:ubl:dsig:enveloped:xades" }]
390
+ }]
391
+ };
392
+ });
393
+ return {
394
+ _D: "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
395
+ _A: "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
396
+ _B: "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
397
+ Invoice: signedInvoices
398
+ };
399
+ } catch (error) {
400
+ throw new Error(`Document generation failed: ${error instanceof Error ? error.message : String(error)}`);
401
+ }
402
+ };
403
+
404
+ //#endregion
405
+ export { calculateCertificateDigest, calculateDocumentDigest, calculateSignedPropertiesDigest, canonicalizeJSON, createSignedInfoAndSign, createSignedProperties, extractCertificateInfo, generateCleanInvoiceObject, generateCleanUBLDocument, generateCompleteDocument, sortObjectKeys };