@axium/server 0.22.14 → 0.23.1
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/build/client/_app/immutable/chunks/{yn3BP4nH.js → B1E1cVbi.js} +1 -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/BsKf3IcD.js +3 -0
- package/build/client/_app/immutable/chunks/BsKf3IcD.js.br +0 -0
- package/build/client/_app/immutable/chunks/BsKf3IcD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DJeR1n-B.js +51 -0
- 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/entry/{app.TYOJB9mi.js → app.BxLzwmdq.js} +2 -2
- package/build/client/_app/immutable/entry/app.BxLzwmdq.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BxLzwmdq.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.DlQnoNJq.js +1 -0
- package/build/client/_app/immutable/entry/start.DlQnoNJq.js.br +2 -0
- package/build/client/_app/immutable/entry/start.DlQnoNJq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.BEkAhyaK.js → 1.CSxEoi31.js} +1 -1
- package/build/client/_app/immutable/nodes/1.CSxEoi31.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.CSxEoi31.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CVudd8x2.js +7 -0
- 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.nypsK3Xd.js → 4.Dhj0R0r7.js} +1 -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 +1 -0
- 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.BmolHYUc.js → 6.BtB2uWXy.js} +1 -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/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/server/chunks/{1-BKZYjYH5.js → 1-DC8DScCf.js} +2 -2
- package/build/server/chunks/{1-BKZYjYH5.js.map → 1-DC8DScCf.js.map} +1 -1
- package/build/server/chunks/{3-maTOJHa5.js → 3-CGT4Ugys.js} +3 -3
- package/build/server/chunks/{3-maTOJHa5.js.map → 3-CGT4Ugys.js.map} +1 -1
- package/build/server/chunks/{4-D7Y8Awy7.js → 4-BscEiwUk.js} +3 -3
- package/build/server/chunks/{4-D7Y8Awy7.js.map → 4-BscEiwUk.js.map} +1 -1
- package/build/server/chunks/{5-DTm_FXHj.js → 5-H0ePIJBE.js} +3 -3
- package/build/server/chunks/{5-DTm_FXHj.js.map → 5-H0ePIJBE.js.map} +1 -1
- package/build/server/chunks/{6-DL0k26vY.js → 6-BrPpcagX.js} +3 -3
- package/build/server/chunks/{6-DL0k26vY.js.map → 6-BrPpcagX.js.map} +1 -1
- package/build/server/chunks/{FormDialog-ChxZzD05.js → FormDialog-CB-2YGWi.js} +29 -26
- package/build/server/chunks/{FormDialog-ChxZzD05.js.map → FormDialog-CB-2YGWi.js.map} +1 -1
- package/build/server/chunks/{Logout-DC_uy9Jy.js → Logout-LKOt-AST.js} +2 -2
- package/build/server/chunks/{Logout-DC_uy9Jy.js.map → Logout-LKOt-AST.js.map} +1 -1
- package/build/server/chunks/_page.svelte-B1LK5J87.js +11 -0
- package/build/server/chunks/{_page.svelte-BJBxetxZ.js.map → _page.svelte-B1LK5J87.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-oj9dk99v.js → _page.svelte-CMtkwvbP.js} +3 -3
- package/build/server/chunks/{_page.svelte-oj9dk99v.js.map → _page.svelte-CMtkwvbP.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-EHty6_n4.js → _page.svelte-CbI2KxeA.js} +3 -3
- package/build/server/chunks/{_page.svelte-EHty6_n4.js.map → _page.svelte-CbI2KxeA.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Dv4KnGf2.js → _page.svelte-d01Hl2Ia.js} +8 -5
- package/build/server/chunks/_page.svelte-d01Hl2Ia.js.map +1 -0
- package/build/server/chunks/{hooks.server-Dv3r7VGT.js → hooks.server-Cm-MXWdk.js} +172 -154
- package/build/server/chunks/hooks.server-Cm-MXWdk.js.map +1 -0
- package/build/server/chunks/{index-C0x4afZE.js → index-CvHf_GW2.js} +2 -2
- package/build/server/chunks/{index-C0x4afZE.js.map → index-CvHf_GW2.js.map} +1 -1
- package/build/server/chunks/{string-DCbyDSv6.js → string-DLbvtT1R.js} +8 -1
- package/build/server/chunks/string-DLbvtT1R.js.map +1 -0
- package/build/server/index.js +2 -2
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +6 -6
- package/build/server/manifest.js.map +1 -1
- package/dist/api/metadata.js +3 -4
- package/dist/api/passkeys.js +1 -1
- package/dist/api/register.js +3 -3
- package/dist/api/users.js +5 -4
- package/dist/apps.d.ts +1 -4
- package/dist/apps.js +0 -5
- package/dist/auth.d.ts +1 -3
- package/dist/auth.js +1 -1
- package/dist/cli.js +1 -1
- package/dist/config.d.ts +8 -6
- package/dist/config.js +3 -0
- package/dist/plugins.d.ts +12 -0
- package/dist/plugins.js +8 -0
- package/dist/routes.js +2 -2
- package/dist/sveltekit.js +1 -1
- package/package.json +2 -2
- package/build/client/_app/immutable/chunks/BBSYhZYW.js +0 -51
- package/build/client/_app/immutable/chunks/BBSYhZYW.js.br +0 -0
- package/build/client/_app/immutable/chunks/BBSYhZYW.js.gz +0 -0
- package/build/client/_app/immutable/chunks/XQHPY6R6.js +0 -3
- package/build/client/_app/immutable/chunks/XQHPY6R6.js.br +0 -0
- package/build/client/_app/immutable/chunks/XQHPY6R6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/yn3BP4nH.js.br +0 -0
- package/build/client/_app/immutable/chunks/yn3BP4nH.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.TYOJB9mi.js.br +0 -0
- package/build/client/_app/immutable/entry/app.TYOJB9mi.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CQd8kYe6.js +0 -1
- package/build/client/_app/immutable/entry/start.CQd8kYe6.js.br +0 -2
- package/build/client/_app/immutable/entry/start.CQd8kYe6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.BEkAhyaK.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.BEkAhyaK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.Du8X4x3W.js +0 -7
- package/build/client/_app/immutable/nodes/3.Du8X4x3W.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.Du8X4x3W.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.nypsK3Xd.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.nypsK3Xd.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CutNgrff.js +0 -1
- package/build/client/_app/immutable/nodes/5.CutNgrff.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CutNgrff.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BmolHYUc.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BmolHYUc.js.gz +0 -0
- package/build/server/chunks/_page.svelte-BJBxetxZ.js +0 -11
- package/build/server/chunks/_page.svelte-Dv4KnGf2.js.map +0 -1
- package/build/server/chunks/hooks.server-Dv3r7VGT.js.map +0 -1
- package/build/server/chunks/string-DCbyDSv6.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_page.svelte-d01Hl2Ia.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/account/_page.svelte.js"],"sourcesContent":["import { u as push, z as spread_attributes, F as attr, w as pop, G as props_id, J as copy_payload, K as assign_payload, N as bind_props, O as css_props, P as ensure_array_like, Q as maybe_selected, y as escape_html, T as stringify, V as head, W as attr_style } from \"../../../chunks/index.js\";\nimport { p as preferenceDefaults, a as preferenceSchemas, b as preferenceLabels, g as getUserImage, d as deleteUser, u as updatePasskey, c as deletePasskey, l as logout, e as logoutAll, f as updateUser } from \"../../../chunks/user.js\";\nimport \"mime\";\nimport { F as FormDialog } from \"../../../chunks/FormDialog.js\";\nimport \"clsx\";\nimport { getByString, pick } from \"utilium\";\nimport { L as Logout } from \"../../../chunks/Logout.js\";\nfunction zIs(schema, type) {\n return schema.def.type == type;\n}\nconst $$css$4 = {\n hash: \"svelte-1l501sr\",\n code: \"svg.svelte-1l501sr {width:var(--size, 1em);height:var(--size, 1em);display:inline-block;fill:var(--fill, hsl(var(--hue) 0 var(--fg-light)));}\"\n};\nfunction Icon($$payload, $$props) {\n $$payload.css.add($$css$4);\n push();\n const { i, $$slots, $$events, ...rest } = $$props;\n const [style, id] = i.includes(\"/\") ? i.split(\"/\") : [\"solid\", i];\n const href = `/icons/${style}.svg#${id}`;\n $$payload.out.push(`<svg${spread_attributes(\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n width: \"1em\",\n height: \"1em\",\n ...rest\n },\n \"svelte-1l501sr\",\n void 0,\n void 0,\n 3\n )}><use${attr(\"href\", href)}></use></svg>`);\n pop();\n}\nconst $$css$3 = {\n hash: \"svelte-g409dh\",\n code: \"button.svelte-g409dh {position:relative;display:inline-block;width:1em;height:1em;border:none;background:transparent;}span.svelte-g409dh {position:absolute;inset:0;}\"\n};\nfunction ClipboardCopy($$payload, $$props) {\n $$payload.css.add($$css$3);\n push();\n $$payload.out.push(`<button class=\"svelte-g409dh\">`);\n {\n $$payload.out.push(\"<!--[!-->\");\n $$payload.out.push(`<span class=\"svelte-g409dh\">`);\n Icon($$payload, { i: \"copy\" });\n $$payload.out.push(`<!----></span>`);\n }\n $$payload.out.push(`<!--]--></button>`);\n pop();\n}\nconst $$css$2 = {\n hash: \"svelte-23hpnn\",\n code: \"input[type='checkbox'].svelte-23hpnn {display:none;}label.checkbox.svelte-23hpnn {cursor:pointer;width:1.5em;height:1.5em;border:1px solid var(--border-accent);border-radius:0.5em;display:inline-flex;justify-content:center;align-items:center;}\"\n};\nfunction Preference_1($$payload, $$props) {\n $$payload.css.add($$css$2);\n push();\n const id = props_id($$payload);\n let { preferences = void 0, userId, path, schema, optional = false } = $$props;\n let checked = schema.def.type == \"boolean\" && getByString(preferences, path);\n const initialValue = getByString(preferences, path) ?? getByString(preferenceDefaults, path);\n function dateAttr(date, format) {\n if (!date) return null;\n const pad = (n) => String(n).padStart(2, \"0\");\n const yyyy = date.getFullYear();\n const mm = pad(date.getMonth() + 1);\n const dd = pad(date.getDate());\n const dateStr = `${yyyy}-${mm}-${dd}`;\n const HH = pad(date.getHours());\n const MM = pad(date.getMinutes());\n const timeStr = `${HH}:${MM}`;\n switch (format) {\n case \"date\":\n return dateStr;\n case \"time\":\n return timeStr;\n case \"time+sec\":\n return `${timeStr}:${pad(date.getSeconds())}`;\n case \"datetime\":\n default:\n return `${dateStr}T${timeStr}`;\n }\n }\n function _in($$payload2, rest) {\n $$payload2.out.push(`<input${spread_attributes({ id, ...rest, value: initialValue, required: !optional }, \"svelte-23hpnn\")}/>`);\n }\n let $$settled = true;\n let $$inner_payload;\n function $$render_inner($$payload2) {\n if (zIs(schema, \"string\")) {\n $$payload2.out.push(\"<!--[-->\");\n _in($$payload2, {\n type: schema.format == \"email\" ? \"email\" : \"text\",\n ...pick(schema, \"minLength\", \"maxLength\")\n });\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"number\")) {\n $$payload2.out.push(\"<!--[-->\");\n _in($$payload2, {\n type: \"number\",\n min: schema.minValue,\n max: schema.maxValue,\n step: schema.format?.includes(\"int\") ? 1 : 0.1\n });\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"bigint\")) {\n $$payload2.out.push(\"<!--[-->\");\n _in($$payload2, {\n type: \"number\",\n min: Number(schema.minValue),\n max: Number(schema.maxValue),\n step: 1\n });\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"boolean\")) {\n $$payload2.out.push(\"<!--[-->\");\n $$payload2.out.push(`<input${attr(\"checked\", checked, true)}${attr(\"id\", id)} type=\"checkbox\"${attr(\"required\", !optional, true)} class=\"svelte-23hpnn\"/> <label${attr(\"for\", id)} class=\"checkbox svelte-23hpnn\">`);\n if (checked) {\n $$payload2.out.push(\"<!--[-->\");\n css_props($$payload2, true, { \"--size\": \"1.3em\" }, () => {\n Icon($$payload2, { i: \"check\" });\n });\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n }\n $$payload2.out.push(`<!--]--></label>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"date\")) {\n $$payload2.out.push(\"<!--[-->\");\n _in($$payload2, {\n type: \"date\",\n min: dateAttr(schema.minDate, \"date\"),\n max: dateAttr(schema.maxDate, \"date\")\n });\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"file\")) {\n $$payload2.out.push(\"<!--[-->\");\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"literal\")) {\n $$payload2.out.push(\"<!--[-->\");\n const each_array = ensure_array_like(schema.values);\n $$payload2.out.push(`<select${attr(\"id\", id)}${attr(\"required\", !optional, true)}><!--[-->`);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let value = each_array[$$index];\n $$payload2.out.push(`<option${attr(\"value\", value)}${maybe_selected($$payload2, value)}${attr(\"selected\", initialValue === value, true)}>${escape_html(value)}</option>`);\n }\n $$payload2.out.push(`<!--]--></select>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"template_literal\")) {\n $$payload2.out.push(\"<!--[-->\");\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"nullable\") || zIs(schema, \"optional\")) {\n $$payload2.out.push(\"<!--[-->\");\n Preference_1($$payload2, {\n userId,\n path,\n schema: schema.def.innerType,\n optional: true,\n get preferences() {\n return preferences;\n },\n set preferences($$value) {\n preferences = $$value;\n $$settled = false;\n }\n });\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"array\")) {\n $$payload2.out.push(\"<!--[-->\");\n const each_array_1 = ensure_array_like(initialValue);\n $$payload2.out.push(`<div class=\"pref-sub\"><!--[-->`);\n for (let i = 0, $$length = each_array_1.length; i < $$length; i++) {\n $$payload2.out.push(`<div class=\"pref-record-entry\">`);\n Preference_1($$payload2, {\n userId,\n path: `${stringify(path)}.${stringify(i)}`,\n schema: schema.element,\n get preferences() {\n return preferences;\n },\n set preferences($$value) {\n preferences = $$value;\n $$settled = false;\n }\n });\n $$payload2.out.push(`<!----></div>`);\n }\n $$payload2.out.push(`<!--]--></div>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"record\")) {\n $$payload2.out.push(\"<!--[-->\");\n const each_array_2 = ensure_array_like(Object.keys(initialValue));\n $$payload2.out.push(`<div class=\"pref-sub\"><!--[-->`);\n for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {\n let key = each_array_2[$$index_2];\n $$payload2.out.push(`<div class=\"pref-record-entry\"><label${attr(\"for\", id)}>${escape_html(key)}</label> `);\n Preference_1($$payload2, {\n userId,\n path: `${stringify(path)}.${stringify(key)}`,\n schema: schema.valueType,\n get preferences() {\n return preferences;\n },\n set preferences($$value) {\n preferences = $$value;\n $$settled = false;\n }\n });\n $$payload2.out.push(`<!----></div>`);\n }\n $$payload2.out.push(`<!--]--></div>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"object\")) {\n $$payload2.out.push(\"<!--[-->\");\n const each_array_3 = ensure_array_like(Object.entries(schema.shape));\n $$payload2.out.push(`<!--[-->`);\n for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {\n let [key, value] = each_array_3[$$index_3];\n $$payload2.out.push(`<div class=\"pref-sub\"><label${attr(\"for\", id)}>${escape_html(key)}</label> `);\n Preference_1($$payload2, {\n userId,\n path: `${stringify(path)}.${stringify(key)}`,\n schema: value,\n get preferences() {\n return preferences;\n },\n set preferences($$value) {\n preferences = $$value;\n $$settled = false;\n }\n });\n $$payload2.out.push(`<!----></div>`);\n }\n $$payload2.out.push(`<!--]-->`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"tuple\")) {\n $$payload2.out.push(\"<!--[-->\");\n const each_array_4 = ensure_array_like(schema.def.items);\n $$payload2.out.push(`<div class=\"pref-sub\"${attr(\"data-rest\", schema.def.rest)}><!--[-->`);\n for (let i = 0, $$length = each_array_4.length; i < $$length; i++) {\n let item = each_array_4[i];\n Preference_1($$payload2, {\n userId,\n path: `${stringify(path)}.${stringify(i)}`,\n schema: item,\n get preferences() {\n return preferences;\n },\n set preferences($$value) {\n preferences = $$value;\n $$settled = false;\n }\n });\n }\n $$payload2.out.push(`<!--]--></div>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (zIs(schema, \"enum\")) {\n $$payload2.out.push(\"<!--[-->\");\n const each_array_5 = ensure_array_like(Object.entries(schema.enum));\n $$payload2.out.push(`<select${attr(\"id\", id)}${attr(\"required\", !optional, true)}><!--[-->`);\n for (let $$index_5 = 0, $$length = each_array_5.length; $$index_5 < $$length; $$index_5++) {\n let [key, value] = each_array_5[$$index_5];\n $$payload2.out.push(`<option${attr(\"value\", value)}${maybe_selected($$payload2, value)}${attr(\"selected\", initialValue === value, true)}>${escape_html(key)}</option>`);\n }\n $$payload2.out.push(`<!--]--></select>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n $$payload2.out.push(`<i class=\"error-text\">Invalid preference type: ${escape_html(JSON.stringify(schema?.def?.type))}</i>`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n do {\n $$settled = true;\n $$inner_payload = copy_payload($$payload);\n $$render_inner($$inner_payload);\n } while (!$$settled);\n assign_payload($$payload, $$inner_payload);\n bind_props($$props, { preferences });\n pop();\n}\nconst $$css$1 = {\n hash: \"svelte-b9ddyh\",\n code: \".pref.svelte-b9ddyh {display:grid;grid-template-columns:1fr 1fr;gap:1em;}\"\n};\nfunction Preferences($$payload, $$props) {\n $$payload.css.add($$css$1);\n push();\n const id = props_id($$payload);\n let { preferences = void 0, userId } = $$props;\n let $$settled = true;\n let $$inner_payload;\n function $$render_inner($$payload2) {\n const each_array = ensure_array_like(Object.keys(preferenceSchemas));\n $$payload2.out.push(`<!--[-->`);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let path = each_array[$$index];\n $$payload2.out.push(`<div class=\"pref svelte-b9ddyh\"><label${attr(\"for\", id)}>${escape_html(preferenceLabels[path])}</label> `);\n Preference_1($$payload2, {\n userId,\n path,\n schema: preferenceSchemas[path],\n get preferences() {\n return preferences;\n },\n set preferences($$value) {\n preferences = $$value;\n $$settled = false;\n }\n });\n $$payload2.out.push(`<!----></div>`);\n }\n $$payload2.out.push(`<!--]-->`);\n }\n do {\n $$settled = true;\n $$inner_payload = copy_payload($$payload);\n $$render_inner($$inner_payload);\n } while (!$$settled);\n assign_payload($$payload, $$inner_payload);\n bind_props($$props, { preferences });\n pop();\n}\nconst $$css = {\n hash: \"svelte-c74k6c\",\n code: \"#pfp-container.svelte-c74k6c {width:100px;height:100px;margin-top:3em;.MenuToggle {float:right;position:relative;top:-24px;}}#pfp.svelte-c74k6c {width:100px;height:100px;border-radius:50%;border:1px solid #8888;}.greeting.svelte-c74k6c {font-size:2em;}.signout.svelte-c74k6c {margin-top:2em;}.section.svelte-c74k6c {width:50%;padding-top:4em;\\n\\n\t\t/* This is causing duplicate separators when removing sessions/passkeys\\n\t\t> div:has(+ div) {\\n\t\t\tborder-bottom: 1px solid #8888;\\n\t\t}\\n\t\t*/}.section.svelte-c74k6c .item:where(.svelte-c74k6c) {display:grid;align-items:center;width:100%;gap:1em;text-wrap:nowrap;border-top:1px solid #8888;padding-bottom:1em;}.info.svelte-c74k6c {grid-template-columns:10em 1fr 2em;> :where(.svelte-c74k6c):first-child {margin-left:1em;}> :where(.svelte-c74k6c):nth-child(2) {text-overflow:ellipsis;overflow:hidden;}}.passkey.svelte-c74k6c {grid-template-columns:1em 1em 1fr 1fr 1em 1em;dfn:where(.svelte-c74k6c):not(.disabled) {cursor:help;}}.session.svelte-c74k6c {grid-template-columns:1fr 1fr 1fr 1em;.current:where(.svelte-c74k6c) {border-radius:2em;padding:0 0.5em;background-color:#337;}.elevated:where(.svelte-c74k6c) {border-radius:2em;padding:0 0.5em;background-color:#733;}}\"\n};\nfunction _page($$payload, $$props) {\n $$payload.css.add($$css);\n push();\n const { data } = $$props;\n const { canVerify } = data;\n const dialogs = {};\n let currentSession = data.currentSession;\n let user = data.user;\n let passkeys = data.passkeys;\n let sessions = data.sessions;\n async function _editUser(data2) {\n const result = await updateUser(user.id, data2);\n user = result;\n }\n function action($$payload2, name, i = \"pen\") {\n $$payload2.out.push(`<button class=\"svelte-c74k6c\"${attr_style(\"\", { display: \"contents\" })}>`);\n css_props($$payload2, true, { \"--size\": \"16px\" }, () => {\n Icon($$payload2, { i });\n });\n $$payload2.out.push(`</button>`);\n }\n let $$settled = true;\n let $$inner_payload;\n function $$render_inner($$payload2) {\n const each_array = ensure_array_like(passkeys);\n const each_array_1 = ensure_array_like(sessions);\n head($$payload2, ($$payload3) => {\n $$payload3.title = `<title>Account</title>`;\n });\n $$payload2.out.push(`<div class=\"Account flex-content\"><div id=\"pfp-container\" class=\"svelte-c74k6c\"><img id=\"pfp\"${attr(\"src\", getUserImage(user))} alt=\"User profile\" width=\"100px\" height=\"100px\" class=\"svelte-c74k6c\"/></div> <p class=\"greeting svelte-c74k6c\">Welcome, ${escape_html(user.name)}</p> <div class=\"section main svelte-c74k6c\"><h3>Personal Information</h3> <div class=\"item info svelte-c74k6c\"><p class=\"subtle svelte-c74k6c\">Name</p> <p class=\"svelte-c74k6c\">${escape_html(user.name)}</p> `);\n action($$payload2);\n $$payload2.out.push(`<!----></div> `);\n FormDialog($$payload2, {\n submit: _editUser,\n submitText: \"Change\",\n get dialog() {\n return dialogs.edit_name;\n },\n set dialog($$value) {\n dialogs.edit_name = $$value;\n $$settled = false;\n },\n children: ($$payload3) => {\n $$payload3.out.push(`<div><label for=\"name\">What do you want to be called?</label> <input name=\"name\" type=\"text\"${attr(\"value\", user.name || \"\")} required/></div>`);\n },\n $$slots: { default: true }\n });\n $$payload2.out.push(`<!----> <div class=\"item info svelte-c74k6c\"><p class=\"subtle svelte-c74k6c\">Email</p> <p class=\"svelte-c74k6c\">${escape_html(user.email)} `);\n if (user.emailVerified) {\n $$payload2.out.push(\"<!--[-->\");\n $$payload2.out.push(`<dfn${attr(\"title\", `Email verified on ${stringify(user.emailVerified.toLocaleDateString())}`)}>`);\n Icon($$payload2, { i: \"regular/circle-check\" });\n $$payload2.out.push(`<!----></dfn>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n if (canVerify) {\n $$payload2.out.push(\"<!--[-->\");\n $$payload2.out.push(`<button>${escape_html(\"Verify\")}</button>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n }\n $$payload2.out.push(`<!--]-->`);\n }\n $$payload2.out.push(`<!--]--></p> `);\n action($$payload2);\n $$payload2.out.push(`<!----></div> `);\n FormDialog($$payload2, {\n submit: _editUser,\n submitText: \"Change\",\n get dialog() {\n return dialogs.edit_email;\n },\n set dialog($$value) {\n dialogs.edit_email = $$value;\n $$settled = false;\n },\n children: ($$payload3) => {\n $$payload3.out.push(`<div><label for=\"email\">Email Address</label> <input name=\"email\" type=\"email\"${attr(\"value\", user.email || \"\")} required/></div>`);\n },\n $$slots: { default: true }\n });\n $$payload2.out.push(`<!----> <div class=\"item info svelte-c74k6c\"><p class=\"subtle svelte-c74k6c\">User ID <dfn title=\"This is your UUID. It can't be changed.\">`);\n Icon($$payload2, { i: \"regular/circle-info\" });\n $$payload2.out.push(`<!----></dfn></p> <p class=\"svelte-c74k6c\">${escape_html(user.id)}</p> `);\n css_props($$payload2, true, { \"--size\": \"16px\" }, () => {\n ClipboardCopy($$payload2, { value: user.id });\n });\n $$payload2.out.push(`</div> <span><button class=\"signout svelte-c74k6c\">Sign Out</button> <button class=\"danger\"${attr_style(\"\", { cursor: \"pointer\" })}>Delete Account</button> `);\n Logout($$payload2, {\n get dialog() {\n return dialogs.logout;\n },\n set dialog($$value) {\n dialogs.logout = $$value;\n $$settled = false;\n }\n });\n $$payload2.out.push(`<!----> `);\n FormDialog($$payload2, {\n submit: () => deleteUser(user.id).then(() => window.location.href = \"/\"),\n submitText: \"Delete Account\",\n submitDanger: true,\n get dialog() {\n return dialogs.delete;\n },\n set dialog($$value) {\n dialogs.delete = $$value;\n $$settled = false;\n },\n children: ($$payload3) => {\n $$payload3.out.push(`<p>Are you sure you want to delete your account?<br/>This action can't be undone.</p>`);\n },\n $$slots: { default: true }\n });\n $$payload2.out.push(`<!----></span></div> <div class=\"section main svelte-c74k6c\"><h3>Passkeys</h3> <!--[-->`);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let passkey = each_array[$$index];\n $$payload2.out.push(`<div class=\"item passkey svelte-c74k6c\"><dfn${attr(\"title\", passkey.deviceType == \"multiDevice\" ? \"Multiple devices\" : \"Single device\")} class=\"svelte-c74k6c\">`);\n css_props($$payload2, true, { \"--size\": \"16px\" }, () => {\n Icon($$payload2, {\n i: passkey.deviceType == \"multiDevice\" ? \"laptop-mobile\" : \"mobile\"\n });\n });\n $$payload2.out.push(`</dfn> <dfn${attr(\"title\", `This passkey is ${stringify(passkey.backedUp ? \"\" : \"not \")}backed up`)} class=\"svelte-c74k6c\">`);\n css_props($$payload2, true, { \"--size\": \"16px\" }, () => {\n Icon($$payload2, { i: passkey.backedUp ? \"circle-check\" : \"circle-xmark\" });\n });\n $$payload2.out.push(`</dfn> `);\n if (passkey.name) {\n $$payload2.out.push(\"<!--[-->\");\n $$payload2.out.push(`<p>${escape_html(passkey.name)}</p>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n $$payload2.out.push(`<p class=\"subtle\"><i>Unnamed</i></p>`);\n }\n $$payload2.out.push(`<!--]--> <p>Created ${escape_html(passkey.createdAt.toLocaleString())}</p> `);\n action($$payload2, \"edit_passkey#\" + passkey.id);\n $$payload2.out.push(`<!----> `);\n if (passkeys.length > 1) {\n $$payload2.out.push(\"<!--[-->\");\n action($$payload2, \"delete_passkey#\" + passkey.id, \"trash\");\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n $$payload2.out.push(`<dfn title=\"You must have at least one passkey\" class=\"disabled svelte-c74k6c\">`);\n css_props($$payload2, true, { \"--fill\": \"#888\", \"--size\": \"16px\" }, () => {\n Icon($$payload2, { i: \"trash-slash\" });\n });\n $$payload2.out.push(`</dfn>`);\n }\n $$payload2.out.push(`<!--]--></div> `);\n FormDialog($$payload2, {\n submit: (data2) => {\n if (typeof data2.name != \"string\") throw \"Passkey name must be a string\";\n passkey.name = data2.name;\n return updatePasskey(passkey.id, data2);\n },\n submitText: \"Change\",\n get dialog() {\n return dialogs[\"edit_passkey#\" + passkey.id];\n },\n set dialog($$value) {\n dialogs[\"edit_passkey#\" + passkey.id] = $$value;\n $$settled = false;\n },\n children: ($$payload3) => {\n $$payload3.out.push(`<div><label for=\"name\">Passkey Name</label> <input name=\"name\" type=\"text\"${attr(\"value\", passkey.name || \"\")}/></div>`);\n },\n $$slots: { default: true }\n });\n $$payload2.out.push(`<!----> `);\n FormDialog($$payload2, {\n submit: () => deletePasskey(passkey.id).then(() => passkeys.splice(passkeys.indexOf(passkey), 1)),\n submitText: \"Delete\",\n submitDanger: true,\n get dialog() {\n return dialogs[\"delete_passkey#\" + passkey.id];\n },\n set dialog($$value) {\n dialogs[\"delete_passkey#\" + passkey.id] = $$value;\n $$settled = false;\n },\n children: ($$payload3) => {\n $$payload3.out.push(`<p>Are you sure you want to delete this passkey?<br/>This action can't be undone.</p>`);\n },\n $$slots: { default: true }\n });\n $$payload2.out.push(`<!---->`);\n }\n $$payload2.out.push(`<!--]--> <span><button class=\"icon-text\">`);\n Icon($$payload2, { i: \"plus\" });\n $$payload2.out.push(`<!----> Create</button></span></div> <div class=\"section main svelte-c74k6c\"><h3>Sessions</h3> <!--[-->`);\n for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n let session = each_array_1[$$index_1];\n $$payload2.out.push(`<div class=\"item session svelte-c74k6c\"><p>${escape_html(session.id.slice(0, 4))}...${escape_html(session.id.slice(-4))} `);\n if (session.id == currentSession.id) {\n $$payload2.out.push(\"<!--[-->\");\n $$payload2.out.push(`<span class=\"current svelte-c74k6c\">Current</span>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n }\n $$payload2.out.push(`<!--]--> `);\n if (session.elevated) {\n $$payload2.out.push(\"<!--[-->\");\n $$payload2.out.push(`<span class=\"elevated svelte-c74k6c\">Elevated</span>`);\n } else {\n $$payload2.out.push(\"<!--[!-->\");\n }\n $$payload2.out.push(`<!--]--></p> <p>Created ${escape_html(session.created.toLocaleString())}</p> <p>Expires ${escape_html(session.expires.toLocaleString())}</p> `);\n action($$payload2, \"logout#\" + session.id, \"right-from-bracket\");\n $$payload2.out.push(`<!----></div> `);\n FormDialog($$payload2, {\n submit: async () => {\n await logout(user.id, session.id);\n dialogs[\"logout#\" + session.id].remove();\n sessions.splice(sessions.indexOf(session), 1);\n if (session.id == currentSession.id) window.location.href = \"/\";\n },\n submitText: \"Logout\",\n get dialog() {\n return dialogs[\"logout#\" + session.id];\n },\n set dialog($$value) {\n dialogs[\"logout#\" + session.id] = $$value;\n $$settled = false;\n },\n children: ($$payload3) => {\n $$payload3.out.push(`<p>Are you sure you want to log out this session?</p>`);\n },\n $$slots: { default: true }\n });\n $$payload2.out.push(`<!---->`);\n }\n $$payload2.out.push(`<!--]--> <span><button class=\"danger\">Logout All</button></span> `);\n FormDialog($$payload2, {\n submit: () => logoutAll(user.id).then(() => window.location.href = \"/\"),\n submitText: \"Logout All Sessions\",\n submitDanger: true,\n get dialog() {\n return dialogs[\"logout_all\"];\n },\n set dialog($$value) {\n dialogs[\"logout_all\"] = $$value;\n $$settled = false;\n },\n children: ($$payload3) => {\n $$payload3.out.push(`<p>Are you sure you want to log out all sessions?</p>`);\n },\n $$slots: { default: true }\n });\n $$payload2.out.push(`<!----></div> <div class=\"section main svelte-c74k6c\"><h3>Preferences</h3> `);\n Preferences($$payload2, {\n userId: user.id,\n get preferences() {\n return user.preferences;\n },\n set preferences($$value) {\n user.preferences = $$value;\n $$settled = false;\n }\n });\n $$payload2.out.push(`<!----></div></div>`);\n }\n do {\n $$settled = true;\n $$inner_payload = copy_payload($$payload);\n $$render_inner($$inner_payload);\n } while (!$$settled);\n assign_payload($$payload, $$inner_payload);\n pop();\n}\nexport {\n _page as default\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,14 @@ import 'node:http';
|
|
|
4
4
|
import 'node:https';
|
|
5
5
|
import { Logger, levelText, allLogLevels } from 'logzen';
|
|
6
6
|
import { join, resolve, dirname } from 'node:path/posix';
|
|
7
|
-
import { c as capitalize, d as deepAssign, o as omit, p as pick } from './string-
|
|
7
|
+
import { c as capitalize, d as deepAssign, o as omit, p as pick } from './string-DLbvtT1R.js';
|
|
8
8
|
import 'node:child_process';
|
|
9
9
|
import { homedir } from 'node:os';
|
|
10
10
|
import { styleText } from 'node:util';
|
|
11
|
-
import { _ as _unknown, a as _tuple, b as _array, $ as $ZodUnknown, c as $ZodArray, d as $ZodTuple, p as parse, e as parseAsync,
|
|
12
|
-
import { serialize } from 'cookie';
|
|
11
|
+
import { _ as _unknown, a as _tuple, b as _array, $ as $ZodUnknown, c as $ZodArray, d as $ZodTuple, p as parse, e as parseAsync, o as object, s as string, l as literal, r as record, f as any, n as number, g as array, h as _enum, i as boolean, j as custom, k as date, u as url, m as email, q as uuid, t as looseObject, v as partialRecord, w as prettifyError, x as $ZodError, y as stringbool } from './index-CvHf_GW2.js';
|
|
13
12
|
import { randomBytes, randomUUID } from 'node:crypto';
|
|
14
13
|
import pg from 'pg';
|
|
14
|
+
import { serialize } from 'cookie';
|
|
15
15
|
import * as webauthn from '@simplewebauthn/server';
|
|
16
16
|
import { verifyRegistrationResponse, generateRegistrationOptions } from '@simplewebauthn/server';
|
|
17
17
|
import { render } from 'svelte/server';
|
|
@@ -233,9 +233,29 @@ function prettyDate(date) {
|
|
|
233
233
|
return `${date.getFullYear()} ${months[date.getMonth()]} ${_2(date.getDate())} ${_2(date.getHours())}:${_2(date.getMinutes())}:${_2(date.getSeconds())}.${date.getMilliseconds().toString().padStart(3, '0')}`;
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
236
|
+
var Permission;
|
|
237
|
+
(function (Permission) {
|
|
238
|
+
Permission[Permission["None"] = 0] = "None";
|
|
239
|
+
Permission[Permission["Read"] = 1] = "Read";
|
|
240
|
+
Permission[Permission["Comment"] = 2] = "Comment";
|
|
241
|
+
Permission[Permission["Edit"] = 3] = "Edit";
|
|
242
|
+
Permission[Permission["Manage"] = 5] = "Manage";
|
|
243
|
+
})(Permission || (Permission = {}));
|
|
244
|
+
({
|
|
245
|
+
[Permission.None]: 'No Permissions',
|
|
246
|
+
[Permission.Read]: 'Reader',
|
|
247
|
+
[Permission.Comment]: 'Commenter',
|
|
248
|
+
[Permission.Edit]: 'Editor',
|
|
249
|
+
[Permission.Manage]: 'Manager',
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
const App = object({
|
|
253
|
+
id: string(),
|
|
254
|
+
name: string().optional(),
|
|
255
|
+
image: string().optional(),
|
|
256
|
+
icon: string().optional(),
|
|
257
|
+
});
|
|
258
|
+
|
|
239
259
|
const transports = ['ble', 'cable', 'hybrid', 'internal', 'nfc', 'smart-card', 'usb'];
|
|
240
260
|
const authenticatorAttachment = literal(['platform', 'cross-platform']).optional();
|
|
241
261
|
const PasskeyRegistration = object({
|
|
@@ -269,24 +289,69 @@ const PasskeyAuthenticationResponse = object({
|
|
|
269
289
|
clientExtensionResults: record(any(), any()),
|
|
270
290
|
type: literal('public-key'),
|
|
271
291
|
});
|
|
272
|
-
const
|
|
292
|
+
const PasskeyChangeable = object({ name: string() }).partial();
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* @internal
|
|
296
|
+
*/
|
|
297
|
+
const preferenceSchemas = {
|
|
298
|
+
debug: boolean(),
|
|
299
|
+
};
|
|
300
|
+
/**
|
|
301
|
+
* @internal
|
|
302
|
+
*/
|
|
303
|
+
const preferenceDefaults = {
|
|
304
|
+
debug: false,
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
const requestMethods = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'HEAD', 'PATCH'];
|
|
308
|
+
|
|
309
|
+
function zAsyncFunction(schema) {
|
|
310
|
+
return custom((fn) => schema.implementAsync(fn));
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
const User = object({
|
|
314
|
+
id: uuid(),
|
|
315
|
+
name: string().min(1, 'Name is required').max(255, 'Name is too long'),
|
|
316
|
+
email: email(),
|
|
317
|
+
emailVerified: date().nullish(),
|
|
318
|
+
image: url().nullish(),
|
|
319
|
+
preferences: record(string(), any()),
|
|
320
|
+
roles: array(string()),
|
|
321
|
+
registeredAt: date(),
|
|
322
|
+
});
|
|
323
|
+
const userPublicFields = ['id', 'image', 'name', 'registeredAt', 'roles'];
|
|
324
|
+
const userProtectedFields = ['email', 'emailVerified', 'preferences'];
|
|
325
|
+
const UserChangeable = User.pick({
|
|
326
|
+
name: true,
|
|
327
|
+
email: true,
|
|
328
|
+
image: true,
|
|
329
|
+
preferences: true,
|
|
330
|
+
}).partial();
|
|
331
|
+
const UserRegistration = object({
|
|
273
332
|
name: string().min(1).max(100),
|
|
274
333
|
email: email(),
|
|
275
334
|
userId: uuid(),
|
|
276
335
|
response: PasskeyRegistration,
|
|
277
336
|
});
|
|
278
|
-
const PasskeyChangeable = object({ name: string() }).partial();
|
|
279
337
|
const UserAuthOptions = object({ type: literal(['login', 'action']) });
|
|
280
338
|
const LogoutSessions = object({
|
|
281
339
|
id: array(uuid()).optional(),
|
|
282
340
|
confirm_all: boolean().optional(),
|
|
283
341
|
});
|
|
284
342
|
|
|
343
|
+
const apps = _unique('apps', new Map());
|
|
344
|
+
const appDisabledContent = {
|
|
345
|
+
head: '<title>App Disabled</title>',
|
|
346
|
+
body: '<h1>App Disabled</h1><p>This app is currently disabled.</p>',
|
|
347
|
+
};
|
|
348
|
+
|
|
285
349
|
const PluginMetadata = looseObject({
|
|
286
350
|
name: string(),
|
|
287
351
|
version: string(),
|
|
288
352
|
description: string().optional(),
|
|
289
353
|
routes: string().optional(),
|
|
354
|
+
apps: array(App).optional(),
|
|
290
355
|
});
|
|
291
356
|
const hookNames = ['db_init', 'remove', 'db_wipe', 'clean'];
|
|
292
357
|
const fn = custom(data => typeof data === 'function');
|
|
@@ -306,6 +371,11 @@ async function loadPlugin(specifier) {
|
|
|
306
371
|
if (plugin.name.startsWith('#') || plugin.name.includes(' ')) {
|
|
307
372
|
throw 'Invalid plugin name. Plugin names can not start with a hash or contain spaces.';
|
|
308
373
|
}
|
|
374
|
+
for (const app of plugin.apps ?? []) {
|
|
375
|
+
if (apps.has(app.id))
|
|
376
|
+
throw new ReferenceError(`App with ID "${app.id}" already exists.`);
|
|
377
|
+
apps.set(app.id, app);
|
|
378
|
+
}
|
|
309
379
|
plugins.add(plugin);
|
|
310
380
|
output$1.debug(`Loaded plugin: ${plugin.name} ${plugin.version}`);
|
|
311
381
|
}
|
|
@@ -354,6 +424,8 @@ const ConfigSchema = looseObject({
|
|
|
354
424
|
})
|
|
355
425
|
.partial(),
|
|
356
426
|
debug: boolean(),
|
|
427
|
+
/** Whether to show a default home page for debugging */
|
|
428
|
+
debug_home: boolean(),
|
|
357
429
|
log: looseObject({
|
|
358
430
|
level: _enum(levelText),
|
|
359
431
|
console: boolean(),
|
|
@@ -423,6 +495,7 @@ const config = _unique('config', {
|
|
|
423
495
|
.default(false)
|
|
424
496
|
.parseAsync(process.env.AXIUM_DEBUG)
|
|
425
497
|
.catch(() => false),
|
|
498
|
+
debug_home: false,
|
|
426
499
|
log: {
|
|
427
500
|
console: true,
|
|
428
501
|
level: 'info',
|
|
@@ -535,31 +608,10 @@ function findConfigPaths() {
|
|
|
535
608
|
if (process.env.AXIUM_CONFIG)
|
|
536
609
|
await loadConfig(process.env.AXIUM_CONFIG);
|
|
537
610
|
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
var version = "0.22.14";
|
|
611
|
+
var version = "0.23.1";
|
|
541
612
|
var pkg = {
|
|
542
613
|
version: version};
|
|
543
614
|
|
|
544
|
-
const User = object({
|
|
545
|
-
id: uuid(),
|
|
546
|
-
name: string().min(1, 'Name is required').max(255, 'Name is too long'),
|
|
547
|
-
email: email(),
|
|
548
|
-
emailVerified: date().nullish(),
|
|
549
|
-
image: url().nullish(),
|
|
550
|
-
preferences: record(string(), any()),
|
|
551
|
-
roles: array(string()),
|
|
552
|
-
registeredAt: date(),
|
|
553
|
-
});
|
|
554
|
-
const userPublicFields = ['id', 'image', 'name', 'registeredAt', 'roles'];
|
|
555
|
-
const userProtectedFields = ['email', 'emailVerified', 'preferences'];
|
|
556
|
-
const UserChangeable = User.pick({
|
|
557
|
-
name: true,
|
|
558
|
-
email: true,
|
|
559
|
-
image: true,
|
|
560
|
-
preferences: true,
|
|
561
|
-
}).partial();
|
|
562
|
-
|
|
563
615
|
/// <reference types="./object-utils.d.ts" />
|
|
564
616
|
function isUndefined(obj) {
|
|
565
617
|
return typeof obj === 'undefined' || obj === undefined;
|
|
@@ -16504,90 +16556,6 @@ addEvent({
|
|
|
16504
16556
|
noAutoSuspend: true,
|
|
16505
16557
|
});
|
|
16506
16558
|
|
|
16507
|
-
async function getUser(id) {
|
|
16508
|
-
return await database.selectFrom('users').selectAll().where('id', '=', id).executeTakeFirstOrThrow();
|
|
16509
|
-
}
|
|
16510
|
-
const in30days = () => new Date(Date.now() + 2592000000);
|
|
16511
|
-
const in10minutes = () => new Date(Date.now() + 600000);
|
|
16512
|
-
async function createSession(userId, elevated = false) {
|
|
16513
|
-
const session = {
|
|
16514
|
-
id: randomUUID(),
|
|
16515
|
-
userId,
|
|
16516
|
-
token: randomBytes(64).toString('base64'),
|
|
16517
|
-
expires: elevated ? in10minutes() : in30days(),
|
|
16518
|
-
elevated,
|
|
16519
|
-
created: new Date(),
|
|
16520
|
-
};
|
|
16521
|
-
await database.insertInto('sessions').values(session).execute();
|
|
16522
|
-
await audit('new_session', userId, { id: session.id });
|
|
16523
|
-
return session;
|
|
16524
|
-
}
|
|
16525
|
-
async function getSessionAndUser(token) {
|
|
16526
|
-
const result = await database
|
|
16527
|
-
.selectFrom('sessions')
|
|
16528
|
-
.selectAll()
|
|
16529
|
-
.select(userFromId)
|
|
16530
|
-
.where('sessions.token', '=', token)
|
|
16531
|
-
.where('sessions.expires', '>', new Date())
|
|
16532
|
-
.executeTakeFirstOrThrow();
|
|
16533
|
-
if (!result.user)
|
|
16534
|
-
throw new Error('Session references non-existing user');
|
|
16535
|
-
return result;
|
|
16536
|
-
}
|
|
16537
|
-
async function getSessions(userId) {
|
|
16538
|
-
return await database.selectFrom('sessions').selectAll().where('userId', '=', userId).where('sessions.expires', '>', new Date()).execute();
|
|
16539
|
-
}
|
|
16540
|
-
/**
|
|
16541
|
-
* Create a verification
|
|
16542
|
-
* @param expires How long the token should be valid for in seconds
|
|
16543
|
-
*/
|
|
16544
|
-
async function createVerification(role, userId, expires) {
|
|
16545
|
-
const token = randomBytes(64).toString('base64url');
|
|
16546
|
-
const verification = { userId, token, expires: new Date(Date.now() + expires * 1000), role };
|
|
16547
|
-
await database.insertInto('verifications').values(verification).executeTakeFirstOrThrow();
|
|
16548
|
-
setTimeout(() => {
|
|
16549
|
-
void database.deleteFrom('verifications').where('verifications.token', '=', verification.token).execute();
|
|
16550
|
-
}, expires * 1000);
|
|
16551
|
-
return verification;
|
|
16552
|
-
}
|
|
16553
|
-
async function useVerification(role, userId, token) {
|
|
16554
|
-
const query = database
|
|
16555
|
-
.deleteFrom('verifications')
|
|
16556
|
-
.where('verifications.token', '=', token)
|
|
16557
|
-
.where('verifications.userId', '=', userId)
|
|
16558
|
-
.where('verifications.role', '=', role);
|
|
16559
|
-
return await query.returningAll().executeTakeFirst();
|
|
16560
|
-
}
|
|
16561
|
-
async function getPasskey(id) {
|
|
16562
|
-
return await database.selectFrom('passkeys').selectAll().where('id', '=', id).executeTakeFirstOrThrow();
|
|
16563
|
-
}
|
|
16564
|
-
async function createPasskey(passkey) {
|
|
16565
|
-
const result = await database.insertInto('passkeys').values(passkey).returningAll().executeTakeFirstOrThrow();
|
|
16566
|
-
return result;
|
|
16567
|
-
}
|
|
16568
|
-
async function getPasskeysByUserId(userId) {
|
|
16569
|
-
return await database.selectFrom('passkeys').selectAll().where('userId', '=', userId).execute();
|
|
16570
|
-
}
|
|
16571
|
-
async function checkAuthForUser(event, userId, sensitive = false) {
|
|
16572
|
-
const token = getToken(event, sensitive);
|
|
16573
|
-
if (!token)
|
|
16574
|
-
throw error(401, 'Missing token');
|
|
16575
|
-
const session = await getSessionAndUser(token).catch(withError('Invalid or expired session', 401));
|
|
16576
|
-
if (session.user.isSuspended)
|
|
16577
|
-
error(403, 'User is suspended');
|
|
16578
|
-
if (session.userId !== userId) {
|
|
16579
|
-
if (!session.user?.isAdmin)
|
|
16580
|
-
error(403, 'User ID mismatch');
|
|
16581
|
-
// Admins are allowed to manage other users.
|
|
16582
|
-
const accessor = session.user;
|
|
16583
|
-
session.user = await getUser(userId).catch(withError('Target user not found', 404));
|
|
16584
|
-
return Object.assign(session, { accessor });
|
|
16585
|
-
}
|
|
16586
|
-
if (!session.elevated && sensitive)
|
|
16587
|
-
error(403, 'This token can not be used for sensitive actions');
|
|
16588
|
-
return Object.assign(session, { accessor: session.user });
|
|
16589
|
-
}
|
|
16590
|
-
|
|
16591
16559
|
function isResponseError(e) {
|
|
16592
16560
|
return e instanceof Error && e.name === 'ResponseError' && typeof e.status === 'number';
|
|
16593
16561
|
}
|
|
@@ -16692,11 +16660,89 @@ const noCacheHeaders = {
|
|
|
16692
16660
|
Expires: '0',
|
|
16693
16661
|
};
|
|
16694
16662
|
|
|
16695
|
-
|
|
16696
|
-
|
|
16697
|
-
|
|
16698
|
-
|
|
16699
|
-
|
|
16663
|
+
async function getUser(id) {
|
|
16664
|
+
return await database.selectFrom('users').selectAll().where('id', '=', id).executeTakeFirstOrThrow();
|
|
16665
|
+
}
|
|
16666
|
+
const in30days = () => new Date(Date.now() + 2592000000);
|
|
16667
|
+
const in10minutes = () => new Date(Date.now() + 600000);
|
|
16668
|
+
async function createSession(userId, elevated = false) {
|
|
16669
|
+
const session = {
|
|
16670
|
+
id: randomUUID(),
|
|
16671
|
+
userId,
|
|
16672
|
+
token: randomBytes(64).toString('base64'),
|
|
16673
|
+
expires: elevated ? in10minutes() : in30days(),
|
|
16674
|
+
elevated,
|
|
16675
|
+
created: new Date(),
|
|
16676
|
+
};
|
|
16677
|
+
await database.insertInto('sessions').values(session).execute();
|
|
16678
|
+
await audit('new_session', userId, { id: session.id });
|
|
16679
|
+
return session;
|
|
16680
|
+
}
|
|
16681
|
+
async function getSessionAndUser(token) {
|
|
16682
|
+
const result = await database
|
|
16683
|
+
.selectFrom('sessions')
|
|
16684
|
+
.selectAll()
|
|
16685
|
+
.select(userFromId)
|
|
16686
|
+
.where('sessions.token', '=', token)
|
|
16687
|
+
.where('sessions.expires', '>', new Date())
|
|
16688
|
+
.executeTakeFirstOrThrow();
|
|
16689
|
+
if (!result.user)
|
|
16690
|
+
throw new Error('Session references non-existing user');
|
|
16691
|
+
return result;
|
|
16692
|
+
}
|
|
16693
|
+
async function getSessions(userId) {
|
|
16694
|
+
return await database.selectFrom('sessions').selectAll().where('userId', '=', userId).where('sessions.expires', '>', new Date()).execute();
|
|
16695
|
+
}
|
|
16696
|
+
/**
|
|
16697
|
+
* Create a verification
|
|
16698
|
+
* @param expires How long the token should be valid for in seconds
|
|
16699
|
+
*/
|
|
16700
|
+
async function createVerification(role, userId, expires) {
|
|
16701
|
+
const token = randomBytes(64).toString('base64url');
|
|
16702
|
+
const verification = { userId, token, expires: new Date(Date.now() + expires * 1000), role };
|
|
16703
|
+
await database.insertInto('verifications').values(verification).executeTakeFirstOrThrow();
|
|
16704
|
+
setTimeout(() => {
|
|
16705
|
+
void database.deleteFrom('verifications').where('verifications.token', '=', verification.token).execute();
|
|
16706
|
+
}, expires * 1000);
|
|
16707
|
+
return verification;
|
|
16708
|
+
}
|
|
16709
|
+
async function useVerification(role, userId, token) {
|
|
16710
|
+
const query = database
|
|
16711
|
+
.deleteFrom('verifications')
|
|
16712
|
+
.where('verifications.token', '=', token)
|
|
16713
|
+
.where('verifications.userId', '=', userId)
|
|
16714
|
+
.where('verifications.role', '=', role);
|
|
16715
|
+
return await query.returningAll().executeTakeFirst();
|
|
16716
|
+
}
|
|
16717
|
+
async function getPasskey(id) {
|
|
16718
|
+
return await database.selectFrom('passkeys').selectAll().where('id', '=', id).executeTakeFirstOrThrow();
|
|
16719
|
+
}
|
|
16720
|
+
async function createPasskey(passkey) {
|
|
16721
|
+
const result = await database.insertInto('passkeys').values(passkey).returningAll().executeTakeFirstOrThrow();
|
|
16722
|
+
return result;
|
|
16723
|
+
}
|
|
16724
|
+
async function getPasskeysByUserId(userId) {
|
|
16725
|
+
return await database.selectFrom('passkeys').selectAll().where('userId', '=', userId).execute();
|
|
16726
|
+
}
|
|
16727
|
+
async function checkAuthForUser(event, userId, sensitive = false) {
|
|
16728
|
+
const token = getToken(event, sensitive);
|
|
16729
|
+
if (!token)
|
|
16730
|
+
throw error(401, 'Missing token');
|
|
16731
|
+
const session = await getSessionAndUser(token).catch(withError('Invalid or expired session', 401));
|
|
16732
|
+
if (session.user.isSuspended)
|
|
16733
|
+
error(403, 'User is suspended');
|
|
16734
|
+
if (session.userId !== userId) {
|
|
16735
|
+
if (!session.user?.isAdmin)
|
|
16736
|
+
error(403, 'User ID mismatch');
|
|
16737
|
+
// Admins are allowed to manage other users.
|
|
16738
|
+
const accessor = session.user;
|
|
16739
|
+
session.user = await getUser(userId).catch(withError('Target user not found', 404));
|
|
16740
|
+
return Object.assign(session, { accessor });
|
|
16741
|
+
}
|
|
16742
|
+
if (!session.elevated && sensitive)
|
|
16743
|
+
error(403, 'This token can not be used for sensitive actions');
|
|
16744
|
+
return Object.assign(session, { accessor: session.user });
|
|
16745
|
+
}
|
|
16700
16746
|
|
|
16701
16747
|
/**
|
|
16702
16748
|
* @internal
|
|
@@ -16729,11 +16775,11 @@ function resolveRoute(event) {
|
|
|
16729
16775
|
_routes: for (const route of routes.values()) {
|
|
16730
16776
|
const params = {};
|
|
16731
16777
|
// Split the path and route into parts, zipped together
|
|
16732
|
-
const pathParts = pathname.split('/').filter(
|
|
16778
|
+
const pathParts = pathname.split('/').filter(v => v);
|
|
16733
16779
|
// Skips routes in disabled apps
|
|
16734
16780
|
if (apps.has(pathParts[0]) && config.apps.disabled.includes(pathParts[0]))
|
|
16735
16781
|
continue;
|
|
16736
|
-
for (const routePart of route.path.split('/').filter(
|
|
16782
|
+
for (const routePart of route.path.split('/').filter(v => v)) {
|
|
16737
16783
|
const pathPart = pathParts.shift();
|
|
16738
16784
|
if (!pathPart)
|
|
16739
16785
|
continue _routes;
|
|
@@ -16789,7 +16835,7 @@ addRoute({
|
|
|
16789
16835
|
for (const app of apps.values()) {
|
|
16790
16836
|
if (config.apps.disabled.includes(app.id))
|
|
16791
16837
|
continue;
|
|
16792
|
-
result.push(
|
|
16838
|
+
result.push(app);
|
|
16793
16839
|
}
|
|
16794
16840
|
return result;
|
|
16795
16841
|
},
|
|
@@ -16867,7 +16913,7 @@ async function OPTIONS(event) {
|
|
|
16867
16913
|
async function POST(event) {
|
|
16868
16914
|
if (!config.allow_new_users)
|
|
16869
16915
|
error(409, 'New user registration is disabled');
|
|
16870
|
-
const { userId, email, name, response } = await parseBody(event,
|
|
16916
|
+
const { userId, email, name, response } = await parseBody(event, UserRegistration);
|
|
16871
16917
|
const existing = await database.selectFrom('users').selectAll().where('email', '=', email.toLowerCase()).executeTakeFirst();
|
|
16872
16918
|
if (existing)
|
|
16873
16919
|
error(409, 'Email already in use');
|
|
@@ -16931,35 +16977,7 @@ addRoute({
|
|
|
16931
16977
|
},
|
|
16932
16978
|
});
|
|
16933
16979
|
|
|
16934
|
-
|
|
16935
|
-
(function (Permission) {
|
|
16936
|
-
Permission[Permission["None"] = 0] = "None";
|
|
16937
|
-
Permission[Permission["Read"] = 1] = "Read";
|
|
16938
|
-
Permission[Permission["Comment"] = 2] = "Comment";
|
|
16939
|
-
Permission[Permission["Edit"] = 3] = "Edit";
|
|
16940
|
-
Permission[Permission["Manage"] = 5] = "Manage";
|
|
16941
|
-
})(Permission || (Permission = {}));
|
|
16942
|
-
({
|
|
16943
|
-
[Permission.None]: 'No Permissions',
|
|
16944
|
-
[Permission.Read]: 'Reader',
|
|
16945
|
-
[Permission.Comment]: 'Commenter',
|
|
16946
|
-
[Permission.Edit]: 'Editor',
|
|
16947
|
-
[Permission.Manage]: 'Manager',
|
|
16948
|
-
});
|
|
16949
|
-
|
|
16950
|
-
/**
|
|
16951
|
-
* @internal
|
|
16952
|
-
*/
|
|
16953
|
-
const preferenceSchemas = {
|
|
16954
|
-
debug: boolean(),
|
|
16955
|
-
};
|
|
16956
|
-
/**
|
|
16957
|
-
* @internal
|
|
16958
|
-
*/
|
|
16959
|
-
const preferenceDefaults = {
|
|
16960
|
-
debug: false,
|
|
16961
|
-
};
|
|
16962
|
-
|
|
16980
|
+
/** Register a new passkey for a new or existing user. */
|
|
16963
16981
|
const challenges = new Map();
|
|
16964
16982
|
const params = { id: uuid() };
|
|
16965
16983
|
/**
|
|
@@ -17231,7 +17249,7 @@ function fillSvelteKitTemplate({ head, body }, env = {}, nonce = '') {
|
|
|
17231
17249
|
*/
|
|
17232
17250
|
async function handleSvelteKit({ event, resolve, }) {
|
|
17233
17251
|
const route = resolveRoute(event);
|
|
17234
|
-
if (!route && event.url.pathname === '/' && config.
|
|
17252
|
+
if (!route && event.url.pathname === '/' && config.debug_home)
|
|
17235
17253
|
return new Response(null, { status: 303, headers: { Location: '/_axium/default' } });
|
|
17236
17254
|
if (config.debug)
|
|
17237
17255
|
console.log(styleText('blueBright', event.request.method.padEnd(7)), route ? route.path : event.url.pathname);
|
|
@@ -17272,4 +17290,4 @@ async function handleSvelteKit({ event, resolve, }) {
|
|
|
17272
17290
|
await init();
|
|
17273
17291
|
|
|
17274
17292
|
export { handleSvelteKit as handle };
|
|
17275
|
-
//# sourceMappingURL=hooks.server-
|
|
17293
|
+
//# sourceMappingURL=hooks.server-Cm-MXWdk.js.map
|