@access-dlsu/leapify 0.260507.5 → 0.260524.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/chunk-64MMUYMK.cjs +167 -0
  3. package/dist/chunk-64MMUYMK.cjs.map +1 -0
  4. package/dist/chunk-AKCERDGP.js +161 -0
  5. package/dist/chunk-AKCERDGP.js.map +1 -0
  6. package/dist/client/index.cjs +55 -841
  7. package/dist/client/index.cjs.map +1 -1
  8. package/dist/client/index.d.ts +3 -8
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +53 -839
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/client/turnstile.d.ts +25 -0
  13. package/dist/client/turnstile.d.ts.map +1 -0
  14. package/dist/client/types.d.ts +2 -15
  15. package/dist/client/types.d.ts.map +1 -1
  16. package/dist/db/migrate.d.ts.map +1 -1
  17. package/dist/db/schema/classes.d.ts +0 -19
  18. package/dist/db/schema/classes.d.ts.map +1 -1
  19. package/dist/db/schema/site-config.d.ts +0 -83
  20. package/dist/db/schema/site-config.d.ts.map +1 -1
  21. package/dist/index.cjs +666 -38320
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.ts +3 -5
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +520 -38167
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib/middleware/cors.d.ts.map +1 -1
  28. package/dist/lib/middleware/rate-limit.d.ts.map +1 -1
  29. package/dist/lib/middleware/referer-guard.d.ts.map +1 -1
  30. package/dist/lib/middleware/turnstile-challenge.cjs +29 -0
  31. package/dist/lib/middleware/turnstile-challenge.cjs.map +1 -0
  32. package/dist/lib/middleware/turnstile-challenge.d.ts +45 -0
  33. package/dist/lib/middleware/turnstile-challenge.d.ts.map +1 -0
  34. package/dist/lib/middleware/turnstile-challenge.js +4 -0
  35. package/dist/lib/middleware/turnstile-challenge.js.map +1 -0
  36. package/dist/queues/jobs.d.ts +0 -5
  37. package/dist/queues/jobs.d.ts.map +1 -1
  38. package/dist/routes/classes.d.ts.map +1 -1
  39. package/dist/routes/faqs.d.ts.map +1 -1
  40. package/dist/routes/site-config.d.ts.map +1 -1
  41. package/dist/routes/themes.d.ts.map +1 -1
  42. package/dist/routes/uploads.d.ts.map +1 -1
  43. package/dist/types.d.ts +5 -26
  44. package/dist/types.d.ts.map +1 -1
  45. package/dist/worker-handler.d.ts +1 -0
  46. package/dist/worker-handler.d.ts.map +1 -1
  47. package/dist/worker.js +684 -64365
  48. package/dist/worker.js.map +1 -1
  49. package/package.json +11 -9
  50. package/dist/bun-sqlite-dialect-na--YwnN-NIYANHVJ.cjs +0 -162
  51. package/dist/bun-sqlite-dialect-na--YwnN-NIYANHVJ.cjs.map +0 -1
  52. package/dist/bun-sqlite-dialect-na--YwnN-XVQNOKSL.js +0 -160
  53. package/dist/bun-sqlite-dialect-na--YwnN-XVQNOKSL.js.map +0 -1
  54. package/dist/chunk-4DPT2KQR.cjs +0 -467
  55. package/dist/chunk-4DPT2KQR.cjs.map +0 -1
  56. package/dist/chunk-5JKLV7IE.cjs +0 -2962
  57. package/dist/chunk-5JKLV7IE.cjs.map +0 -1
  58. package/dist/chunk-5OQD5ALM.cjs +0 -76
  59. package/dist/chunk-5OQD5ALM.cjs.map +0 -1
  60. package/dist/chunk-5YYVBPAE.js +0 -2301
  61. package/dist/chunk-5YYVBPAE.js.map +0 -1
  62. package/dist/chunk-6MMWL46O.cjs +0 -7170
  63. package/dist/chunk-6MMWL46O.cjs.map +0 -1
  64. package/dist/chunk-EGRHWZRV.js +0 -3
  65. package/dist/chunk-EGRHWZRV.js.map +0 -1
  66. package/dist/chunk-EMMSS5I5.cjs +0 -37
  67. package/dist/chunk-EMMSS5I5.cjs.map +0 -1
  68. package/dist/chunk-FUCJEA2S.js +0 -6196
  69. package/dist/chunk-FUCJEA2S.js.map +0 -1
  70. package/dist/chunk-G3PMV62Z.js +0 -33
  71. package/dist/chunk-G3PMV62Z.js.map +0 -1
  72. package/dist/chunk-GNRL67OU.js +0 -2949
  73. package/dist/chunk-GNRL67OU.js.map +0 -1
  74. package/dist/chunk-HHNEB7YR.js +0 -8
  75. package/dist/chunk-HHNEB7YR.js.map +0 -1
  76. package/dist/chunk-IQEWVHLM.js +0 -889
  77. package/dist/chunk-IQEWVHLM.js.map +0 -1
  78. package/dist/chunk-JIZPYG6H.js +0 -72
  79. package/dist/chunk-JIZPYG6H.js.map +0 -1
  80. package/dist/chunk-JPVIXCF5.cjs +0 -10
  81. package/dist/chunk-JPVIXCF5.cjs.map +0 -1
  82. package/dist/chunk-JQSZJWBN.cjs +0 -3075
  83. package/dist/chunk-JQSZJWBN.cjs.map +0 -1
  84. package/dist/chunk-LVKPYSXI.cjs +0 -2312
  85. package/dist/chunk-LVKPYSXI.cjs.map +0 -1
  86. package/dist/chunk-MNEW2V4T.js +0 -447
  87. package/dist/chunk-MNEW2V4T.js.map +0 -1
  88. package/dist/chunk-MY37YE52.js +0 -3034
  89. package/dist/chunk-MY37YE52.js.map +0 -1
  90. package/dist/chunk-NKIQRCOM.cjs +0 -4
  91. package/dist/chunk-NKIQRCOM.cjs.map +0 -1
  92. package/dist/chunk-OK6RVPEH.cjs +0 -6200
  93. package/dist/chunk-OK6RVPEH.cjs.map +0 -1
  94. package/dist/chunk-OZ6HZKR5.js +0 -228
  95. package/dist/chunk-OZ6HZKR5.js.map +0 -1
  96. package/dist/chunk-RFP2X2FA.cjs +0 -903
  97. package/dist/chunk-RFP2X2FA.cjs.map +0 -1
  98. package/dist/chunk-S5DBMZVP.cjs +0 -234
  99. package/dist/chunk-S5DBMZVP.cjs.map +0 -1
  100. package/dist/chunk-XJSWMHDL.js +0 -7142
  101. package/dist/chunk-XJSWMHDL.js.map +0 -1
  102. package/dist/client/pow.d.ts +0 -28
  103. package/dist/client/pow.d.ts.map +0 -1
  104. package/dist/cron/lifecycle-check.d.ts +0 -10
  105. package/dist/cron/lifecycle-check.d.ts.map +0 -1
  106. package/dist/d1-sqlite-dialect-C2B7YsIT-6TVV7EJ5.js +0 -122
  107. package/dist/d1-sqlite-dialect-C2B7YsIT-6TVV7EJ5.js.map +0 -1
  108. package/dist/d1-sqlite-dialect-C2B7YsIT-PE74FLHQ.cjs +0 -124
  109. package/dist/d1-sqlite-dialect-C2B7YsIT-PE74FLHQ.cjs.map +0 -1
  110. package/dist/dist-DZHA5VYX.cjs +0 -260
  111. package/dist/dist-DZHA5VYX.cjs.map +0 -1
  112. package/dist/dist-RRQUBLLO.js +0 -258
  113. package/dist/dist-RRQUBLLO.js.map +0 -1
  114. package/dist/kysely-adapter-C76KJVG7.js +0 -10
  115. package/dist/kysely-adapter-C76KJVG7.js.map +0 -1
  116. package/dist/kysely-adapter-TGY4UUP5.cjs +0 -27
  117. package/dist/kysely-adapter-TGY4UUP5.cjs.map +0 -1
  118. package/dist/lib/middleware/pow-challenge.cjs +0 -29
  119. package/dist/lib/middleware/pow-challenge.cjs.map +0 -1
  120. package/dist/lib/middleware/pow-challenge.d.ts +0 -58
  121. package/dist/lib/middleware/pow-challenge.d.ts.map +0 -1
  122. package/dist/lib/middleware/pow-challenge.js +0 -4
  123. package/dist/lib/middleware/pow-challenge.js.map +0 -1
  124. package/dist/node-sqlite-dialect-B3H37T3R.cjs +0 -162
  125. package/dist/node-sqlite-dialect-B3H37T3R.cjs.map +0 -1
  126. package/dist/node-sqlite-dialect-GDP7ZE54.js +0 -160
  127. package/dist/node-sqlite-dialect-GDP7ZE54.js.map +0 -1
  128. package/dist/routes/contentful-sync.d.ts +0 -4
  129. package/dist/routes/contentful-sync.d.ts.map +0 -1
  130. package/dist/services/contentful-management.d.ts +0 -38
  131. package/dist/services/contentful-management.d.ts.map +0 -1
  132. package/dist/services/contentful.d.ts +0 -97
  133. package/dist/services/contentful.d.ts.map +0 -1
  134. package/dist/services/snapshot.d.ts +0 -95
  135. package/dist/services/snapshot.d.ts.map +0 -1
