@ripwords/myinvois-client 0.0.10 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. package/bun.lock +89 -132
  2. package/dist/0X-C4IRh_fJ.d.ts +211 -0
  3. package/dist/0X-C4IRh_fJ.d.ts.map +1 -0
  4. package/dist/0X-Yw7mZEro.d.cts +211 -0
  5. package/dist/0X-Yw7mZEro.d.cts.map +1 -0
  6. package/dist/1X-Brnls9Jh.d.ts +112 -0
  7. package/dist/1X-Brnls9Jh.d.ts.map +1 -0
  8. package/dist/1X-BwpSoT3o.d.cts +20 -0
  9. package/dist/1X-BwpSoT3o.d.cts.map +1 -0
  10. package/dist/1X-C-_KHV-Q.d.ts +20 -0
  11. package/dist/1X-C-_KHV-Q.d.ts.map +1 -0
  12. package/dist/1X-D_aUVsuM.d.cts +112 -0
  13. package/dist/1X-D_aUVsuM.d.cts.map +1 -0
  14. package/dist/2X-Bb6elyzV.d.cts +40 -0
  15. package/dist/2X-Bb6elyzV.d.cts.map +1 -0
  16. package/dist/2X-DkS1BoE5.d.ts +40 -0
  17. package/dist/2X-DkS1BoE5.d.ts.map +1 -0
  18. package/dist/2X-UdQcQW24.d.ts +140 -0
  19. package/dist/2X-UdQcQW24.d.ts.map +1 -0
  20. package/dist/2X-hClUyw26.d.cts +140 -0
  21. package/dist/2X-hClUyw26.d.cts.map +1 -0
  22. package/dist/3X-C7VFD-n-.d.cts +21 -0
  23. package/dist/3X-C7VFD-n-.d.cts.map +1 -0
  24. package/dist/3X-CLMESDvz.d.cts +62 -0
  25. package/dist/3X-CLMESDvz.d.cts.map +1 -0
  26. package/dist/3X-DFI-4RQQ.d.ts +21 -0
  27. package/dist/3X-DFI-4RQQ.d.ts.map +1 -0
  28. package/dist/3X-DVDyspgb.d.ts +62 -0
  29. package/dist/3X-DVDyspgb.d.ts.map +1 -0
  30. package/dist/4X-CIJ2JJ2w.d.ts +31 -0
  31. package/dist/4X-CIJ2JJ2w.d.ts.map +1 -0
  32. package/dist/4X-CUR8jlaZ.d.ts +265 -0
  33. package/dist/4X-CUR8jlaZ.d.ts.map +1 -0
  34. package/dist/4X-CvScPJTf.d.cts +265 -0
  35. package/dist/4X-CvScPJTf.d.cts.map +1 -0
  36. package/dist/4X-DIfvpU6V.d.cts +31 -0
  37. package/dist/4X-DIfvpU6V.d.cts.map +1 -0
  38. package/dist/5X-BOUxhadJ.d.cts +22 -0
  39. package/dist/5X-BOUxhadJ.d.cts.map +1 -0
  40. package/dist/5X-C6db432h.d.ts +77 -0
  41. package/dist/5X-C6db432h.d.ts.map +1 -0
  42. package/dist/5X-COsZHUaQ.d.ts +22 -0
  43. package/dist/5X-COsZHUaQ.d.ts.map +1 -0
  44. package/dist/5X-CkLu7Vyd.d.cts +77 -0
  45. package/dist/5X-CkLu7Vyd.d.cts.map +1 -0
  46. package/dist/6X-C_fFIcJC.d.ts +105 -0
  47. package/dist/6X-C_fFIcJC.d.ts.map +1 -0
  48. package/dist/6X-ClZDKOTC.d.ts +16 -0
  49. package/dist/6X-ClZDKOTC.d.ts.map +1 -0
  50. package/dist/6X-DE7RJeV6.d.cts +16 -0
  51. package/dist/6X-DE7RJeV6.d.cts.map +1 -0
  52. package/dist/6X-Mf32k1d0.d.cts +105 -0
  53. package/dist/6X-Mf32k1d0.d.cts.map +1 -0
  54. package/dist/7X-BZyesooz.d.ts +16 -0
  55. package/dist/7X-BZyesooz.d.ts.map +1 -0
  56. package/dist/7X-Chtd6B66.d.cts +16 -0
  57. package/dist/7X-Chtd6B66.d.cts.map +1 -0
  58. package/dist/7X-DoCUcp-J.d.cts +71 -0
  59. package/dist/7X-DoCUcp-J.d.cts.map +1 -0
  60. package/dist/7X-kot_VccM.d.ts +71 -0
  61. package/dist/7X-kot_VccM.d.ts.map +1 -0
  62. package/dist/8X-Df4DOBOe.d.ts +110 -0
  63. package/dist/8X-Df4DOBOe.d.ts.map +1 -0
  64. package/dist/8X-DkuKAkHz.d.ts +19 -0
  65. package/dist/8X-DkuKAkHz.d.ts.map +1 -0
  66. package/dist/8X-DqZyMvyV.d.cts +19 -0
  67. package/dist/8X-DqZyMvyV.d.cts.map +1 -0
  68. package/dist/8X-Dr9RunRw.d.cts +110 -0
  69. package/dist/8X-Dr9RunRw.d.cts.map +1 -0
  70. package/dist/9X-BDgifncF.d.ts +15 -0
  71. package/dist/9X-BDgifncF.d.ts.map +1 -0
  72. package/dist/9X-BaoZtjWF.d.cts +98 -0
  73. package/dist/9X-BaoZtjWF.d.cts.map +1 -0
  74. package/dist/9X-BcAb6Uso.d.cts +15 -0
  75. package/dist/9X-BcAb6Uso.d.cts.map +1 -0
  76. package/dist/9X-BhBWlgxG.d.ts +98 -0
  77. package/dist/9X-BhBWlgxG.d.ts.map +1 -0
  78. package/dist/AX-BY72FohC.d.cts +111 -0
  79. package/dist/AX-BY72FohC.d.cts.map +1 -0
  80. package/dist/AX-D6XHWdrY.d.ts +111 -0
  81. package/dist/AX-D6XHWdrY.d.ts.map +1 -0
  82. package/dist/BX-CA0OmrUZ.d.cts +115 -0
  83. package/dist/BX-CA0OmrUZ.d.cts.map +1 -0
  84. package/dist/BX-D_0C8Qbd.d.ts +115 -0
  85. package/dist/BX-D_0C8Qbd.d.ts.map +1 -0
  86. package/dist/CX-HH4cSZRX.d.ts +128 -0
  87. package/dist/CX-HH4cSZRX.d.ts.map +1 -0
  88. package/dist/CX-glpQSL8x.d.cts +128 -0
  89. package/dist/CX-glpQSL8x.d.cts.map +1 -0
  90. package/dist/DX-DimL1MDM.d.cts +115 -0
  91. package/dist/DX-DimL1MDM.d.cts.map +1 -0
  92. package/dist/DX-Dx22ax_I.d.ts +115 -0
  93. package/dist/DX-Dx22ax_I.d.ts.map +1 -0
  94. package/dist/EX-BRWh1wFc.d.ts +107 -0
  95. package/dist/EX-BRWh1wFc.d.ts.map +1 -0
  96. package/dist/EX-Cx87Ruxl.d.cts +107 -0
  97. package/dist/EX-Cx87Ruxl.d.cts.map +1 -0
  98. package/dist/FX-D81UlxNN.d.cts +127 -0
  99. package/dist/FX-D81UlxNN.d.cts.map +1 -0
  100. package/dist/FX-RmjwAr40.d.ts +127 -0
  101. package/dist/FX-RmjwAr40.d.ts.map +1 -0
  102. package/dist/GX-9i7piP9G.d.cts +136 -0
  103. package/dist/GX-9i7piP9G.d.cts.map +1 -0
  104. package/dist/GX-CJyo7oDp.d.ts +136 -0
  105. package/dist/GX-CJyo7oDp.d.ts.map +1 -0
  106. package/dist/HX-20GVJAvl.d.cts +126 -0
  107. package/dist/HX-20GVJAvl.d.cts.map +1 -0
  108. package/dist/HX-XALBTdLA.d.ts +126 -0
  109. package/dist/HX-XALBTdLA.d.ts.map +1 -0
  110. package/dist/IX-6SZ55QKb.d.ts +23 -0
  111. package/dist/IX-6SZ55QKb.d.ts.map +1 -0
  112. package/dist/IX-D54NGPsc.d.cts +23 -0
  113. package/dist/IX-D54NGPsc.d.cts.map +1 -0
  114. package/dist/JX-C1RYcwQX.d.cts +104 -0
  115. package/dist/JX-C1RYcwQX.d.cts.map +1 -0
  116. package/dist/JX-hQ1XRmLp.d.ts +104 -0
  117. package/dist/JX-hQ1XRmLp.d.ts.map +1 -0
  118. package/dist/KX-BNwunEfn.d.ts +151 -0
  119. package/dist/KX-BNwunEfn.d.ts.map +1 -0
  120. package/dist/KX-gQHCIgtQ.d.cts +151 -0
  121. package/dist/KX-gQHCIgtQ.d.cts.map +1 -0
  122. package/dist/LX-CHYX3X3J.d.ts +123 -0
  123. package/dist/LX-CHYX3X3J.d.ts.map +1 -0
  124. package/dist/LX-CPurJGIh.d.cts +123 -0
  125. package/dist/LX-CPurJGIh.d.cts.map +1 -0
  126. package/dist/MX-BPGLWSUz.d.ts +153 -0
  127. package/dist/MX-BPGLWSUz.d.ts.map +1 -0
  128. package/dist/MX-BnyW5eHf.d.cts +153 -0
  129. package/dist/MX-BnyW5eHf.d.cts.map +1 -0
  130. package/dist/MyInvoisClient-BrNyMjS-.d.cts +178 -0
  131. package/dist/MyInvoisClient-BrNyMjS-.d.cts.map +1 -0
  132. package/dist/MyInvoisClient-CXu4pdl-.d.ts +178 -0
  133. package/dist/MyInvoisClient-CXu4pdl-.d.ts.map +1 -0
  134. package/dist/MyInvoisClient-Cnvb5iUC.js +299 -0
  135. package/dist/MyInvoisClient-Cnvb5iUC.js.map +1 -0
  136. package/dist/MyInvoisClient-DO1dJfQq.cjs +304 -0
  137. package/dist/MyInvoisClient-DO1dJfQq.cjs.map +1 -0
  138. package/dist/NX-B11fQuco.d.cts +122 -0
  139. package/dist/NX-B11fQuco.d.cts.map +1 -0
  140. package/dist/NX-RulN5Ml3.d.ts +122 -0
  141. package/dist/NX-RulN5Ml3.d.ts.map +1 -0
  142. package/dist/OX-DgKVSp7I.d.ts +26 -0
  143. package/dist/OX-DgKVSp7I.d.ts.map +1 -0
  144. package/dist/OX-T-ydRXQS.d.cts +26 -0
  145. package/dist/OX-T-ydRXQS.d.cts.map +1 -0
  146. package/dist/PX-DA4A2kEv.d.ts +121 -0
  147. package/dist/PX-DA4A2kEv.d.ts.map +1 -0
  148. package/dist/PX-p0n1SzvU.d.cts +121 -0
  149. package/dist/PX-p0n1SzvU.d.cts.map +1 -0
  150. package/dist/QX-CI1NccIB.d.cts +59 -0
  151. package/dist/QX-CI1NccIB.d.cts.map +1 -0
  152. package/dist/QX-DrFqsMEs.d.ts +59 -0
  153. package/dist/QX-DrFqsMEs.d.ts.map +1 -0
  154. package/dist/RX-Cm7vFcFN.d.ts +23 -0
  155. package/dist/RX-Cm7vFcFN.d.ts.map +1 -0
  156. package/dist/RX-DnNKol22.d.cts +23 -0
  157. package/dist/RX-DnNKol22.d.cts.map +1 -0
  158. package/dist/SX-BUjiWQYz.d.cts +40 -0
  159. package/dist/SX-BUjiWQYz.d.cts.map +1 -0
  160. package/dist/SX-CsPPTu-W.d.ts +40 -0
  161. package/dist/SX-CsPPTu-W.d.ts.map +1 -0
  162. package/dist/TX-DCY25MdR.d.ts +31 -0
  163. package/dist/TX-DCY25MdR.d.ts.map +1 -0
  164. package/dist/TX-DOEpsf05.d.cts +31 -0
  165. package/dist/TX-DOEpsf05.d.cts.map +1 -0
  166. package/dist/UX-DauyagHy.d.ts +18 -0
  167. package/dist/UX-DauyagHy.d.ts.map +1 -0
  168. package/dist/UX-DgUOnTFK.d.cts +18 -0
  169. package/dist/UX-DgUOnTFK.d.cts.map +1 -0
  170. package/dist/VX-DD4scgCe.d.ts +17 -0
  171. package/dist/VX-DD4scgCe.d.ts.map +1 -0
  172. package/dist/VX-kUX6LM-3.d.cts +17 -0
  173. package/dist/VX-kUX6LM-3.d.cts.map +1 -0
  174. package/dist/WX-CjkoppdY.d.ts +26 -0
  175. package/dist/WX-CjkoppdY.d.ts.map +1 -0
  176. package/dist/WX-DPfyPFFh.d.cts +26 -0
  177. package/dist/WX-DPfyPFFh.d.cts.map +1 -0
  178. package/dist/XX-C4C1gQZH.d.cts +828 -0
  179. package/dist/XX-C4C1gQZH.d.cts.map +1 -0
  180. package/dist/XX-sbsIUOnA.d.ts +828 -0
  181. package/dist/XX-sbsIUOnA.d.ts.map +1 -0
  182. package/dist/YX-BeT-LsiA.d.cts +20 -0
  183. package/dist/YX-BeT-LsiA.d.cts.map +1 -0
  184. package/dist/YX-DUdO8mRC.d.ts +20 -0
  185. package/dist/YX-DUdO8mRC.d.ts.map +1 -0
  186. package/dist/ZX-BuVTTq-D.d.cts +22 -0
  187. package/dist/ZX-BuVTTq-D.d.cts.map +1 -0
  188. package/dist/ZX-DwfcSA-D.d.ts +22 -0
  189. package/dist/ZX-DwfcSA-D.d.ts.map +1 -0
  190. package/dist/api/platform/platformLogin.d.ts +67 -0
  191. package/dist/api/platform/platformLogin.d.ts.map +1 -0
  192. package/dist/api/platform/platformLogin.js +3 -0
  193. package/dist/canonicalize-C_fNNpYr.cjs +80 -0
  194. package/dist/canonicalize-C_fNNpYr.cjs.map +1 -0
  195. package/dist/canonicalize-DNUrCGad.js +68 -0
  196. package/dist/canonicalize-DNUrCGad.js.map +1 -0
  197. package/dist/chunk-CUT6urMc.cjs +30 -0
  198. package/dist/classification-codes-B15PbWxz.d.cts +118 -0
  199. package/dist/classification-codes-B15PbWxz.d.cts.map +1 -0
  200. package/dist/classification-codes-C2X4xW5-.d.ts +118 -0
  201. package/dist/classification-codes-C2X4xW5-.d.ts.map +1 -0
  202. package/dist/country-code-DPeNFMMi.d.cts +543 -0
  203. package/dist/country-code-DPeNFMMi.d.cts.map +1 -0
  204. package/dist/country-code-DsI8Mbzx.d.ts +543 -0
  205. package/dist/country-code-DsI8Mbzx.d.ts.map +1 -0
  206. package/dist/currencies-DKuDflOO.d.ts +208 -0
  207. package/dist/currencies-DKuDflOO.d.ts.map +1 -0
  208. package/dist/currencies-S5g1gzBU.d.cts +208 -0
  209. package/dist/currencies-S5g1gzBU.d.cts.map +1 -0
  210. package/dist/e-invoice-BuwtFnlI.d.cts +44 -0
  211. package/dist/e-invoice-BuwtFnlI.d.cts.map +1 -0
  212. package/dist/e-invoice-C2TxhyrK.d.ts +44 -0
  213. package/dist/e-invoice-C2TxhyrK.d.ts.map +1 -0
  214. package/dist/getBaseUrl-CO7Jp27d.cjs +14 -0
  215. package/dist/getBaseUrl-CO7Jp27d.cjs.map +1 -0
  216. package/dist/getBaseUrl-Dx6RDC8I.js +8 -0
  217. package/dist/getBaseUrl-Dx6RDC8I.js.map +1 -0
  218. package/dist/hashCert-Bol7lIh2.js +62 -0
  219. package/dist/hashCert-Bol7lIh2.js.map +1 -0
  220. package/dist/hashCert-mlYEuYex.cjs +68 -0
  221. package/dist/hashCert-mlYEuYex.cjs.map +1 -0
  222. package/dist/hashSignedProperties-9vj5wlYR.js +83 -0
  223. package/dist/hashSignedProperties-9vj5wlYR.js.map +1 -0
  224. package/dist/hashSignedProperties-CU_ZqqmY.cjs +95 -0
  225. package/dist/hashSignedProperties-CU_ZqqmY.cjs.map +1 -0
  226. package/dist/index-B1DSs-wd.d.cts +16 -0
  227. package/dist/index-B1DSs-wd.d.cts.map +1 -0
  228. package/dist/index-CJNLQVjx.d.ts +1 -0
  229. package/dist/index-FTgB2nM6.d.ts +16 -0
  230. package/dist/index-FTgB2nM6.d.ts.map +1 -0
  231. package/dist/index-Wy1ONBjV.d.cts +1 -0
  232. package/dist/index.cjs +13 -103
  233. package/dist/index.d.ts +60 -5666
  234. package/dist/index.js +11 -99
  235. package/dist/index10.cjs +34 -0
  236. package/dist/index10.cjs.map +1 -0
  237. package/dist/index11.cjs +24 -0
  238. package/dist/index11.cjs.map +1 -0
  239. package/dist/index12.cjs +0 -0
  240. package/dist/index13.cjs +13 -0
  241. package/dist/index14.cjs +13 -0
  242. package/dist/index14.cjs.map +1 -0
  243. package/dist/index15.cjs +3 -0
  244. package/dist/index16.cjs +17 -0
  245. package/dist/index17.cjs +3 -0
  246. package/dist/index18.cjs +208 -0
  247. package/dist/index18.cjs.map +1 -0
  248. package/dist/index19.cjs +109 -0
  249. package/dist/index19.cjs.map +1 -0
  250. package/dist/index2.cjs +62 -0
  251. package/dist/index2.cjs.map +1 -0
  252. package/dist/index20.cjs +137 -0
  253. package/dist/index20.cjs.map +1 -0
  254. package/dist/index21.cjs +64 -0
  255. package/dist/index21.cjs.map +1 -0
  256. package/dist/index22.cjs +267 -0
  257. package/dist/index22.cjs.map +1 -0
  258. package/dist/index23.cjs +79 -0
  259. package/dist/index23.cjs.map +1 -0
  260. package/dist/index24.cjs +107 -0
  261. package/dist/index24.cjs.map +1 -0
  262. package/dist/index25.cjs +73 -0
  263. package/dist/index25.cjs.map +1 -0
  264. package/dist/index26.cjs +112 -0
  265. package/dist/index26.cjs.map +1 -0
  266. package/dist/index27.cjs +100 -0
  267. package/dist/index27.cjs.map +1 -0
  268. package/dist/index28.cjs +18 -0
  269. package/dist/index28.cjs.map +1 -0
  270. package/dist/index29.cjs +38 -0
  271. package/dist/index29.cjs.map +1 -0
  272. package/dist/index3.cjs +532 -0
  273. package/dist/index3.cjs.map +1 -0
  274. package/dist/index30.cjs +19 -0
  275. package/dist/index30.cjs.map +1 -0
  276. package/dist/index31.cjs +29 -0
  277. package/dist/index31.cjs.map +1 -0
  278. package/dist/index32.cjs +20 -0
  279. package/dist/index32.cjs.map +1 -0
  280. package/dist/index33.cjs +14 -0
  281. package/dist/index33.cjs.map +1 -0
  282. package/dist/index34.cjs +14 -0
  283. package/dist/index34.cjs.map +1 -0
  284. package/dist/index35.cjs +17 -0
  285. package/dist/index35.cjs.map +1 -0
  286. package/dist/index36.cjs +13 -0
  287. package/dist/index36.cjs.map +1 -0
  288. package/dist/index37.cjs +108 -0
  289. package/dist/index37.cjs.map +1 -0
  290. package/dist/index38.cjs +113 -0
  291. package/dist/index38.cjs.map +1 -0
  292. package/dist/index39.cjs +126 -0
  293. package/dist/index39.cjs.map +1 -0
  294. package/dist/index4.cjs +196 -0
  295. package/dist/index4.cjs.map +1 -0
  296. package/dist/index40.cjs +113 -0
  297. package/dist/index40.cjs.map +1 -0
  298. package/dist/index41.cjs +105 -0
  299. package/dist/index41.cjs.map +1 -0
  300. package/dist/index42.cjs +125 -0
  301. package/dist/index42.cjs.map +1 -0
  302. package/dist/index43.cjs +134 -0
  303. package/dist/index43.cjs.map +1 -0
  304. package/dist/index44.cjs +124 -0
  305. package/dist/index44.cjs.map +1 -0
  306. package/dist/index45.cjs +21 -0
  307. package/dist/index45.cjs.map +1 -0
  308. package/dist/index46.cjs +102 -0
  309. package/dist/index46.cjs.map +1 -0
  310. package/dist/index47.cjs +149 -0
  311. package/dist/index47.cjs.map +1 -0
  312. package/dist/index48.cjs +121 -0
  313. package/dist/index48.cjs.map +1 -0
  314. package/dist/index49.cjs +151 -0
  315. package/dist/index49.cjs.map +1 -0
  316. package/dist/index5.cjs +25 -0
  317. package/dist/index5.cjs.map +1 -0
  318. package/dist/index50.cjs +120 -0
  319. package/dist/index50.cjs.map +1 -0
  320. package/dist/index51.cjs +24 -0
  321. package/dist/index51.cjs.map +1 -0
  322. package/dist/index52.cjs +119 -0
  323. package/dist/index52.cjs.map +1 -0
  324. package/dist/index53.cjs +54 -0
  325. package/dist/index53.cjs.map +1 -0
  326. package/dist/index54.cjs +21 -0
  327. package/dist/index54.cjs.map +1 -0
  328. package/dist/index55.cjs +35 -0
  329. package/dist/index55.cjs.map +1 -0
  330. package/dist/index56.cjs +29 -0
  331. package/dist/index56.cjs.map +1 -0
  332. package/dist/index57.cjs +16 -0
  333. package/dist/index57.cjs.map +1 -0
  334. package/dist/index58.cjs +15 -0
  335. package/dist/index58.cjs.map +1 -0
  336. package/dist/index59.cjs +24 -0
  337. package/dist/index59.cjs.map +1 -0
  338. package/dist/index59.cts.map +1 -0
  339. package/dist/index6.cjs +0 -0
  340. package/dist/index60.cjs +419 -0
  341. package/dist/index60.cjs.map +1 -0
  342. package/dist/index61.cjs +15 -0
  343. package/dist/index61.cjs.map +1 -0
  344. package/dist/index62.cjs +16 -0
  345. package/dist/index62.cjs.map +1 -0
  346. package/dist/index62.cts.map +1 -0
  347. package/dist/index63.cjs +0 -0
  348. package/dist/index63.cts.map +1 -0
  349. package/dist/index64.cjs +0 -0
  350. package/dist/index64.cts.map +1 -0
  351. package/dist/index65.cjs +122 -0
  352. package/dist/index65.cjs.map +1 -0
  353. package/dist/index65.cts.map +1 -0
  354. package/dist/index66.cjs +229 -0
  355. package/dist/index66.cjs.map +1 -0
  356. package/dist/index66.cts.map +1 -0
  357. package/dist/index67.cjs +4 -0
  358. package/dist/index67.cts.map +1 -0
  359. package/dist/index68.cjs +3 -0
  360. package/dist/index68.cts.map +1 -0
  361. package/dist/index69.cjs +4 -0
  362. package/dist/index69.cts.map +1 -0
  363. package/dist/index7.cjs +0 -0
  364. package/dist/index70.cjs +3 -0
  365. package/dist/index70.cts.map +1 -0
  366. package/dist/index71.cjs +3 -0
  367. package/dist/index71.cts.map +1 -0
  368. package/dist/index72.cjs +3 -0
  369. package/dist/index72.cts.map +1 -0
  370. package/dist/index73.cjs +3 -0
  371. package/dist/index73.cts.map +1 -0
  372. package/dist/index8.cjs +25 -0
  373. package/dist/index8.cjs.map +1 -0
  374. package/dist/index9.cjs +0 -0
  375. package/dist/invoice-1_1-BJVcw-oE.d.ts +432 -0
  376. package/dist/invoice-1_1-BJVcw-oE.d.ts.map +1 -0
  377. package/dist/invoice-1_1-DWdNPRzr.d.cts +432 -0
  378. package/dist/invoice-1_1-DWdNPRzr.d.cts.map +1 -0
  379. package/dist/invoice1-1-8S-QQn7P.cjs +547 -0
  380. package/dist/invoice1-1-8S-QQn7P.cjs.map +1 -0
  381. package/dist/invoice1-1-CHuLpkFz.js +504 -0
  382. package/dist/invoice1-1-CHuLpkFz.js.map +1 -0
  383. package/dist/msic-codes-B_1W6lZF.d.cts +26 -0
  384. package/dist/msic-codes-B_1W6lZF.d.cts.map +1 -0
  385. package/dist/msic-codes-bs0lTfSZ.d.ts +26 -0
  386. package/dist/msic-codes-bs0lTfSZ.d.ts.map +1 -0
  387. package/dist/payment-modes-B8dNy3SM.d.ts +44 -0
  388. package/dist/payment-modes-B8dNy3SM.d.ts.map +1 -0
  389. package/dist/payment-modes-DHihrywe.d.cts +44 -0
  390. package/dist/payment-modes-DHihrywe.d.cts.map +1 -0
  391. package/dist/platformLogin-DsxWWUXr.js +31 -0
  392. package/dist/platformLogin-DsxWWUXr.js.map +1 -0
  393. package/dist/platformLogin-PGzMhw1X.cjs +37 -0
  394. package/dist/platformLogin-PGzMhw1X.cjs.map +1 -0
  395. package/dist/populateFinalDocument-BdyYzz5Y.cjs +96 -0
  396. package/dist/populateFinalDocument-BdyYzz5Y.cjs.map +1 -0
  397. package/dist/populateFinalDocument-BpLXmgLv.js +90 -0
  398. package/dist/populateFinalDocument-BpLXmgLv.js.map +1 -0
  399. package/dist/populateSignedProperties-BJMcBQ6S.cjs +58 -0
  400. package/dist/populateSignedProperties-BJMcBQ6S.cjs.map +1 -0
  401. package/dist/populateSignedProperties-BvGN-YZH.js +52 -0
  402. package/dist/populateSignedProperties-BvGN-YZH.js.map +1 -0
  403. package/dist/sign-B61Cy3gO.cjs +40 -0
  404. package/dist/sign-B61Cy3gO.cjs.map +1 -0
  405. package/dist/sign-DzHK7UhR.js +34 -0
  406. package/dist/sign-DzHK7UhR.js.map +1 -0
  407. package/dist/signatures-BKi9DP2K.d.cts +173 -0
  408. package/dist/signatures-BKi9DP2K.d.cts.map +1 -0
  409. package/dist/signatures-C9QPZTQd.d.ts +173 -0
  410. package/dist/signatures-C9QPZTQd.d.ts.map +1 -0
  411. package/dist/state-codes-CxG1S9YY.d.ts +62 -0
  412. package/dist/state-codes-CxG1S9YY.d.ts.map +1 -0
  413. package/dist/state-codes-DXSWtE6a.d.cts +62 -0
  414. package/dist/state-codes-DXSWtE6a.d.cts.map +1 -0
  415. package/dist/tax-types-CEpfSh5P.d.ts +42 -0
  416. package/dist/tax-types-CEpfSh5P.d.ts.map +1 -0
  417. package/dist/tax-types-CgwxONDS.d.cts +42 -0
  418. package/dist/tax-types-CgwxONDS.d.cts.map +1 -0
  419. package/dist/transform-BLz0S687.cjs +72 -0
  420. package/dist/transform-BLz0S687.cjs.map +1 -0
  421. package/dist/transform-D1q-U6Zj.js +66 -0
  422. package/dist/transform-D1q-U6Zj.js.map +1 -0
  423. package/dist/types/classification-codes.d.ts +2 -0
  424. package/dist/types/country-code.d.ts +2 -0
  425. package/dist/types/currencies.d.ts +2 -0
  426. package/dist/types/documents/index.d.ts +57 -0
  427. package/dist/types/documents/invoice-1_1.d.ts +56 -0
  428. package/dist/types/e-invoice.d.ts +2 -0
  429. package/dist/types/index.d.ts +59 -0
  430. package/dist/types/msic/0X.d.ts +2 -0
  431. package/dist/types/msic/1X.d.ts +2 -0
  432. package/dist/types/msic/2X.d.ts +2 -0
  433. package/dist/types/msic/3X.d.ts +2 -0
  434. package/dist/types/msic/4X.d.ts +2 -0
  435. package/dist/types/msic/5X.d.ts +2 -0
  436. package/dist/types/msic/6X.d.ts +2 -0
  437. package/dist/types/msic/7X.d.ts +2 -0
  438. package/dist/types/msic/8X.d.ts +2 -0
  439. package/dist/types/msic/9X.d.ts +2 -0
  440. package/dist/types/msic-codes.d.ts +12 -0
  441. package/dist/types/payment-modes.d.ts +2 -0
  442. package/dist/types/signatures.d.ts +2 -0
  443. package/dist/types/state-codes.d.ts +2 -0
  444. package/dist/types/tax-types.d.ts +2 -0
  445. package/dist/types/unit/1X.d.ts +2 -0
  446. package/dist/types/unit/2X.d.ts +2 -0
  447. package/dist/types/unit/3X.d.ts +2 -0
  448. package/dist/types/unit/4X.d.ts +2 -0
  449. package/dist/types/unit/5X.d.ts +2 -0
  450. package/dist/types/unit/6X.d.ts +2 -0
  451. package/dist/types/unit/7X.d.ts +2 -0
  452. package/dist/types/unit/8X.d.ts +2 -0
  453. package/dist/types/unit/9X.d.ts +2 -0
  454. package/dist/types/unit/AX.d.ts +2 -0
  455. package/dist/types/unit/BX.d.ts +2 -0
  456. package/dist/types/unit/CX.d.ts +2 -0
  457. package/dist/types/unit/DX.d.ts +2 -0
  458. package/dist/types/unit/EX.d.ts +2 -0
  459. package/dist/types/unit/FX.d.ts +2 -0
  460. package/dist/types/unit/GX.d.ts +2 -0
  461. package/dist/types/unit/HX.d.ts +2 -0
  462. package/dist/types/unit/IX.d.ts +2 -0
  463. package/dist/types/unit/JX.d.ts +2 -0
  464. package/dist/types/unit/KX.d.ts +2 -0
  465. package/dist/types/unit/LX.d.ts +2 -0
  466. package/dist/types/unit/MX.d.ts +2 -0
  467. package/dist/types/unit/NX.d.ts +2 -0
  468. package/dist/types/unit/OX.d.ts +2 -0
  469. package/dist/types/unit/PX.d.ts +2 -0
  470. package/dist/types/unit/QX.d.ts +2 -0
  471. package/dist/types/unit/RX.d.ts +2 -0
  472. package/dist/types/unit/SX.d.ts +2 -0
  473. package/dist/types/unit/TX.d.ts +2 -0
  474. package/dist/types/unit/UX.d.ts +2 -0
  475. package/dist/types/unit/VX.d.ts +2 -0
  476. package/dist/types/unit/WX.d.ts +2 -0
  477. package/dist/types/unit/XX.d.ts +2 -0
  478. package/dist/types/unit/YX.d.ts +2 -0
  479. package/dist/types/unit/ZX.d.ts +2 -0
  480. package/dist/types/unit-types.d.ts +37 -0
  481. package/dist/unit-types-1bF0KhIp.d.ts +56 -0
  482. package/dist/unit-types-1bF0KhIp.d.ts.map +1 -0
  483. package/dist/unit-types-CsrkvgfG.d.cts +56 -0
  484. package/dist/unit-types-CsrkvgfG.d.cts.map +1 -0
  485. package/dist/utils/MyInvoisClient.d.ts +60 -0
  486. package/dist/utils/MyInvoisClient.js +13 -0
  487. package/dist/utils/base64.d.ts +6 -0
  488. package/dist/utils/base64.d.ts.map +1 -0
  489. package/dist/utils/base64.js +11 -0
  490. package/dist/utils/base64.js.map +1 -0
  491. package/dist/utils/debug/debug-document-hash.d.ts +100 -0
  492. package/dist/utils/debug/debug-document-hash.d.ts.map +1 -0
  493. package/dist/utils/debug/debug-document-hash.js +120 -0
  494. package/dist/utils/debug/debug-document-hash.js.map +1 -0
  495. package/dist/utils/debug/debug-invoice-submission.d.ts +152 -0
  496. package/dist/utils/debug/debug-invoice-submission.d.ts.map +1 -0
  497. package/dist/utils/debug/debug-invoice-submission.js +226 -0
  498. package/dist/utils/debug/debug-invoice-submission.js.map +1 -0
  499. package/dist/utils/getBaseUrl.d.ts +5 -0
  500. package/dist/utils/getBaseUrl.d.ts.map +1 -0
  501. package/dist/utils/getBaseUrl.js +3 -0
  502. package/dist/utils/invoice1-1.d.ts +117 -0
  503. package/dist/utils/invoice1-1.d.ts.map +1 -0
  504. package/dist/utils/invoice1-1.js +10 -0
  505. package/dist/utils/signature/canonicalize.d.ts +26 -0
  506. package/dist/utils/signature/canonicalize.d.ts.map +1 -0
  507. package/dist/utils/signature/canonicalize.js +3 -0
  508. package/dist/utils/signature/hashCert.d.ts +15 -0
  509. package/dist/utils/signature/hashCert.d.ts.map +1 -0
  510. package/dist/utils/signature/hashCert.js +3 -0
  511. package/dist/utils/signature/hashSignedProperties.d.ts +25 -0
  512. package/dist/utils/signature/hashSignedProperties.d.ts.map +1 -0
  513. package/dist/utils/signature/hashSignedProperties.js +3 -0
  514. package/dist/utils/signature/populateFinalDocument.d.ts +23 -0
  515. package/dist/utils/signature/populateFinalDocument.d.ts.map +1 -0
  516. package/dist/utils/signature/populateFinalDocument.js +3 -0
  517. package/dist/utils/signature/populateSignedProperties.d.ts +23 -0
  518. package/dist/utils/signature/populateSignedProperties.d.ts.map +1 -0
  519. package/dist/utils/signature/populateSignedProperties.js +3 -0
  520. package/dist/utils/signature/sign.d.ts +16 -0
  521. package/dist/utils/signature/sign.d.ts.map +1 -0
  522. package/dist/utils/signature/sign.js +3 -0
  523. package/dist/utils/signature/transform.d.ts +16 -0
  524. package/dist/utils/signature/transform.d.ts.map +1 -0
  525. package/dist/utils/signature/transform.js +3 -0
  526. package/package.json +12 -5
  527. package/src/api/platform/platformLogin.ts +6 -1
  528. package/src/types/documents/invoice-1_1.d.ts +90 -0
  529. package/src/types/msic-codes.d.ts +1 -7
  530. package/src/utils/MyInvoisClient.ts +421 -8
  531. package/src/utils/base64.ts +7 -0
  532. package/src/utils/debug/debug-document-hash.ts +249 -0
  533. package/src/utils/debug/debug-invoice-submission.ts +355 -0
  534. package/src/utils/getBaseUrl.ts +1 -1
  535. package/src/utils/invoice1-1.ts +671 -0
  536. package/src/utils/signature/canonicalize.ts +104 -0
  537. package/src/utils/signature/hashCert.ts +115 -0
  538. package/src/utils/signature/hashSignedProperties.ts +155 -0
  539. package/src/utils/signature/populateFinalDocument.ts +187 -0
  540. package/src/utils/signature/populateSignedProperties.ts +87 -0
  541. package/src/utils/signature/sign.ts +51 -0
  542. package/src/utils/signature/transform.ts +99 -0
  543. package/test/MyInvoiClientWithRealData.test.ts +2 -1
  544. package/test/MyInvoisClient.test.ts +16 -8
  545. package/test/base64.test.ts +43 -0
  546. package/test/canonicalize.test.ts +110 -0
  547. package/test/hashCert.test.ts +95 -0
  548. package/test/hashSignedProperties.test.ts +140 -0
  549. package/test/populateFinalDocument.test.ts +218 -0
  550. package/test/populateSignedProperties.test.ts +155 -0
  551. package/test/sign.test.ts +70 -0
  552. package/test/signAndSubmitInvoice.test.ts +915 -0
  553. package/test/transform.test.ts +158 -0
  554. package/tsconfig.json +7 -1
  555. package/tsdown.config.ts +31 -0
  556. package/dist/index.cjs.map +0 -1
  557. package/rolldown.config.ts +0 -26
