@ripwords/myinvois-client 0.1.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +111 -0
- package/README.md +128 -4
- package/bun.lock +59 -0
- package/dist/{0X-Yw7mZEro.d.cts → 0X-CTIq3y3a.d.ts} +1 -2
- package/dist/{0X-C4IRh_fJ.d.ts → 0X-Cr3M7hci.d.cts} +1 -1
- package/dist/{1X-D_aUVsuM.d.cts → 1X-Bu4oiv8D.d.ts} +1 -2
- package/dist/{1X-C-_KHV-Q.d.ts → 1X-BywXCqtn.d.ts} +1 -2
- package/dist/{1X-Brnls9Jh.d.ts → 1X-CWwmfCzo.d.cts} +1 -1
- package/dist/{1X-BwpSoT3o.d.cts → 1X-ClnJ79HH.d.cts} +1 -1
- package/dist/{2X-DkS1BoE5.d.ts → 2X-3fSEGIuE.d.ts} +1 -2
- package/dist/{2X-Bb6elyzV.d.cts → 2X-CV9eYhog.d.cts} +1 -1
- package/dist/{2X-UdQcQW24.d.ts → 2X-DNtkJ0tj.d.cts} +1 -1
- package/dist/{2X-hClUyw26.d.cts → 2X-DnG3FY1f.d.ts} +1 -2
- package/dist/{3X-C7VFD-n-.d.cts → 3X--VWVsC84.d.cts} +1 -1
- package/dist/{3X-CLMESDvz.d.cts → 3X-BOxfatu3.d.cts} +1 -1
- package/dist/{3X-DVDyspgb.d.ts → 3X-CLdmoel1.d.ts} +1 -2
- package/dist/{3X-DFI-4RQQ.d.ts → 3X-Ynjfgoll.d.ts} +1 -2
- package/dist/{4X-DIfvpU6V.d.cts → 4X-B5ePdMky.d.ts} +1 -2
- package/dist/{4X-CvScPJTf.d.cts → 4X-BTG6o1Gn.d.ts} +1 -2
- package/dist/{4X-CIJ2JJ2w.d.ts → 4X-By9PzHaY.d.cts} +1 -1
- package/dist/{4X-CUR8jlaZ.d.ts → 4X-C7fzDWJ_.d.cts} +1 -1
- package/dist/{5X-BOUxhadJ.d.cts → 5X-B5M0Cv_K.d.cts} +1 -1
- package/dist/{5X-C6db432h.d.ts → 5X-CNAFsDm2.d.cts} +1 -1
- package/dist/{5X-CkLu7Vyd.d.cts → 5X-CjSz1zxJ.d.ts} +1 -2
- package/dist/{5X-COsZHUaQ.d.ts → 5X-dhP6fyou.d.ts} +1 -2
- package/dist/{6X-Mf32k1d0.d.cts → 6X-B9KP_vEn.d.ts} +1 -2
- package/dist/{6X-DE7RJeV6.d.cts → 6X-BHaY0TCf.d.ts} +1 -2
- package/dist/{6X-ClZDKOTC.d.ts → 6X-C3elgd-n.d.cts} +1 -1
- package/dist/{6X-C_fFIcJC.d.ts → 6X-uObUP4VG.d.cts} +1 -1
- package/dist/{7X-DoCUcp-J.d.cts → 7X-BifJnY24.d.cts} +1 -1
- package/dist/{7X-Chtd6B66.d.cts → 7X-C4eX_tAk.d.ts} +1 -2
- package/dist/{7X-BZyesooz.d.ts → 7X-D3idQBl9.d.cts} +1 -1
- package/dist/{7X-kot_VccM.d.ts → 7X-DtkQutx2.d.ts} +1 -2
- package/dist/{8X-Dr9RunRw.d.cts → 8X-5n9seY3z.d.ts} +1 -2
- package/dist/{8X-DkuKAkHz.d.ts → 8X-C6UMFvQW.d.cts} +1 -1
- package/dist/{8X-DqZyMvyV.d.cts → 8X-D6HTLShY.d.ts} +1 -2
- package/dist/{8X-Df4DOBOe.d.ts → 8X-DioBXCJ0.d.cts} +1 -1
- package/dist/{9X-BaoZtjWF.d.cts → 9X-BjffnXuq.d.cts} +1 -1
- package/dist/{9X-BDgifncF.d.ts → 9X-CHZKsIdD.d.ts} +1 -2
- package/dist/{9X-BcAb6Uso.d.cts → 9X-CJjPJgIG.d.cts} +1 -1
- package/dist/{9X-BhBWlgxG.d.ts → 9X-Cpb6V4JC.d.ts} +1 -2
- package/dist/{AX-D6XHWdrY.d.ts → AX-C0w_r3PA.d.ts} +1 -2
- package/dist/{AX-BY72FohC.d.cts → AX-DrEd2Ov6.d.cts} +1 -1
- package/dist/{BX-D_0C8Qbd.d.ts → BX-C5jc6myN.d.cts} +1 -1
- package/dist/{BX-CA0OmrUZ.d.cts → BX-RadlZ-6m.d.ts} +1 -2
- package/dist/{CX-glpQSL8x.d.cts → CX-CT1Zzb9D.d.ts} +1 -2
- package/dist/{CX-HH4cSZRX.d.ts → CX-oSgvmn3h.d.cts} +1 -1
- package/dist/{DX-Dx22ax_I.d.ts → DX-CtUeTKMM.d.ts} +1 -2
- package/dist/{DX-DimL1MDM.d.cts → DX-ZIG0enmK.d.cts} +1 -1
- package/dist/{EX-BRWh1wFc.d.ts → EX-084Yu7Wt.d.ts} +1 -2
- package/dist/{EX-Cx87Ruxl.d.cts → EX-BpWZ5ADq.d.cts} +1 -1
- package/dist/{FX-RmjwAr40.d.ts → FX-BrbQM0CW.d.ts} +1 -2
- package/dist/{FX-D81UlxNN.d.cts → FX-CvYBEc51.d.cts} +1 -1
- package/dist/{GX-CJyo7oDp.d.ts → GX-CU8PZy0G.d.cts} +1 -1
- package/dist/{GX-9i7piP9G.d.cts → GX-gKj8iAAh.d.ts} +1 -2
- package/dist/{HX-XALBTdLA.d.ts → HX-9D-ZXTy5.d.ts} +1 -2
- package/dist/{HX-20GVJAvl.d.cts → HX-DoEErDeE.d.cts} +1 -1
- package/dist/{IX-D54NGPsc.d.cts → IX-DR4Fc92A.d.ts} +1 -2
- package/dist/{IX-6SZ55QKb.d.ts → IX-jLAUHe8i.d.cts} +1 -1
- package/dist/{JX-hQ1XRmLp.d.ts → JX-DIKa9ma-.d.ts} +1 -2
- package/dist/{JX-C1RYcwQX.d.cts → JX-DX8BjYQC.d.cts} +1 -1
- package/dist/{KX-BNwunEfn.d.ts → KX-DpsJ_unT.d.ts} +1 -2
- package/dist/{KX-gQHCIgtQ.d.cts → KX-fZb4_vhw.d.cts} +1 -1
- package/dist/{LX-CHYX3X3J.d.ts → LX-D_mI1bk-.d.cts} +1 -1
- package/dist/{LX-CPurJGIh.d.cts → LX-DeXPPWUX.d.ts} +1 -2
- package/dist/{MX-BnyW5eHf.d.cts → MX-CKMjg_zK.d.ts} +1 -2
- package/dist/{MX-BPGLWSUz.d.ts → MX-DlYZhpkT.d.cts} +1 -1
- package/dist/{NX-B11fQuco.d.cts → NX-DELEEbad.d.cts} +1 -1
- package/dist/{NX-RulN5Ml3.d.ts → NX-oYdb4NDo.d.ts} +1 -2
- package/dist/{OX-T-ydRXQS.d.cts → OX-Bid9es3D.d.ts} +1 -2
- package/dist/{OX-DgKVSp7I.d.ts → OX-CKPyrIFf.d.cts} +1 -1
- package/dist/{PX-DA4A2kEv.d.ts → PX-D7jy9CFk.d.ts} +1 -2
- package/dist/{PX-p0n1SzvU.d.cts → PX-SP6NxBtG.d.cts} +1 -1
- package/dist/{QX-DrFqsMEs.d.ts → QX-BFWOR4g3.d.ts} +1 -2
- package/dist/{QX-CI1NccIB.d.cts → QX-QZA7E2O-.d.cts} +1 -1
- package/dist/{RX-Cm7vFcFN.d.ts → RX-DBcgbdeE.d.cts} +1 -1
- package/dist/{RX-DnNKol22.d.cts → RX-XHgCyMV1.d.ts} +1 -2
- package/dist/{SX-CsPPTu-W.d.ts → SX-Cl8RN8oH.d.ts} +1 -2
- package/dist/{SX-BUjiWQYz.d.cts → SX-DmiJeCMN.d.cts} +1 -1
- package/dist/{TX-DCY25MdR.d.ts → TX-C1SoDobK.d.cts} +1 -1
- package/dist/{TX-DOEpsf05.d.cts → TX-ZymoIbtr.d.ts} +1 -2
- package/dist/{UX-DgUOnTFK.d.cts → UX-D-Ndd1ov.d.ts} +1 -2
- package/dist/{UX-DauyagHy.d.ts → UX-DFVynFhQ.d.cts} +1 -1
- package/dist/{VX-kUX6LM-3.d.cts → VX-B-1b34r7.d.ts} +1 -2
- package/dist/{VX-DD4scgCe.d.ts → VX-DsRum5k3.d.cts} +1 -1
- package/dist/{WX-DPfyPFFh.d.cts → WX-0GuMjPNZ.d.ts} +1 -2
- package/dist/{WX-CjkoppdY.d.ts → WX-VReU5R5M.d.cts} +1 -1
- package/dist/{XX-C4C1gQZH.d.cts → XX-CF2NANsy.d.ts} +1 -2
- package/dist/{XX-sbsIUOnA.d.ts → XX-ChAviUMj.d.cts} +1 -1
- package/dist/{YX-DUdO8mRC.d.ts → YX-B51BbNSg.d.ts} +1 -2
- package/dist/{YX-BeT-LsiA.d.cts → YX-QfzeMEKx.d.cts} +1 -1
- package/dist/{ZX-DwfcSA-D.d.ts → ZX-BMJS1iAv.d.ts} +1 -2
- package/dist/{ZX-BuVTTq-D.d.cts → ZX-Ca2E726a.d.cts} +1 -1
- package/dist/api/platform/platformLogin.d.ts +58 -60
- package/dist/api/platform/platformLogin.js +1 -1
- package/dist/certificate-DFK-788s.cjs +62 -0
- package/dist/certificate-DFK-788s.cjs.map +1 -0
- package/dist/certificate-aooIRf9A.js +49 -0
- package/dist/{classification-codes-C2X4xW5-.d.ts → classification-codes-BKxV-rO9.d.ts} +1 -2
- package/dist/{country-code-DsI8Mbzx.d.ts → country-code-CQuaiQm2.d.ts} +1 -2
- package/dist/{currencies-DKuDflOO.d.ts → currencies-BYJK-m6v.d.ts} +1 -2
- package/dist/document-CARHiGdp.cjs +472 -0
- package/dist/document-CARHiGdp.cjs.map +1 -0
- package/dist/document-D6VKMAtx.js +405 -0
- package/dist/documents-CJ8hqIGH.d.ts +858 -0
- package/dist/documents-MGs0EvXh.d.cts +859 -0
- package/dist/{e-invoice-C2TxhyrK.d.ts → e-invoice-CmbLQkHw.d.ts} +1 -2
- package/dist/{getBaseUrl-Dx6RDC8I.js → getBaseUrl-R3IdgCu3.js} +1 -2
- package/dist/{index-B1DSs-wd.d.cts → index-0-EvC6Nv.d.ts} +1 -2
- package/dist/{index-FTgB2nM6.d.ts → index-D2_HVwCz.d.cts} +1 -1
- package/dist/index.cjs +308 -12
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +233 -60
- package/dist/index.js +306 -11
- package/dist/index10.cjs +0 -34
- package/dist/index11.cjs +25 -15
- package/dist/index11.cjs.map +1 -1
- package/dist/index12.cjs +24 -0
- package/dist/index12.cjs.map +1 -0
- package/dist/index13.cjs +0 -13
- package/dist/index15.cjs +3 -2
- package/dist/index16.cjs +12 -16
- package/dist/index17.cjs +2 -2
- package/dist/index18.cjs +336 -204
- package/dist/index18.cjs.map +1 -1
- package/dist/index19.cjs +325 -105
- package/dist/index19.cjs.map +1 -1
- package/dist/index20.cjs +136 -133
- package/dist/index20.cjs.map +1 -1
- package/dist/index21.cjs +203 -59
- package/dist/index21.cjs.map +1 -1
- package/dist/index22.cjs +104 -262
- package/dist/index22.cjs.map +1 -1
- package/dist/index23.cjs +132 -74
- package/dist/index23.cjs.map +1 -1
- package/dist/index24.cjs +59 -102
- package/dist/index24.cjs.map +1 -1
- package/dist/index25.cjs +262 -68
- package/dist/index25.cjs.map +1 -1
- package/dist/index26.cjs +74 -107
- package/dist/index26.cjs.map +1 -1
- package/dist/index27.cjs +102 -95
- package/dist/index27.cjs.map +1 -1
- package/dist/index28.cjs +68 -13
- package/dist/index28.cjs.map +1 -1
- package/dist/index29.cjs +107 -33
- package/dist/index29.cjs.map +1 -1
- package/dist/index30.cjs +95 -14
- package/dist/index30.cjs.map +1 -1
- package/dist/index31.cjs +11 -22
- package/dist/index31.cjs.map +1 -1
- package/dist/index32.cjs +31 -13
- package/dist/index32.cjs.map +1 -1
- package/dist/index33.cjs +12 -7
- package/dist/index33.cjs.map +1 -1
- package/dist/index34.cjs +22 -7
- package/dist/index34.cjs.map +1 -1
- package/dist/index35.cjs +13 -10
- package/dist/index35.cjs.map +1 -1
- package/dist/index36.cjs +7 -6
- package/dist/index36.cjs.map +1 -1
- package/dist/index37.cjs +7 -101
- package/dist/index37.cjs.map +1 -1
- package/dist/index38.cjs +10 -106
- package/dist/index38.cjs.map +1 -1
- package/dist/index39.cjs +6 -119
- package/dist/index39.cjs.map +1 -1
- package/dist/index40.cjs +101 -106
- package/dist/index40.cjs.map +1 -1
- package/dist/index41.cjs +106 -98
- package/dist/index41.cjs.map +1 -1
- package/dist/index42.cjs +119 -118
- package/dist/index42.cjs.map +1 -1
- package/dist/index43.cjs +106 -127
- package/dist/index43.cjs.map +1 -1
- package/dist/index44.cjs +98 -117
- package/dist/index44.cjs.map +1 -1
- package/dist/index45.cjs +118 -14
- package/dist/index45.cjs.map +1 -1
- package/dist/index46.cjs +127 -95
- package/dist/index46.cjs.map +1 -1
- package/dist/index47.cjs +117 -142
- package/dist/index47.cjs.map +1 -1
- package/dist/index48.cjs +14 -114
- package/dist/index48.cjs.map +1 -1
- package/dist/index49.cjs +95 -144
- package/dist/index49.cjs.map +1 -1
- package/dist/index5.cjs +0 -25
- package/dist/index50.cjs +142 -113
- package/dist/index50.cjs.map +1 -1
- package/dist/index51.cjs +114 -17
- package/dist/index51.cjs.map +1 -1
- package/dist/index52.cjs +144 -112
- package/dist/index52.cjs.map +1 -1
- package/dist/index53.cjs +113 -47
- package/dist/index53.cjs.map +1 -1
- package/dist/index54.cjs +17 -14
- package/dist/index54.cjs.map +1 -1
- package/dist/index55.cjs +112 -28
- package/dist/index55.cjs.map +1 -1
- package/dist/index56.cjs +47 -22
- package/dist/index56.cjs.map +1 -1
- package/dist/index57.cjs +14 -9
- package/dist/index57.cjs.map +1 -1
- package/dist/index58.cjs +28 -8
- package/dist/index58.cjs.map +1 -1
- package/dist/index58.cts.map +1 -0
- package/dist/index59.cjs +22 -17
- package/dist/index59.cjs.map +1 -1
- package/dist/index59.cts.map +1 -1
- package/dist/index6.cjs +25 -0
- package/dist/{index5.cjs.map → index6.cjs.map} +1 -1
- package/dist/index60.cjs +9 -412
- package/dist/index60.cjs.map +1 -1
- package/dist/index60.cts.map +1 -0
- package/dist/index61.cjs +8 -8
- package/dist/index61.cjs.map +1 -1
- package/dist/index61.cts.map +1 -0
- package/dist/index62.cjs +17 -9
- package/dist/index62.cjs.map +1 -1
- package/dist/index62.cts.map +1 -1
- package/dist/index63.cjs +419 -0
- package/dist/index63.cjs.map +1 -0
- package/dist/index63.cts.map +1 -1
- package/dist/index64.cjs +15 -0
- package/dist/index64.cjs.map +1 -0
- package/dist/index64.cts.map +1 -1
- package/dist/index65.cjs +10 -116
- package/dist/index65.cjs.map +1 -1
- package/dist/index65.cts.map +1 -1
- package/dist/index66.cjs +2 -228
- package/dist/index66.cts.map +1 -1
- package/dist/index8.cjs +0 -25
- package/dist/index9.cjs +25 -0
- package/dist/{index8.cjs.map → index9.cjs.map} +1 -1
- package/dist/msic-codes-C8PJVOaA.d.ts +25 -0
- package/dist/{msic-codes-B_1W6lZF.d.cts → msic-codes-CIKdPqag.d.cts} +11 -11
- package/dist/{payment-modes-DHihrywe.d.cts → payment-modes-BOTSRC_X.d.ts} +1 -2
- package/dist/{payment-modes-B8dNy3SM.d.ts → payment-modes-ghFEXnUl.d.cts} +1 -1
- package/dist/platformLogin-PGzMhw1X.cjs.map +1 -1
- package/dist/{platformLogin-DsxWWUXr.js → platformLogin-f0bNAoZI.js} +1 -2
- package/dist/{signatures-C9QPZTQd.d.ts → signatures-W-_brwdb.d.ts} +1 -2
- package/dist/{signatures-BKi9DP2K.d.cts → signatures-hFbt_std.d.cts} +1 -1
- package/dist/{state-codes-DXSWtE6a.d.cts → state-codes-BlILGZ9d.d.cts} +1 -1
- package/dist/{state-codes-CxG1S9YY.d.ts → state-codes-oeFKlwXZ.d.ts} +1 -2
- package/dist/{tax-types-CgwxONDS.d.cts → tax-types-B5sQ8UyN.d.cts} +1 -1
- package/dist/{tax-types-CEpfSh5P.d.ts → tax-types-CsQ76JMf.d.ts} +1 -2
- package/dist/types/classification-codes.d.ts +1 -1
- package/dist/types/country-code.d.ts +1 -1
- package/dist/types/currencies.d.ts +1 -1
- package/dist/types/documents.d.ts +18 -0
- package/dist/types/e-invoice.d.ts +1 -1
- package/dist/types/index.d.ts +58 -59
- package/dist/types/msic/0X.d.ts +1 -1
- package/dist/types/msic/1X.d.ts +1 -1
- package/dist/types/msic/2X.d.ts +1 -1
- package/dist/types/msic/3X.d.ts +1 -1
- package/dist/types/msic/4X.d.ts +1 -1
- package/dist/types/msic/5X.d.ts +1 -1
- package/dist/types/msic/6X.d.ts +1 -1
- package/dist/types/msic/7X.d.ts +1 -1
- package/dist/types/msic/8X.d.ts +1 -1
- package/dist/types/msic/9X.d.ts +1 -1
- package/dist/types/msic-codes.d.ts +11 -11
- package/dist/types/payment-modes.d.ts +1 -1
- package/dist/types/signatures.d.ts +1 -1
- package/dist/types/state-codes.d.ts +1 -1
- package/dist/types/tax-types.d.ts +1 -1
- package/dist/types/unit/1X.d.ts +1 -1
- package/dist/types/unit/2X.d.ts +1 -1
- package/dist/types/unit/3X.d.ts +1 -1
- package/dist/types/unit/4X.d.ts +1 -1
- package/dist/types/unit/5X.d.ts +1 -1
- package/dist/types/unit/6X.d.ts +1 -1
- package/dist/types/unit/7X.d.ts +1 -1
- package/dist/types/unit/8X.d.ts +1 -1
- package/dist/types/unit/9X.d.ts +1 -1
- package/dist/types/unit/AX.d.ts +1 -1
- package/dist/types/unit/BX.d.ts +1 -1
- package/dist/types/unit/CX.d.ts +1 -1
- package/dist/types/unit/DX.d.ts +1 -1
- package/dist/types/unit/EX.d.ts +1 -1
- package/dist/types/unit/FX.d.ts +1 -1
- package/dist/types/unit/GX.d.ts +1 -1
- package/dist/types/unit/HX.d.ts +1 -1
- package/dist/types/unit/IX.d.ts +1 -1
- package/dist/types/unit/JX.d.ts +1 -1
- package/dist/types/unit/KX.d.ts +1 -1
- package/dist/types/unit/LX.d.ts +1 -1
- package/dist/types/unit/MX.d.ts +1 -1
- package/dist/types/unit/NX.d.ts +1 -1
- package/dist/types/unit/OX.d.ts +1 -1
- package/dist/types/unit/PX.d.ts +1 -1
- package/dist/types/unit/QX.d.ts +1 -1
- package/dist/types/unit/RX.d.ts +1 -1
- package/dist/types/unit/SX.d.ts +1 -1
- package/dist/types/unit/TX.d.ts +1 -1
- package/dist/types/unit/UX.d.ts +1 -1
- package/dist/types/unit/VX.d.ts +1 -1
- package/dist/types/unit/WX.d.ts +1 -1
- package/dist/types/unit/XX.d.ts +1 -1
- package/dist/types/unit/YX.d.ts +1 -1
- package/dist/types/unit/ZX.d.ts +1 -1
- package/dist/types/unit-types.d.ts +36 -36
- package/dist/unit-types-B41YFOLT.d.ts +55 -0
- package/dist/unit-types-CjWNk2wS.d.cts +56 -0
- package/dist/utils/base64.d.ts +1 -2
- package/dist/utils/base64.js +1 -2
- package/dist/utils/certificate.d.ts +22 -0
- package/dist/utils/certificate.js +3 -0
- package/dist/utils/document.d.ts +135 -0
- package/dist/utils/document.js +3 -0
- package/dist/utils/getBaseUrl.d.ts +1 -2
- package/dist/utils/getBaseUrl.js +1 -1
- package/dist/utils/helpers.d.ts +271 -0
- package/dist/utils/helpers.js +330 -0
- package/dist/utils/signature-diagnostics.d.ts +93 -0
- package/dist/utils/signature-diagnostics.js +326 -0
- package/dist/utils/validation.d.ts +46 -0
- package/dist/utils/validation.js +134 -0
- package/myinvois-cert.conf.template +23 -0
- package/package.json +9 -3
- package/scripts/gen-cert.sh +159 -0
- package/src/api/platform/platformLogin.ts +1 -1
- package/src/index.ts +528 -1
- package/src/types/documents.d.ts +870 -0
- package/src/types/index.d.ts +1 -1
- package/src/utils/certificate.ts +60 -0
- package/src/utils/document.ts +852 -0
- package/src/utils/helpers.ts +552 -0
- package/src/utils/signature-diagnostics.ts +583 -0
- package/src/utils/validation.ts +268 -0
- package/test/MyInvoiClientWithRealData.test.ts +9 -1
- package/test/MyInvoisClient.test.ts +7 -1
- package/test/dynamicInvoiceFeatures.test.ts +451 -0
- package/test/signAndSubmitInvoice.test.ts +271 -734
- package/test/signature-diagnostics.test.ts +130 -0
- package/tsconfig.json +0 -3
- package/dist/0X-C4IRh_fJ.d.ts.map +0 -1
- package/dist/0X-Yw7mZEro.d.cts.map +0 -1
- package/dist/1X-Brnls9Jh.d.ts.map +0 -1
- package/dist/1X-BwpSoT3o.d.cts.map +0 -1
- package/dist/1X-C-_KHV-Q.d.ts.map +0 -1
- package/dist/1X-D_aUVsuM.d.cts.map +0 -1
- package/dist/2X-Bb6elyzV.d.cts.map +0 -1
- package/dist/2X-DkS1BoE5.d.ts.map +0 -1
- package/dist/2X-UdQcQW24.d.ts.map +0 -1
- package/dist/2X-hClUyw26.d.cts.map +0 -1
- package/dist/3X-C7VFD-n-.d.cts.map +0 -1
- package/dist/3X-CLMESDvz.d.cts.map +0 -1
- package/dist/3X-DFI-4RQQ.d.ts.map +0 -1
- package/dist/3X-DVDyspgb.d.ts.map +0 -1
- package/dist/4X-CIJ2JJ2w.d.ts.map +0 -1
- package/dist/4X-CUR8jlaZ.d.ts.map +0 -1
- package/dist/4X-CvScPJTf.d.cts.map +0 -1
- package/dist/4X-DIfvpU6V.d.cts.map +0 -1
- package/dist/5X-BOUxhadJ.d.cts.map +0 -1
- package/dist/5X-C6db432h.d.ts.map +0 -1
- package/dist/5X-COsZHUaQ.d.ts.map +0 -1
- package/dist/5X-CkLu7Vyd.d.cts.map +0 -1
- package/dist/6X-C_fFIcJC.d.ts.map +0 -1
- package/dist/6X-ClZDKOTC.d.ts.map +0 -1
- package/dist/6X-DE7RJeV6.d.cts.map +0 -1
- package/dist/6X-Mf32k1d0.d.cts.map +0 -1
- package/dist/7X-BZyesooz.d.ts.map +0 -1
- package/dist/7X-Chtd6B66.d.cts.map +0 -1
- package/dist/7X-DoCUcp-J.d.cts.map +0 -1
- package/dist/7X-kot_VccM.d.ts.map +0 -1
- package/dist/8X-Df4DOBOe.d.ts.map +0 -1
- package/dist/8X-DkuKAkHz.d.ts.map +0 -1
- package/dist/8X-DqZyMvyV.d.cts.map +0 -1
- package/dist/8X-Dr9RunRw.d.cts.map +0 -1
- package/dist/9X-BDgifncF.d.ts.map +0 -1
- package/dist/9X-BaoZtjWF.d.cts.map +0 -1
- package/dist/9X-BcAb6Uso.d.cts.map +0 -1
- package/dist/9X-BhBWlgxG.d.ts.map +0 -1
- package/dist/AX-BY72FohC.d.cts.map +0 -1
- package/dist/AX-D6XHWdrY.d.ts.map +0 -1
- package/dist/BX-CA0OmrUZ.d.cts.map +0 -1
- package/dist/BX-D_0C8Qbd.d.ts.map +0 -1
- package/dist/CX-HH4cSZRX.d.ts.map +0 -1
- package/dist/CX-glpQSL8x.d.cts.map +0 -1
- package/dist/DX-DimL1MDM.d.cts.map +0 -1
- package/dist/DX-Dx22ax_I.d.ts.map +0 -1
- package/dist/EX-BRWh1wFc.d.ts.map +0 -1
- package/dist/EX-Cx87Ruxl.d.cts.map +0 -1
- package/dist/FX-D81UlxNN.d.cts.map +0 -1
- package/dist/FX-RmjwAr40.d.ts.map +0 -1
- package/dist/GX-9i7piP9G.d.cts.map +0 -1
- package/dist/GX-CJyo7oDp.d.ts.map +0 -1
- package/dist/HX-20GVJAvl.d.cts.map +0 -1
- package/dist/HX-XALBTdLA.d.ts.map +0 -1
- package/dist/IX-6SZ55QKb.d.ts.map +0 -1
- package/dist/IX-D54NGPsc.d.cts.map +0 -1
- package/dist/JX-C1RYcwQX.d.cts.map +0 -1
- package/dist/JX-hQ1XRmLp.d.ts.map +0 -1
- package/dist/KX-BNwunEfn.d.ts.map +0 -1
- package/dist/KX-gQHCIgtQ.d.cts.map +0 -1
- package/dist/LX-CHYX3X3J.d.ts.map +0 -1
- package/dist/LX-CPurJGIh.d.cts.map +0 -1
- package/dist/MX-BPGLWSUz.d.ts.map +0 -1
- package/dist/MX-BnyW5eHf.d.cts.map +0 -1
- package/dist/MyInvoisClient-BrNyMjS-.d.cts +0 -178
- package/dist/MyInvoisClient-BrNyMjS-.d.cts.map +0 -1
- package/dist/MyInvoisClient-CXu4pdl-.d.ts +0 -178
- package/dist/MyInvoisClient-CXu4pdl-.d.ts.map +0 -1
- package/dist/MyInvoisClient-Cnvb5iUC.js +0 -299
- package/dist/MyInvoisClient-Cnvb5iUC.js.map +0 -1
- package/dist/MyInvoisClient-DO1dJfQq.cjs +0 -304
- package/dist/MyInvoisClient-DO1dJfQq.cjs.map +0 -1
- package/dist/NX-B11fQuco.d.cts.map +0 -1
- package/dist/NX-RulN5Ml3.d.ts.map +0 -1
- package/dist/OX-DgKVSp7I.d.ts.map +0 -1
- package/dist/OX-T-ydRXQS.d.cts.map +0 -1
- package/dist/PX-DA4A2kEv.d.ts.map +0 -1
- package/dist/PX-p0n1SzvU.d.cts.map +0 -1
- package/dist/QX-CI1NccIB.d.cts.map +0 -1
- package/dist/QX-DrFqsMEs.d.ts.map +0 -1
- package/dist/RX-Cm7vFcFN.d.ts.map +0 -1
- package/dist/RX-DnNKol22.d.cts.map +0 -1
- package/dist/SX-BUjiWQYz.d.cts.map +0 -1
- package/dist/SX-CsPPTu-W.d.ts.map +0 -1
- package/dist/TX-DCY25MdR.d.ts.map +0 -1
- package/dist/TX-DOEpsf05.d.cts.map +0 -1
- package/dist/UX-DauyagHy.d.ts.map +0 -1
- package/dist/UX-DgUOnTFK.d.cts.map +0 -1
- package/dist/VX-DD4scgCe.d.ts.map +0 -1
- package/dist/VX-kUX6LM-3.d.cts.map +0 -1
- package/dist/WX-CjkoppdY.d.ts.map +0 -1
- package/dist/WX-DPfyPFFh.d.cts.map +0 -1
- package/dist/XX-C4C1gQZH.d.cts.map +0 -1
- package/dist/XX-sbsIUOnA.d.ts.map +0 -1
- package/dist/YX-BeT-LsiA.d.cts.map +0 -1
- package/dist/YX-DUdO8mRC.d.ts.map +0 -1
- package/dist/ZX-BuVTTq-D.d.cts.map +0 -1
- package/dist/ZX-DwfcSA-D.d.ts.map +0 -1
- package/dist/api/platform/platformLogin.d.ts.map +0 -1
- package/dist/canonicalize-C_fNNpYr.cjs +0 -80
- package/dist/canonicalize-C_fNNpYr.cjs.map +0 -1
- package/dist/canonicalize-DNUrCGad.js +0 -68
- package/dist/canonicalize-DNUrCGad.js.map +0 -1
- package/dist/classification-codes-B15PbWxz.d.cts.map +0 -1
- package/dist/classification-codes-C2X4xW5-.d.ts.map +0 -1
- package/dist/country-code-DPeNFMMi.d.cts.map +0 -1
- package/dist/country-code-DsI8Mbzx.d.ts.map +0 -1
- package/dist/currencies-DKuDflOO.d.ts.map +0 -1
- package/dist/currencies-S5g1gzBU.d.cts.map +0 -1
- package/dist/e-invoice-BuwtFnlI.d.cts.map +0 -1
- package/dist/e-invoice-C2TxhyrK.d.ts.map +0 -1
- package/dist/getBaseUrl-Dx6RDC8I.js.map +0 -1
- package/dist/hashCert-Bol7lIh2.js +0 -62
- package/dist/hashCert-Bol7lIh2.js.map +0 -1
- package/dist/hashCert-mlYEuYex.cjs +0 -68
- package/dist/hashCert-mlYEuYex.cjs.map +0 -1
- package/dist/hashSignedProperties-9vj5wlYR.js +0 -83
- package/dist/hashSignedProperties-9vj5wlYR.js.map +0 -1
- package/dist/hashSignedProperties-CU_ZqqmY.cjs +0 -95
- package/dist/hashSignedProperties-CU_ZqqmY.cjs.map +0 -1
- package/dist/index-B1DSs-wd.d.cts.map +0 -1
- package/dist/index-CJNLQVjx.d.ts +0 -1
- package/dist/index-FTgB2nM6.d.ts.map +0 -1
- package/dist/index-Wy1ONBjV.d.cts +0 -1
- package/dist/index10.cjs.map +0 -1
- package/dist/index66.cjs.map +0 -1
- package/dist/index67.cjs +0 -4
- package/dist/index67.cts.map +0 -1
- package/dist/index68.cjs +0 -3
- package/dist/index68.cts.map +0 -1
- package/dist/index69.cjs +0 -4
- package/dist/index69.cts.map +0 -1
- package/dist/index70.cjs +0 -3
- package/dist/index70.cts.map +0 -1
- package/dist/index71.cjs +0 -3
- package/dist/index71.cts.map +0 -1
- package/dist/index72.cjs +0 -3
- package/dist/index72.cts.map +0 -1
- package/dist/index73.cjs +0 -3
- package/dist/index73.cts.map +0 -1
- package/dist/invoice-1_1-BJVcw-oE.d.ts +0 -432
- package/dist/invoice-1_1-BJVcw-oE.d.ts.map +0 -1
- package/dist/invoice-1_1-DWdNPRzr.d.cts +0 -432
- package/dist/invoice-1_1-DWdNPRzr.d.cts.map +0 -1
- package/dist/invoice1-1-8S-QQn7P.cjs +0 -547
- package/dist/invoice1-1-8S-QQn7P.cjs.map +0 -1
- package/dist/invoice1-1-CHuLpkFz.js +0 -504
- package/dist/invoice1-1-CHuLpkFz.js.map +0 -1
- package/dist/msic-codes-B_1W6lZF.d.cts.map +0 -1
- package/dist/msic-codes-bs0lTfSZ.d.ts +0 -26
- package/dist/msic-codes-bs0lTfSZ.d.ts.map +0 -1
- package/dist/payment-modes-B8dNy3SM.d.ts.map +0 -1
- package/dist/payment-modes-DHihrywe.d.cts.map +0 -1
- package/dist/platformLogin-DsxWWUXr.js.map +0 -1
- package/dist/populateFinalDocument-BdyYzz5Y.cjs +0 -96
- package/dist/populateFinalDocument-BdyYzz5Y.cjs.map +0 -1
- package/dist/populateFinalDocument-BpLXmgLv.js +0 -90
- package/dist/populateFinalDocument-BpLXmgLv.js.map +0 -1
- package/dist/populateSignedProperties-BJMcBQ6S.cjs +0 -58
- package/dist/populateSignedProperties-BJMcBQ6S.cjs.map +0 -1
- package/dist/populateSignedProperties-BvGN-YZH.js +0 -52
- package/dist/populateSignedProperties-BvGN-YZH.js.map +0 -1
- package/dist/sign-B61Cy3gO.cjs +0 -40
- package/dist/sign-B61Cy3gO.cjs.map +0 -1
- package/dist/sign-DzHK7UhR.js +0 -34
- package/dist/sign-DzHK7UhR.js.map +0 -1
- package/dist/signatures-BKi9DP2K.d.cts.map +0 -1
- package/dist/signatures-C9QPZTQd.d.ts.map +0 -1
- package/dist/state-codes-CxG1S9YY.d.ts.map +0 -1
- package/dist/state-codes-DXSWtE6a.d.cts.map +0 -1
- package/dist/tax-types-CEpfSh5P.d.ts.map +0 -1
- package/dist/tax-types-CgwxONDS.d.cts.map +0 -1
- package/dist/transform-BLz0S687.cjs +0 -72
- package/dist/transform-BLz0S687.cjs.map +0 -1
- package/dist/transform-D1q-U6Zj.js +0 -66
- package/dist/transform-D1q-U6Zj.js.map +0 -1
- package/dist/types/documents/index.d.ts +0 -57
- package/dist/types/documents/invoice-1_1.d.ts +0 -56
- package/dist/unit-types-1bF0KhIp.d.ts +0 -56
- package/dist/unit-types-1bF0KhIp.d.ts.map +0 -1
- package/dist/unit-types-CsrkvgfG.d.cts +0 -56
- package/dist/unit-types-CsrkvgfG.d.cts.map +0 -1
- package/dist/utils/MyInvoisClient.d.ts +0 -60
- package/dist/utils/MyInvoisClient.js +0 -13
- package/dist/utils/base64.d.ts.map +0 -1
- package/dist/utils/base64.js.map +0 -1
- package/dist/utils/debug/debug-document-hash.d.ts +0 -100
- package/dist/utils/debug/debug-document-hash.d.ts.map +0 -1
- package/dist/utils/debug/debug-document-hash.js +0 -120
- package/dist/utils/debug/debug-document-hash.js.map +0 -1
- package/dist/utils/debug/debug-invoice-submission.d.ts +0 -152
- package/dist/utils/debug/debug-invoice-submission.d.ts.map +0 -1
- package/dist/utils/debug/debug-invoice-submission.js +0 -226
- package/dist/utils/debug/debug-invoice-submission.js.map +0 -1
- package/dist/utils/getBaseUrl.d.ts.map +0 -1
- package/dist/utils/invoice1-1.d.ts +0 -117
- package/dist/utils/invoice1-1.d.ts.map +0 -1
- package/dist/utils/invoice1-1.js +0 -10
- package/dist/utils/signature/canonicalize.d.ts +0 -26
- package/dist/utils/signature/canonicalize.d.ts.map +0 -1
- package/dist/utils/signature/canonicalize.js +0 -3
- package/dist/utils/signature/hashCert.d.ts +0 -15
- package/dist/utils/signature/hashCert.d.ts.map +0 -1
- package/dist/utils/signature/hashCert.js +0 -3
- package/dist/utils/signature/hashSignedProperties.d.ts +0 -25
- package/dist/utils/signature/hashSignedProperties.d.ts.map +0 -1
- package/dist/utils/signature/hashSignedProperties.js +0 -3
- package/dist/utils/signature/populateFinalDocument.d.ts +0 -23
- package/dist/utils/signature/populateFinalDocument.d.ts.map +0 -1
- package/dist/utils/signature/populateFinalDocument.js +0 -3
- package/dist/utils/signature/populateSignedProperties.d.ts +0 -23
- package/dist/utils/signature/populateSignedProperties.d.ts.map +0 -1
- package/dist/utils/signature/populateSignedProperties.js +0 -3
- package/dist/utils/signature/sign.d.ts +0 -16
- package/dist/utils/signature/sign.d.ts.map +0 -1
- package/dist/utils/signature/sign.js +0 -3
- package/dist/utils/signature/transform.d.ts +0 -16
- package/dist/utils/signature/transform.d.ts.map +0 -1
- package/dist/utils/signature/transform.js +0 -3
- package/src/types/documents/index.d.ts +0 -1
- package/src/types/documents/invoice-1_1.d.ts +0 -439
- package/src/utils/MyInvoisClient.ts +0 -501
- package/src/utils/debug/debug-document-hash.ts +0 -249
- package/src/utils/debug/debug-invoice-submission.ts +0 -355
- package/src/utils/invoice1-1.ts +0 -671
- package/src/utils/signature/canonicalize.ts +0 -104
- package/src/utils/signature/hashCert.ts +0 -115
- package/src/utils/signature/hashSignedProperties.ts +0 -155
- package/src/utils/signature/populateFinalDocument.ts +0 -187
- package/src/utils/signature/populateSignedProperties.ts +0 -87
- package/src/utils/signature/sign.ts +0 -51
- package/src/utils/signature/transform.ts +0 -99
- package/test/canonicalize.test.ts +0 -110
- package/test/hashCert.test.ts +0 -95
- package/test/hashSignedProperties.test.ts +0 -140
- package/test/populateFinalDocument.test.ts +0 -218
- package/test/populateSignedProperties.test.ts +0 -155
- package/test/sign.test.ts +0 -70
- package/test/transform.test.ts +0 -158
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"currencies-S5g1gzBU.d.cts","names":["CurrencyCode","CurrencyCodeEnum","Currency"],"sources":["../src/types/currencies.d.ts"],"sourcesContent":["/**\n * Represents the allowed ISO-4217 3-letter currency codes.\n * Based on the documentation: https://sdk.myinvois.hasil.gov.my/codes/currencies/\n */\nexport type CurrencyCode =\n | 'AED'\n | 'AFN'\n | 'ALL'\n | 'AMD'\n | 'ANG'\n | 'AOA'\n | 'ARS'\n | 'AUD'\n | 'AWG'\n | 'AZN'\n | 'BAM'\n | 'BBD'\n | 'BDT'\n | 'BGN'\n | 'BHD'\n | 'BIF'\n | 'BMD'\n | 'BND'\n | 'BOB'\n | 'BOV'\n | 'BRL'\n | 'BSD'\n | 'BTN'\n | 'BWP'\n | 'BYN'\n | 'BZD'\n | 'CAD'\n | 'CDF'\n | 'CHE'\n | 'CHF'\n | 'CHW'\n | 'CLF'\n | 'CLP'\n | 'CNY'\n | 'COP'\n | 'COU'\n | 'CRC'\n | 'CUC'\n | 'CUP'\n | 'CVE'\n | 'CZK'\n | 'DJF'\n | 'DKK'\n | 'DOP'\n | 'DZD'\n | 'EGP'\n | 'ERN'\n | 'ETB'\n | 'EUR'\n | 'FJD'\n | 'FKP'\n | 'GBP'\n | 'GEL'\n | 'GHS'\n | 'GIP'\n | 'GMD'\n | 'GNF'\n | 'GTQ'\n | 'GYD'\n | 'HKD'\n | 'HNL'\n | 'HRK'\n | 'HTG'\n | 'HUF'\n | 'IDR'\n | 'ILS'\n | 'INR'\n | 'IQD'\n | 'IRR'\n | 'ISK'\n | 'JMD'\n | 'JOD'\n | 'JPY'\n | 'KES'\n | 'KGS'\n | 'KHR'\n | 'KMF'\n | 'KPW'\n | 'KRW'\n | 'KWD'\n | 'KYD'\n | 'KZT'\n | 'LAK'\n | 'LBP'\n | 'LKR'\n | 'LRD'\n | 'LSL'\n | 'LYD'\n | 'MAD'\n | 'MDL'\n | 'MGA'\n | 'MKD'\n | 'MMK'\n | 'MNT'\n | 'MOP'\n | 'MRU'\n | 'MUR'\n | 'MVR'\n | 'MWK'\n | 'MXN'\n | 'MXV'\n | 'MYR'\n | 'MZN'\n | 'NAD'\n | 'NGN'\n | 'NIO'\n | 'NOK'\n | 'NPR'\n | 'NZD'\n | 'OMR'\n | 'PAB'\n | 'PEN'\n | 'PGK'\n | 'PHP'\n | 'PKR'\n | 'PLN'\n | 'PYG'\n | 'QAR'\n | 'RON'\n | 'RSD'\n | 'RUB'\n | 'RWF'\n | 'SAR'\n | 'SBD'\n | 'SCR'\n | 'SDG'\n | 'SEK'\n | 'SGD'\n | 'SHP'\n | 'SLL'\n | 'SOS'\n | 'SRD'\n | 'SSP'\n | 'STN'\n | 'SVC'\n | 'SYP'\n | 'SZL'\n | 'THB'\n | 'TJS'\n | 'TMT'\n | 'TND'\n | 'TOP'\n | 'TRY'\n | 'TTD'\n | 'TWD'\n | 'TZS'\n | 'UAH'\n | 'UGX'\n | 'USD'\n | 'USN'\n | 'UYI'\n | 'UYU'\n | 'UYW'\n | 'UZS'\n | 'VED'\n | 'VES'\n | 'VND'\n | 'VUV'\n | 'WST'\n | 'XAF'\n | 'XAG'\n | 'XAU'\n | 'XBA'\n | 'XBB'\n | 'XBC'\n | 'XBD'\n | 'XCD'\n | 'XDR'\n | 'XOF'\n | 'XPD'\n | 'XPF'\n | 'XPT'\n | 'XSU'\n | 'XUA'\n | 'XXX'\n | 'YER'\n | 'ZAR'\n | 'ZMW'\n | 'ZWL'\n\n/**\n * Enum representing the allowed ISO-4217 3-letter currency codes.\n * Provides a more readable way to reference currency codes.\n *\n * @example\n * const currency = CurrencyCodeEnum.MYR;\n * console.log(currency); // Output: \"MYR\"\n */\nexport enum CurrencyCodeEnum {\n AED = 'AED',\n AFN = 'AFN',\n ALL = 'ALL',\n AMD = 'AMD',\n ANG = 'ANG',\n AOA = 'AOA',\n ARS = 'ARS',\n AUD = 'AUD',\n AWG = 'AWG',\n AZN = 'AZN',\n BAM = 'BAM',\n BBD = 'BBD',\n BDT = 'BDT',\n BGN = 'BGN',\n BHD = 'BHD',\n BIF = 'BIF',\n BMD = 'BMD',\n BND = 'BND',\n BOB = 'BOB',\n BOV = 'BOV',\n BRL = 'BRL',\n BSD = 'BSD',\n BTN = 'BTN',\n BWP = 'BWP',\n BYN = 'BYN',\n BZD = 'BZD',\n CAD = 'CAD',\n CDF = 'CDF',\n CHE = 'CHE',\n CHF = 'CHF',\n CHW = 'CHW',\n CLF = 'CLF',\n CLP = 'CLP',\n CNY = 'CNY',\n COP = 'COP',\n COU = 'COU',\n CRC = 'CRC',\n CUC = 'CUC',\n CUP = 'CUP',\n CVE = 'CVE',\n CZK = 'CZK',\n DJF = 'DJF',\n DKK = 'DKK',\n DOP = 'DOP',\n DZD = 'DZD',\n EGP = 'EGP',\n ERN = 'ERN',\n ETB = 'ETB',\n EUR = 'EUR',\n FJD = 'FJD',\n FKP = 'FKP',\n GBP = 'GBP',\n GEL = 'GEL',\n GHS = 'GHS',\n GIP = 'GIP',\n GMD = 'GMD',\n GNF = 'GNF',\n GTQ = 'GTQ',\n GYD = 'GYD',\n HKD = 'HKD',\n HNL = 'HNL',\n HRK = 'HRK',\n HTG = 'HTG',\n HUF = 'HUF',\n IDR = 'IDR',\n ILS = 'ILS',\n INR = 'INR',\n IQD = 'IQD',\n IRR = 'IRR',\n ISK = 'ISK',\n JMD = 'JMD',\n JOD = 'JOD',\n JPY = 'JPY',\n KES = 'KES',\n KGS = 'KGS',\n KHR = 'KHR',\n KMF = 'KMF',\n KPW = 'KPW',\n KRW = 'KRW',\n KWD = 'KWD',\n KYD = 'KYD',\n KZT = 'KZT',\n LAK = 'LAK',\n LBP = 'LBP',\n LKR = 'LKR',\n LRD = 'LRD',\n LSL = 'LSL',\n LYD = 'LYD',\n MAD = 'MAD',\n MDL = 'MDL',\n MGA = 'MGA',\n MKD = 'MKD',\n MMK = 'MMK',\n MNT = 'MNT',\n MOP = 'MOP',\n MRU = 'MRU',\n MUR = 'MUR',\n MVR = 'MVR',\n MWK = 'MWK',\n MXN = 'MXN',\n MXV = 'MXV',\n MYR = 'MYR',\n MZN = 'MZN',\n NAD = 'NAD',\n NGN = 'NGN',\n NIO = 'NIO',\n NOK = 'NOK',\n NPR = 'NPR',\n NZD = 'NZD',\n OMR = 'OMR',\n PAB = 'PAB',\n PEN = 'PEN',\n PGK = 'PGK',\n PHP = 'PHP',\n PKR = 'PKR',\n PLN = 'PLN',\n PYG = 'PYG',\n QAR = 'QAR',\n RON = 'RON',\n RSD = 'RSD',\n RUB = 'RUB',\n RWF = 'RWF',\n SAR = 'SAR',\n SBD = 'SBD',\n SCR = 'SCR',\n SDG = 'SDG',\n SEK = 'SEK',\n SGD = 'SGD',\n SHP = 'SHP',\n SLL = 'SLL',\n SOS = 'SOS',\n SRD = 'SRD',\n SSP = 'SSP',\n STN = 'STN',\n SVC = 'SVC',\n SYP = 'SYP',\n SZL = 'SZL',\n THB = 'THB',\n TJS = 'TJS',\n TMT = 'TMT',\n TND = 'TND',\n TOP = 'TOP',\n TRY = 'TRY',\n TTD = 'TTD',\n TWD = 'TWD',\n TZS = 'TZS',\n UAH = 'UAH',\n UGX = 'UGX',\n USD = 'USD',\n USN = 'USN',\n UYI = 'UYI',\n UYU = 'UYU',\n UYW = 'UYW',\n UZS = 'UZS',\n VED = 'VED',\n VES = 'VES',\n VND = 'VND',\n VUV = 'VUV',\n WST = 'WST',\n XAF = 'XAF',\n XAG = 'XAG',\n XAU = 'XAU',\n XBA = 'XBA',\n XBB = 'XBB',\n XBC = 'XBC',\n XBD = 'XBD',\n XCD = 'XCD',\n XDR = 'XDR',\n XOF = 'XOF',\n XPD = 'XPD',\n XPF = 'XPF',\n XPT = 'XPT',\n XSU = 'XSU',\n XUA = 'XUA',\n XXX = 'XXX',\n YER = 'YER',\n ZAR = 'ZAR',\n ZMW = 'ZMW',\n ZWL = 'ZWL',\n}\n\n/**\n * Interface representing a currency entry.\n * Contains the ISO-4217 code and the currency name.\n */\nexport interface Currency {\n code: CurrencyCode\n name: string\n}\n"],"mappings":";;AAIA;AA6LA;AA0LA;KAvXYA,YAAAA;;;;;;;;;;aA6LAC,gBAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA0LKC,QAAAA;QACTF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"e-invoice-BuwtFnlI.d.cts","names":["EInvoiceTypeCode","EInvoiceType","EInvoiceTypeCodeEnum"],"sources":["../src/types/e-invoice.d.ts"],"sourcesContent":["/**\n * Represents the allowed codes for e-Invoice types.\n * Based on the documentation: https://sdk.myinvois.hasil.gov.my/codes/e-invoice-types/\n */\nexport type EInvoiceTypeCode =\n | '01' // Invoice\n | '02' // Credit Note\n | '03' // Debit Note\n | '04' // Refund Note\n | '11' // Self-billed Invoice\n | '12' // Self-billed Credit Note\n | '13' // Self-billed Debit Note\n | '14' // Self-billed Refund Note\n\n/**\n * Interface representing an e-Invoice type entry.\n * Contains the code and its corresponding description.\n */\nexport interface EInvoiceType {\n code: EInvoiceTypeCode\n description: string\n}\n\n/**\n * Enum representing the allowed codes for e-Invoice types with descriptive names.\n * Provides a more readable way to reference e-Invoice types compared to using raw codes.\n *\n * @example\n * const invoiceCode = EInvoiceTypeCodeEnum.Invoice;\n * console.log(invoiceCode); // Output: \"01\"\n */\nexport enum EInvoiceTypeCodeEnum {\n Invoice = '01',\n CreditNote = '02',\n DebitNote = '03',\n RefundNote = '04',\n SelfBilledInvoice = '11',\n SelfBilledCreditNote = '12',\n SelfBilledDebitNote = '13',\n SelfBilledRefundNote = '14',\n}\n"],"mappings":";;AAIA;AAcA;AAaA;KA3BYA,gBAAAA;;;;;;;;;;;;;UAcKC,YAAAA;QACTD;;;;;;;;;;;;aAYIE,oBAAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"e-invoice-C2TxhyrK.d.ts","names":["EInvoiceTypeCode","EInvoiceType","EInvoiceTypeCodeEnum"],"sources":["../src/types/e-invoice.d.ts"],"sourcesContent":["/**\n * Represents the allowed codes for e-Invoice types.\n * Based on the documentation: https://sdk.myinvois.hasil.gov.my/codes/e-invoice-types/\n */\nexport type EInvoiceTypeCode =\n | '01' // Invoice\n | '02' // Credit Note\n | '03' // Debit Note\n | '04' // Refund Note\n | '11' // Self-billed Invoice\n | '12' // Self-billed Credit Note\n | '13' // Self-billed Debit Note\n | '14' // Self-billed Refund Note\n\n/**\n * Interface representing an e-Invoice type entry.\n * Contains the code and its corresponding description.\n */\nexport interface EInvoiceType {\n code: EInvoiceTypeCode\n description: string\n}\n\n/**\n * Enum representing the allowed codes for e-Invoice types with descriptive names.\n * Provides a more readable way to reference e-Invoice types compared to using raw codes.\n *\n * @example\n * const invoiceCode = EInvoiceTypeCodeEnum.Invoice;\n * console.log(invoiceCode); // Output: \"01\"\n */\nexport enum EInvoiceTypeCodeEnum {\n Invoice = '01',\n CreditNote = '02',\n DebitNote = '03',\n RefundNote = '04',\n SelfBilledInvoice = '11',\n SelfBilledCreditNote = '12',\n SelfBilledDebitNote = '13',\n SelfBilledRefundNote = '14',\n}\n"],"mappings":";;AAIA;AAcA;AAaA;KA3BYA,gBAAAA;;;;;;;;;;;;;UAcKC,YAAAA;QACTD;;;;;;;;;;;;aAYIE,oBAAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getBaseUrl-Dx6RDC8I.js","names":["environment: 'sandbox' | 'production'"],"sources":["../src/utils/getBaseUrl.ts"],"sourcesContent":["export const getBaseUrl = (environment: 'sandbox' | 'production'): string => {\n return environment === 'sandbox'\n ? 'https://preprod-api.myinvois.hasil.gov.my'\n : 'https://api.myinvois.hasil.gov.my'\n}\n"],"mappings":";AAAA,MAAa,aAAa,CAACA,gBAAkD;AAC3E,QAAO,gBAAgB,YACnB,8CACA;AACL"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import * as crypto from "crypto";
|
|
2
|
-
|
|
3
|
-
//#region src/utils/signature/hashCert.ts
|
|
4
|
-
/**
|
|
5
|
-
* Extracts the Base64 encoded DER certificate from a PEM string.
|
|
6
|
-
* Removes headers/footers and newlines.
|
|
7
|
-
*
|
|
8
|
-
* @param pemCert The certificate in PEM format (string).
|
|
9
|
-
* @returns The Base64 encoded DER certificate string.
|
|
10
|
-
* @throws {Error} If the PEM format is invalid or content is not found.
|
|
11
|
-
*/
|
|
12
|
-
function extractBase64FromPem(pemCert) {
|
|
13
|
-
const beginMarker = "-----BEGIN CERTIFICATE-----";
|
|
14
|
-
const endMarker = "-----END CERTIFICATE-----";
|
|
15
|
-
let startIndex = pemCert.indexOf(beginMarker);
|
|
16
|
-
let endIndex = pemCert.indexOf(endMarker);
|
|
17
|
-
let currentBeginMarker = beginMarker;
|
|
18
|
-
if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {
|
|
19
|
-
const altBeginMarker = "-----BEGIN PUBLIC KEY-----";
|
|
20
|
-
const altEndMarker = "-----END PUBLIC KEY-----";
|
|
21
|
-
startIndex = pemCert.indexOf(altBeginMarker);
|
|
22
|
-
endIndex = pemCert.indexOf(altEndMarker);
|
|
23
|
-
currentBeginMarker = altBeginMarker;
|
|
24
|
-
if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) throw new Error("Invalid PEM format: Missing or misplaced BEGIN/END markers (CERTIFICATE or other expected type).");
|
|
25
|
-
}
|
|
26
|
-
const content = pemCert.substring(startIndex + currentBeginMarker.length, endIndex);
|
|
27
|
-
const invalidCharRegex = /[^A-Za-z0-9+/=\s]/;
|
|
28
|
-
if (invalidCharRegex.test(content)) throw new Error("Invalid non-Base64, non-whitespace characters detected in PEM content block.");
|
|
29
|
-
const base64Der = content.replace(/\s/g, "");
|
|
30
|
-
const base64FormatRegex = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
31
|
-
if (!base64FormatRegex.test(base64Der)) throw new Error("Invalid Base64 structure (e.g., padding) after cleaning PEM content.");
|
|
32
|
-
if (base64Der.length === 0) throw new Error("Invalid PEM format: No Base64 content found between markers after cleaning.");
|
|
33
|
-
return base64Der;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Hashes the signing certificate using SHA-256 and encodes the hash in Base64.
|
|
37
|
-
*
|
|
38
|
-
* Corresponds to Step 5 in the MyInvois Signature Creation guide:
|
|
39
|
-
* https://sdk.myinvois.hasil.gov.my/signature-creation/#step-5-generate-the-certificate-hash
|
|
40
|
-
*
|
|
41
|
-
* @param certificatePem The signing certificate in PEM format (string).
|
|
42
|
-
* @returns The Base64 encoded SHA-256 hash of the certificate (CertDigest).
|
|
43
|
-
* @throws {Error} If hashing fails or PEM is invalid.
|
|
44
|
-
*/
|
|
45
|
-
function hashCertificate(certificatePem) {
|
|
46
|
-
try {
|
|
47
|
-
const base64Der = extractBase64FromPem(certificatePem);
|
|
48
|
-
const rawDer = Buffer.from(base64Der, "base64");
|
|
49
|
-
if (base64Der.length > 0 && rawDer.length === 0) throw new Error("Invalid Base64 content characters in PEM certificate (Buffer decoding check).");
|
|
50
|
-
const hash = crypto.createHash("sha256");
|
|
51
|
-
hash.update(rawDer);
|
|
52
|
-
const base64CertDigest = hash.digest("base64");
|
|
53
|
-
return base64CertDigest;
|
|
54
|
-
} catch (error) {
|
|
55
|
-
console.error("Error hashing certificate:", error);
|
|
56
|
-
throw new Error(`Failed to hash certificate: ${error.message || error}`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
//#endregion
|
|
61
|
-
export { hashCertificate };
|
|
62
|
-
//# sourceMappingURL=hashCert-Bol7lIh2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hashCert-Bol7lIh2.js","names":["pemCert: string","certificatePem: string","error: any"],"sources":["../src/utils/signature/hashCert.ts"],"sourcesContent":["import * as crypto from 'crypto'\n\n/**\n * Extracts the Base64 encoded DER certificate from a PEM string.\n * Removes headers/footers and newlines.\n *\n * @param pemCert The certificate in PEM format (string).\n * @returns The Base64 encoded DER certificate string.\n * @throws {Error} If the PEM format is invalid or content is not found.\n */\nfunction extractBase64FromPem(pemCert: string): string {\n const beginMarker = '-----BEGIN CERTIFICATE-----'\n const endMarker = '-----END CERTIFICATE-----'\n\n let startIndex = pemCert.indexOf(beginMarker)\n let endIndex = pemCert.indexOf(endMarker)\n let currentBeginMarker = beginMarker\n\n // Check for primary markers\n if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {\n // Try finding other common markers if the primary one fails\n const altBeginMarker = '-----BEGIN PUBLIC KEY-----'\n const altEndMarker = '-----END PUBLIC KEY-----'\n startIndex = pemCert.indexOf(altBeginMarker)\n endIndex = pemCert.indexOf(altEndMarker)\n currentBeginMarker = altBeginMarker\n\n if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {\n throw new Error(\n 'Invalid PEM format: Missing or misplaced BEGIN/END markers (CERTIFICATE or other expected type).',\n )\n }\n }\n\n // Extract the raw content between markers (including newlines, etc.)\n const content = pemCert.substring(\n startIndex + currentBeginMarker.length,\n endIndex,\n )\n\n // Validate the raw content *before* cleaning - check for invalid chars within the block\n // This regex checks if there's anything *other than* whitespace or Base64 characters.\n const invalidCharRegex = /[^A-Za-z0-9+/=\\s]/\n if (invalidCharRegex.test(content)) {\n throw new Error(\n 'Invalid non-Base64, non-whitespace characters detected in PEM content block.',\n )\n }\n\n // Clean the extracted content: remove only whitespace (newlines, spaces)\n const base64Der = content.replace(/\\s/g, '')\n\n // Final check: ensure the cleaned string is valid Base64 format (e.g., correct padding)\n const base64FormatRegex = /^[A-Za-z0-9+/]*={0,2}$/\n if (!base64FormatRegex.test(base64Der)) {\n // This might catch incorrect padding or other structural issues post-cleaning\n throw new Error(\n 'Invalid Base64 structure (e.g., padding) after cleaning PEM content.',\n )\n }\n\n if (base64Der.length === 0) {\n throw new Error(\n 'Invalid PEM format: No Base64 content found between markers after cleaning.',\n )\n }\n\n return base64Der\n}\n\n/**\n * Hashes the signing certificate using SHA-256 and encodes the hash in Base64.\n *\n * Corresponds to Step 5 in the MyInvois Signature Creation guide:\n * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-5-generate-the-certificate-hash\n *\n * @param certificatePem The signing certificate in PEM format (string).\n * @returns The Base64 encoded SHA-256 hash of the certificate (CertDigest).\n * @throws {Error} If hashing fails or PEM is invalid.\n */\nexport function hashCertificate(certificatePem: string): string {\n try {\n // 1. Extract *and validate* Base64 DER content from PEM\n const base64Der = extractBase64FromPem(certificatePem)\n\n // Base64 validation is now done inside extractBase64FromPem\n // const base64Regex = /^[A-Za-z0-9+/]*={0,2}$/;\n // if (base64Der.length > 0 && !base64Regex.test(base64Der)) {\n // throw new Error('Invalid Base64 characters detected in PEM certificate content.')\n // }\n\n // 2. Decode Base64 to get the raw DER bytes\n const rawDer = Buffer.from(base64Der, 'base64')\n\n // The check below might be redundant now with the improved extraction/validation,\n // but kept as a fallback safety measure.\n if (base64Der.length > 0 && rawDer.length === 0) {\n throw new Error(\n 'Invalid Base64 content characters in PEM certificate (Buffer decoding check).',\n )\n }\n\n // 3. Hash the raw DER certificate using SHA-256\n const hash = crypto.createHash('sha256')\n hash.update(rawDer)\n\n // 4. Encode the hash digest to Base64\n const base64CertDigest = hash.digest('base64')\n\n return base64CertDigest\n } catch (error: any) {\n console.error('Error hashing certificate:', error)\n throw new Error(`Failed to hash certificate: ${error.message || error}`)\n }\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAS,qBAAqBA,SAAyB;CACrD,MAAM,cAAc;CACpB,MAAM,YAAY;CAElB,IAAI,aAAa,QAAQ,QAAQ,YAAY;CAC7C,IAAI,WAAW,QAAQ,QAAQ,UAAU;CACzC,IAAI,qBAAqB;AAGzB,KAAI,eAAe,MAAM,aAAa,MAAM,YAAY,YAAY;EAElE,MAAM,iBAAiB;EACvB,MAAM,eAAe;AACrB,eAAa,QAAQ,QAAQ,eAAe;AAC5C,aAAW,QAAQ,QAAQ,aAAa;AACxC,uBAAqB;AAErB,MAAI,eAAe,MAAM,aAAa,MAAM,YAAY,WACtD,OAAM,IAAI,MACR;CAGL;CAGD,MAAM,UAAU,QAAQ,UACtB,aAAa,mBAAmB,QAChC,SACD;CAID,MAAM,mBAAmB;AACzB,KAAI,iBAAiB,KAAK,QAAQ,CAChC,OAAM,IAAI,MACR;CAKJ,MAAM,YAAY,QAAQ,QAAQ,OAAO,GAAG;CAG5C,MAAM,oBAAoB;AAC1B,MAAK,kBAAkB,KAAK,UAAU,CAEpC,OAAM,IAAI,MACR;AAIJ,KAAI,UAAU,WAAW,EACvB,OAAM,IAAI,MACR;AAIJ,QAAO;AACR;;;;;;;;;;;AAYD,SAAgB,gBAAgBC,gBAAgC;AAC9D,KAAI;EAEF,MAAM,YAAY,qBAAqB,eAAe;EAStD,MAAM,SAAS,OAAO,KAAK,WAAW,SAAS;AAI/C,MAAI,UAAU,SAAS,KAAK,OAAO,WAAW,EAC5C,OAAM,IAAI,MACR;EAKJ,MAAM,OAAO,OAAO,WAAW,SAAS;AACxC,OAAK,OAAO,OAAO;EAGnB,MAAM,mBAAmB,KAAK,OAAO,SAAS;AAE9C,SAAO;CACR,SAAQC,OAAY;AACnB,UAAQ,MAAM,8BAA8B,MAAM;AAClD,QAAM,IAAI,OAAO,8BAA8B,MAAM,WAAW,MAAM;CACvE;AACF"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
-
const crypto = require_chunk.__toESM(require("crypto"));
|
|
3
|
-
|
|
4
|
-
//#region src/utils/signature/hashCert.ts
|
|
5
|
-
/**
|
|
6
|
-
* Extracts the Base64 encoded DER certificate from a PEM string.
|
|
7
|
-
* Removes headers/footers and newlines.
|
|
8
|
-
*
|
|
9
|
-
* @param pemCert The certificate in PEM format (string).
|
|
10
|
-
* @returns The Base64 encoded DER certificate string.
|
|
11
|
-
* @throws {Error} If the PEM format is invalid or content is not found.
|
|
12
|
-
*/
|
|
13
|
-
function extractBase64FromPem(pemCert) {
|
|
14
|
-
const beginMarker = "-----BEGIN CERTIFICATE-----";
|
|
15
|
-
const endMarker = "-----END CERTIFICATE-----";
|
|
16
|
-
let startIndex = pemCert.indexOf(beginMarker);
|
|
17
|
-
let endIndex = pemCert.indexOf(endMarker);
|
|
18
|
-
let currentBeginMarker = beginMarker;
|
|
19
|
-
if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {
|
|
20
|
-
const altBeginMarker = "-----BEGIN PUBLIC KEY-----";
|
|
21
|
-
const altEndMarker = "-----END PUBLIC KEY-----";
|
|
22
|
-
startIndex = pemCert.indexOf(altBeginMarker);
|
|
23
|
-
endIndex = pemCert.indexOf(altEndMarker);
|
|
24
|
-
currentBeginMarker = altBeginMarker;
|
|
25
|
-
if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) throw new Error("Invalid PEM format: Missing or misplaced BEGIN/END markers (CERTIFICATE or other expected type).");
|
|
26
|
-
}
|
|
27
|
-
const content = pemCert.substring(startIndex + currentBeginMarker.length, endIndex);
|
|
28
|
-
const invalidCharRegex = /[^A-Za-z0-9+/=\s]/;
|
|
29
|
-
if (invalidCharRegex.test(content)) throw new Error("Invalid non-Base64, non-whitespace characters detected in PEM content block.");
|
|
30
|
-
const base64Der = content.replace(/\s/g, "");
|
|
31
|
-
const base64FormatRegex = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
32
|
-
if (!base64FormatRegex.test(base64Der)) throw new Error("Invalid Base64 structure (e.g., padding) after cleaning PEM content.");
|
|
33
|
-
if (base64Der.length === 0) throw new Error("Invalid PEM format: No Base64 content found between markers after cleaning.");
|
|
34
|
-
return base64Der;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Hashes the signing certificate using SHA-256 and encodes the hash in Base64.
|
|
38
|
-
*
|
|
39
|
-
* Corresponds to Step 5 in the MyInvois Signature Creation guide:
|
|
40
|
-
* https://sdk.myinvois.hasil.gov.my/signature-creation/#step-5-generate-the-certificate-hash
|
|
41
|
-
*
|
|
42
|
-
* @param certificatePem The signing certificate in PEM format (string).
|
|
43
|
-
* @returns The Base64 encoded SHA-256 hash of the certificate (CertDigest).
|
|
44
|
-
* @throws {Error} If hashing fails or PEM is invalid.
|
|
45
|
-
*/
|
|
46
|
-
function hashCertificate(certificatePem) {
|
|
47
|
-
try {
|
|
48
|
-
const base64Der = extractBase64FromPem(certificatePem);
|
|
49
|
-
const rawDer = Buffer.from(base64Der, "base64");
|
|
50
|
-
if (base64Der.length > 0 && rawDer.length === 0) throw new Error("Invalid Base64 content characters in PEM certificate (Buffer decoding check).");
|
|
51
|
-
const hash = crypto.createHash("sha256");
|
|
52
|
-
hash.update(rawDer);
|
|
53
|
-
const base64CertDigest = hash.digest("base64");
|
|
54
|
-
return base64CertDigest;
|
|
55
|
-
} catch (error) {
|
|
56
|
-
console.error("Error hashing certificate:", error);
|
|
57
|
-
throw new Error(`Failed to hash certificate: ${error.message || error}`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
//#endregion
|
|
62
|
-
Object.defineProperty(exports, 'hashCertificate', {
|
|
63
|
-
enumerable: true,
|
|
64
|
-
get: function () {
|
|
65
|
-
return hashCertificate;
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
//# sourceMappingURL=hashCert-mlYEuYex.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hashCert-mlYEuYex.cjs","names":["pemCert: string","certificatePem: string","error: any"],"sources":["../src/utils/signature/hashCert.ts"],"sourcesContent":["import * as crypto from 'crypto'\n\n/**\n * Extracts the Base64 encoded DER certificate from a PEM string.\n * Removes headers/footers and newlines.\n *\n * @param pemCert The certificate in PEM format (string).\n * @returns The Base64 encoded DER certificate string.\n * @throws {Error} If the PEM format is invalid or content is not found.\n */\nfunction extractBase64FromPem(pemCert: string): string {\n const beginMarker = '-----BEGIN CERTIFICATE-----'\n const endMarker = '-----END CERTIFICATE-----'\n\n let startIndex = pemCert.indexOf(beginMarker)\n let endIndex = pemCert.indexOf(endMarker)\n let currentBeginMarker = beginMarker\n\n // Check for primary markers\n if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {\n // Try finding other common markers if the primary one fails\n const altBeginMarker = '-----BEGIN PUBLIC KEY-----'\n const altEndMarker = '-----END PUBLIC KEY-----'\n startIndex = pemCert.indexOf(altBeginMarker)\n endIndex = pemCert.indexOf(altEndMarker)\n currentBeginMarker = altBeginMarker\n\n if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {\n throw new Error(\n 'Invalid PEM format: Missing or misplaced BEGIN/END markers (CERTIFICATE or other expected type).',\n )\n }\n }\n\n // Extract the raw content between markers (including newlines, etc.)\n const content = pemCert.substring(\n startIndex + currentBeginMarker.length,\n endIndex,\n )\n\n // Validate the raw content *before* cleaning - check for invalid chars within the block\n // This regex checks if there's anything *other than* whitespace or Base64 characters.\n const invalidCharRegex = /[^A-Za-z0-9+/=\\s]/\n if (invalidCharRegex.test(content)) {\n throw new Error(\n 'Invalid non-Base64, non-whitespace characters detected in PEM content block.',\n )\n }\n\n // Clean the extracted content: remove only whitespace (newlines, spaces)\n const base64Der = content.replace(/\\s/g, '')\n\n // Final check: ensure the cleaned string is valid Base64 format (e.g., correct padding)\n const base64FormatRegex = /^[A-Za-z0-9+/]*={0,2}$/\n if (!base64FormatRegex.test(base64Der)) {\n // This might catch incorrect padding or other structural issues post-cleaning\n throw new Error(\n 'Invalid Base64 structure (e.g., padding) after cleaning PEM content.',\n )\n }\n\n if (base64Der.length === 0) {\n throw new Error(\n 'Invalid PEM format: No Base64 content found between markers after cleaning.',\n )\n }\n\n return base64Der\n}\n\n/**\n * Hashes the signing certificate using SHA-256 and encodes the hash in Base64.\n *\n * Corresponds to Step 5 in the MyInvois Signature Creation guide:\n * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-5-generate-the-certificate-hash\n *\n * @param certificatePem The signing certificate in PEM format (string).\n * @returns The Base64 encoded SHA-256 hash of the certificate (CertDigest).\n * @throws {Error} If hashing fails or PEM is invalid.\n */\nexport function hashCertificate(certificatePem: string): string {\n try {\n // 1. Extract *and validate* Base64 DER content from PEM\n const base64Der = extractBase64FromPem(certificatePem)\n\n // Base64 validation is now done inside extractBase64FromPem\n // const base64Regex = /^[A-Za-z0-9+/]*={0,2}$/;\n // if (base64Der.length > 0 && !base64Regex.test(base64Der)) {\n // throw new Error('Invalid Base64 characters detected in PEM certificate content.')\n // }\n\n // 2. Decode Base64 to get the raw DER bytes\n const rawDer = Buffer.from(base64Der, 'base64')\n\n // The check below might be redundant now with the improved extraction/validation,\n // but kept as a fallback safety measure.\n if (base64Der.length > 0 && rawDer.length === 0) {\n throw new Error(\n 'Invalid Base64 content characters in PEM certificate (Buffer decoding check).',\n )\n }\n\n // 3. Hash the raw DER certificate using SHA-256\n const hash = crypto.createHash('sha256')\n hash.update(rawDer)\n\n // 4. Encode the hash digest to Base64\n const base64CertDigest = hash.digest('base64')\n\n return base64CertDigest\n } catch (error: any) {\n console.error('Error hashing certificate:', error)\n throw new Error(`Failed to hash certificate: ${error.message || error}`)\n }\n}\n"],"mappings":";;;;;;;;;;;;AAUA,SAAS,qBAAqBA,SAAyB;CACrD,MAAM,cAAc;CACpB,MAAM,YAAY;CAElB,IAAI,aAAa,QAAQ,QAAQ,YAAY;CAC7C,IAAI,WAAW,QAAQ,QAAQ,UAAU;CACzC,IAAI,qBAAqB;AAGzB,KAAI,eAAe,MAAM,aAAa,MAAM,YAAY,YAAY;EAElE,MAAM,iBAAiB;EACvB,MAAM,eAAe;AACrB,eAAa,QAAQ,QAAQ,eAAe;AAC5C,aAAW,QAAQ,QAAQ,aAAa;AACxC,uBAAqB;AAErB,MAAI,eAAe,MAAM,aAAa,MAAM,YAAY,WACtD,OAAM,IAAI,MACR;CAGL;CAGD,MAAM,UAAU,QAAQ,UACtB,aAAa,mBAAmB,QAChC,SACD;CAID,MAAM,mBAAmB;AACzB,KAAI,iBAAiB,KAAK,QAAQ,CAChC,OAAM,IAAI,MACR;CAKJ,MAAM,YAAY,QAAQ,QAAQ,OAAO,GAAG;CAG5C,MAAM,oBAAoB;AAC1B,MAAK,kBAAkB,KAAK,UAAU,CAEpC,OAAM,IAAI,MACR;AAIJ,KAAI,UAAU,WAAW,EACvB,OAAM,IAAI,MACR;AAIJ,QAAO;AACR;;;;;;;;;;;AAYD,SAAgB,gBAAgBC,gBAAgC;AAC9D,KAAI;EAEF,MAAM,YAAY,qBAAqB,eAAe;EAStD,MAAM,SAAS,OAAO,KAAK,WAAW,SAAS;AAI/C,MAAI,UAAU,SAAS,KAAK,OAAO,WAAW,EAC5C,OAAM,IAAI,MACR;EAKJ,MAAM,OAAO,OAAO,WAAW,SAAS;AACxC,OAAK,OAAO,OAAO;EAGnB,MAAM,mBAAmB,KAAK,OAAO,SAAS;AAE9C,SAAO;CACR,SAAQC,OAAY;AACnB,UAAQ,MAAM,8BAA8B,MAAM;AAClD,QAAM,IAAI,OAAO,8BAA8B,MAAM,WAAW,MAAM;CACvE;AACF"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import * as crypto from "crypto";
|
|
2
|
-
import c14nFactory from "xml-c14n";
|
|
3
|
-
import * as xpath from "xpath-ts";
|
|
4
|
-
|
|
5
|
-
//#region src/utils/signature/hashSignedProperties.ts
|
|
6
|
-
/**
|
|
7
|
-
* Selects the SignedProperties element, canonicalizes it using the best available
|
|
8
|
-
* canonicalization algorithm, hashes it using SHA-256, and returns the Base64 encoded digest.
|
|
9
|
-
*
|
|
10
|
-
* Corresponds to Step 7 in the MyInvois Signature Creation guide:
|
|
11
|
-
* https://sdk.myinvois.hasil.gov.my/signature-creation/#step-7-generate-signed-properties-hash
|
|
12
|
-
*
|
|
13
|
-
* Note: MyInvois documentation specifies C14N 1.1, but due to limited Node.js library support,
|
|
14
|
-
* this implementation uses Exclusive C14N which is widely supported and should be compatible
|
|
15
|
-
* in most cases. If signature validation fails, this may need to be updated.
|
|
16
|
-
*
|
|
17
|
-
* @param doc The XML Document object (from xmldom-ts) after SignedProperties population (Step 6).
|
|
18
|
-
* @param algorithm Optional canonicalization algorithm URI. Defaults to Exclusive C14N.
|
|
19
|
-
* @returns A Promise resolving to the Base64 encoded SHA-256 hash (PropsDigest).
|
|
20
|
-
* @throws {Error} If the SignedProperties element cannot be found or canonicalization/hashing fails.
|
|
21
|
-
*/
|
|
22
|
-
function hashSignedProperties(doc, algorithm = "http://www.w3.org/2001/10/xml-exc-c14n#") {
|
|
23
|
-
return new Promise((resolve, reject) => {
|
|
24
|
-
try {
|
|
25
|
-
const ns = {
|
|
26
|
-
inv: "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
|
|
27
|
-
ext: "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
|
|
28
|
-
sig: "urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2",
|
|
29
|
-
sac: "urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2",
|
|
30
|
-
ds: "http://www.w3.org/2000/09/xmldsig#",
|
|
31
|
-
xades: "http://uri.etsi.org/01903/v1.3.2#"
|
|
32
|
-
};
|
|
33
|
-
const select = xpath.useNamespaces(ns);
|
|
34
|
-
const signedPropertiesXPath = "/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature/ds:Object/xades:QualifyingProperties/xades:SignedProperties";
|
|
35
|
-
const nodes = select(signedPropertiesXPath, doc);
|
|
36
|
-
if (!Array.isArray(nodes) || nodes.length === 0) throw new Error(`SignedProperties element not found for XPath: ${signedPropertiesXPath}`);
|
|
37
|
-
if (nodes.length > 1) throw new Error(`Multiple SignedProperties elements found (expected 1): ${signedPropertiesXPath}`);
|
|
38
|
-
const signedPropertiesNode = nodes[0];
|
|
39
|
-
if (!signedPropertiesNode) throw new Error("Selected SignedProperties node is invalid or null.");
|
|
40
|
-
const c14n = c14nFactory();
|
|
41
|
-
let algorithmUri = algorithm;
|
|
42
|
-
if (algorithm === "https://www.w3.org/TR/xml-c14n11") {
|
|
43
|
-
console.warn("C14N 1.1 requested for SignedProperties but may not be supported, falling back to Exclusive C14N");
|
|
44
|
-
algorithmUri = "http://www.w3.org/2001/10/xml-exc-c14n#";
|
|
45
|
-
}
|
|
46
|
-
const canonicaliser = c14n.createCanonicaliser(algorithmUri);
|
|
47
|
-
canonicaliser.canonicalise(signedPropertiesNode, (error, canonicalXml) => {
|
|
48
|
-
if (error) {
|
|
49
|
-
console.error("Error during SignedProperties canonicalization:", error);
|
|
50
|
-
return reject(new Error(`SignedProperties canonicalization failed: ${error.message || error}`));
|
|
51
|
-
}
|
|
52
|
-
if (typeof canonicalXml !== "string") return reject(new Error("SignedProperties canonicalization did not return a string result."));
|
|
53
|
-
try {
|
|
54
|
-
const hash = crypto.createHash("sha256");
|
|
55
|
-
hash.update(canonicalXml, "utf8");
|
|
56
|
-
const base64PropsDigest = hash.digest("base64");
|
|
57
|
-
resolve(base64PropsDigest);
|
|
58
|
-
} catch (hashError) {
|
|
59
|
-
console.error("Error during SignedProperties hashing:", hashError);
|
|
60
|
-
reject(new Error(`SignedProperties hashing failed: ${hashError.message || hashError}`));
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
} catch (setupError) {
|
|
64
|
-
console.error("Error setting up or selecting SignedProperties:", setupError);
|
|
65
|
-
reject(new Error(`SignedProperties processing setup failed: ${setupError.message || setupError}`));
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Attempts to use C14N 1.1 for SignedProperties if available, otherwise falls back to Exclusive C14N.
|
|
71
|
-
*/
|
|
72
|
-
async function hashSignedPropertiesWithC14N11Fallback(doc) {
|
|
73
|
-
try {
|
|
74
|
-
return await hashSignedProperties(doc, "http://www.w3.org/2006/12/xml-c14n11");
|
|
75
|
-
} catch (error) {
|
|
76
|
-
console.warn("C14N 1.1 failed for SignedProperties, falling back to Exclusive C14N:", error);
|
|
77
|
-
return await hashSignedProperties(doc, "http://www.w3.org/2001/10/xml-exc-c14n#");
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
//#endregion
|
|
82
|
-
export { hashSignedProperties, hashSignedPropertiesWithC14N11Fallback };
|
|
83
|
-
//# sourceMappingURL=hashSignedProperties-9vj5wlYR.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hashSignedProperties-9vj5wlYR.js","names":["doc: Document","algorithm: string","hashError: any","setupError: any"],"sources":["../src/utils/signature/hashSignedProperties.ts"],"sourcesContent":["import * as crypto from 'crypto'\nimport * as xpath from 'xpath-ts'\nimport c14nFactory from 'xml-c14n'\n\n/**\n * Selects the SignedProperties element, canonicalizes it using the best available\n * canonicalization algorithm, hashes it using SHA-256, and returns the Base64 encoded digest.\n *\n * Corresponds to Step 7 in the MyInvois Signature Creation guide:\n * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-7-generate-signed-properties-hash\n *\n * Note: MyInvois documentation specifies C14N 1.1, but due to limited Node.js library support,\n * this implementation uses Exclusive C14N which is widely supported and should be compatible\n * in most cases. If signature validation fails, this may need to be updated.\n *\n * @param doc The XML Document object (from xmldom-ts) after SignedProperties population (Step 6).\n * @param algorithm Optional canonicalization algorithm URI. Defaults to Exclusive C14N.\n * @returns A Promise resolving to the Base64 encoded SHA-256 hash (PropsDigest).\n * @throws {Error} If the SignedProperties element cannot be found or canonicalization/hashing fails.\n */\nexport function hashSignedProperties(\n doc: Document,\n algorithm: string = 'http://www.w3.org/2001/10/xml-exc-c14n#',\n): Promise<string> {\n return new Promise((resolve, reject) => {\n try {\n // Define namespaces, including the default namespace for Invoice\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 xades: 'http://uri.etsi.org/01903/v1.3.2#',\n }\n const select = xpath.useNamespaces(ns)\n\n // 1. Get the SignedProperties element using XPath\n const signedPropertiesXPath =\n '/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature/ds:Object/xades:QualifyingProperties/xades:SignedProperties'\n const nodes = select(signedPropertiesXPath, doc)\n\n if (!Array.isArray(nodes) || nodes.length === 0) {\n throw new Error(\n `SignedProperties element not found for XPath: ${signedPropertiesXPath}`,\n )\n }\n if (nodes.length > 1) {\n throw new Error(\n `Multiple SignedProperties elements found (expected 1): ${signedPropertiesXPath}`,\n )\n }\n const signedPropertiesNode = nodes[0] as Node\n\n if (!signedPropertiesNode) {\n throw new Error('Selected SignedProperties node is invalid or null.')\n }\n\n // 2. Canonicalize the SignedProperties node\n const c14n = c14nFactory()\n\n // Try C14N 1.1 first, fallback to Exclusive C14N\n let algorithmUri = algorithm\n\n // If C14N 1.1 is requested but not available, use Exclusive C14N\n if (algorithm === 'https://www.w3.org/TR/xml-c14n11') {\n console.warn(\n 'C14N 1.1 requested for SignedProperties but may not be supported, falling back to Exclusive C14N',\n )\n algorithmUri = 'http://www.w3.org/2001/10/xml-exc-c14n#'\n }\n\n const canonicaliser = c14n.createCanonicaliser(algorithmUri)\n\n // Canonicalize the SignedProperties node using the callback pattern\n canonicaliser.canonicalise(\n signedPropertiesNode,\n (error, canonicalXml) => {\n if (error) {\n console.error(\n 'Error during SignedProperties canonicalization:',\n error,\n )\n return reject(\n new Error(\n `SignedProperties canonicalization failed: ${error.message || error}`,\n ),\n )\n }\n\n if (typeof canonicalXml !== 'string') {\n return reject(\n new Error(\n 'SignedProperties canonicalization did not return a string result.',\n ),\n )\n }\n\n try {\n // 3. Hash the canonicalized property tag using SHA-256\n const hash = crypto.createHash('sha256')\n hash.update(canonicalXml, 'utf8')\n\n // 4. Encode the hashed property tag using Base64 Encoder\n const base64PropsDigest = hash.digest('base64')\n\n resolve(base64PropsDigest)\n } catch (hashError: any) {\n console.error('Error during SignedProperties hashing:', hashError)\n reject(\n new Error(\n `SignedProperties hashing failed: ${hashError.message || hashError}`,\n ),\n )\n }\n },\n )\n } catch (setupError: any) {\n console.error(\n 'Error setting up or selecting SignedProperties:',\n setupError,\n )\n reject(\n new Error(\n `SignedProperties processing setup failed: ${setupError.message || setupError}`,\n ),\n )\n }\n })\n}\n\n/**\n * Attempts to use C14N 1.1 for SignedProperties if available, otherwise falls back to Exclusive C14N.\n */\nexport async function hashSignedPropertiesWithC14N11Fallback(\n doc: Document,\n): Promise<string> {\n try {\n // Try C14N 1.1 first (may not be supported by xml-c14n library)\n return await hashSignedProperties(\n doc,\n 'http://www.w3.org/2006/12/xml-c14n11',\n )\n } catch (error) {\n console.warn(\n 'C14N 1.1 failed for SignedProperties, falling back to Exclusive C14N:',\n error,\n )\n // Fallback to Exclusive C14N\n return await hashSignedProperties(\n doc,\n 'http://www.w3.org/2001/10/xml-exc-c14n#',\n )\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,qBACdA,KACAC,YAAoB,2CACH;AACjB,QAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,MAAI;GAEF,MAAM,KAAK;IACT,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,IAAI;IACJ,OAAO;GACR;GACD,MAAM,SAAS,MAAM,cAAc,GAAG;GAGtC,MAAM,wBACJ;GACF,MAAM,QAAQ,OAAO,uBAAuB,IAAI;AAEhD,QAAK,MAAM,QAAQ,MAAM,IAAI,MAAM,WAAW,EAC5C,OAAM,IAAI,OACP,gDAAgD,sBAAsB;AAG3E,OAAI,MAAM,SAAS,EACjB,OAAM,IAAI,OACP,yDAAyD,sBAAsB;GAGpF,MAAM,uBAAuB,MAAM;AAEnC,QAAK,qBACH,OAAM,IAAI,MAAM;GAIlB,MAAM,OAAO,aAAa;GAG1B,IAAI,eAAe;AAGnB,OAAI,cAAc,oCAAoC;AACpD,YAAQ,KACN,mGACD;AACD,mBAAe;GAChB;GAED,MAAM,gBAAgB,KAAK,oBAAoB,aAAa;AAG5D,iBAAc,aACZ,sBACA,CAAC,OAAO,iBAAiB;AACvB,QAAI,OAAO;AACT,aAAQ,MACN,mDACA,MACD;AACD,YAAO,OACL,IAAI,OACD,4CAA4C,MAAM,WAAW,MAAM,GAEvE;IACF;AAED,eAAW,iBAAiB,SAC1B,QAAO,OACL,IAAI,MACF,qEAEH;AAGH,QAAI;KAEF,MAAM,OAAO,OAAO,WAAW,SAAS;AACxC,UAAK,OAAO,cAAc,OAAO;KAGjC,MAAM,oBAAoB,KAAK,OAAO,SAAS;AAE/C,aAAQ,kBAAkB;IAC3B,SAAQC,WAAgB;AACvB,aAAQ,MAAM,0CAA0C,UAAU;AAClE,YACE,IAAI,OACD,mCAAmC,UAAU,WAAW,UAAU,GAEtE;IACF;GACF,EACF;EACF,SAAQC,YAAiB;AACxB,WAAQ,MACN,mDACA,WACD;AACD,UACE,IAAI,OACD,4CAA4C,WAAW,WAAW,WAAW,GAEjF;EACF;CACF;AACF;;;;AAKD,eAAsB,uCACpBH,KACiB;AACjB,KAAI;AAEF,SAAO,MAAM,qBACX,KACA,uCACD;CACF,SAAQ,OAAO;AACd,UAAQ,KACN,yEACA,MACD;AAED,SAAO,MAAM,qBACX,KACA,0CACD;CACF;AACF"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
-
const crypto = require_chunk.__toESM(require("crypto"));
|
|
3
|
-
const xml_c14n = require_chunk.__toESM(require("xml-c14n"));
|
|
4
|
-
const xpath_ts = require_chunk.__toESM(require("xpath-ts"));
|
|
5
|
-
|
|
6
|
-
//#region src/utils/signature/hashSignedProperties.ts
|
|
7
|
-
/**
|
|
8
|
-
* Selects the SignedProperties element, canonicalizes it using the best available
|
|
9
|
-
* canonicalization algorithm, hashes it using SHA-256, and returns the Base64 encoded digest.
|
|
10
|
-
*
|
|
11
|
-
* Corresponds to Step 7 in the MyInvois Signature Creation guide:
|
|
12
|
-
* https://sdk.myinvois.hasil.gov.my/signature-creation/#step-7-generate-signed-properties-hash
|
|
13
|
-
*
|
|
14
|
-
* Note: MyInvois documentation specifies C14N 1.1, but due to limited Node.js library support,
|
|
15
|
-
* this implementation uses Exclusive C14N which is widely supported and should be compatible
|
|
16
|
-
* in most cases. If signature validation fails, this may need to be updated.
|
|
17
|
-
*
|
|
18
|
-
* @param doc The XML Document object (from xmldom-ts) after SignedProperties population (Step 6).
|
|
19
|
-
* @param algorithm Optional canonicalization algorithm URI. Defaults to Exclusive C14N.
|
|
20
|
-
* @returns A Promise resolving to the Base64 encoded SHA-256 hash (PropsDigest).
|
|
21
|
-
* @throws {Error} If the SignedProperties element cannot be found or canonicalization/hashing fails.
|
|
22
|
-
*/
|
|
23
|
-
function hashSignedProperties(doc, algorithm = "http://www.w3.org/2001/10/xml-exc-c14n#") {
|
|
24
|
-
return new Promise((resolve, reject) => {
|
|
25
|
-
try {
|
|
26
|
-
const ns = {
|
|
27
|
-
inv: "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
|
|
28
|
-
ext: "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
|
|
29
|
-
sig: "urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2",
|
|
30
|
-
sac: "urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2",
|
|
31
|
-
ds: "http://www.w3.org/2000/09/xmldsig#",
|
|
32
|
-
xades: "http://uri.etsi.org/01903/v1.3.2#"
|
|
33
|
-
};
|
|
34
|
-
const select = xpath_ts.useNamespaces(ns);
|
|
35
|
-
const signedPropertiesXPath = "/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature/ds:Object/xades:QualifyingProperties/xades:SignedProperties";
|
|
36
|
-
const nodes = select(signedPropertiesXPath, doc);
|
|
37
|
-
if (!Array.isArray(nodes) || nodes.length === 0) throw new Error(`SignedProperties element not found for XPath: ${signedPropertiesXPath}`);
|
|
38
|
-
if (nodes.length > 1) throw new Error(`Multiple SignedProperties elements found (expected 1): ${signedPropertiesXPath}`);
|
|
39
|
-
const signedPropertiesNode = nodes[0];
|
|
40
|
-
if (!signedPropertiesNode) throw new Error("Selected SignedProperties node is invalid or null.");
|
|
41
|
-
const c14n = (0, xml_c14n.default)();
|
|
42
|
-
let algorithmUri = algorithm;
|
|
43
|
-
if (algorithm === "https://www.w3.org/TR/xml-c14n11") {
|
|
44
|
-
console.warn("C14N 1.1 requested for SignedProperties but may not be supported, falling back to Exclusive C14N");
|
|
45
|
-
algorithmUri = "http://www.w3.org/2001/10/xml-exc-c14n#";
|
|
46
|
-
}
|
|
47
|
-
const canonicaliser = c14n.createCanonicaliser(algorithmUri);
|
|
48
|
-
canonicaliser.canonicalise(signedPropertiesNode, (error, canonicalXml) => {
|
|
49
|
-
if (error) {
|
|
50
|
-
console.error("Error during SignedProperties canonicalization:", error);
|
|
51
|
-
return reject(new Error(`SignedProperties canonicalization failed: ${error.message || error}`));
|
|
52
|
-
}
|
|
53
|
-
if (typeof canonicalXml !== "string") return reject(new Error("SignedProperties canonicalization did not return a string result."));
|
|
54
|
-
try {
|
|
55
|
-
const hash = crypto.createHash("sha256");
|
|
56
|
-
hash.update(canonicalXml, "utf8");
|
|
57
|
-
const base64PropsDigest = hash.digest("base64");
|
|
58
|
-
resolve(base64PropsDigest);
|
|
59
|
-
} catch (hashError) {
|
|
60
|
-
console.error("Error during SignedProperties hashing:", hashError);
|
|
61
|
-
reject(new Error(`SignedProperties hashing failed: ${hashError.message || hashError}`));
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
} catch (setupError) {
|
|
65
|
-
console.error("Error setting up or selecting SignedProperties:", setupError);
|
|
66
|
-
reject(new Error(`SignedProperties processing setup failed: ${setupError.message || setupError}`));
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Attempts to use C14N 1.1 for SignedProperties if available, otherwise falls back to Exclusive C14N.
|
|
72
|
-
*/
|
|
73
|
-
async function hashSignedPropertiesWithC14N11Fallback(doc) {
|
|
74
|
-
try {
|
|
75
|
-
return await hashSignedProperties(doc, "http://www.w3.org/2006/12/xml-c14n11");
|
|
76
|
-
} catch (error) {
|
|
77
|
-
console.warn("C14N 1.1 failed for SignedProperties, falling back to Exclusive C14N:", error);
|
|
78
|
-
return await hashSignedProperties(doc, "http://www.w3.org/2001/10/xml-exc-c14n#");
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
//#endregion
|
|
83
|
-
Object.defineProperty(exports, 'hashSignedProperties', {
|
|
84
|
-
enumerable: true,
|
|
85
|
-
get: function () {
|
|
86
|
-
return hashSignedProperties;
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
Object.defineProperty(exports, 'hashSignedPropertiesWithC14N11Fallback', {
|
|
90
|
-
enumerable: true,
|
|
91
|
-
get: function () {
|
|
92
|
-
return hashSignedPropertiesWithC14N11Fallback;
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
//# sourceMappingURL=hashSignedProperties-CU_ZqqmY.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hashSignedProperties-CU_ZqqmY.cjs","names":["doc: Document","algorithm: string","hashError: any","setupError: any"],"sources":["../src/utils/signature/hashSignedProperties.ts"],"sourcesContent":["import * as crypto from 'crypto'\nimport * as xpath from 'xpath-ts'\nimport c14nFactory from 'xml-c14n'\n\n/**\n * Selects the SignedProperties element, canonicalizes it using the best available\n * canonicalization algorithm, hashes it using SHA-256, and returns the Base64 encoded digest.\n *\n * Corresponds to Step 7 in the MyInvois Signature Creation guide:\n * https://sdk.myinvois.hasil.gov.my/signature-creation/#step-7-generate-signed-properties-hash\n *\n * Note: MyInvois documentation specifies C14N 1.1, but due to limited Node.js library support,\n * this implementation uses Exclusive C14N which is widely supported and should be compatible\n * in most cases. If signature validation fails, this may need to be updated.\n *\n * @param doc The XML Document object (from xmldom-ts) after SignedProperties population (Step 6).\n * @param algorithm Optional canonicalization algorithm URI. Defaults to Exclusive C14N.\n * @returns A Promise resolving to the Base64 encoded SHA-256 hash (PropsDigest).\n * @throws {Error} If the SignedProperties element cannot be found or canonicalization/hashing fails.\n */\nexport function hashSignedProperties(\n doc: Document,\n algorithm: string = 'http://www.w3.org/2001/10/xml-exc-c14n#',\n): Promise<string> {\n return new Promise((resolve, reject) => {\n try {\n // Define namespaces, including the default namespace for Invoice\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 xades: 'http://uri.etsi.org/01903/v1.3.2#',\n }\n const select = xpath.useNamespaces(ns)\n\n // 1. Get the SignedProperties element using XPath\n const signedPropertiesXPath =\n '/inv:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sig:UBLDocumentSignatures/sac:SignatureInformation/ds:Signature/ds:Object/xades:QualifyingProperties/xades:SignedProperties'\n const nodes = select(signedPropertiesXPath, doc)\n\n if (!Array.isArray(nodes) || nodes.length === 0) {\n throw new Error(\n `SignedProperties element not found for XPath: ${signedPropertiesXPath}`,\n )\n }\n if (nodes.length > 1) {\n throw new Error(\n `Multiple SignedProperties elements found (expected 1): ${signedPropertiesXPath}`,\n )\n }\n const signedPropertiesNode = nodes[0] as Node\n\n if (!signedPropertiesNode) {\n throw new Error('Selected SignedProperties node is invalid or null.')\n }\n\n // 2. Canonicalize the SignedProperties node\n const c14n = c14nFactory()\n\n // Try C14N 1.1 first, fallback to Exclusive C14N\n let algorithmUri = algorithm\n\n // If C14N 1.1 is requested but not available, use Exclusive C14N\n if (algorithm === 'https://www.w3.org/TR/xml-c14n11') {\n console.warn(\n 'C14N 1.1 requested for SignedProperties but may not be supported, falling back to Exclusive C14N',\n )\n algorithmUri = 'http://www.w3.org/2001/10/xml-exc-c14n#'\n }\n\n const canonicaliser = c14n.createCanonicaliser(algorithmUri)\n\n // Canonicalize the SignedProperties node using the callback pattern\n canonicaliser.canonicalise(\n signedPropertiesNode,\n (error, canonicalXml) => {\n if (error) {\n console.error(\n 'Error during SignedProperties canonicalization:',\n error,\n )\n return reject(\n new Error(\n `SignedProperties canonicalization failed: ${error.message || error}`,\n ),\n )\n }\n\n if (typeof canonicalXml !== 'string') {\n return reject(\n new Error(\n 'SignedProperties canonicalization did not return a string result.',\n ),\n )\n }\n\n try {\n // 3. Hash the canonicalized property tag using SHA-256\n const hash = crypto.createHash('sha256')\n hash.update(canonicalXml, 'utf8')\n\n // 4. Encode the hashed property tag using Base64 Encoder\n const base64PropsDigest = hash.digest('base64')\n\n resolve(base64PropsDigest)\n } catch (hashError: any) {\n console.error('Error during SignedProperties hashing:', hashError)\n reject(\n new Error(\n `SignedProperties hashing failed: ${hashError.message || hashError}`,\n ),\n )\n }\n },\n )\n } catch (setupError: any) {\n console.error(\n 'Error setting up or selecting SignedProperties:',\n setupError,\n )\n reject(\n new Error(\n `SignedProperties processing setup failed: ${setupError.message || setupError}`,\n ),\n )\n }\n })\n}\n\n/**\n * Attempts to use C14N 1.1 for SignedProperties if available, otherwise falls back to Exclusive C14N.\n */\nexport async function hashSignedPropertiesWithC14N11Fallback(\n doc: Document,\n): Promise<string> {\n try {\n // Try C14N 1.1 first (may not be supported by xml-c14n library)\n return await hashSignedProperties(\n doc,\n 'http://www.w3.org/2006/12/xml-c14n11',\n )\n } catch (error) {\n console.warn(\n 'C14N 1.1 failed for SignedProperties, falling back to Exclusive C14N:',\n error,\n )\n // Fallback to Exclusive C14N\n return await hashSignedProperties(\n doc,\n 'http://www.w3.org/2001/10/xml-exc-c14n#',\n )\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,qBACdA,KACAC,YAAoB,2CACH;AACjB,QAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,MAAI;GAEF,MAAM,KAAK;IACT,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,IAAI;IACJ,OAAO;GACR;GACD,MAAM,SAAS,SAAM,cAAc,GAAG;GAGtC,MAAM,wBACJ;GACF,MAAM,QAAQ,OAAO,uBAAuB,IAAI;AAEhD,QAAK,MAAM,QAAQ,MAAM,IAAI,MAAM,WAAW,EAC5C,OAAM,IAAI,OACP,gDAAgD,sBAAsB;AAG3E,OAAI,MAAM,SAAS,EACjB,OAAM,IAAI,OACP,yDAAyD,sBAAsB;GAGpF,MAAM,uBAAuB,MAAM;AAEnC,QAAK,qBACH,OAAM,IAAI,MAAM;GAIlB,MAAM,OAAO,uBAAa;GAG1B,IAAI,eAAe;AAGnB,OAAI,cAAc,oCAAoC;AACpD,YAAQ,KACN,mGACD;AACD,mBAAe;GAChB;GAED,MAAM,gBAAgB,KAAK,oBAAoB,aAAa;AAG5D,iBAAc,aACZ,sBACA,CAAC,OAAO,iBAAiB;AACvB,QAAI,OAAO;AACT,aAAQ,MACN,mDACA,MACD;AACD,YAAO,OACL,IAAI,OACD,4CAA4C,MAAM,WAAW,MAAM,GAEvE;IACF;AAED,eAAW,iBAAiB,SAC1B,QAAO,OACL,IAAI,MACF,qEAEH;AAGH,QAAI;KAEF,MAAM,OAAO,OAAO,WAAW,SAAS;AACxC,UAAK,OAAO,cAAc,OAAO;KAGjC,MAAM,oBAAoB,KAAK,OAAO,SAAS;AAE/C,aAAQ,kBAAkB;IAC3B,SAAQC,WAAgB;AACvB,aAAQ,MAAM,0CAA0C,UAAU;AAClE,YACE,IAAI,OACD,mCAAmC,UAAU,WAAW,UAAU,GAEtE;IACF;GACF,EACF;EACF,SAAQC,YAAiB;AACxB,WAAQ,MACN,mDACA,WACD;AACD,UACE,IAAI,OACD,4CAA4C,WAAW,WAAW,WAAW,GAEjF;EACF;CACF;AACF;;;;AAKD,eAAsB,uCACpBH,KACiB;AACjB,KAAI;AAEF,SAAO,MAAM,qBACX,KACA,uCACD;CACF,SAAQ,OAAO;AACd,UAAQ,KACN,yEACA,MACD;AAED,SAAO,MAAM,qBACX,KACA,0CACD;CACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-B1DSs-wd.d.cts","names":["TokenResponse","ClientCredentials"],"sources":["../src/types/index.d.ts"],"sourcesContent":["export type * from './documents/index.d.ts'\nexport type * from './country-code.d.ts'\nexport type * from './classification-codes.d.ts'\nexport type * from './payment-modes.d.ts'\nexport type * from './tax-types.d.ts'\nexport type * from './unit-types.d.ts'\nexport type * from './signatures.d.ts'\nexport type * from './currencies.d.ts'\nexport type * from './state-codes.d.ts'\nexport type * from './e-invoice.d.ts'\nexport type * from './msic-codes.d.ts'\n\nexport interface TokenResponse {\n access_token: string\n expires_in: number\n}\n\nexport interface ClientCredentials {\n clientId: string\n clientSecret: string\n baseUrl: string\n onBehalfOf?: string\n debug?: boolean\n}\n"],"mappings":";;UAYiBA,aAAAA;;;;UAKAC,iBAAAA"}
|
package/dist/index-CJNLQVjx.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-FTgB2nM6.d.ts","names":["TokenResponse","ClientCredentials"],"sources":["../src/types/index.d.ts"],"sourcesContent":["export type * from './documents/index.d.ts'\nexport type * from './country-code.d.ts'\nexport type * from './classification-codes.d.ts'\nexport type * from './payment-modes.d.ts'\nexport type * from './tax-types.d.ts'\nexport type * from './unit-types.d.ts'\nexport type * from './signatures.d.ts'\nexport type * from './currencies.d.ts'\nexport type * from './state-codes.d.ts'\nexport type * from './e-invoice.d.ts'\nexport type * from './msic-codes.d.ts'\n\nexport interface TokenResponse {\n access_token: string\n expires_in: number\n}\n\nexport interface ClientCredentials {\n clientId: string\n clientSecret: string\n baseUrl: string\n onBehalfOf?: string\n debug?: boolean\n}\n"],"mappings":";;UAYiBA,aAAAA;;;;UAKAC,iBAAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { };
|
package/dist/index10.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index10.cjs","names":[],"sources":["../src/types/state-codes.d.ts"],"sourcesContent":["/**\n * Represents the allowed codes for Malaysian states and federal territories.\n * Based on the documentation: https://sdk.myinvois.hasil.gov.my/codes/state-codes/\n */\nexport type StateCode =\n | '01' // Johor\n | '02' // Kedah\n | '03' // Kelantan\n | '04' // Melaka\n | '05' // Negeri Sembilan\n | '06' // Pahang\n | '07' // Pulau Pinang\n | '08' // Perak\n | '09' // Perlis\n | '10' // Selangor\n | '11' // Terengganu\n | '12' // Sabah\n | '13' // Sarawak\n | '14' // Wilayah Persekutuan Kuala Lumpur\n | '15' // Wilayah Persekutuan Labuan\n | '16' // Wilayah Persekutuan Putrajaya\n | '17' // Not Applicable\n\n/**\n * Enum representing the allowed state codes with descriptive names.\n * Provides a more readable way to reference states.\n *\n * @example\n * const code = StateCodeEnum.Selangor;\n * console.log(code); // Output: \"10\"\n */\nexport enum StateCodeEnum {\n Johor = '01',\n Kedah = '02',\n Kelantan = '03',\n Melaka = '04',\n NegeriSembilan = '05',\n Pahang = '06',\n PulauPinang = '07',\n Perak = '08',\n Perlis = '09',\n Selangor = '10',\n Terengganu = '11',\n Sabah = '12',\n Sarawak = '13',\n WPKualaLumpur = '14',\n WPLabuan = '15',\n WPPutrajaya = '16',\n NotApplicable = '17',\n}\n\n/**\n * Interface representing a state code entry.\n * Contains the code and its corresponding name.\n */\nexport interface State {\n code: StateCode\n name: string\n}\n"],"mappings":";;;;;;;;;;AA+BA,IAAY,0DAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACD"}
|
package/dist/index66.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index66.cjs","names":["xmlDocument: string","DOMParserImpl","error: any","xmlString: string","errors: string[]","warnings: string[]","invoiceInfo: InvoiceV1_1","signingCredentials: SigningCredentials","signedXML: string | undefined"],"sources":["../src/utils/debug/debug-invoice-submission.ts"],"sourcesContent":["import { DOMParserImpl } from 'xmldom-ts'\nimport {\n extractCertificateInfo,\n generateSignedInvoiceXML,\n generateUBLXMLTemplate,\n validateKeyPair,\n} from '../invoice1-1'\nimport type {\n InvoiceV1_1,\n SigningCredentials,\n} from '../../types/documents/invoice-1_1.d.ts'\nimport { transformXmlInvoice } from '../signature/transform'\nimport {\n canonicalizeAndHashDocument,\n canonicalizeAndHashDocumentWithC14N11Fallback,\n} from '../signature/canonicalize'\n\n/**\n * Tests both canonicalization algorithms and compares their output\n * This can help determine if the algorithm difference affects signature validation\n * @param xmlDocument - The XML document string to test\n * @returns Object with canonicalization results and comparison\n */\nexport const testCanonicalizationAlgorithms = async (\n xmlDocument: string,\n): Promise<{\n exclusiveC14N: { success: boolean; digest?: string; error?: string }\n c14n11Fallback: { success: boolean; digest?: string; error?: string }\n areEqual: boolean\n}> => {\n const parser = new DOMParserImpl()\n const doc = parser.parseFromString(xmlDocument, 'application/xml')\n\n const results = {\n exclusiveC14N: { success: false } as any,\n c14n11Fallback: { success: false } as any,\n areEqual: false,\n }\n\n // Test Exclusive C14N\n try {\n const exclusiveDigest = await canonicalizeAndHashDocument(\n doc,\n 'http://www.w3.org/2001/10/xml-exc-c14n#',\n )\n results.exclusiveC14N = { success: true, digest: exclusiveDigest }\n } catch (error: any) {\n results.exclusiveC14N = { success: false, error: error.message }\n }\n\n // Test C14N 1.1 fallback\n try {\n const c14n11Digest =\n await canonicalizeAndHashDocumentWithC14N11Fallback(doc)\n results.c14n11Fallback = { success: true, digest: c14n11Digest }\n } catch (error: any) {\n results.c14n11Fallback = { success: false, error: error.message }\n }\n\n // Compare results\n if (results.exclusiveC14N.success && results.c14n11Fallback.success) {\n results.areEqual =\n results.exclusiveC14N.digest === results.c14n11Fallback.digest\n }\n\n return results\n}\n\n/**\n * Simple validation function that checks basic XML structure requirements\n */\nexport function validateXMLStructure(xmlString: string): {\n isValid: boolean\n errors: string[]\n warnings: string[]\n} {\n const errors: string[] = []\n const warnings: string[] = []\n\n try {\n const parser = new DOMParserImpl()\n const doc = parser.parseFromString(xmlString, 'application/xml')\n\n // Check for parser errors\n const parserErrors = doc.getElementsByTagName('parsererror')\n if (parserErrors.length > 0) {\n errors.push('XML parsing failed')\n return { isValid: false, errors, warnings }\n }\n\n // Check required elements\n const requiredElements = [\n 'Invoice',\n 'UBLExtensions',\n 'cbc:ID',\n 'cbc:IssueDate',\n 'cbc:IssueTime',\n 'cbc:InvoiceTypeCode',\n 'ds:Signature',\n 'ds:SignatureValue',\n 'ds:X509Certificate',\n ]\n\n for (const element of requiredElements) {\n const elements = element.includes(':')\n ? doc.getElementsByTagName(element)\n : doc.getElementsByTagName(element)\n\n if (elements.length === 0) {\n errors.push(`Missing required element: ${element}`)\n }\n }\n\n // Check namespace declarations\n const expectedNamespaces = [\n 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2',\n 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2',\n 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2',\n ]\n\n for (const ns of expectedNamespaces) {\n if (!xmlString.includes(ns)) {\n warnings.push(`Missing namespace declaration: ${ns}`)\n }\n }\n } catch (error: any) {\n errors.push(`XML validation error: ${error.message}`)\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings,\n }\n}\n\n/**\n * Comprehensive debugging function to help identify issues with generated XML\n * This validates the structure against MyInvois requirements and provides detailed feedback\n */\nexport async function debugSignedInvoiceXML(\n invoiceInfo: InvoiceV1_1,\n signingCredentials: SigningCredentials,\n): Promise<{\n success: boolean\n signedXML?: string\n validationResults: {\n xmlStructure: { valid: boolean; errors: string[] }\n signatureElements: { valid: boolean; errors: string[] }\n digestValues: { valid: boolean; errors: string[] }\n certificateInfo: { valid: boolean; errors: string[] }\n canonicalizationTest: any\n }\n stepByStepResults: {\n step1_template: { success: boolean; error?: string }\n step2_transform: { success: boolean; error?: string }\n step3_docDigest: { success: boolean; digest?: string; error?: string }\n step4_signature: { success: boolean; signature?: string; error?: string }\n step5_certDigest: { success: boolean; digest?: string; error?: string }\n step6_signedProps: { success: boolean; error?: string }\n step7_propsDigest: { success: boolean; digest?: string; error?: string }\n step8_finalDoc: { success: boolean; error?: string }\n }\n}> {\n const stepResults = {\n step1_template: { success: false } as any,\n step2_transform: { success: false } as any,\n step3_docDigest: { success: false } as any,\n step4_signature: { success: false } as any,\n step5_certDigest: { success: false } as any,\n step6_signedProps: { success: false } as any,\n step7_propsDigest: { success: false } as any,\n step8_finalDoc: { success: false } as any,\n }\n\n const validationResults = {\n xmlStructure: { valid: false, errors: [] as string[] },\n signatureElements: { valid: false, errors: [] as string[] },\n digestValues: { valid: false, errors: [] as string[] },\n certificateInfo: { valid: false, errors: [] as string[] },\n canonicalizationTest: null as any,\n }\n\n let signedXML: string | undefined\n\n try {\n // Step 1: Generate template\n try {\n const xmlTemplate = generateUBLXMLTemplate(invoiceInfo)\n stepResults.step1_template = { success: true }\n\n // Validate XML structure\n const parser = new DOMParserImpl()\n const doc = parser.parseFromString(xmlTemplate, 'application/xml')\n const parserErrors = doc.getElementsByTagName('parsererror')\n if (parserErrors.length > 0) {\n validationResults.xmlStructure.errors.push(\n 'XML template parsing failed',\n )\n } else {\n validationResults.xmlStructure.valid = true\n }\n } catch (error: any) {\n stepResults.step1_template = { success: false, error: error.message }\n validationResults.xmlStructure.errors.push(\n `Template generation failed: ${error.message}`,\n )\n }\n\n // Step 2: Transform\n try {\n const xmlTemplate = generateUBLXMLTemplate(invoiceInfo)\n const transformedXml = transformXmlInvoice(xmlTemplate)\n stepResults.step2_transform = { success: true }\n\n // Check if transformation worked correctly\n if (transformedXml.includes('UBLExtensions')) {\n validationResults.xmlStructure.errors.push(\n 'UBLExtensions not properly removed in transformation',\n )\n }\n if (transformedXml.includes('<cac:Signature>')) {\n validationResults.xmlStructure.errors.push(\n 'cac:Signature elements not properly removed in transformation',\n )\n }\n } catch (error: any) {\n stepResults.step2_transform = { success: false, error: error.message }\n }\n\n // Test canonicalization\n try {\n const xmlTemplate = generateUBLXMLTemplate(invoiceInfo)\n validationResults.canonicalizationTest =\n await testCanonicalizationAlgorithms(xmlTemplate)\n } catch (error: any) {\n validationResults.canonicalizationTest = { error: error.message }\n }\n\n // Continue with full signing process\n try {\n signedXML = await generateSignedInvoiceXML(\n invoiceInfo,\n signingCredentials,\n )\n\n // Parse the final signed XML for validation\n const parser = new DOMParserImpl()\n const finalDoc = parser.parseFromString(signedXML, 'application/xml')\n\n // Check signature elements are populated\n const signatureValue =\n finalDoc.getElementsByTagName('ds:SignatureValue')[0]\n const x509Certificate =\n finalDoc.getElementsByTagName('ds:X509Certificate')[0]\n const digestValues = finalDoc.getElementsByTagName('ds:DigestValue')\n\n if (!signatureValue || !signatureValue.textContent?.trim()) {\n validationResults.signatureElements.errors.push(\n 'SignatureValue is empty',\n )\n }\n\n if (!x509Certificate || !x509Certificate.textContent?.trim()) {\n validationResults.signatureElements.errors.push(\n 'X509Certificate is empty',\n )\n }\n\n if (digestValues.length < 2) {\n validationResults.digestValues.errors.push(\n 'Missing digest values (expected at least 2)',\n )\n } else {\n let emptyDigests = 0\n for (let i = 0; i < digestValues.length; i++) {\n const digestElement = digestValues[i]\n if (!digestElement || !digestElement.textContent?.trim()) {\n emptyDigests++\n }\n }\n if (emptyDigests > 0) {\n validationResults.digestValues.errors.push(\n `${emptyDigests} digest values are empty`,\n )\n }\n }\n\n // Validate certificate info\n try {\n const certInfo = extractCertificateInfo(\n signingCredentials.certificatePem,\n )\n const keyPairValid = validateKeyPair(\n signingCredentials.certificatePem,\n signingCredentials.privateKeyPem,\n )\n\n if (!keyPairValid) {\n validationResults.certificateInfo.errors.push(\n 'Certificate and private key do not match',\n )\n }\n\n if (!certInfo.issuerName || !certInfo.serialNumber) {\n validationResults.certificateInfo.errors.push(\n 'Certificate info extraction failed',\n )\n }\n\n if (validationResults.certificateInfo.errors.length === 0) {\n validationResults.certificateInfo.valid = true\n }\n } catch (error: any) {\n validationResults.certificateInfo.errors.push(\n `Certificate validation failed: ${error.message}`,\n )\n }\n\n // Set validation flags\n if (validationResults.signatureElements.errors.length === 0) {\n validationResults.signatureElements.valid = true\n }\n if (validationResults.digestValues.errors.length === 0) {\n validationResults.digestValues.valid = true\n }\n\n // Mark individual steps as successful if we got here\n stepResults.step3_docDigest = { success: true }\n stepResults.step4_signature = { success: true }\n stepResults.step5_certDigest = { success: true }\n stepResults.step6_signedProps = { success: true }\n stepResults.step7_propsDigest = { success: true }\n stepResults.step8_finalDoc = { success: true }\n } catch (error: any) {\n console.error('Error during signing process:', error)\n stepResults.step8_finalDoc = { success: false, error: error.message }\n }\n } catch (error: any) {\n console.error('Fatal error in debugging:', error)\n }\n\n const allValid =\n validationResults.xmlStructure.valid &&\n validationResults.signatureElements.valid &&\n validationResults.digestValues.valid &&\n validationResults.certificateInfo.valid\n\n return {\n success: allValid,\n signedXML,\n validationResults,\n stepByStepResults: stepResults,\n }\n}\n"],"mappings":"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"}
|
package/dist/index67.cjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const require_canonicalize = require('./canonicalize-C_fNNpYr.cjs');
|
|
2
|
-
|
|
3
|
-
exports.canonicalizeAndHashDocument = require_canonicalize.canonicalizeAndHashDocument;
|
|
4
|
-
exports.canonicalizeAndHashDocumentWithC14N11Fallback = require_canonicalize.canonicalizeAndHashDocumentWithC14N11Fallback;
|
package/dist/index67.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index67.cts","names":["doc: Document","algorithm: string"],"sources":["../src/utils/signature/canonicalize.ts"],"sourcesContent":[],"mappings":";AAmBA,IAAgB,8BAAA;CAAA;CAAA,MACT;CAAA,MAEJ;AAAA;AAgEH,IAAsB,gDAAA;CAAA;CAAA,MACf;CAAA,MACJ;AAAA"}
|
package/dist/index68.cjs
DELETED
package/dist/index68.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index68.cts","names":["certificatePem: string"],"sources":["../src/utils/signature/hashCert.ts"],"sourcesContent":[],"mappings":";AAgFA,IAAgB,kBAAA,CAAA,GAAA"}
|
package/dist/index69.cjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const require_hashSignedProperties = require('./hashSignedProperties-CU_ZqqmY.cjs');
|
|
2
|
-
|
|
3
|
-
exports.hashSignedProperties = require_hashSignedProperties.hashSignedProperties;
|
|
4
|
-
exports.hashSignedPropertiesWithC14N11Fallback = require_hashSignedProperties.hashSignedPropertiesWithC14N11Fallback;
|
package/dist/index69.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index69.cts","names":["doc: Document","algorithm: string"],"sources":["../src/utils/signature/hashSignedProperties.ts"],"sourcesContent":[],"mappings":";AAoBA,IAAgB,uBAAA;CAAA;CAAA,MACT;CAAA,MAEJ;AAAA;AA+GH,IAAsB,yCAAA;CAAA;CAAA,MACf;CAAA,MACJ;AAAA"}
|
package/dist/index70.cjs
DELETED
package/dist/index70.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index70.cts","names":["doc: Document","finalData: FinalDocumentData"],"sources":["../src/utils/signature/populateFinalDocument.ts"],"sourcesContent":[],"mappings":";AAEA,IAAiB,oBAAA,CAAA,GAAA;AAyCjB,IAAgB,wBAAA;CAAA;CAAA,MACT;CAAA,MACM;AAAA"}
|
package/dist/index71.cjs
DELETED
package/dist/index71.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index71.cts","names":["doc: Document","properties: SignedPropertiesData"],"sources":["../src/utils/signature/populateSignedProperties.ts"],"sourcesContent":[],"mappings":";AAEA,IAAiB,uBAAA,CAAA,GAAA;AAmBjB,IAAgB,2BAAA;CAAA;CAAA,MACT;CAAA,MACO;AAAA"}
|
package/dist/index72.cjs
DELETED
package/dist/index72.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index72.cts","names":["base64DocDigest: string","privateKeyPem: string | Buffer"],"sources":["../src/utils/signature/sign.ts"],"sourcesContent":[],"mappings":";AAaA,IAAgB,qBAAA,CAAA,KAAA,MAEU,MAAA"}
|
package/dist/index73.cjs
DELETED
package/dist/index73.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index73.cts","names":["xmlString: string"],"sources":["../src/utils/signature/transform.ts"],"sourcesContent":[],"mappings":";AAeA,IAAgB,sBAAA,CAAA,GAAA"}
|