@ripwords/myinvois-client 0.0.10 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/README.md +128 -4
  3. package/bun.lock +138 -122
  4. package/dist/0X-CG1S1WKn.d.ts +210 -0
  5. package/dist/0X-ChfmeAYF.d.cts +211 -0
  6. package/dist/1X-CmlbG02M.d.ts +111 -0
  7. package/dist/1X-DFikQbP0.d.cts +20 -0
  8. package/dist/1X-DbFshzup.d.ts +19 -0
  9. package/dist/1X-jFrFCOs0.d.cts +112 -0
  10. package/dist/2X-5cE4ojEX.d.cts +140 -0
  11. package/dist/2X-DA6J6Wd7.d.ts +139 -0
  12. package/dist/2X-FWZ1rYVt.d.cts +40 -0
  13. package/dist/2X-eC_p0QJf.d.ts +39 -0
  14. package/dist/3X-D9duw0Ro.d.cts +21 -0
  15. package/dist/3X-DbfkwdkO.d.ts +20 -0
  16. package/dist/3X-GxuN79Ax.d.ts +61 -0
  17. package/dist/3X-r9xbWJ2l.d.cts +62 -0
  18. package/dist/4X-1ZkK-uH5.d.cts +31 -0
  19. package/dist/4X-CLO9OuKa.d.cts +265 -0
  20. package/dist/4X-CnHtgO6u.d.ts +30 -0
  21. package/dist/4X-DYz_nYSD.d.ts +264 -0
  22. package/dist/5X-BzPEdkbC.d.ts +21 -0
  23. package/dist/5X-BziH0a09.d.cts +77 -0
  24. package/dist/5X-Cfe39fFc.d.cts +22 -0
  25. package/dist/5X-kBF74qx1.d.ts +76 -0
  26. package/dist/6X-BceErbps.d.cts +105 -0
  27. package/dist/6X-C_xpeu6J.d.ts +15 -0
  28. package/dist/6X-DLWEe1bP.d.cts +16 -0
  29. package/dist/6X-sQZfT0ZK.d.ts +104 -0
  30. package/dist/7X-Bet2agJ6.d.ts +15 -0
  31. package/dist/7X-BoKQxMoO.d.ts +70 -0
  32. package/dist/7X-CucHYQsA.d.cts +16 -0
  33. package/dist/7X-CwPAqozm.d.cts +71 -0
  34. package/dist/8X-BIjJ9kaV.d.cts +110 -0
  35. package/dist/8X-BOEWATU3.d.ts +109 -0
  36. package/dist/8X-CJpqd5xp.d.cts +19 -0
  37. package/dist/8X-s5AzkHR-.d.ts +18 -0
  38. package/dist/9X-BBDP1gZ6.d.ts +14 -0
  39. package/dist/9X-CP5Xp6bE.d.cts +98 -0
  40. package/dist/9X-D3aOVCnz.d.cts +15 -0
  41. package/dist/9X-DAAZV4sr.d.ts +97 -0
  42. package/dist/AX-CmpMMhII.d.ts +110 -0
  43. package/dist/AX-DFzpxGOT.d.cts +111 -0
  44. package/dist/BX-CyiqNE6b.d.cts +115 -0
  45. package/dist/BX-j78z_ju_.d.ts +114 -0
  46. package/dist/CX-B6rEhQx7.d.ts +127 -0
  47. package/dist/CX-BTPvC3Dv.d.cts +128 -0
  48. package/dist/DX-BD4-hTCh.d.cts +115 -0
  49. package/dist/DX-CAmMnx5a.d.ts +114 -0
  50. package/dist/EX-CXhSC85J.d.ts +106 -0
  51. package/dist/EX-mTHCH0Yk.d.cts +107 -0
  52. package/dist/FX-DOOMoQl2.d.cts +127 -0
  53. package/dist/FX-DYVIJ3l0.d.ts +126 -0
  54. package/dist/GX-8URJ7WHz.d.cts +136 -0
  55. package/dist/GX-eBOVHqi6.d.ts +135 -0
  56. package/dist/HX-49z8CzsE.d.cts +126 -0
  57. package/dist/HX-Dz5T0xXI.d.ts +125 -0
  58. package/dist/IX-B6kblmBs.d.cts +23 -0
  59. package/dist/IX-PiKYro5a.d.ts +22 -0
  60. package/dist/JX-DMwHLGEE.d.cts +104 -0
  61. package/dist/JX-Dvnt0mSK.d.ts +103 -0
  62. package/dist/KX-BUb8e0yg.d.ts +150 -0
  63. package/dist/KX-DaJPkefl.d.cts +151 -0
  64. package/dist/LX-BnILxjdS.d.cts +123 -0
  65. package/dist/LX-l5ZBaGov.d.ts +122 -0
  66. package/dist/MX-BbPO8mTj.d.cts +153 -0
  67. package/dist/MX-C7C15AWi.d.ts +152 -0
  68. package/dist/NX-C7nFVC-D.d.ts +121 -0
  69. package/dist/NX-xy5uw7H3.d.cts +122 -0
  70. package/dist/OX-CIzARbON.d.cts +26 -0
  71. package/dist/OX-Dmkvcaij.d.ts +25 -0
  72. package/dist/PX-BKZ14N7N.d.ts +120 -0
  73. package/dist/PX-CL8waFgx.d.cts +121 -0
  74. package/dist/QX-6xdSNtxZ.d.ts +58 -0
  75. package/dist/QX-BowAYqZb.d.cts +59 -0
  76. package/dist/RX-DFoiOK5q.d.ts +22 -0
  77. package/dist/RX-fWoWcHTG.d.cts +23 -0
  78. package/dist/SX-CZ3e31OT.d.cts +40 -0
  79. package/dist/SX-D-Szi9wa.d.ts +39 -0
  80. package/dist/TX-CJhJ-HYX.d.cts +31 -0
  81. package/dist/TX-DTfkGsqn.d.ts +30 -0
  82. package/dist/UX-Bw4HHAj4.d.ts +17 -0
  83. package/dist/UX-P7-u2y70.d.cts +18 -0
  84. package/dist/VX-C8Eu5gQf.d.cts +17 -0
  85. package/dist/VX-DCv5x_hi.d.ts +16 -0
  86. package/dist/WX-BYtJ5_if.d.ts +25 -0
  87. package/dist/WX-DkiaqB2V.d.cts +26 -0
  88. package/dist/XX-D4p4iK-a.d.cts +828 -0
  89. package/dist/XX-Jo1yJO3A.d.ts +827 -0
  90. package/dist/YX-BvGmEsVG.d.ts +19 -0
  91. package/dist/YX-Du8zv9qz.d.cts +20 -0
  92. package/dist/ZX-B4jFD-21.d.cts +22 -0
  93. package/dist/ZX-B59AJcBY.d.ts +21 -0
  94. package/dist/api/platform/platformLogin.d.ts +65 -0
  95. package/dist/api/platform/platformLogin.js +3 -0
  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/chunk-CUT6urMc.cjs +30 -0
  100. package/dist/classification-codes-B15PbWxz.d.cts +118 -0
  101. package/dist/classification-codes-BKxV-rO9.d.ts +117 -0
  102. package/dist/country-code-CQuaiQm2.d.ts +542 -0
  103. package/dist/country-code-DPeNFMMi.d.cts +543 -0
  104. package/dist/currencies-BYJK-m6v.d.ts +207 -0
  105. package/dist/currencies-S5g1gzBU.d.cts +208 -0
  106. package/dist/document-DMIMRJV0.cjs +472 -0
  107. package/dist/document-DMIMRJV0.cjs.map +1 -0
  108. package/dist/document-NQos5fSr.js +405 -0
  109. package/dist/documents-BVG7KIKY.d.ts +847 -0
  110. package/dist/documents-C066EC9m.d.cts +848 -0
  111. package/dist/e-invoice-BuwtFnlI.d.cts +44 -0
  112. package/dist/e-invoice-CmbLQkHw.d.ts +43 -0
  113. package/dist/getBaseUrl-CO7Jp27d.cjs +14 -0
  114. package/dist/getBaseUrl-CO7Jp27d.cjs.map +1 -0
  115. package/dist/getBaseUrl-R3IdgCu3.js +7 -0
  116. package/dist/index-0-EvC6Nv.d.ts +15 -0
  117. package/dist/index-D2_HVwCz.d.cts +16 -0
  118. package/dist/index.cjs +256 -50
  119. package/dist/index.cjs.map +1 -1
  120. package/dist/index.d.ts +232 -5665
  121. package/dist/index.js +253 -46
  122. package/dist/index10.cjs +0 -0
  123. package/dist/index11.cjs +34 -0
  124. package/dist/index11.cjs.map +1 -0
  125. package/dist/index12.cjs +24 -0
  126. package/dist/index12.cjs.map +1 -0
  127. package/dist/index13.cjs +0 -0
  128. package/dist/index14.cjs +13 -0
  129. package/dist/index14.cjs.map +1 -0
  130. package/dist/index15.cjs +4 -0
  131. package/dist/index16.cjs +13 -0
  132. package/dist/index17.cjs +3 -0
  133. package/dist/index18.cjs +340 -0
  134. package/dist/index18.cjs.map +1 -0
  135. package/dist/index19.cjs +329 -0
  136. package/dist/index19.cjs.map +1 -0
  137. package/dist/index2.cjs +62 -0
  138. package/dist/index2.cjs.map +1 -0
  139. package/dist/index20.cjs +140 -0
  140. package/dist/index20.cjs.map +1 -0
  141. package/dist/index21.cjs +3 -0
  142. package/dist/index22.cjs +208 -0
  143. package/dist/index22.cjs.map +1 -0
  144. package/dist/index23.cjs +109 -0
  145. package/dist/index23.cjs.map +1 -0
  146. package/dist/index24.cjs +137 -0
  147. package/dist/index24.cjs.map +1 -0
  148. package/dist/index25.cjs +64 -0
  149. package/dist/index25.cjs.map +1 -0
  150. package/dist/index26.cjs +267 -0
  151. package/dist/index26.cjs.map +1 -0
  152. package/dist/index27.cjs +79 -0
  153. package/dist/index27.cjs.map +1 -0
  154. package/dist/index28.cjs +107 -0
  155. package/dist/index28.cjs.map +1 -0
  156. package/dist/index29.cjs +73 -0
  157. package/dist/index29.cjs.map +1 -0
  158. package/dist/index3.cjs +532 -0
  159. package/dist/index3.cjs.map +1 -0
  160. package/dist/index30.cjs +112 -0
  161. package/dist/index30.cjs.map +1 -0
  162. package/dist/index31.cjs +100 -0
  163. package/dist/index31.cjs.map +1 -0
  164. package/dist/index32.cjs +18 -0
  165. package/dist/index32.cjs.map +1 -0
  166. package/dist/index33.cjs +38 -0
  167. package/dist/index33.cjs.map +1 -0
  168. package/dist/index34.cjs +19 -0
  169. package/dist/index34.cjs.map +1 -0
  170. package/dist/index35.cjs +29 -0
  171. package/dist/index35.cjs.map +1 -0
  172. package/dist/index36.cjs +20 -0
  173. package/dist/index36.cjs.map +1 -0
  174. package/dist/index37.cjs +14 -0
  175. package/dist/index37.cjs.map +1 -0
  176. package/dist/index38.cjs +14 -0
  177. package/dist/index38.cjs.map +1 -0
  178. package/dist/index39.cjs +17 -0
  179. package/dist/index39.cjs.map +1 -0
  180. package/dist/index4.cjs +196 -0
  181. package/dist/index4.cjs.map +1 -0
  182. package/dist/index40.cjs +13 -0
  183. package/dist/index40.cjs.map +1 -0
  184. package/dist/index41.cjs +108 -0
  185. package/dist/index41.cjs.map +1 -0
  186. package/dist/index42.cjs +113 -0
  187. package/dist/index42.cjs.map +1 -0
  188. package/dist/index43.cjs +126 -0
  189. package/dist/index43.cjs.map +1 -0
  190. package/dist/index44.cjs +113 -0
  191. package/dist/index44.cjs.map +1 -0
  192. package/dist/index45.cjs +105 -0
  193. package/dist/index45.cjs.map +1 -0
  194. package/dist/index46.cjs +125 -0
  195. package/dist/index46.cjs.map +1 -0
  196. package/dist/index47.cjs +134 -0
  197. package/dist/index47.cjs.map +1 -0
  198. package/dist/index48.cjs +124 -0
  199. package/dist/index48.cjs.map +1 -0
  200. package/dist/index49.cjs +21 -0
  201. package/dist/index49.cjs.map +1 -0
  202. package/dist/index5.cjs +0 -0
  203. package/dist/index50.cjs +102 -0
  204. package/dist/index50.cjs.map +1 -0
  205. package/dist/index51.cjs +149 -0
  206. package/dist/index51.cjs.map +1 -0
  207. package/dist/index52.cjs +121 -0
  208. package/dist/index52.cjs.map +1 -0
  209. package/dist/index53.cjs +151 -0
  210. package/dist/index53.cjs.map +1 -0
  211. package/dist/index54.cjs +120 -0
  212. package/dist/index54.cjs.map +1 -0
  213. package/dist/index55.cjs +24 -0
  214. package/dist/index55.cjs.map +1 -0
  215. package/dist/index56.cjs +119 -0
  216. package/dist/index56.cjs.map +1 -0
  217. package/dist/index57.cjs +54 -0
  218. package/dist/index57.cjs.map +1 -0
  219. package/dist/index58.cjs +21 -0
  220. package/dist/index58.cjs.map +1 -0
  221. package/dist/index58.cts.map +1 -0
  222. package/dist/index59.cjs +35 -0
  223. package/dist/index59.cjs.map +1 -0
  224. package/dist/index59.cts.map +1 -0
  225. package/dist/index6.cjs +25 -0
  226. package/dist/index6.cjs.map +1 -0
  227. package/dist/index60.cjs +29 -0
  228. package/dist/index60.cjs.map +1 -0
  229. package/dist/index60.cts.map +1 -0
  230. package/dist/index61.cjs +16 -0
  231. package/dist/index61.cjs.map +1 -0
  232. package/dist/index61.cts.map +1 -0
  233. package/dist/index62.cjs +15 -0
  234. package/dist/index62.cjs.map +1 -0
  235. package/dist/index62.cts.map +1 -0
  236. package/dist/index63.cjs +24 -0
  237. package/dist/index63.cjs.map +1 -0
  238. package/dist/index63.cts.map +1 -0
  239. package/dist/index64.cjs +419 -0
  240. package/dist/index64.cjs.map +1 -0
  241. package/dist/index64.cts.map +1 -0
  242. package/dist/index65.cjs +15 -0
  243. package/dist/index65.cjs.map +1 -0
  244. package/dist/index65.cts.map +1 -0
  245. package/dist/index66.cjs +16 -0
  246. package/dist/index66.cjs.map +1 -0
  247. package/dist/index66.cts.map +1 -0
  248. package/dist/index7.cjs +0 -0
  249. package/dist/index8.cjs +0 -0
  250. package/dist/index9.cjs +25 -0
  251. package/dist/index9.cjs.map +1 -0
  252. package/dist/msic-codes-CPWVNnpq.d.cts +26 -0
  253. package/dist/msic-codes-DToUqTI6.d.ts +25 -0
  254. package/dist/payment-modes-DA7uBIGb.d.ts +43 -0
  255. package/dist/payment-modes-FX88uyhP.d.cts +44 -0
  256. package/dist/platformLogin-PGzMhw1X.cjs +37 -0
  257. package/dist/platformLogin-PGzMhw1X.cjs.map +1 -0
  258. package/dist/platformLogin-f0bNAoZI.js +30 -0
  259. package/dist/signatures-BKi9DP2K.d.cts +173 -0
  260. package/dist/signatures-CG175mpg.d.ts +172 -0
  261. package/dist/state-codes-CNp_6051.d.cts +62 -0
  262. package/dist/state-codes-dvoTe5pC.d.ts +61 -0
  263. package/dist/tax-types-CgwxONDS.d.cts +42 -0
  264. package/dist/tax-types-tosH5I0q.d.ts +41 -0
  265. package/dist/types/classification-codes.d.ts +2 -0
  266. package/dist/types/country-code.d.ts +2 -0
  267. package/dist/types/currencies.d.ts +2 -0
  268. package/dist/types/documents.d.ts +7 -0
  269. package/dist/types/e-invoice.d.ts +2 -0
  270. package/dist/types/index.d.ts +58 -0
  271. package/dist/types/msic/0X.d.ts +2 -0
  272. package/dist/types/msic/1X.d.ts +2 -0
  273. package/dist/types/msic/2X.d.ts +2 -0
  274. package/dist/types/msic/3X.d.ts +2 -0
  275. package/dist/types/msic/4X.d.ts +2 -0
  276. package/dist/types/msic/5X.d.ts +2 -0
  277. package/dist/types/msic/6X.d.ts +2 -0
  278. package/dist/types/msic/7X.d.ts +2 -0
  279. package/dist/types/msic/8X.d.ts +2 -0
  280. package/dist/types/msic/9X.d.ts +2 -0
  281. package/dist/types/msic-codes.d.ts +12 -0
  282. package/dist/types/payment-modes.d.ts +2 -0
  283. package/dist/types/signatures.d.ts +2 -0
  284. package/dist/types/state-codes.d.ts +2 -0
  285. package/dist/types/tax-types.d.ts +2 -0
  286. package/dist/types/unit/1X.d.ts +2 -0
  287. package/dist/types/unit/2X.d.ts +2 -0
  288. package/dist/types/unit/3X.d.ts +2 -0
  289. package/dist/types/unit/4X.d.ts +2 -0
  290. package/dist/types/unit/5X.d.ts +2 -0
  291. package/dist/types/unit/6X.d.ts +2 -0
  292. package/dist/types/unit/7X.d.ts +2 -0
  293. package/dist/types/unit/8X.d.ts +2 -0
  294. package/dist/types/unit/9X.d.ts +2 -0
  295. package/dist/types/unit/AX.d.ts +2 -0
  296. package/dist/types/unit/BX.d.ts +2 -0
  297. package/dist/types/unit/CX.d.ts +2 -0
  298. package/dist/types/unit/DX.d.ts +2 -0
  299. package/dist/types/unit/EX.d.ts +2 -0
  300. package/dist/types/unit/FX.d.ts +2 -0
  301. package/dist/types/unit/GX.d.ts +2 -0
  302. package/dist/types/unit/HX.d.ts +2 -0
  303. package/dist/types/unit/IX.d.ts +2 -0
  304. package/dist/types/unit/JX.d.ts +2 -0
  305. package/dist/types/unit/KX.d.ts +2 -0
  306. package/dist/types/unit/LX.d.ts +2 -0
  307. package/dist/types/unit/MX.d.ts +2 -0
  308. package/dist/types/unit/NX.d.ts +2 -0
  309. package/dist/types/unit/OX.d.ts +2 -0
  310. package/dist/types/unit/PX.d.ts +2 -0
  311. package/dist/types/unit/QX.d.ts +2 -0
  312. package/dist/types/unit/RX.d.ts +2 -0
  313. package/dist/types/unit/SX.d.ts +2 -0
  314. package/dist/types/unit/TX.d.ts +2 -0
  315. package/dist/types/unit/UX.d.ts +2 -0
  316. package/dist/types/unit/VX.d.ts +2 -0
  317. package/dist/types/unit/WX.d.ts +2 -0
  318. package/dist/types/unit/XX.d.ts +2 -0
  319. package/dist/types/unit/YX.d.ts +2 -0
  320. package/dist/types/unit/ZX.d.ts +2 -0
  321. package/dist/types/unit-types.d.ts +37 -0
  322. package/dist/unit-types-BKZxwVYQ.d.ts +55 -0
  323. package/dist/unit-types-CaOA5ZDG.d.cts +56 -0
  324. package/dist/utils/base64.d.ts +5 -0
  325. package/dist/utils/base64.js +10 -0
  326. package/dist/utils/certificate.d.ts +22 -0
  327. package/dist/utils/certificate.js +3 -0
  328. package/dist/utils/document.d.ts +135 -0
  329. package/dist/utils/document.js +3 -0
  330. package/dist/utils/getBaseUrl.d.ts +4 -0
  331. package/dist/utils/getBaseUrl.js +3 -0
  332. package/dist/utils/helpers.d.ts +271 -0
  333. package/dist/utils/helpers.js +330 -0
  334. package/dist/utils/signature-diagnostics.d.ts +93 -0
  335. package/dist/utils/signature-diagnostics.js +326 -0
  336. package/dist/utils/validation.d.ts +46 -0
  337. package/dist/utils/validation.js +134 -0
  338. package/myinvois-cert.conf.template +23 -0
  339. package/package.json +20 -7
  340. package/scripts/gen-cert.sh +159 -0
  341. package/src/api/platform/platformLogin.ts +7 -2
  342. package/src/index.ts +528 -1
  343. package/src/types/documents.d.ts +862 -0
  344. package/src/types/index.d.ts +1 -1
  345. package/src/types/msic-codes.d.ts +1 -7
  346. package/src/utils/base64.ts +7 -0
  347. package/src/utils/certificate.ts +60 -0
  348. package/src/utils/document.ts +852 -0
  349. package/src/utils/getBaseUrl.ts +1 -1
  350. package/src/utils/helpers.ts +552 -0
  351. package/src/utils/signature-diagnostics.ts +583 -0
  352. package/src/utils/validation.ts +268 -0
  353. package/test/MyInvoiClientWithRealData.test.ts +11 -2
  354. package/test/MyInvoisClient.test.ts +23 -9
  355. package/test/base64.test.ts +43 -0
  356. package/test/dynamicInvoiceFeatures.test.ts +449 -0
  357. package/test/signAndSubmitInvoice.test.ts +450 -0
  358. package/test/signature-diagnostics.test.ts +128 -0
  359. package/tsconfig.json +4 -1
  360. package/tsdown.config.ts +31 -0
  361. package/rolldown.config.ts +0 -26
  362. package/src/types/documents/index.d.ts +0 -1
  363. package/src/types/documents/invoice-1_1.d.ts +0 -349
  364. package/src/utils/MyInvoisClient.ts +0 -88