@@ -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","getBaseURL","createFetch","defu","capitalizeFirstLetter","getClientConfig"],"mappings":"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","file":"index.cjs","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"]}
1
+ {"version":3,"sources":["../../src/client/auth.ts","../../src/client/turnstile.ts","../../src/client/session.ts","../../src/client/index.ts"],"names":["createAuthClient"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\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","declare global {\n interface Window {\n turnstile: {\n render: (\n container: string | HTMLElement,\n opts: { sitekey: string; callback: (token: string) => void },\n ) => void;\n };\n }\n}\n\nconst TURNSTILE_VERIFY_PATH = \"/.well-known/leapify/turnstile/verify\";\n\nfunction getTurnstileSiteKey(): string | undefined {\n const config = (window as unknown as Record<string, unknown>).__CONFIG__ as\n | { turnstileSiteKey?: string }\n | undefined;\n return config?.turnstileSiteKey;\n}\n\nfunction loadTurnstileScript(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window.turnstile !== \"undefined\") {\n resolve();\n return;\n }\n const script = document.createElement(\"script\");\n script.src =\n \"https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit\";\n script.async = true;\n script.defer = true;\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(\"Failed to load Turnstile script\"));\n document.head.appendChild(script);\n });\n}\n\nfunction executeTurnstile(siteKey: string): Promise<string> {\n return new Promise((resolve) => {\n const container = document.createElement(\"div\");\n container.id = \"leapify-turnstile-container\";\n container.style.display = \"none\";\n document.body.appendChild(container);\n\n window.turnstile.render(`#${container.id}`, {\n sitekey: siteKey,\n callback: (token: string) => {\n container.remove();\n resolve(token);\n },\n });\n });\n}\n\n/**\n * Solve a Turnstile challenge and obtain a signed cookie from the backend.\n *\n * Loads the Turnstile script (if not already loaded), executes an invisible\n * challenge, and posts the token to the backend verify endpoint. The server\n * sets a signed cookie that bypasses Turnstile for subsequent requests.\n *\n * Call once on app initialization before any API requests.\n *\n * @param baseUrl - The Leapify Worker URL. If omitted, uses the current origin.\n * @param siteKey - Turnstile site key. If omitted, reads from window.__CONFIG__.\n * @returns `true` if the challenge was solved and cookie was set.\n */\nexport async function solveTurnstileChallenge(\n baseUrl?: string,\n siteKey?: string,\n): Promise<boolean> {\n siteKey = siteKey ?? getTurnstileSiteKey();\n if (!siteKey) return false;\n\n const base = baseUrl?.replace(/\\/$/, \"\") ?? \"\";\n\n try {\n await loadTurnstileScript();\n const token = await executeTurnstile(siteKey);\n\n const res = await fetch(`${base}${TURNSTILE_VERIFY_PATH}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ token }),\n credentials: \"include\",\n });\n\n return res.ok;\n } catch {\n return false;\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 { solveTurnstileChallenge } from \"./turnstile\";\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 solveTurnstileChallenge(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 HealthResponse,\r\n RuntimeConfig,\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 { solveTurnstileChallenge } from \"./turnstile\";\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 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 // ── 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"]}
@@ -14,10 +14,10 @@
14
14
  *