@@ -0,0 +1,26 @@
1
+ import { MSIC_0X_CODE } from "./0X-C4IRh_fJ.js";
2
+ import { MSIC_1X_CODE } from "./1X-Brnls9Jh.js";
3
+ import { MSIC_2X_CODE } from "./2X-UdQcQW24.js";
4
+ import { MSIC_3X_CODE } from "./3X-DVDyspgb.js";
5
+ import { MSIC_4X_CODE } from "./4X-CUR8jlaZ.js";
6
+ import { MSIC_5X_CODE } from "./5X-C6db432h.js";
7
+ import { MSIC_6X_CODE } from "./6X-C_fFIcJC.js";
8
+ import { MSIC_7X_CODE } from "./7X-kot_VccM.js";
9
+ import { MSIC_8X_CODE } from "./8X-Df4DOBOe.js";
10
+ import { MSIC_9X_CODE } from "./9X-BhBWlgxG.js";
11
+
12
+ //#region src/types/msic-codes.d.ts
13
+
14
+ /**
15
+ * Represents the allowed 5-digit Malaysia Standard Industrial Classification (MSIC) codes.
16
+ * Based on the documentation: https://sdk.myinvois.hasil.gov.my/codes/msic-codes/
17
+ * Interface representing an MSIC code entry.
18
+ * Contains the 5-digit code and its description.
19
+ */
20
+ interface MSICCode {
21
+ code: MSIC_0X_CODE | MSIC_1X_CODE | MSIC_2X_CODE | MSIC_3X_CODE | MSIC_4X_CODE | MSIC_5X_CODE | MSIC_6X_CODE | MSIC_7X_CODE | MSIC_8X_CODE | MSIC_9X_CODE;
22
+ description: string;
23
+ }
24
+ //#endregion
25
+ export { MSICCode };
26
+ //# sourceMappingURL=msic-codes-bs0lTfSZ.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msic-codes-bs0lTfSZ.d.ts","names":["MSIC_0X_CODE","MSIC_1X_CODE","MSIC_2X_CODE","MSIC_3X_CODE","MSIC_4X_CODE","MSIC_5X_CODE","MSIC_6X_CODE","MSIC_7X_CODE","MSIC_8X_CODE","MSIC_9X_CODE","MSICCode"],"sources":["../src/types/msic-codes.d.ts"],"sourcesContent":["import type { MSIC_0X_CODE } from './msic/0X.d.ts'\nimport type { MSIC_1X_CODE } from './msic/1X.d.ts'\nimport type { MSIC_2X_CODE } from './msic/2X.d.ts'\nimport type { MSIC_3X_CODE } from './msic/3X.d.ts'\nimport type { MSIC_4X_CODE } from './msic/4X.d.ts'\nimport type { MSIC_5X_CODE } from './msic/5X.d.ts'\nimport type { MSIC_6X_CODE } from './msic/6X.d.ts'\nimport type { MSIC_7X_CODE } from './msic/7X.d.ts'\nimport type { MSIC_8X_CODE } from './msic/8X.d.ts'\nimport type { MSIC_9X_CODE } from './msic/9X.d.ts'\n\n/**\n * Represents the allowed 5-digit Malaysia Standard Industrial Classification (MSIC) codes.\n * Based on the documentation: https://sdk.myinvois.hasil.gov.my/codes/msic-codes/\n * Interface representing an MSIC code entry.\n * Contains the 5-digit code and its description.\n */\nexport interface MSICCode {\n code:\n | MSIC_0X_CODE\n | MSIC_1X_CODE\n | MSIC_2X_CODE\n | MSIC_3X_CODE\n | MSIC_4X_CODE\n | MSIC_5X_CODE\n | MSIC_6X_CODE\n | MSIC_7X_CODE\n | MSIC_8X_CODE\n | MSIC_9X_CODE\n description: string\n}\n"],"mappings":";;;;;;;;;;;;;;AAiBA;;;;;AAKMG,UALWO,QAAAA,CAKXP;EAAY,IAAA,EAHZH,YAKAK,GAJAJ,YAKAK,GAJAJ,YAKAK,GAJAJ,YAKAK,GAJAJ,YAKAK,GAJAJ,YAIY,GAHZC,eACAC,eACAC,eACAC"}
@@ -0,0 +1,44 @@
1
+ //#region src/types/payment-modes.d.ts
2
+ /**
3
+ * Represents the allowed codes for payment modes.
4
+ * Based on the documentation: https://sdk.myinvois.hasil.gov.my/codes/payment-methods/
5
+ */
6
+ type PaymentModeCode = '01' // Cash
7
+ | '02' // Cheque
8
+ | '03' // Bank Transfer
9
+ | '04' // Credit Card
10
+ | '05' // Debit Card
11
+ | '06' // e-Wallet / Digital Wallet
12
+ | '07' // Digital Bank
13
+ | '08'; // Others
14
+
15
+ /**
16
+ * Enum representing the allowed payment mode codes with descriptive names.
17
+ * Provides a more readable way to reference payment modes.
18
+ *
19
+ * @example
20
+ * const mode = PaymentModeCodeEnum.Cash;
21
+ * console.log(mode); // Output: "01"
22
+ */
23
+ declare enum PaymentModeCodeEnum {
24
+ Cash = '01',
25
+ Cheque = '02',
26
+ BankTransfer = '03',
27
+ CreditCard = '04',
28
+ DebitCard = '05',
29
+ EWalletDigitalWallet = '06',
30
+ DigitalBank = '07',
31
+ Others = '08',
32
+ }
33
+
34
+ /**
35
+ * Interface representing a payment mode entry.
36
+ * Contains the code and its corresponding description.
37
+ */
38
+ interface PaymentMode {
39
+ code: PaymentModeCode;
40
+ description: string;
41
+ }
42
+ //#endregion
43
+ export { PaymentMode, PaymentModeCode, PaymentModeCodeEnum };
44
+ //# sourceMappingURL=payment-modes-B8dNy3SM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-modes-B8dNy3SM.d.ts","names":["PaymentModeCode","PaymentModeCodeEnum","PaymentMode"],"sources":["../src/types/payment-modes.d.ts"],"sourcesContent":["/**\n * Represents the allowed codes for payment modes.\n * Based on the documentation: https://sdk.myinvois.hasil.gov.my/codes/payment-methods/\n */\nexport type PaymentModeCode =\n | '01' // Cash\n | '02' // Cheque\n | '03' // Bank Transfer\n | '04' // Credit Card\n | '05' // Debit Card\n | '06' // e-Wallet / Digital Wallet\n | '07' // Digital Bank\n | '08' // Others\n\n/**\n * Enum representing the allowed payment mode codes with descriptive names.\n * Provides a more readable way to reference payment modes.\n *\n * @example\n * const mode = PaymentModeCodeEnum.Cash;\n * console.log(mode); // Output: \"01\"\n */\nexport enum PaymentModeCodeEnum {\n Cash = '01',\n Cheque = '02',\n BankTransfer = '03',\n CreditCard = '04',\n DebitCard = '05',\n EWalletDigitalWallet = '06',\n DigitalBank = '07',\n Others = '08',\n}\n\n/**\n * Interface representing a payment mode entry.\n * Contains the code and its corresponding description.\n */\nexport interface PaymentMode {\n code: PaymentModeCode\n description: string\n}\n"],"mappings":";;AAIA;AAkBA;AAeA;KAjCYA,eAAAA;;;;;;;;;;;;;;;;;aAkBAC,mBAAAA;;;;;;;;;;;;;;;UAeKC,WAAAA;QACTF"}
@@ -0,0 +1,44 @@
1
+ //#region src/types/payment-modes.d.ts
2
+ /**
3
+ * Represents the allowed codes for payment modes.
4
+ * Based on the documentation: https://sdk.myinvois.hasil.gov.my/codes/payment-methods/
5
+ */
6
+ type PaymentModeCode = '01' // Cash
7
+ | '02' // Cheque
8
+ | '03' // Bank Transfer
9
+ | '04' // Credit Card
10
+ | '05' // Debit Card
11
+ | '06' // e-Wallet / Digital Wallet
12
+ | '07' // Digital Bank
13
+ | '08'; // Others
14
+
15
+ /**
16
+ * Enum representing the allowed payment mode codes with descriptive names.
17
+ * Provides a more readable way to reference payment modes.
18
+ *
19
+ * @example
20
+ * const mode = PaymentModeCodeEnum.Cash;
21
+ * console.log(mode); // Output: "01"
22
+ */
23
+ declare enum PaymentModeCodeEnum {
24
+ Cash = '01',
25
+ Cheque = '02',
26
+ BankTransfer = '03',
27
+ CreditCard = '04',
28
+ DebitCard = '05',
29
+ EWalletDigitalWallet = '06',
30
+ DigitalBank = '07',
31
+ Others = '08',
32
+ }
33
+
34
+ /**
35
+ * Interface representing a payment mode entry.
36
+ * Contains the code and its corresponding description.
37
+ */
38
+ interface PaymentMode {
39
+ code: PaymentModeCode;
40
+ description: string;
41
+ }
42
+ //#endregion
43
+ export { PaymentMode, PaymentModeCode, PaymentModeCodeEnum };
44
+ //# sourceMappingURL=payment-modes-DHihrywe.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-modes-DHihrywe.d.cts","names":["PaymentModeCode","PaymentModeCodeEnum","PaymentMode"],"sources":["../src/types/payment-modes.d.ts"],"sourcesContent":["/**\n * Represents the allowed codes for payment modes.\n * Based on the documentation: https://sdk.myinvois.hasil.gov.my/codes/payment-methods/\n */\nexport type PaymentModeCode =\n | '01' // Cash\n | '02' // Cheque\n | '03' // Bank Transfer\n | '04' // Credit Card\n | '05' // Debit Card\n | '06' // e-Wallet / Digital Wallet\n | '07' // Digital Bank\n | '08' // Others\n\n/**\n * Enum representing the allowed payment mode codes with descriptive names.\n * Provides a more readable way to reference payment modes.\n *\n * @example\n * const mode = PaymentModeCodeEnum.Cash;\n * console.log(mode); // Output: \"01\"\n */\nexport enum PaymentModeCodeEnum {\n Cash = '01',\n Cheque = '02',\n BankTransfer = '03',\n CreditCard = '04',\n DebitCard = '05',\n EWalletDigitalWallet = '06',\n DigitalBank = '07',\n Others = '08',\n}\n\n/**\n * Interface representing a payment mode entry.\n * Contains the code and its corresponding description.\n */\nexport interface PaymentMode {\n code: PaymentModeCode\n description: string\n}\n"],"mappings":";;AAIA;AAkBA;AAeA;KAjCYA,eAAAA;;;;;;;;;;;;;;;;;aAkBAC,mBAAAA;;;;;;;;;;;;;;;UAeKC,WAAAA;QACTF"}
@@ -0,0 +1,31 @@
1
+ //#region src/api/platform/platformLogin.ts
2
+ const platformLogin = async (client) => {
3
+ const { clientId, clientSecret, baseUrl, onBehalfOf, debug } = client;
4
+ try {
5
+ const response = await fetch(`${baseUrl}/connect/token`, {
6
+ method: "POST",
7
+ headers: {
8
+ "Content-Type": "application/x-www-form-urlencoded",
9
+ ...onBehalfOf ? { onbehalfof: onBehalfOf } : {}
10
+ },
11
+ body: new URLSearchParams({
12
+ grant_type: "client_credentials",
13
+ client_id: clientId,
14
+ client_secret: clientSecret,
15
+ scope: "InvoicingAPI"
16
+ })
17
+ });
18
+ const tokenResponse = await response.json();
19
+ return {
20
+ token: tokenResponse.access_token,
21
+ tokenExpiration: new Date(Date.now() + tokenResponse.expires_in * 1e3)
22
+ };
23
+ } catch (error) {
24
+ if (debug) console.error(error);
25
+ throw error;
26
+ }
27
+ };
28
+
29
+ //#endregion
30
+ export { platformLogin };
31
+ //# sourceMappingURL=platformLogin-DsxWWUXr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformLogin-DsxWWUXr.js","names":["client: ClientCredentials","tokenResponse: TokenResponse"],"sources":["../src/api/platform/platformLogin.ts"],"sourcesContent":["import type { ClientCredentials, TokenResponse } from 'src/types'\n\nexport const platformLogin = async (\n client: ClientCredentials,\n): Promise<{\n token: string\n tokenExpiration: Date\n}> => {\n const { clientId, clientSecret, baseUrl, onBehalfOf, debug } = client\n try {\n const response = await fetch(`${baseUrl}/connect/token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...(onBehalfOf ? { onbehalfof: onBehalfOf } : {}),\n },\n body: new URLSearchParams({\n grant_type: 'client_credentials',\n client_id: clientId,\n client_secret: clientSecret,\n scope: 'InvoicingAPI',\n }),\n })\n\n const tokenResponse: TokenResponse = await response.json()\n return {\n token: tokenResponse.access_token,\n tokenExpiration: new Date(Date.now() + tokenResponse.expires_in * 1000),\n }\n } catch (error) {\n if (debug) console.error(error)\n throw error\n }\n}\n"],"mappings":";AAEA,MAAa,gBAAgB,OAC3BA,WAII;CACJ,MAAM,EAAE,UAAU,cAAc,SAAS,YAAY,OAAO,GAAG;AAC/D,KAAI;EACF,MAAM,WAAW,MAAM,OAAO,EAAE,QAAQ,iBAAiB;GACvD,QAAQ;GACR,SAAS;IACP,gBAAgB;IAChB,GAAI,aAAa,EAAE,YAAY,WAAY,IAAG,CAAE;GACjD;GACD,MAAM,IAAI,gBAAgB;IACxB,YAAY;IACZ,WAAW;IACX,eAAe;IACf,OAAO;GACR;EACF,EAAC;EAEF,MAAMC,gBAA+B,MAAM,SAAS,MAAM;AAC1D,SAAO;GACL,OAAO,cAAc;GACrB,iBAAiB,IAAI,KAAK,KAAK,KAAK,GAAG,cAAc,aAAa;EACnE;CACF,SAAQ,OAAO;AACd,MAAI,MAAO,SAAQ,MAAM,MAAM;AAC/B,QAAM;CACP;AACF"}
@@ -0,0 +1,37 @@
1
+
2
+ //#region src/api/platform/platformLogin.ts
3
+ const platformLogin = async (client) => {
4
+ const { clientId, clientSecret, baseUrl, onBehalfOf, debug } = client;
5
+ try {
6
+ const response = await fetch(`${baseUrl}/connect/token`, {
7
+ method: "POST",
8
+ headers: {
9
+ "Content-Type": "application/x-www-form-urlencoded",
10
+ ...onBehalfOf ? { onbehalfof: onBehalfOf } : {}
11
+ },
12
+ body: new URLSearchParams({
13
+ grant_type: "client_credentials",
14
+ client_id: clientId,
15
+ client_secret: clientSecret,
16
+ scope: "InvoicingAPI"
17
+ })
18
+ });
19
+ const tokenResponse = await response.json();
20
+ return {
21
+ token: tokenResponse.access_token,
22
+ tokenExpiration: new Date(Date.now() + tokenResponse.expires_in * 1e3)
23
+ };
24
+ } catch (error) {
25
+ if (debug) console.error(error);
26
+ throw error;
27
+ }
28
+ };
29
+
30
+ //#endregion
31
+ Object.defineProperty(exports, 'platformLogin', {
32
+ enumerable: true,
33
+ get: function () {
34
+ return platformLogin;
35
+ }
36
+ });
37
+ //# sourceMappingURL=platformLogin-PGzMhw1X.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformLogin-PGzMhw1X.cjs","names":["client: ClientCredentials","tokenResponse: TokenResponse"],"sources":["../src/api/platform/platformLogin.ts"],"sourcesContent":["import type { ClientCredentials, TokenResponse } from 'src/types'\n\nexport const platformLogin = async (\n client: ClientCredentials,\n): Promise<{\n token: string\n tokenExpiration: Date\n}> => {\n const { clientId, clientSecret, baseUrl, onBehalfOf, debug } = client\n try {\n const response = await fetch(`${baseUrl}/connect/token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...(onBehalfOf ? { onbehalfof: onBehalfOf } : {}),\n },\n body: new URLSearchParams({\n grant_type: 'client_credentials',\n client_id: clientId,\n client_secret: clientSecret,\n scope: 'InvoicingAPI',\n }),\n })\n\n const tokenResponse: TokenResponse = await response.json()\n return {\n token: tokenResponse.access_token,\n tokenExpiration: new Date(Date.now() + tokenResponse.expires_in * 1000),\n }\n } catch (error) {\n if (debug) console.error(error)\n throw error\n }\n}\n"],"mappings":";;AAEA,MAAa,gBAAgB,OAC3BA,WAII;CACJ,MAAM,EAAE,UAAU,cAAc,SAAS,YAAY,OAAO,GAAG;AAC/D,KAAI;EACF,MAAM,WAAW,MAAM,OAAO,EAAE,QAAQ,iBAAiB;GACvD,QAAQ;GACR,SAAS;IACP,gBAAgB;IAChB,GAAI,aAAa,EAAE,YAAY,WAAY,IAAG,CAAE;GACjD;GACD,MAAM,IAAI,gBAAgB;IACxB,YAAY;IACZ,WAAW;IACX,eAAe;IACf,OAAO;GACR;EACF,EAAC;EAEF,MAAMC,gBAA+B,MAAM,SAAS,MAAM;AAC1D,SAAO;GACL,OAAO,cAAc;GACrB,iBAAiB,IAAI,KAAK,KAAK,KAAK,GAAG,cAAc,aAAa;EACnE;CACF,SAAQ,OAAO;AACd,MAAI,MAAO,SAAQ,MAAM,MAAM;AAC/B,QAAM;CACP;AACF"}
@@ -0,0 +1,96 @@
1
+ const require_chunk = require('./chunk-CUT6urMc.cjs');
2
+ const xpath_ts = require_chunk.__toESM(require("xpath-ts"));
3
+
4
+ //#region src/utils/signature/populateFinalDocument.ts
5
+ /**
6
+ * Extracts the Base64 encoded DER certificate content from a PEM string,
7
+ * removing headers, footers, and newlines.
8
+ * @param pemCert The certificate in PEM format.
9
+ * @returns The cleaned Base64 DER string.
10
+ */
11
+ function cleanCertificatePem(pemCert) {
12
+ const beginMarker = "-----BEGIN CERTIFICATE-----";
13
+ const endMarker = "-----END CERTIFICATE-----";
14
+ let content = pemCert;
15
+ const startIndex = pemCert.indexOf(beginMarker);
16
+ const endIndex = pemCert.indexOf(endMarker);
17
+ if (startIndex !== -1 && endIndex !== -1 && endIndex > startIndex) content = pemCert.substring(startIndex + beginMarker.length, endIndex);
18
+ return content.replace(/[^A-Za-z0-9+/=]/g, "");
19
+ }
20
+ /**
21
+ * Populates the final signature information fields within the UBL document's signature structure.
22
+ *
23
+ * Corresponds to Step 8 in the MyInvois Signature Creation guide:
24
+ * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-8-populate-the-information-in-the-document-to-create-the-signed-document
25
+ *
26
+ * Modifies the passed Document object in place.
27
+ *
28
+ * @param doc The XML Document object (from xmldom-ts) containing the signature structure.
29
+ * @param finalData An object containing the final signature data to populate.
30
+ * @throws {Error} If any target element cannot be found or if multiple are found.
31
+ */
32
+ function populateFinalDocument(doc, finalData) {
33
+ const ns = {
34
+ inv: "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
35
+ ext: "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
36
+ sig: "urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2",
37
+ sac: "urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2",
38
+ ds: "http://www.w3.org/2000/09/xmldsig#",
39
+ cac: "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
40
+ cbc: "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
41
+ };
42
+ const select = xpath_ts.useNamespaces(ns);
43
+ const setElementValue = (xpathExpr, value) => {
44
+ try {
45
+ const selectionResult = select(xpathExpr, doc);
46
+ if (selectionResult == null) throw new Error(`XPath selection returned null or undefined for: ${xpathExpr}`);
47
+ if (!Array.isArray(selectionResult)) throw new Error(`XPath selection did not return an array for: ${xpathExpr}. Result: ${typeof selectionResult}`);
48
+ if (selectionResult.length === 0) throw new Error(`Element not found for XPath: ${xpathExpr}`);
49
+ if (selectionResult.length > 1) throw new Error(`Multiple elements found for XPath (expected 1): ${xpathExpr}`);
50
+ const node = selectionResult[0];
51
+ if (!node || typeof node !== "object" || !("nodeType" in node) || node.nodeType !== 1) throw new Error(`Selected item is not an Element Node for XPath: ${xpathExpr}. Node details: ${JSON.stringify(node)}`);
52
+ if ("textContent" in node) node.textContent = value;
53
+ else throw new Error(`Selected Element Node does not have textContent property for XPath: ${xpathExpr}`);
54
+ } catch (error) {
55
+ console.error(`Error setting value for XPath ${xpathExpr}:`, error);
56
+ throw new Error(`Failed to set value for XPath ${xpathExpr}: ${error.message}`);
57
+ }
58
+ };
59
+ const checkElementExists = (xpathExpr) => {
60
+ try {
61
+ const selectionResult = select(xpathExpr, doc);
62
+ return Array.isArray(selectionResult) && selectionResult.length > 0;
63
+ } catch (error) {
64
+ console.error(`Error checking existence for XPath ${xpathExpr}:`, error);
65
+ return false;
66
+ }
67
+ };
68
+ const basePath = "/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature";
69
+ const propsRefPath = `${basePath}/ds:SignedInfo/ds:Reference[@URI='#id-xades-signed-props']`;
70
+ const docRefPath = `${basePath}/ds:SignedInfo/ds:Reference[@Id='id-doc-signed-data']`;
71
+ const signatureValuePath = `${basePath}/ds:SignatureValue`;
72
+ const x509CertPath = `${basePath}/ds:KeyInfo/ds:X509Data/ds:X509Certificate`;
73
+ const propsDigestPath = `${propsRefPath}/ds:DigestValue`;
74
+ const docDigestPath = `${docRefPath}/ds:DigestValue`;
75
+ setElementValue(signatureValuePath, finalData.signatureValue);
76
+ setElementValue(x509CertPath, cleanCertificatePem(finalData.certificatePem));
77
+ if (!checkElementExists(propsRefPath)) throw new Error(`Failed to set value for XPath ${propsDigestPath}: Element not found for XPath: ${propsDigestPath}`);
78
+ setElementValue(propsDigestPath, finalData.propsDigest);
79
+ if (!checkElementExists(docRefPath)) throw new Error(`Failed to set value for XPath ${docDigestPath}: Element not found for XPath: ${docDigestPath}`);
80
+ setElementValue(docDigestPath, finalData.docDigest);
81
+ const cacSignatureIdPath = "/inv:Invoice/cac:Signature/cbc:ID";
82
+ const cacSignatureMethodPath = "/inv:Invoice/cac:Signature/cbc:SignatureMethod";
83
+ const cacSignatureIdValue = "urn:oasis:names:specification:ubl:signature:Invoice";
84
+ const cacSignatureMethodValue = "urn:oasis:names:specification:ubl:dsig:enveloped:xades";
85
+ setElementValue(cacSignatureIdPath, cacSignatureIdValue);
86
+ setElementValue(cacSignatureMethodPath, cacSignatureMethodValue);
87
+ }
88
+
89
+ //#endregion
90
+ Object.defineProperty(exports, 'populateFinalDocument', {
91
+ enumerable: true,
92
+ get: function () {
93
+ return populateFinalDocument;
94
+ }
95
+ });
96
+ //# sourceMappingURL=populateFinalDocument-BdyYzz5Y.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"populateFinalDocument-BdyYzz5Y.cjs","names":["pemCert: string","doc: Document","finalData: FinalDocumentData","xpathExpr: string","value: string","error: any"],"sources":["../src/utils/signature/populateFinalDocument.ts"],"sourcesContent":["import * as xpath from 'xpath-ts'\n\nexport interface FinalDocumentData {\n signatureValue: string // Base64 encoded RSA signature (Sig from Step 4)\n propsDigest: string // Base64 encoded hash of SignedProperties (PropsDigest from Step 7)\n docDigest: string // Base64 encoded hash of Canonicalized Document (DocDigest from Step 3)\n certificatePem: string // Signing certificate in PEM format\n}\n\n/**\n * Extracts the Base64 encoded DER certificate content from a PEM string,\n * removing headers, footers, and newlines.\n * @param pemCert The certificate in PEM format.\n * @returns The cleaned Base64 DER string.\n */\nfunction cleanCertificatePem(pemCert: string): string {\n const beginMarker = '-----BEGIN CERTIFICATE-----'\n const endMarker = '-----END CERTIFICATE-----'\n let content = pemCert\n\n const startIndex = pemCert.indexOf(beginMarker)\n const endIndex = pemCert.indexOf(endMarker)\n\n if (startIndex !== -1 && endIndex !== -1 && endIndex > startIndex) {\n content = pemCert.substring(startIndex + beginMarker.length, endIndex)\n } // else: Assume it might be just the Base64 part already, or another PEM type\n\n // Remove any remaining non-Base64 characters (newlines, etc.)\n return content.replace(/[^A-Za-z0-9+/=]/g, '')\n}\n\n/**\n * Populates the final signature information fields within the UBL document's signature structure.\n *\n * Corresponds to Step 8 in the MyInvois Signature Creation guide:\n * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-8-populate-the-information-in-the-document-to-create-the-signed-document\n *\n * Modifies the passed Document object in place.\n *\n * @param doc The XML Document object (from xmldom-ts) containing the signature structure.\n * @param finalData An object containing the final signature data to populate.\n * @throws {Error} If any target element cannot be found or if multiple are found.\n */\nexport function populateFinalDocument(\n doc: Document,\n finalData: FinalDocumentData,\n): void {\n const ns = {\n inv: 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2',\n ext: 'urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2',\n sig: 'urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2',\n sac: 'urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2',\n ds: 'http://www.w3.org/2000/09/xmldsig#',\n // No xades needed here, but cac might be needed if populating /Invoice/cac:Signature\n // cac: 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2'\n cac: 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2',\n cbc: 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2',\n }\n const select = xpath.useNamespaces(ns)\n\n // Helper function to find a single node and set its text content\n const setElementValue = (xpathExpr: string, value: string) => {\n try {\n const selectionResult = select(xpathExpr, doc) // Store the result first\n\n // Check 0: Explicitly check for null/undefined before array check\n if (selectionResult == null) {\n // Use == to catch both null and undefined\n throw new Error(\n `XPath selection returned null or undefined for: ${xpathExpr}`,\n )\n }\n\n // Check 1: Ensure it's an array (xpath.select can return other types)\n if (!Array.isArray(selectionResult)) {\n throw new Error(\n `XPath selection did not return an array for: ${xpathExpr}. Result: ${typeof selectionResult}`,\n )\n }\n\n // Check 2: Ensure exactly one node was found\n if (selectionResult.length === 0) {\n throw new Error(`Element not found for XPath: ${xpathExpr}`)\n }\n if (selectionResult.length > 1) {\n throw new Error(\n `Multiple elements found for XPath (expected 1): ${xpathExpr}`,\n )\n }\n\n // Check 3: Ensure the found item is a Node and specifically an Element node (type 1)\n const node = selectionResult[0] as Node // Assert as Node for type checking\n // Node.ELEMENT_NODE is typically 1\n if (\n !node ||\n typeof node !== 'object' ||\n !('nodeType' in node) ||\n node.nodeType !== 1\n ) {\n throw new Error(\n `Selected item is not an Element Node for XPath: ${xpathExpr}. Node details: ${JSON.stringify(node)}`,\n )\n }\n\n // Check 4: Ensure textContent can be set (should be true for element nodes)\n if ('textContent' in node) {\n // Ensure the property is writable (though typically it is for elements)\n node.textContent = value\n } else {\n // This case should technically be impossible if nodeType is 1\n throw new Error(\n `Selected Element Node does not have textContent property for XPath: ${xpathExpr}`,\n )\n }\n } catch (error: any) {\n console.error(`Error setting value for XPath ${xpathExpr}:`, error)\n // Keep the wrapping error message format consistent with tests\n throw new Error(\n `Failed to set value for XPath ${xpathExpr}: ${error.message}`,\n )\n }\n }\n\n // Helper function to check if *at least one* node exists for an XPath\n const checkElementExists = (xpathExpr: string): boolean => {\n try {\n const selectionResult = select(xpathExpr, doc)\n // Check if it's an array and has at least one element\n return Array.isArray(selectionResult) && selectionResult.length > 0\n } catch (error) {\n console.error(`Error checking existence for XPath ${xpathExpr}:`, error)\n return false // Treat errors during check as non-existent\n }\n }\n\n // Define XPaths based on UBL documentation for Step 8\n const basePath =\n '/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature'\n\n // Define XPaths for the parent Reference elements\n const propsRefPath = `${basePath}/ds:SignedInfo/ds:Reference[@URI='#id-xades-signed-props']`\n const docRefPath = `${basePath}/ds:SignedInfo/ds:Reference[@Id='id-doc-signed-data']`\n\n // Define XPaths for the target elements\n const signatureValuePath = `${basePath}/ds:SignatureValue`\n const x509CertPath = `${basePath}/ds:KeyInfo/ds:X509Data/ds:X509Certificate`\n const propsDigestPath = `${propsRefPath}/ds:DigestValue`\n const docDigestPath = `${docRefPath}/ds:DigestValue`\n\n // Populate the values, adding existence checks for Reference parents\n setElementValue(signatureValuePath, finalData.signatureValue)\n setElementValue(x509CertPath, cleanCertificatePem(finalData.certificatePem))\n\n // Check propsDigest parent before setting value\n if (!checkElementExists(propsRefPath)) {\n // Throw using the child path to match original test intent\n throw new Error(\n `Failed to set value for XPath ${propsDigestPath}: Element not found for XPath: ${propsDigestPath}`,\n )\n }\n setElementValue(propsDigestPath, finalData.propsDigest)\n\n // Check docDigest parent before setting value\n if (!checkElementExists(docRefPath)) {\n // Throw using the child path to match original test intent\n throw new Error(\n `Failed to set value for XPath ${docDigestPath}: Element not found for XPath: ${docDigestPath}`,\n )\n }\n setElementValue(docDigestPath, finalData.docDigest)\n\n // Populate the /Invoice/cac:Signature elements\n const cacSignatureIdPath = '/inv:Invoice/cac:Signature/cbc:ID'\n const cacSignatureMethodPath =\n '/inv:Invoice/cac:Signature/cbc:SignatureMethod'\n\n // Static values based on the user's example XML\n const cacSignatureIdValue =\n 'urn:oasis:names:specification:ubl:signature:Invoice'\n const cacSignatureMethodValue =\n 'urn:oasis:names:specification:ubl:dsig:enveloped:xades'\n\n setElementValue(cacSignatureIdPath, cacSignatureIdValue)\n setElementValue(cacSignatureMethodPath, cacSignatureMethodValue)\n\n // Document `doc` is modified in place.\n}\n"],"mappings":";;;;;;;;;;AAeA,SAAS,oBAAoBA,SAAyB;CACpD,MAAM,cAAc;CACpB,MAAM,YAAY;CAClB,IAAI,UAAU;CAEd,MAAM,aAAa,QAAQ,QAAQ,YAAY;CAC/C,MAAM,WAAW,QAAQ,QAAQ,UAAU;AAE3C,KAAI,eAAe,MAAM,aAAa,MAAM,WAAW,WACrD,WAAU,QAAQ,UAAU,aAAa,YAAY,QAAQ,SAAS;AAIxE,QAAO,QAAQ,QAAQ,oBAAoB,GAAG;AAC/C;;;;;;;;;;;;;AAcD,SAAgB,sBACdC,KACAC,WACM;CACN,MAAM,KAAK;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,IAAI;EAGJ,KAAK;EACL,KAAK;CACN;CACD,MAAM,SAAS,SAAM,cAAc,GAAG;CAGtC,MAAM,kBAAkB,CAACC,WAAmBC,UAAkB;AAC5D,MAAI;GACF,MAAM,kBAAkB,OAAO,WAAW,IAAI;AAG9C,OAAI,mBAAmB,KAErB,OAAM,IAAI,OACP,kDAAkD,UAAU;AAKjE,QAAK,MAAM,QAAQ,gBAAgB,CACjC,OAAM,IAAI,OACP,+CAA+C,UAAU,mBAAmB,gBAAgB;AAKjG,OAAI,gBAAgB,WAAW,EAC7B,OAAM,IAAI,OAAO,+BAA+B,UAAU;AAE5D,OAAI,gBAAgB,SAAS,EAC3B,OAAM,IAAI,OACP,kDAAkD,UAAU;GAKjE,MAAM,OAAO,gBAAgB;AAE7B,QACG,eACM,SAAS,cACd,cAAc,SAChB,KAAK,aAAa,EAElB,OAAM,IAAI,OACP,kDAAkD,UAAU,kBAAkB,KAAK,UAAU,KAAK,CAAC;AAKxG,OAAI,iBAAiB,KAEnB,MAAK,cAAc;OAGnB,OAAM,IAAI,OACP,sEAAsE,UAAU;EAGtF,SAAQC,OAAY;AACnB,WAAQ,OAAO,gCAAgC,UAAU,IAAI,MAAM;AAEnE,SAAM,IAAI,OACP,gCAAgC,UAAU,IAAI,MAAM,QAAQ;EAEhE;CACF;CAGD,MAAM,qBAAqB,CAACF,cAA+B;AACzD,MAAI;GACF,MAAM,kBAAkB,OAAO,WAAW,IAAI;AAE9C,UAAO,MAAM,QAAQ,gBAAgB,IAAI,gBAAgB,SAAS;EACnE,SAAQ,OAAO;AACd,WAAQ,OAAO,qCAAqC,UAAU,IAAI,MAAM;AACxE,UAAO;EACR;CACF;CAGD,MAAM,WACJ;CAGF,MAAM,gBAAgB,EAAE,SAAS;CACjC,MAAM,cAAc,EAAE,SAAS;CAG/B,MAAM,sBAAsB,EAAE,SAAS;CACvC,MAAM,gBAAgB,EAAE,SAAS;CACjC,MAAM,mBAAmB,EAAE,aAAa;CACxC,MAAM,iBAAiB,EAAE,WAAW;AAGpC,iBAAgB,oBAAoB,UAAU,eAAe;AAC7D,iBAAgB,cAAc,oBAAoB,UAAU,eAAe,CAAC;AAG5E,MAAK,mBAAmB,aAAa,CAEnC,OAAM,IAAI,OACP,gCAAgC,gBAAgB,iCAAiC,gBAAgB;AAGtG,iBAAgB,iBAAiB,UAAU,YAAY;AAGvD,MAAK,mBAAmB,WAAW,CAEjC,OAAM,IAAI,OACP,gCAAgC,cAAc,iCAAiC,cAAc;AAGlG,iBAAgB,eAAe,UAAU,UAAU;CAGnD,MAAM,qBAAqB;CAC3B,MAAM,yBACJ;CAGF,MAAM,sBACJ;CACF,MAAM,0BACJ;AAEF,iBAAgB,oBAAoB,oBAAoB;AACxD,iBAAgB,wBAAwB,wBAAwB;AAGjE"}
@@ -0,0 +1,90 @@
1
+ import * as xpath from "xpath-ts";
2
+
3
+ //#region src/utils/signature/populateFinalDocument.ts
4
+ /**
5
+ * Extracts the Base64 encoded DER certificate content from a PEM string,
6
+ * removing headers, footers, and newlines.
7
+ * @param pemCert The certificate in PEM format.
8
+ * @returns The cleaned Base64 DER string.
9
+ */
10
+ function cleanCertificatePem(pemCert) {
11
+ const beginMarker = "-----BEGIN CERTIFICATE-----";
12
+ const endMarker = "-----END CERTIFICATE-----";
13
+ let content = pemCert;
14
+ const startIndex = pemCert.indexOf(beginMarker);
15
+ const endIndex = pemCert.indexOf(endMarker);
16
+ if (startIndex !== -1 && endIndex !== -1 && endIndex > startIndex) content = pemCert.substring(startIndex + beginMarker.length, endIndex);
17
+ return content.replace(/[^A-Za-z0-9+/=]/g, "");
18
+ }
19
+ /**
20
+ * Populates the final signature information fields within the UBL document's signature structure.
21
+ *
22
+ * Corresponds to Step 8 in the MyInvois Signature Creation guide:
23
+ * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-8-populate-the-information-in-the-document-to-create-the-signed-document
24
+ *
25
+ * Modifies the passed Document object in place.
26
+ *
27
+ * @param doc The XML Document object (from xmldom-ts) containing the signature structure.
28
+ * @param finalData An object containing the final signature data to populate.
29
+ * @throws {Error} If any target element cannot be found or if multiple are found.
30
+ */
31
+ function populateFinalDocument(doc, finalData) {
32
+ const ns = {
33
+ inv: "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
34
+ ext: "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
35
+ sig: "urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2",
36
+ sac: "urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2",
37
+ ds: "http://www.w3.org/2000/09/xmldsig#",
38
+ cac: "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
39
+ cbc: "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
40
+ };
41
+ const select = xpath.useNamespaces(ns);
42
+ const setElementValue = (xpathExpr, value) => {
43
+ try {
44
+ const selectionResult = select(xpathExpr, doc);
45
+ if (selectionResult == null) throw new Error(`XPath selection returned null or undefined for: ${xpathExpr}`);
46
+ if (!Array.isArray(selectionResult)) throw new Error(`XPath selection did not return an array for: ${xpathExpr}. Result: ${typeof selectionResult}`);
47
+ if (selectionResult.length === 0) throw new Error(`Element not found for XPath: ${xpathExpr}`);
48
+ if (selectionResult.length > 1) throw new Error(`Multiple elements found for XPath (expected 1): ${xpathExpr}`);
49
+ const node = selectionResult[0];
50
+ if (!node || typeof node !== "object" || !("nodeType" in node) || node.nodeType !== 1) throw new Error(`Selected item is not an Element Node for XPath: ${xpathExpr}. Node details: ${JSON.stringify(node)}`);
51
+ if ("textContent" in node) node.textContent = value;
52
+ else throw new Error(`Selected Element Node does not have textContent property for XPath: ${xpathExpr}`);
53
+ } catch (error) {
54
+ console.error(`Error setting value for XPath ${xpathExpr}:`, error);
55
+ throw new Error(`Failed to set value for XPath ${xpathExpr}: ${error.message}`);
56
+ }
57
+ };
58
+ const checkElementExists = (xpathExpr) => {
59
+ try {
60
+ const selectionResult = select(xpathExpr, doc);
61
+ return Array.isArray(selectionResult) && selectionResult.length > 0;
62
+ } catch (error) {
63
+ console.error(`Error checking existence for XPath ${xpathExpr}:`, error);
64
+ return false;
65
+ }
66
+ };
67
+ const basePath = "/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature";
68
+ const propsRefPath = `${basePath}/ds:SignedInfo/ds:Reference[@URI='#id-xades-signed-props']`;
69
+ const docRefPath = `${basePath}/ds:SignedInfo/ds:Reference[@Id='id-doc-signed-data']`;
70
+ const signatureValuePath = `${basePath}/ds:SignatureValue`;
71
+ const x509CertPath = `${basePath}/ds:KeyInfo/ds:X509Data/ds:X509Certificate`;
72
+ const propsDigestPath = `${propsRefPath}/ds:DigestValue`;
73
+ const docDigestPath = `${docRefPath}/ds:DigestValue`;
74
+ setElementValue(signatureValuePath, finalData.signatureValue);
75
+ setElementValue(x509CertPath, cleanCertificatePem(finalData.certificatePem));
76
+ if (!checkElementExists(propsRefPath)) throw new Error(`Failed to set value for XPath ${propsDigestPath}: Element not found for XPath: ${propsDigestPath}`);
77
+ setElementValue(propsDigestPath, finalData.propsDigest);
78
+ if (!checkElementExists(docRefPath)) throw new Error(`Failed to set value for XPath ${docDigestPath}: Element not found for XPath: ${docDigestPath}`);
79
+ setElementValue(docDigestPath, finalData.docDigest);
80
+ const cacSignatureIdPath = "/inv:Invoice/cac:Signature/cbc:ID";
81
+ const cacSignatureMethodPath = "/inv:Invoice/cac:Signature/cbc:SignatureMethod";
82
+ const cacSignatureIdValue = "urn:oasis:names:specification:ubl:signature:Invoice";
83
+ const cacSignatureMethodValue = "urn:oasis:names:specification:ubl:dsig:enveloped:xades";
84
+ setElementValue(cacSignatureIdPath, cacSignatureIdValue);
85
+ setElementValue(cacSignatureMethodPath, cacSignatureMethodValue);
86
+ }
87
+
88
+ //#endregion
89
+ export { populateFinalDocument };
90
+ //# sourceMappingURL=populateFinalDocument-BpLXmgLv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"populateFinalDocument-BpLXmgLv.js","names":["pemCert: string","doc: Document","finalData: FinalDocumentData","xpathExpr: string","value: string","error: any"],"sources":["../src/utils/signature/populateFinalDocument.ts"],"sourcesContent":["import * as xpath from 'xpath-ts'\n\nexport interface FinalDocumentData {\n signatureValue: string // Base64 encoded RSA signature (Sig from Step 4)\n propsDigest: string // Base64 encoded hash of SignedProperties (PropsDigest from Step 7)\n docDigest: string // Base64 encoded hash of Canonicalized Document (DocDigest from Step 3)\n certificatePem: string // Signing certificate in PEM format\n}\n\n/**\n * Extracts the Base64 encoded DER certificate content from a PEM string,\n * removing headers, footers, and newlines.\n * @param pemCert The certificate in PEM format.\n * @returns The cleaned Base64 DER string.\n */\nfunction cleanCertificatePem(pemCert: string): string {\n const beginMarker = '-----BEGIN CERTIFICATE-----'\n const endMarker = '-----END CERTIFICATE-----'\n let content = pemCert\n\n const startIndex = pemCert.indexOf(beginMarker)\n const endIndex = pemCert.indexOf(endMarker)\n\n if (startIndex !== -1 && endIndex !== -1 && endIndex > startIndex) {\n content = pemCert.substring(startIndex + beginMarker.length, endIndex)\n } // else: Assume it might be just the Base64 part already, or another PEM type\n\n // Remove any remaining non-Base64 characters (newlines, etc.)\n return content.replace(/[^A-Za-z0-9+/=]/g, '')\n}\n\n/**\n * Populates the final signature information fields within the UBL document's signature structure.\n *\n * Corresponds to Step 8 in the MyInvois Signature Creation guide:\n * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-8-populate-the-information-in-the-document-to-create-the-signed-document\n *\n * Modifies the passed Document object in place.\n *\n * @param doc The XML Document object (from xmldom-ts) containing the signature structure.\n * @param finalData An object containing the final signature data to populate.\n * @throws {Error} If any target element cannot be found or if multiple are found.\n */\nexport function populateFinalDocument(\n doc: Document,\n finalData: FinalDocumentData,\n): void {\n const ns = {\n inv: 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2',\n ext: 'urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2',\n sig: 'urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2',\n sac: 'urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2',\n ds: 'http://www.w3.org/2000/09/xmldsig#',\n // No xades needed here, but cac might be needed if populating /Invoice/cac:Signature\n // cac: 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2'\n cac: 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2',\n cbc: 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2',\n }\n const select = xpath.useNamespaces(ns)\n\n // Helper function to find a single node and set its text content\n const setElementValue = (xpathExpr: string, value: string) => {\n try {\n const selectionResult = select(xpathExpr, doc) // Store the result first\n\n // Check 0: Explicitly check for null/undefined before array check\n if (selectionResult == null) {\n // Use == to catch both null and undefined\n throw new Error(\n `XPath selection returned null or undefined for: ${xpathExpr}`,\n )\n }\n\n // Check 1: Ensure it's an array (xpath.select can return other types)\n if (!Array.isArray(selectionResult)) {\n throw new Error(\n `XPath selection did not return an array for: ${xpathExpr}. Result: ${typeof selectionResult}`,\n )\n }\n\n // Check 2: Ensure exactly one node was found\n if (selectionResult.length === 0) {\n throw new Error(`Element not found for XPath: ${xpathExpr}`)\n }\n if (selectionResult.length > 1) {\n throw new Error(\n `Multiple elements found for XPath (expected 1): ${xpathExpr}`,\n )\n }\n\n // Check 3: Ensure the found item is a Node and specifically an Element node (type 1)\n const node = selectionResult[0] as Node // Assert as Node for type checking\n // Node.ELEMENT_NODE is typically 1\n if (\n !node ||\n typeof node !== 'object' ||\n !('nodeType' in node) ||\n node.nodeType !== 1\n ) {\n throw new Error(\n `Selected item is not an Element Node for XPath: ${xpathExpr}. Node details: ${JSON.stringify(node)}`,\n )\n }\n\n // Check 4: Ensure textContent can be set (should be true for element nodes)\n if ('textContent' in node) {\n // Ensure the property is writable (though typically it is for elements)\n node.textContent = value\n } else {\n // This case should technically be impossible if nodeType is 1\n throw new Error(\n `Selected Element Node does not have textContent property for XPath: ${xpathExpr}`,\n )\n }\n } catch (error: any) {\n console.error(`Error setting value for XPath ${xpathExpr}:`, error)\n // Keep the wrapping error message format consistent with tests\n throw new Error(\n `Failed to set value for XPath ${xpathExpr}: ${error.message}`,\n )\n }\n }\n\n // Helper function to check if *at least one* node exists for an XPath\n const checkElementExists = (xpathExpr: string): boolean => {\n try {\n const selectionResult = select(xpathExpr, doc)\n // Check if it's an array and has at least one element\n return Array.isArray(selectionResult) && selectionResult.length > 0\n } catch (error) {\n console.error(`Error checking existence for XPath ${xpathExpr}:`, error)\n return false // Treat errors during check as non-existent\n }\n }\n\n // Define XPaths based on UBL documentation for Step 8\n const basePath =\n '/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature'\n\n // Define XPaths for the parent Reference elements\n const propsRefPath = `${basePath}/ds:SignedInfo/ds:Reference[@URI='#id-xades-signed-props']`\n const docRefPath = `${basePath}/ds:SignedInfo/ds:Reference[@Id='id-doc-signed-data']`\n\n // Define XPaths for the target elements\n const signatureValuePath = `${basePath}/ds:SignatureValue`\n const x509CertPath = `${basePath}/ds:KeyInfo/ds:X509Data/ds:X509Certificate`\n const propsDigestPath = `${propsRefPath}/ds:DigestValue`\n const docDigestPath = `${docRefPath}/ds:DigestValue`\n\n // Populate the values, adding existence checks for Reference parents\n setElementValue(signatureValuePath, finalData.signatureValue)\n setElementValue(x509CertPath, cleanCertificatePem(finalData.certificatePem))\n\n // Check propsDigest parent before setting value\n if (!checkElementExists(propsRefPath)) {\n // Throw using the child path to match original test intent\n throw new Error(\n `Failed to set value for XPath ${propsDigestPath}: Element not found for XPath: ${propsDigestPath}`,\n )\n }\n setElementValue(propsDigestPath, finalData.propsDigest)\n\n // Check docDigest parent before setting value\n if (!checkElementExists(docRefPath)) {\n // Throw using the child path to match original test intent\n throw new Error(\n `Failed to set value for XPath ${docDigestPath}: Element not found for XPath: ${docDigestPath}`,\n )\n }\n setElementValue(docDigestPath, finalData.docDigest)\n\n // Populate the /Invoice/cac:Signature elements\n const cacSignatureIdPath = '/inv:Invoice/cac:Signature/cbc:ID'\n const cacSignatureMethodPath =\n '/inv:Invoice/cac:Signature/cbc:SignatureMethod'\n\n // Static values based on the user's example XML\n const cacSignatureIdValue =\n 'urn:oasis:names:specification:ubl:signature:Invoice'\n const cacSignatureMethodValue =\n 'urn:oasis:names:specification:ubl:dsig:enveloped:xades'\n\n setElementValue(cacSignatureIdPath, cacSignatureIdValue)\n setElementValue(cacSignatureMethodPath, cacSignatureMethodValue)\n\n // Document `doc` is modified in place.\n}\n"],"mappings":";;;;;;;;;AAeA,SAAS,oBAAoBA,SAAyB;CACpD,MAAM,cAAc;CACpB,MAAM,YAAY;CAClB,IAAI,UAAU;CAEd,MAAM,aAAa,QAAQ,QAAQ,YAAY;CAC/C,MAAM,WAAW,QAAQ,QAAQ,UAAU;AAE3C,KAAI,eAAe,MAAM,aAAa,MAAM,WAAW,WACrD,WAAU,QAAQ,UAAU,aAAa,YAAY,QAAQ,SAAS;AAIxE,QAAO,QAAQ,QAAQ,oBAAoB,GAAG;AAC/C;;;;;;;;;;;;;AAcD,SAAgB,sBACdC,KACAC,WACM;CACN,MAAM,KAAK;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,IAAI;EAGJ,KAAK;EACL,KAAK;CACN;CACD,MAAM,SAAS,MAAM,cAAc,GAAG;CAGtC,MAAM,kBAAkB,CAACC,WAAmBC,UAAkB;AAC5D,MAAI;GACF,MAAM,kBAAkB,OAAO,WAAW,IAAI;AAG9C,OAAI,mBAAmB,KAErB,OAAM,IAAI,OACP,kDAAkD,UAAU;AAKjE,QAAK,MAAM,QAAQ,gBAAgB,CACjC,OAAM,IAAI,OACP,+CAA+C,UAAU,mBAAmB,gBAAgB;AAKjG,OAAI,gBAAgB,WAAW,EAC7B,OAAM,IAAI,OAAO,+BAA+B,UAAU;AAE5D,OAAI,gBAAgB,SAAS,EAC3B,OAAM,IAAI,OACP,kDAAkD,UAAU;GAKjE,MAAM,OAAO,gBAAgB;AAE7B,QACG,eACM,SAAS,cACd,cAAc,SAChB,KAAK,aAAa,EAElB,OAAM,IAAI,OACP,kDAAkD,UAAU,kBAAkB,KAAK,UAAU,KAAK,CAAC;AAKxG,OAAI,iBAAiB,KAEnB,MAAK,cAAc;OAGnB,OAAM,IAAI,OACP,sEAAsE,UAAU;EAGtF,SAAQC,OAAY;AACnB,WAAQ,OAAO,gCAAgC,UAAU,IAAI,MAAM;AAEnE,SAAM,IAAI,OACP,gCAAgC,UAAU,IAAI,MAAM,QAAQ;EAEhE;CACF;CAGD,MAAM,qBAAqB,CAACF,cAA+B;AACzD,MAAI;GACF,MAAM,kBAAkB,OAAO,WAAW,IAAI;AAE9C,UAAO,MAAM,QAAQ,gBAAgB,IAAI,gBAAgB,SAAS;EACnE,SAAQ,OAAO;AACd,WAAQ,OAAO,qCAAqC,UAAU,IAAI,MAAM;AACxE,UAAO;EACR;CACF;CAGD,MAAM,WACJ;CAGF,MAAM,gBAAgB,EAAE,SAAS;CACjC,MAAM,cAAc,EAAE,SAAS;CAG/B,MAAM,sBAAsB,EAAE,SAAS;CACvC,MAAM,gBAAgB,EAAE,SAAS;CACjC,MAAM,mBAAmB,EAAE,aAAa;CACxC,MAAM,iBAAiB,EAAE,WAAW;AAGpC,iBAAgB,oBAAoB,UAAU,eAAe;AAC7D,iBAAgB,cAAc,oBAAoB,UAAU,eAAe,CAAC;AAG5E,MAAK,mBAAmB,aAAa,CAEnC,OAAM,IAAI,OACP,gCAAgC,gBAAgB,iCAAiC,gBAAgB;AAGtG,iBAAgB,iBAAiB,UAAU,YAAY;AAGvD,MAAK,mBAAmB,WAAW,CAEjC,OAAM,IAAI,OACP,gCAAgC,cAAc,iCAAiC,cAAc;AAGlG,iBAAgB,eAAe,UAAU,UAAU;CAGnD,MAAM,qBAAqB;CAC3B,MAAM,yBACJ;CAGF,MAAM,sBACJ;CACF,MAAM,0BACJ;AAEF,iBAAgB,oBAAoB,oBAAoB;AACxD,iBAAgB,wBAAwB,wBAAwB;AAGjE"}
@@ -0,0 +1,58 @@
1
+ const require_chunk = require('./chunk-CUT6urMc.cjs');
2
+ const xpath_ts = require_chunk.__toESM(require("xpath-ts"));
3
+
4
+ //#region src/utils/signature/populateSignedProperties.ts
5
+ /**
6
+ * Populates the SignedProperties section within the UBL document's signature structure.
7
+ *
8
+ * Corresponds to Step 6 in the MyInvois Signature Creation guide:
9
+ * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-6-populate-the-signed-properties-section
10
+ *
11
+ * Modifies the passed Document object in place.
12
+ *
13
+ * @param doc The XML Document object (from xmldom-ts) containing the signature structure.
14
+ * @param properties An object containing the data to populate.
15
+ * @throws {Error} If any target element cannot be found or if multiple are found.
16
+ */
17
+ function populateSignedProperties(doc, properties) {
18
+ const ns = {
19
+ inv: "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
20
+ ext: "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
21
+ sig: "urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2",
22
+ sac: "urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2",
23
+ ds: "http://www.w3.org/2000/09/xmldsig#",
24
+ xades: "http://uri.etsi.org/01903/v1.3.2#"
25
+ };
26
+ const select = xpath_ts.useNamespaces(ns);
27
+ const setElementValue = (xpathExpr, value) => {
28
+ try {
29
+ const nodes = select(xpathExpr, doc);
30
+ if (!Array.isArray(nodes) || nodes.length === 0) throw new Error(`Element not found for XPath: ${xpathExpr}`);
31
+ if (nodes.length > 1) throw new Error(`Multiple elements found for XPath (expected 1): ${xpathExpr}`);
32
+ const node = nodes[0];
33
+ if (node && typeof node === "object" && "textContent" in node) node.textContent = value;
34
+ else throw new Error(`Selected item is not a valid Node for XPath: ${xpathExpr}`);
35
+ } catch (error) {
36
+ console.error(`Error setting value for XPath ${xpathExpr}:`, error);
37
+ throw new Error(`Failed to set value for XPath ${xpathExpr}: ${error.message}`);
38
+ }
39
+ };
40
+ const basePath = "/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature/ds:Object/xades:QualifyingProperties/xades:SignedProperties/xades:SignedSignatureProperties";
41
+ const certDigestPath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:CertDigest/ds:DigestValue`;
42
+ const signingTimePath = `${basePath}/xades:SigningTime`;
43
+ const issuerNamePath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:IssuerSerial/ds:X509IssuerName`;
44
+ const serialNumberPath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:IssuerSerial/ds:X509SerialNumber`;
45
+ setElementValue(certDigestPath, properties.certDigest);
46
+ setElementValue(signingTimePath, properties.signingTime);
47
+ setElementValue(issuerNamePath, properties.issuerName);
48
+ setElementValue(serialNumberPath, properties.serialNumber);
49
+ }
50
+
51
+ //#endregion
52
+ Object.defineProperty(exports, 'populateSignedProperties', {
53
+ enumerable: true,
54
+ get: function () {
55
+ return populateSignedProperties;
56
+ }
57
+ });
58
+ //# sourceMappingURL=populateSignedProperties-BJMcBQ6S.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"populateSignedProperties-BJMcBQ6S.cjs","names":["doc: Document","properties: SignedPropertiesData","xpathExpr: string","value: string","error: any"],"sources":["../src/utils/signature/populateSignedProperties.ts"],"sourcesContent":["import * as xpath from 'xpath-ts'\n\nexport interface SignedPropertiesData {\n certDigest: string // Base64 encoded SHA-256 hash of certificate (Step 5)\n signingTime: string // ISO 8601 UTC timestamp string (e.g., 2023-10-26T10:30:00Z)\n issuerName: string // Certificate Issuer Name\n serialNumber: string // Certificate Serial Number\n}\n\n/**\n * Populates the SignedProperties section within the UBL document's signature structure.\n *\n * Corresponds to Step 6 in the MyInvois Signature Creation guide:\n * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-6-populate-the-signed-properties-section\n *\n * Modifies the passed Document object in place.\n *\n * @param doc The XML Document object (from xmldom-ts) containing the signature structure.\n * @param properties An object containing the data to populate.\n * @throws {Error} If any target element cannot be found or if multiple are found.\n */\nexport function populateSignedProperties(\n doc: Document,\n properties: SignedPropertiesData,\n): void {\n // Define namespaces used in the XPaths\n const ns = {\n inv: 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2', // Define prefix for default NS\n ext: 'urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2',\n sig: 'urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2',\n sac: 'urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2',\n ds: 'http://www.w3.org/2000/09/xmldsig#',\n xades: 'http://uri.etsi.org/01903/v1.3.2#', // Common XAdES namespace\n }\n const select = xpath.useNamespaces(ns)\n\n // Helper function to find a single node and set its text content\n const setElementValue = (xpathExpr: string, value: string) => {\n try {\n const nodes = select(xpathExpr, doc)\n\n // Refine check: Explicitly look for an empty array result\n if (!Array.isArray(nodes) || nodes.length === 0) {\n throw new Error(`Element not found for XPath: ${xpathExpr}`)\n }\n if (nodes.length > 1) {\n throw new Error(\n `Multiple elements found for XPath (expected 1): ${xpathExpr}`,\n )\n }\n\n const node = nodes[0]\n\n // Ensure it's a valid Node (like Element or Attr) before setting textContent\n if (node && typeof node === 'object' && 'textContent' in node) {\n // Type assertion might be needed if TS struggles with union type from select\n ;(node as Node).textContent = value\n } else {\n throw new Error(\n `Selected item is not a valid Node for XPath: ${xpathExpr}`,\n )\n }\n } catch (error: any) {\n console.error(`Error setting value for XPath ${xpathExpr}:`, error)\n // Re-throw to indicate failure to populate\n throw new Error(\n `Failed to set value for XPath ${xpathExpr}: ${error.message}`,\n )\n }\n }\n\n // Define XPaths based on UBL documentation\n // Use the defined prefix 'inv' for the root Invoice element\n const basePath =\n '/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature/ds:Object/xades:QualifyingProperties/xades:SignedProperties/xades:SignedSignatureProperties'\n\n const certDigestPath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:CertDigest/ds:DigestValue`\n const signingTimePath = `${basePath}/xades:SigningTime`\n const issuerNamePath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:IssuerSerial/ds:X509IssuerName`\n const serialNumberPath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:IssuerSerial/ds:X509SerialNumber`\n\n // Populate the values\n setElementValue(certDigestPath, properties.certDigest)\n setElementValue(signingTimePath, properties.signingTime)\n setElementValue(issuerNamePath, properties.issuerName)\n setElementValue(serialNumberPath, properties.serialNumber)\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAqBA,SAAgB,yBACdA,KACAC,YACM;CAEN,MAAM,KAAK;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,IAAI;EACJ,OAAO;CACR;CACD,MAAM,SAAS,SAAM,cAAc,GAAG;CAGtC,MAAM,kBAAkB,CAACC,WAAmBC,UAAkB;AAC5D,MAAI;GACF,MAAM,QAAQ,OAAO,WAAW,IAAI;AAGpC,QAAK,MAAM,QAAQ,MAAM,IAAI,MAAM,WAAW,EAC5C,OAAM,IAAI,OAAO,+BAA+B,UAAU;AAE5D,OAAI,MAAM,SAAS,EACjB,OAAM,IAAI,OACP,kDAAkD,UAAU;GAIjE,MAAM,OAAO,MAAM;AAGnB,OAAI,eAAe,SAAS,YAAY,iBAAiB,KAEtD,CAAC,KAAc,cAAc;OAE9B,OAAM,IAAI,OACP,+CAA+C,UAAU;EAG/D,SAAQC,OAAY;AACnB,WAAQ,OAAO,gCAAgC,UAAU,IAAI,MAAM;AAEnE,SAAM,IAAI,OACP,gCAAgC,UAAU,IAAI,MAAM,QAAQ;EAEhE;CACF;CAID,MAAM,WACJ;CAEF,MAAM,kBAAkB,EAAE,SAAS;CACnC,MAAM,mBAAmB,EAAE,SAAS;CACpC,MAAM,kBAAkB,EAAE,SAAS;CACnC,MAAM,oBAAoB,EAAE,SAAS;AAGrC,iBAAgB,gBAAgB,WAAW,WAAW;AACtD,iBAAgB,iBAAiB,WAAW,YAAY;AACxD,iBAAgB,gBAAgB,WAAW,WAAW;AACtD,iBAAgB,kBAAkB,WAAW,aAAa;AAC3D"}
@@ -0,0 +1,52 @@
1
+ import * as xpath from "xpath-ts";
2
+
3
+ //#region src/utils/signature/populateSignedProperties.ts
4
+ /**
5
+ * Populates the SignedProperties section within the UBL document's signature structure.
6
+ *
7
+ * Corresponds to Step 6 in the MyInvois Signature Creation guide:
8
+ * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-6-populate-the-signed-properties-section
9
+ *
10
+ * Modifies the passed Document object in place.
11
+ *
12
+ * @param doc The XML Document object (from xmldom-ts) containing the signature structure.
13
+ * @param properties An object containing the data to populate.
14
+ * @throws {Error} If any target element cannot be found or if multiple are found.
15
+ */
16
+ function populateSignedProperties(doc, properties) {
17
+ const ns = {
18
+ inv: "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
19
+ ext: "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
20
+ sig: "urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2",
21
+ sac: "urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2",
22
+ ds: "http://www.w3.org/2000/09/xmldsig#",
23
+ xades: "http://uri.etsi.org/01903/v1.3.2#"
24
+ };
25
+ const select = xpath.useNamespaces(ns);
26
+ const setElementValue = (xpathExpr, value) => {
27
+ try {
28
+ const nodes = select(xpathExpr, doc);
29
+ if (!Array.isArray(nodes) || nodes.length === 0) throw new Error(`Element not found for XPath: ${xpathExpr}`);
30
+ if (nodes.length > 1) throw new Error(`Multiple elements found for XPath (expected 1): ${xpathExpr}`);
31
+ const node = nodes[0];
32
+ if (node && typeof node === "object" && "textContent" in node) node.textContent = value;
33
+ else throw new Error(`Selected item is not a valid Node for XPath: ${xpathExpr}`);
34
+ } catch (error) {
35
+ console.error(`Error setting value for XPath ${xpathExpr}:`, error);
36
+ throw new Error(`Failed to set value for XPath ${xpathExpr}: ${error.message}`);
37
+ }
38
+ };
39
+ const basePath = "/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature/ds:Object/xades:QualifyingProperties/xades:SignedProperties/xades:SignedSignatureProperties";
40
+ const certDigestPath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:CertDigest/ds:DigestValue`;
41
+ const signingTimePath = `${basePath}/xades:SigningTime`;
42
+ const issuerNamePath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:IssuerSerial/ds:X509IssuerName`;
43
+ const serialNumberPath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:IssuerSerial/ds:X509SerialNumber`;
44
+ setElementValue(certDigestPath, properties.certDigest);
45
+ setElementValue(signingTimePath, properties.signingTime);
46
+ setElementValue(issuerNamePath, properties.issuerName);
47
+ setElementValue(serialNumberPath, properties.serialNumber);
48
+ }
49
+
50
+ //#endregion
51
+ export { populateSignedProperties };
52
+ //# sourceMappingURL=populateSignedProperties-BvGN-YZH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"populateSignedProperties-BvGN-YZH.js","names":["doc: Document","properties: SignedPropertiesData","xpathExpr: string","value: string","error: any"],"sources":["../src/utils/signature/populateSignedProperties.ts"],"sourcesContent":["import * as xpath from 'xpath-ts'\n\nexport interface SignedPropertiesData {\n certDigest: string // Base64 encoded SHA-256 hash of certificate (Step 5)\n signingTime: string // ISO 8601 UTC timestamp string (e.g., 2023-10-26T10:30:00Z)\n issuerName: string // Certificate Issuer Name\n serialNumber: string // Certificate Serial Number\n}\n\n/**\n * Populates the SignedProperties section within the UBL document's signature structure.\n *\n * Corresponds to Step 6 in the MyInvois Signature Creation guide:\n * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-6-populate-the-signed-properties-section\n *\n * Modifies the passed Document object in place.\n *\n * @param doc The XML Document object (from xmldom-ts) containing the signature structure.\n * @param properties An object containing the data to populate.\n * @throws {Error} If any target element cannot be found or if multiple are found.\n */\nexport function populateSignedProperties(\n doc: Document,\n properties: SignedPropertiesData,\n): void {\n // Define namespaces used in the XPaths\n const ns = {\n inv: 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2', // Define prefix for default NS\n ext: 'urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2',\n sig: 'urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2',\n sac: 'urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2',\n ds: 'http://www.w3.org/2000/09/xmldsig#',\n xades: 'http://uri.etsi.org/01903/v1.3.2#', // Common XAdES namespace\n }\n const select = xpath.useNamespaces(ns)\n\n // Helper function to find a single node and set its text content\n const setElementValue = (xpathExpr: string, value: string) => {\n try {\n const nodes = select(xpathExpr, doc)\n\n // Refine check: Explicitly look for an empty array result\n if (!Array.isArray(nodes) || nodes.length === 0) {\n throw new Error(`Element not found for XPath: ${xpathExpr}`)\n }\n if (nodes.length > 1) {\n throw new Error(\n `Multiple elements found for XPath (expected 1): ${xpathExpr}`,\n )\n }\n\n const node = nodes[0]\n\n // Ensure it's a valid Node (like Element or Attr) before setting textContent\n if (node && typeof node === 'object' && 'textContent' in node) {\n // Type assertion might be needed if TS struggles with union type from select\n ;(node as Node).textContent = value\n } else {\n throw new Error(\n `Selected item is not a valid Node for XPath: ${xpathExpr}`,\n )\n }\n } catch (error: any) {\n console.error(`Error setting value for XPath ${xpathExpr}:`, error)\n // Re-throw to indicate failure to populate\n throw new Error(\n `Failed to set value for XPath ${xpathExpr}: ${error.message}`,\n )\n }\n }\n\n // Define XPaths based on UBL documentation\n // Use the defined prefix 'inv' for the root Invoice element\n const basePath =\n '/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature/ds:Object/xades:QualifyingProperties/xades:SignedProperties/xades:SignedSignatureProperties'\n\n const certDigestPath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:CertDigest/ds:DigestValue`\n const signingTimePath = `${basePath}/xades:SigningTime`\n const issuerNamePath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:IssuerSerial/ds:X509IssuerName`\n const serialNumberPath = `${basePath}/xades:SigningCertificate/xades:Cert/xades:IssuerSerial/ds:X509SerialNumber`\n\n // Populate the values\n setElementValue(certDigestPath, properties.certDigest)\n setElementValue(signingTimePath, properties.signingTime)\n setElementValue(issuerNamePath, properties.issuerName)\n setElementValue(serialNumberPath, properties.serialNumber)\n}\n"],"mappings":";;;;;;;;;;;;;;;AAqBA,SAAgB,yBACdA,KACAC,YACM;CAEN,MAAM,KAAK;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,IAAI;EACJ,OAAO;CACR;CACD,MAAM,SAAS,MAAM,cAAc,GAAG;CAGtC,MAAM,kBAAkB,CAACC,WAAmBC,UAAkB;AAC5D,MAAI;GACF,MAAM,QAAQ,OAAO,WAAW,IAAI;AAGpC,QAAK,MAAM,QAAQ,MAAM,IAAI,MAAM,WAAW,EAC5C,OAAM,IAAI,OAAO,+BAA+B,UAAU;AAE5D,OAAI,MAAM,SAAS,EACjB,OAAM,IAAI,OACP,kDAAkD,UAAU;GAIjE,MAAM,OAAO,MAAM;AAGnB,OAAI,eAAe,SAAS,YAAY,iBAAiB,KAEtD,CAAC,KAAc,cAAc;OAE9B,OAAM,IAAI,OACP,+CAA+C,UAAU;EAG/D,SAAQC,OAAY;AACnB,WAAQ,OAAO,gCAAgC,UAAU,IAAI,MAAM;AAEnE,SAAM,IAAI,OACP,gCAAgC,UAAU,IAAI,MAAM,QAAQ;EAEhE;CACF;CAID,MAAM,WACJ;CAEF,MAAM,kBAAkB,EAAE,SAAS;CACnC,MAAM,mBAAmB,EAAE,SAAS;CACpC,MAAM,kBAAkB,EAAE,SAAS;CACnC,MAAM,oBAAoB,EAAE,SAAS;AAGrC,iBAAgB,gBAAgB,WAAW,WAAW;AACtD,iBAAgB,iBAAiB,WAAW,YAAY;AACxD,iBAAgB,gBAAgB,WAAW,WAAW;AACtD,iBAAgB,kBAAkB,WAAW,aAAa;AAC3D"}