@axium/server 0.24.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/axiumd.service +1 -1
- package/build/client/_app/immutable/assets/account.dAAx7bby.css +1 -0
- package/build/client/_app/immutable/assets/account.dAAx7bby.css.br +0 -0
- package/build/client/_app/immutable/assets/account.dAAx7bby.css.gz +0 -0
- package/build/client/_app/immutable/assets/list.DVGH0BeP.css +1 -0
- package/build/client/_app/immutable/assets/list.DVGH0BeP.css.br +0 -0
- package/build/client/_app/immutable/assets/list.DVGH0BeP.css.gz +0 -0
- package/build/client/_app/immutable/assets/styles.D8SZ-PeY.css +1 -0
- package/build/client/_app/immutable/assets/styles.D8SZ-PeY.css.br +2 -0
- package/build/client/_app/immutable/assets/styles.D8SZ-PeY.css.gz +0 -0
- package/build/client/_app/immutable/chunks/1taVrT-y.js +1 -0
- package/build/client/_app/immutable/chunks/1taVrT-y.js.br +0 -0
- package/build/client/_app/immutable/chunks/1taVrT-y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BSFUgC2l.js +23 -0
- package/build/client/_app/immutable/chunks/BSFUgC2l.js.br +0 -0
- package/build/client/_app/immutable/chunks/BSFUgC2l.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bbzjahjl.js +2 -0
- package/build/client/_app/immutable/chunks/Bbzjahjl.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bbzjahjl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BxjargW5.js +1 -0
- package/build/client/_app/immutable/chunks/BxjargW5.js.br +0 -0
- package/build/client/_app/immutable/chunks/BxjargW5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C2ewTgu8.js +1 -0
- package/build/client/_app/immutable/chunks/C2ewTgu8.js.br +0 -0
- package/build/client/_app/immutable/chunks/C2ewTgu8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CFWAHLsq.js +1 -0
- package/build/client/_app/immutable/chunks/CFWAHLsq.js.br +0 -0
- package/build/client/_app/immutable/chunks/CFWAHLsq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CPL43v-I.js +1 -0
- package/build/client/_app/immutable/chunks/CPL43v-I.js.br +0 -0
- package/build/client/_app/immutable/chunks/CPL43v-I.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CTKC36WM.js +1 -0
- package/build/client/_app/immutable/chunks/CTKC36WM.js.br +0 -0
- package/build/client/_app/immutable/chunks/CTKC36WM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CekH6JMP.js +1 -0
- package/build/client/_app/immutable/chunks/CekH6JMP.js.br +0 -0
- package/build/client/_app/immutable/chunks/CekH6JMP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Ch16TNvP.js +1 -0
- package/build/client/_app/immutable/chunks/Ch16TNvP.js.br +0 -0
- package/build/client/_app/immutable/chunks/Ch16TNvP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CqfYW08-.js +1 -0
- package/build/client/_app/immutable/chunks/CqfYW08-.js.br +0 -0
- package/build/client/_app/immutable/chunks/CqfYW08-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D1v6O410.js +1 -0
- package/build/client/_app/immutable/chunks/D1v6O410.js.br +0 -0
- package/build/client/_app/immutable/chunks/D1v6O410.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DY4fWHx_.js +1 -0
- package/build/client/_app/immutable/chunks/DY4fWHx_.js.br +0 -0
- package/build/client/_app/immutable/chunks/DY4fWHx_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DdnE6dyJ.js +2 -0
- package/build/client/_app/immutable/chunks/DdnE6dyJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/DdnE6dyJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DeieCYM0.js +22 -0
- package/build/client/_app/immutable/chunks/DeieCYM0.js.br +0 -0
- package/build/client/_app/immutable/chunks/DeieCYM0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DfUzlYF5.js +1 -0
- package/build/client/_app/immutable/chunks/DfUzlYF5.js.br +0 -0
- package/build/client/_app/immutable/chunks/DfUzlYF5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dnk28BpG.js +1 -0
- package/build/client/_app/immutable/chunks/Dnk28BpG.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dnk28BpG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/KNAS5R2A.js +3 -0
- package/build/client/_app/immutable/chunks/KNAS5R2A.js.br +0 -0
- package/build/client/_app/immutable/chunks/KNAS5R2A.js.gz +0 -0
- package/build/client/_app/immutable/chunks/eyJgPND9.js +1 -0
- package/build/client/_app/immutable/chunks/eyJgPND9.js.br +1 -0
- package/build/client/_app/immutable/chunks/eyJgPND9.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CPF6A_DV.js +2 -0
- package/build/client/_app/immutable/entry/app.CPF6A_DV.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CPF6A_DV.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.Dos_Ttds.js +1 -0
- package/build/client/_app/immutable/entry/start.Dos_Ttds.js.br +2 -0
- package/build/client/_app/immutable/entry/start.Dos_Ttds.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.DlE8ZTIF.js → 0.C5HgTRfT.js} +1 -1
- package/build/client/_app/immutable/nodes/0.C5HgTRfT.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.C5HgTRfT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.CGcgSoA9.js +1 -0
- package/build/client/_app/immutable/nodes/1.CGcgSoA9.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.CGcgSoA9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.ukScuXwz.js +1 -0
- package/build/client/_app/immutable/nodes/10.ukScuXwz.js.br +5 -0
- package/build/client/_app/immutable/nodes/10.ukScuXwz.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.D3RDNx7M.js +1 -0
- package/build/client/_app/immutable/nodes/11.D3RDNx7M.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.D3RDNx7M.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12._vvpCcSG.js +1 -0
- package/build/client/_app/immutable/nodes/12._vvpCcSG.js.br +0 -0
- package/build/client/_app/immutable/nodes/12._vvpCcSG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.BWPzZMQ5.js +1 -0
- package/build/client/_app/immutable/nodes/13.BWPzZMQ5.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.BWPzZMQ5.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.Cr843Lep.js +1 -0
- package/build/client/_app/immutable/nodes/14.Cr843Lep.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.Cr843Lep.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DUpwDjw8.js +1 -0
- package/build/client/_app/immutable/nodes/2.DUpwDjw8.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DUpwDjw8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.CvEpuMc7.js → 3.DPH7xl7M.js} +1 -1
- package/build/client/_app/immutable/nodes/3.DPH7xl7M.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DPH7xl7M.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.Bk0knTIK.js +1 -0
- package/build/client/_app/immutable/nodes/4.Bk0knTIK.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.Bk0knTIK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.DwnZ1Bh8.js +1 -0
- package/build/client/_app/immutable/nodes/5.DwnZ1Bh8.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.DwnZ1Bh8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.5U-KxFgt.js +2 -0
- package/build/client/_app/immutable/nodes/6.5U-KxFgt.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.5U-KxFgt.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.DFc4sJix.js +1 -0
- package/build/client/_app/immutable/nodes/7.DFc4sJix.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.DFc4sJix.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.BG4bv5P5.js +1 -0
- package/build/client/_app/immutable/nodes/8.BG4bv5P5.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.BG4bv5P5.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.BKljyhOi.js +1 -0
- package/build/client/_app/immutable/nodes/9.BKljyhOi.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.BKljyhOi.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/client/styles.css +7 -0
- package/build/client/styles.css.br +0 -0
- package/build/client/styles.css.gz +0 -0
- package/build/handler.js +20 -3
- package/build/server/chunks/0-CZBaNtSI.js +9 -0
- package/build/server/chunks/{0-DgHTujtC.js.map → 0-CZBaNtSI.js.map} +1 -1
- package/build/server/chunks/1-D_3BtEbe.js +9 -0
- package/build/server/chunks/{1-k30i-hic.js.map → 1-D_3BtEbe.js.map} +1 -1
- package/build/server/chunks/10-CLkNMKHU.js +13 -0
- package/build/server/chunks/10-CLkNMKHU.js.map +1 -0
- package/build/server/chunks/11-5xPYR_1w.js +13 -0
- package/build/server/chunks/11-5xPYR_1w.js.map +1 -0
- package/build/server/chunks/12-N7UaQj7u.js +9 -0
- package/build/server/chunks/12-N7UaQj7u.js.map +1 -0
- package/build/server/chunks/13-QYVLpXli.js +9 -0
- package/build/server/chunks/13-QYVLpXli.js.map +1 -0
- package/build/server/chunks/14-CPY578rT.js +9 -0
- package/build/server/chunks/14-CPY578rT.js.map +1 -0
- package/build/server/chunks/2-_1jFrcvz.js +13 -0
- package/build/server/chunks/2-_1jFrcvz.js.map +1 -0
- package/build/server/chunks/3-B1CwnVF_.js +9 -0
- package/build/server/chunks/{2-CXlrhpR6.js.map → 3-B1CwnVF_.js.map} +1 -1
- package/build/server/chunks/4-CcxCcH4F.js +13 -0
- package/build/server/chunks/4-CcxCcH4F.js.map +1 -0
- package/build/server/chunks/5-CrlH6VoB.js +13 -0
- package/build/server/chunks/5-CrlH6VoB.js.map +1 -0
- package/build/server/chunks/6-FkP678Uz.js +13 -0
- package/build/server/chunks/6-FkP678Uz.js.map +1 -0
- package/build/server/chunks/7-B1iCe7VA.js +13 -0
- package/build/server/chunks/7-B1iCe7VA.js.map +1 -0
- package/build/server/chunks/8-p6n9G-P_.js +13 -0
- package/build/server/chunks/8-p6n9G-P_.js.map +1 -0
- package/build/server/chunks/9-fc3lKB7X.js +13 -0
- package/build/server/chunks/9-fc3lKB7X.js.map +1 -0
- package/build/server/chunks/Icon-CG7XnWX5.js +30 -0
- package/build/server/chunks/Icon-CG7XnWX5.js.map +1 -0
- package/build/server/chunks/Logout-BwzK1P29.js +45 -0
- package/build/server/chunks/Logout-BwzK1P29.js.map +1 -0
- package/build/server/chunks/_layout.svelte-9KMUotip.js +31 -0
- package/build/server/chunks/_layout.svelte-9KMUotip.js.map +1 -0
- package/build/server/chunks/_page.svelte-BD3HmLo_.js +28 -0
- package/build/server/chunks/_page.svelte-BD3HmLo_.js.map +1 -0
- package/build/server/chunks/_page.svelte-BFzPdJ6z.js +105 -0
- package/build/server/chunks/_page.svelte-BFzPdJ6z.js.map +1 -0
- package/build/server/chunks/_page.svelte-BIxxuzff.js +64 -0
- package/build/server/chunks/_page.svelte-BIxxuzff.js.map +1 -0
- package/build/server/chunks/_page.svelte-Bou2_u6i.js +13 -0
- package/build/server/chunks/_page.svelte-Bou2_u6i.js.map +1 -0
- package/build/server/chunks/_page.svelte-C25oQ2NT.js +80 -0
- package/build/server/chunks/_page.svelte-C25oQ2NT.js.map +1 -0
- package/build/server/chunks/_page.svelte-CAzWL4aq.js +66 -0
- package/build/server/chunks/_page.svelte-CAzWL4aq.js.map +1 -0
- package/build/server/chunks/_page.svelte-Ci5V-DhL.js +72 -0
- package/build/server/chunks/_page.svelte-Ci5V-DhL.js.map +1 -0
- package/build/server/chunks/_page.svelte-CnfRSJsl.js +37 -0
- package/build/server/chunks/_page.svelte-CnfRSJsl.js.map +1 -0
- package/build/server/chunks/_page.svelte-DgyZKeaF.js +231 -0
- package/build/server/chunks/_page.svelte-DgyZKeaF.js.map +1 -0
- package/build/server/chunks/_page.svelte-VDBvShZ8.js +6 -0
- package/build/server/chunks/_page.svelte-VDBvShZ8.js.map +1 -0
- package/build/server/chunks/_page.svelte-cAsZlwLs.js +24 -0
- package/build/server/chunks/_page.svelte-cAsZlwLs.js.map +1 -0
- package/build/server/chunks/_page.svelte-rrN2zFNa.js +66 -0
- package/build/server/chunks/_page.svelte-rrN2zFNa.js.map +1 -0
- package/build/server/chunks/account-BZSP6KBP.js +445 -0
- package/build/server/chunks/account-BZSP6KBP.js.map +1 -0
- package/build/server/chunks/color-K_MR7m8s.js +14 -0
- package/build/server/chunks/color-K_MR7m8s.js.map +1 -0
- package/build/server/chunks/context-R2425nfV.js +64 -0
- package/build/server/chunks/context-R2425nfV.js.map +1 -0
- package/build/server/chunks/{error.svelte-DNQXZmIO.js → error.svelte-DTrQqomO.js} +8 -7
- package/build/server/chunks/error.svelte-DTrQqomO.js.map +1 -0
- package/build/server/chunks/index-DJrm8BZm.js +844 -0
- package/build/server/chunks/index-DJrm8BZm.js.map +1 -0
- package/build/server/chunks/{index-CvHf_GW2.js → index-eKiDBuyI.js} +826 -438
- package/build/server/chunks/index-eKiDBuyI.js.map +1 -0
- package/build/server/chunks/layout.svelte-UxsTmhKc.js +8 -0
- package/build/server/chunks/layout.svelte-UxsTmhKc.js.map +1 -0
- package/build/server/chunks/{string-DLbvtT1R.js → numbers-DL8C9q4W.js} +1 -71
- package/build/server/chunks/numbers-DL8C9q4W.js.map +1 -0
- package/build/server/chunks/{FormDialog-CB-2YGWi.js → user2-Coq3Frtw.js} +102 -203
- package/build/server/chunks/user2-Coq3Frtw.js.map +1 -0
- package/build/server/chunks/{utils-h74ns7K6.js → utils-DlBYhQz7.js} +2 -1
- package/build/server/chunks/utils-DlBYhQz7.js.map +1 -0
- package/build/server/index.js +1787 -994
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +70 -13
- package/build/server/manifest.js.map +1 -1
- package/dist/acl.d.ts +1 -2
- package/dist/api/acl.js +4 -4
- package/dist/api/admin.d.ts +1 -0
- package/dist/api/admin.js +135 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/metadata.js +3 -3
- package/dist/api/passkeys.js +10 -10
- package/dist/api/register.js +4 -4
- package/dist/api/session.js +5 -5
- package/dist/api/users.js +48 -48
- package/dist/audit.d.ts +7 -39
- package/dist/audit.js +10 -13
- package/dist/auth.d.ts +4 -11
- package/dist/auth.js +4 -4
- package/dist/cli.js +40 -54
- package/dist/config.d.ts +24 -14
- package/dist/config.js +42 -25
- package/dist/database.d.ts +3 -4
- package/dist/database.js +12 -12
- package/dist/internal_requests.d.ts +3 -0
- package/dist/internal_requests.js +119 -0
- package/dist/io.d.ts +1 -1
- package/dist/io.js +2 -5
- package/dist/linking.d.ts +0 -1
- package/dist/linking.js +2 -5
- package/dist/plugins.d.ts +4 -39
- package/dist/plugins.js +35 -51
- package/dist/requests.d.ts +5 -5
- package/dist/requests.js +14 -14
- package/dist/routes.d.ts +6 -10
- package/dist/routes.js +4 -5
- package/dist/serve.d.ts +3 -2
- package/dist/serve.js +165 -13
- package/dist/state.js +2 -1
- package/package.json +6 -5
- package/routes/account/+page.svelte +5 -109
- package/routes/admin/+layout.svelte +56 -0
- package/routes/admin/+layout.ts +29 -0
- package/routes/admin/+page.svelte +39 -0
- package/routes/admin/+page.ts +7 -0
- package/routes/admin/audit/+page.svelte +137 -0
- package/routes/admin/audit/+page.ts +20 -0
- package/routes/admin/audit/[id]/+page.svelte +43 -0
- package/routes/admin/audit/[id]/+page.ts +9 -0
- package/routes/admin/audit/styles.css +31 -0
- package/routes/admin/config/+page.svelte +28 -0
- package/routes/admin/config/+page.ts +9 -0
- package/routes/admin/plugins/+page.svelte +23 -0
- package/routes/admin/plugins/+page.ts +7 -0
- package/routes/admin/users/+page.svelte +60 -0
- package/routes/admin/users/+page.ts +9 -0
- package/routes/admin/users/[id]/+page.svelte +108 -0
- package/routes/admin/users/[id]/+page.ts +17 -0
- package/routes/tsconfig.json +1 -1
- package/svelte.config.js +4 -10
- package/{web/template.html → template.html} +1 -1
- package/{web/tsconfig.json → web.tsconfig.json} +2 -2
- package/build/client/_app/immutable/chunks/B1E1cVbi.js +0 -1
- package/build/client/_app/immutable/chunks/B1E1cVbi.js.br +0 -0
- package/build/client/_app/immutable/chunks/B1E1cVbi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D3hk2v8y.js +0 -1
- package/build/client/_app/immutable/chunks/D3hk2v8y.js.br +0 -2
- package/build/client/_app/immutable/chunks/D3hk2v8y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D4Bce_hb.js +0 -1
- package/build/client/_app/immutable/chunks/D4Bce_hb.js.br +0 -0
- package/build/client/_app/immutable/chunks/D4Bce_hb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D9TfJrfD.js +0 -1
- package/build/client/_app/immutable/chunks/D9TfJrfD.js.br +0 -0
- package/build/client/_app/immutable/chunks/D9TfJrfD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DJeR1n-B.js +0 -51
- package/build/client/_app/immutable/chunks/DJeR1n-B.js.br +0 -0
- package/build/client/_app/immutable/chunks/DJeR1n-B.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dy1O3iBu.js +0 -2
- package/build/client/_app/immutable/chunks/Dy1O3iBu.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dy1O3iBu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/NhZR8nmR.js +0 -3
- package/build/client/_app/immutable/chunks/NhZR8nmR.js.br +0 -0
- package/build/client/_app/immutable/chunks/NhZR8nmR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/pba7IodQ.js +0 -1
- package/build/client/_app/immutable/chunks/pba7IodQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/pba7IodQ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DJWgFLyv.js +0 -2
- package/build/client/_app/immutable/entry/app.DJWgFLyv.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DJWgFLyv.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CM7y0WAo.js +0 -1
- package/build/client/_app/immutable/entry/start.CM7y0WAo.js.br +0 -2
- package/build/client/_app/immutable/entry/start.CM7y0WAo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.DlE8ZTIF.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DlE8ZTIF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.BER4lkmI.js +0 -1
- package/build/client/_app/immutable/nodes/1.BER4lkmI.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.BER4lkmI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.CvEpuMc7.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CvEpuMc7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CVudd8x2.js +0 -7
- package/build/client/_app/immutable/nodes/3.CVudd8x2.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CVudd8x2.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.Dhj0R0r7.js +0 -1
- package/build/client/_app/immutable/nodes/4.Dhj0R0r7.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.Dhj0R0r7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CGoBaVII.js +0 -1
- package/build/client/_app/immutable/nodes/5.CGoBaVII.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CGoBaVII.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BtB2uWXy.js +0 -1
- package/build/client/_app/immutable/nodes/6.BtB2uWXy.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BtB2uWXy.js.gz +0 -0
- package/build/server/chunks/0-DgHTujtC.js +0 -9
- package/build/server/chunks/1-k30i-hic.js +0 -9
- package/build/server/chunks/2-CXlrhpR6.js +0 -9
- package/build/server/chunks/3-CGT4Ugys.js +0 -13
- package/build/server/chunks/3-CGT4Ugys.js.map +0 -1
- package/build/server/chunks/4-BscEiwUk.js +0 -9
- package/build/server/chunks/4-BscEiwUk.js.map +0 -1
- package/build/server/chunks/5-H0ePIJBE.js +0 -9
- package/build/server/chunks/5-H0ePIJBE.js.map +0 -1
- package/build/server/chunks/6-BrPpcagX.js +0 -9
- package/build/server/chunks/6-BrPpcagX.js.map +0 -1
- package/build/server/chunks/FormDialog-CB-2YGWi.js.map +0 -1
- package/build/server/chunks/Logout-LKOt-AST.js +0 -45
- package/build/server/chunks/Logout-LKOt-AST.js.map +0 -1
- package/build/server/chunks/_page.svelte-B1LK5J87.js +0 -11
- package/build/server/chunks/_page.svelte-B1LK5J87.js.map +0 -1
- package/build/server/chunks/_page.svelte-CMtkwvbP.js +0 -68
- package/build/server/chunks/_page.svelte-CMtkwvbP.js.map +0 -1
- package/build/server/chunks/_page.svelte-CbI2KxeA.js +0 -62
- package/build/server/chunks/_page.svelte-CbI2KxeA.js.map +0 -1
- package/build/server/chunks/_page.svelte-D1_WJoyP.js +0 -6
- package/build/server/chunks/_page.svelte-D1_WJoyP.js.map +0 -1
- package/build/server/chunks/_page.svelte-d01Hl2Ia.js +0 -639
- package/build/server/chunks/_page.svelte-d01Hl2Ia.js.map +0 -1
- package/build/server/chunks/error.svelte-DNQXZmIO.js.map +0 -1
- package/build/server/chunks/hooks.server-BQqilaHv.js +0 -17301
- package/build/server/chunks/hooks.server-BQqilaHv.js.map +0 -1
- package/build/server/chunks/index-CvHf_GW2.js.map +0 -1
- package/build/server/chunks/index-RTKpMYZ1.js +0 -397
- package/build/server/chunks/index-RTKpMYZ1.js.map +0 -1
- package/build/server/chunks/layout.svelte-BSvrn-4a.js +0 -8
- package/build/server/chunks/layout.svelte-BSvrn-4a.js.map +0 -1
- package/build/server/chunks/string-DLbvtT1R.js.map +0 -1
- package/build/server/chunks/utils-h74ns7K6.js.map +0 -1
- package/dist/sveltekit.d.ts +0 -8
- package/dist/sveltekit.js +0 -60
- package/web/hooks.server.ts +0 -4
package/dist/config.js
CHANGED
|
@@ -10,6 +10,8 @@ const audit_severity_levels = ['emergency', 'alert', 'critical', 'error', 'warni
|
|
|
10
10
|
const z_audit_severity = z.literal([...audit_severity_levels, ...audit_severity_levels.map(capitalize)]);
|
|
11
11
|
export const ConfigSchema = z
|
|
12
12
|
.looseObject({
|
|
13
|
+
/** Whether /api/admin is enabled */
|
|
14
|
+
admin_api: z.boolean(),
|
|
13
15
|
allow_new_users: z.boolean(),
|
|
14
16
|
apps: z
|
|
15
17
|
.looseObject({
|
|
@@ -59,11 +61,10 @@ export const ConfigSchema = z
|
|
|
59
61
|
console: z.boolean(),
|
|
60
62
|
})
|
|
61
63
|
.partial(),
|
|
64
|
+
request_size_limit: z.number().min(0).optional(),
|
|
62
65
|
show_duplicate_state: z.boolean(),
|
|
63
66
|
web: z
|
|
64
67
|
.looseObject({
|
|
65
|
-
assets: z.string(),
|
|
66
|
-
build: z.string(),
|
|
67
68
|
disable_cache: z.boolean(),
|
|
68
69
|
port: z.number().min(1).max(65535),
|
|
69
70
|
prefix: z.string(),
|
|
@@ -71,7 +72,6 @@ export const ConfigSchema = z
|
|
|
71
72
|
secure: z.boolean(),
|
|
72
73
|
ssl_key: z.string(),
|
|
73
74
|
ssl_cert: z.string(),
|
|
74
|
-
template: z.string(),
|
|
75
75
|
})
|
|
76
76
|
.partial(),
|
|
77
77
|
})
|
|
@@ -80,18 +80,8 @@ export const configFiles = _unique('configFiles', new Map());
|
|
|
80
80
|
export function plainConfig() {
|
|
81
81
|
return omit(config, Object.keys(configShortcuts));
|
|
82
82
|
}
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
load: loadConfig,
|
|
86
|
-
loadDefaults: loadDefaultConfigs,
|
|
87
|
-
plain: plainConfig,
|
|
88
|
-
save: saveConfig,
|
|
89
|
-
saveTo: saveConfigTo,
|
|
90
|
-
set: setConfig,
|
|
91
|
-
files: configFiles,
|
|
92
|
-
};
|
|
93
|
-
export const config = _unique('config', {
|
|
94
|
-
...configShortcuts,
|
|
83
|
+
export const defaultConfig = {
|
|
84
|
+
admin_api: true,
|
|
95
85
|
allow_new_users: true,
|
|
96
86
|
apps: {
|
|
97
87
|
disabled: [],
|
|
@@ -131,9 +121,8 @@ export const config = _unique('config', {
|
|
|
131
121
|
level: 'info',
|
|
132
122
|
},
|
|
133
123
|
show_duplicate_state: false,
|
|
124
|
+
request_size_limit: 0,
|
|
134
125
|
web: {
|
|
135
|
-
assets: '',
|
|
136
|
-
build: '../build/handler.js',
|
|
137
126
|
disable_cache: false,
|
|
138
127
|
port: 443,
|
|
139
128
|
prefix: '',
|
|
@@ -141,8 +130,22 @@ export const config = _unique('config', {
|
|
|
141
130
|
secure: true,
|
|
142
131
|
ssl_key: resolve(dirs[0], 'ssl_key.pem'),
|
|
143
132
|
ssl_cert: resolve(dirs[0], 'ssl_cert.pem'),
|
|
144
|
-
template: join(import.meta.dirname, '../web/template.html'),
|
|
145
133
|
},
|
|
134
|
+
};
|
|
135
|
+
const configShortcuts = {
|
|
136
|
+
findPath: findConfigPaths,
|
|
137
|
+
load: loadConfig,
|
|
138
|
+
loadDefaults: loadDefaultConfigs,
|
|
139
|
+
plain: plainConfig,
|
|
140
|
+
save: saveConfig,
|
|
141
|
+
saveTo: saveConfigTo,
|
|
142
|
+
set: setConfig,
|
|
143
|
+
files: configFiles,
|
|
144
|
+
defaults: defaultConfig,
|
|
145
|
+
};
|
|
146
|
+
export const config = _unique('config', {
|
|
147
|
+
...configShortcuts,
|
|
148
|
+
...defaultConfig,
|
|
146
149
|
});
|
|
147
150
|
export default config;
|
|
148
151
|
// config from file
|
|
@@ -153,14 +156,16 @@ export const FileSchema = z
|
|
|
153
156
|
plugins: z.array(z.string()),
|
|
154
157
|
})
|
|
155
158
|
.partial();
|
|
156
|
-
export function addConfigDefaults(other, _target = config) {
|
|
159
|
+
export function addConfigDefaults(other, _target = config, _noDefault = false) {
|
|
160
|
+
if (!_noDefault)
|
|
161
|
+
deepAssign(defaultConfig, other);
|
|
157
162
|
for (const [key, value] of Object.entries(other)) {
|
|
158
163
|
if (!(key in _target) || _target[key] === null || _target[key] === undefined || Number.isNaN(_target[key])) {
|
|
159
164
|
_target[key] = value;
|
|
160
165
|
continue;
|
|
161
166
|
}
|
|
162
167
|
if (typeof value == 'object' && value != null && typeof _target[key] == 'object') {
|
|
163
|
-
addConfigDefaults(value, _target[key]);
|
|
168
|
+
addConfigDefaults(value, _target[key], true);
|
|
164
169
|
}
|
|
165
170
|
}
|
|
166
171
|
}
|
|
@@ -175,6 +180,7 @@ export function setConfig(other) {
|
|
|
175
180
|
_setDebugOutput(config.debug);
|
|
176
181
|
_duplicateStateWarnings(config.show_duplicate_state);
|
|
177
182
|
}
|
|
183
|
+
const kWasIncluded = Symbol.for('_wasIncluded');
|
|
178
184
|
/**
|
|
179
185
|
* Load the config from the provided path
|
|
180
186
|
*/
|
|
@@ -201,15 +207,15 @@ export async function loadConfig(path, options = {}) {
|
|
|
201
207
|
output.debug(`Loading invalid config from ${path} (${e.message})`);
|
|
202
208
|
file = json;
|
|
203
209
|
}
|
|
204
|
-
configFiles.set(path, file);
|
|
210
|
+
configFiles.set(path, { ...file, [kWasIncluded]: !!options._markIncluded });
|
|
205
211
|
setConfig(file);
|
|
206
212
|
output.debug('Loaded config: ' + path);
|
|
207
213
|
for (const include of file.include ?? [])
|
|
208
|
-
await loadConfig(resolve(dirname(path), include), { optional: true });
|
|
214
|
+
await loadConfig(resolve(dirname(path), include), { ...options, optional: true, _markIncluded: true });
|
|
209
215
|
for (const plugin of file.plugins ?? [])
|
|
210
|
-
await loadPlugin(plugin
|
|
216
|
+
await loadPlugin(plugin, path, options.safe);
|
|
211
217
|
}
|
|
212
|
-
export async function loadDefaultConfigs() {
|
|
218
|
+
export async function loadDefaultConfigs(safe = false) {
|
|
213
219
|
for (const path of findConfigPaths()) {
|
|
214
220
|
if (!existsSync(path)) {
|
|
215
221
|
try {
|
|
@@ -219,9 +225,20 @@ export async function loadDefaultConfigs() {
|
|
|
219
225
|
continue;
|
|
220
226
|
}
|
|
221
227
|
}
|
|
222
|
-
await loadConfig(path, { optional: true });
|
|
228
|
+
await loadConfig(path, { optional: true, safe });
|
|
223
229
|
}
|
|
224
230
|
}
|
|
231
|
+
export async function reloadConfigs(safe = false) {
|
|
232
|
+
const paths = Array.from(configFiles
|
|
233
|
+
.entries()
|
|
234
|
+
.filter(([, cfg]) => !cfg[kWasIncluded])
|
|
235
|
+
.map(([p]) => p));
|
|
236
|
+
configFiles.clear();
|
|
237
|
+
setConfig(defaultConfig);
|
|
238
|
+
for (const path of paths)
|
|
239
|
+
await loadConfig(path, { safe });
|
|
240
|
+
output.info('Reloaded configuration files');
|
|
241
|
+
}
|
|
225
242
|
/**
|
|
226
243
|
* Update the current config and write the updated config to the appropriate file
|
|
227
244
|
*/
|
package/dist/database.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type { Permission, Preferences } from '@axium/core';
|
|
1
|
+
import type { Permission, Preferences, Severity, UserInternal } from '@axium/core';
|
|
2
2
|
import type { AuthenticatorTransportFuture, CredentialDeviceType } from '@simplewebauthn/server';
|
|
3
3
|
import type * as kysely from 'kysely';
|
|
4
4
|
import { Kysely } from 'kysely';
|
|
5
|
-
import type {
|
|
6
|
-
import type { UserInternal, VerificationRole } from './auth.js';
|
|
5
|
+
import type { VerificationRole } from './auth.js';
|
|
7
6
|
export interface DBAccessControl {
|
|
8
7
|
itemId: string;
|
|
9
8
|
userId: string;
|
|
@@ -43,7 +42,7 @@ export interface Schema {
|
|
|
43
42
|
name: string | null;
|
|
44
43
|
createdAt: kysely.GeneratedAlways<Date>;
|
|
45
44
|
userId: string;
|
|
46
|
-
publicKey: Uint8Array
|
|
45
|
+
publicKey: Uint8Array<ArrayBuffer>;
|
|
47
46
|
counter: number;
|
|
48
47
|
deviceType: CredentialDeviceType;
|
|
49
48
|
backedUp: boolean;
|
package/dist/database.js
CHANGED
|
@@ -277,11 +277,11 @@ export async function init(opt) {
|
|
|
277
277
|
.catch(maybeCheck('audit_log'));
|
|
278
278
|
io.start('Creating schema acl');
|
|
279
279
|
await database.schema.createSchema('acl').execute().then(io.done).catch(warnExists);
|
|
280
|
-
for (const plugin of plugins) {
|
|
281
|
-
if (!plugin.
|
|
280
|
+
for (const plugin of plugins.values()) {
|
|
281
|
+
if (!plugin._hooks?.db_init)
|
|
282
282
|
continue;
|
|
283
283
|
io.plugin(plugin.name);
|
|
284
|
-
await plugin.
|
|
284
|
+
await plugin._hooks?.db_init(opt);
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
287
|
catch (e_1) {
|
|
@@ -432,22 +432,22 @@ export async function clean(opt) {
|
|
|
432
432
|
await database.deleteFrom('sessions').where('sessions.expires', '<', now).execute().then(io.done);
|
|
433
433
|
io.start('Removing expired verifications');
|
|
434
434
|
await database.deleteFrom('verifications').where('verifications.expires', '<', now).execute().then(io.done);
|
|
435
|
-
for (const plugin of plugins) {
|
|
436
|
-
if (!plugin.
|
|
435
|
+
for (const plugin of plugins.values()) {
|
|
436
|
+
if (!plugin._hooks?.clean)
|
|
437
437
|
continue;
|
|
438
438
|
io.plugin(plugin.name);
|
|
439
|
-
await plugin.
|
|
439
|
+
await plugin._hooks?.clean(opt);
|
|
440
440
|
}
|
|
441
441
|
}
|
|
442
442
|
/**
|
|
443
443
|
* Completely remove Axium from the database.
|
|
444
444
|
*/
|
|
445
445
|
export async function uninstall(opt) {
|
|
446
|
-
for (const plugin of plugins) {
|
|
447
|
-
if (!plugin.
|
|
446
|
+
for (const plugin of plugins.values()) {
|
|
447
|
+
if (!plugin._hooks?.remove)
|
|
448
448
|
continue;
|
|
449
449
|
io.plugin(plugin.name);
|
|
450
|
-
await plugin.
|
|
450
|
+
await plugin._hooks?.remove(opt);
|
|
451
451
|
}
|
|
452
452
|
await _sql('DROP DATABASE axium', 'Dropping database');
|
|
453
453
|
await _sql('REVOKE ALL PRIVILEGES ON SCHEMA public FROM axium', 'Revoking schema privileges');
|
|
@@ -469,11 +469,11 @@ export async function uninstall(opt) {
|
|
|
469
469
|
* Removes all data from tables.
|
|
470
470
|
*/
|
|
471
471
|
export async function wipe(opt) {
|
|
472
|
-
for (const plugin of plugins) {
|
|
473
|
-
if (!plugin.
|
|
472
|
+
for (const plugin of plugins.values()) {
|
|
473
|
+
if (!plugin._hooks?.db_wipe)
|
|
474
474
|
continue;
|
|
475
475
|
io.plugin(plugin.name);
|
|
476
|
-
await plugin.
|
|
476
|
+
await plugin._hooks?.db_wipe(opt);
|
|
477
477
|
}
|
|
478
478
|
for (const table of ['users', 'passkeys', 'sessions', 'verifications']) {
|
|
479
479
|
io.start(`Wiping ${table}`);
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { config } from './config.js';
|
|
2
|
+
/* Credit to the SvelteKit team: https://github.com/sveltejs/kit/blob/8d1ba04825a540324bc003e85f36559a594aadc2/packages/kit/src/exports/node/index.js */
|
|
3
|
+
function get_raw_body(req) {
|
|
4
|
+
const h = req.headers;
|
|
5
|
+
if (!h['content-type'])
|
|
6
|
+
return null;
|
|
7
|
+
const content_length = Number(h['content-length']);
|
|
8
|
+
// check if no request body
|
|
9
|
+
if ((req.httpVersionMajor === 1 && isNaN(content_length) && h['transfer-encoding'] == null) || content_length === 0) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
let length = content_length;
|
|
13
|
+
if (config.request_size_limit) {
|
|
14
|
+
if (!length)
|
|
15
|
+
length = config.request_size_limit;
|
|
16
|
+
else if (length > config.request_size_limit)
|
|
17
|
+
throw 413;
|
|
18
|
+
}
|
|
19
|
+
if (req.destroyed) {
|
|
20
|
+
const readable = new ReadableStream();
|
|
21
|
+
void readable.cancel();
|
|
22
|
+
return readable;
|
|
23
|
+
}
|
|
24
|
+
let size = 0;
|
|
25
|
+
let cancelled = false;
|
|
26
|
+
return new ReadableStream({
|
|
27
|
+
start(controller) {
|
|
28
|
+
req.on('error', error => {
|
|
29
|
+
cancelled = true;
|
|
30
|
+
controller.error(error);
|
|
31
|
+
});
|
|
32
|
+
req.on('end', () => {
|
|
33
|
+
if (cancelled)
|
|
34
|
+
return;
|
|
35
|
+
controller.close();
|
|
36
|
+
});
|
|
37
|
+
req.on('data', chunk => {
|
|
38
|
+
if (cancelled)
|
|
39
|
+
return;
|
|
40
|
+
size += chunk.length;
|
|
41
|
+
if (size > length) {
|
|
42
|
+
cancelled = true;
|
|
43
|
+
controller.error(413);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
controller.enqueue(chunk);
|
|
47
|
+
if (controller.desiredSize === null || controller.desiredSize <= 0) {
|
|
48
|
+
req.pause();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
pull() {
|
|
53
|
+
req.resume();
|
|
54
|
+
},
|
|
55
|
+
cancel(reason) {
|
|
56
|
+
cancelled = true;
|
|
57
|
+
req.destroy(reason);
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export function convertToRequest(req) {
|
|
62
|
+
const headers = req.headers;
|
|
63
|
+
const request = new Request(config.auth.origin + req.url, {
|
|
64
|
+
// @ts-expect-error 2353
|
|
65
|
+
duplex: 'half',
|
|
66
|
+
method: req.method,
|
|
67
|
+
headers,
|
|
68
|
+
body: get_raw_body(req),
|
|
69
|
+
});
|
|
70
|
+
return request;
|
|
71
|
+
}
|
|
72
|
+
export async function convertFromResponse(res, response) {
|
|
73
|
+
res.writeHead(response.status, Object.fromEntries(response.headers));
|
|
74
|
+
if (!response.body) {
|
|
75
|
+
res.end();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (response.body.locked) {
|
|
79
|
+
res.write('Fatal error: Response body is locked. ' +
|
|
80
|
+
`This can happen when the response was already read (for example through 'response.json()' or 'response.text()').`);
|
|
81
|
+
res.end();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const reader = response.body.getReader();
|
|
85
|
+
if (res.destroyed) {
|
|
86
|
+
await reader.cancel();
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const cancel = (error) => {
|
|
90
|
+
res.off('close', cancel);
|
|
91
|
+
res.off('error', cancel);
|
|
92
|
+
// If the reader has already been interrupted with an error earlier,
|
|
93
|
+
// then it will appear here, it is useless, but it needs to be catch.
|
|
94
|
+
reader.cancel(error).catch(() => { });
|
|
95
|
+
if (error)
|
|
96
|
+
res.destroy(error);
|
|
97
|
+
};
|
|
98
|
+
res.on('close', cancel);
|
|
99
|
+
res.on('error', cancel);
|
|
100
|
+
async function next() {
|
|
101
|
+
try {
|
|
102
|
+
for (;;) {
|
|
103
|
+
const { done, value } = await reader.read();
|
|
104
|
+
if (done)
|
|
105
|
+
break;
|
|
106
|
+
if (!res.write(value)) {
|
|
107
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
108
|
+
res.once('drain', next);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
res.end();
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
cancel(error instanceof Error ? error : new Error(String(error)));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
void next();
|
|
119
|
+
}
|
package/dist/io.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Logger } from 'logzen';
|
|
2
2
|
export declare const systemDir = "/etc/axium";
|
|
3
|
-
export declare const userDir: string;
|
|
4
3
|
export declare const dirs: string[];
|
|
5
4
|
export declare const logger: Logger;
|
|
6
5
|
/**
|
|
@@ -30,6 +29,7 @@ export interface Output {
|
|
|
30
29
|
(tag: 'done'): void;
|
|
31
30
|
(tag: Exclude<OutputTag, 'done'>, message: string): void;
|
|
32
31
|
}
|
|
32
|
+
export declare let _debugOutput: boolean;
|
|
33
33
|
/**
|
|
34
34
|
* Enable or disable debug output.
|
|
35
35
|
*/
|
package/dist/io.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { Logger } from 'logzen';
|
|
2
2
|
import { exec } from 'node:child_process';
|
|
3
3
|
import * as fs from 'node:fs';
|
|
4
|
-
import { homedir } from 'node:os';
|
|
5
4
|
import { dirname, join, resolve } from 'node:path/posix';
|
|
6
5
|
import { styleText } from 'node:util';
|
|
7
6
|
import { _unique } from './state.js';
|
|
8
7
|
export const systemDir = '/etc/axium';
|
|
9
|
-
export const
|
|
10
|
-
export const dirs = _unique('dirs', [systemDir, userDir]);
|
|
8
|
+
export const dirs = _unique('dirs', [systemDir]);
|
|
11
9
|
for (let dir = resolve(process.cwd()); dir !== '/'; dir = dirname(dir)) {
|
|
12
10
|
if (fs.existsSync(join(dir, '.axium')))
|
|
13
11
|
dirs.push(join(dir, '.axium'));
|
|
@@ -20,7 +18,6 @@ try {
|
|
|
20
18
|
catch {
|
|
21
19
|
// Missing permissions
|
|
22
20
|
}
|
|
23
|
-
fs.mkdirSync(userDir, { recursive: true });
|
|
24
21
|
export const logger = new Logger({
|
|
25
22
|
hideWarningStack: true,
|
|
26
23
|
noGlobalConsole: true,
|
|
@@ -92,7 +89,7 @@ export function handleError(e) {
|
|
|
92
89
|
else
|
|
93
90
|
exit(e);
|
|
94
91
|
}
|
|
95
|
-
let _debugOutput = false;
|
|
92
|
+
export let _debugOutput = false;
|
|
96
93
|
/**
|
|
97
94
|
* Enable or disable debug output.
|
|
98
95
|
*/
|
package/dist/linking.d.ts
CHANGED
package/dist/linking.js
CHANGED
|
@@ -11,21 +11,18 @@ function info(id) {
|
|
|
11
11
|
const link = join(config.web.routes, `(${id.startsWith('#') ? id.slice(1) : id.replaceAll('/', '__')})`);
|
|
12
12
|
return [text, link];
|
|
13
13
|
}
|
|
14
|
-
const defaultPackagesDir = join(import.meta.dirname, '../../..');
|
|
15
14
|
export function* listRouteLinks(options = {}) {
|
|
16
|
-
const packagesDir = options.packagesDir || defaultPackagesDir;
|
|
17
|
-
io.debug('Using packages from ' + packagesDir);
|
|
18
15
|
if (!options.only) {
|
|
19
16
|
const [text, link] = info('#builtin');
|
|
20
17
|
yield { text, id: '#builtin', from: link, to: resolve(import.meta.dirname, '../routes') };
|
|
21
18
|
}
|
|
22
|
-
for (const plugin of plugins) {
|
|
19
|
+
for (const plugin of plugins.values()) {
|
|
23
20
|
if (!plugin.routes)
|
|
24
21
|
continue;
|
|
25
22
|
if (options.only && !options.only.includes(plugin.name))
|
|
26
23
|
continue;
|
|
27
24
|
const [text, link] = info(plugin.name);
|
|
28
|
-
const to = resolve(join(
|
|
25
|
+
const to = resolve(join(plugin.dirname, plugin.routes));
|
|
29
26
|
yield { text, id: plugin.name, from: link, to };
|
|
30
27
|
}
|
|
31
28
|
}
|
package/dist/plugins.d.ts
CHANGED
|
@@ -1,38 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type PluginInternal } from '@axium/core/plugins';
|
|
2
2
|
import type { InitOptions, OpOptions } from './database.js';
|
|
3
|
-
export declare const PluginMetadata: z.ZodObject<{
|
|
4
|
-
name: z.ZodString;
|
|
5
|
-
version: z.ZodString;
|
|
6
|
-
description: z.ZodOptional<z.ZodString>;
|
|
7
|
-
routes: z.ZodOptional<z.ZodString>;
|
|
8
|
-
apps: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
9
|
-
id: z.ZodString;
|
|
10
|
-
name: z.ZodOptional<z.ZodString>;
|
|
11
|
-
image: z.ZodOptional<z.ZodString>;
|
|
12
|
-
icon: z.ZodOptional<z.ZodString>;
|
|
13
|
-
}, z.core.$strip>>>;
|
|
14
|
-
}, z.core.$loose>;
|
|
15
|
-
export declare const Plugin: z.ZodObject<{
|
|
16
|
-
name: z.ZodString;
|
|
17
|
-
version: z.ZodString;
|
|
18
|
-
description: z.ZodOptional<z.ZodString>;
|
|
19
|
-
routes: z.ZodOptional<z.ZodString>;
|
|
20
|
-
apps: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
21
|
-
id: z.ZodString;
|
|
22
|
-
name: z.ZodOptional<z.ZodString>;
|
|
23
|
-
image: z.ZodOptional<z.ZodString>;
|
|
24
|
-
icon: z.ZodOptional<z.ZodString>;
|
|
25
|
-
}, z.core.$strip>>>;
|
|
26
|
-
statusText: z.ZodCustom<z.core.$InferInnerFunctionTypeAsync<z.core.$ZodTuple<[], null>, z.ZodString>, z.core.$InferInnerFunctionTypeAsync<z.core.$ZodTuple<[], null>, z.ZodString>>;
|
|
27
|
-
hooks: z.ZodOptional<z.ZodRecord<z.ZodLiteral<"remove" | "db_init" | "db_wipe" | "clean"> & z.core.$partial, z.ZodCustom<(...args: any[]) => any, (...args: any[]) => any>>>;
|
|
28
|
-
}, z.core.$loose>;
|
|
29
|
-
declare const kSpecifier: unique symbol;
|
|
30
|
-
export type Plugin = z.infer<typeof Plugin>;
|
|
31
|
-
interface PluginInternal extends Plugin {
|
|
32
|
-
[kSpecifier]: string;
|
|
33
|
-
hooks: Hooks;
|
|
34
|
-
}
|
|
35
3
|
export interface Hooks {
|
|
4
|
+
statusText?(): string | Promise<string>;
|
|
36
5
|
db_init?: (opt: InitOptions) => void | Promise<void>;
|
|
37
6
|
remove?: (opt: {
|
|
38
7
|
force?: boolean;
|
|
@@ -40,10 +9,6 @@ export interface Hooks {
|
|
|
40
9
|
db_wipe?: (opt: OpOptions) => void | Promise<void>;
|
|
41
10
|
clean?: (opt: Partial<OpOptions>) => void | Promise<void>;
|
|
42
11
|
}
|
|
43
|
-
export declare const plugins:
|
|
44
|
-
export declare function resolvePlugin(search: string): PluginInternal | undefined;
|
|
12
|
+
export declare const plugins: Map<string, PluginInternal>;
|
|
45
13
|
export declare function pluginText(plugin: PluginInternal): string;
|
|
46
|
-
export declare function loadPlugin(specifier: string): Promise<void>;
|
|
47
|
-
export declare function getSpecifier(plugin: PluginInternal): string;
|
|
48
|
-
export declare function loadPlugins(dir: string): Promise<void>;
|
|
49
|
-
export {};
|
|
14
|
+
export declare function loadPlugin(specifier: string, _loadedBy: string, safeMode?: boolean): Promise<void>;
|
package/dist/plugins.js
CHANGED
|
@@ -1,54 +1,52 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { zAsyncFunction } from '@axium/core/schemas';
|
|
1
|
+
import { Plugin } from '@axium/core/plugins';
|
|
3
2
|
import * as fs from 'node:fs';
|
|
4
|
-
import { resolve } from 'node:path/posix';
|
|
3
|
+
import { dirname, join, resolve } from 'node:path/posix';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import { styleText } from 'node:util';
|
|
6
6
|
import * as z from 'zod';
|
|
7
7
|
import { apps } from './apps.js';
|
|
8
8
|
import { output } from './io.js';
|
|
9
9
|
import { _unique } from './state.js';
|
|
10
|
-
export const
|
|
11
|
-
name: z.string(),
|
|
12
|
-
version: z.string(),
|
|
13
|
-
description: z.string().optional(),
|
|
14
|
-
routes: z.string().optional(),
|
|
15
|
-
apps: z.array(App).optional(),
|
|
16
|
-
});
|
|
17
|
-
const hookNames = ['db_init', 'remove', 'db_wipe', 'clean'];
|
|
18
|
-
const fn = z.custom(data => typeof data === 'function');
|
|
19
|
-
export const Plugin = PluginMetadata.extend({
|
|
20
|
-
statusText: zAsyncFunction(z.function({ input: [], output: z.string() })),
|
|
21
|
-
hooks: z.partialRecord(z.literal(hookNames), fn).optional(),
|
|
22
|
-
});
|
|
23
|
-
const kSpecifier = Symbol('specifier');
|
|
24
|
-
export const plugins = _unique('plugins', new Set());
|
|
25
|
-
export function resolvePlugin(search) {
|
|
26
|
-
for (const plugin of plugins) {
|
|
27
|
-
if (plugin.name === search)
|
|
28
|
-
return plugin;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
10
|
+
export const plugins = _unique('plugins', new Map());
|
|
31
11
|
export function pluginText(plugin) {
|
|
32
12
|
return [
|
|
33
13
|
styleText('whiteBright', plugin.name),
|
|
34
14
|
`Version: ${plugin.version}`,
|
|
35
15
|
`Description: ${plugin.description ?? styleText('dim', '(none)')}`,
|
|
36
|
-
`Hooks: ${Object.keys(plugin.
|
|
37
|
-
|
|
38
|
-
`Routes: ${plugin.routes || styleText('dim', '(none)')}`,
|
|
16
|
+
`Hooks: ${plugin._hooks ? styleText(['dim', 'bold'], `(${Object.keys(plugin._hooks).length}) `) + Object.keys(plugin._hooks).join(', ') : plugin.hooks || styleText('dim', '(none)')}`,
|
|
17
|
+
`HTTP Handler: ${plugin.http_handler ?? styleText('dim', '(none)')}`,
|
|
39
18
|
].join('\n');
|
|
40
19
|
}
|
|
41
|
-
|
|
42
|
-
|
|
20
|
+
function _locatePlugin(specifier, _loadedBy) {
|
|
21
|
+
if (specifier[0] == '/' || specifier.startsWith('./') || specifier.startsWith('../')) {
|
|
22
|
+
return resolve(dirname(_loadedBy), specifier);
|
|
23
|
+
}
|
|
24
|
+
let packageDir = dirname(fileURLToPath(import.meta.resolve(specifier)));
|
|
25
|
+
for (; !fs.existsSync(join(packageDir, 'package.json')); packageDir = dirname(packageDir))
|
|
26
|
+
;
|
|
27
|
+
return join(packageDir, 'package.json');
|
|
28
|
+
}
|
|
29
|
+
export async function loadPlugin(specifier, _loadedBy, safeMode = false) {
|
|
43
30
|
try {
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
31
|
+
const path = _locatePlugin(specifier, _loadedBy);
|
|
32
|
+
let imported;
|
|
33
|
+
try {
|
|
34
|
+
imported = JSON.parse(fs.readFileSync(path, 'utf8'));
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
throw new Error('Invalid or missing metadata for ' + specifier);
|
|
38
|
+
}
|
|
39
|
+
if ('axium' in imported)
|
|
40
|
+
Object.assign(imported, imported.axium); // support axium field in package.json
|
|
41
|
+
const plugin = Object.assign(await Plugin.parseAsync(imported).catch(e => {
|
|
50
42
|
throw e instanceof z.core.$ZodError ? z.prettifyError(e) : e;
|
|
51
|
-
}));
|
|
43
|
+
}), { path, specifier, _loadedBy, dirname: dirname(path) });
|
|
44
|
+
if (!safeMode && plugin.hooks) {
|
|
45
|
+
Object.assign(plugin, { _hooks: await import(resolve(plugin.dirname, plugin.hooks)) });
|
|
46
|
+
}
|
|
47
|
+
Object.freeze(plugin);
|
|
48
|
+
if (plugins.has(plugin.name))
|
|
49
|
+
throw 'Plugin already loaded';
|
|
52
50
|
if (plugin.name.startsWith('#') || plugin.name.includes(' ')) {
|
|
53
51
|
throw 'Invalid plugin name. Plugin names can not start with a hash or contain spaces.';
|
|
54
52
|
}
|
|
@@ -57,24 +55,10 @@ export async function loadPlugin(specifier) {
|
|
|
57
55
|
throw new ReferenceError(`App with ID "${app.id}" already exists.`);
|
|
58
56
|
apps.set(app.id, app);
|
|
59
57
|
}
|
|
60
|
-
plugins.
|
|
58
|
+
plugins.set(plugin.name, plugin);
|
|
61
59
|
output.debug(`Loaded plugin: ${plugin.name} ${plugin.version}`);
|
|
62
60
|
}
|
|
63
61
|
catch (e) {
|
|
64
62
|
output.debug(`Failed to load plugin from ${specifier}: ${e ? (e instanceof Error ? e.message : e.toString()) : e}`);
|
|
65
63
|
}
|
|
66
64
|
}
|
|
67
|
-
export function getSpecifier(plugin) {
|
|
68
|
-
return plugin[kSpecifier];
|
|
69
|
-
}
|
|
70
|
-
export async function loadPlugins(dir) {
|
|
71
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
72
|
-
const files = fs.readdirSync(dir);
|
|
73
|
-
for (const file of files) {
|
|
74
|
-
const path = resolve(dir, file);
|
|
75
|
-
const stats = fs.statSync(path);
|
|
76
|
-
if (stats.isDirectory() || !['.js', '.mjs'].some(ext => path.endsWith(ext)))
|
|
77
|
-
return;
|
|
78
|
-
await loadPlugin(path);
|
|
79
|
-
}
|
|
80
|
-
}
|
package/dist/requests.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { User, UserInternal } from '@axium/core';
|
|
2
2
|
import * as z from 'zod';
|
|
3
|
-
import { type UserInternal } from './auth.js';
|
|
4
3
|
import type { ServerRoute } from './routes.js';
|
|
5
4
|
/**
|
|
6
5
|
* @todo Add parsing for Node.js `IncomingMessage` -> standard `Request` and standard `Response` -> Node.js `ServerResponse`
|
|
7
6
|
*/
|
|
8
7
|
/**
|
|
9
8
|
* A `Request` with some commonly used stuff pre-parsed for convenience.
|
|
9
|
+
* @deprecated
|
|
10
10
|
*/
|
|
11
11
|
export interface RequestEvent<Params extends Partial<Record<string, string>> = Partial<Record<string, string>>> {
|
|
12
12
|
request: Request;
|
|
@@ -32,12 +32,12 @@ export declare function isRedirect(e: unknown): e is Redirect;
|
|
|
32
32
|
*/
|
|
33
33
|
export declare function redirect(location: string, status?: number): never;
|
|
34
34
|
export declare function json(data: object, init?: ResponseInit): Response;
|
|
35
|
-
export declare function parseBody<const Schema extends z.ZodType, const Result extends z.infer<Schema> = z.infer<Schema>>(
|
|
36
|
-
export declare function getToken(
|
|
35
|
+
export declare function parseBody<const Schema extends z.ZodType, const Result extends z.infer<Schema> = z.infer<Schema>>(request: Request, schema: Schema): Promise<Result>;
|
|
36
|
+
export declare function getToken(request: Request, sensitive?: boolean): string | undefined;
|
|
37
37
|
export declare function createSessionData(userId: string, elevated?: boolean): Promise<Response>;
|
|
38
38
|
export declare function stripUser(user: UserInternal, includeProtected?: boolean): User;
|
|
39
39
|
export declare function withError(text: string, code?: number): (e: Error | ResponseError) => never;
|
|
40
|
-
export declare function handleAPIRequest(
|
|
40
|
+
export declare function handleAPIRequest(request: Request, params: Record<string, any>, route: ServerRoute): Promise<Response>;
|
|
41
41
|
export declare function handleResponseError(e: Error | ResponseError | Redirect): Response;
|
|
42
42
|
export declare const noCacheHeaders: {
|
|
43
43
|
'Content-Type': string;
|