@access-dlsu/leapify 0.260507.4 → 0.260507.5
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/dist/auth/auth.d.ts.map +1 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/{chunk-LJ5BSSYE.js → chunk-5YYVBPAE.js} +20 -5
- package/dist/chunk-5YYVBPAE.js.map +1 -0
- package/dist/{chunk-BFMJDSDI.cjs → chunk-LVKPYSXI.cjs} +20 -5
- package/dist/chunk-LVKPYSXI.cjs.map +1 -0
- package/dist/{chunk-MCOLCTFX.js → chunk-OZ6HZKR5.js} +20 -5
- package/dist/chunk-OZ6HZKR5.js.map +1 -0
- package/dist/{chunk-MKWVLWVJ.cjs → chunk-S5DBMZVP.cjs} +20 -5
- package/dist/chunk-S5DBMZVP.cjs.map +1 -0
- package/dist/client/auth.d.ts +1 -13
- package/dist/client/auth.d.ts.map +1 -1
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/index.cjs +63 -31
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +41 -9
- package/dist/index.js.map +1 -1
- package/dist/lib/middleware/cors.d.ts.map +1 -1
- package/dist/lib/middleware/pow-challenge.cjs +6 -6
- package/dist/lib/middleware/pow-challenge.d.ts.map +1 -1
- package/dist/lib/middleware/pow-challenge.js +1 -1
- package/dist/worker.js +58 -11
- package/dist/worker.js.map +1 -1
- package/package.json +153 -153
- package/dist/chunk-BFMJDSDI.cjs.map +0 -1
- package/dist/chunk-LJ5BSSYE.js.map +0 -1
- package/dist/chunk-MCOLCTFX.js.map +0 -1
- package/dist/chunk-MKWVLWVJ.cjs.map +0 -1
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/better-auth/dist/client/broadcast-channel.mjs","../../node_modules/better-auth/dist/client/focus-manager.mjs","../../node_modules/better-auth/dist/client/online-manager.mjs","../../node_modules/better-auth/dist/client/parser.mjs","../../node_modules/nanostores/clean-stores/index.js","../../node_modules/nanostores/atom/index.js","../../node_modules/nanostores/lifecycle/index.js","../../node_modules/better-auth/dist/client/query.mjs","../../node_modules/better-auth/dist/client/session-refresh.mjs","../../node_modules/better-auth/dist/client/fetch-plugins.mjs","../../node_modules/better-auth/dist/client/session-atom.mjs","../../node_modules/better-auth/dist/client/config.mjs","../../node_modules/better-auth/dist/utils/is-atom.mjs","../../node_modules/better-auth/dist/client/proxy.mjs","../../node_modules/better-auth/dist/client/vanilla.mjs","../../src/client/auth.ts","../../src/client/pow.ts","../../src/client/session.ts","../../src/client/index.ts"],"names":["value","now","getClientConfig"],"mappings":"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","file":"index.js","sourcesContent":["//#region src/client/broadcast-channel.ts\nconst kBroadcastChannel = Symbol.for(\"better-auth:broadcast-channel\");\nconst now = () => Math.floor(Date.now() / 1e3);\nvar WindowBroadcastChannel = class {\n\tlisteners = /* @__PURE__ */ new Set();\n\tname;\n\tconstructor(name = \"better-auth.message\") {\n\t\tthis.name = name;\n\t}\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\tpost(message) {\n\t\tif (typeof window === \"undefined\") return;\n\t\ttry {\n\t\t\tlocalStorage.setItem(this.name, JSON.stringify({\n\t\t\t\t...message,\n\t\t\t\ttimestamp: now()\n\t\t\t}));\n\t\t} catch {}\n\t}\n\tsetup() {\n\t\tif (typeof window === \"undefined\" || typeof window.addEventListener === \"undefined\") return () => {};\n\t\tconst handler = (event) => {\n\t\t\tif (event.key !== this.name) return;\n\t\t\tconst message = JSON.parse(event.newValue ?? \"{}\");\n\t\t\tif (message?.event !== \"session\" || !message?.data) return;\n\t\t\tthis.listeners.forEach((listener) => listener(message));\n\t\t};\n\t\twindow.addEventListener(\"storage\", handler);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"storage\", handler);\n\t\t};\n\t}\n};\nfunction getGlobalBroadcastChannel(name = \"better-auth.message\") {\n\tif (!globalThis[kBroadcastChannel]) globalThis[kBroadcastChannel] = new WindowBroadcastChannel(name);\n\treturn globalThis[kBroadcastChannel];\n}\n//#endregion\nexport { getGlobalBroadcastChannel, kBroadcastChannel };\n","//#region src/client/focus-manager.ts\nconst kFocusManager = Symbol.for(\"better-auth:focus-manager\");\nvar WindowFocusManager = class {\n\tlisteners = /* @__PURE__ */ new Set();\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\tsetFocused(focused) {\n\t\tthis.listeners.forEach((listener) => listener(focused));\n\t}\n\tsetup() {\n\t\tif (typeof window === \"undefined\" || typeof document === \"undefined\" || typeof window.addEventListener === \"undefined\") return () => {};\n\t\tconst visibilityHandler = () => {\n\t\t\tif (document.visibilityState === \"visible\") this.setFocused(true);\n\t\t};\n\t\tdocument.addEventListener(\"visibilitychange\", visibilityHandler, false);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"visibilitychange\", visibilityHandler, false);\n\t\t};\n\t}\n};\nfunction getGlobalFocusManager() {\n\tif (!globalThis[kFocusManager]) globalThis[kFocusManager] = new WindowFocusManager();\n\treturn globalThis[kFocusManager];\n}\n//#endregion\nexport { getGlobalFocusManager, kFocusManager };\n","//#region src/client/online-manager.ts\nconst kOnlineManager = Symbol.for(\"better-auth:online-manager\");\nvar WindowOnlineManager = class {\n\tlisteners = /* @__PURE__ */ new Set();\n\tisOnline = typeof navigator !== \"undefined\" ? navigator.onLine : true;\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\tsetOnline(online) {\n\t\tthis.isOnline = online;\n\t\tthis.listeners.forEach((listener) => listener(online));\n\t}\n\tsetup() {\n\t\tif (typeof window === \"undefined\" || typeof window.addEventListener === \"undefined\") return () => {};\n\t\tconst onOnline = () => this.setOnline(true);\n\t\tconst onOffline = () => this.setOnline(false);\n\t\twindow.addEventListener(\"online\", onOnline, false);\n\t\twindow.addEventListener(\"offline\", onOffline, false);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"online\", onOnline, false);\n\t\t\twindow.removeEventListener(\"offline\", onOffline, false);\n\t\t};\n\t}\n};\nfunction getGlobalOnlineManager() {\n\tif (!globalThis[kOnlineManager]) globalThis[kOnlineManager] = new WindowOnlineManager();\n\treturn globalThis[kOnlineManager];\n}\n//#endregion\nexport { getGlobalOnlineManager, kOnlineManager };\n","//#region src/client/parser.ts\nconst PROTO_POLLUTION_PATTERNS = {\n\tproto: /\"(?:_|\\\\u0{2}5[Ff]){2}(?:p|\\\\u0{2}70)(?:r|\\\\u0{2}72)(?:o|\\\\u0{2}6[Ff])(?:t|\\\\u0{2}74)(?:o|\\\\u0{2}6[Ff])(?:_|\\\\u0{2}5[Ff]){2}\"\\s*:/,\n\tconstructor: /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/,\n\tprotoShort: /\"__proto__\"\\s*:/,\n\tconstructorShort: /\"constructor\"\\s*:/\n};\nconst JSON_SIGNATURE = /^\\s*[\"[{]|^\\s*-?\\d{1,16}(\\.\\d{1,17})?([Ee][+-]?\\d+)?\\s*$/;\nconst SPECIAL_VALUES = {\n\ttrue: true,\n\tfalse: false,\n\tnull: null,\n\tundefined: void 0,\n\tnan: NaN,\n\tinfinity: Number.POSITIVE_INFINITY,\n\t\"-infinity\": Number.NEGATIVE_INFINITY\n};\nconst ISO_DATE_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,7}))?(?:Z|([+-])(\\d{2}):(\\d{2}))$/;\nfunction isValidDate(date) {\n\treturn date instanceof Date && !isNaN(date.getTime());\n}\nfunction parseISODate(value) {\n\tconst match = ISO_DATE_REGEX.exec(value);\n\tif (!match) return null;\n\tconst [, year, month, day, hour, minute, second, ms, offsetSign, offsetHour, offsetMinute] = match;\n\tconst date = new Date(Date.UTC(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10), parseInt(hour, 10), parseInt(minute, 10), parseInt(second, 10), ms ? parseInt(ms.padEnd(3, \"0\"), 10) : 0));\n\tif (offsetSign) {\n\t\tconst offset = (parseInt(offsetHour, 10) * 60 + parseInt(offsetMinute, 10)) * (offsetSign === \"+\" ? -1 : 1);\n\t\tdate.setUTCMinutes(date.getUTCMinutes() + offset);\n\t}\n\treturn isValidDate(date) ? date : null;\n}\nfunction betterJSONParse(value, options = {}) {\n\tconst { strict = false, warnings = false, reviver, parseDates = true } = options;\n\tif (typeof value !== \"string\") return value;\n\tconst trimmed = value.trim();\n\tif (trimmed.length > 0 && trimmed[0] === \"\\\"\" && trimmed.endsWith(\"\\\"\") && !trimmed.slice(1, -1).includes(\"\\\"\")) return trimmed.slice(1, -1);\n\tconst lowerValue = trimmed.toLowerCase();\n\tif (lowerValue.length <= 9 && lowerValue in SPECIAL_VALUES) return SPECIAL_VALUES[lowerValue];\n\tif (!JSON_SIGNATURE.test(trimmed)) {\n\t\tif (strict) throw new SyntaxError(\"[better-json] Invalid JSON\");\n\t\treturn value;\n\t}\n\tif (Object.entries(PROTO_POLLUTION_PATTERNS).some(([key, pattern]) => {\n\t\tconst matches = pattern.test(trimmed);\n\t\tif (matches && warnings) console.warn(`[better-json] Detected potential prototype pollution attempt using ${key} pattern`);\n\t\treturn matches;\n\t}) && strict) throw new Error(\"[better-json] Potential prototype pollution attempt detected\");\n\ttry {\n\t\tconst secureReviver = (key, value) => {\n\t\t\tif (key === \"__proto__\" || key === \"constructor\" && value && typeof value === \"object\" && \"prototype\" in value) {\n\t\t\t\tif (warnings) console.warn(`[better-json] Dropping \"${key}\" key to prevent prototype pollution`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parseDates && typeof value === \"string\") {\n\t\t\t\tconst date = parseISODate(value);\n\t\t\t\tif (date) return date;\n\t\t\t}\n\t\t\treturn reviver ? reviver(key, value) : value;\n\t\t};\n\t\treturn JSON.parse(trimmed, secureReviver);\n\t} catch (error) {\n\t\tif (strict) throw error;\n\t\treturn value;\n\t}\n}\nfunction parseJSON(value, options = { strict: true }) {\n\treturn betterJSONParse(value, options);\n}\n//#endregion\nexport { parseJSON };\n","import { cleanTasks } from '../task/index.js'\n\nexport const clean = Symbol('clean')\n\nexport const cleanStores = (...stores) => {\n if (process.env.NODE_ENV === 'production') {\n throw new Error(\n 'cleanStores() can be used only during development or tests'\n )\n }\n cleanTasks()\n for (let $store of stores) {\n if ($store) {\n if ($store.mocked) delete $store.mocked\n if ($store[clean]) $store[clean]()\n }\n }\n}\n","import { clean } from '../clean-stores/index.js'\n\nlet listenerQueue = []\nlet lqIndex = 0\nconst QUEUE_ITEMS_PER_LISTENER = 4\n// Use globalThis.nanostoresGlobal to store epoch so all module instances share\n// the same counter. This fixes issues when Nano Store is bundled separately\n// in different parts of an application (e.g., tree-shaking separates core\n// from React), causing each bundle to have its own epoch instance.\nexport const nanostoresGlobal = (globalThis.nanostoresGlobal ||= { epoch: 0 })\n\n/* @__NO_SIDE_EFFECTS__ */\nexport const atom = initialValue => {\n let listeners = []\n let $atom = {\n get() {\n if (!$atom.lc) {\n $atom.listen(() => {})()\n }\n return $atom.value\n },\n init: initialValue,\n lc: 0,\n listen(listener) {\n $atom.lc = listeners.push(listener)\n\n return () => {\n for (\n let i = lqIndex + QUEUE_ITEMS_PER_LISTENER;\n i < listenerQueue.length;\n ) {\n if (listenerQueue[i] === listener) {\n listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER)\n } else {\n i += QUEUE_ITEMS_PER_LISTENER\n }\n }\n\n let index = listeners.indexOf(listener)\n if (~index) {\n listeners.splice(index, 1)\n if (!--$atom.lc) $atom.off()\n }\n }\n },\n notify(oldValue, changedKey) {\n nanostoresGlobal.epoch++\n let runListenerQueue = !listenerQueue.length\n for (let listener of listeners) {\n listenerQueue.push(listener, $atom.value, oldValue, changedKey)\n }\n\n if (runListenerQueue) {\n for (\n lqIndex = 0;\n lqIndex < listenerQueue.length;\n lqIndex += QUEUE_ITEMS_PER_LISTENER\n ) {\n listenerQueue[lqIndex](\n listenerQueue[lqIndex + 1],\n listenerQueue[lqIndex + 2],\n listenerQueue[lqIndex + 3]\n )\n }\n listenerQueue.length = 0\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {},\n set(newValue) {\n let oldValue = $atom.value\n if (oldValue !== newValue) {\n $atom.value = newValue\n $atom.notify(oldValue)\n }\n },\n subscribe(listener) {\n let unbind = $atom.listen(listener)\n listener($atom.value)\n return unbind\n },\n value: initialValue\n }\n\n if (process.env.NODE_ENV !== 'production') {\n $atom[clean] = () => {\n listeners = []\n $atom.lc = 0\n $atom.off()\n }\n }\n\n return $atom\n}\n\nexport const readonlyType = store => store\n","import { clean } from '../clean-stores/index.js'\n\nconst START = 0\nconst STOP = 1\nconst SET = 2\nconst NOTIFY = 3\nconst MOUNT = 5\nconst UNMOUNT = 6\nconst REVERT_MUTATION = 10\n\nexport let on = (object, listener, eventKey, mutateStore) => {\n object.events = object.events || {}\n if (!object.events[eventKey + REVERT_MUTATION]) {\n object.events[eventKey + REVERT_MUTATION] = mutateStore(eventProps => {\n // eslint-disable-next-line no-sequences\n object.events[eventKey].reduceRight((event, l) => (l(event), event), {\n shared: {},\n ...eventProps\n })\n })\n }\n object.events[eventKey] = object.events[eventKey] || []\n object.events[eventKey].push(listener)\n return () => {\n let currentListeners = object.events[eventKey]\n let index = currentListeners.indexOf(listener)\n currentListeners.splice(index, 1)\n if (!currentListeners.length) {\n delete object.events[eventKey]\n object.events[eventKey + REVERT_MUTATION]()\n delete object.events[eventKey + REVERT_MUTATION]\n }\n }\n}\n\nexport let onStart = ($store, listener) =>\n on($store, listener, START, runListeners => {\n let originListen = $store.listen\n $store.listen = arg => {\n if (!$store.lc && !$store.starting) {\n $store.starting = true\n runListeners()\n delete $store.starting\n }\n return originListen(arg)\n }\n return () => {\n $store.listen = originListen\n }\n })\n\nexport let onStop = ($store, listener) =>\n on($store, listener, STOP, runListeners => {\n let originOff = $store.off\n $store.off = () => {\n runListeners()\n originOff()\n }\n return () => {\n $store.off = originOff\n }\n })\n\nexport let onSet = ($store, listener) =>\n on($store, listener, SET, runListeners => {\n let originSet = $store.set\n let originSetKey = $store.setKey\n if ($store.setKey) {\n $store.setKey = (changed, changedValue) => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({\n abort,\n changed,\n newValue: { ...$store.value, [changed]: changedValue }\n })\n if (!isAborted) return originSetKey(changed, changedValue)\n }\n }\n $store.set = newValue => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({ abort, newValue })\n if (!isAborted) return originSet(newValue)\n }\n return () => {\n $store.set = originSet\n $store.setKey = originSetKey\n }\n })\n\nexport let onNotify = ($store, listener) =>\n on($store, listener, NOTIFY, runListeners => {\n let originNotify = $store.notify\n $store.notify = (oldValue, changed) => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({ abort, changed, oldValue })\n if (!isAborted) return originNotify(oldValue, changed)\n }\n return () => {\n $store.notify = originNotify\n }\n })\n\nexport const STORE_UNMOUNT_DELAY = 1000\n\nexport let onMount = ($store, initialize) => {\n let listener = payload => {\n let destroy = initialize(payload)\n if (destroy) $store.events[UNMOUNT].push(destroy)\n }\n return on($store, listener, MOUNT, runListeners => {\n let originListen = $store.listen\n $store.listen = (...args) => {\n if (!$store.lc && !$store.active) {\n $store.active = true\n runListeners()\n }\n return originListen(...args)\n }\n\n let originOff = $store.off\n $store.events[UNMOUNT] = []\n $store.off = () => {\n originOff()\n setTimeout(() => {\n if ($store.active && !$store.lc) {\n $store.active = false\n for (let destroy of $store.events[UNMOUNT]) destroy()\n $store.events[UNMOUNT] = []\n }\n }, STORE_UNMOUNT_DELAY)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n let originClean = $store[clean]\n $store[clean] = () => {\n for (let destroy of $store.events[UNMOUNT]) destroy()\n $store.events[UNMOUNT] = []\n $store.active = false\n originClean()\n }\n }\n\n return () => {\n $store.listen = originListen\n $store.off = originOff\n }\n })\n}\n","import { atom, onMount } from \"nanostores\";\n//#region src/client/query.ts\nconst isServer = () => typeof window === \"undefined\";\nconst useAuthQuery = (initializedAtom, path, $fetch, options) => {\n\tconst value = atom({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: true,\n\t\tisRefetching: false,\n\t\trefetch: (queryParams) => fn(queryParams)\n\t});\n\tconst fn = async (queryParams) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst opts = typeof options === \"function\" ? options({\n\t\t\t\tdata: value.get().data,\n\t\t\t\terror: value.get().error,\n\t\t\t\tisPending: value.get().isPending\n\t\t\t}) : options;\n\t\t\t$fetch(path, {\n\t\t\t\t...opts,\n\t\t\t\tquery: {\n\t\t\t\t\t...opts?.query,\n\t\t\t\t\t...queryParams?.query\n\t\t\t\t},\n\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\tdata: context.data,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t\t},\n\t\t\t\tasync onError(context) {\n\t\t\t\t\tconst { request } = context;\n\t\t\t\t\tconst retryAttempts = typeof request.retry === \"number\" ? request.retry : request.retry?.attempts;\n\t\t\t\t\tconst retryAttempt = request.retryAttempt || 0;\n\t\t\t\t\tif (retryAttempts && retryAttempt < retryAttempts) return;\n\t\t\t\t\tconst isUnauthorized = context.error.status === 401;\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\terror: context.error,\n\t\t\t\t\t\tdata: isUnauthorized ? null : value.get().data,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onError?.(context);\n\t\t\t\t},\n\t\t\t\tasync onRequest(context) {\n\t\t\t\t\tconst currentValue = value.get();\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\tisPending: currentValue.data === null,\n\t\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tisRefetching: true,\n\t\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror,\n\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\tisPending: false,\n\t\t\t\t\tisRefetching: false,\n\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t});\n\t\t\t}).finally(() => {\n\t\t\t\tresolve(void 0);\n\t\t\t});\n\t\t});\n\t};\n\tinitializedAtom = Array.isArray(initializedAtom) ? initializedAtom : [initializedAtom];\n\tlet isInitialized = false;\n\tfor (const initAtom of initializedAtom) initAtom.subscribe(async () => {\n\t\tif (isServer()) return;\n\t\tif (isInitialized) await fn();\n\t\telse onMount(value, () => {\n\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\tif (!isInitialized) {\n\t\t\t\t\tisInitialized = true;\n\t\t\t\t\tawait fn();\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t\treturn () => {\n\t\t\t\tvalue.off();\n\t\t\t\tinitAtom.off();\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t};\n\t\t});\n\t});\n\treturn value;\n};\n//#endregion\nexport { useAuthQuery };\n","import { getGlobalBroadcastChannel } from \"./broadcast-channel.mjs\";\nimport { getGlobalFocusManager } from \"./focus-manager.mjs\";\nimport { getGlobalOnlineManager } from \"./online-manager.mjs\";\n//#region src/client/session-refresh.ts\nconst now = () => Math.floor(Date.now() / 1e3);\n/**\n* Normalize $fetch response: `throw: true` returns data directly, otherwise `{ data, error }`.\n*/\nfunction normalizeSessionResponse(res) {\n\tif (typeof res === \"object\" && res !== null && \"data\" in res && \"error\" in res) return res;\n\treturn {\n\t\tdata: res,\n\t\terror: null\n\t};\n}\n/**\n* Rate limit: don't refetch on focus if a session request was made within this many seconds\n*/\nconst FOCUS_REFETCH_RATE_LIMIT_SECONDS = 5;\nfunction createSessionRefreshManager(opts) {\n\tconst { sessionAtom, sessionSignal, $fetch, options = {} } = opts;\n\tconst refetchInterval = options.sessionOptions?.refetchInterval ?? 0;\n\tconst refetchOnWindowFocus = options.sessionOptions?.refetchOnWindowFocus ?? true;\n\tconst refetchWhenOffline = options.sessionOptions?.refetchWhenOffline ?? false;\n\tconst state = {\n\t\tlastSync: 0,\n\t\tlastSessionRequest: 0,\n\t\tcachedSession: void 0\n\t};\n\tconst shouldRefetch = () => {\n\t\treturn refetchWhenOffline || getGlobalOnlineManager().isOnline;\n\t};\n\tconst triggerRefetch = (event) => {\n\t\tif (!shouldRefetch()) return;\n\t\tif (event?.event === \"storage\") {\n\t\t\tstate.lastSync = now();\n\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t\treturn;\n\t\t}\n\t\tconst currentSession = sessionAtom.get();\n\t\tconst fetchSessionWithRefresh = () => {\n\t\t\tstate.lastSessionRequest = now();\n\t\t\t$fetch(\"/get-session\").then(async (res) => {\n\t\t\t\tlet { data, error } = normalizeSessionResponse(res);\n\t\t\t\tif (data?.needsRefresh) try {\n\t\t\t\t\tconst refreshRes = await $fetch(\"/get-session\", { method: \"POST\" });\n\t\t\t\t\t({data, error} = normalizeSessionResponse(refreshRes));\n\t\t\t\t} catch {}\n\t\t\t\tconst sessionData = data?.session && data?.user ? data : null;\n\t\t\t\tsessionAtom.set({\n\t\t\t\t\t...currentSession,\n\t\t\t\t\tdata: sessionData,\n\t\t\t\t\terror\n\t\t\t\t});\n\t\t\t\tstate.lastSync = now();\n\t\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t\t}).catch(() => {});\n\t\t};\n\t\tif (event?.event === \"poll\") {\n\t\t\tfetchSessionWithRefresh();\n\t\t\treturn;\n\t\t}\n\t\tif (event?.event === \"visibilitychange\") {\n\t\t\tif (now() - state.lastSessionRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS) return;\n\t\t\tstate.lastSessionRequest = now();\n\t\t}\n\t\tif (event?.event === \"visibilitychange\") {\n\t\t\tfetchSessionWithRefresh();\n\t\t\treturn;\n\t\t}\n\t\tif (currentSession?.data === null || currentSession?.data === void 0) {\n\t\t\tstate.lastSync = now();\n\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t}\n\t};\n\tconst broadcastSessionUpdate = (trigger) => {\n\t\tgetGlobalBroadcastChannel().post({\n\t\t\tevent: \"session\",\n\t\t\tdata: { trigger },\n\t\t\tclientId: Math.random().toString(36).substring(7)\n\t\t});\n\t};\n\tconst setupPolling = () => {\n\t\tif (refetchInterval && refetchInterval > 0) state.pollInterval = setInterval(() => {\n\t\t\tif (sessionAtom.get()?.data) triggerRefetch({ event: \"poll\" });\n\t\t}, refetchInterval * 1e3);\n\t};\n\tconst setupBroadcast = () => {\n\t\tstate.unsubscribeBroadcast = getGlobalBroadcastChannel().subscribe(() => {\n\t\t\ttriggerRefetch({ event: \"storage\" });\n\t\t});\n\t};\n\tconst setupFocusRefetch = () => {\n\t\tif (!refetchOnWindowFocus) return;\n\t\tstate.unsubscribeFocus = getGlobalFocusManager().subscribe(() => {\n\t\t\ttriggerRefetch({ event: \"visibilitychange\" });\n\t\t});\n\t};\n\tconst setupOnlineRefetch = () => {\n\t\tstate.unsubscribeOnline = getGlobalOnlineManager().subscribe((online) => {\n\t\t\tif (online) triggerRefetch({ event: \"visibilitychange\" });\n\t\t});\n\t};\n\tconst init = () => {\n\t\tsetupPolling();\n\t\tsetupBroadcast();\n\t\tsetupFocusRefetch();\n\t\tsetupOnlineRefetch();\n\t\tgetGlobalBroadcastChannel().setup();\n\t\tgetGlobalFocusManager().setup();\n\t\tgetGlobalOnlineManager().setup();\n\t};\n\tconst cleanup = () => {\n\t\tif (state.pollInterval) {\n\t\t\tclearInterval(state.pollInterval);\n\t\t\tstate.pollInterval = void 0;\n\t\t}\n\t\tif (state.unsubscribeBroadcast) {\n\t\t\tstate.unsubscribeBroadcast();\n\t\t\tstate.unsubscribeBroadcast = void 0;\n\t\t}\n\t\tif (state.unsubscribeFocus) {\n\t\t\tstate.unsubscribeFocus();\n\t\t\tstate.unsubscribeFocus = void 0;\n\t\t}\n\t\tif (state.unsubscribeOnline) {\n\t\t\tstate.unsubscribeOnline();\n\t\t\tstate.unsubscribeOnline = void 0;\n\t\t}\n\t\tstate.lastSync = 0;\n\t\tstate.lastSessionRequest = 0;\n\t\tstate.cachedSession = void 0;\n\t};\n\treturn {\n\t\tinit,\n\t\tcleanup,\n\t\ttriggerRefetch,\n\t\tbroadcastSessionUpdate\n\t};\n}\n//#endregion\nexport { createSessionRefreshManager };\n","//#region src/client/fetch-plugins.ts\nconst redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: { onSuccess(context) {\n\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\tif (typeof window !== \"undefined\" && window.location) {\n\t\t\t\tif (window.location) try {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\t} }\n};\n//#endregion\nexport { redirectPlugin };\n","import { useAuthQuery } from \"./query.mjs\";\nimport { createSessionRefreshManager } from \"./session-refresh.mjs\";\nimport { atom, onMount } from \"nanostores\";\n//#region src/client/session-atom.ts\nfunction getSessionAtom($fetch, options) {\n\tconst $signal = atom(false);\n\tconst session = useAuthQuery($signal, \"/get-session\", $fetch, { method: \"GET\" });\n\tlet broadcastSessionUpdate = () => {};\n\tonMount(session, () => {\n\t\tconst refreshManager = createSessionRefreshManager({\n\t\t\tsessionAtom: session,\n\t\t\tsessionSignal: $signal,\n\t\t\t$fetch,\n\t\t\toptions\n\t\t});\n\t\trefreshManager.init();\n\t\tbroadcastSessionUpdate = refreshManager.broadcastSessionUpdate;\n\t\treturn () => {\n\t\t\trefreshManager.cleanup();\n\t\t};\n\t});\n\treturn {\n\t\tsession,\n\t\t$sessionSignal: $signal,\n\t\tbroadcastSessionUpdate: (trigger) => broadcastSessionUpdate(trigger)\n\t};\n}\n//#endregion\nexport { getSessionAtom };\n","import { getBaseURL } from \"../utils/url.mjs\";\nimport { parseJSON } from \"./parser.mjs\";\nimport { redirectPlugin } from \"./fetch-plugins.mjs\";\nimport { getSessionAtom } from \"./session-atom.mjs\";\nimport { defu } from \"defu\";\nimport { createFetch } from \"@better-fetch/fetch\";\n//#region src/client/config.ts\nconst resolvePublicAuthUrl = (basePath) => {\n\tif (typeof process === \"undefined\") return void 0;\n\tconst path = basePath ?? \"/api/auth\";\n\tif (process.env.NEXT_PUBLIC_AUTH_URL) return process.env.NEXT_PUBLIC_AUTH_URL;\n\tif (typeof window === \"undefined\") {\n\t\tif (process.env.NEXTAUTH_URL) try {\n\t\t\treturn process.env.NEXTAUTH_URL;\n\t\t} catch {}\n\t\tif (process.env.VERCEL_URL) try {\n\t\t\tconst protocol = process.env.VERCEL_URL.startsWith(\"http\") ? \"\" : \"https://\";\n\t\t\treturn `${new URL(`${protocol}${process.env.VERCEL_URL}`).origin}${path}`;\n\t\t} catch {}\n\t}\n};\nconst getClientConfig = (options, loadEnv) => {\n\tconst isCredentialsSupported = \"credentials\" in Request.prototype;\n\tconst baseURL = getBaseURL(options?.baseURL, options?.basePath, void 0, loadEnv) ?? resolvePublicAuthUrl(options?.basePath) ?? \"/api/auth\";\n\tconst pluginsFetchPlugins = options?.plugins?.flatMap((plugin) => plugin.fetchPlugins).filter((pl) => pl !== void 0) || [];\n\tconst lifeCyclePlugin = {\n\t\tid: \"lifecycle-hooks\",\n\t\tname: \"lifecycle-hooks\",\n\t\thooks: {\n\t\t\tonSuccess: options?.fetchOptions?.onSuccess,\n\t\t\tonError: options?.fetchOptions?.onError,\n\t\t\tonRequest: options?.fetchOptions?.onRequest,\n\t\t\tonResponse: options?.fetchOptions?.onResponse\n\t\t}\n\t};\n\tconst { onSuccess: _onSuccess, onError: _onError, onRequest: _onRequest, onResponse: _onResponse, ...restOfFetchOptions } = options?.fetchOptions || {};\n\tconst $fetch = createFetch({\n\t\tbaseURL,\n\t\t...isCredentialsSupported ? { credentials: \"include\" } : {},\n\t\tmethod: \"GET\",\n\t\tjsonParser(text) {\n\t\t\tif (!text) return null;\n\t\t\treturn parseJSON(text, { strict: false });\n\t\t},\n\t\tcustomFetchImpl: fetch,\n\t\t...restOfFetchOptions,\n\t\tplugins: [\n\t\t\tlifeCyclePlugin,\n\t\t\t...restOfFetchOptions.plugins || [],\n\t\t\t...options?.disableDefaultFetchPlugins ? [] : [redirectPlugin],\n\t\t\t...pluginsFetchPlugins\n\t\t]\n\t});\n\tconst { $sessionSignal, session, broadcastSessionUpdate } = getSessionAtom($fetch, options);\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {};\n\tconst pluginsAtoms = {\n\t\t$sessionSignal,\n\t\tsession\n\t};\n\tconst pluginPathMethods = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/revoke-sessions\": \"POST\",\n\t\t\"/revoke-other-sessions\": \"POST\",\n\t\t\"/delete-user\": \"POST\"\n\t};\n\tconst atomListeners = [{\n\t\tsignal: \"$sessionSignal\",\n\t\tmatcher(path) {\n\t\t\treturn path === \"/sign-out\" || path === \"/update-user\" || path === \"/update-session\" || path === \"/sign-up/email\" || path === \"/sign-in/email\" || path === \"/delete-user\" || path === \"/verify-email\" || path === \"/revoke-sessions\" || path === \"/revoke-session\" || path === \"/revoke-other-sessions\" || path === \"/change-email\" || path === \"/change-password\";\n\t\t},\n\t\tcallback(path) {\n\t\t\tif (path === \"/sign-out\") broadcastSessionUpdate(\"signout\");\n\t\t\telse if (path === \"/update-user\" || path === \"/update-session\") broadcastSessionUpdate(\"updateUser\");\n\t\t}\n\t}];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getAtoms) Object.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\tif (plugin.pathMethods) Object.assign(pluginPathMethods, plugin.pathMethods);\n\t\tif (plugin.atomListeners) atomListeners.push(...plugin.atomListeners);\n\t}\n\tconst $store = {\n\t\tnotify: (signal) => {\n\t\t\tpluginsAtoms[signal].set(!pluginsAtoms[signal].get());\n\t\t},\n\t\tlisten: (signal, listener) => {\n\t\t\tpluginsAtoms[signal].subscribe(listener);\n\t\t},\n\t\tatoms: pluginsAtoms\n\t};\n\tfor (const plugin of plugins) if (plugin.getActions) pluginsActions = defu(plugin.getActions?.($fetch, $store, options) ?? {}, pluginsActions);\n\treturn {\n\t\tget baseURL() {\n\t\t\treturn baseURL;\n\t\t},\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t\t$store\n\t};\n};\n//#endregion\nexport { getClientConfig };\n","//#region src/utils/is-atom.ts\nfunction isAtom(value) {\n\treturn typeof value === \"object\" && value !== null && \"get\" in value && typeof value.get === \"function\" && \"lc\" in value && typeof value.lc === \"number\";\n}\n//#endregion\nexport { isAtom };\n","import { isAtom } from \"../utils/is-atom.mjs\";\n//#region src/client/proxy.ts\nfunction getMethod(path, knownPathMethods, args) {\n\tconst method = knownPathMethods[path];\n\tconst { fetchOptions, query: _query, ...body } = args || {};\n\tif (method) return method;\n\tif (fetchOptions?.method) return fetchOptions.method;\n\tif (body && Object.keys(body).length > 0) return \"POST\";\n\treturn \"GET\";\n}\nfunction createDynamicPathProxy(routes, client, knownPathMethods, atoms, atomListeners) {\n\tfunction createProxy(path = []) {\n\t\treturn new Proxy(function() {}, {\n\t\t\tget(_, prop) {\n\t\t\t\tif (typeof prop !== \"string\") return;\n\t\t\t\tif (prop === \"then\" || prop === \"catch\" || prop === \"finally\") return;\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current = routes;\n\t\t\t\tfor (const segment of fullPath) if (current && typeof current === \"object\" && segment in current) current = current[segment];\n\t\t\t\telse {\n\t\t\t\t\tcurrent = void 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (typeof current === \"function\") return current;\n\t\t\t\tif (isAtom(current)) return current;\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath = \"/\" + path.map((segment) => segment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)).join(\"/\");\n\t\t\t\tconst arg = args[0] || {};\n\t\t\t\tconst fetchOptions = args[1] || {};\n\t\t\t\tconst { query, fetchOptions: argFetchOptions, ...body } = arg;\n\t\t\t\tconst options = {\n\t\t\t\t\t...fetchOptions,\n\t\t\t\t\t...argFetchOptions\n\t\t\t\t};\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody: method === \"GET\" ? void 0 : {\n\t\t\t\t\t\t...body,\n\t\t\t\t\t\t...options?.body || {}\n\t\t\t\t\t},\n\t\t\t\t\tquery: query || options?.query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\tif (!atomListeners || options.disableSignal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t* We trigger listeners\n\t\t\t\t\t\t*/\n\t\t\t\t\t\tconst matches = atomListeners.filter((s) => s.matcher(routePath));\n\t\t\t\t\t\tif (!matches.length) return;\n\t\t\t\t\t\tconst visited = /* @__PURE__ */ new Set();\n\t\t\t\t\t\tfor (const match of matches) {\n\t\t\t\t\t\t\tconst signal = atoms[match.signal];\n\t\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t\tif (visited.has(match.signal)) continue;\n\t\t\t\t\t\t\tvisited.add(match.signal);\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t* To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\tmatch.callback?.(routePath);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\treturn createProxy();\n}\n//#endregion\nexport { createDynamicPathProxy };\n","import { getClientConfig } from \"./config.mjs\";\nimport { createDynamicPathProxy } from \"./proxy.mjs\";\nimport { capitalizeFirstLetter } from \"@better-auth/core/utils/string\";\n//#region src/client/vanilla.ts\nfunction createAuthClient(options) {\n\tconst { pluginPathMethods, pluginsActions, pluginsAtoms, $fetch, atomListeners, $store } = getClientConfig(options);\n\tconst resolvedHooks = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) resolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\treturn createDynamicPathProxy({\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\t$fetch,\n\t\t$store\n\t}, $fetch, pluginPathMethods, pluginsAtoms, atomListeners);\n}\n//#endregion\nexport { createAuthClient };\n","/**\r\n * Better Auth client helper for Leapify API consumers.\r\n *\r\n * This module is **browser-safe** — no Cloudflare, Drizzle, or Hono deps.\r\n * It wraps Better Auth's client SDK with the bearer plugin so that tokens\r\n * can be stored and retrieved as plain strings (no cookie dependency on\r\n * the consumer's frontend).\r\n *\r\n * @example\r\n * // lib/auth.ts (frontend)\r\n * import { createLeapifyAuthClient, signInWithGoogleRedirect } from 'leapify/client'\r\n *\r\n * export const authClient = createLeapifyAuthClient(process.env.NEXT_PUBLIC_API_URL!)\r\n *\r\n * // Redirect-based Google sign-in:\r\n * await signInWithGoogleRedirect(authClient, '/dashboard')\r\n */\r\n\r\nimport { createAuthClient } from 'better-auth/client'\r\n\r\nconst AUTH_TOKEN_KEY = 'better-auth.session_token'\r\n\r\n/**\r\n * Create a Better Auth client bound to the Leapify Worker URL.\r\n *\r\n * It uses the 'Bearer' auth type to send the stored session token\r\n * in the Authorization header.\r\n */\r\nexport function createLeapifyAuthClient(baseUrl: string) {\r\n return createAuthClient({\r\n baseURL: baseUrl,\r\n fetchOptions: {\r\n auth: {\r\n type: 'Bearer',\r\n token: () => {\r\n if (typeof window !== 'undefined') {\r\n return localStorage.getItem(AUTH_TOKEN_KEY) || ''\r\n }\r\n return ''\r\n }\r\n }\r\n }\r\n })\r\n}\r\n\r\nexport type LeapifyAuthClient = ReturnType<typeof createLeapifyAuthClient>\r\n\r\n/**\r\n * Sign in with Google via OAuth redirect flow.\r\n *\r\n * Redirects the browser to Google's OAuth page. After authentication,\r\n * Google redirects back to the Better Auth callback endpoint, which\r\n * creates a session and redirects to `callbackURL`.\r\n *\r\n * Call `syncCookieSessionToStorage()` on app init to restore the\r\n * session from the cookie after a redirect-based sign-in.\r\n *\r\n * @param authClient - Client created by createLeapifyAuthClient\r\n * @param callbackURL - Path or URL to redirect to after successful auth (e.g. '/dashboard')\r\n *\r\n * @example\r\n * import { signInWithGoogleRedirect } from 'leapify/client'\r\n *\r\n * document.getElementById('google-btn').onclick = () => {\r\n * signInWithGoogleRedirect(authClient, '/dashboard')\r\n * }\r\n */\r\nexport async function signInWithGoogleRedirect(\r\n authClient: LeapifyAuthClient,\r\n callbackURL: string,\r\n): Promise<void> {\r\n await authClient.signIn.social({\r\n provider: 'google',\r\n callbackURL,\r\n })\r\n}\r\n\r\n/**\r\n * Sync a cookie-based Better Auth session into localStorage.\r\n *\r\n * After an OAuth redirect flow, Better Auth stores the session in an\r\n * HTTP-only cookie. This function reads that session via `getSession()`\r\n * and stores the token in localStorage so that subsequent API calls\r\n * using the Bearer token work correctly.\r\n *\r\n * Call this once on app initialization, before `initializeSession()`.\r\n *\r\n * @param authClient - Client created by createLeapifyAuthClient\r\n *\r\n * @example\r\n * import { syncCookieSessionToStorage, initializeSession } from 'leapify/client'\r\n *\r\n * // On app mount:\r\n * await syncCookieSessionToStorage(authClient)\r\n * const user = await initializeSession(API_URL, getToken)\r\n */\r\nexport async function syncCookieSessionToStorage(\r\n authClient: LeapifyAuthClient,\r\n): Promise<void> {\r\n try {\r\n const result = await authClient.getSession()\r\n const data = result?.data as { session?: { token?: string } } | undefined\r\n const token = data?.session?.token\r\n if (token) {\r\n localStorage.setItem(AUTH_TOKEN_KEY, token)\r\n }\r\n } catch {\r\n // No cookie session — user is a guest.\r\n }\r\n}\r\n\r\n/**\r\n * Get the current bearer token from storage, or null for guests.\r\n * Pass this to `createLeapifyClient` as the `getToken` option.\r\n *\r\n * @example\r\n * import { createLeapifyClient } from 'leapify/client'\r\n * import { createLeapifyAuthClient, getLeapifyToken } from 'leapify/client'\r\n *\r\n * const authClient = createLeapifyAuthClient(API_URL)\r\n * const api = createLeapifyClient(API_URL, () => getLeapifyToken(authClient))\r\n */\r\nexport async function getLeapifyToken(\r\n // @ts-ignore - Kept for backwards compatibility with previous signature\r\n authClient?: LeapifyAuthClient,\r\n): Promise<string | null> {\r\n if (typeof window !== 'undefined') {\r\n return localStorage.getItem(AUTH_TOKEN_KEY)\r\n }\r\n return null\r\n}\r\n\r\n/**\r\n * Sign out the current user.\r\n */\r\nexport async function signOut(authClient: LeapifyAuthClient) {\r\n const result = await authClient.signOut()\r\n if (typeof window !== 'undefined') {\r\n localStorage.removeItem(AUTH_TOKEN_KEY)\r\n }\r\n return result\r\n}\r\n","/**\r\n * Browser-safe Proof-of-Work challenge solver.\r\n *\r\n * Solves the SHA-256 PoW challenge served by the leapify backend middleware.\r\n * After solving, the server sets a signed cookie (1h TTL) so subsequent\r\n * requests bypass the challenge automatically.\r\n *\r\n * Import from 'leapify/client' — no Cloudflare, Drizzle, or Hono deps.\r\n *\r\n * @example\r\n * import { solvePowChallenge } from 'leapify/client'\r\n *\r\n * // Call once on app load before any API requests\r\n * await solvePowChallenge('https://api.leap.yourdomain.com')\r\n */\r\n\r\nconst POW_VERIFY_PATH = \"/.well-known/leapify/pow/verify\";\r\n\r\n/**\r\n * Solve the backend's Proof-of-Work challenge if one is active.\r\n *\r\n * Probes the given base URL for an HTML challenge page. If detected,\r\n * brute-forces a SHA-256 nonce (~100-500ms) and submits the solution.\r\n * The resulting cookie covers all API paths for 1 hour.\r\n *\r\n * @param baseUrl - The Leapify Worker URL (e.g. `https://api.leap.yourdomain.com`).\r\n * If omitted, uses the current page origin (same-origin requests).\r\n * @returns `true` if a challenge was solved, `false` if no challenge was needed.\r\n */\r\nexport async function solvePowChallenge(baseUrl?: string): Promise<boolean> {\r\n const base = baseUrl?.replace(/\\/$/, \"\") ?? \"\";\r\n\r\n let html: string;\r\n try {\r\n const res = await fetch(`${base}/api/classes`, { credentials: \"include\" });\r\n const ct = res.headers.get(\"content-type\") || \"\";\r\n if (!ct.includes(\"text/html\")) {\r\n return false;\r\n }\r\n html = await res.text();\r\n } catch {\r\n return false;\r\n }\r\n\r\n const idMatch = html.match(/challengeId\\s*=\\s*\"([^\"]+)\"/);\r\n const diffMatch = html.match(/difficulty\\s*=\\s*(\\d+)/);\r\n if (!idMatch || !diffMatch) {\r\n return false;\r\n }\r\n\r\n const challengeId = idMatch[1];\r\n const difficulty = Number(diffMatch[1]);\r\n const prefix = \"0\".repeat(Math.ceil(difficulty / 4));\r\n\r\n let nonce = 0;\r\n while (true) {\r\n const input = new TextEncoder().encode(`${challengeId}:${nonce}`);\r\n const hash = await crypto.subtle.digest(\"SHA-256\", input);\r\n const hex = Array.from(new Uint8Array(hash))\r\n .map((b) => b.toString(16).padStart(2, \"0\"))\r\n .join(\"\");\r\n if (hex.startsWith(prefix)) {\r\n await fetch(`${base}${POW_VERIFY_PATH}`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ id: challengeId, nonce, elapsed: 0 }),\r\n credentials: \"include\",\r\n });\r\n return true;\r\n }\r\n nonce++;\r\n }\r\n}\r\n","/**\r\n * Browser-safe session initialization helper.\r\n *\r\n * Solves the PoW challenge (if active), checks for an existing session token,\r\n * and fetches the user profile. Returns the authenticated user or null.\r\n *\r\n * Import from 'leapify/client' — no Cloudflare, Drizzle, or Hono deps.\r\n *\r\n * @example\r\n * import { initializeSession, createLeapifyClient } from 'leapify/client'\r\n *\r\n * const user = await initializeSession(\r\n * 'https://api.leap.yourdomain.com',\r\n * () => getLeapifyToken(),\r\n * )\r\n * if (user) {\r\n * console.log(`Welcome ${user.name} (${user.role})`)\r\n * }\r\n */\r\n\r\nimport { solvePowChallenge } from \"./pow\";\r\nimport type { UserProfile } from \"./types\";\r\n\r\n/**\r\n * Initialize a browser session: solve PoW, restore existing token, fetch profile.\r\n *\r\n * @param baseUrl - The Leapify Worker URL.\r\n * @param getToken - Async function returning the current session token, or null.\r\n * @returns The authenticated user profile, or null if not signed in.\r\n */\r\nexport async function initializeSession(\r\n baseUrl: string,\r\n getToken: () => Promise<string | null>,\r\n): Promise<UserProfile | null> {\r\n await solvePowChallenge(baseUrl);\r\n\r\n const token = await getToken();\r\n if (!token) return null;\r\n\r\n const base = baseUrl.replace(/\\/$/, \"\");\r\n const res = await fetch(`${base}/api/users/me`, {\r\n headers: { Authorization: `Bearer ${token}` },\r\n });\r\n\r\n if (!res.ok) return null;\r\n\r\n const body = await res.json().catch(() => ({}));\r\n return (body as { data: UserProfile | null }).data ?? null;\r\n}\r\n","/**\r\n * Leapify browser-safe API client.\r\n *\r\n * Import from 'leapify/client' — no Cloudflare, Drizzle, or Hono dependencies.\r\n *\r\n * @example\r\n * import { createLeapifyClient, createLeapifyAuthClient, getLeapifyToken } from 'leapify/client'\r\n *\r\n * const authClient = createLeapifyAuthClient(process.env.NEXT_PUBLIC_API_URL!)\r\n * const api = createLeapifyClient(\r\n * process.env.NEXT_PUBLIC_API_URL!,\r\n * () => getLeapifyToken(authClient),\r\n * )\r\n *\r\n * const events = await api.getEvents()\r\n */\r\n\r\nexport type {\r\n LeapEvent,\r\n SlotInfo,\r\n UserProfile,\r\n BookmarkEntry,\r\n Faq,\r\n Theme,\r\n Organization,\r\n SiteConfig,\r\n ToggleBookmarkResult,\r\n LeapifyErrorBody,\r\n UserRole,\r\n EventStatus,\r\n CreateEventBody,\r\n CreateFaqBody,\r\n SnapshotResult,\r\n HealthResponse,\r\n RuntimeConfig,\r\n CmsMode,\r\n} from \"./types\";\r\n\r\nexport {\r\n createLeapifyAuthClient,\r\n signInWithGoogleRedirect,\r\n syncCookieSessionToStorage,\r\n getLeapifyToken,\r\n signOut,\r\n} from \"./auth\";\r\nexport type { LeapifyAuthClient } from \"./auth\";\r\n\r\nexport { solvePowChallenge } from \"./pow\";\r\nexport { initializeSession } from \"./session\";\r\n\r\n/**\r\n * Read the runtime config injected by the worker into HTML pages.\r\n * Returns null if not running in a browser or config not injected.\r\n */\r\nexport function getClientConfig(): RuntimeConfig | null {\r\n if (typeof window === \"undefined\") return null;\r\n const config = (window as unknown as Record<string, unknown>).__CONFIG__;\r\n if (!config || typeof config !== \"object\") return null;\r\n return config as RuntimeConfig;\r\n}\r\n\r\nimport type { RuntimeConfig } from \"./types\";\r\n\r\n/**\r\n * Structured error thrown by all client methods on non-2xx responses.\r\n *\r\n * @example\r\n * import { LeapifyApiError } from 'leapify/client'\r\n *\r\n * try {\r\n * await api.toggleBookmark(eventId)\r\n * } catch (err) {\r\n * if (err instanceof LeapifyApiError && err.code === 'UNAUTHORIZED') {\r\n * // redirect to sign-in\r\n * }\r\n * }\r\n */\r\nexport class LeapifyApiError extends Error {\r\n constructor(\r\n public readonly status: number,\r\n public readonly code: string,\r\n message: string,\r\n ) {\r\n super(message);\r\n this.name = \"LeapifyApiError\";\r\n }\r\n}\r\n\r\n// ─── Error code constants ───────────────────────────────────────────────────\r\n\r\nexport const LEAPIFY_ERROR_CODES = {\r\n UNAUTHORIZED: \"UNAUTHORIZED\",\r\n DOMAIN_RESTRICTED: \"DOMAIN_RESTRICTED\",\r\n FORBIDDEN: \"FORBIDDEN\",\r\n NOT_FOUND: \"NOT_FOUND\",\r\n CONFLICT: \"CONFLICT\",\r\n TOO_MANY_REQUESTS: \"TOO_MANY_REQUESTS\",\r\n SERVICE_UNAVAILABLE: \"SERVICE_UNAVAILABLE\",\r\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\r\n} as const;\r\n\r\nexport type LeapifyErrorCode = keyof typeof LEAPIFY_ERROR_CODES;\r\n\r\n// ─── Client factory ─────────────────────────────────────────────────────────\r\n\r\nimport type {\r\n LeapEvent,\r\n SlotInfo,\r\n UserProfile,\r\n BookmarkEntry,\r\n Faq,\r\n Theme,\r\n Organization,\r\n SiteConfig,\r\n ToggleBookmarkResult,\r\n LeapifyErrorBody,\r\n CreateEventBody,\r\n CreateFaqBody,\r\n SnapshotResult,\r\n HealthResponse,\r\n} from \"./types\";\r\n\r\ntype GetTokenFn = () => Promise<string | null>;\r\n\r\nasync function buildHeaders(\r\n getToken: GetTokenFn | undefined,\r\n extra: Record<string, string> = {},\r\n): Promise<Record<string, string>> {\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n ...extra,\r\n };\r\n if (getToken) {\r\n const token = await getToken();\r\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\r\n }\r\n return headers;\r\n}\r\n\r\nasync function parseResponse<T>(res: Response): Promise<T> {\r\n if (res.status === 204) return undefined as T;\r\n\r\n const body = await res.json().catch(() => ({}));\r\n\r\n if (!res.ok) {\r\n const err = (body as LeapifyErrorBody)?.error;\r\n throw new LeapifyApiError(\r\n res.status,\r\n err?.code ?? \"UNKNOWN\",\r\n err?.message ?? res.statusText,\r\n );\r\n }\r\n\r\n return (body as { data: T }).data;\r\n}\r\n\r\n/**\r\n * Creates a typed Leapify API client bound to a base URL.\r\n *\r\n * @param baseUrl - The deployed Leapify Worker URL (e.g. `https://api.leap.yourdomain.com`).\r\n * @param getToken - Optional async function that returns a session token string,\r\n * or null for guest requests. Use `getLeapifyToken()` from this module.\r\n *\r\n * @example\r\n * // lib/api.ts\r\n * import { createLeapifyClient, getLeapifyToken } from 'leapify/client'\r\n *\r\n * export const api = createLeapifyClient(\r\n * process.env.NEXT_PUBLIC_API_URL!,\r\n * () => getLeapifyToken(),\r\n * )\r\n */\r\nexport function createLeapifyClient(baseUrl: string, getToken?: GetTokenFn) {\r\n const base = baseUrl.replace(/\\/$/, \"\");\r\n\r\n async function get<T>(path: string, init?: RequestInit): Promise<T> {\r\n const headers = await buildHeaders(getToken, init?.headers as Record<string, string>);\r\n const res = await fetch(`${base}${path}`, { ...init, method: \"GET\", headers });\r\n return parseResponse<T>(res);\r\n }\r\n\r\n async function post<T>(path: string, body?: unknown): Promise<T> {\r\n const headers = await buildHeaders(getToken);\r\n const res = await fetch(`${base}${path}`, {\r\n method: \"POST\",\r\n headers,\r\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\r\n });\r\n return parseResponse<T>(res);\r\n }\r\n\r\n async function postFormData<T>(path: string, formData: FormData): Promise<T> {\r\n const headers: Record<string, string> = {};\r\n if (getToken) {\r\n const token = await getToken();\r\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\r\n }\r\n const res = await fetch(`${base}${path}`, {\r\n method: \"POST\",\r\n headers,\r\n body: formData,\r\n });\r\n return parseResponse<T>(res);\r\n }\r\n\r\n async function patch<T>(path: string, body: unknown): Promise<T> {\r\n const headers = await buildHeaders(getToken);\r\n const res = await fetch(`${base}${path}`, {\r\n method: \"PATCH\",\r\n headers,\r\n body: JSON.stringify(body),\r\n });\r\n return parseResponse<T>(res);\r\n }\r\n\r\n async function del<T>(path: string): Promise<T> {\r\n const headers = await buildHeaders(getToken);\r\n const res = await fetch(`${base}${path}`, { method: \"DELETE\", headers });\r\n return parseResponse<T>(res);\r\n }\r\n\r\n return {\r\n // ── Site Config ────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /config\r\n * Returns site-wide configuration. Check `maintenanceMode` and\r\n * `comingSoonUntil` on app load to gate the UI appropriately.\r\n * Use `now` (server unix epoch) for timestamp comparisons.\r\n */\r\n getConfig(): Promise<SiteConfig> {\r\n return get<SiteConfig>(\"/api/config\");\r\n },\r\n\r\n /**\r\n * PATCH /api/config/:key — admin only.\r\n * Upserts a site config value. Requires admin or super_admin role.\r\n */\r\n updateConfig<K extends string>(key: K, value: unknown): Promise<{ key: K; value: unknown }> {\r\n return patch(`/api/config/${encodeURIComponent(key)}`, { value });\r\n },\r\n\r\n // ── Events ─────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/classes\r\n * Returns all published classes. Response is ETag-cached for 7 days.\r\n */\r\n getEvents(): Promise<LeapEvent[]> {\r\n return get<LeapEvent[]>(\"/api/classes\");\r\n },\r\n\r\n /**\r\n * GET /api/classes/admin — admin only.\r\n * Returns all classes regardless of status.\r\n */\r\n getAdminEvents(): Promise<LeapEvent[]> {\r\n return get<LeapEvent[]>(\"/api/classes/admin\");\r\n },\r\n\r\n /**\r\n * POST /api/classes/admin/publish — admin only.\r\n * Batch publish queued classes immediately or schedule them for later.\r\n */\r\n batchPublish(ids: string[], releaseAt?: number): Promise<{ updated: number }> {\r\n return post(\"/api/classes/admin/publish\", { ids, releaseAt });\r\n },\r\n\r\n /**\r\n * GET /api/classes/:slug\r\n * Returns a single published class by slug.\r\n */\r\n getEvent(slug: string): Promise<LeapEvent> {\r\n return get<LeapEvent>(`/api/classes/${encodeURIComponent(slug)}`);\r\n },\r\n\r\n /**\r\n * GET /api/classes/:slug/slots\r\n * Returns real-time slot availability. CF edge caches this for 5 seconds.\r\n * Poll every 8–10 seconds on class detail pages.\r\n */\r\n getSlots(slug: string): Promise<SlotInfo> {\r\n return get<SlotInfo>(`/api/classes/${encodeURIComponent(slug)}/slots`);\r\n },\r\n\r\n /**\r\n * POST /api/classes — admin only.\r\n * Creates a new class. Auto-generates slug from title.\r\n */\r\n createEvent(data: CreateEventBody): Promise<LeapEvent> {\r\n return post<LeapEvent>(\"/api/classes\", data);\r\n },\r\n\r\n /**\r\n * PATCH /api/classes/:slug — admin only.\r\n * Updates an existing class by slug.\r\n */\r\n updateEvent(slug: string, data: Partial<CreateEventBody>): Promise<LeapEvent> {\r\n return patch<LeapEvent>(`/api/classes/${encodeURIComponent(slug)}`, data);\r\n },\r\n\r\n /**\r\n * DELETE /api/classes/:slug — admin only.\r\n * Deletes a class.\r\n */\r\n deleteEvent(slug: string): Promise<void> {\r\n return del<void>(`/api/classes/${encodeURIComponent(slug)}`);\r\n },\r\n\r\n // ── Themes ─────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/themes\r\n * Returns all themes.\r\n */\r\n getThemes(): Promise<Theme[]> {\r\n return get<Theme[]>(\"/api/themes\");\r\n },\r\n\r\n /**\r\n * POST /api/themes — admin only.\r\n */\r\n createTheme(data: Omit<Theme, \"id\" | \"createdAt\">): Promise<Theme> {\r\n return post<Theme>(\"/api/themes\", data);\r\n },\r\n\r\n /**\r\n * PATCH /api/themes/:id — admin only.\r\n */\r\n updateTheme(id: string, data: Partial<Omit<Theme, \"id\" | \"createdAt\">>): Promise<Theme> {\r\n return patch<Theme>(`/api/themes/${encodeURIComponent(id)}`, data);\r\n },\r\n\r\n /**\r\n * DELETE /api/themes/:id — admin only.\r\n */\r\n deleteTheme(id: string): Promise<void> {\r\n return del<void>(`/api/themes/${encodeURIComponent(id)}`);\r\n },\r\n\r\n // ── Organizations ──────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/organizations\r\n * Returns all organizations.\r\n */\r\n getOrganizations(): Promise<Organization[]> {\r\n return get<Organization[]>(\"/api/organizations\");\r\n },\r\n\r\n /**\r\n * POST /api/organizations — admin only.\r\n */\r\n createOrganization(data: Omit<Organization, \"id\" | \"createdAt\">): Promise<Organization> {\r\n return post<Organization>(\"/api/organizations\", data);\r\n },\r\n\r\n /**\r\n * PATCH /api/organizations/:id — admin only.\r\n */\r\n updateOrganization(id: string, data: Partial<Omit<Organization, \"id\" | \"createdAt\">>): Promise<Organization> {\r\n return patch<Organization>(`/api/organizations/${encodeURIComponent(id)}`, data);\r\n },\r\n\r\n /**\r\n * DELETE /api/organizations/:id — admin only.\r\n */\r\n deleteOrganization(id: string): Promise<void> {\r\n return del<void>(`/api/organizations/${encodeURIComponent(id)}`);\r\n },\r\n\r\n // ── Users ──────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/users/me\r\n * Returns the authenticated user's profile, or null for guests.\r\n * Use `profile.role` to gate admin UI.\r\n */\r\n getMe(): Promise<UserProfile | null> {\r\n return get<UserProfile | null>(\"/api/users/me\");\r\n },\r\n\r\n // ── Admin: User Management ────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/users — admin only.\r\n * Returns all registered users.\r\n */\r\n getUsers(): Promise<UserProfile[]> {\r\n return get<UserProfile[]>(\"/api/users\");\r\n },\r\n\r\n /**\r\n * PATCH /api/users/:id/role — admin only.\r\n * Changes a user's role.\r\n */\r\n updateUserRole(id: string, role: string): Promise<UserProfile> {\r\n return patch<UserProfile>(`/api/users/${encodeURIComponent(id)}/role`, { role });\r\n },\r\n\r\n /**\r\n * POST /api/users/by-email — admin only.\r\n * Finds or creates a user by email and sets their role.\r\n */\r\n upsertUserByEmail(email: string, role: string): Promise<UserProfile> {\r\n return post<UserProfile>(\"/api/users/by-email\", { email, role });\r\n },\r\n\r\n // ── Bookmarks ──────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/users/me/bookmarks\r\n * Returns the authenticated user's bookmarked events.\r\n * Returns an empty array for unauthenticated users.\r\n */\r\n getBookmarks(): Promise<BookmarkEntry[]> {\r\n return get<BookmarkEntry[]>(\"/api/users/me/bookmarks\");\r\n },\r\n\r\n /**\r\n * POST /api/users/me/bookmarks/:eventId\r\n * Toggles a bookmark on/off. Requires authentication.\r\n * Returns `{ bookmarked: true }` (201) on add, `{ bookmarked: false }` (200) on remove.\r\n */\r\n toggleBookmark(eventId: string): Promise<ToggleBookmarkResult> {\r\n return post<ToggleBookmarkResult>(\r\n `/api/users/me/bookmarks/${encodeURIComponent(eventId)}`,\r\n );\r\n },\r\n\r\n /**\r\n * DELETE /api/users/me/bookmarks/:eventId\r\n * Removes a bookmark. Requires authentication.\r\n */\r\n deleteBookmark(eventId: string): Promise<ToggleBookmarkResult> {\r\n return del<ToggleBookmarkResult>(\r\n `/api/users/me/bookmarks/${encodeURIComponent(eventId)}`,\r\n );\r\n },\r\n\r\n // ── FAQs ───────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/faqs\r\n * Returns all active FAQs. Cached in KV for 10 minutes.\r\n * The `answer` field is markdown — render with a markdown library.\r\n */\r\n getFaqs(): Promise<Faq[]> {\r\n return get<Faq[]>(\"/api/faqs\");\r\n },\r\n\r\n /**\r\n * POST /api/faqs — admin only.\r\n * Creates a new FAQ item.\r\n */\r\n createFaq(data: CreateFaqBody): Promise<Faq> {\r\n return post<Faq>(\"/api/faqs\", data);\r\n },\r\n\r\n /**\r\n * PATCH /api/faqs/:id — admin only.\r\n * Updates an existing FAQ item.\r\n */\r\n updateFaq(id: string, data: Partial<CreateFaqBody>): Promise<Faq> {\r\n return patch<Faq>(`/api/faqs/${encodeURIComponent(id)}`, data);\r\n },\r\n\r\n /**\r\n * DELETE /api/faqs/:id — admin only.\r\n * Soft-deletes a FAQ (sets isActive: false).\r\n */\r\n deleteFaq(id: string): Promise<{ deleted: boolean }> {\r\n return del<{ deleted: boolean }>(`/api/faqs/${encodeURIComponent(id)}`);\r\n },\r\n\r\n // ── Uploads ────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * POST /api/uploads/images — admin only.\r\n * Uploads an image file to R2. Accepts multipart/form-data.\r\n * Returns the public URL, storage key, size, and content type.\r\n */\r\n uploadImage(file: File | Blob): Promise<{\r\n url: string;\r\n key: string;\r\n size: number;\r\n contentType: string;\r\n }> {\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n return postFormData(\"/api/uploads/images\", formData);\r\n },\r\n\r\n // ── Content Sync ───────────────────────────────────────────────────────\r\n\r\n /**\r\n * POST /api/config/sync-content — admin only.\r\n * Pushes all D1 content to Contentful. Auto-generates content types if missing.\r\n */\r\n syncContent(): Promise<SnapshotResult> {\r\n return post<SnapshotResult>(\"/api/config/sync-content\");\r\n },\r\n\r\n // ── Health ─────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /health\r\n * Public health check. Returns provider availability status.\r\n */\r\n healthCheck(): Promise<HealthResponse> {\r\n return get<HealthResponse>(\"/health\");\r\n },\r\n };\r\n}\r\n\r\nexport type LeapifyClient = ReturnType<typeof createLeapifyClient>;\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../node_modules/better-auth/dist/client/broadcast-channel.mjs","../../node_modules/better-auth/dist/client/focus-manager.mjs","../../node_modules/better-auth/dist/client/online-manager.mjs","../../node_modules/better-auth/dist/client/parser.mjs","../../node_modules/nanostores/clean-stores/index.js","../../node_modules/nanostores/atom/index.js","../../node_modules/nanostores/lifecycle/index.js","../../node_modules/better-auth/dist/client/query.mjs","../../node_modules/better-auth/dist/client/session-refresh.mjs","../../node_modules/better-auth/dist/client/fetch-plugins.mjs","../../node_modules/better-auth/dist/client/session-atom.mjs","../../node_modules/better-auth/dist/client/config.mjs","../../node_modules/better-auth/dist/utils/is-atom.mjs","../../node_modules/better-auth/dist/client/proxy.mjs","../../node_modules/better-auth/dist/client/vanilla.mjs","../../src/client/auth.ts","../../src/client/pow.ts","../../src/client/session.ts","../../src/client/index.ts"],"names":["value","now","getClientConfig"],"mappings":"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","file":"index.js","sourcesContent":["//#region src/client/broadcast-channel.ts\nconst kBroadcastChannel = Symbol.for(\"better-auth:broadcast-channel\");\nconst now = () => Math.floor(Date.now() / 1e3);\nvar WindowBroadcastChannel = class {\n\tlisteners = /* @__PURE__ */ new Set();\n\tname;\n\tconstructor(name = \"better-auth.message\") {\n\t\tthis.name = name;\n\t}\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\tpost(message) {\n\t\tif (typeof window === \"undefined\") return;\n\t\ttry {\n\t\t\tlocalStorage.setItem(this.name, JSON.stringify({\n\t\t\t\t...message,\n\t\t\t\ttimestamp: now()\n\t\t\t}));\n\t\t} catch {}\n\t}\n\tsetup() {\n\t\tif (typeof window === \"undefined\" || typeof window.addEventListener === \"undefined\") return () => {};\n\t\tconst handler = (event) => {\n\t\t\tif (event.key !== this.name) return;\n\t\t\tconst message = JSON.parse(event.newValue ?? \"{}\");\n\t\t\tif (message?.event !== \"session\" || !message?.data) return;\n\t\t\tthis.listeners.forEach((listener) => listener(message));\n\t\t};\n\t\twindow.addEventListener(\"storage\", handler);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"storage\", handler);\n\t\t};\n\t}\n};\nfunction getGlobalBroadcastChannel(name = \"better-auth.message\") {\n\tif (!globalThis[kBroadcastChannel]) globalThis[kBroadcastChannel] = new WindowBroadcastChannel(name);\n\treturn globalThis[kBroadcastChannel];\n}\n//#endregion\nexport { getGlobalBroadcastChannel, kBroadcastChannel };\n","//#region src/client/focus-manager.ts\nconst kFocusManager = Symbol.for(\"better-auth:focus-manager\");\nvar WindowFocusManager = class {\n\tlisteners = /* @__PURE__ */ new Set();\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\tsetFocused(focused) {\n\t\tthis.listeners.forEach((listener) => listener(focused));\n\t}\n\tsetup() {\n\t\tif (typeof window === \"undefined\" || typeof document === \"undefined\" || typeof window.addEventListener === \"undefined\") return () => {};\n\t\tconst visibilityHandler = () => {\n\t\t\tif (document.visibilityState === \"visible\") this.setFocused(true);\n\t\t};\n\t\tdocument.addEventListener(\"visibilitychange\", visibilityHandler, false);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"visibilitychange\", visibilityHandler, false);\n\t\t};\n\t}\n};\nfunction getGlobalFocusManager() {\n\tif (!globalThis[kFocusManager]) globalThis[kFocusManager] = new WindowFocusManager();\n\treturn globalThis[kFocusManager];\n}\n//#endregion\nexport { getGlobalFocusManager, kFocusManager };\n","//#region src/client/online-manager.ts\nconst kOnlineManager = Symbol.for(\"better-auth:online-manager\");\nvar WindowOnlineManager = class {\n\tlisteners = /* @__PURE__ */ new Set();\n\tisOnline = typeof navigator !== \"undefined\" ? navigator.onLine : true;\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\tsetOnline(online) {\n\t\tthis.isOnline = online;\n\t\tthis.listeners.forEach((listener) => listener(online));\n\t}\n\tsetup() {\n\t\tif (typeof window === \"undefined\" || typeof window.addEventListener === \"undefined\") return () => {};\n\t\tconst onOnline = () => this.setOnline(true);\n\t\tconst onOffline = () => this.setOnline(false);\n\t\twindow.addEventListener(\"online\", onOnline, false);\n\t\twindow.addEventListener(\"offline\", onOffline, false);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"online\", onOnline, false);\n\t\t\twindow.removeEventListener(\"offline\", onOffline, false);\n\t\t};\n\t}\n};\nfunction getGlobalOnlineManager() {\n\tif (!globalThis[kOnlineManager]) globalThis[kOnlineManager] = new WindowOnlineManager();\n\treturn globalThis[kOnlineManager];\n}\n//#endregion\nexport { getGlobalOnlineManager, kOnlineManager };\n","//#region src/client/parser.ts\nconst PROTO_POLLUTION_PATTERNS = {\n\tproto: /\"(?:_|\\\\u0{2}5[Ff]){2}(?:p|\\\\u0{2}70)(?:r|\\\\u0{2}72)(?:o|\\\\u0{2}6[Ff])(?:t|\\\\u0{2}74)(?:o|\\\\u0{2}6[Ff])(?:_|\\\\u0{2}5[Ff]){2}\"\\s*:/,\n\tconstructor: /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/,\n\tprotoShort: /\"__proto__\"\\s*:/,\n\tconstructorShort: /\"constructor\"\\s*:/\n};\nconst JSON_SIGNATURE = /^\\s*[\"[{]|^\\s*-?\\d{1,16}(\\.\\d{1,17})?([Ee][+-]?\\d+)?\\s*$/;\nconst SPECIAL_VALUES = {\n\ttrue: true,\n\tfalse: false,\n\tnull: null,\n\tundefined: void 0,\n\tnan: NaN,\n\tinfinity: Number.POSITIVE_INFINITY,\n\t\"-infinity\": Number.NEGATIVE_INFINITY\n};\nconst ISO_DATE_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,7}))?(?:Z|([+-])(\\d{2}):(\\d{2}))$/;\nfunction isValidDate(date) {\n\treturn date instanceof Date && !isNaN(date.getTime());\n}\nfunction parseISODate(value) {\n\tconst match = ISO_DATE_REGEX.exec(value);\n\tif (!match) return null;\n\tconst [, year, month, day, hour, minute, second, ms, offsetSign, offsetHour, offsetMinute] = match;\n\tconst date = new Date(Date.UTC(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10), parseInt(hour, 10), parseInt(minute, 10), parseInt(second, 10), ms ? parseInt(ms.padEnd(3, \"0\"), 10) : 0));\n\tif (offsetSign) {\n\t\tconst offset = (parseInt(offsetHour, 10) * 60 + parseInt(offsetMinute, 10)) * (offsetSign === \"+\" ? -1 : 1);\n\t\tdate.setUTCMinutes(date.getUTCMinutes() + offset);\n\t}\n\treturn isValidDate(date) ? date : null;\n}\nfunction betterJSONParse(value, options = {}) {\n\tconst { strict = false, warnings = false, reviver, parseDates = true } = options;\n\tif (typeof value !== \"string\") return value;\n\tconst trimmed = value.trim();\n\tif (trimmed.length > 0 && trimmed[0] === \"\\\"\" && trimmed.endsWith(\"\\\"\") && !trimmed.slice(1, -1).includes(\"\\\"\")) return trimmed.slice(1, -1);\n\tconst lowerValue = trimmed.toLowerCase();\n\tif (lowerValue.length <= 9 && lowerValue in SPECIAL_VALUES) return SPECIAL_VALUES[lowerValue];\n\tif (!JSON_SIGNATURE.test(trimmed)) {\n\t\tif (strict) throw new SyntaxError(\"[better-json] Invalid JSON\");\n\t\treturn value;\n\t}\n\tif (Object.entries(PROTO_POLLUTION_PATTERNS).some(([key, pattern]) => {\n\t\tconst matches = pattern.test(trimmed);\n\t\tif (matches && warnings) console.warn(`[better-json] Detected potential prototype pollution attempt using ${key} pattern`);\n\t\treturn matches;\n\t}) && strict) throw new Error(\"[better-json] Potential prototype pollution attempt detected\");\n\ttry {\n\t\tconst secureReviver = (key, value) => {\n\t\t\tif (key === \"__proto__\" || key === \"constructor\" && value && typeof value === \"object\" && \"prototype\" in value) {\n\t\t\t\tif (warnings) console.warn(`[better-json] Dropping \"${key}\" key to prevent prototype pollution`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parseDates && typeof value === \"string\") {\n\t\t\t\tconst date = parseISODate(value);\n\t\t\t\tif (date) return date;\n\t\t\t}\n\t\t\treturn reviver ? reviver(key, value) : value;\n\t\t};\n\t\treturn JSON.parse(trimmed, secureReviver);\n\t} catch (error) {\n\t\tif (strict) throw error;\n\t\treturn value;\n\t}\n}\nfunction parseJSON(value, options = { strict: true }) {\n\treturn betterJSONParse(value, options);\n}\n//#endregion\nexport { parseJSON };\n","import { cleanTasks } from '../task/index.js'\n\nexport const clean = Symbol('clean')\n\nexport const cleanStores = (...stores) => {\n if (process.env.NODE_ENV === 'production') {\n throw new Error(\n 'cleanStores() can be used only during development or tests'\n )\n }\n cleanTasks()\n for (let $store of stores) {\n if ($store) {\n if ($store.mocked) delete $store.mocked\n if ($store[clean]) $store[clean]()\n }\n }\n}\n","import { clean } from '../clean-stores/index.js'\n\nlet listenerQueue = []\nlet lqIndex = 0\nconst QUEUE_ITEMS_PER_LISTENER = 4\n// Use globalThis.nanostoresGlobal to store epoch so all module instances share\n// the same counter. This fixes issues when Nano Store is bundled separately\n// in different parts of an application (e.g., tree-shaking separates core\n// from React), causing each bundle to have its own epoch instance.\nexport const nanostoresGlobal = (globalThis.nanostoresGlobal ||= { epoch: 0 })\n\n/* @__NO_SIDE_EFFECTS__ */\nexport const atom = initialValue => {\n let listeners = []\n let $atom = {\n get() {\n if (!$atom.lc) {\n $atom.listen(() => {})()\n }\n return $atom.value\n },\n init: initialValue,\n lc: 0,\n listen(listener) {\n $atom.lc = listeners.push(listener)\n\n return () => {\n for (\n let i = lqIndex + QUEUE_ITEMS_PER_LISTENER;\n i < listenerQueue.length;\n ) {\n if (listenerQueue[i] === listener) {\n listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER)\n } else {\n i += QUEUE_ITEMS_PER_LISTENER\n }\n }\n\n let index = listeners.indexOf(listener)\n if (~index) {\n listeners.splice(index, 1)\n if (!--$atom.lc) $atom.off()\n }\n }\n },\n notify(oldValue, changedKey) {\n nanostoresGlobal.epoch++\n let runListenerQueue = !listenerQueue.length\n for (let listener of listeners) {\n listenerQueue.push(listener, $atom.value, oldValue, changedKey)\n }\n\n if (runListenerQueue) {\n for (\n lqIndex = 0;\n lqIndex < listenerQueue.length;\n lqIndex += QUEUE_ITEMS_PER_LISTENER\n ) {\n listenerQueue[lqIndex](\n listenerQueue[lqIndex + 1],\n listenerQueue[lqIndex + 2],\n listenerQueue[lqIndex + 3]\n )\n }\n listenerQueue.length = 0\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {},\n set(newValue) {\n let oldValue = $atom.value\n if (oldValue !== newValue) {\n $atom.value = newValue\n $atom.notify(oldValue)\n }\n },\n subscribe(listener) {\n let unbind = $atom.listen(listener)\n listener($atom.value)\n return unbind\n },\n value: initialValue\n }\n\n if (process.env.NODE_ENV !== 'production') {\n $atom[clean] = () => {\n listeners = []\n $atom.lc = 0\n $atom.off()\n }\n }\n\n return $atom\n}\n\nexport const readonlyType = store => store\n","import { clean } from '../clean-stores/index.js'\n\nconst START = 0\nconst STOP = 1\nconst SET = 2\nconst NOTIFY = 3\nconst MOUNT = 5\nconst UNMOUNT = 6\nconst REVERT_MUTATION = 10\n\nexport let on = (object, listener, eventKey, mutateStore) => {\n object.events = object.events || {}\n if (!object.events[eventKey + REVERT_MUTATION]) {\n object.events[eventKey + REVERT_MUTATION] = mutateStore(eventProps => {\n // eslint-disable-next-line no-sequences\n object.events[eventKey].reduceRight((event, l) => (l(event), event), {\n shared: {},\n ...eventProps\n })\n })\n }\n object.events[eventKey] = object.events[eventKey] || []\n object.events[eventKey].push(listener)\n return () => {\n let currentListeners = object.events[eventKey]\n let index = currentListeners.indexOf(listener)\n currentListeners.splice(index, 1)\n if (!currentListeners.length) {\n delete object.events[eventKey]\n object.events[eventKey + REVERT_MUTATION]()\n delete object.events[eventKey + REVERT_MUTATION]\n }\n }\n}\n\nexport let onStart = ($store, listener) =>\n on($store, listener, START, runListeners => {\n let originListen = $store.listen\n $store.listen = arg => {\n if (!$store.lc && !$store.starting) {\n $store.starting = true\n runListeners()\n delete $store.starting\n }\n return originListen(arg)\n }\n return () => {\n $store.listen = originListen\n }\n })\n\nexport let onStop = ($store, listener) =>\n on($store, listener, STOP, runListeners => {\n let originOff = $store.off\n $store.off = () => {\n runListeners()\n originOff()\n }\n return () => {\n $store.off = originOff\n }\n })\n\nexport let onSet = ($store, listener) =>\n on($store, listener, SET, runListeners => {\n let originSet = $store.set\n let originSetKey = $store.setKey\n if ($store.setKey) {\n $store.setKey = (changed, changedValue) => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({\n abort,\n changed,\n newValue: { ...$store.value, [changed]: changedValue }\n })\n if (!isAborted) return originSetKey(changed, changedValue)\n }\n }\n $store.set = newValue => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({ abort, newValue })\n if (!isAborted) return originSet(newValue)\n }\n return () => {\n $store.set = originSet\n $store.setKey = originSetKey\n }\n })\n\nexport let onNotify = ($store, listener) =>\n on($store, listener, NOTIFY, runListeners => {\n let originNotify = $store.notify\n $store.notify = (oldValue, changed) => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({ abort, changed, oldValue })\n if (!isAborted) return originNotify(oldValue, changed)\n }\n return () => {\n $store.notify = originNotify\n }\n })\n\nexport const STORE_UNMOUNT_DELAY = 1000\n\nexport let onMount = ($store, initialize) => {\n let listener = payload => {\n let destroy = initialize(payload)\n if (destroy) $store.events[UNMOUNT].push(destroy)\n }\n return on($store, listener, MOUNT, runListeners => {\n let originListen = $store.listen\n $store.listen = (...args) => {\n if (!$store.lc && !$store.active) {\n $store.active = true\n runListeners()\n }\n return originListen(...args)\n }\n\n let originOff = $store.off\n $store.events[UNMOUNT] = []\n $store.off = () => {\n originOff()\n setTimeout(() => {\n if ($store.active && !$store.lc) {\n $store.active = false\n for (let destroy of $store.events[UNMOUNT]) destroy()\n $store.events[UNMOUNT] = []\n }\n }, STORE_UNMOUNT_DELAY)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n let originClean = $store[clean]\n $store[clean] = () => {\n for (let destroy of $store.events[UNMOUNT]) destroy()\n $store.events[UNMOUNT] = []\n $store.active = false\n originClean()\n }\n }\n\n return () => {\n $store.listen = originListen\n $store.off = originOff\n }\n })\n}\n","import { atom, onMount } from \"nanostores\";\n//#region src/client/query.ts\nconst isServer = () => typeof window === \"undefined\";\nconst useAuthQuery = (initializedAtom, path, $fetch, options) => {\n\tconst value = atom({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: true,\n\t\tisRefetching: false,\n\t\trefetch: (queryParams) => fn(queryParams)\n\t});\n\tconst fn = async (queryParams) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst opts = typeof options === \"function\" ? options({\n\t\t\t\tdata: value.get().data,\n\t\t\t\terror: value.get().error,\n\t\t\t\tisPending: value.get().isPending\n\t\t\t}) : options;\n\t\t\t$fetch(path, {\n\t\t\t\t...opts,\n\t\t\t\tquery: {\n\t\t\t\t\t...opts?.query,\n\t\t\t\t\t...queryParams?.query\n\t\t\t\t},\n\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\tdata: context.data,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t\t},\n\t\t\t\tasync onError(context) {\n\t\t\t\t\tconst { request } = context;\n\t\t\t\t\tconst retryAttempts = typeof request.retry === \"number\" ? request.retry : request.retry?.attempts;\n\t\t\t\t\tconst retryAttempt = request.retryAttempt || 0;\n\t\t\t\t\tif (retryAttempts && retryAttempt < retryAttempts) return;\n\t\t\t\t\tconst isUnauthorized = context.error.status === 401;\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\terror: context.error,\n\t\t\t\t\t\tdata: isUnauthorized ? null : value.get().data,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onError?.(context);\n\t\t\t\t},\n\t\t\t\tasync onRequest(context) {\n\t\t\t\t\tconst currentValue = value.get();\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\tisPending: currentValue.data === null,\n\t\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tisRefetching: true,\n\t\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror,\n\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\tisPending: false,\n\t\t\t\t\tisRefetching: false,\n\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t});\n\t\t\t}).finally(() => {\n\t\t\t\tresolve(void 0);\n\t\t\t});\n\t\t});\n\t};\n\tinitializedAtom = Array.isArray(initializedAtom) ? initializedAtom : [initializedAtom];\n\tlet isInitialized = false;\n\tfor (const initAtom of initializedAtom) initAtom.subscribe(async () => {\n\t\tif (isServer()) return;\n\t\tif (isInitialized) await fn();\n\t\telse onMount(value, () => {\n\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\tif (!isInitialized) {\n\t\t\t\t\tisInitialized = true;\n\t\t\t\t\tawait fn();\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t\treturn () => {\n\t\t\t\tvalue.off();\n\t\t\t\tinitAtom.off();\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t};\n\t\t});\n\t});\n\treturn value;\n};\n//#endregion\nexport { useAuthQuery };\n","import { getGlobalBroadcastChannel } from \"./broadcast-channel.mjs\";\nimport { getGlobalFocusManager } from \"./focus-manager.mjs\";\nimport { getGlobalOnlineManager } from \"./online-manager.mjs\";\n//#region src/client/session-refresh.ts\nconst now = () => Math.floor(Date.now() / 1e3);\n/**\n* Normalize $fetch response: `throw: true` returns data directly, otherwise `{ data, error }`.\n*/\nfunction normalizeSessionResponse(res) {\n\tif (typeof res === \"object\" && res !== null && \"data\" in res && \"error\" in res) return res;\n\treturn {\n\t\tdata: res,\n\t\terror: null\n\t};\n}\n/**\n* Rate limit: don't refetch on focus if a session request was made within this many seconds\n*/\nconst FOCUS_REFETCH_RATE_LIMIT_SECONDS = 5;\nfunction createSessionRefreshManager(opts) {\n\tconst { sessionAtom, sessionSignal, $fetch, options = {} } = opts;\n\tconst refetchInterval = options.sessionOptions?.refetchInterval ?? 0;\n\tconst refetchOnWindowFocus = options.sessionOptions?.refetchOnWindowFocus ?? true;\n\tconst refetchWhenOffline = options.sessionOptions?.refetchWhenOffline ?? false;\n\tconst state = {\n\t\tlastSync: 0,\n\t\tlastSessionRequest: 0,\n\t\tcachedSession: void 0\n\t};\n\tconst shouldRefetch = () => {\n\t\treturn refetchWhenOffline || getGlobalOnlineManager().isOnline;\n\t};\n\tconst triggerRefetch = (event) => {\n\t\tif (!shouldRefetch()) return;\n\t\tif (event?.event === \"storage\") {\n\t\t\tstate.lastSync = now();\n\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t\treturn;\n\t\t}\n\t\tconst currentSession = sessionAtom.get();\n\t\tconst fetchSessionWithRefresh = () => {\n\t\t\tstate.lastSessionRequest = now();\n\t\t\t$fetch(\"/get-session\").then(async (res) => {\n\t\t\t\tlet { data, error } = normalizeSessionResponse(res);\n\t\t\t\tif (data?.needsRefresh) try {\n\t\t\t\t\tconst refreshRes = await $fetch(\"/get-session\", { method: \"POST\" });\n\t\t\t\t\t({data, error} = normalizeSessionResponse(refreshRes));\n\t\t\t\t} catch {}\n\t\t\t\tconst sessionData = data?.session && data?.user ? data : null;\n\t\t\t\tsessionAtom.set({\n\t\t\t\t\t...currentSession,\n\t\t\t\t\tdata: sessionData,\n\t\t\t\t\terror\n\t\t\t\t});\n\t\t\t\tstate.lastSync = now();\n\t\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t\t}).catch(() => {});\n\t\t};\n\t\tif (event?.event === \"poll\") {\n\t\t\tfetchSessionWithRefresh();\n\t\t\treturn;\n\t\t}\n\t\tif (event?.event === \"visibilitychange\") {\n\t\t\tif (now() - state.lastSessionRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS) return;\n\t\t\tstate.lastSessionRequest = now();\n\t\t}\n\t\tif (event?.event === \"visibilitychange\") {\n\t\t\tfetchSessionWithRefresh();\n\t\t\treturn;\n\t\t}\n\t\tif (currentSession?.data === null || currentSession?.data === void 0) {\n\t\t\tstate.lastSync = now();\n\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t}\n\t};\n\tconst broadcastSessionUpdate = (trigger) => {\n\t\tgetGlobalBroadcastChannel().post({\n\t\t\tevent: \"session\",\n\t\t\tdata: { trigger },\n\t\t\tclientId: Math.random().toString(36).substring(7)\n\t\t});\n\t};\n\tconst setupPolling = () => {\n\t\tif (refetchInterval && refetchInterval > 0) state.pollInterval = setInterval(() => {\n\t\t\tif (sessionAtom.get()?.data) triggerRefetch({ event: \"poll\" });\n\t\t}, refetchInterval * 1e3);\n\t};\n\tconst setupBroadcast = () => {\n\t\tstate.unsubscribeBroadcast = getGlobalBroadcastChannel().subscribe(() => {\n\t\t\ttriggerRefetch({ event: \"storage\" });\n\t\t});\n\t};\n\tconst setupFocusRefetch = () => {\n\t\tif (!refetchOnWindowFocus) return;\n\t\tstate.unsubscribeFocus = getGlobalFocusManager().subscribe(() => {\n\t\t\ttriggerRefetch({ event: \"visibilitychange\" });\n\t\t});\n\t};\n\tconst setupOnlineRefetch = () => {\n\t\tstate.unsubscribeOnline = getGlobalOnlineManager().subscribe((online) => {\n\t\t\tif (online) triggerRefetch({ event: \"visibilitychange\" });\n\t\t});\n\t};\n\tconst init = () => {\n\t\tsetupPolling();\n\t\tsetupBroadcast();\n\t\tsetupFocusRefetch();\n\t\tsetupOnlineRefetch();\n\t\tgetGlobalBroadcastChannel().setup();\n\t\tgetGlobalFocusManager().setup();\n\t\tgetGlobalOnlineManager().setup();\n\t};\n\tconst cleanup = () => {\n\t\tif (state.pollInterval) {\n\t\t\tclearInterval(state.pollInterval);\n\t\t\tstate.pollInterval = void 0;\n\t\t}\n\t\tif (state.unsubscribeBroadcast) {\n\t\t\tstate.unsubscribeBroadcast();\n\t\t\tstate.unsubscribeBroadcast = void 0;\n\t\t}\n\t\tif (state.unsubscribeFocus) {\n\t\t\tstate.unsubscribeFocus();\n\t\t\tstate.unsubscribeFocus = void 0;\n\t\t}\n\t\tif (state.unsubscribeOnline) {\n\t\t\tstate.unsubscribeOnline();\n\t\t\tstate.unsubscribeOnline = void 0;\n\t\t}\n\t\tstate.lastSync = 0;\n\t\tstate.lastSessionRequest = 0;\n\t\tstate.cachedSession = void 0;\n\t};\n\treturn {\n\t\tinit,\n\t\tcleanup,\n\t\ttriggerRefetch,\n\t\tbroadcastSessionUpdate\n\t};\n}\n//#endregion\nexport { createSessionRefreshManager };\n","//#region src/client/fetch-plugins.ts\nconst redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: { onSuccess(context) {\n\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\tif (typeof window !== \"undefined\" && window.location) {\n\t\t\t\tif (window.location) try {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\t} }\n};\n//#endregion\nexport { redirectPlugin };\n","import { useAuthQuery } from \"./query.mjs\";\nimport { createSessionRefreshManager } from \"./session-refresh.mjs\";\nimport { atom, onMount } from \"nanostores\";\n//#region src/client/session-atom.ts\nfunction getSessionAtom($fetch, options) {\n\tconst $signal = atom(false);\n\tconst session = useAuthQuery($signal, \"/get-session\", $fetch, { method: \"GET\" });\n\tlet broadcastSessionUpdate = () => {};\n\tonMount(session, () => {\n\t\tconst refreshManager = createSessionRefreshManager({\n\t\t\tsessionAtom: session,\n\t\t\tsessionSignal: $signal,\n\t\t\t$fetch,\n\t\t\toptions\n\t\t});\n\t\trefreshManager.init();\n\t\tbroadcastSessionUpdate = refreshManager.broadcastSessionUpdate;\n\t\treturn () => {\n\t\t\trefreshManager.cleanup();\n\t\t};\n\t});\n\treturn {\n\t\tsession,\n\t\t$sessionSignal: $signal,\n\t\tbroadcastSessionUpdate: (trigger) => broadcastSessionUpdate(trigger)\n\t};\n}\n//#endregion\nexport { getSessionAtom };\n","import { getBaseURL } from \"../utils/url.mjs\";\nimport { parseJSON } from \"./parser.mjs\";\nimport { redirectPlugin } from \"./fetch-plugins.mjs\";\nimport { getSessionAtom } from \"./session-atom.mjs\";\nimport { defu } from \"defu\";\nimport { createFetch } from \"@better-fetch/fetch\";\n//#region src/client/config.ts\nconst resolvePublicAuthUrl = (basePath) => {\n\tif (typeof process === \"undefined\") return void 0;\n\tconst path = basePath ?? \"/api/auth\";\n\tif (process.env.NEXT_PUBLIC_AUTH_URL) return process.env.NEXT_PUBLIC_AUTH_URL;\n\tif (typeof window === \"undefined\") {\n\t\tif (process.env.NEXTAUTH_URL) try {\n\t\t\treturn process.env.NEXTAUTH_URL;\n\t\t} catch {}\n\t\tif (process.env.VERCEL_URL) try {\n\t\t\tconst protocol = process.env.VERCEL_URL.startsWith(\"http\") ? \"\" : \"https://\";\n\t\t\treturn `${new URL(`${protocol}${process.env.VERCEL_URL}`).origin}${path}`;\n\t\t} catch {}\n\t}\n};\nconst getClientConfig = (options, loadEnv) => {\n\tconst isCredentialsSupported = \"credentials\" in Request.prototype;\n\tconst baseURL = getBaseURL(options?.baseURL, options?.basePath, void 0, loadEnv) ?? resolvePublicAuthUrl(options?.basePath) ?? \"/api/auth\";\n\tconst pluginsFetchPlugins = options?.plugins?.flatMap((plugin) => plugin.fetchPlugins).filter((pl) => pl !== void 0) || [];\n\tconst lifeCyclePlugin = {\n\t\tid: \"lifecycle-hooks\",\n\t\tname: \"lifecycle-hooks\",\n\t\thooks: {\n\t\t\tonSuccess: options?.fetchOptions?.onSuccess,\n\t\t\tonError: options?.fetchOptions?.onError,\n\t\t\tonRequest: options?.fetchOptions?.onRequest,\n\t\t\tonResponse: options?.fetchOptions?.onResponse\n\t\t}\n\t};\n\tconst { onSuccess: _onSuccess, onError: _onError, onRequest: _onRequest, onResponse: _onResponse, ...restOfFetchOptions } = options?.fetchOptions || {};\n\tconst $fetch = createFetch({\n\t\tbaseURL,\n\t\t...isCredentialsSupported ? { credentials: \"include\" } : {},\n\t\tmethod: \"GET\",\n\t\tjsonParser(text) {\n\t\t\tif (!text) return null;\n\t\t\treturn parseJSON(text, { strict: false });\n\t\t},\n\t\tcustomFetchImpl: fetch,\n\t\t...restOfFetchOptions,\n\t\tplugins: [\n\t\t\tlifeCyclePlugin,\n\t\t\t...restOfFetchOptions.plugins || [],\n\t\t\t...options?.disableDefaultFetchPlugins ? [] : [redirectPlugin],\n\t\t\t...pluginsFetchPlugins\n\t\t]\n\t});\n\tconst { $sessionSignal, session, broadcastSessionUpdate } = getSessionAtom($fetch, options);\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {};\n\tconst pluginsAtoms = {\n\t\t$sessionSignal,\n\t\tsession\n\t};\n\tconst pluginPathMethods = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/revoke-sessions\": \"POST\",\n\t\t\"/revoke-other-sessions\": \"POST\",\n\t\t\"/delete-user\": \"POST\"\n\t};\n\tconst atomListeners = [{\n\t\tsignal: \"$sessionSignal\",\n\t\tmatcher(path) {\n\t\t\treturn path === \"/sign-out\" || path === \"/update-user\" || path === \"/update-session\" || path === \"/sign-up/email\" || path === \"/sign-in/email\" || path === \"/delete-user\" || path === \"/verify-email\" || path === \"/revoke-sessions\" || path === \"/revoke-session\" || path === \"/revoke-other-sessions\" || path === \"/change-email\" || path === \"/change-password\";\n\t\t},\n\t\tcallback(path) {\n\t\t\tif (path === \"/sign-out\") broadcastSessionUpdate(\"signout\");\n\t\t\telse if (path === \"/update-user\" || path === \"/update-session\") broadcastSessionUpdate(\"updateUser\");\n\t\t}\n\t}];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getAtoms) Object.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\tif (plugin.pathMethods) Object.assign(pluginPathMethods, plugin.pathMethods);\n\t\tif (plugin.atomListeners) atomListeners.push(...plugin.atomListeners);\n\t}\n\tconst $store = {\n\t\tnotify: (signal) => {\n\t\t\tpluginsAtoms[signal].set(!pluginsAtoms[signal].get());\n\t\t},\n\t\tlisten: (signal, listener) => {\n\t\t\tpluginsAtoms[signal].subscribe(listener);\n\t\t},\n\t\tatoms: pluginsAtoms\n\t};\n\tfor (const plugin of plugins) if (plugin.getActions) pluginsActions = defu(plugin.getActions?.($fetch, $store, options) ?? {}, pluginsActions);\n\treturn {\n\t\tget baseURL() {\n\t\t\treturn baseURL;\n\t\t},\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t\t$store\n\t};\n};\n//#endregion\nexport { getClientConfig };\n","//#region src/utils/is-atom.ts\nfunction isAtom(value) {\n\treturn typeof value === \"object\" && value !== null && \"get\" in value && typeof value.get === \"function\" && \"lc\" in value && typeof value.lc === \"number\";\n}\n//#endregion\nexport { isAtom };\n","import { isAtom } from \"../utils/is-atom.mjs\";\n//#region src/client/proxy.ts\nfunction getMethod(path, knownPathMethods, args) {\n\tconst method = knownPathMethods[path];\n\tconst { fetchOptions, query: _query, ...body } = args || {};\n\tif (method) return method;\n\tif (fetchOptions?.method) return fetchOptions.method;\n\tif (body && Object.keys(body).length > 0) return \"POST\";\n\treturn \"GET\";\n}\nfunction createDynamicPathProxy(routes, client, knownPathMethods, atoms, atomListeners) {\n\tfunction createProxy(path = []) {\n\t\treturn new Proxy(function() {}, {\n\t\t\tget(_, prop) {\n\t\t\t\tif (typeof prop !== \"string\") return;\n\t\t\t\tif (prop === \"then\" || prop === \"catch\" || prop === \"finally\") return;\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current = routes;\n\t\t\t\tfor (const segment of fullPath) if (current && typeof current === \"object\" && segment in current) current = current[segment];\n\t\t\t\telse {\n\t\t\t\t\tcurrent = void 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (typeof current === \"function\") return current;\n\t\t\t\tif (isAtom(current)) return current;\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath = \"/\" + path.map((segment) => segment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)).join(\"/\");\n\t\t\t\tconst arg = args[0] || {};\n\t\t\t\tconst fetchOptions = args[1] || {};\n\t\t\t\tconst { query, fetchOptions: argFetchOptions, ...body } = arg;\n\t\t\t\tconst options = {\n\t\t\t\t\t...fetchOptions,\n\t\t\t\t\t...argFetchOptions\n\t\t\t\t};\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody: method === \"GET\" ? void 0 : {\n\t\t\t\t\t\t...body,\n\t\t\t\t\t\t...options?.body || {}\n\t\t\t\t\t},\n\t\t\t\t\tquery: query || options?.query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\tif (!atomListeners || options.disableSignal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t* We trigger listeners\n\t\t\t\t\t\t*/\n\t\t\t\t\t\tconst matches = atomListeners.filter((s) => s.matcher(routePath));\n\t\t\t\t\t\tif (!matches.length) return;\n\t\t\t\t\t\tconst visited = /* @__PURE__ */ new Set();\n\t\t\t\t\t\tfor (const match of matches) {\n\t\t\t\t\t\t\tconst signal = atoms[match.signal];\n\t\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t\tif (visited.has(match.signal)) continue;\n\t\t\t\t\t\t\tvisited.add(match.signal);\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t* To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\tmatch.callback?.(routePath);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\treturn createProxy();\n}\n//#endregion\nexport { createDynamicPathProxy };\n","import { getClientConfig } from \"./config.mjs\";\nimport { createDynamicPathProxy } from \"./proxy.mjs\";\nimport { capitalizeFirstLetter } from \"@better-auth/core/utils/string\";\n//#region src/client/vanilla.ts\nfunction createAuthClient(options) {\n\tconst { pluginPathMethods, pluginsActions, pluginsAtoms, $fetch, atomListeners, $store } = getClientConfig(options);\n\tconst resolvedHooks = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) resolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\treturn createDynamicPathProxy({\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\t$fetch,\n\t\t$store\n\t}, $fetch, pluginPathMethods, pluginsAtoms, atomListeners);\n}\n//#endregion\nexport { createAuthClient };\n","/**\n * Better Auth client helper for Leapify API consumers.\n *\n * This module is **browser-safe** — no Cloudflare, Drizzle, or Hono deps.\n * It wraps Better Auth's client SDK with the bearer plugin so that tokens\n * can be stored and retrieved as plain strings (no cookie dependency on\n * the consumer's frontend).\n *\n * @example\n * // lib/auth.ts (frontend)\n * import { createLeapifyAuthClient, signInWithGoogleRedirect } from 'leapify/client'\n *\n * export const authClient = createLeapifyAuthClient(process.env.NEXT_PUBLIC_API_URL!)\n *\n * // Redirect-based Google sign-in:\n * await signInWithGoogleRedirect(authClient, '/dashboard')\n */\n\nimport { createAuthClient } from 'better-auth/client'\n\nconst AUTH_TOKEN_KEY = 'better-auth.session_token'\n\n/**\n * Create a Better Auth client bound to the Leapify Worker URL.\n *\n * It uses the 'Bearer' auth type to send the stored session token\n * in the Authorization header.\n */\nexport function createLeapifyAuthClient(baseUrl: string) {\n return createAuthClient({\n baseURL: baseUrl,\n fetchOptions: {\n auth: {\n type: 'Bearer',\n token: () => {\n if (typeof window !== 'undefined') {\n return localStorage.getItem(AUTH_TOKEN_KEY) || ''\n }\n return ''\n }\n }\n }\n })\n}\n\nexport type LeapifyAuthClient = ReturnType<typeof createLeapifyAuthClient>\n\n/**\n * Sign in with Google via OAuth redirect flow.\n *\n * Redirects the browser to Google's OAuth page. After authentication,\n * Google redirects back to the Better Auth callback endpoint, which\n * creates a session and redirects to `callbackURL`.\n *\n * Call `syncCookieSessionToStorage()` on app init to restore the\n * session from the cookie after a redirect-based sign-in.\n *\n * @param authClient - Client created by createLeapifyAuthClient\n * @param callbackURL - Path or URL to redirect to after successful auth (e.g. '/dashboard')\n *\n * @example\n * import { signInWithGoogleRedirect } from 'leapify/client'\n *\n * document.getElementById('google-btn').onclick = () => {\n * signInWithGoogleRedirect(authClient, '/dashboard')\n * }\n */\nexport async function signInWithGoogleRedirect(\n authClient: LeapifyAuthClient,\n callbackURL: string,\n): Promise<void> {\n await authClient.signIn.social({\n provider: 'google',\n callbackURL,\n })\n}\n\n/**\n * Sync a cookie-based Better Auth session into localStorage.\n *\n * After an OAuth redirect flow, Better Auth stores the session in an\n * HTTP-only cookie. This function reads that session via `getSession()`\n * and stores the token in localStorage so that subsequent API calls\n * using the Bearer token work correctly.\n *\n * Call this once on app initialization, before `initializeSession()`.\n *\n * @param authClient - Client created by createLeapifyAuthClient\n *\n * @example\n * import { syncCookieSessionToStorage, initializeSession } from 'leapify/client'\n *\n * // On app mount:\n * await syncCookieSessionToStorage(authClient)\n * const user = await initializeSession(API_URL, getToken)\n */\nexport async function syncCookieSessionToStorage(\n authClient: LeapifyAuthClient,\n): Promise<void> {\n try {\n const result = await authClient.getSession()\n const data = result?.data as { session?: { token?: string } } | undefined\n const token = data?.session?.token\n if (token) {\n localStorage.setItem(AUTH_TOKEN_KEY, token)\n }\n } catch {\n // No cookie session — user is a guest.\n }\n}\n\n/**\n * Get the current bearer token from storage, or null for guests.\n * Pass this to `createLeapifyClient` as the `getToken` option.\n *\n * @example\n * import { createLeapifyClient } from 'leapify/client'\n * import { createLeapifyAuthClient, getLeapifyToken } from 'leapify/client'\n *\n * const authClient = createLeapifyAuthClient(API_URL)\n * const api = createLeapifyClient(API_URL, () => getLeapifyToken(authClient))\n */\nexport async function getLeapifyToken(\n // @ts-ignore - Kept for backwards compatibility with previous signature\n authClient?: LeapifyAuthClient,\n): Promise<string | null> {\n if (typeof window !== 'undefined') {\n return localStorage.getItem(AUTH_TOKEN_KEY)\n }\n return null\n}\n\n/**\n * Sign out the current user.\n */\nexport async function signOut(authClient: LeapifyAuthClient) {\n const result = await authClient.signOut()\n if (typeof window !== 'undefined') {\n localStorage.removeItem(AUTH_TOKEN_KEY)\n }\n return result\n}\n","/**\n * Browser-safe Proof-of-Work challenge solver.\n *\n * Solves the SHA-256 PoW challenge served by the leapify backend middleware.\n * After solving, the server sets a signed cookie (1h TTL) so subsequent\n * requests bypass the challenge automatically.\n *\n * Import from 'leapify/client' — no Cloudflare, Drizzle, or Hono deps.\n *\n * @example\n * import { solvePowChallenge } from 'leapify/client'\n *\n * // Call once on app load before any API requests\n * await solvePowChallenge('https://api.leap.yourdomain.com')\n */\n\nconst POW_VERIFY_PATH = \"/.well-known/leapify/pow/verify\";\n\n/**\n * Solve the backend's Proof-of-Work challenge if one is active.\n *\n * Probes the given base URL for an HTML challenge page. If detected,\n * brute-forces a SHA-256 nonce (~100-500ms) and submits the solution.\n * The resulting cookie covers all API paths for 1 hour.\n *\n * @param baseUrl - The Leapify Worker URL (e.g. `https://api.leap.yourdomain.com`).\n * If omitted, uses the current page origin (same-origin requests).\n * @returns `true` if a challenge was solved, `false` if no challenge was needed.\n */\nexport async function solvePowChallenge(baseUrl?: string): Promise<boolean> {\n const base = baseUrl?.replace(/\\/$/, \"\") ?? \"\";\n\n let html: string;\n try {\n const res = await fetch(`${base}/api/classes`, { credentials: \"include\" });\n const ct = res.headers.get(\"content-type\") || \"\";\n if (!ct.includes(\"text/html\")) {\n return false;\n }\n html = await res.text();\n } catch {\n return false;\n }\n\n const idMatch = html.match(/challengeId\\s*=\\s*\"([^\"]+)\"/);\n const diffMatch = html.match(/difficulty\\s*=\\s*(\\d+)/);\n if (!idMatch || !diffMatch) {\n return false;\n }\n\n const challengeId = idMatch[1];\n const difficulty = Number(diffMatch[1]);\n const prefix = \"0\".repeat(Math.ceil(difficulty / 4));\n\n let nonce = 0;\n while (true) {\n const input = new TextEncoder().encode(`${challengeId}:${nonce}`);\n const hash = await crypto.subtle.digest(\"SHA-256\", input);\n const hex = Array.from(new Uint8Array(hash))\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n if (hex.startsWith(prefix)) {\n await fetch(`${base}${POW_VERIFY_PATH}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id: challengeId, nonce, elapsed: 0 }),\n credentials: \"include\",\n });\n return true;\n }\n nonce++;\n }\n}\n","/**\n * Browser-safe session initialization helper.\n *\n * Solves the PoW challenge (if active), checks for an existing session token,\n * and fetches the user profile. Returns the authenticated user or null.\n *\n * Import from 'leapify/client' — no Cloudflare, Drizzle, or Hono deps.\n *\n * @example\n * import { initializeSession, createLeapifyClient } from 'leapify/client'\n *\n * const user = await initializeSession(\n * 'https://api.leap.yourdomain.com',\n * () => getLeapifyToken(),\n * )\n * if (user) {\n * console.log(`Welcome ${user.name} (${user.role})`)\n * }\n */\n\nimport { solvePowChallenge } from \"./pow\";\nimport type { UserProfile } from \"./types\";\n\n/**\n * Initialize a browser session: solve PoW, restore existing token, fetch profile.\n *\n * @param baseUrl - The Leapify Worker URL.\n * @param getToken - Async function returning the current session token, or null.\n * @returns The authenticated user profile, or null if not signed in.\n */\nexport async function initializeSession(\n baseUrl: string,\n getToken: () => Promise<string | null>,\n): Promise<UserProfile | null> {\n await solvePowChallenge(baseUrl);\n\n const token = await getToken();\n if (!token) return null;\n\n const base = baseUrl.replace(/\\/$/, \"\");\n const res = await fetch(`${base}/api/users/me`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n if (!res.ok) return null;\n\n const body = await res.json().catch(() => ({}));\n return (body as { data: UserProfile | null }).data ?? null;\n}\n","/**\r\n * Leapify browser-safe API client.\r\n *\r\n * Import from 'leapify/client' — no Cloudflare, Drizzle, or Hono dependencies.\r\n *\r\n * @example\r\n * import { createLeapifyClient, createLeapifyAuthClient, getLeapifyToken } from 'leapify/client'\r\n *\r\n * const authClient = createLeapifyAuthClient(process.env.NEXT_PUBLIC_API_URL!)\r\n * const api = createLeapifyClient(\r\n * process.env.NEXT_PUBLIC_API_URL!,\r\n * () => getLeapifyToken(authClient),\r\n * )\r\n *\r\n * const events = await api.getEvents()\r\n */\r\n\r\nexport type {\r\n LeapEvent,\r\n SlotInfo,\r\n UserProfile,\r\n BookmarkEntry,\r\n Faq,\r\n Theme,\r\n Organization,\r\n SiteConfig,\r\n ToggleBookmarkResult,\r\n LeapifyErrorBody,\r\n UserRole,\r\n EventStatus,\r\n CreateEventBody,\r\n CreateFaqBody,\r\n SnapshotResult,\r\n HealthResponse,\r\n RuntimeConfig,\r\n CmsMode,\r\n} from \"./types\";\r\n\r\nexport {\r\n createLeapifyAuthClient,\r\n signInWithGoogleRedirect,\r\n syncCookieSessionToStorage,\r\n getLeapifyToken,\r\n signOut,\r\n} from \"./auth\";\r\nexport type { LeapifyAuthClient } from \"./auth\";\r\n\r\nexport { solvePowChallenge } from \"./pow\";\r\nexport { initializeSession } from \"./session\";\r\n\r\n/**\r\n * Read the runtime config injected by the worker into HTML pages.\r\n * Returns null if not running in a browser or config not injected.\r\n */\r\nexport function getClientConfig(): RuntimeConfig | null {\r\n if (typeof window === \"undefined\") return null;\r\n const config = (window as unknown as Record<string, unknown>).__CONFIG__;\r\n if (!config || typeof config !== \"object\") return null;\r\n return config as RuntimeConfig;\r\n}\r\n\r\nimport type { RuntimeConfig } from \"./types\";\r\n\r\n/**\r\n * Structured error thrown by all client methods on non-2xx responses.\r\n *\r\n * @example\r\n * import { LeapifyApiError } from 'leapify/client'\r\n *\r\n * try {\r\n * await api.toggleBookmark(eventId)\r\n * } catch (err) {\r\n * if (err instanceof LeapifyApiError && err.code === 'UNAUTHORIZED') {\r\n * // redirect to sign-in\r\n * }\r\n * }\r\n */\r\nexport class LeapifyApiError extends Error {\r\n constructor(\r\n public readonly status: number,\r\n public readonly code: string,\r\n message: string,\r\n ) {\r\n super(message);\r\n this.name = \"LeapifyApiError\";\r\n }\r\n}\r\n\r\n// ─── Error code constants ───────────────────────────────────────────────────\r\n\r\nexport const LEAPIFY_ERROR_CODES = {\r\n UNAUTHORIZED: \"UNAUTHORIZED\",\r\n DOMAIN_RESTRICTED: \"DOMAIN_RESTRICTED\",\r\n FORBIDDEN: \"FORBIDDEN\",\r\n NOT_FOUND: \"NOT_FOUND\",\r\n CONFLICT: \"CONFLICT\",\r\n TOO_MANY_REQUESTS: \"TOO_MANY_REQUESTS\",\r\n SERVICE_UNAVAILABLE: \"SERVICE_UNAVAILABLE\",\r\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\r\n} as const;\r\n\r\nexport type LeapifyErrorCode = keyof typeof LEAPIFY_ERROR_CODES;\r\n\r\n// ─── Client factory ─────────────────────────────────────────────────────────\r\n\r\nimport type {\r\n LeapEvent,\r\n SlotInfo,\r\n UserProfile,\r\n BookmarkEntry,\r\n Faq,\r\n Theme,\r\n Organization,\r\n SiteConfig,\r\n ToggleBookmarkResult,\r\n LeapifyErrorBody,\r\n CreateEventBody,\r\n CreateFaqBody,\r\n SnapshotResult,\r\n HealthResponse,\r\n} from \"./types\";\r\n\r\ntype GetTokenFn = () => Promise<string | null>;\r\n\r\nasync function buildHeaders(\r\n getToken: GetTokenFn | undefined,\r\n extra: Record<string, string> = {},\r\n): Promise<Record<string, string>> {\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n ...extra,\r\n };\r\n if (getToken) {\r\n const token = await getToken();\r\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\r\n }\r\n return headers;\r\n}\r\n\r\nasync function parseResponse<T>(res: Response): Promise<T> {\r\n if (res.status === 204) return undefined as T;\r\n\r\n const body = await res.json().catch(() => ({}));\r\n\r\n if (!res.ok) {\r\n const err = (body as LeapifyErrorBody)?.error;\r\n throw new LeapifyApiError(\r\n res.status,\r\n err?.code ?? \"UNKNOWN\",\r\n err?.message ?? res.statusText,\r\n );\r\n }\r\n\r\n return (body as { data: T }).data;\r\n}\r\n\r\n/**\r\n * Creates a typed Leapify API client bound to a base URL.\r\n *\r\n * @param baseUrl - The deployed Leapify Worker URL (e.g. `https://api.leap.yourdomain.com`).\r\n * @param getToken - Optional async function that returns a session token string,\r\n * or null for guest requests. Use `getLeapifyToken()` from this module.\r\n *\r\n * @example\r\n * // lib/api.ts\r\n * import { createLeapifyClient, getLeapifyToken } from 'leapify/client'\r\n *\r\n * export const api = createLeapifyClient(\r\n * process.env.NEXT_PUBLIC_API_URL!,\r\n * () => getLeapifyToken(),\r\n * )\r\n */\r\nexport function createLeapifyClient(baseUrl: string, getToken?: GetTokenFn) {\r\n const base = baseUrl.replace(/\\/$/, \"\");\r\n\r\n async function get<T>(path: string, init?: RequestInit): Promise<T> {\r\n const headers = await buildHeaders(getToken, init?.headers as Record<string, string>);\r\n const res = await fetch(`${base}${path}`, { ...init, method: \"GET\", headers });\r\n return parseResponse<T>(res);\r\n }\r\n\r\n async function post<T>(path: string, body?: unknown): Promise<T> {\r\n const headers = await buildHeaders(getToken);\r\n const res = await fetch(`${base}${path}`, {\r\n method: \"POST\",\r\n headers,\r\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\r\n });\r\n return parseResponse<T>(res);\r\n }\r\n\r\n async function postFormData<T>(path: string, formData: FormData): Promise<T> {\r\n const headers: Record<string, string> = {};\r\n if (getToken) {\r\n const token = await getToken();\r\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\r\n }\r\n const res = await fetch(`${base}${path}`, {\r\n method: \"POST\",\r\n headers,\r\n body: formData,\r\n });\r\n return parseResponse<T>(res);\r\n }\r\n\r\n async function patch<T>(path: string, body: unknown): Promise<T> {\r\n const headers = await buildHeaders(getToken);\r\n const res = await fetch(`${base}${path}`, {\r\n method: \"PATCH\",\r\n headers,\r\n body: JSON.stringify(body),\r\n });\r\n return parseResponse<T>(res);\r\n }\r\n\r\n async function del<T>(path: string): Promise<T> {\r\n const headers = await buildHeaders(getToken);\r\n const res = await fetch(`${base}${path}`, { method: \"DELETE\", headers });\r\n return parseResponse<T>(res);\r\n }\r\n\r\n return {\r\n // ── Site Config ────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /config\r\n * Returns site-wide configuration. Check `maintenanceMode` and\r\n * `comingSoonUntil` on app load to gate the UI appropriately.\r\n * Use `now` (server unix epoch) for timestamp comparisons.\r\n */\r\n getConfig(): Promise<SiteConfig> {\r\n return get<SiteConfig>(\"/api/config\");\r\n },\r\n\r\n /**\r\n * PATCH /api/config/:key — admin only.\r\n * Upserts a site config value. Requires admin or super_admin role.\r\n */\r\n updateConfig<K extends string>(key: K, value: unknown): Promise<{ key: K; value: unknown }> {\r\n return patch(`/api/config/${encodeURIComponent(key)}`, { value });\r\n },\r\n\r\n // ── Events ─────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/classes\r\n * Returns all published classes. Response is ETag-cached for 7 days.\r\n */\r\n getEvents(): Promise<LeapEvent[]> {\r\n return get<LeapEvent[]>(\"/api/classes\");\r\n },\r\n\r\n /**\r\n * GET /api/classes/admin — admin only.\r\n * Returns all classes regardless of status.\r\n */\r\n getAdminEvents(): Promise<LeapEvent[]> {\r\n return get<LeapEvent[]>(\"/api/classes/admin\");\r\n },\r\n\r\n /**\r\n * POST /api/classes/admin/publish — admin only.\r\n * Batch publish queued classes immediately or schedule them for later.\r\n */\r\n batchPublish(ids: string[], releaseAt?: number): Promise<{ updated: number }> {\r\n return post(\"/api/classes/admin/publish\", { ids, releaseAt });\r\n },\r\n\r\n /**\r\n * GET /api/classes/:slug\r\n * Returns a single published class by slug.\r\n */\r\n getEvent(slug: string): Promise<LeapEvent> {\r\n return get<LeapEvent>(`/api/classes/${encodeURIComponent(slug)}`);\r\n },\r\n\r\n /**\r\n * GET /api/classes/:slug/slots\r\n * Returns real-time slot availability. CF edge caches this for 5 seconds.\r\n * Poll every 8–10 seconds on class detail pages.\r\n */\r\n getSlots(slug: string): Promise<SlotInfo> {\r\n return get<SlotInfo>(`/api/classes/${encodeURIComponent(slug)}/slots`);\r\n },\r\n\r\n /**\r\n * POST /api/classes — admin only.\r\n * Creates a new class. Auto-generates slug from title.\r\n */\r\n createEvent(data: CreateEventBody): Promise<LeapEvent> {\r\n return post<LeapEvent>(\"/api/classes\", data);\r\n },\r\n\r\n /**\r\n * PATCH /api/classes/:slug — admin only.\r\n * Updates an existing class by slug.\r\n */\r\n updateEvent(slug: string, data: Partial<CreateEventBody>): Promise<LeapEvent> {\r\n return patch<LeapEvent>(`/api/classes/${encodeURIComponent(slug)}`, data);\r\n },\r\n\r\n /**\r\n * DELETE /api/classes/:slug — admin only.\r\n * Deletes a class.\r\n */\r\n deleteEvent(slug: string): Promise<void> {\r\n return del<void>(`/api/classes/${encodeURIComponent(slug)}`);\r\n },\r\n\r\n // ── Themes ─────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/themes\r\n * Returns all themes.\r\n */\r\n getThemes(): Promise<Theme[]> {\r\n return get<Theme[]>(\"/api/themes\");\r\n },\r\n\r\n /**\r\n * POST /api/themes — admin only.\r\n */\r\n createTheme(data: Omit<Theme, \"id\" | \"createdAt\">): Promise<Theme> {\r\n return post<Theme>(\"/api/themes\", data);\r\n },\r\n\r\n /**\r\n * PATCH /api/themes/:id — admin only.\r\n */\r\n updateTheme(id: string, data: Partial<Omit<Theme, \"id\" | \"createdAt\">>): Promise<Theme> {\r\n return patch<Theme>(`/api/themes/${encodeURIComponent(id)}`, data);\r\n },\r\n\r\n /**\r\n * DELETE /api/themes/:id — admin only.\r\n */\r\n deleteTheme(id: string): Promise<void> {\r\n return del<void>(`/api/themes/${encodeURIComponent(id)}`);\r\n },\r\n\r\n // ── Organizations ──────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/organizations\r\n * Returns all organizations.\r\n */\r\n getOrganizations(): Promise<Organization[]> {\r\n return get<Organization[]>(\"/api/organizations\");\r\n },\r\n\r\n /**\r\n * POST /api/organizations — admin only.\r\n */\r\n createOrganization(data: Omit<Organization, \"id\" | \"createdAt\">): Promise<Organization> {\r\n return post<Organization>(\"/api/organizations\", data);\r\n },\r\n\r\n /**\r\n * PATCH /api/organizations/:id — admin only.\r\n */\r\n updateOrganization(id: string, data: Partial<Omit<Organization, \"id\" | \"createdAt\">>): Promise<Organization> {\r\n return patch<Organization>(`/api/organizations/${encodeURIComponent(id)}`, data);\r\n },\r\n\r\n /**\r\n * DELETE /api/organizations/:id — admin only.\r\n */\r\n deleteOrganization(id: string): Promise<void> {\r\n return del<void>(`/api/organizations/${encodeURIComponent(id)}`);\r\n },\r\n\r\n // ── Users ──────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/users/me\r\n * Returns the authenticated user's profile, or null for guests.\r\n * Use `profile.role` to gate admin UI.\r\n */\r\n getMe(): Promise<UserProfile | null> {\r\n return get<UserProfile | null>(\"/api/users/me\");\r\n },\r\n\r\n // ── Admin: User Management ────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/users — admin only.\r\n * Returns all registered users.\r\n */\r\n getUsers(): Promise<UserProfile[]> {\r\n return get<UserProfile[]>(\"/api/users\");\r\n },\r\n\r\n /**\r\n * PATCH /api/users/:id/role — admin only.\r\n * Changes a user's role.\r\n */\r\n updateUserRole(id: string, role: string): Promise<UserProfile> {\r\n return patch<UserProfile>(`/api/users/${encodeURIComponent(id)}/role`, { role });\r\n },\r\n\r\n /**\r\n * POST /api/users/by-email — admin only.\r\n * Finds or creates a user by email and sets their role.\r\n */\r\n upsertUserByEmail(email: string, role: string): Promise<UserProfile> {\r\n return post<UserProfile>(\"/api/users/by-email\", { email, role });\r\n },\r\n\r\n // ── Bookmarks ──────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/users/me/bookmarks\r\n * Returns the authenticated user's bookmarked events.\r\n * Returns an empty array for unauthenticated users.\r\n */\r\n getBookmarks(): Promise<BookmarkEntry[]> {\r\n return get<BookmarkEntry[]>(\"/api/users/me/bookmarks\");\r\n },\r\n\r\n /**\r\n * POST /api/users/me/bookmarks/:eventId\r\n * Toggles a bookmark on/off. Requires authentication.\r\n * Returns `{ bookmarked: true }` (201) on add, `{ bookmarked: false }` (200) on remove.\r\n */\r\n toggleBookmark(eventId: string): Promise<ToggleBookmarkResult> {\r\n return post<ToggleBookmarkResult>(\r\n `/api/users/me/bookmarks/${encodeURIComponent(eventId)}`,\r\n );\r\n },\r\n\r\n /**\r\n * DELETE /api/users/me/bookmarks/:eventId\r\n * Removes a bookmark. Requires authentication.\r\n */\r\n deleteBookmark(eventId: string): Promise<ToggleBookmarkResult> {\r\n return del<ToggleBookmarkResult>(\r\n `/api/users/me/bookmarks/${encodeURIComponent(eventId)}`,\r\n );\r\n },\r\n\r\n // ── FAQs ───────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /api/faqs\r\n * Returns all active FAQs. Cached in KV for 10 minutes.\r\n * The `answer` field is markdown — render with a markdown library.\r\n */\r\n getFaqs(): Promise<Faq[]> {\r\n return get<Faq[]>(\"/api/faqs\");\r\n },\r\n\r\n /**\r\n * POST /api/faqs — admin only.\r\n * Creates a new FAQ item.\r\n */\r\n createFaq(data: CreateFaqBody): Promise<Faq> {\r\n return post<Faq>(\"/api/faqs\", data);\r\n },\r\n\r\n /**\r\n * PATCH /api/faqs/:id — admin only.\r\n * Updates an existing FAQ item.\r\n */\r\n updateFaq(id: string, data: Partial<CreateFaqBody>): Promise<Faq> {\r\n return patch<Faq>(`/api/faqs/${encodeURIComponent(id)}`, data);\r\n },\r\n\r\n /**\r\n * DELETE /api/faqs/:id — admin only.\r\n * Soft-deletes a FAQ (sets isActive: false).\r\n */\r\n deleteFaq(id: string): Promise<{ deleted: boolean }> {\r\n return del<{ deleted: boolean }>(`/api/faqs/${encodeURIComponent(id)}`);\r\n },\r\n\r\n // ── Uploads ────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * POST /api/uploads/images — admin only.\r\n * Uploads an image file to R2. Accepts multipart/form-data.\r\n * Returns the public URL, storage key, size, and content type.\r\n */\r\n uploadImage(file: File | Blob): Promise<{\r\n url: string;\r\n key: string;\r\n size: number;\r\n contentType: string;\r\n }> {\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n return postFormData(\"/api/uploads/images\", formData);\r\n },\r\n\r\n // ── Content Sync ───────────────────────────────────────────────────────\r\n\r\n /**\r\n * POST /api/config/sync-content — admin only.\r\n * Pushes all D1 content to Contentful. Auto-generates content types if missing.\r\n */\r\n syncContent(): Promise<SnapshotResult> {\r\n return post<SnapshotResult>(\"/api/config/sync-content\");\r\n },\r\n\r\n // ── Health ─────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * GET /health\r\n * Public health check. Returns provider availability status.\r\n */\r\n healthCheck(): Promise<HealthResponse> {\r\n return get<HealthResponse>(\"/health\");\r\n },\r\n };\r\n}\r\n\r\nexport type LeapifyClient = ReturnType<typeof createLeapifyClient>;\r\n"]}
|
package/dist/db/migrate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAqLH;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAqLH;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BlE"}
|