15
15
  * const events = await api.getEvents()
16
16
  */
17
- export type { LeapEvent, SlotInfo, UserProfile, BookmarkEntry, Faq, Theme, Organization, SiteConfig, ToggleBookmarkResult, LeapifyErrorBody, UserRole, EventStatus, CreateEventBody, CreateFaqBody, SnapshotResult, HealthResponse, RuntimeConfig, CmsMode, } from "./types";
17
+ export type { LeapEvent, SlotInfo, UserProfile, BookmarkEntry, Faq, Theme, Organization, SiteConfig, ToggleBookmarkResult, LeapifyErrorBody, UserRole, EventStatus, CreateEventBody, CreateFaqBody, HealthResponse, RuntimeConfig, } from "./types";
18
18
  export { createLeapifyAuthClient, signInWithGoogleRedirect, syncCookieSessionToStorage, getLeapifyToken, signOut, } from "./auth";
19
19
  export type { LeapifyAuthClient } from "./auth";
20
- export { solvePowChallenge } from "./pow";
20
+ export { solveTurnstileChallenge } from "./turnstile";
21
21
  export { initializeSession } from "./session";
22
22
  /**
23
23
  * Read the runtime config injected by the worker into HTML pages.
@@ -55,7 +55,7 @@ export declare const LEAPIFY_ERROR_CODES: {
55
55
  readonly INTERNAL_ERROR: "INTERNAL_ERROR";
56
56
  };
57
57
  export type LeapifyErrorCode = keyof typeof LEAPIFY_ERROR_CODES;
58
- import type { LeapEvent, SlotInfo, UserProfile, BookmarkEntry, Faq, Theme, Organization, SiteConfig, ToggleBookmarkResult, CreateEventBody, CreateFaqBody, SnapshotResult, HealthResponse } from "./types";
58
+ import type { LeapEvent, SlotInfo, UserProfile, BookmarkEntry, Faq, Theme, Organization, SiteConfig, ToggleBookmarkResult, CreateEventBody, CreateFaqBody, HealthResponse } from "./types";
59
59
  type GetTokenFn = () => Promise<string | null>;
60
60
  /**
61
61
  * Creates a typed Leapify API client bound to a base URL.
@@ -238,11 +238,6 @@ export declare function createLeapifyClient(baseUrl: string, getToken?: GetToken
238
238
  size: number;
239
239
  contentType: string;
240
240
  }>;
241
- /**
242
- * POST /api/config/sync-content — admin only.
243
- * Pushes all D1 content to Contentful. Auto-generates content types if missing.
244
- */
245
- syncContent(): Promise<SnapshotResult>;
246
241
  /**
247
242
  * GET /health
248
243
  * Public health check. Returns provider availability status.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}