@axium/server 0.22.13 → 0.23.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/build/client/_app/immutable/chunks/{XdRahthI.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/{Dext3JFj.js → Ci6FLQWx.js} +1 -1
- package/build/client/_app/immutable/chunks/Ci6FLQWx.js.br +0 -0
- package/build/client/_app/immutable/chunks/Ci6FLQWx.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.C5LuJT06.js → app.DajZ-3z_.js} +2 -2
- package/build/client/_app/immutable/entry/app.DajZ-3z_.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DajZ-3z_.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CjB-0vPC.js +1 -0
- package/build/client/_app/immutable/entry/start.CjB-0vPC.js.br +2 -0
- package/build/client/_app/immutable/entry/start.CjB-0vPC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.BAsobPu4.js → 1.Bvl_5X3J.js} +1 -1
- package/build/client/_app/immutable/nodes/1.Bvl_5X3J.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Bvl_5X3J.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.eINJOagY.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.BbgUOuKV.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-5bszWZCQ.js → 1-C1tGJX1L.js} +2 -2
- package/build/server/chunks/{1-5bszWZCQ.js.map → 1-C1tGJX1L.js.map} +1 -1
- package/build/server/chunks/{3-CGyRgNsB.js → 3-Ds69w-dU.js} +3 -3
- package/build/server/chunks/{3-CGyRgNsB.js.map → 3-Ds69w-dU.js.map} +1 -1
- package/build/server/chunks/{4-BuMxaapL.js → 4-BscEiwUk.js} +3 -3
- package/build/server/chunks/{4-BuMxaapL.js.map → 4-BscEiwUk.js.map} +1 -1
- package/build/server/chunks/{5-BhHQT7ic.js → 5-H0ePIJBE.js} +3 -3
- package/build/server/chunks/{5-BhHQT7ic.js.map → 5-H0ePIJBE.js.map} +1 -1
- package/build/server/chunks/{6-Do2XsDIk.js → 6-BrPpcagX.js} +3 -3
- package/build/server/chunks/{6-Do2XsDIk.js.map → 6-BrPpcagX.js.map} +1 -1
- package/build/server/chunks/{FormDialog-BemX_bll.js → FormDialog-CB-2YGWi.js} +29 -26
- package/build/server/chunks/{FormDialog-BemX_bll.js.map → FormDialog-CB-2YGWi.js.map} +1 -1
- package/build/server/chunks/{Logout-BhQS74v2.js → Logout-LKOt-AST.js} +2 -2
- package/build/server/chunks/{Logout-BhQS74v2.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-BdL0IPY2.js.map → _page.svelte-B1LK5J87.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Q_wBpED1.js → _page.svelte-CMtkwvbP.js} +3 -3
- package/build/server/chunks/{_page.svelte-Q_wBpED1.js.map → _page.svelte-CMtkwvbP.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Cw9An0SZ.js → _page.svelte-CbI2KxeA.js} +3 -3
- package/build/server/chunks/{_page.svelte-Cw9An0SZ.js.map → _page.svelte-CbI2KxeA.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-D6BUZio7.js → _page.svelte-dZWfu9yR.js} +7 -4
- package/build/server/chunks/_page.svelte-dZWfu9yR.js.map +1 -0
- package/build/server/chunks/{hooks.server-B7iBt6uC.js → hooks.server-BBmyHiWm.js} +169 -152
- package/build/server/chunks/hooks.server-BBmyHiWm.js.map +1 -0
- package/build/server/chunks/{index-wXTeP1jh.js → index-CvHf_GW2.js} +257 -275
- package/build/server/chunks/index-CvHf_GW2.js.map +1 -0
- package/build/server/index.js +3 -3
- 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/config.d.ts +6 -6
- package/dist/plugins.d.ts +12 -0
- package/dist/plugins.js +8 -0
- package/dist/requests.js +4 -2
- package/package.json +2 -2
- package/web/template.html +0 -3
- package/build/client/_app/immutable/chunks/CiUsfGrc.js +0 -43
- package/build/client/_app/immutable/chunks/CiUsfGrc.js.br +0 -0
- package/build/client/_app/immutable/chunks/CiUsfGrc.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dext3JFj.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dext3JFj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/XdRahthI.js.br +0 -0
- package/build/client/_app/immutable/chunks/XdRahthI.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.C5LuJT06.js.br +0 -0
- package/build/client/_app/immutable/entry/app.C5LuJT06.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BQJupvGE.js +0 -1
- package/build/client/_app/immutable/entry/start.BQJupvGE.js.br +0 -2
- package/build/client/_app/immutable/entry/start.BQJupvGE.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.BAsobPu4.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.BAsobPu4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.C18mc0nK.js +0 -7
- package/build/client/_app/immutable/nodes/3.C18mc0nK.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.C18mc0nK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.eINJOagY.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.eINJOagY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.DITFCLgK.js +0 -1
- package/build/client/_app/immutable/nodes/5.DITFCLgK.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.DITFCLgK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BbgUOuKV.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BbgUOuKV.js.gz +0 -0
- package/build/server/chunks/_page.svelte-BdL0IPY2.js +0 -11
- package/build/server/chunks/_page.svelte-D6BUZio7.js.map +0 -1
- package/build/server/chunks/hooks.server-B7iBt6uC.js.map +0 -1
- package/build/server/chunks/index-wXTeP1jh.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_page.svelte-dZWfu9yR.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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"}
|
|
@@ -8,10 +8,10 @@ import { c as capitalize, d as deepAssign, o as omit, p as pick } from './string
|
|
|
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
|
}
|
|
@@ -535,31 +605,10 @@ function findConfigPaths() {
|
|
|
535
605
|
if (process.env.AXIUM_CONFIG)
|
|
536
606
|
await loadConfig(process.env.AXIUM_CONFIG);
|
|
537
607
|
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
var version = "0.22.13";
|
|
608
|
+
var version = "0.23.0";
|
|
541
609
|
var pkg = {
|
|
542
610
|
version: version};
|
|
543
611
|
|
|
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
612
|
/// <reference types="./object-utils.d.ts" />
|
|
564
613
|
function isUndefined(obj) {
|
|
565
614
|
return typeof obj === 'undefined' || obj === undefined;
|
|
@@ -16504,90 +16553,6 @@ addEvent({
|
|
|
16504
16553
|
noAutoSuspend: true,
|
|
16505
16554
|
});
|
|
16506
16555
|
|
|
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
16556
|
function isResponseError(e) {
|
|
16592
16557
|
return e instanceof Error && e.name === 'ResponseError' && typeof e.status === 'number';
|
|
16593
16558
|
}
|
|
@@ -16671,8 +16636,10 @@ async function handleAPIRequest(event, route) {
|
|
|
16671
16636
|
const result = await route[method](event);
|
|
16672
16637
|
if (result instanceof Response)
|
|
16673
16638
|
return result;
|
|
16674
|
-
result
|
|
16675
|
-
|
|
16639
|
+
if (typeof result == 'object' || typeof result == 'function') {
|
|
16640
|
+
result._warnings ||= [];
|
|
16641
|
+
result._warnings.push(..._warnings);
|
|
16642
|
+
}
|
|
16676
16643
|
return json(result);
|
|
16677
16644
|
}
|
|
16678
16645
|
function handleResponseError(e) {
|
|
@@ -16690,11 +16657,89 @@ const noCacheHeaders = {
|
|
|
16690
16657
|
Expires: '0',
|
|
16691
16658
|
};
|
|
16692
16659
|
|
|
16693
|
-
|
|
16694
|
-
|
|
16695
|
-
|
|
16696
|
-
|
|
16697
|
-
|
|
16660
|
+
async function getUser(id) {
|
|
16661
|
+
return await database.selectFrom('users').selectAll().where('id', '=', id).executeTakeFirstOrThrow();
|
|
16662
|
+
}
|
|
16663
|
+
const in30days = () => new Date(Date.now() + 2592000000);
|
|
16664
|
+
const in10minutes = () => new Date(Date.now() + 600000);
|
|
16665
|
+
async function createSession(userId, elevated = false) {
|
|
16666
|
+
const session = {
|
|
16667
|
+
id: randomUUID(),
|
|
16668
|
+
userId,
|
|
16669
|
+
token: randomBytes(64).toString('base64'),
|
|
16670
|
+
expires: elevated ? in10minutes() : in30days(),
|
|
16671
|
+
elevated,
|
|
16672
|
+
created: new Date(),
|
|
16673
|
+
};
|
|
16674
|
+
await database.insertInto('sessions').values(session).execute();
|
|
16675
|
+
await audit('new_session', userId, { id: session.id });
|
|
16676
|
+
return session;
|
|
16677
|
+
}
|
|
16678
|
+
async function getSessionAndUser(token) {
|
|
16679
|
+
const result = await database
|
|
16680
|
+
.selectFrom('sessions')
|
|
16681
|
+
.selectAll()
|
|
16682
|
+
.select(userFromId)
|
|
16683
|
+
.where('sessions.token', '=', token)
|
|
16684
|
+
.where('sessions.expires', '>', new Date())
|
|
16685
|
+
.executeTakeFirstOrThrow();
|
|
16686
|
+
if (!result.user)
|
|
16687
|
+
throw new Error('Session references non-existing user');
|
|
16688
|
+
return result;
|
|
16689
|
+
}
|
|
16690
|
+
async function getSessions(userId) {
|
|
16691
|
+
return await database.selectFrom('sessions').selectAll().where('userId', '=', userId).where('sessions.expires', '>', new Date()).execute();
|
|
16692
|
+
}
|
|
16693
|
+
/**
|
|
16694
|
+
* Create a verification
|
|
16695
|
+
* @param expires How long the token should be valid for in seconds
|
|
16696
|
+
*/
|
|
16697
|
+
async function createVerification(role, userId, expires) {
|
|
16698
|
+
const token = randomBytes(64).toString('base64url');
|
|
16699
|
+
const verification = { userId, token, expires: new Date(Date.now() + expires * 1000), role };
|
|
16700
|
+
await database.insertInto('verifications').values(verification).executeTakeFirstOrThrow();
|
|
16701
|
+
setTimeout(() => {
|
|
16702
|
+
void database.deleteFrom('verifications').where('verifications.token', '=', verification.token).execute();
|
|
16703
|
+
}, expires * 1000);
|
|
16704
|
+
return verification;
|
|
16705
|
+
}
|
|
16706
|
+
async function useVerification(role, userId, token) {
|
|
16707
|
+
const query = database
|
|
16708
|
+
.deleteFrom('verifications')
|
|
16709
|
+
.where('verifications.token', '=', token)
|
|
16710
|
+
.where('verifications.userId', '=', userId)
|
|
16711
|
+
.where('verifications.role', '=', role);
|
|
16712
|
+
return await query.returningAll().executeTakeFirst();
|
|
16713
|
+
}
|
|
16714
|
+
async function getPasskey(id) {
|
|
16715
|
+
return await database.selectFrom('passkeys').selectAll().where('id', '=', id).executeTakeFirstOrThrow();
|
|
16716
|
+
}
|
|
16717
|
+
async function createPasskey(passkey) {
|
|
16718
|
+
const result = await database.insertInto('passkeys').values(passkey).returningAll().executeTakeFirstOrThrow();
|
|
16719
|
+
return result;
|
|
16720
|
+
}
|
|
16721
|
+
async function getPasskeysByUserId(userId) {
|
|
16722
|
+
return await database.selectFrom('passkeys').selectAll().where('userId', '=', userId).execute();
|
|
16723
|
+
}
|
|
16724
|
+
async function checkAuthForUser(event, userId, sensitive = false) {
|
|
16725
|
+
const token = getToken(event, sensitive);
|
|
16726
|
+
if (!token)
|
|
16727
|
+
throw error(401, 'Missing token');
|
|
16728
|
+
const session = await getSessionAndUser(token).catch(withError('Invalid or expired session', 401));
|
|
16729
|
+
if (session.user.isSuspended)
|
|
16730
|
+
error(403, 'User is suspended');
|
|
16731
|
+
if (session.userId !== userId) {
|
|
16732
|
+
if (!session.user?.isAdmin)
|
|
16733
|
+
error(403, 'User ID mismatch');
|
|
16734
|
+
// Admins are allowed to manage other users.
|
|
16735
|
+
const accessor = session.user;
|
|
16736
|
+
session.user = await getUser(userId).catch(withError('Target user not found', 404));
|
|
16737
|
+
return Object.assign(session, { accessor });
|
|
16738
|
+
}
|
|
16739
|
+
if (!session.elevated && sensitive)
|
|
16740
|
+
error(403, 'This token can not be used for sensitive actions');
|
|
16741
|
+
return Object.assign(session, { accessor: session.user });
|
|
16742
|
+
}
|
|
16698
16743
|
|
|
16699
16744
|
/**
|
|
16700
16745
|
* @internal
|
|
@@ -16787,7 +16832,7 @@ addRoute({
|
|
|
16787
16832
|
for (const app of apps.values()) {
|
|
16788
16833
|
if (config.apps.disabled.includes(app.id))
|
|
16789
16834
|
continue;
|
|
16790
|
-
result.push(
|
|
16835
|
+
result.push(app);
|
|
16791
16836
|
}
|
|
16792
16837
|
return result;
|
|
16793
16838
|
},
|
|
@@ -16865,7 +16910,7 @@ async function OPTIONS(event) {
|
|
|
16865
16910
|
async function POST(event) {
|
|
16866
16911
|
if (!config.allow_new_users)
|
|
16867
16912
|
error(409, 'New user registration is disabled');
|
|
16868
|
-
const { userId, email, name, response } = await parseBody(event,
|
|
16913
|
+
const { userId, email, name, response } = await parseBody(event, UserRegistration);
|
|
16869
16914
|
const existing = await database.selectFrom('users').selectAll().where('email', '=', email.toLowerCase()).executeTakeFirst();
|
|
16870
16915
|
if (existing)
|
|
16871
16916
|
error(409, 'Email already in use');
|
|
@@ -16929,35 +16974,7 @@ addRoute({
|
|
|
16929
16974
|
},
|
|
16930
16975
|
});
|
|
16931
16976
|
|
|
16932
|
-
|
|
16933
|
-
(function (Permission) {
|
|
16934
|
-
Permission[Permission["None"] = 0] = "None";
|
|
16935
|
-
Permission[Permission["Read"] = 1] = "Read";
|
|
16936
|
-
Permission[Permission["Comment"] = 2] = "Comment";
|
|
16937
|
-
Permission[Permission["Edit"] = 3] = "Edit";
|
|
16938
|
-
Permission[Permission["Manage"] = 5] = "Manage";
|
|
16939
|
-
})(Permission || (Permission = {}));
|
|
16940
|
-
({
|
|
16941
|
-
[Permission.None]: 'No Permissions',
|
|
16942
|
-
[Permission.Read]: 'Reader',
|
|
16943
|
-
[Permission.Comment]: 'Commenter',
|
|
16944
|
-
[Permission.Edit]: 'Editor',
|
|
16945
|
-
[Permission.Manage]: 'Manager',
|
|
16946
|
-
});
|
|
16947
|
-
|
|
16948
|
-
/**
|
|
16949
|
-
* @internal
|
|
16950
|
-
*/
|
|
16951
|
-
const preferenceSchemas = {
|
|
16952
|
-
debug: boolean(),
|
|
16953
|
-
};
|
|
16954
|
-
/**
|
|
16955
|
-
* @internal
|
|
16956
|
-
*/
|
|
16957
|
-
const preferenceDefaults = {
|
|
16958
|
-
debug: false,
|
|
16959
|
-
};
|
|
16960
|
-
|
|
16977
|
+
/** Register a new passkey for a new or existing user. */
|
|
16961
16978
|
const challenges = new Map();
|
|
16962
16979
|
const params = { id: uuid() };
|
|
16963
16980
|
/**
|
|
@@ -17270,4 +17287,4 @@ async function handleSvelteKit({ event, resolve, }) {
|
|
|
17270
17287
|
await init();
|
|
17271
17288
|
|
|
17272
17289
|
export { handleSvelteKit as handle };
|
|
17273
|
-
//# sourceMappingURL=hooks.server-
|
|
17290
|
+
//# sourceMappingURL=hooks.server-BBmyHiWm.js.map
|