@axium/server 0.18.6 → 0.19.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/BYEtX5Az.js +1 -0
- package/build/client/_app/immutable/chunks/BYEtX5Az.js.br +0 -0
- package/build/client/_app/immutable/chunks/BYEtX5Az.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cyzk4yeH.js +3 -0
- package/build/client/_app/immutable/chunks/Cyzk4yeH.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cyzk4yeH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{B3bf7yrh.js → DCUM25og.js} +1 -1
- package/build/client/_app/immutable/chunks/DCUM25og.js.br +0 -0
- package/build/client/_app/immutable/chunks/{B3bf7yrh.js.gz → DCUM25og.js.gz} +0 -0
- package/build/client/_app/immutable/chunks/DY1x3fBx.js +1 -0
- package/build/client/_app/immutable/chunks/DY1x3fBx.js.br +0 -0
- package/build/client/_app/immutable/chunks/DY1x3fBx.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{B4IjTTLF.js → DYZBB-Ix.js} +8 -8
- package/build/client/_app/immutable/chunks/DYZBB-Ix.js.br +0 -0
- package/build/client/_app/immutable/chunks/DYZBB-Ix.js.gz +0 -0
- package/build/client/_app/immutable/chunks/FWeOBoAM.js +1 -0
- package/build/client/_app/immutable/chunks/FWeOBoAM.js.br +0 -0
- package/build/client/_app/immutable/chunks/FWeOBoAM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/IgiyYk6u.js +1 -0
- package/build/client/_app/immutable/chunks/IgiyYk6u.js.br +0 -0
- package/build/client/_app/immutable/chunks/IgiyYk6u.js.gz +0 -0
- package/build/client/_app/immutable/chunks/p-F-zYzk.js +1 -0
- package/build/client/_app/immutable/chunks/p-F-zYzk.js.br +0 -0
- package/build/client/_app/immutable/chunks/p-F-zYzk.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.BOAQU4lu.js +2 -0
- package/build/client/_app/immutable/entry/app.BOAQU4lu.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BOAQU4lu.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BcxVnXqP.js +1 -0
- package/build/client/_app/immutable/entry/start.BcxVnXqP.js.br +2 -0
- package/build/client/_app/immutable/entry/start.BcxVnXqP.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.BbGefPez.js → 0.fU2Fkia3.js} +1 -1
- package/build/client/_app/immutable/nodes/0.fU2Fkia3.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.fU2Fkia3.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.ebxToP8U.js +1 -0
- package/build/client/_app/immutable/nodes/1.ebxToP8U.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.ebxToP8U.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2._Jmh03he.js → 2.Cczp5_pl.js} +1 -1
- package/build/client/_app/immutable/nodes/2.Cczp5_pl.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.Cczp5_pl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.BwwptDiR.js +1 -0
- package/build/client/_app/immutable/nodes/3.BwwptDiR.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BwwptDiR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.DFZa97F0.js +1 -0
- package/build/client/_app/immutable/nodes/4.DFZa97F0.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.DFZa97F0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CObFvODa.js +1 -0
- package/build/client/_app/immutable/nodes/5.CObFvODa.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CObFvODa.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.ezb4muQm.js +1 -0
- package/build/client/_app/immutable/nodes/6.ezb4muQm.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.ezb4muQm.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/{0-CUfr8UwD.js → 0-BwO1RCtn.js} +2 -2
- package/build/server/chunks/{0-CUfr8UwD.js.map → 0-BwO1RCtn.js.map} +1 -1
- package/build/server/chunks/1-BtBlW1Zd.js +9 -0
- package/build/server/chunks/{1-DffE3_iJ.js.map → 1-BtBlW1Zd.js.map} +1 -1
- package/build/server/chunks/{2-c1bljkMr.js → 2-BwMXZ3uH.js} +2 -2
- package/build/server/chunks/{2-c1bljkMr.js.map → 2-BwMXZ3uH.js.map} +1 -1
- package/build/server/chunks/3-DZ3qU23G.js +9 -0
- package/build/server/chunks/3-DZ3qU23G.js.map +1 -0
- package/build/server/chunks/4-CiYhCg7w.js +9 -0
- package/build/server/chunks/4-CiYhCg7w.js.map +1 -0
- package/build/server/chunks/5-DeLLDZUB.js +9 -0
- package/build/server/chunks/5-DeLLDZUB.js.map +1 -0
- package/build/server/chunks/6-WSYEiBK_.js +9 -0
- package/build/server/chunks/6-WSYEiBK_.js.map +1 -0
- package/build/server/chunks/{Logout-CkwmxNTt.js → Logout-CXx10rDN.js} +4 -5
- package/build/server/chunks/Logout-CXx10rDN.js.map +1 -0
- package/build/server/chunks/_page.svelte-BBp1dML7.js +11 -0
- package/build/server/chunks/{_page.svelte-DPdvFuWg.js.map → _page.svelte-BBp1dML7.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-CVJoQAAB.js → _page.svelte-C_AR-luT.js} +4 -5
- package/build/server/chunks/_page.svelte-C_AR-luT.js.map +1 -0
- package/build/server/chunks/{_page.svelte-whmO3TtB.js → _page.svelte-CrDbYLUc.js} +10 -365
- package/build/server/chunks/_page.svelte-CrDbYLUc.js.map +1 -0
- package/build/server/chunks/{_page.svelte-D3kXcWlK.js → _page.svelte-Ds-0vPQG.js} +4 -5
- package/build/server/chunks/_page.svelte-Ds-0vPQG.js.map +1 -0
- package/build/server/chunks/error.svelte-DkJRpKga.js +46 -0
- package/build/server/chunks/error.svelte-DkJRpKga.js.map +1 -0
- package/build/server/chunks/exports-Cc9yggiy.js +226 -0
- package/build/server/chunks/exports-Cc9yggiy.js.map +1 -0
- package/build/server/chunks/hooks.server-PyYsuy1-.js +1324 -0
- package/build/server/chunks/hooks.server-PyYsuy1-.js.map +1 -0
- package/build/server/chunks/{exports-DeY8o0ws.js → index-CBVFb-Fk.js} +2 -223
- package/build/server/chunks/index-CBVFb-Fk.js.map +1 -0
- package/build/server/chunks/{user-DW-tjDe0.js → schemas-C2VqNPFY.js} +129 -2079
- package/build/server/chunks/schemas-C2VqNPFY.js.map +1 -0
- package/build/server/chunks/string-CafUlmcI.js +355 -0
- package/build/server/chunks/string-CafUlmcI.js.map +1 -0
- package/build/server/chunks/user-B61vTdij.js +2078 -0
- package/build/server/chunks/user-B61vTdij.js.map +1 -0
- package/build/server/index.js +4 -3
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +8 -8
- package/build/server/manifest.js.map +1 -1
- package/dist/api/acl.js +2 -2
- package/dist/api/metadata.js +3 -4
- package/dist/api/passkeys.js +1 -2
- package/dist/api/register.js +9 -10
- package/dist/api/session.js +1 -2
- package/dist/api/users.js +11 -12
- package/dist/auth.d.ts +1 -1
- package/dist/auth.js +1 -2
- package/dist/cli.js +2 -2
- package/dist/config.d.ts +74 -70
- package/dist/config.js +62 -57
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/requests.d.ts +36 -2
- package/dist/requests.js +65 -7
- package/dist/routes.d.ts +1 -1
- package/dist/serve.d.ts +6 -1
- package/dist/serve.js +19 -1
- package/dist/sveltekit.d.ts +3 -3
- package/dist/sveltekit.js +11 -46
- package/package.json +1 -2
- package/routes/account/+page.svelte +4 -5
- package/svelte.config.js +1 -2
- package/web/hooks.server.ts +3 -17
- package/web/lib/FormDialog.svelte +4 -5
- package/web/lib/Logout.svelte +6 -2
- package/web/tsconfig.json +1 -1
- package/build/client/_app/immutable/chunks/B3bf7yrh.js.br +0 -0
- package/build/client/_app/immutable/chunks/B4IjTTLF.js.br +0 -0
- package/build/client/_app/immutable/chunks/B4IjTTLF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BeFE4kE2.js +0 -3
- package/build/client/_app/immutable/chunks/BeFE4kE2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BeFE4kE2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CtT1TXOG.js +0 -1
- package/build/client/_app/immutable/chunks/CtT1TXOG.js.br +0 -0
- package/build/client/_app/immutable/chunks/CtT1TXOG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D5lcOOwR.js +0 -1
- package/build/client/_app/immutable/chunks/D5lcOOwR.js.br +0 -0
- package/build/client/_app/immutable/chunks/D5lcOOwR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DCs3KlJy.js +0 -1
- package/build/client/_app/immutable/chunks/DCs3KlJy.js.br +0 -0
- package/build/client/_app/immutable/chunks/DCs3KlJy.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ct9jA5hl.js +0 -1
- package/build/client/_app/immutable/chunks/ct9jA5hl.js.br +0 -0
- package/build/client/_app/immutable/chunks/ct9jA5hl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/rXU5YtEm.js +0 -1
- package/build/client/_app/immutable/chunks/rXU5YtEm.js.br +0 -0
- package/build/client/_app/immutable/chunks/rXU5YtEm.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.VDao1I0a.js +0 -2
- package/build/client/_app/immutable/entry/app.VDao1I0a.js.br +0 -0
- package/build/client/_app/immutable/entry/app.VDao1I0a.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CqVn4hZK.js +0 -1
- package/build/client/_app/immutable/entry/start.CqVn4hZK.js.br +0 -0
- package/build/client/_app/immutable/entry/start.CqVn4hZK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.BbGefPez.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BbGefPez.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.C3jvF6zj.js +0 -1
- package/build/client/_app/immutable/nodes/1.C3jvF6zj.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C3jvF6zj.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2._Jmh03he.js.br +0 -0
- package/build/client/_app/immutable/nodes/2._Jmh03he.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.C1G23fTe.js +0 -1
- package/build/client/_app/immutable/nodes/3.C1G23fTe.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.C1G23fTe.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.TQjMBeyV.js +0 -1
- package/build/client/_app/immutable/nodes/4.TQjMBeyV.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.TQjMBeyV.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.SHyxFZfo.js +0 -1
- package/build/client/_app/immutable/nodes/5.SHyxFZfo.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.SHyxFZfo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.ikul5Bcl.js +0 -1
- package/build/client/_app/immutable/nodes/6.ikul5Bcl.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.ikul5Bcl.js.gz +0 -0
- package/build/server/chunks/1-DffE3_iJ.js +0 -9
- package/build/server/chunks/3-D6wMMS06.js +0 -9
- package/build/server/chunks/3-D6wMMS06.js.map +0 -1
- package/build/server/chunks/4-BIBXJVxM.js +0 -9
- package/build/server/chunks/4-BIBXJVxM.js.map +0 -1
- package/build/server/chunks/5-DnTszr4V.js +0 -9
- package/build/server/chunks/5-DnTszr4V.js.map +0 -1
- package/build/server/chunks/6-Ls1UJLAz.js +0 -9
- package/build/server/chunks/6-Ls1UJLAz.js.map +0 -1
- package/build/server/chunks/Logout-CkwmxNTt.js.map +0 -1
- package/build/server/chunks/_page.svelte-CVJoQAAB.js.map +0 -1
- package/build/server/chunks/_page.svelte-D3kXcWlK.js.map +0 -1
- package/build/server/chunks/_page.svelte-DPdvFuWg.js +0 -12
- package/build/server/chunks/_page.svelte-whmO3TtB.js.map +0 -1
- package/build/server/chunks/client-C5BesWYV.js +0 -33
- package/build/server/chunks/client-C5BesWYV.js.map +0 -1
- package/build/server/chunks/error.svelte-Crm_85Km.js +0 -24
- package/build/server/chunks/error.svelte-Crm_85Km.js.map +0 -1
- package/build/server/chunks/exports-DeY8o0ws.js.map +0 -1
- package/build/server/chunks/hooks.server-DmgUjoZV.js +0 -17
- package/build/server/chunks/hooks.server-DmgUjoZV.js.map +0 -1
- package/build/server/chunks/user-DW-tjDe0.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.server-PyYsuy1-.js","sources":["../../../../node_modules/utilium/dist/objects.js","../../../../node_modules/zod/v4/core/function.js","../../../dist/state.js","../../../dist/io.js","../../../../core/dist/schemas.js","../../../dist/plugins.js","../../../dist/config.js","../../../../core/dist/requests.js","../../../../core/dist/user.js","../../../dist/database.js","../../../dist/auth.js","../../../dist/requests.js","../../../dist/apps.js","../../../dist/routes.js","../../../dist/api/metadata.js","../../../dist/api/passkeys.js","../../../dist/api/register.js","../../../dist/api/session.js","../../../dist/api/users.js","../../../dist/serve.js","../../../dist/sveltekit.js","../../../.svelte-kit/adapter-node/chunks/hooks.server.js"],"sourcesContent":["export function filterObject(object, predicate) {\n const entries = Object.entries(object);\n return Object.fromEntries(entries.filter(([key, value]) => predicate(key, value)));\n}\nexport function pick(object, ...keys) {\n const picked = {};\n for (const key of keys.flat()) {\n picked[key] = object[key];\n }\n return picked;\n}\nexport function omit(object, ...keys) {\n return filterObject(object, key => !keys.flat().includes(key));\n}\nexport function assignWithDefaults(to, from, defaults = to) {\n const keys = new Set([...Object.keys(to), ...Object.keys(from)]);\n for (const key of keys) {\n try {\n to[key] = from[key] ?? defaults[key] ?? to[key];\n }\n catch {\n // Do nothing\n }\n }\n}\n/**\n * Returns whether `value` is not a primitive.\n *\n * This function is only useful for the type check,\n * you can do `Object(v) === v` otherwise.\n */\nexport function isObject(value) {\n return Object(value) === value;\n}\nexport function deepAssign(to, from) {\n const keys = new Set([\n ...Object.keys(to),\n ...Object.keys(from),\n ]);\n for (const key of keys) {\n if (!(key in from))\n continue;\n const value = from[key];\n if (!(key in to)) {\n to[key] = value;\n continue;\n }\n if (!isObject(to[key]) && Object(value) !== value) {\n to[key] = value;\n continue;\n }\n if (isObject(to[key]) && Object(value) === value) {\n deepAssign(to[key], value);\n continue;\n }\n throw new TypeError(!isObject(to[key])\n ? 'Can not deeply assign an object to a primitive'\n : 'Can not deeply assign a primitive to an object');\n }\n return to;\n}\nexport function isJSON(str) {\n try {\n JSON.parse(str);\n return true;\n }\n catch {\n return false;\n }\n}\nexport function resolveConstructors(object) {\n const constructors = [];\n for (let prototype = object; prototype && !['Function', 'Object'].includes(prototype.constructor.name); prototype = Object.getPrototypeOf(prototype)) {\n constructors.push(prototype.constructor.name);\n }\n return constructors;\n}\nexport function* getAllPrototypes(object) {\n for (let prototype = object; prototype; prototype = Object.getPrototypeOf(prototype)) {\n yield prototype;\n }\n}\nexport function map(items) {\n return new Map(Object.entries(items));\n}\nexport function getByString(object, path, separator = /[.[\\]'\"]/) {\n return path\n .split(separator)\n .filter(p => p)\n .reduce((o, p) => o?.[p], object);\n}\nexport function setByString(object, path, value, separator = /[.[\\]'\"]/) {\n return path\n .split(separator)\n .filter(p => p)\n .reduce((o, p, i) => (o[p] = path.split(separator).filter(p => p).length === ++i ? value : o[p] || {}), object);\n}\n/**\n * Binds a this value for all of the functions in an object (not recursive)\n */\nexport function bindFunctions(fns, thisValue) {\n return Object.fromEntries(Object.entries(fns).map(([k, v]) => [k, typeof v == 'function' ? v.bind(thisValue) : v]));\n}\n","import { _array, _tuple, _unknown } from \"./api.js\";\nimport { parse, parseAsync } from \"./parse.js\";\nimport * as schemas from \"./schemas.js\";\nimport { $ZodTuple } from \"./schemas.js\";\nexport class $ZodFunction {\n constructor(def) {\n this._def = def;\n this.def = def;\n }\n implement(func) {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n const impl = ((...args) => {\n const parsedArgs = this._def.input ? parse(this._def.input, args, undefined, { callee: impl }) : args;\n if (!Array.isArray(parsedArgs)) {\n throw new Error(\"Invalid arguments schema: not an array or tuple schema.\");\n }\n const output = func(...parsedArgs);\n return this._def.output ? parse(this._def.output, output, undefined, { callee: impl }) : output;\n });\n return impl;\n }\n implementAsync(func) {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n const impl = (async (...args) => {\n const parsedArgs = this._def.input ? await parseAsync(this._def.input, args, undefined, { callee: impl }) : args;\n if (!Array.isArray(parsedArgs)) {\n throw new Error(\"Invalid arguments schema: not an array or tuple schema.\");\n }\n const output = await func(...parsedArgs);\n return this._def.output ? parseAsync(this._def.output, output, undefined, { callee: impl }) : output;\n });\n return impl;\n }\n input(...args) {\n const F = this.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: this._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: this._def.output,\n });\n }\n output(output) {\n const F = this.constructor;\n return new F({\n type: \"function\",\n input: this._def.input,\n output,\n });\n }\n}\nfunction _function(params) {\n return new $ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input)\n ? _tuple(schemas.$ZodTuple, params?.input)\n : (params?.input ?? _array(schemas.$ZodArray, _unknown(schemas.$ZodUnknown))),\n output: params?.output ?? _unknown(schemas.$ZodUnknown),\n });\n}\nexport { _function as function };\n","import { styleText } from 'node:util';\nconst sym = Symbol.for('Axium:state');\nglobalThis[sym] ||= Object.create({ _errored: false });\nlet _doWarnings = false;\nexport function _duplicateStateWarnings(value) {\n _doWarnings = value;\n}\n/**\n * Prevent duplicate shared state.\n */\nexport function _unique(id, value) {\n const state = globalThis[sym];\n const _err = new Error();\n Error.captureStackTrace(_err, _unique);\n const stack = _err.stack.slice(6);\n if (!(id in state)) {\n state[id] = { value, stack };\n return value;\n }\n if (!state._errored) {\n console.error(styleText('red', 'Duplicate Axium server state! You might have multiple instances of the same module loaded.'));\n state._errored = true;\n }\n _doWarnings && console.warn(styleText('yellow', `Mitigating duplicate state! (${id})\\n${stack}\\nFrom original\\n${state[id].stack}`));\n return state[id].value;\n}\n","import { Logger } from 'logzen';\nimport { exec } from 'node:child_process';\nimport * as fs from 'node:fs';\nimport { homedir } from 'node:os';\nimport { dirname, join, resolve } from 'node:path/posix';\nimport { styleText } from 'node:util';\nimport { _unique } from './state.js';\nexport const systemDir = '/etc/axium';\nexport const userDir = join(homedir(), '.axium');\nexport const dirs = _unique('dirs', [systemDir, userDir]);\nfor (let dir = resolve(process.cwd()); dir !== '/'; dir = dirname(dir)) {\n if (fs.existsSync(join(dir, '.axium')))\n dirs.push(join(dir, '.axium'));\n}\nif (process.env.AXIUM_DIR)\n dirs.push(process.env.AXIUM_DIR);\ntry {\n fs.mkdirSync(systemDir, { recursive: true });\n}\ncatch {\n // Missing permissions\n}\nfs.mkdirSync(userDir, { recursive: true });\nexport const logger = new Logger({\n hideWarningStack: true,\n noGlobalConsole: true,\n});\n/**\n * @internal\n */\nexport const output = {\n constructor: { name: 'Console' },\n error(message) {\n console.error(message.startsWith('\\x1b') ? message : styleText('red', message));\n },\n warn(message) {\n console.warn(message.startsWith('\\x1b') ? message : styleText('yellow', message));\n },\n info(message) {\n console.info(message.startsWith('\\x1b') ? message : styleText('blue', message));\n },\n log(message) {\n console.log(message);\n },\n debug(message) {\n _debugOutput && console.debug(message.startsWith('\\x1b') ? message : styleText('gray', message));\n },\n};\nlogger.attach(output);\nlet timeout = 1000;\nexport function setCommandTimeout(value) {\n timeout = value;\n}\n/**\n * Run a system command with the fancy \"Example... done.\"\n * @internal\n */\nexport async function run(message, command) {\n let stderr;\n try {\n start(message);\n const { promise, resolve, reject } = Promise.withResolvers();\n exec(command, { timeout }, (err, stdout, _stderr) => {\n stderr = _stderr.startsWith('ERROR:') ? _stderr.slice(6).trim() : _stderr;\n if (err)\n reject('[command]');\n else\n resolve(stdout);\n });\n const value = await promise;\n done();\n return value;\n }\n catch (error) {\n throw error == '[command]'\n ? stderr?.slice(0, 100) || 'failed.'\n : typeof error == 'object' && 'message' in error\n ? error.message\n : error;\n }\n}\n/** Yet another convenience function */\nexport function exit(message, code = 1) {\n if (message instanceof Error)\n message = message.message;\n output.error(message);\n process.exit(code);\n}\nexport function handleError(e) {\n if (typeof e == 'number')\n process.exit(e);\n else\n exit(e);\n}\nlet _debugOutput = false;\n/**\n * Enable or disable debug output.\n */\nexport function _setDebugOutput(enabled) {\n _debugOutput = enabled;\n}\nfunction defaultOutput(tag, message = '') {\n switch (tag) {\n case 'debug':\n _debugOutput && output.debug(message);\n break;\n case 'info':\n console.log(message);\n break;\n case 'warn':\n console.warn(styleText('yellow', message));\n break;\n case 'error':\n console.error(styleText('red', message));\n break;\n case 'start':\n process.stdout.write(message + '... ');\n break;\n case 'done':\n console.log('done.');\n break;\n case 'plugin':\n console.log(styleText('whiteBright', 'Running plugin: ' + message));\n }\n}\nlet _taggedOutput = defaultOutput;\nexport function useTaggedOutput(output) {\n _taggedOutput = output;\n}\n// Shortcuts for tagged output\nexport function done() {\n _taggedOutput?.('done');\n}\nexport function start(message) {\n _taggedOutput?.('start', message);\n}\nexport function plugin(name) {\n _taggedOutput?.('plugin', name);\n}\nexport function debug(message) {\n _taggedOutput?.('debug', message);\n}\nexport function info(message) {\n _taggedOutput?.('info', message);\n}\nexport function warn(message) {\n _taggedOutput?.('warn', message);\n}\nexport function error(message) {\n _taggedOutput?.('error', message);\n}\n/** @internal */\nexport const _portMethods = ['node-cap'];\n/** @internal */\nexport const _portActions = ['enable', 'disable'];\n/**\n * This changes if Axium can use restricted ports (like 80 and 443) without root privileges.\n * Use of these ports is needed so the origin doesn't have a port.\n * If the origin has a port, passkeys do not work correctly with some password managers.\n */\nexport async function restrictedPorts(opt) {\n start('Checking for root privileges');\n if (process.getuid?.() != 0)\n throw 'root privileges are needed to change restricted ports.';\n done();\n start('Checking ports method');\n if (!_portMethods.includes(opt.method))\n throw 'invalid';\n done();\n start('Checking ports action');\n if (!_portActions.includes(opt.action))\n throw 'invalid';\n done();\n switch (opt.method) {\n case 'node-cap': {\n const setcap = await run('Finding setcap', 'command -v setcap')\n .then(e => e.trim())\n .catch(() => {\n warn('not in path.');\n start('Checking for /usr/sbin/setcap');\n fs.accessSync('/usr/sbin/setcap', fs.constants.X_OK);\n done();\n return '/usr/sbin/setcap';\n });\n debug('Using setcap at ' + setcap);\n let { node } = opt;\n node ||= await run('Finding node', 'command -v node')\n .then(e => e.trim())\n .catch(() => {\n warn('not in path.');\n start('Checking for /usr/bin/node');\n fs.accessSync('/usr/bin/node', fs.constants.X_OK);\n done();\n return '/usr/bin/node';\n });\n start('Resolving real path for node');\n node = fs.realpathSync(node);\n done();\n debug('Using node at ' + node);\n await run('Setting ports capability', `${setcap} cap_net_bind_service=${opt.action == 'enable' ? '+' : '-'}ep ${node}`);\n break;\n }\n }\n}\n/**\n * This is a factory for handling errors when performing operations.\n * The handler will allow the parent scope to continue if a relation already exists,\n * rather than fatally exiting.\n */\nexport function someWarnings(...allowList) {\n return (error) => {\n error = typeof error == 'object' && 'message' in error ? error.message : error;\n for (const [pattern, message = error] of allowList) {\n if (!pattern.test(error))\n continue;\n warn(message);\n return;\n }\n throw error;\n };\n}\n","import * as z from 'zod';\nexport function zFunction(schema) {\n return z.custom((fn) => schema.implement(fn));\n}\nexport function zAsyncFunction(schema) {\n return z.custom((fn) => schema.implementAsync(fn));\n}\nconst transports = ['ble', 'cable', 'hybrid', 'internal', 'nfc', 'smart-card', 'usb'];\nexport const authenticatorAttachment = z.literal(['platform', 'cross-platform']).optional();\nexport const PasskeyRegistration = z.object({\n id: z.string(),\n rawId: z.string(),\n response: z.object({\n clientDataJSON: z.string(),\n attestationObject: z.string(),\n authenticatorData: z.string().optional(),\n transports: z.array(z.enum(transports)).optional(),\n publicKeyAlgorithm: z.number().optional(),\n publicKey: z.string().optional(),\n }),\n authenticatorAttachment,\n clientExtensionResults: z.record(z.any(), z.any()),\n type: z.literal('public-key'),\n});\n/**\n * POSTed to the `/users/:id/login` endpoint.\n */\nexport const PasskeyAuthenticationResponse = z.object({\n id: z.string(),\n rawId: z.string(),\n response: z.object({\n clientDataJSON: z.string(),\n authenticatorData: z.string(),\n signature: z.string(),\n userHandle: z.string().optional(),\n }),\n authenticatorAttachment,\n clientExtensionResults: z.record(z.any(), z.any()),\n type: z.literal('public-key'),\n});\nexport const APIUserRegistration = z.object({\n name: z.string().min(1).max(100),\n email: z.email(),\n userId: z.uuid(),\n response: PasskeyRegistration,\n});\nexport const PasskeyChangeable = z.object({ name: z.string() }).partial();\nexport const UserAuthOptions = z.object({ type: z.literal(['login', 'action']) });\nexport const LogoutSessions = z.object({\n id: z.array(z.uuid()).optional(),\n confirm_all: z.boolean().optional(),\n});\n","import { zAsyncFunction } from '@axium/core/schemas';\nimport * as fs from 'node:fs';\nimport { resolve } from 'node:path/posix';\nimport { styleText } from 'node:util';\nimport * as z from 'zod';\nimport { output } from './io.js';\nimport { _unique } from './state.js';\nexport const PluginMetadata = z.looseObject({\n name: z.string(),\n version: z.string(),\n description: z.string().optional(),\n routes: z.string().optional(),\n});\nconst hookNames = ['db_init', 'remove', 'db_wipe', 'clean'];\nconst fn = z.custom(data => typeof data === 'function');\nexport const Plugin = PluginMetadata.extend({\n statusText: zAsyncFunction(z.function({ input: [], output: z.string() })),\n hooks: z.partialRecord(z.literal(hookNames), fn).optional(),\n});\nconst kSpecifier = Symbol('specifier');\nexport const plugins = _unique('plugins', new Set());\nexport function resolvePlugin(search) {\n for (const plugin of plugins) {\n if (plugin.name === search)\n return plugin;\n }\n}\nexport function pluginText(plugin) {\n return [\n styleText('whiteBright', plugin.name),\n `Version: ${plugin.version}`,\n `Description: ${plugin.description ?? styleText('dim', '(none)')}`,\n `Hooks: ${Object.keys(plugin.hooks).join(', ') || styleText('dim', '(none)')}`,\n // @todo list the routes when debug output is enabled\n `Routes: ${plugin.routes || styleText('dim', '(none)')}`,\n ].join('\\n');\n}\nexport async function loadPlugin(specifier) {\n try {\n const imported = await import(/* @vite-ignore */ specifier);\n const maybePlugin = 'default' in imported ? imported.default : imported;\n const plugin = Object.assign({ hooks: {}, [kSpecifier]: specifier }, await Plugin.parseAsync(maybePlugin).catch(e => {\n throw z.prettifyError(e);\n }));\n if (plugin.name.startsWith('#') || plugin.name.includes(' ')) {\n throw 'Invalid plugin name. Plugin names can not start with a hash or contain spaces.';\n }\n plugins.add(plugin);\n output.debug(`Loaded plugin: ${plugin.name} ${plugin.version}`);\n }\n catch (e) {\n output.debug(`Failed to load plugin from ${specifier}: ${e ? (e instanceof Error ? e.message : e.toString()) : e}`);\n }\n}\nexport function getSpecifier(plugin) {\n return plugin[kSpecifier];\n}\nexport async function loadPlugins(dir) {\n fs.mkdirSync(dir, { recursive: true });\n const files = fs.readdirSync(dir);\n for (const file of files) {\n const path = resolve(dir, file);\n const stats = fs.statSync(path);\n if (stats.isDirectory() || !['.js', '.mjs'].some(ext => path.endsWith(ext)))\n return;\n await loadPlugin(path);\n }\n}\n","import { levelText } from 'logzen';\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path/posix';\nimport { deepAssign, omit } from 'utilium';\nimport * as z from 'zod';\nimport { _setDebugOutput, dirs, logger, output } from './io.js';\nimport { loadPlugin } from './plugins.js';\nimport { _duplicateStateWarnings, _unique } from './state.js';\nexport const ConfigSchema = z\n .looseObject({\n allow_new_users: z.boolean(),\n api: z\n .looseObject({\n disable_metadata: z.boolean(),\n cookie_auth: z.boolean(),\n })\n .partial(),\n apps: z\n .looseObject({\n disabled: z.array(z.string()),\n })\n .partial(),\n auth: z\n .looseObject({\n origin: z.string(),\n /** In minutes */\n passkey_probation: z.number(),\n rp_id: z.string(),\n rp_name: z.string(),\n secure_cookies: z.boolean(),\n /** In minutes */\n verification_timeout: z.number(),\n /** Whether users can verify emails */\n email_verification: z.boolean(),\n })\n .partial(),\n db: z\n .looseObject({\n host: z.string(),\n port: z.number(),\n password: z.string(),\n user: z.string(),\n database: z.string(),\n })\n .partial(),\n debug: z.boolean(),\n log: z\n .looseObject({\n level: z.enum(levelText),\n console: z.boolean(),\n })\n .partial(),\n show_duplicate_state: z.boolean(),\n web: z\n .looseObject({\n assets: z.string(),\n build: z.string(),\n disable_cache: z.boolean(),\n port: z.number().min(1).max(65535),\n prefix: z.string(),\n routes: z.string(),\n secure: z.boolean(),\n ssl_key: z.string(),\n ssl_cert: z.string(),\n template: z.string(),\n })\n .partial(),\n})\n .partial();\nexport const configFiles = _unique('configFiles', new Map());\nexport function plainConfig() {\n return omit(config, Object.keys(configShortcuts));\n}\nconst configShortcuts = {\n findPath: findConfigPaths,\n load: loadConfig,\n loadDefaults: loadDefaultConfigs,\n plain: plainConfig,\n save: saveConfig,\n saveTo: saveConfigTo,\n set: setConfig,\n files: configFiles,\n};\nexport const config = _unique('config', {\n ...configShortcuts,\n allow_new_users: true,\n api: {\n disable_metadata: false,\n cookie_auth: true,\n },\n apps: {\n disabled: [],\n },\n auth: {\n origin: 'https://test.localhost',\n passkey_probation: 60,\n rp_id: 'test.localhost',\n rp_name: 'Axium',\n secure_cookies: true,\n verification_timeout: 60,\n email_verification: false,\n },\n db: {\n database: process.env.PGDATABASE || 'axium',\n host: process.env.PGHOST || 'localhost',\n password: process.env.PGPASSWORD || '',\n port: process.env.PGPORT && Number.isSafeInteger(parseInt(process.env.PGPORT)) ? parseInt(process.env.PGPORT) : 5432,\n user: process.env.PGUSER || 'axium',\n },\n debug: false,\n log: {\n console: true,\n level: 'info',\n },\n show_duplicate_state: false,\n web: {\n assets: '',\n build: '../build/handler.js',\n disable_cache: false,\n port: 443,\n prefix: '',\n routes: 'routes',\n secure: true,\n ssl_key: resolve(dirs[0], 'ssl_key.pem'),\n ssl_cert: resolve(dirs[0], 'ssl_cert.pem'),\n template: join(import.meta.dirname, '../web/template.html'),\n },\n});\nexport default config;\n// config from file\nexport const FileSchema = z\n .looseObject({\n ...ConfigSchema.shape,\n include: z.array(z.string()),\n plugins: z.array(z.string()),\n})\n .partial();\nexport function addConfigDefaults(other, _target = config) {\n for (const [key, value] of Object.entries(other)) {\n if (!(key in _target) || _target[key] === null || _target[key] === undefined || Number.isNaN(_target[key])) {\n _target[key] = value;\n continue;\n }\n if (typeof value == 'object' && value != null && typeof _target[key] == 'object') {\n addConfigDefaults(value, _target[key]);\n }\n }\n}\n/**\n * Update the current config\n */\nexport function setConfig(other) {\n deepAssign(config, other);\n logger.detach(output);\n if (config.log.console)\n logger.attach(output, { output: config.log.level });\n _setDebugOutput(config.debug);\n _duplicateStateWarnings(config.show_duplicate_state);\n}\n/**\n * Load the config from the provided path\n */\nexport async function loadConfig(path, options = {}) {\n if (configFiles.has(path))\n return;\n let json;\n try {\n json = JSON.parse(readFileSync(path, 'utf8'));\n }\n catch (e) {\n if (!options.optional)\n throw e;\n output.debug(`Skipping config at ${path} (${e.message})`);\n return;\n }\n let file;\n try {\n file = FileSchema.parse(json);\n }\n catch (e) {\n if (!options.loose)\n throw e;\n output.debug(`Loading invalid config from ${path} (${e.message})`);\n file = json;\n }\n configFiles.set(path, file);\n setConfig(file);\n output.debug('Loaded config: ' + path);\n for (const include of file.include ?? [])\n await loadConfig(join(dirname(path), include), { optional: true });\n for (const plugin of file.plugins ?? [])\n await loadPlugin(plugin.startsWith('.') ? resolve(dirname(path), plugin) : plugin);\n}\nexport async function loadDefaultConfigs() {\n for (const path of findConfigPaths()) {\n if (!existsSync(path)) {\n try {\n writeFileSync(path, '{}');\n }\n catch {\n continue;\n }\n }\n await loadConfig(path, { optional: true });\n }\n}\n/**\n * Update the current config and write the updated config to the appropriate file\n */\nexport function saveConfig(changed, global = false) {\n saveConfigTo(findConfigPaths().at(global ? 0 : -1), changed);\n}\n/**\n * Update the current config and write the updated config to the provided path\n */\nexport function saveConfigTo(path, changed) {\n setConfig(changed);\n const config = configFiles.get(path) ?? {};\n Object.assign(config, { ...changed, db: { ...config.db, ...changed.db } });\n output.debug(`Wrote config to ${path}`);\n writeFileSync(path, JSON.stringify(config));\n}\n/**\n * Find the path to the config file(s)\n * This array should roughly be in the order of most global to most local.\n */\nexport function findConfigPaths() {\n const paths = dirs.map(dir => join(dir, 'config.json'));\n if (process.env.AXIUM_CONFIG)\n paths.push(process.env.AXIUM_CONFIG);\n return paths;\n}\nif (process.env.AXIUM_CONFIG)\n await loadConfig(process.env.AXIUM_CONFIG);\n","export const requestMethods = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'HEAD', 'PATCH'];\n","import * as z from 'zod';\nexport const User = z.object({\n id: z.uuid(),\n name: z.string().min(1, 'Name is required').max(255, 'Name is too long'),\n email: z.email(),\n emailVerified: z.date().nullable().optional(),\n image: z.url().nullable().optional(),\n preferences: z.record(z.string(), z.any()),\n roles: z.array(z.string()),\n registeredAt: z.date(),\n});\nexport const userPublicFields = ['id', 'image', 'name', 'registeredAt', 'roles'];\nexport const userProtectedFields = ['email', 'emailVerified', 'preferences'];\nexport const UserChangeable = User.pick({\n name: true,\n email: true,\n image: true,\n preferences: true,\n}).partial();\nexport function getUserImage(user) {\n if (user.image)\n return user.image;\n user.name ??= '\\0';\n let color = user.name.charCodeAt(0);\n for (let i = 1; i < user.name.length; i++) {\n color *= user.name.charCodeAt(i);\n }\n color &= 0xbfbfbf;\n const r = (color >> 16) & 0xff;\n const g = (color >> 8) & 0xff;\n const b = color & 0xff;\n return `data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" style=\"background-color:rgb(${r},${g},${b});display:flex;align-items:center;justify-content:center;\">\n\t\t<text x=\"23\" y=\"28\" style=\"font-family:sans-serif;font-weight:bold;\" fill=\"white\">${user.name.replaceAll(/\\W/g, '')[0]}</text>\n\t</svg>`.replaceAll(/[\\t\\n]/g, '');\n}\n","import { Kysely, PostgresDialect, sql } from 'kysely';\nimport { jsonObjectFrom } from 'kysely/helpers/postgres';\nimport { randomBytes } from 'node:crypto';\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport pg from 'pg';\nimport config from './config.js';\nimport * as io from './io.js';\nimport { plugins } from './plugins.js';\nconst sym = Symbol.for('Axium:database');\nexport let database;\nexport function connect() {\n if (database)\n return database;\n if (globalThis[sym])\n return (database = globalThis[sym]);\n database = new Kysely({\n dialect: new PostgresDialect({ pool: new pg.Pool(config.db) }),\n });\n globalThis[sym] = database;\n io.debug('Connected to database!');\n return database;\n}\n// Helpers\nexport async function count(...tables) {\n return await database\n .selectFrom(tables)\n .select(() => tables.map(t => database.fn.countAll(t).as(t)))\n .$castTo()\n .executeTakeFirstOrThrow();\n}\n/**\n * Select the user with the id from the userId column of a table, placing it in the `user` property.\n */\nexport function userFromId(builder) {\n const eb = builder;\n return jsonObjectFrom(eb.selectFrom('users').selectAll().whereRef('id', '=', 'userId'))\n .$notNull()\n .$castTo()\n .as('user');\n}\nexport async function statText() {\n try {\n const stats = await count('users', 'passkeys', 'sessions');\n return `${stats.users} users, ${stats.passkeys} passkeys, ${stats.sessions} sessions`;\n }\n catch (error) {\n throw typeof error == 'object' && 'message' in error ? error.message : error;\n }\n}\nexport function shouldRecreate(opt) {\n if (opt.skip) {\n io.warn('already exists. (skipped)');\n return true;\n }\n if (opt.force) {\n io.warn('already exists. (re-creating)');\n return false;\n }\n io.warn('already exists. Use --skip to skip or --force to re-create.');\n throw 2;\n}\nexport async function getHBA(opt) {\n const hbaShowResult = await io.run('Finding pg_hba.conf', `sudo -u postgres psql -c \"SHOW hba_file\"`);\n io.start('Resolving pg_hba.conf path');\n const hbaPath = hbaShowResult.match(/^\\s*(.+\\.conf)\\s*$/m)?.[1]?.trim();\n if (!hbaPath) {\n throw 'failed. You will need to add password-based auth for the axium user manually.';\n }\n io.done();\n io.debug(`Found pg_hba.conf at ${hbaPath}`);\n io.start('Reading HBA configuration');\n const content = readFileSync(hbaPath, 'utf-8');\n io.done();\n const writeBack = (newContent) => {\n io.start('Writing HBA configuration');\n writeFileSync(hbaPath, newContent);\n io.done();\n };\n return [content, writeBack];\n}\nconst pgHba = `\nlocal axium axium md5\nhost axium axium 127.0.0.1/32 md5\nhost axium axium ::1/128 md5\n`;\nconst _sql = (command, message) => io.run(message, `sudo -u postgres psql -c \"${command}\"`);\n/** Shortcut to output a warning if an error is thrown because relation already exists */\nexport const warnExists = io.someWarnings([/\\w+ \"[\\w.]+\" already exists/, 'already exists.']);\nconst throwUnlessRows = (text) => {\n if (text.includes('(0 rows)'))\n throw 'missing.';\n return text;\n};\nexport async function createIndex(table, column, mod) {\n io.start(`Creating index for ${table}.${column}`);\n let query = database.schema.createIndex(`${table}_${column}_index`).on(table).column(column);\n if (mod)\n query = mod(query);\n await query.execute().then(io.done).catch(warnExists);\n}\nexport async function init(opt) {\n if (!config.db.password) {\n config.save({ db: { password: randomBytes(32).toString('base64') } }, true);\n io.debug('Generated password and wrote to global config');\n }\n await io.run('Checking for sudo', 'which sudo');\n await io.run('Checking for psql', 'which psql');\n await _sql('CREATE DATABASE axium', 'Creating database').catch(async (error) => {\n if (error != 'database \"axium\" already exists')\n throw error;\n if (shouldRecreate(opt))\n return;\n await _sql('DROP DATABASE axium', 'Dropping database');\n await _sql('CREATE DATABASE axium', 'Re-creating database');\n });\n const createQuery = `CREATE USER axium WITH ENCRYPTED PASSWORD '${config.db.password}' LOGIN`;\n await _sql(createQuery, 'Creating user').catch(async (error) => {\n if (error != 'role \"axium\" already exists')\n throw error;\n if (shouldRecreate(opt))\n return;\n await _sql('REVOKE ALL PRIVILEGES ON SCHEMA public FROM axium', 'Revoking schema privileges');\n await _sql('DROP USER axium', 'Dropping user');\n await _sql(createQuery, 'Re-creating user');\n });\n await _sql('GRANT ALL PRIVILEGES ON DATABASE axium TO axium', 'Granting database privileges');\n await _sql('GRANT ALL PRIVILEGES ON SCHEMA public TO axium', 'Granting schema privileges');\n await _sql('ALTER DATABASE axium OWNER TO axium', 'Setting database owner');\n await getHBA(opt)\n .then(([content, writeBack]) => {\n io.start('Checking for Axium HBA configuration');\n if (content.includes(pgHba))\n throw 'already exists.';\n io.done();\n io.start('Adding Axium HBA configuration');\n const newContent = content.replace(/^local\\s+all\\s+all.*$/m, `$&\\n${pgHba}`);\n io.done();\n writeBack(newContent);\n })\n .catch(io.warn);\n await _sql('SELECT pg_reload_conf()', 'Reloading configuration');\n io.start('Connecting to database');\n connect();\n io.done();\n function maybeCheck(table) {\n return (e) => {\n warnExists(e);\n if (opt.check)\n return checkTableTypes(table, expectedTypes[table], opt);\n };\n }\n io.start('Creating table users');\n await database.schema\n .createTable('users')\n .addColumn('id', 'uuid', col => col.primaryKey().defaultTo(sql `gen_random_uuid()`))\n .addColumn('name', 'text')\n .addColumn('email', 'text', col => col.unique().notNull())\n .addColumn('emailVerified', 'timestamptz')\n .addColumn('image', 'text')\n .addColumn('isAdmin', 'boolean', col => col.notNull().defaultTo(false))\n .addColumn('roles', sql `text[]`, col => col.notNull().defaultTo(sql `'{}'::text[]`))\n .addColumn('tags', sql `text[]`, col => col.notNull().defaultTo(sql `'{}'::text[]`))\n .addColumn('preferences', 'jsonb', col => col.notNull().defaultTo('{}'))\n .addColumn('registeredAt', 'timestamptz', col => col.notNull().defaultTo(sql `now()`))\n .execute()\n .then(io.done)\n .catch(maybeCheck('users'));\n io.start('Creating table sessions');\n await database.schema\n .createTable('sessions')\n .addColumn('id', 'uuid', col => col.primaryKey().defaultTo(sql `gen_random_uuid()`))\n .addColumn('userId', 'uuid', col => col.references('users.id').onDelete('cascade').notNull())\n .addColumn('token', 'text', col => col.notNull().unique())\n .addColumn('created', 'timestamptz', col => col.notNull())\n .addColumn('expires', 'timestamptz', col => col.notNull())\n .addColumn('elevated', 'boolean', col => col.notNull())\n .execute()\n .then(io.done)\n .catch(maybeCheck('sessions'));\n await createIndex('sessions', 'id');\n io.start('Creating table verifications');\n await database.schema\n .createTable('verifications')\n .addColumn('userId', 'uuid', col => col.references('users.id').onDelete('cascade').notNull())\n .addColumn('token', 'text', col => col.notNull().unique())\n .addColumn('expires', 'timestamptz', col => col.notNull())\n .addColumn('role', 'text', col => col.notNull())\n .execute()\n .then(io.done)\n .catch(maybeCheck('verifications'));\n io.start('Creating table passkeys');\n await database.schema\n .createTable('passkeys')\n .addColumn('id', 'text', col => col.primaryKey().notNull())\n .addColumn('name', 'text')\n .addColumn('createdAt', 'timestamptz', col => col.notNull().defaultTo(sql `now()`))\n .addColumn('userId', 'uuid', col => col.notNull().references('users.id').onDelete('cascade').notNull())\n .addColumn('publicKey', 'bytea', col => col.notNull())\n .addColumn('counter', 'integer', col => col.notNull())\n .addColumn('deviceType', 'text', col => col.notNull())\n .addColumn('backedUp', 'boolean', col => col.notNull())\n .addColumn('transports', sql `text[]`)\n .execute()\n .then(io.done)\n .catch(maybeCheck('passkeys'));\n await createIndex('passkeys', 'userId');\n io.start('Creating schema acl');\n await database.schema.createSchema('acl').execute().then(io.done).catch(warnExists);\n for (const plugin of plugins) {\n if (!plugin.hooks.db_init)\n continue;\n io.plugin(plugin.name);\n await plugin.hooks.db_init(opt);\n }\n}\nexport const expectedTypes = {\n users: {\n email: { type: 'text', required: true },\n emailVerified: { type: 'timestamptz' },\n id: { type: 'uuid', required: true, hasDefault: true },\n image: { type: 'text' },\n isAdmin: { type: 'bool', required: true, hasDefault: true },\n name: { type: 'text' },\n preferences: { type: 'jsonb', required: true, hasDefault: true },\n registeredAt: { type: 'timestamptz', required: true, hasDefault: true },\n roles: { type: '_text', required: true, hasDefault: true },\n tags: { type: '_text', required: true, hasDefault: true },\n },\n verifications: {\n userId: { type: 'uuid', required: true },\n token: { type: 'text', required: true },\n expires: { type: 'timestamptz', required: true },\n role: { type: 'text', required: true },\n },\n passkeys: {\n id: { type: 'text', required: true },\n name: { type: 'text' },\n createdAt: { type: 'timestamptz', required: true, hasDefault: true },\n userId: { type: 'uuid', required: true },\n publicKey: { type: 'bytea', required: true },\n counter: { type: 'int4', required: true },\n deviceType: { type: 'text', required: true },\n backedUp: { type: 'bool', required: true },\n transports: { type: '_text' },\n },\n sessions: {\n id: { type: 'uuid', required: true, hasDefault: true },\n userId: { type: 'uuid', required: true },\n created: { type: 'timestamptz', required: true },\n token: { type: 'text', required: true },\n expires: { type: 'timestamptz', required: true },\n elevated: { type: 'bool', required: true },\n },\n};\n/**\n * Checks that a table has the expected column types, nullability, and default values.\n */\nexport async function checkTableTypes(tableName, types, opt) {\n io.start(`Checking for table ${tableName}`);\n const dbTables = opt._metadata || (await database.introspection.getTables());\n const table = dbTables.find(t => (t.schema == 'public' ? t.name : `${t.schema}.${t.name}`) === tableName);\n if (!table)\n throw 'missing.';\n io.done();\n const columns = Object.fromEntries(table.columns.map(c => [c.name, c]));\n for (const [key, { type, required = false, hasDefault = false }] of Object.entries(types)) {\n io.start(`Checking column ${tableName}.${key}`);\n const col = columns[key];\n if (!col)\n throw 'missing.';\n try {\n if (col.dataType != type)\n throw `incorrect type \"${col.dataType}\", expected ${type}`;\n if (col.isNullable != !required)\n throw required ? 'nullable' : 'not nullable';\n if (col.hasDefaultValue != hasDefault)\n throw hasDefault ? 'missing default' : 'has default';\n io.done();\n }\n catch (e) {\n if (opt.strict)\n throw e;\n io.warn(e);\n }\n delete columns[key];\n }\n if (!opt.extra)\n return;\n io.start('Checking for extra columns in ' + tableName);\n const unchecked = Object.keys(columns)\n .map(c => `${tableName}.${c}`)\n .join(', ');\n if (!unchecked.length)\n io.done();\n else if (opt.strict)\n throw unchecked;\n else\n io.warn(unchecked);\n}\nexport async function check(opt) {\n await io.run('Checking for sudo', 'which sudo');\n await io.run('Checking for psql', 'which psql');\n await _sql(`SELECT 1 FROM pg_database WHERE datname = 'axium'`, 'Checking for database').then(throwUnlessRows);\n await _sql(`SELECT 1 FROM pg_roles WHERE rolname = 'axium'`, 'Checking for user').then(throwUnlessRows);\n io.start('Connecting to database');\n connect();\n io.done();\n io.start('Getting table metadata');\n opt._metadata = await database.introspection.getTables();\n const tables = Object.fromEntries(opt._metadata.map(t => [t.name, t]));\n io.done();\n for (const table of Object.keys(expectedTypes)) {\n await checkTableTypes(table, expectedTypes[table], opt);\n delete tables[table];\n }\n io.start('Checking for extra tables');\n const unchecked = Object.keys(tables).join(', ');\n if (!unchecked.length)\n io.done();\n else if (opt.strict)\n throw unchecked;\n else\n io.warn(unchecked);\n}\nexport async function clean(opt) {\n const now = new Date();\n io.start('Removing expired sessions');\n await database.deleteFrom('sessions').where('sessions.expires', '<', now).execute().then(io.done);\n io.start('Removing expired verifications');\n await database.deleteFrom('verifications').where('verifications.expires', '<', now).execute().then(io.done);\n for (const plugin of plugins) {\n if (!plugin.hooks.clean)\n continue;\n io.plugin(plugin.name);\n await plugin.hooks.clean(opt);\n }\n}\n/**\n * Completely remove Axium from the database.\n */\nexport async function uninstall(opt) {\n for (const plugin of plugins) {\n if (!plugin.hooks.remove)\n continue;\n io.plugin(plugin.name);\n await plugin.hooks.remove(opt);\n }\n await _sql('DROP DATABASE axium', 'Dropping database');\n await _sql('REVOKE ALL PRIVILEGES ON SCHEMA public FROM axium', 'Revoking schema privileges');\n await _sql('DROP USER axium', 'Dropping user');\n await getHBA(opt)\n .then(([content, writeBack]) => {\n io.start('Checking for Axium HBA configuration');\n if (!content.includes(pgHba))\n throw 'missing.';\n io.done();\n io.start('Removing Axium HBA configuration');\n const newContent = content.replace(pgHba, '');\n io.done();\n writeBack(newContent);\n })\n .catch(io.warn);\n}\n/**\n * Removes all data from tables.\n */\nexport async function wipe(opt) {\n for (const plugin of plugins) {\n if (!plugin.hooks.db_wipe)\n continue;\n io.plugin(plugin.name);\n await plugin.hooks.db_wipe(opt);\n }\n for (const table of ['users', 'passkeys', 'sessions', 'verifications']) {\n io.start(`Wiping ${table}`);\n await database.deleteFrom(table).execute();\n io.done();\n }\n for (const table of await database.introspection.getTables()) {\n if (!table.name.startsWith('acl.'))\n continue;\n const name = table.name;\n io.debug(`Wiping ${name}`);\n await database.deleteFrom(name).execute();\n }\n}\nexport async function rotatePassword() {\n io.start('Generating new password');\n const password = randomBytes(32).toString('base64');\n io.done();\n io.start('Updating global config');\n config.save({ db: { password } }, true);\n io.done();\n await _sql(`ALTER USER axium WITH ENCRYPTED PASSWORD '${password}'`, 'Updating database user password');\n}\n","import { randomBytes, randomUUID } from 'node:crypto';\nimport { omit } from 'utilium';\nimport * as acl from './acl.js';\nimport { database as db, userFromId } from './database.js';\nimport { error, getToken, withError } from './requests.js';\nexport async function getUser(id) {\n return await db.selectFrom('users').selectAll().where('id', '=', id).executeTakeFirstOrThrow();\n}\nexport async function updateUser({ id, ...user }) {\n const query = db.updateTable('users').set(user).where('id', '=', id);\n return await query.returningAll().executeTakeFirstOrThrow();\n}\nconst in30days = () => new Date(Date.now() + 2592000000);\nconst in10minutes = () => new Date(Date.now() + 600000);\nexport async function createSession(userId, elevated = false) {\n const session = {\n id: randomUUID(),\n userId,\n token: randomBytes(64).toString('base64'),\n expires: elevated ? in10minutes() : in30days(),\n elevated,\n created: new Date(),\n };\n await db.insertInto('sessions').values(session).execute();\n return session;\n}\nexport async function getSessionAndUser(token) {\n const result = await db\n .selectFrom('sessions')\n .selectAll()\n .select(userFromId)\n .where('sessions.token', '=', token)\n .where('sessions.expires', '>', new Date())\n .executeTakeFirstOrThrow();\n if (!result.user)\n throw new Error('Session references non-existing user');\n return result;\n}\nexport async function getSession(sessionId) {\n return await db\n .selectFrom('sessions')\n .selectAll()\n .where('id', '=', sessionId)\n .where('sessions.expires', '>', new Date())\n .executeTakeFirstOrThrow();\n}\nexport async function getSessions(userId) {\n return await db.selectFrom('sessions').selectAll().where('userId', '=', userId).where('sessions.expires', '>', new Date()).execute();\n}\n/**\n * Create a verification\n * @param expires How long the token should be valid for in seconds\n */\nexport async function createVerification(role, userId, expires) {\n const token = randomBytes(64).toString('base64url');\n const verification = { userId, token, expires: new Date(Date.now() + expires * 1000), role };\n await db.insertInto('verifications').values(verification).executeTakeFirstOrThrow();\n setTimeout(() => {\n void db.deleteFrom('verifications').where('verifications.token', '=', verification.token).execute();\n }, expires * 1000);\n return verification;\n}\nexport async function useVerification(role, userId, token) {\n const query = db\n .deleteFrom('verifications')\n .where('verifications.token', '=', token)\n .where('verifications.userId', '=', userId)\n .where('verifications.role', '=', role);\n return await query.returningAll().executeTakeFirst();\n}\nexport async function getPasskey(id) {\n return await db.selectFrom('passkeys').selectAll().where('id', '=', id).executeTakeFirstOrThrow();\n}\nexport async function createPasskey(passkey) {\n const result = await db.insertInto('passkeys').values(passkey).returningAll().executeTakeFirstOrThrow();\n return result;\n}\nexport async function getPasskeysByUserId(userId) {\n return await db.selectFrom('passkeys').selectAll().where('userId', '=', userId).execute();\n}\nexport async function updatePasskeyCounter(id, newCounter) {\n await db.updateTable('passkeys').set({ counter: newCounter }).where('id', '=', id).executeTakeFirstOrThrow();\n const passkey = await getPasskey(id);\n if (!passkey)\n throw new Error('Passkey not found');\n return passkey;\n}\nexport async function checkAuthForUser(event, userId, sensitive = false) {\n const token = getToken(event, sensitive);\n if (!token)\n throw error(401, 'Missing token');\n const session = await getSessionAndUser(token).catch(withError('Invalid or expired session', 401));\n if (session.userId !== userId) {\n if (!session.user?.isAdmin)\n error(403, 'User ID mismatch');\n // Admins are allowed to manage other users.\n const accessor = session.user;\n session.user = await getUser(userId).catch(withError('Target user not found', 404));\n return Object.assign(session, { accessor });\n }\n if (!session.elevated && sensitive)\n error(403, 'This token can not be used for sensitive actions');\n return Object.assign(session, { accessor: session.user });\n}\nexport async function checkAuthForItem(event, itemType, itemId, permission) {\n const token = getToken(event, true);\n if (!token)\n error(401, 'Missing token');\n const session = await getSessionAndUser(token).catch(() => null);\n const item = await db\n .selectFrom(itemType)\n .selectAll()\n .where('id', '=', itemId)\n .$if(!!session, eb => eb.select(acl.from(itemType, session.userId)))\n .$castTo()\n .executeTakeFirstOrThrow()\n .catch(withError('Item not found', 404));\n const result = {\n session: session ? omit(session, 'user') : undefined,\n item: omit(item, 'acl'),\n user: session?.user,\n fromACL: false,\n };\n if (item.publicPermission >= permission)\n return result;\n if (!session)\n error(403, 'Access denied');\n if (session.userId == item.userId)\n return result;\n result.fromACL = true;\n if (!item.acl || !item.acl.length)\n error(403, 'Access denied');\n const [control] = item.acl;\n if (control.userId !== session.userId)\n error(500, 'Access control entry does not match session user'); // @todo: audit log\n if (control.permission >= permission)\n return result;\n error(403, 'Access denied');\n}\n","import { userProtectedFields, userPublicFields } from '@axium/core/user';\nimport { serialize as serializeCookie } from 'cookie';\nimport { pick } from 'utilium';\nimport * as z from 'zod';\nimport { createSession } from './auth.js';\nimport { config } from './config.js';\nexport function isResponseError(e) {\n return e instanceof Error && e.name === 'ResponseError' && typeof e.status === 'number';\n}\nexport function error(status, message) {\n const error = Object.assign(new Error(message), { status });\n error.name = 'ResponseError';\n throw error;\n}\nexport function isRedirect(e) {\n return typeof e === 'object' && e !== null && 'location' in e && 'status' in e;\n}\n/**\n * Use `Response.redirect` if you can.\n * This should only when `return`ing a `Response` is not possible.\n */\nexport function redirect(location, status = 302) {\n throw { location, status };\n}\nexport function json(data, init) {\n const response = Response.json(data, init);\n if (!response.headers.has('content-length')) {\n response.headers.set('content-length', JSON.stringify(data).length.toString());\n }\n return response;\n}\nexport async function parseBody(event, schema) {\n const contentType = event.request.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json'))\n error(415, 'Invalid content type');\n const body = await event.request.json().catch(() => error(415, 'Invalid JSON'));\n try {\n return schema.parse(body);\n }\n catch (e) {\n error(400, z.prettifyError(e));\n }\n}\nexport function getToken(event, sensitive = false) {\n const header_token = event.request.headers.get('Authorization')?.replace('Bearer ', '');\n if (header_token)\n return header_token;\n if (config.debug || config.api.cookie_auth) {\n return event.cookies.get(sensitive ? 'elevated_token' : 'session_token');\n }\n}\nexport async function createSessionData(userId, elevated = false) {\n const { token, expires } = await createSession(userId, elevated);\n const response = json({ userId, token: elevated ? '[[redacted:elevated]]' : token }, { status: 201 });\n const cookies = serializeCookie(elevated ? 'elevated_token' : 'session_token', token, {\n httpOnly: true,\n path: '/',\n expires,\n secure: config.auth.secure_cookies,\n sameSite: 'lax',\n });\n response.headers.set('Set-Cookie', cookies);\n return response;\n}\nexport function stripUser(user, includeProtected = false) {\n return pick(user, ...userPublicFields, ...(includeProtected ? userProtectedFields : []));\n}\nexport function withError(text, code = 500) {\n return function (e) {\n if (e.name == 'ResponseError')\n throw e;\n error(code, text + (config.debug && e.message ? `: ${e.message}` : ''));\n };\n}\nexport async function handleAPIRequest(event, route) {\n const method = event.request.method;\n const _warnings = [];\n if (route.api && !event.request.headers.get('Accept')?.includes('application/json')) {\n _warnings.push('Only application/json is supported');\n event.request.headers.set('Accept', 'application/json');\n }\n for (const [key, type] of Object.entries(route.params || {})) {\n if (!type)\n continue;\n try {\n event.params[key] = type.parse(event.params[key]);\n }\n catch (e) {\n error(400, `Invalid parameter: ${z.prettifyError(e)}`);\n }\n }\n if (typeof route[method] != 'function')\n error(405, `Method ${method} not allowed for ${route.path}`);\n const result = await route[method](event);\n if (result instanceof Response)\n return result;\n result._warnings ||= [];\n result._warnings.push(..._warnings);\n return json(result);\n}\nexport function handleResponseError(e) {\n if (isResponseError(e))\n return json({ message: e.message }, { status: e.status });\n if (isRedirect(e))\n return Response.redirect(e.location, e.status);\n console.error(e);\n return json({ message: 'Internal Error' + (config.debug ? ': ' + e.message : '') }, { status: 500 });\n}\n","import { pick } from 'utilium';\nimport { _unique } from './state.js';\nexport const apps = _unique('apps', new Map());\nexport class App {\n id;\n name;\n constructor(opt) {\n if (apps.has(opt.id))\n throw new ReferenceError(`App with ID \"${opt.id}\" already exists.`);\n Object.assign(this, pick(opt, 'id', 'name'));\n apps.set(this.id, this);\n }\n}\n","import { apps } from './apps.js';\nimport config from './config.js';\nimport { output } from './io.js';\nimport { _unique } from './state.js';\n/**\n * @internal\n */\nexport const routes = _unique('routes', new Map());\n/**\n * @category Plugin API\n */\nexport function addRoute(opt) {\n const route = { ...opt, server: !('page' in opt) };\n if (!route.path.startsWith('/')) {\n throw new Error(`Route path must start with a slash: ${route.path}`);\n }\n if (route.path.startsWith('/api/'))\n route.api = true;\n if (route.api && !route.server)\n throw new Error(`API routes cannot have a client page: ${route.path}`);\n routes.set(route.path, route);\n output.debug('Added route: ' + route.path);\n}\n/**\n * Resolve a request URL into a route.\n * This handles parsing of parameters in the URL.\n */\nexport function resolveRoute(event) {\n const { pathname } = event.url;\n if (routes.has(pathname) && !pathname.split('/').some(p => p.startsWith(':')))\n return routes.get(pathname);\n // Otherwise we must have a parameterized route\n _routes: for (const route of routes.values()) {\n const params = {};\n // Split the path and route into parts, zipped together\n const pathParts = pathname.split('/').filter(Boolean);\n // Skips routes in disabled apps\n if (apps.has(pathParts[0]) && config.apps.disabled.includes(pathParts[0]))\n continue;\n for (const routePart of route.path.split('/').filter(Boolean)) {\n const pathPart = pathParts.shift();\n if (!pathPart)\n continue _routes;\n if (pathPart == routePart)\n continue;\n if (!routePart.startsWith(':'))\n continue _routes;\n params[routePart.slice(1)] = pathPart;\n }\n // we didn't find a match, since an exact match would have been found already\n if (pathParts.length || !Object.keys(params).length)\n continue;\n event.params = params;\n return route;\n }\n}\n","import { requestMethods } from '@axium/core/requests';\nimport pkg from '../../package.json' with { type: 'json' };\nimport { config } from '../config.js';\nimport { plugins } from '../plugins.js';\nimport { error } from '../requests.js';\nimport { addRoute, routes } from '../routes.js';\naddRoute({\n path: '/api/metadata',\n async GET() {\n if (config.api.disable_metadata)\n error(401, 'API metadata is disabled');\n return {\n version: pkg.version,\n routes: Object.fromEntries(routes\n .entries()\n .filter(([path]) => path.startsWith('/api/'))\n .map(([path, route]) => [\n path,\n {\n params: Object.fromEntries(Object.entries(route.params || {}).map(([key, type]) => [key, type ? type.def.type : null])),\n methods: requestMethods.filter(m => m in route),\n },\n ])),\n plugins: Object.fromEntries(plugins.values().map(plugin => [plugin.name, plugin.version])),\n };\n },\n});\n","import { PasskeyChangeable } from '@axium/core/schemas';\nimport { omit } from 'utilium';\nimport * as z from 'zod';\nimport { checkAuthForUser, getPasskey } from '../auth.js';\nimport { database as db } from '../database.js';\nimport { error, parseBody, withError } from '../requests.js';\nimport { addRoute } from '../routes.js';\naddRoute({\n path: '/api/passkeys/:id',\n params: {\n id: z.string(),\n },\n async GET(event) {\n const passkey = await getPasskey(event.params.id);\n await checkAuthForUser(event, passkey.userId);\n return omit(passkey, 'counter', 'publicKey');\n },\n async PATCH(event) {\n const body = await parseBody(event, PasskeyChangeable);\n const passkey = await getPasskey(event.params.id);\n await checkAuthForUser(event, passkey.userId);\n const result = await db\n .updateTable('passkeys')\n .set(body)\n .where('id', '=', passkey.id)\n .returningAll()\n .executeTakeFirstOrThrow()\n .catch(withError('Could not update passkey'));\n return omit(result, 'counter', 'publicKey');\n },\n async DELETE(event) {\n const passkey = await getPasskey(event.params.id);\n await checkAuthForUser(event, passkey.userId);\n const { count } = await db\n .selectFrom('passkeys')\n .select(db.fn.countAll().as('count'))\n .where('userId', '=', passkey.userId)\n .executeTakeFirstOrThrow();\n if (Number(count) <= 1)\n error(409, 'At least one passkey is required');\n const result = await db\n .deleteFrom('passkeys')\n .where('id', '=', passkey.id)\n .returningAll()\n .executeTakeFirstOrThrow()\n .catch(withError('Could not delete passkey'));\n return omit(result, 'counter', 'publicKey');\n },\n});\n","import { APIUserRegistration } from '@axium/core/schemas';\nimport { generateRegistrationOptions, verifyRegistrationResponse } from '@simplewebauthn/server';\nimport { randomUUID } from 'node:crypto';\nimport * as z from 'zod';\nimport { createPasskey, getUser } from '../auth.js';\nimport config from '../config.js';\nimport { database as db } from '../database.js';\nimport { createSessionData, error, parseBody, withError } from '../requests.js';\nimport { addRoute } from '../routes.js';\n// Map of user ID => challenge\nconst registrations = new Map();\nasync function OPTIONS(event) {\n if (!config.allow_new_users)\n error(409, 'New user registration is disabled');\n const { name, email } = await parseBody(event, z.object({ name: z.string().optional(), email: z.email().optional() }));\n const userId = randomUUID();\n const user = await getUser(userId).catch(() => null);\n if (user)\n error(409, 'Generated UUID is already in use, please retry.');\n const options = await generateRegistrationOptions({\n rpName: config.auth.rp_name,\n rpID: config.auth.rp_id,\n userName: email ?? userId,\n userDisplayName: name,\n attestationType: 'none',\n excludeCredentials: [],\n authenticatorSelection: {\n residentKey: 'preferred',\n userVerification: 'preferred',\n authenticatorAttachment: 'platform',\n },\n });\n registrations.set(userId, options.challenge);\n return { userId, options };\n}\nasync function POST(event) {\n if (!config.allow_new_users)\n error(409, 'New user registration is disabled');\n const { userId, email, name, response } = await parseBody(event, APIUserRegistration);\n const existing = await db.selectFrom('users').selectAll().where('email', '=', email.toLowerCase()).executeTakeFirst();\n if (existing)\n error(409, 'Email already in use');\n const expectedChallenge = registrations.get(userId);\n if (!expectedChallenge)\n error(404, 'No registration challenge found for this user');\n registrations.delete(userId);\n const { verified, registrationInfo } = await verifyRegistrationResponse({\n response,\n expectedChallenge,\n expectedOrigin: config.auth.origin,\n }).catch(() => error(400, 'Verification failed'));\n if (!verified || !registrationInfo)\n error(401, 'Verification failed');\n await db\n .insertInto('users')\n .values({ id: userId, name, email: email.toLowerCase() })\n .executeTakeFirstOrThrow()\n .catch(withError('Failed to create user'));\n await createPasskey({\n transports: [],\n ...registrationInfo.credential,\n userId,\n deviceType: registrationInfo.credentialDeviceType,\n backedUp: registrationInfo.credentialBackedUp,\n }).catch(withError('Failed to create passkey', 500));\n return await createSessionData(userId);\n}\naddRoute({\n path: '/api/register',\n params: {},\n OPTIONS,\n POST,\n});\n","import { omit } from 'utilium';\nimport { getSessionAndUser } from '../auth.js';\nimport { database as db } from '../database.js';\nimport { error, getToken, stripUser, withError } from '../requests.js';\nimport { addRoute } from '../routes.js';\naddRoute({\n path: '/api/session',\n async GET(event) {\n const token = getToken(event);\n if (!token)\n error(401, 'Missing token');\n const result = await getSessionAndUser(token).catch(withError('Invalid session', 400));\n return {\n ...omit(result, 'token'),\n user: stripUser(result.user, true),\n };\n },\n async DELETE(event) {\n const token = getToken(event);\n if (!token)\n error(401, 'Missing token');\n const result = await db\n .deleteFrom('sessions')\n .where('sessions.token', '=', token)\n .returningAll()\n .executeTakeFirstOrThrow()\n .catch((e) => (e.message == 'no result' ? error(404, 'Session does not exist') : error(400, 'Invalid session')));\n return omit(result, 'token');\n },\n});\n","import { LogoutSessions, PasskeyAuthenticationResponse, PasskeyRegistration, UserAuthOptions } from '@axium/core/schemas';\nimport { UserChangeable } from '@axium/core/user';\nimport * as webauthn from '@simplewebauthn/server';\nimport { omit, pick } from 'utilium';\nimport * as z from 'zod';\nimport { checkAuthForUser, createPasskey, createVerification, getPasskey, getPasskeysByUserId, getSessions, getUser, useVerification, } from '../auth.js';\nimport { config } from '../config.js';\nimport { database as db } from '../database.js';\nimport { createSessionData, error, parseBody, stripUser, withError } from '../requests.js';\nimport { addRoute } from '../routes.js';\nconst challenges = new Map();\nconst params = { id: z.uuid() };\n/**\n * Resolve a user's UUID using their email (in the future this might also include handles)\n */\naddRoute({\n path: '/api/user_id',\n async POST(event) {\n const { value } = await parseBody(event, z.object({ using: z.literal('email'), value: z.email() }));\n const { id } = await db\n .selectFrom('users')\n .select('id')\n .where('email', '=', value)\n .executeTakeFirstOrThrow()\n .catch(withError('User not found', 404));\n return { id };\n },\n});\naddRoute({\n path: '/api/users/:id',\n params,\n async GET(event) {\n const userId = event.params.id;\n const auth = await checkAuthForUser(event, userId).catch(() => null);\n const user = auth?.user || (await getUser(userId).catch(withError('User does not exist', 404)));\n return stripUser(user, !!auth);\n },\n async PATCH(event) {\n const userId = event.params.id;\n const body = await parseBody(event, UserChangeable);\n await checkAuthForUser(event, userId);\n if ('email' in body)\n body.emailVerified = null;\n const result = await db\n .updateTable('users')\n .set(body)\n .where('id', '=', userId)\n .returningAll()\n .executeTakeFirstOrThrow()\n .catch(withError('Failed to update user'));\n return stripUser(result, true);\n },\n async DELETE(event) {\n const userId = event.params.id;\n await checkAuthForUser(event, userId, true);\n const result = await db\n .deleteFrom('users')\n .where('id', '=', userId)\n .returningAll()\n .executeTakeFirstOrThrow()\n .catch(withError('Failed to delete user'));\n return result;\n },\n});\naddRoute({\n path: '/api/users/:id/full',\n params,\n async GET(event) {\n const userId = event.params.id;\n const { user } = await checkAuthForUser(event, userId);\n const sessions = await getSessions(userId);\n return {\n ...stripUser(user, true),\n sessions: sessions.map(s => omit(s, 'token')),\n };\n },\n});\naddRoute({\n path: '/api/users/:id/auth',\n params,\n async OPTIONS(event) {\n const userId = event.params.id;\n const { type } = await parseBody(event, UserAuthOptions);\n await getUser(userId).catch(withError('User does not exist', 404));\n const passkeys = await getPasskeysByUserId(userId);\n if (!passkeys)\n error(409, 'No passkeys exists for this user');\n const options = await webauthn.generateAuthenticationOptions({\n rpID: config.auth.rp_id,\n allowCredentials: passkeys.map(passkey => pick(passkey, 'id', 'transports')),\n });\n challenges.set(userId, { data: options.challenge, type });\n return options;\n },\n async POST(event) {\n const userId = event.params.id;\n const response = await parseBody(event, PasskeyAuthenticationResponse);\n const auth = challenges.get(userId);\n if (!auth)\n error(404, 'No challenge');\n const { data: expectedChallenge, type } = auth;\n challenges.delete(userId);\n const passkey = await getPasskey(response.id).catch(withError('Passkey does not exist', 404));\n if (passkey.userId !== userId)\n error(403, 'Passkey does not belong to this user');\n const { verified } = await webauthn\n .verifyAuthenticationResponse({\n response,\n credential: passkey,\n expectedChallenge,\n expectedOrigin: config.auth.origin,\n expectedRPID: config.auth.rp_id,\n })\n .catch(withError('Verification failed', 400));\n if (!verified)\n error(401, 'Verification failed');\n switch (type) {\n case 'login':\n return await createSessionData(userId);\n case 'action':\n if ((Date.now() - passkey.createdAt.getTime()) / 60_000 < config.auth.passkey_probation)\n error(403, 'You can not authorize sensitive actions with a newly created passkey');\n return await createSessionData(userId, true);\n }\n },\n});\n// Map of user ID => challenge\nconst registrations = new Map();\naddRoute({\n path: '/api/users/:id/passkeys',\n params,\n /**\n * Get passkey registration options for a user.\n */\n async OPTIONS(event) {\n const userId = event.params.id;\n const existing = await getPasskeysByUserId(userId);\n const { user } = await checkAuthForUser(event, userId);\n const options = await webauthn.generateRegistrationOptions({\n rpName: config.auth.rp_name,\n rpID: config.auth.rp_id,\n userName: userId,\n userDisplayName: user.email,\n attestationType: 'none',\n excludeCredentials: existing.map(passkey => pick(passkey, 'id', 'transports')),\n authenticatorSelection: {\n residentKey: 'preferred',\n userVerification: 'preferred',\n authenticatorAttachment: 'platform',\n },\n });\n registrations.set(userId, options.challenge);\n return options;\n },\n /**\n * Get passkeys for a user.\n */\n async GET(event) {\n const userId = event.params.id;\n await checkAuthForUser(event, userId);\n const passkeys = await getPasskeysByUserId(userId);\n return passkeys.map(p => omit(p, 'publicKey', 'counter'));\n },\n /**\n * Register a new passkey for an existing user.\n */\n async PUT(event) {\n const userId = event.params.id;\n const response = await parseBody(event, PasskeyRegistration);\n await checkAuthForUser(event, userId);\n const expectedChallenge = registrations.get(userId);\n if (!expectedChallenge)\n error(404, 'No registration challenge found for this user');\n registrations.delete(userId);\n const { verified, registrationInfo } = await webauthn\n .verifyRegistrationResponse({\n response,\n expectedChallenge,\n expectedOrigin: config.auth.origin,\n })\n .catch(withError('Verification failed', 400));\n if (!verified || !registrationInfo)\n error(401, 'Verification failed');\n const passkey = await createPasskey({\n transports: [],\n ...registrationInfo.credential,\n userId,\n deviceType: registrationInfo.credentialDeviceType,\n backedUp: registrationInfo.credentialBackedUp,\n }).catch(withError('Failed to create passkey'));\n return omit(passkey, 'publicKey', 'counter');\n },\n});\naddRoute({\n path: '/api/users/:id/sessions',\n params,\n async GET(event) {\n const userId = event.params.id;\n await checkAuthForUser(event, userId);\n return (await getSessions(userId).catch(e => error(503, 'Failed to get sessions' + (config.debug ? ': ' + e : '')))).map(s => omit(s, 'token'));\n },\n async DELETE(event) {\n const userId = event.params.id;\n const body = await parseBody(event, LogoutSessions);\n await checkAuthForUser(event, userId, body.confirm_all);\n if (!body.confirm_all && !Array.isArray(body.id))\n error(400, 'Invalid request body');\n const query = body.confirm_all ? db.deleteFrom('sessions') : db.deleteFrom('sessions').where('sessions.id', 'in', body.id);\n const result = await query\n .where('sessions.userId', '=', userId)\n .returningAll()\n .execute()\n .catch(withError('Failed to delete one or more sessions'));\n return result.map(s => omit(s, 'token'));\n },\n});\naddRoute({\n path: '/api/users/:id/verify_email',\n params,\n async OPTIONS(event) {\n const userId = event.params.id;\n if (!config.auth.email_verification)\n return { enabled: false };\n await checkAuthForUser(event, userId);\n if (!config.auth.email_verification)\n return { enabled: false };\n return { enabled: true };\n },\n async GET(event) {\n const userId = event.params.id;\n const { user } = await checkAuthForUser(event, userId);\n if (user.emailVerified)\n error(409, 'Email already verified');\n const verification = await createVerification('verify_email', userId, config.auth.verification_timeout * 60);\n return omit(verification, 'token', 'role');\n },\n async POST(event) {\n const userId = event.params.id;\n const { token } = await parseBody(event, z.object({ token: z.string() }));\n const { user } = await checkAuthForUser(event, userId);\n if (user.emailVerified)\n error(409, 'Email already verified');\n await useVerification('verify_email', userId, token).catch(withError('Invalid or expired verification token', 400));\n return {};\n },\n});\n","import { readFileSync } from 'node:fs';\nimport { createServer } from 'node:http';\nimport { createServer as createSecureServer } from 'node:https';\nimport config from './config.js';\nimport '@axium/server/api/index';\nimport { loadDefaultConfigs } from '@axium/server/config';\nimport { clean, connect, database } from '@axium/server/database';\nimport { dirs, logger } from '@axium/server/io';\nimport { allLogLevels } from 'logzen';\nimport { createWriteStream } from 'node:fs';\nimport { join } from 'node:path/posix';\nexport async function serveSvelteKit(opt) {\n const { handler } = await import(opt.build || config.web.build);\n if (!opt.secure && !config.web.secure)\n return createServer(handler);\n return createSecureServer({ key: readFileSync(opt.ssl_key || config.web.ssl_key), cert: readFileSync(opt.ssl_cert || config.web.ssl_cert) }, handler);\n}\n/**\n * Perform initial setup for when the server is serving web pages.\n */\nexport async function init() {\n logger.attach(createWriteStream(join(dirs.at(-1), 'server.log')), { output: allLogLevels });\n await loadDefaultConfigs();\n connect();\n await clean({});\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n process.on('beforeExit', () => database.destroy());\n}\n","import { readFileSync } from 'node:fs';\nimport { styleText } from 'node:util';\nimport { render } from 'svelte/server';\nimport { config } from './config.js';\nimport { error, handleAPIRequest, handleResponseError, json } from './requests.js';\nimport { resolveRoute } from './routes.js';\nlet template = null;\nfunction fillSvelteKitTemplate({ head, body }, env = {}, nonce = '') {\n template ||= readFileSync(config.web.template, 'utf-8');\n return (template\n .replaceAll('%sveltekit.head%', head)\n .replaceAll('%sveltekit.body%', body)\n .replaceAll('%sveltekit.assets%', config.web.assets)\n // Unused for now.\n .replaceAll('%sveltekit.nonce%', nonce)\n .replace(/%sveltekit\\.env\\.([^%]+)%/g, (_match, key) => env[key] ?? ''));\n}\n/**\n * @internal\n */\nexport async function handleSvelteKit({ event, resolve, }) {\n const route = resolveRoute(event);\n if (!route && event.url.pathname === '/' && config.debug)\n return new Response(null, { status: 303, headers: { Location: '/_axium/default' } });\n if (config.debug)\n console.log(styleText('blueBright', event.request.method.padEnd(7)), route ? route.path : event.url.pathname);\n if (!route)\n return await resolve(event).catch(handleResponseError);\n if (route.server == true) {\n if (route.api)\n return await handleAPIRequest(event, route).catch(handleResponseError);\n const run = route[event.request.method];\n if (typeof run !== 'function') {\n error(405, `Method ${event.request.method} not allowed for ${route.path}`);\n }\n try {\n const result = await run(event);\n if (result instanceof Response)\n return result;\n return json(result);\n }\n catch (e) {\n return handleResponseError(e);\n }\n }\n const data = await route.load?.(event);\n const body = fillSvelteKitTemplate(render(route.page));\n return new Response(body, {\n headers: config.web.disable_cache\n ? {\n 'Content-Type': 'text/html; charset=utf-8',\n 'Cache-Control': 'no-cache, no-store, must-revalidate',\n Pragma: 'no-cache',\n Expires: '0',\n }\n : {},\n status: 200,\n });\n}\n","import { init } from \"@axium/server/serve\";\nimport { handleSvelteKit } from \"@axium/server/sveltekit\";\nawait init();\nexport {\n handleSvelteKit as handle\n};\n"],"names":["schemas.$ZodTuple","schemas.$ZodArray","schemas.$ZodUnknown","sym","z.custom","z.literal","z.object","z.string","z.array","z.enum","z.number","z.record","z.any","z.email","z.uuid","z.boolean","z.looseObject","z.function","z.partialRecord","z.prettifyError","z\n .looseObject","z\n .looseObject","z.date","z.url","io.debug","io.someWarnings","io.start","io.done","plugin","io.plugin","db","serializeCookie","registrations","email"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -29,15 +29,6 @@ function deferred() {
|
|
|
29
29
|
});
|
|
30
30
|
return { promise, resolve, reject };
|
|
31
31
|
}
|
|
32
|
-
function equals(value) {
|
|
33
|
-
return value === this.v;
|
|
34
|
-
}
|
|
35
|
-
function safe_not_equal(a, b) {
|
|
36
|
-
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
|
|
37
|
-
}
|
|
38
|
-
function safe_equals(value) {
|
|
39
|
-
return !safe_not_equal(value, this.v);
|
|
40
|
-
}
|
|
41
32
|
const DERIVED = 1 << 1;
|
|
42
33
|
const EFFECT = 1 << 2;
|
|
43
34
|
const BLOCK_EFFECT = 1 << 4;
|
|
@@ -432,217 +423,5 @@ function ensure_array_like(array_like_or_iterator) {
|
|
|
432
423
|
return [];
|
|
433
424
|
}
|
|
434
425
|
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
if (path[0] === "/" && path[1] === "/") return path;
|
|
438
|
-
let url = new URL(base, internal);
|
|
439
|
-
url = new URL(path, url);
|
|
440
|
-
return url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href;
|
|
441
|
-
}
|
|
442
|
-
function normalize_path(path, trailing_slash) {
|
|
443
|
-
if (path === "/" || trailing_slash === "ignore") return path;
|
|
444
|
-
if (trailing_slash === "never") {
|
|
445
|
-
return path.endsWith("/") ? path.slice(0, -1) : path;
|
|
446
|
-
} else if (trailing_slash === "always" && !path.endsWith("/")) {
|
|
447
|
-
return path + "/";
|
|
448
|
-
}
|
|
449
|
-
return path;
|
|
450
|
-
}
|
|
451
|
-
function decode_pathname(pathname) {
|
|
452
|
-
return pathname.split("%25").map(decodeURI).join("%25");
|
|
453
|
-
}
|
|
454
|
-
function decode_params(params) {
|
|
455
|
-
for (const key in params) {
|
|
456
|
-
params[key] = decodeURIComponent(params[key]);
|
|
457
|
-
}
|
|
458
|
-
return params;
|
|
459
|
-
}
|
|
460
|
-
function make_trackable(url, callback, search_params_callback, allow_hash = false) {
|
|
461
|
-
const tracked = new URL(url);
|
|
462
|
-
Object.defineProperty(tracked, "searchParams", {
|
|
463
|
-
value: new Proxy(tracked.searchParams, {
|
|
464
|
-
get(obj, key) {
|
|
465
|
-
if (key === "get" || key === "getAll" || key === "has") {
|
|
466
|
-
return (param) => {
|
|
467
|
-
search_params_callback(param);
|
|
468
|
-
return obj[key](param);
|
|
469
|
-
};
|
|
470
|
-
}
|
|
471
|
-
callback();
|
|
472
|
-
const value = Reflect.get(obj, key);
|
|
473
|
-
return typeof value === "function" ? value.bind(obj) : value;
|
|
474
|
-
}
|
|
475
|
-
}),
|
|
476
|
-
enumerable: true,
|
|
477
|
-
configurable: true
|
|
478
|
-
});
|
|
479
|
-
const tracked_url_properties = ["href", "pathname", "search", "toString", "toJSON"];
|
|
480
|
-
if (allow_hash) tracked_url_properties.push("hash");
|
|
481
|
-
for (const property of tracked_url_properties) {
|
|
482
|
-
Object.defineProperty(tracked, property, {
|
|
483
|
-
get() {
|
|
484
|
-
callback();
|
|
485
|
-
return url[property];
|
|
486
|
-
},
|
|
487
|
-
enumerable: true,
|
|
488
|
-
configurable: true
|
|
489
|
-
});
|
|
490
|
-
}
|
|
491
|
-
{
|
|
492
|
-
tracked[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => {
|
|
493
|
-
return inspect(url, opts);
|
|
494
|
-
};
|
|
495
|
-
tracked.searchParams[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => {
|
|
496
|
-
return inspect(url.searchParams, opts);
|
|
497
|
-
};
|
|
498
|
-
}
|
|
499
|
-
if (!allow_hash) {
|
|
500
|
-
disable_hash(tracked);
|
|
501
|
-
}
|
|
502
|
-
return tracked;
|
|
503
|
-
}
|
|
504
|
-
function disable_hash(url) {
|
|
505
|
-
allow_nodejs_console_log(url);
|
|
506
|
-
Object.defineProperty(url, "hash", {
|
|
507
|
-
get() {
|
|
508
|
-
throw new Error(
|
|
509
|
-
"Cannot access event.url.hash. Consider using `page.url.hash` inside a component instead"
|
|
510
|
-
);
|
|
511
|
-
}
|
|
512
|
-
});
|
|
513
|
-
}
|
|
514
|
-
function disable_search(url) {
|
|
515
|
-
allow_nodejs_console_log(url);
|
|
516
|
-
for (const property of ["search", "searchParams"]) {
|
|
517
|
-
Object.defineProperty(url, property, {
|
|
518
|
-
get() {
|
|
519
|
-
throw new Error(`Cannot access url.${property} on a page with prerendering enabled`);
|
|
520
|
-
}
|
|
521
|
-
});
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
function allow_nodejs_console_log(url) {
|
|
525
|
-
{
|
|
526
|
-
url[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => {
|
|
527
|
-
return inspect(new URL(url), opts);
|
|
528
|
-
};
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
const subscriber_queue = [];
|
|
532
|
-
function readable(value, start) {
|
|
533
|
-
return {
|
|
534
|
-
subscribe: writable(value, start).subscribe
|
|
535
|
-
};
|
|
536
|
-
}
|
|
537
|
-
function writable(value, start = noop) {
|
|
538
|
-
let stop = null;
|
|
539
|
-
const subscribers = /* @__PURE__ */ new Set();
|
|
540
|
-
function set(new_value) {
|
|
541
|
-
if (safe_not_equal(value, new_value)) {
|
|
542
|
-
value = new_value;
|
|
543
|
-
if (stop) {
|
|
544
|
-
const run_queue = !subscriber_queue.length;
|
|
545
|
-
for (const subscriber of subscribers) {
|
|
546
|
-
subscriber[1]();
|
|
547
|
-
subscriber_queue.push(subscriber, value);
|
|
548
|
-
}
|
|
549
|
-
if (run_queue) {
|
|
550
|
-
for (let i = 0; i < subscriber_queue.length; i += 2) {
|
|
551
|
-
subscriber_queue[i][0](subscriber_queue[i + 1]);
|
|
552
|
-
}
|
|
553
|
-
subscriber_queue.length = 0;
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
function update(fn) {
|
|
559
|
-
set(fn(
|
|
560
|
-
/** @type {T} */
|
|
561
|
-
value
|
|
562
|
-
));
|
|
563
|
-
}
|
|
564
|
-
function subscribe(run, invalidate = noop) {
|
|
565
|
-
const subscriber = [run, invalidate];
|
|
566
|
-
subscribers.add(subscriber);
|
|
567
|
-
if (subscribers.size === 1) {
|
|
568
|
-
stop = start(set, update) || noop;
|
|
569
|
-
}
|
|
570
|
-
run(
|
|
571
|
-
/** @type {T} */
|
|
572
|
-
value
|
|
573
|
-
);
|
|
574
|
-
return () => {
|
|
575
|
-
subscribers.delete(subscriber);
|
|
576
|
-
if (subscribers.size === 0 && stop) {
|
|
577
|
-
stop();
|
|
578
|
-
stop = null;
|
|
579
|
-
}
|
|
580
|
-
};
|
|
581
|
-
}
|
|
582
|
-
return { set, update, subscribe };
|
|
583
|
-
}
|
|
584
|
-
function validator(expected) {
|
|
585
|
-
function validate(module, file) {
|
|
586
|
-
if (!module) return;
|
|
587
|
-
for (const key in module) {
|
|
588
|
-
if (key[0] === "_" || expected.has(key)) continue;
|
|
589
|
-
const values = [...expected.values()];
|
|
590
|
-
const hint = hint_for_supported_files(key, file?.slice(file.lastIndexOf("."))) ?? `valid exports are ${values.join(", ")}, or anything with a '_' prefix`;
|
|
591
|
-
throw new Error(`Invalid export '${key}'${file ? ` in ${file}` : ""} (${hint})`);
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
return validate;
|
|
595
|
-
}
|
|
596
|
-
function hint_for_supported_files(key, ext = ".js") {
|
|
597
|
-
const supported_files = [];
|
|
598
|
-
if (valid_layout_exports.has(key)) {
|
|
599
|
-
supported_files.push(`+layout${ext}`);
|
|
600
|
-
}
|
|
601
|
-
if (valid_page_exports.has(key)) {
|
|
602
|
-
supported_files.push(`+page${ext}`);
|
|
603
|
-
}
|
|
604
|
-
if (valid_layout_server_exports.has(key)) {
|
|
605
|
-
supported_files.push(`+layout.server${ext}`);
|
|
606
|
-
}
|
|
607
|
-
if (valid_page_server_exports.has(key)) {
|
|
608
|
-
supported_files.push(`+page.server${ext}`);
|
|
609
|
-
}
|
|
610
|
-
if (valid_server_exports.has(key)) {
|
|
611
|
-
supported_files.push(`+server${ext}`);
|
|
612
|
-
}
|
|
613
|
-
if (supported_files.length > 0) {
|
|
614
|
-
return `'${key}' is a valid export in ${supported_files.slice(0, -1).join(", ")}${supported_files.length > 1 ? " or " : ""}${supported_files.at(-1)}`;
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
const valid_layout_exports = /* @__PURE__ */ new Set([
|
|
618
|
-
"load",
|
|
619
|
-
"prerender",
|
|
620
|
-
"csr",
|
|
621
|
-
"ssr",
|
|
622
|
-
"trailingSlash",
|
|
623
|
-
"config"
|
|
624
|
-
]);
|
|
625
|
-
const valid_page_exports = /* @__PURE__ */ new Set([...valid_layout_exports, "entries"]);
|
|
626
|
-
const valid_layout_server_exports = /* @__PURE__ */ new Set([...valid_layout_exports]);
|
|
627
|
-
const valid_page_server_exports = /* @__PURE__ */ new Set([...valid_layout_server_exports, "actions", "entries"]);
|
|
628
|
-
const valid_server_exports = /* @__PURE__ */ new Set([
|
|
629
|
-
"GET",
|
|
630
|
-
"POST",
|
|
631
|
-
"PATCH",
|
|
632
|
-
"PUT",
|
|
633
|
-
"DELETE",
|
|
634
|
-
"OPTIONS",
|
|
635
|
-
"HEAD",
|
|
636
|
-
"fallback",
|
|
637
|
-
"prerender",
|
|
638
|
-
"trailingSlash",
|
|
639
|
-
"config",
|
|
640
|
-
"entries"
|
|
641
|
-
]);
|
|
642
|
-
const validate_layout_exports = validator(valid_layout_exports);
|
|
643
|
-
const validate_page_exports = validator(valid_page_exports);
|
|
644
|
-
const validate_layout_server_exports = validator(valid_layout_server_exports);
|
|
645
|
-
const validate_page_server_exports = validator(valid_page_server_exports);
|
|
646
|
-
|
|
647
|
-
export { validate_layout_server_exports as $, ASYNC as A, BLOCK_EFFECT as B, COMMENT_NODE as C, DERIVED as D, ERROR_VALUE as E, REACTION_IS_UPDATING as F, EFFECT_RAN as G, HYDRATION_START as H, INERT as I, EFFECT_PRESERVED as J, HEAD_EFFECT as K, LEGACY_PROPS as L, MAYBE_DIRTY as M, BOUNDARY_EFFECT as N, EFFECT_TRANSPARENT as O, index_of as P, INSPECT_EFFECT as Q, ROOT_EFFECT as R, STATE_SYMBOL as S, push as T, UNOWNED as U, setContext as V, pop as W, decode_pathname as X, decode_params as Y, normalize_path as Z, disable_search as _, HYDRATION_ERROR as a, validate_layout_exports as a0, validate_page_server_exports as a1, validate_page_exports as a2, resolve as a3, make_trackable as a4, readable as a5, writable as a6, escape_html as a7, getContext as a8, copy_payload as a9, assign_payload as aa, head as ab, await_block as ac, ensure_array_like as ad, attr as ae, stringify as af, css_props as ag, attr_style as ah, spread_attributes as ai, bind_props as aj, spread_props as ak, attr_class as al, clsx as am, noop as an, HYDRATION_END as b, array_prototype as c, define_property as d, UNINITIALIZED as e, DIRTY as f, get_descriptor as g, CLEAN as h, DISCONNECTED as i, is_extensible as j, array_from as k, EFFECT as l, DEV as m, deferred as n, object_prototype as o, equals as p, get_prototype_of as q, render as r, safe_equals as s, is_array as t, is_passive_event as u, BRANCH_EFFECT as v, DESTROYED as w, USER_EFFECT as x, run_all as y, STALE_REACTION as z };
|
|
648
|
-
//# sourceMappingURL=exports-DeY8o0ws.js.map
|
|
426
|
+
export { await_block as $, ASYNC as A, BLOCK_EFFECT as B, COMMENT_NODE as C, DERIVED as D, ERROR_VALUE as E, EFFECT_PRESERVED as F, HEAD_EFFECT as G, HYDRATION_START as H, INERT as I, BOUNDARY_EFFECT as J, EFFECT_TRANSPARENT as K, LEGACY_PROPS as L, MAYBE_DIRTY as M, index_of as N, INSPECT_EFFECT as O, push as P, setContext as Q, ROOT_EFFECT as R, STATE_SYMBOL as S, pop as T, UNOWNED as U, escape_html as V, getContext as W, noop as X, copy_payload as Y, assign_payload as Z, head as _, HYDRATION_ERROR as a, ensure_array_like as a0, attr as a1, stringify as a2, css_props as a3, attr_style as a4, spread_attributes as a5, bind_props as a6, spread_props as a7, attr_class as a8, clsx as a9, HYDRATION_END as b, array_prototype as c, define_property as d, UNINITIALIZED as e, DIRTY as f, get_descriptor as g, CLEAN as h, DISCONNECTED as i, is_extensible as j, array_from as k, EFFECT as l, DEV as m, deferred as n, object_prototype as o, get_prototype_of as p, is_array as q, render as r, is_passive_event as s, BRANCH_EFFECT as t, DESTROYED as u, USER_EFFECT as v, run_all as w, STALE_REACTION as x, REACTION_IS_UPDATING as y, EFFECT_RAN as z };
|
|
427
|
+
//# sourceMappingURL=index-CBVFb-Fk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CBVFb-Fk.js","sources":["../../../../node_modules/clsx/dist/clsx.mjs","../../../.svelte-kit/adapter-node/chunks/index.js"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { clsx as clsx$1 } from \"clsx\";\nconst DEV = false;\nvar is_array = Array.isArray;\nvar index_of = Array.prototype.indexOf;\nvar array_from = Array.from;\nvar define_property = Object.defineProperty;\nvar get_descriptor = Object.getOwnPropertyDescriptor;\nvar object_prototype = Object.prototype;\nvar array_prototype = Array.prototype;\nvar get_prototype_of = Object.getPrototypeOf;\nvar is_extensible = Object.isExtensible;\nconst noop = () => {\n};\nfunction is_promise(value) {\n return typeof value?.then === \"function\";\n}\nfunction run_all(arr) {\n for (var i = 0; i < arr.length; i++) {\n arr[i]();\n }\n}\nfunction deferred() {\n var resolve;\n var reject;\n var promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\nconst DERIVED = 1 << 1;\nconst EFFECT = 1 << 2;\nconst BLOCK_EFFECT = 1 << 4;\nconst BRANCH_EFFECT = 1 << 5;\nconst ROOT_EFFECT = 1 << 6;\nconst BOUNDARY_EFFECT = 1 << 7;\nconst UNOWNED = 1 << 8;\nconst DISCONNECTED = 1 << 9;\nconst CLEAN = 1 << 10;\nconst DIRTY = 1 << 11;\nconst MAYBE_DIRTY = 1 << 12;\nconst INERT = 1 << 13;\nconst DESTROYED = 1 << 14;\nconst EFFECT_RAN = 1 << 15;\nconst EFFECT_TRANSPARENT = 1 << 16;\nconst INSPECT_EFFECT = 1 << 17;\nconst HEAD_EFFECT = 1 << 18;\nconst EFFECT_PRESERVED = 1 << 19;\nconst USER_EFFECT = 1 << 20;\nconst REACTION_IS_UPDATING = 1 << 21;\nconst ASYNC = 1 << 22;\nconst ERROR_VALUE = 1 << 23;\nconst STATE_SYMBOL = Symbol(\"$state\");\nconst LEGACY_PROPS = Symbol(\"legacy props\");\nconst STALE_REACTION = new class StaleReactionError extends Error {\n name = \"StaleReactionError\";\n message = \"The reaction that called `getAbortSignal()` was re-run or destroyed\";\n}();\nconst COMMENT_NODE = 8;\nfunction lifecycle_outside_component(name) {\n {\n throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);\n }\n}\nconst HYDRATION_START = \"[\";\nconst HYDRATION_START_ELSE = \"[!\";\nconst HYDRATION_END = \"]\";\nconst HYDRATION_ERROR = {};\nconst ELEMENT_IS_NAMESPACED = 1;\nconst ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\nconst UNINITIALIZED = Symbol();\nconst DOM_BOOLEAN_ATTRIBUTES = [\n \"allowfullscreen\",\n \"async\",\n \"autofocus\",\n \"autoplay\",\n \"checked\",\n \"controls\",\n \"default\",\n \"disabled\",\n \"formnovalidate\",\n \"hidden\",\n \"indeterminate\",\n \"inert\",\n \"ismap\",\n \"loop\",\n \"multiple\",\n \"muted\",\n \"nomodule\",\n \"novalidate\",\n \"open\",\n \"playsinline\",\n \"readonly\",\n \"required\",\n \"reversed\",\n \"seamless\",\n \"selected\",\n \"webkitdirectory\",\n \"defer\",\n \"disablepictureinpicture\",\n \"disableremoteplayback\"\n];\nfunction is_boolean_attribute(name) {\n return DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\nconst PASSIVE_EVENTS = [\"touchstart\", \"touchmove\"];\nfunction is_passive_event(name) {\n return PASSIVE_EVENTS.includes(name);\n}\nconst ATTR_REGEX = /[&\"<]/g;\nconst CONTENT_REGEX = /[&<]/g;\nfunction escape_html(value, is_attr) {\n const str = String(value ?? \"\");\n const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n pattern.lastIndex = 0;\n let escaped = \"\";\n let last = 0;\n while (pattern.test(str)) {\n const i = pattern.lastIndex - 1;\n const ch = str[i];\n escaped += str.substring(last, i) + (ch === \"&\" ? \"&\" : ch === '\"' ? \""\" : \"<\");\n last = i + 1;\n }\n return escaped + str.substring(last);\n}\nconst replacements = {\n translate: /* @__PURE__ */ new Map([\n [true, \"yes\"],\n [false, \"no\"]\n ])\n};\nfunction attr(name, value, is_boolean = false) {\n if (value == null || !value && is_boolean) return \"\";\n const normalized = name in replacements && replacements[name].get(value) || value;\n const assignment = is_boolean ? \"\" : `=\"${escape_html(normalized, true)}\"`;\n return ` ${name}${assignment}`;\n}\nfunction clsx(value) {\n if (typeof value === \"object\") {\n return clsx$1(value);\n } else {\n return value ?? \"\";\n }\n}\nfunction to_class(value, hash, directives) {\n var classname = value == null ? \"\" : \"\" + value;\n if (hash) {\n classname = classname ? classname + \" \" + hash : hash;\n }\n return classname === \"\" ? null : classname;\n}\nfunction append_styles(styles, important = false) {\n var separator = important ? \" !important;\" : \";\";\n var css = \"\";\n for (var key in styles) {\n var value = styles[key];\n if (value != null && value !== \"\") {\n css += \" \" + key + \": \" + value + separator;\n }\n }\n return css;\n}\nfunction to_style(value, styles) {\n if (styles) {\n var new_style = \"\";\n var normal_styles;\n var important_styles;\n if (Array.isArray(styles)) {\n normal_styles = styles[0];\n important_styles = styles[1];\n } else {\n normal_styles = styles;\n }\n if (normal_styles) {\n new_style += append_styles(normal_styles);\n }\n if (important_styles) {\n new_style += append_styles(important_styles, true);\n }\n new_style = new_style.trim();\n return new_style === \"\" ? null : new_style;\n }\n return String(value);\n}\nvar current_component = null;\nfunction getContext(key) {\n const context_map = get_or_init_context_map();\n const result = (\n /** @type {T} */\n context_map.get(key)\n );\n return result;\n}\nfunction setContext(key, context) {\n get_or_init_context_map().set(key, context);\n return context;\n}\nfunction get_or_init_context_map(name) {\n if (current_component === null) {\n lifecycle_outside_component();\n }\n return current_component.c ??= new Map(get_parent_context(current_component) || void 0);\n}\nfunction push(fn) {\n current_component = { p: current_component, c: null, d: null };\n}\nfunction pop() {\n var component = (\n /** @type {Component} */\n current_component\n );\n var ondestroy = component.d;\n if (ondestroy) {\n on_destroy.push(...ondestroy);\n }\n current_component = component.p;\n}\nfunction get_parent_context(component_context) {\n let parent = component_context.p;\n while (parent !== null) {\n const context_map = parent.c;\n if (context_map !== null) {\n return context_map;\n }\n parent = parent.p;\n }\n return null;\n}\nconst BLOCK_OPEN = `<!--${HYDRATION_START}-->`;\nconst BLOCK_OPEN_ELSE = `<!--${HYDRATION_START_ELSE}-->`;\nconst BLOCK_CLOSE = `<!--${HYDRATION_END}-->`;\nclass HeadPayload {\n /** @type {Set<{ hash: string; code: string }>} */\n css = /* @__PURE__ */ new Set();\n /** @type {string[]} */\n out = [];\n uid = () => \"\";\n title = \"\";\n constructor(css = /* @__PURE__ */ new Set(), out = [], title = \"\", uid = () => \"\") {\n this.css = css;\n this.out = out;\n this.title = title;\n this.uid = uid;\n }\n}\nclass Payload {\n /** @type {Set<{ hash: string; code: string }>} */\n css = /* @__PURE__ */ new Set();\n /** @type {string[]} */\n out = [];\n uid = () => \"\";\n select_value = void 0;\n head = new HeadPayload();\n constructor(id_prefix = \"\") {\n this.uid = props_id_generator(id_prefix);\n this.head.uid = this.uid;\n }\n}\nfunction copy_payload({ out, css, head: head2, uid }) {\n const payload = new Payload();\n payload.out = [...out];\n payload.css = new Set(css);\n payload.uid = uid;\n payload.head = new HeadPayload();\n payload.head.out = [...head2.out];\n payload.head.css = new Set(head2.css);\n payload.head.title = head2.title;\n payload.head.uid = head2.uid;\n return payload;\n}\nfunction assign_payload(p1, p2) {\n p1.out = [...p2.out];\n p1.css = p2.css;\n p1.head = p2.head;\n p1.uid = p2.uid;\n}\nfunction props_id_generator(prefix) {\n let uid = 1;\n return () => `${prefix}s${uid++}`;\n}\nfunction reset_elements() {\n return () => {\n };\n}\nlet controller = null;\nfunction abort() {\n controller?.abort(STALE_REACTION);\n controller = null;\n}\nconst INVALID_ATTR_NAME_CHAR_REGEX = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\nlet on_destroy = [];\nfunction render(component, options = {}) {\n try {\n const payload = new Payload(options.idPrefix ? options.idPrefix + \"-\" : \"\");\n const prev_on_destroy = on_destroy;\n on_destroy = [];\n payload.out.push(BLOCK_OPEN);\n let reset_reset_element;\n if (DEV) ;\n if (options.context) {\n push();\n current_component.c = options.context;\n }\n component(payload, options.props ?? {}, {}, {});\n if (options.context) {\n pop();\n }\n if (reset_reset_element) {\n reset_reset_element();\n }\n payload.out.push(BLOCK_CLOSE);\n for (const cleanup of on_destroy) cleanup();\n on_destroy = prev_on_destroy;\n let head2 = payload.head.out.join(\"\") + payload.head.title;\n for (const { hash, code } of payload.css) {\n head2 += `<style id=\"${hash}\">${code}</style>`;\n }\n const body = payload.out.join(\"\");\n return {\n head: head2,\n html: body,\n body\n };\n } finally {\n abort();\n }\n}\nfunction head(payload, fn) {\n const head_payload = payload.head;\n head_payload.out.push(BLOCK_OPEN);\n fn(head_payload);\n head_payload.out.push(BLOCK_CLOSE);\n}\nfunction css_props(payload, is_html, props, component, dynamic = false) {\n const styles = style_object_to_string(props);\n {\n payload.out.push(`<svelte-css-wrapper style=\"display: contents; ${styles}\">`);\n }\n if (dynamic) {\n payload.out.push(\"<!---->\");\n }\n component();\n {\n payload.out.push(`<!----></svelte-css-wrapper>`);\n }\n}\nfunction spread_attributes(attrs, css_hash, classes, styles, flags = 0) {\n if (attrs.class) {\n attrs.class = clsx(attrs.class);\n }\n if (css_hash || classes) {\n attrs.class = to_class(attrs.class, css_hash);\n }\n let attr_str = \"\";\n let name;\n const is_html = (flags & ELEMENT_IS_NAMESPACED) === 0;\n const lowercase = (flags & ELEMENT_PRESERVE_ATTRIBUTE_CASE) === 0;\n for (name in attrs) {\n if (typeof attrs[name] === \"function\") continue;\n if (name[0] === \"$\" && name[1] === \"$\") continue;\n if (INVALID_ATTR_NAME_CHAR_REGEX.test(name)) continue;\n var value = attrs[name];\n if (lowercase) {\n name = name.toLowerCase();\n }\n attr_str += attr(name, value, is_html && is_boolean_attribute(name));\n }\n return attr_str;\n}\nfunction spread_props(props) {\n const merged_props = {};\n let key;\n for (let i = 0; i < props.length; i++) {\n const obj = props[i];\n for (key in obj) {\n const desc = Object.getOwnPropertyDescriptor(obj, key);\n if (desc) {\n Object.defineProperty(merged_props, key, desc);\n } else {\n merged_props[key] = obj[key];\n }\n }\n }\n return merged_props;\n}\nfunction stringify(value) {\n return typeof value === \"string\" ? value : value == null ? \"\" : value + \"\";\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object).filter(\n /** @param {any} key */\n (key) => style_object[key] != null && style_object[key] !== \"\"\n ).map(\n /** @param {any} key */\n (key) => `${key}: ${escape_html(style_object[key], true)};`\n ).join(\" \");\n}\nfunction attr_class(value, hash, directives) {\n var result = to_class(value, hash);\n return result ? ` class=\"${escape_html(result, true)}\"` : \"\";\n}\nfunction attr_style(value, directives) {\n var result = to_style(value, directives);\n return result ? ` style=\"${escape_html(result, true)}\"` : \"\";\n}\nfunction bind_props(props_parent, props_now) {\n for (const key in props_now) {\n const initial_value = props_parent[key];\n const value = props_now[key];\n if (initial_value === void 0 && value !== void 0 && Object.getOwnPropertyDescriptor(props_parent, key)?.set) {\n props_parent[key] = value;\n }\n }\n}\nfunction await_block(payload, promise, pending_fn, then_fn) {\n if (is_promise(promise)) {\n payload.out.push(BLOCK_OPEN);\n promise.then(null, noop);\n } else if (then_fn !== null) {\n payload.out.push(BLOCK_OPEN_ELSE);\n then_fn(promise);\n }\n}\nfunction ensure_array_like(array_like_or_iterator) {\n if (array_like_or_iterator) {\n return array_like_or_iterator.length !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator);\n }\n return [];\n}\nexport {\n assign_payload as $,\n ASYNC as A,\n BOUNDARY_EFFECT as B,\n CLEAN as C,\n DEV as D,\n ERROR_VALUE as E,\n COMMENT_NODE as F,\n HYDRATION_START as G,\n HYDRATION_ERROR as H,\n INERT as I,\n HYDRATION_END as J,\n array_from as K,\n is_passive_event as L,\n MAYBE_DIRTY as M,\n LEGACY_PROPS as N,\n render as O,\n push as P,\n setContext as Q,\n ROOT_EFFECT as R,\n STATE_SYMBOL as S,\n pop as T,\n UNOWNED as U,\n noop as V,\n getContext as W,\n escape_html as X,\n spread_attributes as Y,\n attr as Z,\n copy_payload as _,\n EFFECT_RAN as a,\n head as a0,\n await_block as a1,\n ensure_array_like as a2,\n stringify as a3,\n css_props as a4,\n attr_style as a5,\n bind_props as a6,\n spread_props as a7,\n attr_class as a8,\n clsx as a9,\n DERIVED as b,\n EFFECT as c,\n define_property as d,\n BLOCK_EFFECT as e,\n deferred as f,\n BRANCH_EFFECT as g,\n DIRTY as h,\n DESTROYED as i,\n USER_EFFECT as j,\n INSPECT_EFFECT as k,\n array_prototype as l,\n UNINITIALIZED as m,\n get_descriptor as n,\n object_prototype as o,\n get_prototype_of as p,\n is_array as q,\n run_all as r,\n is_extensible as s,\n EFFECT_PRESERVED as t,\n HEAD_EFFECT as u,\n STALE_REACTION as v,\n EFFECT_TRANSPARENT as w,\n DISCONNECTED as x,\n REACTION_IS_UPDATING as y,\n index_of as z\n};\n"],"names":["clsx"],"mappings":"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","x_google_ignoreList":[0]}
|