@axium/server 0.22.14 → 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/{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/{XQHPY6R6.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.TYOJB9mi.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.BEkAhyaK.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.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-C1tGJX1L.js} +2 -2
- package/build/server/chunks/{1-BKZYjYH5.js.map → 1-C1tGJX1L.js.map} +1 -1
- package/build/server/chunks/{3-maTOJHa5.js → 3-Ds69w-dU.js} +3 -3
- package/build/server/chunks/{3-maTOJHa5.js.map → 3-Ds69w-dU.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-dZWfu9yR.js} +7 -4
- package/build/server/chunks/_page.svelte-dZWfu9yR.js.map +1 -0
- package/build/server/chunks/{hooks.server-Dv3r7VGT.js → hooks.server-BBmyHiWm.js} +165 -150
- package/build/server/chunks/hooks.server-BBmyHiWm.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/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/config.d.ts +6 -6
- package/dist/plugins.d.ts +12 -0
- package/dist/plugins.js +8 -0
- 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.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
|
@@ -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.14";
|
|
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
|
}
|
|
@@ -16692,11 +16657,89 @@ const noCacheHeaders = {
|
|
|
16692
16657
|
Expires: '0',
|
|
16693
16658
|
};
|
|
16694
16659
|
|
|
16695
|
-
|
|
16696
|
-
|
|
16697
|
-
|
|
16698
|
-
|
|
16699
|
-
|
|
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
|
+
}
|
|
16700
16743
|
|
|
16701
16744
|
/**
|
|
16702
16745
|
* @internal
|
|
@@ -16789,7 +16832,7 @@ addRoute({
|
|
|
16789
16832
|
for (const app of apps.values()) {
|
|
16790
16833
|
if (config.apps.disabled.includes(app.id))
|
|
16791
16834
|
continue;
|
|
16792
|
-
result.push(
|
|
16835
|
+
result.push(app);
|
|
16793
16836
|
}
|
|
16794
16837
|
return result;
|
|
16795
16838
|
},
|
|
@@ -16867,7 +16910,7 @@ async function OPTIONS(event) {
|
|
|
16867
16910
|
async function POST(event) {
|
|
16868
16911
|
if (!config.allow_new_users)
|
|
16869
16912
|
error(409, 'New user registration is disabled');
|
|
16870
|
-
const { userId, email, name, response } = await parseBody(event,
|
|
16913
|
+
const { userId, email, name, response } = await parseBody(event, UserRegistration);
|
|
16871
16914
|
const existing = await database.selectFrom('users').selectAll().where('email', '=', email.toLowerCase()).executeTakeFirst();
|
|
16872
16915
|
if (existing)
|
|
16873
16916
|
error(409, 'Email already in use');
|
|
@@ -16931,35 +16974,7 @@ addRoute({
|
|
|
16931
16974
|
},
|
|
16932
16975
|
});
|
|
16933
16976
|
|
|
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
|
-
|
|
16977
|
+
/** Register a new passkey for a new or existing user. */
|
|
16963
16978
|
const challenges = new Map();
|
|
16964
16979
|
const params = { id: uuid() };
|
|
16965
16980
|
/**
|
|
@@ -17272,4 +17287,4 @@ async function handleSvelteKit({ event, resolve, }) {
|
|
|
17272
17287
|
await init();
|
|
17273
17288
|
|
|
17274
17289
|
export { handleSvelteKit as handle };
|
|
17275
|
-
//# sourceMappingURL=hooks.server-
|
|
17290
|
+
//# sourceMappingURL=hooks.server-BBmyHiWm.js.map
|