@@ -1,349 +0,0 @@
1
- import type { EInvoiceTypeCode } from '../e-invoice.d.ts'
2
- import type { CurrencyCode } from '../currencies.d.ts'
3
- import type { IssuerDigitalSignature } from '../signatures.d.ts'
4
- import type { TaxTypeCode } from '../tax-types.d.ts'
5
- import type { CountryCode } from '../country-code.d.ts'
6
- import type { ClassificationCode } from '../classification-codes.d.ts'
7
- import type { UnitTypeCode } from '../unit-types.d.ts'
8
- import type { PaymentModeCode } from '../payment-modes.d.ts'
9
-
10
- // Based on https://sdk.myinvois.hasil.gov.my/documents/invoice-v1-1/
11
-
12
- /**
13
- * Represents a physical address.
14
- * Based on the Address section of the documentation.
15
- */
16
- export interface Address {
17
- /** Main address line. Max 150 chars.
18
- * @example Lot 66
19
- */
20
- addressLine0: string
21
- /** Additional address line. Max 150 chars.
22
- * @example Bangunan Merdeka
23
- */
24
- addressLine1?: string
25
- /** Additional address line. Max 150 chars.
26
- * @example Persiaran Jaya
27
- */
28
- addressLine2?: string
29
- /** Postal code. Max 50 chars.
30
- * @example 50480
31
- */
32
- postalZone?: string
33
- /** City name. Max 50 chars. */
34
- cityName: string
35
- /** State code. Refer to /codes/state-codes/. Max 50 chars. */
36
- state: string
37
- /** Country code (ISO 3166-1). Refer to /codes/countries/. Max 3 chars. */
38
- country: string // MYS
39
- }
40
-
41
- /**
42
- * Represents the supplier information.
43
- * Based on the Supplier section of the documentation.
44
- */
45
- export interface Supplier {
46
- /** Supplier's name. Max 300 chars.
47
- * @example Test Supplier Sdn Bhd
48
- */
49
- name: string
50
- /** Supplier's Tax Identification Number (TIN). Max 14 chars.
51
- * @example 1234567890
52
- */
53
- tin: string
54
- /**
55
- * Supplier's Registration / Identification Number / Passport Number.
56
- * Format depends on schemeID: NRIC (12), BRN (20), PASSPORT (12), ARMY (12).
57
- * @example BRN: 202001234567
58
- */
59
- registrationNumber: string
60
- /** Supplier's SST registration number. Max 35 chars. "NA" if not applicable/available.
61
- * @example W10-1808-32000059
62
- */
63
- sstRegistrationNumber?: string
64
- /** Supplier's email address (RFC 5321/5322). Max 320 chars.
65
- * @example name@supplier.com
66
- */
67
- email?: string
68
- /** Supplier's address. */
69
- address: Address
70
- /** Supplier's contact number (E.164 standard). Max 20 chars.
71
- * @example +60123456789
72
- */
73
- contactNumber: string
74
- }
75
-
76
- /**
77
- * Represents the buyer information.
78
- * Based on the Buyer section of the documentation.
79
- */
80
- export interface Buyer {
81
- /** Buyer's name. Max 300 chars.
82
- * @example Hebat Group
83
- */
84
- name: string
85
- /** Buyer's Tax Identification Number (TIN). Max 14 chars.
86
- * @example C2584563200
87
- */
88
- tin: string
89
- /**
90
- * Buyer's Registration / Identification Number / Passport Number.
91
- * Format depends on schemeID: NRIC (12), BRN (20), PASSPORT (12), ARMY (12).
92
- * @example BRN: 202001234567
93
- */
94
- registrationNumber: string
95
- /**
96
- * Buyer's SST registration number. Max 35 chars.
97
- * Mandatory for SST-registrants. Can be "NA" if not available.
98
- * Allows up to two numbers separated by ';'.
99
- * @example W10-1909-32000060
100
- */
101
- sstRegistrationNumber: string
102
- /** Buyer's email address (RFC 5321/5322). Max 320 chars.
103
- * @example name@buyer.com
104
- */
105
- email?: string
106
- /** Buyer's address. */
107
- address: Address
108
- /** Buyer's contact number (E.164 standard). Max 20 chars. "NA" allowed for consolidated e-invoice.
109
- * @example +60123456789
110
- */
111
- contactNumber: string
112
- }
113
-
114
- /**
115
- * Represents a single line item in an invoice.
116
- * Based on the Invoice Line Item section of the documentation.
117
- * https://sdk.myinvois.hasil.gov.my/documents/invoice-v1-1/#invoice-line-item
118
- */
119
- export interface InvoiceLineItem {
120
- /**
121
- * Item classification code. Refer to /codes/item-classifications/. Max 50 chars.
122
- * @example 001
123
- */
124
- itemClassificationCode: ClassificationCode
125
- /**
126
- * Item description. Max 300 chars.
127
- * @example Laptop
128
- */
129
- itemDescription: string
130
- /**
131
- * Unit price before tax. Max 18 digits, 6 decimal places.
132
- * @example 1500.00
133
- */
134
- unitPrice: number
135
- /**
136
- * Tax type code. Refer to /codes/tax-types/. Max 2 chars.
137
- * @example 01
138
- */
139
- taxType: TaxTypeCode
140
- /**
141
- * Tax rate. Max 18 digits, 2 decimal places.
142
- * @example 6.00
143
- */
144
- taxRate: number
145
- /**
146
- * Tax amount. Max 18 digits, 2 decimal places.
147
- * @example 90.00
148
- */
149
- taxAmount: number
150
- /**
151
- * Tax exemption reason code. Refer to /codes/tax-exemption-reasons/. Max 2 chars.
152
- * Mandatory if tax rate is 0%.
153
- * @example 02
154
- */
155
- taxExemptionReasonCode?: string
156
- /**
157
- * Tax exemption reason amount. Max 18 digits, 2 decimal places.
158
- * Mandatory if tax rate is 0%.
159
- * @example 1500.00
160
- */
161
- taxExemptionReasonAmount?: number
162
- /**
163
- * Total taxable amount per line (Quantity * Unit Price - Discount Amount). Max 18 digits, 2 decimal places.
164
- * @example 1500.00
165
- */
166
- totalTaxableAmountPerLine: number
167
- /**
168
- * Total amount per line including tax (Total Taxable Amount Per Line + Tax Amount). Max 18 digits, 2 decimal places.
169
- * @example 1590.00
170
- */
171
- totalAmountPerLine: number
172
- /**
173
- * Quantity of items. Max 18 digits, 6 decimal places.
174
- * @example 1.000000
175
- */
176
- quantity?: number
177
- /**
178
- * Measurement unit. Max 50 chars.
179
- * @example UNIT
180
- */
181
- measurement?: UnitTypeCode
182
- /**
183
- * Discount rate. Max 18 digits, 2 decimal places.
184
- * @example 0.00
185
- */
186
- discountRate?: number
187
- /**
188
- * Discount amount. Max 18 digits, 2 decimal places.
189
- * @example 0.00
190
- */
191
- discountAmount?: number
192
- /**
193
- * Payment account ID for self-billed invoices. Max 50 chars.
194
- * @example Account123
195
- */
196
- paymentAccountID?: string
197
- /**
198
- * Payment terms description. Max 100 chars.
199
- * @example Payment within 30 days
200
- */
201
- paymentTerms?: string
202
- /**
203
- * Country of origin code (ISO 3166-1). Refer to /codes/countries/. Max 3 chars.
204
- * @example MYS
205
- */
206
- countryOfOrigin?: CountryCode
207
- }
208
-
209
- /** Represents monetary totals for the invoice. Based on UBL cac:LegalMonetaryTotal. */
210
- export interface LegalMonetaryTotal {
211
- /** Total amount exclusive of taxes. Max 18 digits, 2 decimal places. */
212
- taxExclusiveAmount: number
213
- /** Total amount inclusive of taxes. Max 18 digits, 2 decimal places. */
214
- taxInclusiveAmount: number
215
- /** Total allowance amount. Max 18 digits, 2 decimal places. */
216
- allowanceTotalAmount?: number
217
- /** Total charge amount. Max 18 digits, 2 decimal places. */
218
- chargeTotalAmount?: number
219
- /** Total prepaid amount. Max 18 digits, 2 decimal places. */
220
- prepaidAmount?: number
221
- /** Rounding amount applied to the total. Max 18 digits, 2 decimal places. */
222
- payableRoundingAmount?: number
223
- /** The final payable amount. Max 18 digits, 2 decimal places. */
224
- payableAmount: number
225
- }
226
-
227
- /** Represents tax category information. Based on UBL cac:TaxCategory. */
228
- export interface TaxCategory {
229
- /** Tax type code. Refer to /codes/tax-types/. Max 2 chars. */
230
- taxTypeCode: TaxTypeCode
231
- /** Tax rate percentage. Max 18 digits, 2 decimal places. */
232
- taxRate: number
233
- /** Tax exemption reason code. Refer to /codes/tax-exemption-reasons/. Max 2 chars. */
234
- taxExemptionReasonCode?: string
235
- /** Tax exemption reason description. Max 300 chars. */
236
- taxExemptionReason?: string
237
- }
238
-
239
- /** Represents a subtotal for a specific tax category. Based on UBL cac:TaxSubtotal. */
240
- export interface TaxSubtotal {
241
- /** Taxable amount for this category. Max 18 digits, 2 decimal places. */
242
- taxableAmount: number
243
- /** Tax amount for this category. Max 18 digits, 2 decimal places. */
244
- taxAmount: number
245
- /** Tax category details. */
246
- taxCategory: TaxCategory
247
- }
248
-
249
- /** Represents the total tax amount for the invoice. Based on UBL cac:TaxTotal. */
250
- export interface TaxTotal {
251
- /** Total tax amount for the entire invoice. Max 18 digits, 2 decimal places. */
252
- taxAmount: number
253
- /** Array of tax subtotals. */
254
- taxSubtotals?: TaxSubtotal[]
255
- }
256
-
257
- /** Represents payment means information. Based on UBL cac:PaymentMeans. */
258
- export interface PaymentMeans {
259
- /** Payment means code. Refer to /codes/payment-modes/. Max 2 chars. */
260
- paymentMeansCode: PaymentModeCode
261
- /** Payment due date (YYYY-MM-DD). Max 10 chars. */
262
- paymentDueDate?: string
263
- /** Payer's financial account ID. Max 50 chars. */
264
- payerFinancialAccountID?: string
265
- /** Payee's financial account ID. Max 50 chars. */
266
- payeeFinancialAccountID?: string
267
- /** Payment terms description. Max 100 chars. */
268
- paymentTerms?: string
269
- }
270
-
271
- /** Represents allowances or charges at the document level. Based on UBL cac:AllowanceCharge. */
272
- export interface AllowanceCharge {
273
- /** Indicator: true for charge, false for allowance. */
274
- chargeIndicator: boolean
275
- /** Reason code for the allowance or charge. Refer to codes (if available). Max 50 chars */
276
- reasonCode?: string
277
- /** Reason description for the allowance or charge. Max 300 chars. */
278
- reason: string
279
- /** Multiplier factor (e.g., percentage rate). Max 18 digits, 2 decimal places */
280
- multiplierFactorNumeric?: number
281
- /** Amount of the allowance or charge. Max 18 digits, 2 decimal places. */
282
- amount: number
283
- /** Base amount for calculation (if applicable). Max 18 digits, 2 decimal places. */
284
- baseAmount?: number
285
- /** Tax category applied to this allowance/charge (if taxable). */
286
- taxCategory?: TaxCategory // Reusing TaxCategory
287
- }
288
-
289
- /** Represents delivery information. Based on UBL cac:Delivery. */
290
- export interface Delivery {
291
- /** Actual delivery date (YYYY-MM-DD). Max 10 chars. */
292
- actualDeliveryDate?: string
293
- /** Delivery location address. */
294
- deliveryLocation?: Address // Reusing Address type
295
- /** Party responsible for delivery (optional, structure similar to Buyer/Supplier but minimal). */
296
- deliveryParty?: {
297
- /** Name of the delivery party. Max 300 chars. */
298
- name?: string
299
- }
300
- }
301
-
302
- /**
303
- * Represents the core Invoice v1.1 document structure.
304
- * Based on the Core section of the documentation.
305
- */
306
- export interface InvoiceV1_1 {
307
- /** Supplier information. */
308
- supplier: Supplier
309
- /** Buyer information. */
310
- buyer: Buyer
311
- /** e-Invoice version. Fixed value '1.1'. */
312
- eInvoiceVersion: '1.1'
313
- /** e-Invoice type code. Refer to /codes/e-invoice-types/. Max 2 chars. */
314
- eInvoiceTypeCode: EInvoiceTypeCode // e.g., '01'
315
- /** Document reference number used by Supplier. Max 50 chars. */
316
- eInvoiceCodeOrNumber: string // e.g., 'INV12345'
317
- /** Date of issuance (YYYY-MM-DD) in UTC. Max 10 chars. */
318
- eInvoiceDate: string // e.g., '2017-11-26'
319
- /** Time of issuance (HH:mm:ssZ) in UTC. Max 9 chars. */
320
- eInvoiceTime: string // e.g., '15:30:00Z'
321
- /** Issuer's digital signature. Refer to /signature/ documentation. */
322
- issuerDigitalSignature: IssuerDigitalSignature
323
- /** Invoice currency code. Refer to /codes/currencies/. Max 3 chars. */
324
- invoiceCurrencyCode: CurrencyCode // e.g., 'MYR'
325
- /** Invoice line items. */
326
- invoiceLineItems: InvoiceLineItem[]
327
- /**
328
- * Currency exchange rate to MYR. Max 15 decimal places.
329
- * Mandatory if InvoiceCurrencyCode is not MYR.
330
- */
331
- currencyExchangeRate?: number // e.g., 1.0 or 4.75
332
- /** Frequency of billing description. Max 50 chars. */
333
- frequencyOfBilling?: string // e.g., 'Monthly'
334
- /** Billing period start date (YYYY-MM-DD). Max 10 chars. */
335
- billingPeriodStartDate?: string // e.g., '2017-11-01'
336
- /** Billing period end date (YYYY-MM-DD). Max 10 chars. */
337
- billingPeriodEndDate?: string // e.g., '2017-11-30'
338
-
339
- /** Overall monetary totals for the invoice. */
340
- legalMonetaryTotal: LegalMonetaryTotal
341
- /** Total tax amounts and subtotals. */
342
- taxTotal: TaxTotal
343
- /** Payment means details. Can occur multiple times. */
344
- paymentMeans?: PaymentMeans[]
345
- /** Document-level allowances or charges. Can occur multiple times. */
346
- allowanceCharges?: AllowanceCharge[]
347
- /** Delivery information. */
348
- delivery?: Delivery
349
- }
@@ -1,88 +0,0 @@
1
- import { getBaseUrl } from './getBaseUrl'
2
- import { platformLogin } from '../api/platform/platformLogin'
3
-
4
- export class MyInvoisClient {
5
- private readonly baseUrl: string
6
- private readonly clientId: string
7
- private readonly clientSecret: string
8
- private readonly onBehalfOf?: string
9
- private readonly debug: boolean
10
- private token = ''
11
- private tokenExpiration: Date | undefined
12
-
13
- constructor(
14
- clientId: string,
15
- clientSecret: string,
16
- environment: 'sandbox' | 'production',
17
- onBehalfOf?: string,
18
- debug?: boolean,
19
- ) {
20
- this.clientId = clientId
21
- this.clientSecret = clientSecret
22
- this.baseUrl = getBaseUrl(environment)
23
- this.debug = (debug ?? process.env.MYINVOIS_DEBUG === 'true') ? true : false
24
- this.onBehalfOf = onBehalfOf
25
- }
26
-
27
- private async refreshToken() {
28
- const tokenResponse = await platformLogin({
29
- clientId: this.clientId,
30
- clientSecret: this.clientSecret,
31
- baseUrl: this.baseUrl,
32
- onBehalfOf: this.onBehalfOf,
33
- debug: this.debug,
34
- })
35
-
36
- this.token = tokenResponse.token
37
- this.tokenExpiration = tokenResponse.tokenExpiration
38
- }
39
-
40
- private async getToken() {
41
- if (!this.tokenExpiration || this.tokenExpiration < new Date()) {
42
- if (this.debug) {
43
- console.log('Refreshing token')
44
- }
45
- await this.refreshToken()
46
- }
47
-
48
- return this.token
49
- }
50
-
51
- private async fetch(path: string, options: Parameters<typeof fetch>[1] = {}) {
52
- const token = await this.getToken()
53
-
54
- return fetch(`${this.baseUrl}${path}`, {
55
- ...options,
56
- headers: { ...options.headers, Authorization: `Bearer ${token}` },
57
- })
58
- }
59
-
60
- /**
61
- * Validates a TIN against a NRIC
62
- *
63
- * @param tin
64
- * @param nric
65
- * @returns true if the TIN is valid, false otherwise
66
- */
67
- async verifyTin(tin: string, nric: string): Promise<boolean> {
68
- try {
69
- const response = await this.fetch(
70
- `/api/v1.0/taxpayer/validate/${tin}?idType=NRIC&idValue=${nric}`,
71
- {
72
- method: 'GET',
73
- },
74
- )
75
-
76
- if (response.status === 200) {
77
- return true
78
- }
79
-
80
- return false
81
- } catch (error) {
82
- if (this.debug) {
83
- console.error(error)
84
- }
85
- return false
86
- }
87
- }
88
- }