qarpeo 0.0.0-alpha.10

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 (599) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -0
  3. package/dist/chunks/auth-schema.mjs +219 -0
  4. package/dist/chunks/wrangler.mjs +783 -0
  5. package/dist/cli/index.mjs +1085 -0
  6. package/dist/dev/env.d.ts +12 -0
  7. package/dist/dev/wrangler.d.ts +18 -0
  8. package/dist/module.d.ts +16 -0
  9. package/dist/module.mjs +4436 -0
  10. package/dist/runtime/ai.d.ts +25 -0
  11. package/dist/runtime/ai.mjs +106 -0
  12. package/dist/runtime/analytics.d.ts +24 -0
  13. package/dist/runtime/analytics.mjs +38 -0
  14. package/dist/runtime/app/components/BlobImage.vue +100 -0
  15. package/dist/runtime/app/components/CMSBlocks.vue +93 -0
  16. package/dist/runtime/app/components/CMSContent.vue +23 -0
  17. package/dist/runtime/app/components/CMSImage.vue +49 -0
  18. package/dist/runtime/app/components/CMSLocaleSwitcher.vue +110 -0
  19. package/dist/runtime/app/components/CMSPreviewBanner.vue +79 -0
  20. package/dist/runtime/app/components/CMSVersionBanner.vue +49 -0
  21. package/dist/runtime/app/components/CMSVersionSwitcher.vue +126 -0
  22. package/dist/runtime/app/components/ContentRenderer.vue +80 -0
  23. package/dist/runtime/app/components/FileUpload.vue +196 -0
  24. package/dist/runtime/app/components/ImpersonationBanner.vue +57 -0
  25. package/dist/runtime/app/components/SignedIn.vue +13 -0
  26. package/dist/runtime/app/components/SignedOut.vue +13 -0
  27. package/dist/runtime/app/components/shiki.css +34 -0
  28. package/dist/runtime/app/composables/analytics.d.ts +125 -0
  29. package/dist/runtime/app/composables/analytics.mjs +81 -0
  30. package/dist/runtime/app/composables/api-tokens.d.ts +49 -0
  31. package/dist/runtime/app/composables/api-tokens.mjs +61 -0
  32. package/dist/runtime/app/composables/auth.d.ts +50 -0
  33. package/dist/runtime/app/composables/auth.mjs +101 -0
  34. package/dist/runtime/app/composables/chat.d.ts +69 -0
  35. package/dist/runtime/app/composables/chat.mjs +159 -0
  36. package/dist/runtime/app/composables/cms-preview.d.ts +33 -0
  37. package/dist/runtime/app/composables/cms-preview.mjs +83 -0
  38. package/dist/runtime/app/composables/cms.d.ts +307 -0
  39. package/dist/runtime/app/composables/cms.mjs +355 -0
  40. package/dist/runtime/app/composables/docs-version.d.ts +35 -0
  41. package/dist/runtime/app/composables/docs-version.mjs +70 -0
  42. package/dist/runtime/app/composables/impersonation.d.ts +14 -0
  43. package/dist/runtime/app/composables/impersonation.mjs +44 -0
  44. package/dist/runtime/app/composables/notifications.d.ts +35 -0
  45. package/dist/runtime/app/composables/notifications.mjs +139 -0
  46. package/dist/runtime/app/composables/organization.d.ts +127 -0
  47. package/dist/runtime/app/composables/organization.mjs +138 -0
  48. package/dist/runtime/app/composables/passkey.d.ts +6 -0
  49. package/dist/runtime/app/composables/passkey.mjs +105 -0
  50. package/dist/runtime/app/composables/passwordless.d.ts +7 -0
  51. package/dist/runtime/app/composables/passwordless.mjs +67 -0
  52. package/dist/runtime/app/composables/payments.d.ts +43 -0
  53. package/dist/runtime/app/composables/payments.mjs +74 -0
  54. package/dist/runtime/app/composables/realtime.d.ts +96 -0
  55. package/dist/runtime/app/composables/realtime.mjs +432 -0
  56. package/dist/runtime/app/composables/site.d.ts +35 -0
  57. package/dist/runtime/app/composables/site.mjs +36 -0
  58. package/dist/runtime/app/composables/storage.d.ts +60 -0
  59. package/dist/runtime/app/composables/storage.mjs +294 -0
  60. package/dist/runtime/app/composables/tenant.d.ts +82 -0
  61. package/dist/runtime/app/composables/tenant.mjs +120 -0
  62. package/dist/runtime/app/composables/turnstile.d.ts +3 -0
  63. package/dist/runtime/app/composables/turnstile.mjs +10 -0
  64. package/dist/runtime/app/composables/two-factor.d.ts +12 -0
  65. package/dist/runtime/app/composables/two-factor.mjs +65 -0
  66. package/dist/runtime/app/middleware/auth.global.d.ts +2 -0
  67. package/dist/runtime/app/middleware/auth.global.mjs +44 -0
  68. package/dist/runtime/app/pages/cms.vue +2249 -0
  69. package/dist/runtime/app/pages/devtools/agents.vue +717 -0
  70. package/dist/runtime/app/pages/devtools/analytics.vue +618 -0
  71. package/dist/runtime/app/pages/devtools/auth.vue +351 -0
  72. package/dist/runtime/app/pages/devtools/blob.vue +745 -0
  73. package/dist/runtime/app/pages/devtools/db.vue +546 -0
  74. package/dist/runtime/app/pages/devtools/domains.vue +772 -0
  75. package/dist/runtime/app/pages/devtools/kv.vue +829 -0
  76. package/dist/runtime/app/pages/devtools/logs.vue +655 -0
  77. package/dist/runtime/app/pages/devtools/mail.vue +389 -0
  78. package/dist/runtime/app/pages/devtools/overview.vue +390 -0
  79. package/dist/runtime/app/pages/devtools/settings.vue +560 -0
  80. package/dist/runtime/app/pages/devtools.vue +165 -0
  81. package/dist/runtime/app/plugins/seo.d.ts +2 -0
  82. package/dist/runtime/app/plugins/seo.mjs +105 -0
  83. package/dist/runtime/app/plugins/shortcuts.client.d.ts +6 -0
  84. package/dist/runtime/app/plugins/shortcuts.client.mjs +19 -0
  85. package/dist/runtime/app/public/sw-notifications.mjs +52 -0
  86. package/dist/runtime/auth.d.ts +25 -0
  87. package/dist/runtime/auth.mjs +11 -0
  88. package/dist/runtime/bindings.d.ts +27 -0
  89. package/dist/runtime/bindings.mjs +38 -0
  90. package/dist/runtime/blob.d.ts +26 -0
  91. package/dist/runtime/blob.mjs +334 -0
  92. package/dist/runtime/bots.d.ts +1 -0
  93. package/dist/runtime/bots.mjs +1 -0
  94. package/dist/runtime/browser.d.ts +21 -0
  95. package/dist/runtime/browser.mjs +64 -0
  96. package/dist/runtime/cache.d.ts +19 -0
  97. package/dist/runtime/cache.mjs +12 -0
  98. package/dist/runtime/cms.d.ts +2 -0
  99. package/dist/runtime/cms.mjs +0 -0
  100. package/dist/runtime/db.d.ts +21 -0
  101. package/dist/runtime/db.mjs +36 -0
  102. package/dist/runtime/drizzle.d.ts +11 -0
  103. package/dist/runtime/drizzle.mjs +18 -0
  104. package/dist/runtime/email.d.ts +51 -0
  105. package/dist/runtime/email.mjs +245 -0
  106. package/dist/runtime/hyperdrive.d.ts +21 -0
  107. package/dist/runtime/hyperdrive.mjs +49 -0
  108. package/dist/runtime/index.d.ts +23 -0
  109. package/dist/runtime/index.mjs +23 -0
  110. package/dist/runtime/kv.d.ts +16 -0
  111. package/dist/runtime/kv.mjs +126 -0
  112. package/dist/runtime/payments.d.ts +2 -0
  113. package/dist/runtime/payments.mjs +0 -0
  114. package/dist/runtime/queue.d.ts +21 -0
  115. package/dist/runtime/queue.mjs +41 -0
  116. package/dist/runtime/rag.d.ts +1 -0
  117. package/dist/runtime/rag.mjs +1 -0
  118. package/dist/runtime/ratelimit.d.ts +21 -0
  119. package/dist/runtime/ratelimit.mjs +38 -0
  120. package/dist/runtime/realtime.d.ts +6 -0
  121. package/dist/runtime/realtime.mjs +13 -0
  122. package/dist/runtime/server/db/cms-schema.d.ts +651 -0
  123. package/dist/runtime/server/db/cms-schema.mjs +74 -0
  124. package/dist/runtime/server/durable-objects/agent.d.ts +14 -0
  125. package/dist/runtime/server/durable-objects/agent.mjs +571 -0
  126. package/dist/runtime/server/durable-objects/room.d.ts +34 -0
  127. package/dist/runtime/server/durable-objects/room.mjs +514 -0
  128. package/dist/runtime/server/middleware/auth.d.ts +2 -0
  129. package/dist/runtime/server/middleware/auth.mjs +108 -0
  130. package/dist/runtime/server/middleware/devtools.d.ts +2 -0
  131. package/dist/runtime/server/middleware/devtools.mjs +61 -0
  132. package/dist/runtime/server/middleware/ratelimit.d.ts +2 -0
  133. package/dist/runtime/server/middleware/ratelimit.mjs +49 -0
  134. package/dist/runtime/server/middleware/tenancy.d.ts +6 -0
  135. package/dist/runtime/server/middleware/tenancy.mjs +15 -0
  136. package/dist/runtime/server/middleware/tracker.d.ts +7 -0
  137. package/dist/runtime/server/middleware/tracker.mjs +9 -0
  138. package/dist/runtime/server/plugins/agents.d.ts +7 -0
  139. package/dist/runtime/server/plugins/agents.mjs +3 -0
  140. package/dist/runtime/server/plugins/cms.d.ts +7 -0
  141. package/dist/runtime/server/plugins/cms.mjs +16 -0
  142. package/dist/runtime/server/plugins/dev-logs.d.ts +1 -0
  143. package/dist/runtime/server/plugins/dev-logs.mjs +58 -0
  144. package/dist/runtime/server/plugins/dev-proxy.d.ts +3 -0
  145. package/dist/runtime/server/plugins/dev-proxy.mjs +21 -0
  146. package/dist/runtime/server/plugins/env.d.ts +6 -0
  147. package/dist/runtime/server/plugins/env.mjs +17 -0
  148. package/dist/runtime/server/plugins/queue.d.ts +6 -0
  149. package/dist/runtime/server/plugins/queue.mjs +8 -0
  150. package/dist/runtime/server/routes/__qarpeo/agents/chat.post.d.ts +20 -0
  151. package/dist/runtime/server/routes/__qarpeo/agents/chat.post.mjs +110 -0
  152. package/dist/runtime/server/routes/__qarpeo/agents/clear.post.d.ts +7 -0
  153. package/dist/runtime/server/routes/__qarpeo/agents/clear.post.mjs +15 -0
  154. package/dist/runtime/server/routes/__qarpeo/agents/create.post.d.ts +17 -0
  155. package/dist/runtime/server/routes/__qarpeo/agents/create.post.mjs +47 -0
  156. package/dist/runtime/server/routes/__qarpeo/agents/history.get.d.ts +15 -0
  157. package/dist/runtime/server/routes/__qarpeo/agents/history.get.mjs +24 -0
  158. package/dist/runtime/server/routes/__qarpeo/agents/list.get.d.ts +5 -0
  159. package/dist/runtime/server/routes/__qarpeo/agents/list.get.mjs +63 -0
  160. package/dist/runtime/server/routes/__qarpeo/analytics/events.get.d.ts +64 -0
  161. package/dist/runtime/server/routes/__qarpeo/analytics/events.get.mjs +55 -0
  162. package/dist/runtime/server/routes/__qarpeo/analytics/summary.get.d.ts +30 -0
  163. package/dist/runtime/server/routes/__qarpeo/analytics/summary.get.mjs +73 -0
  164. package/dist/runtime/server/routes/__qarpeo/auth/revoke-session.post.d.ts +6 -0
  165. package/dist/runtime/server/routes/__qarpeo/auth/revoke-session.post.mjs +26 -0
  166. package/dist/runtime/server/routes/__qarpeo/auth/sessions.get.d.ts +6 -0
  167. package/dist/runtime/server/routes/__qarpeo/auth/sessions.get.mjs +46 -0
  168. package/dist/runtime/server/routes/__qarpeo/auth/users.get.d.ts +7 -0
  169. package/dist/runtime/server/routes/__qarpeo/auth/users.get.mjs +65 -0
  170. package/dist/runtime/server/routes/__qarpeo/blob/files.get.d.ts +22 -0
  171. package/dist/runtime/server/routes/__qarpeo/blob/files.get.mjs +36 -0
  172. package/dist/runtime/server/routes/__qarpeo/db/query.post.d.ts +23 -0
  173. package/dist/runtime/server/routes/__qarpeo/db/query.post.mjs +34 -0
  174. package/dist/runtime/server/routes/__qarpeo/db/tables.get.d.ts +31 -0
  175. package/dist/runtime/server/routes/__qarpeo/db/tables.get.mjs +81 -0
  176. package/dist/runtime/server/routes/__qarpeo/kv/delete.post.d.ts +11 -0
  177. package/dist/runtime/server/routes/__qarpeo/kv/delete.post.mjs +18 -0
  178. package/dist/runtime/server/routes/__qarpeo/kv/get.get.d.ts +11 -0
  179. package/dist/runtime/server/routes/__qarpeo/kv/get.get.mjs +20 -0
  180. package/dist/runtime/server/routes/__qarpeo/kv/keys.get.d.ts +8 -0
  181. package/dist/runtime/server/routes/__qarpeo/kv/keys.get.mjs +27 -0
  182. package/dist/runtime/server/routes/__qarpeo/kv/set.post.d.ts +14 -0
  183. package/dist/runtime/server/routes/__qarpeo/kv/set.post.mjs +24 -0
  184. package/dist/runtime/server/routes/__qarpeo/logs.delete.d.ts +5 -0
  185. package/dist/runtime/server/routes/__qarpeo/logs.delete.mjs +6 -0
  186. package/dist/runtime/server/routes/__qarpeo/logs.get.d.ts +5 -0
  187. package/dist/runtime/server/routes/__qarpeo/logs.get.mjs +26 -0
  188. package/dist/runtime/server/routes/__qarpeo/logs.post.d.ts +6 -0
  189. package/dist/runtime/server/routes/__qarpeo/logs.post.mjs +17 -0
  190. package/dist/runtime/server/routes/__qarpeo/mail/bounce.post.d.ts +5 -0
  191. package/dist/runtime/server/routes/__qarpeo/mail/bounce.post.mjs +37 -0
  192. package/dist/runtime/server/routes/__qarpeo/mail/clear.post.d.ts +4 -0
  193. package/dist/runtime/server/routes/__qarpeo/mail/clear.post.mjs +6 -0
  194. package/dist/runtime/server/routes/__qarpeo/mail/inbox.get.d.ts +5 -0
  195. package/dist/runtime/server/routes/__qarpeo/mail/inbox.get.mjs +7 -0
  196. package/dist/runtime/server/routes/__qarpeo/mail/send-test.post.d.ts +4 -0
  197. package/dist/runtime/server/routes/__qarpeo/mail/send-test.post.mjs +29 -0
  198. package/dist/runtime/server/routes/__qarpeo/mail/track/click/[id].get.d.ts +2 -0
  199. package/dist/runtime/server/routes/__qarpeo/mail/track/click/[id].get.mjs +23 -0
  200. package/dist/runtime/server/routes/__qarpeo/mail/track/open/[id].get.d.ts +2 -0
  201. package/dist/runtime/server/routes/__qarpeo/mail/track/open/[id].get.mjs +31 -0
  202. package/dist/runtime/server/routes/__qarpeo/overview/health.get.d.ts +8 -0
  203. package/dist/runtime/server/routes/__qarpeo/overview/health.get.mjs +46 -0
  204. package/dist/runtime/server/routes/__qarpeo/overview.get.d.ts +32 -0
  205. package/dist/runtime/server/routes/__qarpeo/overview.get.mjs +38 -0
  206. package/dist/runtime/server/routes/__qarpeo/settings/reset-dev-data.post.d.ts +11 -0
  207. package/dist/runtime/server/routes/__qarpeo/settings/reset-dev-data.post.mjs +84 -0
  208. package/dist/runtime/server/routes/__qarpeo/settings.get.d.ts +124 -0
  209. package/dist/runtime/server/routes/__qarpeo/settings.get.mjs +145 -0
  210. package/dist/runtime/server/routes/__qarpeo/tenants/create.post.d.ts +7 -0
  211. package/dist/runtime/server/routes/__qarpeo/tenants/create.post.mjs +26 -0
  212. package/dist/runtime/server/routes/__qarpeo/tenants/domain-add.post.d.ts +6 -0
  213. package/dist/runtime/server/routes/__qarpeo/tenants/domain-add.post.mjs +29 -0
  214. package/dist/runtime/server/routes/__qarpeo/tenants/domain-delete.post.d.ts +7 -0
  215. package/dist/runtime/server/routes/__qarpeo/tenants/domain-delete.post.mjs +21 -0
  216. package/dist/runtime/server/routes/__qarpeo/tenants/domain-verify.post.d.ts +9 -0
  217. package/dist/runtime/server/routes/__qarpeo/tenants/domain-verify.post.mjs +21 -0
  218. package/dist/runtime/server/routes/__qarpeo/tenants/list.get.d.ts +15 -0
  219. package/dist/runtime/server/routes/__qarpeo/tenants/list.get.mjs +22 -0
  220. package/dist/runtime/server/routes/agents/[agent]/chat.post.d.ts +2 -0
  221. package/dist/runtime/server/routes/agents/[agent]/chat.post.mjs +35 -0
  222. package/dist/runtime/server/routes/agents/[agent]/clear.post.d.ts +4 -0
  223. package/dist/runtime/server/routes/agents/[agent]/clear.post.mjs +27 -0
  224. package/dist/runtime/server/routes/agents/[agent]/history.get.d.ts +4 -0
  225. package/dist/runtime/server/routes/agents/[agent]/history.get.mjs +27 -0
  226. package/dist/runtime/server/routes/analytics/events.get.d.ts +3 -0
  227. package/dist/runtime/server/routes/analytics/events.get.mjs +17 -0
  228. package/dist/runtime/server/routes/analytics/pageviews.get.d.ts +3 -0
  229. package/dist/runtime/server/routes/analytics/pageviews.get.mjs +15 -0
  230. package/dist/runtime/server/routes/analytics/summary.get.d.ts +6 -0
  231. package/dist/runtime/server/routes/analytics/summary.get.mjs +15 -0
  232. package/dist/runtime/server/routes/atom.xml.get.d.ts +2 -0
  233. package/dist/runtime/server/routes/atom.xml.get.mjs +76 -0
  234. package/dist/runtime/server/routes/auth/2fa/disable.post.d.ts +4 -0
  235. package/dist/runtime/server/routes/auth/2fa/disable.post.mjs +44 -0
  236. package/dist/runtime/server/routes/auth/2fa/setup.post.d.ts +6 -0
  237. package/dist/runtime/server/routes/auth/2fa/setup.post.mjs +32 -0
  238. package/dist/runtime/server/routes/auth/2fa/verify.post.d.ts +6 -0
  239. package/dist/runtime/server/routes/auth/2fa/verify.post.mjs +92 -0
  240. package/dist/runtime/server/routes/auth/[provider]/callback.d.ts +1 -0
  241. package/dist/runtime/server/routes/auth/[provider]/callback.mjs +1 -0
  242. package/dist/runtime/server/routes/auth/[provider].d.ts +3 -0
  243. package/dist/runtime/server/routes/auth/[provider].mjs +95 -0
  244. package/dist/runtime/server/routes/auth/account.delete.d.ts +5 -0
  245. package/dist/runtime/server/routes/auth/account.delete.mjs +52 -0
  246. package/dist/runtime/server/routes/auth/impersonate/start.post.d.ts +5 -0
  247. package/dist/runtime/server/routes/auth/impersonate/start.post.mjs +14 -0
  248. package/dist/runtime/server/routes/auth/impersonate/stop.post.d.ts +5 -0
  249. package/dist/runtime/server/routes/auth/impersonate/stop.post.mjs +5 -0
  250. package/dist/runtime/server/routes/auth/logout-all.post.d.ts +4 -0
  251. package/dist/runtime/server/routes/auth/logout-all.post.mjs +16 -0
  252. package/dist/runtime/server/routes/auth/logout-others.post.d.ts +4 -0
  253. package/dist/runtime/server/routes/auth/logout-others.post.mjs +11 -0
  254. package/dist/runtime/server/routes/auth/logout.post.d.ts +4 -0
  255. package/dist/runtime/server/routes/auth/logout.post.mjs +17 -0
  256. package/dist/runtime/server/routes/auth/magic-link/send.post.d.ts +10 -0
  257. package/dist/runtime/server/routes/auth/magic-link/send.post.mjs +29 -0
  258. package/dist/runtime/server/routes/auth/magic-link/verify.get.d.ts +2 -0
  259. package/dist/runtime/server/routes/auth/magic-link/verify.get.mjs +81 -0
  260. package/dist/runtime/server/routes/auth/organization/create.post.d.ts +5 -0
  261. package/dist/runtime/server/routes/auth/organization/create.post.mjs +10 -0
  262. package/dist/runtime/server/routes/auth/organization/invite.post.d.ts +9 -0
  263. package/dist/runtime/server/routes/auth/organization/invite.post.mjs +27 -0
  264. package/dist/runtime/server/routes/auth/organization/join.post.d.ts +6 -0
  265. package/dist/runtime/server/routes/auth/organization/join.post.mjs +15 -0
  266. package/dist/runtime/server/routes/auth/organization/list.get.d.ts +5 -0
  267. package/dist/runtime/server/routes/auth/organization/list.get.mjs +7 -0
  268. package/dist/runtime/server/routes/auth/organization/members/[id].delete.d.ts +4 -0
  269. package/dist/runtime/server/routes/auth/organization/members/[id].delete.mjs +33 -0
  270. package/dist/runtime/server/routes/auth/organization/members/index.get.d.ts +6 -0
  271. package/dist/runtime/server/routes/auth/organization/members/index.get.mjs +18 -0
  272. package/dist/runtime/server/routes/auth/organization/mfa.post.d.ts +6 -0
  273. package/dist/runtime/server/routes/auth/organization/mfa.post.mjs +33 -0
  274. package/dist/runtime/server/routes/auth/organization/sso/[id].delete.d.ts +4 -0
  275. package/dist/runtime/server/routes/auth/organization/sso/[id].delete.mjs +28 -0
  276. package/dist/runtime/server/routes/auth/organization/sso/index.get.d.ts +2 -0
  277. package/dist/runtime/server/routes/auth/organization/sso/index.get.mjs +23 -0
  278. package/dist/runtime/server/routes/auth/organization/sso/index.post.d.ts +5 -0
  279. package/dist/runtime/server/routes/auth/organization/sso/index.post.mjs +84 -0
  280. package/dist/runtime/server/routes/auth/organization/switch.post.d.ts +6 -0
  281. package/dist/runtime/server/routes/auth/organization/switch.post.mjs +14 -0
  282. package/dist/runtime/server/routes/auth/otp/send.post.d.ts +10 -0
  283. package/dist/runtime/server/routes/auth/otp/send.post.mjs +29 -0
  284. package/dist/runtime/server/routes/auth/otp/verify.post.d.ts +6 -0
  285. package/dist/runtime/server/routes/auth/otp/verify.post.mjs +95 -0
  286. package/dist/runtime/server/routes/auth/sessions/[id].delete.d.ts +5 -0
  287. package/dist/runtime/server/routes/auth/sessions/[id].delete.mjs +24 -0
  288. package/dist/runtime/server/routes/auth/sessions.get.d.ts +2 -0
  289. package/dist/runtime/server/routes/auth/sessions.get.mjs +11 -0
  290. package/dist/runtime/server/routes/auth/sso/login.get.d.ts +2 -0
  291. package/dist/runtime/server/routes/auth/sso/login.get.mjs +94 -0
  292. package/dist/runtime/server/routes/auth/sso/oidc/callback.get.d.ts +2 -0
  293. package/dist/runtime/server/routes/auth/sso/oidc/callback.get.mjs +113 -0
  294. package/dist/runtime/server/routes/auth/sso/saml/acs.post.d.ts +2 -0
  295. package/dist/runtime/server/routes/auth/sso/saml/acs.post.mjs +95 -0
  296. package/dist/runtime/server/routes/auth/tokens/[id].delete.d.ts +4 -0
  297. package/dist/runtime/server/routes/auth/tokens/[id].delete.mjs +13 -0
  298. package/dist/runtime/server/routes/auth/tokens/create.post.d.ts +9 -0
  299. package/dist/runtime/server/routes/auth/tokens/create.post.mjs +17 -0
  300. package/dist/runtime/server/routes/auth/tokens/index.get.d.ts +9 -0
  301. package/dist/runtime/server/routes/auth/tokens/index.get.mjs +5 -0
  302. package/dist/runtime/server/routes/auth/turnstile/verify.post.d.ts +2 -0
  303. package/dist/runtime/server/routes/auth/turnstile/verify.post.mjs +15 -0
  304. package/dist/runtime/server/routes/auth/user.get.d.ts +2 -0
  305. package/dist/runtime/server/routes/auth/user.get.mjs +6 -0
  306. package/dist/runtime/server/routes/auth/webauthn/login/options.post.d.ts +2 -0
  307. package/dist/runtime/server/routes/auth/webauthn/login/options.post.mjs +17 -0
  308. package/dist/runtime/server/routes/auth/webauthn/login/verify.post.d.ts +6 -0
  309. package/dist/runtime/server/routes/auth/webauthn/login/verify.post.mjs +127 -0
  310. package/dist/runtime/server/routes/auth/webauthn/register/options.post.d.ts +2 -0
  311. package/dist/runtime/server/routes/auth/webauthn/register/options.post.mjs +47 -0
  312. package/dist/runtime/server/routes/auth/webauthn/register/verify.post.d.ts +5 -0
  313. package/dist/runtime/server/routes/auth/webauthn/register/verify.post.mjs +88 -0
  314. package/dist/runtime/server/routes/cms/[collection]/[id]/preview-token.post.d.ts +8 -0
  315. package/dist/runtime/server/routes/cms/[collection]/[id]/preview-token.post.mjs +27 -0
  316. package/dist/runtime/server/routes/cms/[collection]/[id]/publish.post.d.ts +6 -0
  317. package/dist/runtime/server/routes/cms/[collection]/[id]/publish.post.mjs +19 -0
  318. package/dist/runtime/server/routes/cms/[collection]/[id]/review.post.d.ts +6 -0
  319. package/dist/runtime/server/routes/cms/[collection]/[id]/review.post.mjs +33 -0
  320. package/dist/runtime/server/routes/cms/[collection]/[id].delete.d.ts +4 -0
  321. package/dist/runtime/server/routes/cms/[collection]/[id].delete.mjs +17 -0
  322. package/dist/runtime/server/routes/cms/[collection]/[id].put.d.ts +4 -0
  323. package/dist/runtime/server/routes/cms/[collection]/[id].put.mjs +18 -0
  324. package/dist/runtime/server/routes/cms/[collection]/[slug].get.d.ts +4 -0
  325. package/dist/runtime/server/routes/cms/[collection]/[slug].get.mjs +19 -0
  326. package/dist/runtime/server/routes/cms/[collection]/atom.xml.get.d.ts +2 -0
  327. package/dist/runtime/server/routes/cms/[collection]/atom.xml.get.mjs +69 -0
  328. package/dist/runtime/server/routes/cms/[collection]/by-path.get.d.ts +8 -0
  329. package/dist/runtime/server/routes/cms/[collection]/by-path.get.mjs +23 -0
  330. package/dist/runtime/server/routes/cms/[collection]/feed.xml.get.d.ts +2 -0
  331. package/dist/runtime/server/routes/cms/[collection]/feed.xml.get.mjs +65 -0
  332. package/dist/runtime/server/routes/cms/[collection]/index.get.d.ts +7 -0
  333. package/dist/runtime/server/routes/cms/[collection]/index.get.mjs +15 -0
  334. package/dist/runtime/server/routes/cms/[collection]/index.post.d.ts +4 -0
  335. package/dist/runtime/server/routes/cms/[collection]/index.post.mjs +23 -0
  336. package/dist/runtime/server/routes/cms/[collection]/references.get.d.ts +19 -0
  337. package/dist/runtime/server/routes/cms/[collection]/references.get.mjs +47 -0
  338. package/dist/runtime/server/routes/cms/[collection]/surroundings.get.d.ts +10 -0
  339. package/dist/runtime/server/routes/cms/[collection]/surroundings.get.mjs +12 -0
  340. package/dist/runtime/server/routes/cms/collections/[id].delete.d.ts +4 -0
  341. package/dist/runtime/server/routes/cms/collections/[id].delete.mjs +10 -0
  342. package/dist/runtime/server/routes/cms/collections/[id].put.d.ts +4 -0
  343. package/dist/runtime/server/routes/cms/collections/[id].put.mjs +11 -0
  344. package/dist/runtime/server/routes/cms/collections/index.get.d.ts +4 -0
  345. package/dist/runtime/server/routes/cms/collections/index.get.mjs +6 -0
  346. package/dist/runtime/server/routes/cms/collections/index.post.d.ts +4 -0
  347. package/dist/runtime/server/routes/cms/collections/index.post.mjs +19 -0
  348. package/dist/runtime/server/routes/cms/components/index.get.d.ts +17 -0
  349. package/dist/runtime/server/routes/cms/components/index.get.mjs +16 -0
  350. package/dist/runtime/server/routes/cms/deploy.post.d.ts +4 -0
  351. package/dist/runtime/server/routes/cms/deploy.post.mjs +46 -0
  352. package/dist/runtime/server/routes/cms/export.post.d.ts +10 -0
  353. package/dist/runtime/server/routes/cms/export.post.mjs +55 -0
  354. package/dist/runtime/server/routes/cms/navigation.get.d.ts +8 -0
  355. package/dist/runtime/server/routes/cms/navigation.get.mjs +36 -0
  356. package/dist/runtime/server/routes/cms/preview/disable.get.d.ts +9 -0
  357. package/dist/runtime/server/routes/cms/preview/disable.get.mjs +9 -0
  358. package/dist/runtime/server/routes/cms/preview/enable.get.d.ts +14 -0
  359. package/dist/runtime/server/routes/cms/preview/enable.get.mjs +42 -0
  360. package/dist/runtime/server/routes/cms/publish-scheduled.post.d.ts +11 -0
  361. package/dist/runtime/server/routes/cms/publish-scheduled.post.mjs +35 -0
  362. package/dist/runtime/server/routes/cms/search.get.d.ts +13 -0
  363. package/dist/runtime/server/routes/cms/search.get.mjs +137 -0
  364. package/dist/runtime/server/routes/cms/sync.post.d.ts +7 -0
  365. package/dist/runtime/server/routes/cms/sync.post.mjs +18 -0
  366. package/dist/runtime/server/routes/cms/webhooks/[provider].post.d.ts +150 -0
  367. package/dist/runtime/server/routes/cms/webhooks/[provider].post.mjs +213 -0
  368. package/dist/runtime/server/routes/docs/search.get.d.ts +15 -0
  369. package/dist/runtime/server/routes/docs/search.get.mjs +20 -0
  370. package/dist/runtime/server/routes/feed.xml.get.d.ts +2 -0
  371. package/dist/runtime/server/routes/feed.xml.get.mjs +73 -0
  372. package/dist/runtime/server/routes/mail/bounce.post.d.ts +14 -0
  373. package/dist/runtime/server/routes/mail/bounce.post.mjs +56 -0
  374. package/dist/runtime/server/routes/mail/inbox/[id].get.d.ts +2 -0
  375. package/dist/runtime/server/routes/mail/inbox/[id].get.mjs +9 -0
  376. package/dist/runtime/server/routes/mail/inbox.get.d.ts +4 -0
  377. package/dist/runtime/server/routes/mail/inbox.get.mjs +7 -0
  378. package/dist/runtime/server/routes/mail/suppressions/[email].delete.d.ts +11 -0
  379. package/dist/runtime/server/routes/mail/suppressions/[email].delete.mjs +18 -0
  380. package/dist/runtime/server/routes/mail/suppressions/index.get.d.ts +12 -0
  381. package/dist/runtime/server/routes/mail/suppressions/index.get.mjs +23 -0
  382. package/dist/runtime/server/routes/mail/suppressions/index.post.d.ts +10 -0
  383. package/dist/runtime/server/routes/mail/suppressions/index.post.mjs +23 -0
  384. package/dist/runtime/server/routes/mail/unsubscribe.d.ts +13 -0
  385. package/dist/runtime/server/routes/mail/unsubscribe.mjs +91 -0
  386. package/dist/runtime/server/routes/mail/webhooks.post.d.ts +12 -0
  387. package/dist/runtime/server/routes/mail/webhooks.post.mjs +71 -0
  388. package/dist/runtime/server/routes/notifications/[id]/read.post.d.ts +4 -0
  389. package/dist/runtime/server/routes/notifications/[id]/read.post.mjs +13 -0
  390. package/dist/runtime/server/routes/notifications/[id].delete.d.ts +4 -0
  391. package/dist/runtime/server/routes/notifications/[id].delete.mjs +13 -0
  392. package/dist/runtime/server/routes/notifications/[id].get.d.ts +2 -0
  393. package/dist/runtime/server/routes/notifications/[id].get.mjs +15 -0
  394. package/dist/runtime/server/routes/notifications/index.get.d.ts +6 -0
  395. package/dist/runtime/server/routes/notifications/index.get.mjs +18 -0
  396. package/dist/runtime/server/routes/notifications/push/subscribe.post.d.ts +4 -0
  397. package/dist/runtime/server/routes/notifications/push/subscribe.post.mjs +20 -0
  398. package/dist/runtime/server/routes/notifications/push/unsubscribe.post.d.ts +4 -0
  399. package/dist/runtime/server/routes/notifications/push/unsubscribe.post.mjs +15 -0
  400. package/dist/runtime/server/routes/notifications/read-all.post.d.ts +4 -0
  401. package/dist/runtime/server/routes/notifications/read-all.post.mjs +11 -0
  402. package/dist/runtime/server/routes/payments/cancel.post.d.ts +7 -0
  403. package/dist/runtime/server/routes/payments/cancel.post.mjs +9 -0
  404. package/dist/runtime/server/routes/payments/change-plan.post.d.ts +7 -0
  405. package/dist/runtime/server/routes/payments/change-plan.post.mjs +12 -0
  406. package/dist/runtime/server/routes/payments/checkout.post.d.ts +9 -0
  407. package/dist/runtime/server/routes/payments/checkout.post.mjs +16 -0
  408. package/dist/runtime/server/routes/payments/pause.post.d.ts +7 -0
  409. package/dist/runtime/server/routes/payments/pause.post.mjs +9 -0
  410. package/dist/runtime/server/routes/payments/portal.post.d.ts +5 -0
  411. package/dist/runtime/server/routes/payments/portal.post.mjs +9 -0
  412. package/dist/runtime/server/routes/payments/subscription.get.d.ts +6 -0
  413. package/dist/runtime/server/routes/payments/subscription.get.mjs +9 -0
  414. package/dist/runtime/server/routes/payments/usage.get.d.ts +12 -0
  415. package/dist/runtime/server/routes/payments/usage.get.mjs +18 -0
  416. package/dist/runtime/server/routes/payments/usage.post.d.ts +6 -0
  417. package/dist/runtime/server/routes/payments/usage.post.mjs +24 -0
  418. package/dist/runtime/server/routes/payments/webhook.post.d.ts +14 -0
  419. package/dist/runtime/server/routes/payments/webhook.post.mjs +21 -0
  420. package/dist/runtime/server/routes/realtime/broadcast.post.d.ts +4 -0
  421. package/dist/runtime/server/routes/realtime/broadcast.post.mjs +26 -0
  422. package/dist/runtime/server/routes/realtime/history.delete.d.ts +13 -0
  423. package/dist/runtime/server/routes/realtime/history.delete.mjs +12 -0
  424. package/dist/runtime/server/routes/realtime/history.get.d.ts +16 -0
  425. package/dist/runtime/server/routes/realtime/history.get.mjs +15 -0
  426. package/dist/runtime/server/routes/realtime/presence.get.d.ts +6 -0
  427. package/dist/runtime/server/routes/realtime/presence.get.mjs +27 -0
  428. package/dist/runtime/server/routes/realtime/state.get.d.ts +5 -0
  429. package/dist/runtime/server/routes/realtime/state.get.mjs +26 -0
  430. package/dist/runtime/server/routes/realtime/state.post.d.ts +6 -0
  431. package/dist/runtime/server/routes/realtime/state.post.mjs +37 -0
  432. package/dist/runtime/server/routes/realtime/ws.get.d.ts +2 -0
  433. package/dist/runtime/server/routes/realtime/ws.get.mjs +73 -0
  434. package/dist/runtime/server/routes/robots.txt.get.d.ts +2 -0
  435. package/dist/runtime/server/routes/robots.txt.get.mjs +41 -0
  436. package/dist/runtime/server/routes/rss.xml.get.d.ts +2 -0
  437. package/dist/runtime/server/routes/rss.xml.get.mjs +2 -0
  438. package/dist/runtime/server/routes/sitemap.xml.get.d.ts +2 -0
  439. package/dist/runtime/server/routes/sitemap.xml.get.mjs +84 -0
  440. package/dist/runtime/server/routes/storage/file/[...key].delete.d.ts +4 -0
  441. package/dist/runtime/server/routes/storage/file/[...key].delete.mjs +23 -0
  442. package/dist/runtime/server/routes/storage/file/[...key].get.d.ts +2 -0
  443. package/dist/runtime/server/routes/storage/file/[...key].get.mjs +23 -0
  444. package/dist/runtime/server/routes/storage/files.get.d.ts +14 -0
  445. package/dist/runtime/server/routes/storage/files.get.mjs +11 -0
  446. package/dist/runtime/server/routes/storage/presigned.post.d.ts +8 -0
  447. package/dist/runtime/server/routes/storage/presigned.post.mjs +39 -0
  448. package/dist/runtime/server/routes/storage/sign.post.d.ts +6 -0
  449. package/dist/runtime/server/routes/storage/sign.post.mjs +24 -0
  450. package/dist/runtime/server/routes/storage/upload.post.d.ts +22 -0
  451. package/dist/runtime/server/routes/storage/upload.post.mjs +96 -0
  452. package/dist/runtime/server/routes/tenants/[tenant]/domains/[domain]/index.delete.d.ts +8 -0
  453. package/dist/runtime/server/routes/tenants/[tenant]/domains/[domain]/index.delete.mjs +39 -0
  454. package/dist/runtime/server/routes/tenants/[tenant]/domains/[domain]/verify.post.d.ts +8 -0
  455. package/dist/runtime/server/routes/tenants/[tenant]/domains/[domain]/verify.post.mjs +39 -0
  456. package/dist/runtime/server/routes/tenants/[tenant]/domains/index.get.d.ts +8 -0
  457. package/dist/runtime/server/routes/tenants/[tenant]/domains/index.get.mjs +20 -0
  458. package/dist/runtime/server/routes/tenants/[tenant]/domains/index.post.d.ts +8 -0
  459. package/dist/runtime/server/routes/tenants/[tenant]/domains/index.post.mjs +44 -0
  460. package/dist/runtime/server/routes/tenants/current.get.d.ts +8 -0
  461. package/dist/runtime/server/routes/tenants/current.get.mjs +6 -0
  462. package/dist/runtime/server/tasks/cms/publish.d.ts +4 -0
  463. package/dist/runtime/server/tasks/cms/publish.mjs +18 -0
  464. package/dist/runtime/server/utils/agent-store.d.ts +24 -0
  465. package/dist/runtime/server/utils/agent-store.mjs +53 -0
  466. package/dist/runtime/server/utils/agents-registry-fallback.d.ts +1 -0
  467. package/dist/runtime/server/utils/agents-registry-fallback.mjs +1 -0
  468. package/dist/runtime/server/utils/ai.d.ts +119 -0
  469. package/dist/runtime/server/utils/ai.mjs +607 -0
  470. package/dist/runtime/server/utils/analytics-query.d.ts +109 -0
  471. package/dist/runtime/server/utils/analytics-query.mjs +234 -0
  472. package/dist/runtime/server/utils/auth.d.ts +60 -0
  473. package/dist/runtime/server/utils/auth.mjs +361 -0
  474. package/dist/runtime/server/utils/blob-store.d.ts +13 -0
  475. package/dist/runtime/server/utils/blob-store.mjs +60 -0
  476. package/dist/runtime/server/utils/bots.d.ts +21 -0
  477. package/dist/runtime/server/utils/bots.mjs +491 -0
  478. package/dist/runtime/server/utils/cache.d.ts +33 -0
  479. package/dist/runtime/server/utils/cache.mjs +128 -0
  480. package/dist/runtime/server/utils/cms-events.d.ts +17 -0
  481. package/dist/runtime/server/utils/cms-events.mjs +80 -0
  482. package/dist/runtime/server/utils/cms-filter.d.ts +3 -0
  483. package/dist/runtime/server/utils/cms-filter.mjs +34 -0
  484. package/dist/runtime/server/utils/cms.d.ts +278 -0
  485. package/dist/runtime/server/utils/cms.mjs +3268 -0
  486. package/dist/runtime/server/utils/config.d.ts +27 -0
  487. package/dist/runtime/server/utils/config.mjs +38 -0
  488. package/dist/runtime/server/utils/context.d.ts +13 -0
  489. package/dist/runtime/server/utils/context.mjs +98 -0
  490. package/dist/runtime/server/utils/crypto.d.ts +16 -0
  491. package/dist/runtime/server/utils/crypto.mjs +56 -0
  492. package/dist/runtime/server/utils/dev-logs.d.ts +21 -0
  493. package/dist/runtime/server/utils/dev-logs.mjs +41 -0
  494. package/dist/runtime/server/utils/dev-proxy.d.ts +1 -0
  495. package/dist/runtime/server/utils/dev-proxy.mjs +69 -0
  496. package/dist/runtime/server/utils/domains.d.ts +46 -0
  497. package/dist/runtime/server/utils/domains.mjs +318 -0
  498. package/dist/runtime/server/utils/drizzle.d.ts +10 -0
  499. package/dist/runtime/server/utils/drizzle.mjs +36 -0
  500. package/dist/runtime/server/utils/email-templates.d.ts +44 -0
  501. package/dist/runtime/server/utils/email-templates.mjs +373 -0
  502. package/dist/runtime/server/utils/feed.d.ts +42 -0
  503. package/dist/runtime/server/utils/feed.mjs +161 -0
  504. package/dist/runtime/server/utils/impersonation.d.ts +67 -0
  505. package/dist/runtime/server/utils/impersonation.mjs +298 -0
  506. package/dist/runtime/server/utils/jobs.d.ts +70 -0
  507. package/dist/runtime/server/utils/jobs.mjs +125 -0
  508. package/dist/runtime/server/utils/kv-store.d.ts +9 -0
  509. package/dist/runtime/server/utils/kv-store.mjs +32 -0
  510. package/dist/runtime/server/utils/mail-suppression.d.ts +62 -0
  511. package/dist/runtime/server/utils/mail-suppression.mjs +328 -0
  512. package/dist/runtime/server/utils/mail.d.ts +90 -0
  513. package/dist/runtime/server/utils/mail.mjs +366 -0
  514. package/dist/runtime/server/utils/notifications.d.ts +51 -0
  515. package/dist/runtime/server/utils/notifications.mjs +215 -0
  516. package/dist/runtime/server/utils/organization.d.ts +54 -0
  517. package/dist/runtime/server/utils/organization.mjs +354 -0
  518. package/dist/runtime/server/utils/passwordless.d.ts +48 -0
  519. package/dist/runtime/server/utils/passwordless.mjs +179 -0
  520. package/dist/runtime/server/utils/payments.d.ts +121 -0
  521. package/dist/runtime/server/utils/payments.mjs +1067 -0
  522. package/dist/runtime/server/utils/queue-fallback.d.ts +2 -0
  523. package/dist/runtime/server/utils/queue-fallback.mjs +2 -0
  524. package/dist/runtime/server/utils/queue.d.ts +4 -0
  525. package/dist/runtime/server/utils/queue.mjs +3 -0
  526. package/dist/runtime/server/utils/rag.d.ts +25 -0
  527. package/dist/runtime/server/utils/rag.mjs +333 -0
  528. package/dist/runtime/server/utils/ratelimit.d.ts +45 -0
  529. package/dist/runtime/server/utils/ratelimit.mjs +182 -0
  530. package/dist/runtime/server/utils/realtime.d.ts +110 -0
  531. package/dist/runtime/server/utils/realtime.mjs +197 -0
  532. package/dist/runtime/server/utils/schema-fallback.d.ts +3 -0
  533. package/dist/runtime/server/utils/schema-fallback.mjs +2 -0
  534. package/dist/runtime/server/utils/session.d.ts +72 -0
  535. package/dist/runtime/server/utils/session.mjs +287 -0
  536. package/dist/runtime/server/utils/sso.d.ts +49 -0
  537. package/dist/runtime/server/utils/sso.mjs +131 -0
  538. package/dist/runtime/server/utils/storage.d.ts +111 -0
  539. package/dist/runtime/server/utils/storage.mjs +654 -0
  540. package/dist/runtime/server/utils/tenant.d.ts +44 -0
  541. package/dist/runtime/server/utils/tenant.mjs +285 -0
  542. package/dist/runtime/server/utils/totp.d.ts +33 -0
  543. package/dist/runtime/server/utils/totp.mjs +112 -0
  544. package/dist/runtime/server/utils/tracker.d.ts +72 -0
  545. package/dist/runtime/server/utils/tracker.mjs +139 -0
  546. package/dist/runtime/server/utils/turnstile.d.ts +17 -0
  547. package/dist/runtime/server/utils/turnstile.mjs +68 -0
  548. package/dist/runtime/server/utils/vapid.d.ts +35 -0
  549. package/dist/runtime/server/utils/vapid.mjs +211 -0
  550. package/dist/runtime/storage.d.ts +1 -0
  551. package/dist/runtime/storage.mjs +0 -0
  552. package/dist/runtime/types/ai.d.ts +68 -0
  553. package/dist/runtime/types/ai.mjs +0 -0
  554. package/dist/runtime/types/analytics.d.ts +30 -0
  555. package/dist/runtime/types/analytics.mjs +0 -0
  556. package/dist/runtime/types/auth-globals.d.ts +14 -0
  557. package/dist/runtime/types/auth.d.ts +153 -0
  558. package/dist/runtime/types/auth.mjs +0 -0
  559. package/dist/runtime/types/browser.d.ts +29 -0
  560. package/dist/runtime/types/browser.mjs +0 -0
  561. package/dist/runtime/types/d1.d.ts +44 -0
  562. package/dist/runtime/types/d1.mjs +0 -0
  563. package/dist/runtime/types/drizzle.d.ts +13 -0
  564. package/dist/runtime/types/drizzle.mjs +0 -0
  565. package/dist/runtime/types/durable-object.d.ts +51 -0
  566. package/dist/runtime/types/durable-object.mjs +0 -0
  567. package/dist/runtime/types/email.d.ts +66 -0
  568. package/dist/runtime/types/email.mjs +0 -0
  569. package/dist/runtime/types/hyperdrive.d.ts +18 -0
  570. package/dist/runtime/types/hyperdrive.mjs +0 -0
  571. package/dist/runtime/types/imports.d.ts +58 -0
  572. package/dist/runtime/types/index.d.ts +156 -0
  573. package/dist/runtime/types/index.mjs +13 -0
  574. package/dist/runtime/types/queue.d.ts +67 -0
  575. package/dist/runtime/types/queue.mjs +0 -0
  576. package/dist/runtime/types/r2.d.ts +108 -0
  577. package/dist/runtime/types/r2.mjs +0 -0
  578. package/dist/runtime/types/ratelimit.d.ts +21 -0
  579. package/dist/runtime/types/ratelimit.mjs +0 -0
  580. package/dist/runtime/types/vectorize.d.ts +74 -0
  581. package/dist/runtime/types/vectorize.mjs +0 -0
  582. package/dist/runtime/vectorize.d.ts +21 -0
  583. package/dist/runtime/vectorize.mjs +53 -0
  584. package/dist/types.d.ts +2750 -0
  585. package/dist/types.mjs +1 -0
  586. package/dist/utils/agents.d.ts +8 -0
  587. package/dist/utils/auth-schema.d.ts +11 -0
  588. package/dist/utils/bindings.d.ts +16 -0
  589. package/dist/utils/cms-schema.d.ts +1 -0
  590. package/dist/utils/cms-sources.d.ts +62 -0
  591. package/dist/utils/drizzle.d.ts +42 -0
  592. package/dist/utils/jobs.d.ts +8 -0
  593. package/dist/utils/local-db.d.ts +28 -0
  594. package/dist/utils/notifications-schema.d.ts +15 -0
  595. package/dist/utils/payments-schema.d.ts +11 -0
  596. package/dist/utils/pkg.d.ts +15 -0
  597. package/dist/utils/queue.d.ts +8 -0
  598. package/dist/utils/tenants-schema.d.ts +11 -0
  599. package/package.json +104 -0
@@ -0,0 +1,234 @@
1
+ function rangeToInterval(range = "7d") {
2
+ const map = {
3
+ "1h": "1 HOUR",
4
+ "24h": "24 HOUR",
5
+ "7d": "7 DAY",
6
+ "30d": "30 DAY",
7
+ "90d": "90 DAY"
8
+ };
9
+ return map[range] || "7 DAY";
10
+ }
11
+ function rangeToGranularity(range = "7d") {
12
+ if (range === "1h") return "toStartOfFiveMinutes";
13
+ if (range === "24h") return "toStartOfHour";
14
+ return "toStartOfDay";
15
+ }
16
+ export async function queryAnalytics(sql, options = {}) {
17
+ const accountId = options.accountId || process.env.CLOUDFLARE_ACCOUNT_ID || process.env.CF_ACCOUNT_ID;
18
+ const apiToken = options.apiToken || process.env.CLOUDFLARE_API_TOKEN || process.env.CF_API_TOKEN;
19
+ if (!accountId || !apiToken) {
20
+ if (process.env.NODE_ENV !== "production") {
21
+ return [];
22
+ }
23
+ throw new Error(
24
+ "[qarpeo/analytics] Missing Cloudflare credentials. Set CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN, or pass them via AnalyticsOptions."
25
+ );
26
+ }
27
+ const url = `https://api.cloudflare.com/client/v4/accounts/${accountId}/analytics_engine/sql`;
28
+ let res;
29
+ try {
30
+ res = await fetch(url, {
31
+ method: "POST",
32
+ headers: {
33
+ Authorization: `Bearer ${apiToken}`,
34
+ "Content-Type": "text/plain"
35
+ },
36
+ body: sql
37
+ });
38
+ } catch (err) {
39
+ if (process.env.NODE_ENV !== "production") return [];
40
+ throw new Error(`[qarpeo/analytics] Network error querying AE SQL API: ${err.message}`);
41
+ }
42
+ if (!res.ok) {
43
+ if (process.env.NODE_ENV !== "production") return [];
44
+ const body = await res.text().catch(() => "");
45
+ throw new Error(`[qarpeo/analytics] AE SQL API error ${res.status}: ${body}`);
46
+ }
47
+ const json = await res.json();
48
+ return json.data || [];
49
+ }
50
+ export function useAnalyticsDashboard(options = {}) {
51
+ const dataset = options.dataset || process.env.QARPEO_ANALYTICS_DATASET || "analytics";
52
+ const siteFilter = options.siteId ? `AND index1 = '${options.siteId.replace(/'/g, "''")}'` : "";
53
+ const query = (sql) => queryAnalytics(sql, options);
54
+ return {
55
+ /**
56
+ * Total pageviews and time-series breakdown.
57
+ *
58
+ * @param range Time range (default: '7d')
59
+ */
60
+ async pageviews(range = "7d") {
61
+ const interval = rangeToInterval(range);
62
+ const granFn = rangeToGranularity(range);
63
+ const seriesRows = await query(`
64
+ SELECT
65
+ ${granFn}(timestamp) AS date,
66
+ count() AS count
67
+ FROM ${dataset}
68
+ WHERE blob1 = 'pageview'
69
+ AND timestamp > NOW() - INTERVAL '${interval}'
70
+ ${siteFilter}
71
+ GROUP BY date
72
+ ORDER BY date ASC
73
+ `);
74
+ const series = seriesRows.map((r) => ({
75
+ date: String(r.date),
76
+ count: Number(r.count)
77
+ }));
78
+ const total = series.reduce((s, r) => s + r.count, 0);
79
+ return { total, series };
80
+ },
81
+ /**
82
+ * Unique visitor count (unique session fingerprints).
83
+ *
84
+ * @param range Time range (default: '7d')
85
+ */
86
+ async visitors(range = "7d") {
87
+ const interval = rangeToInterval(range);
88
+ const rows = await query(`
89
+ SELECT count(DISTINCT blob7) AS visitors
90
+ FROM ${dataset}
91
+ WHERE blob1 = 'pageview'
92
+ AND timestamp > NOW() - INTERVAL '${interval}'
93
+ ${siteFilter}
94
+ `);
95
+ return Number(rows[0]?.visitors ?? 0);
96
+ },
97
+ /**
98
+ * Top pages by pageview count.
99
+ *
100
+ * @param limit Max results (default: 10)
101
+ * @param range Time range (default: '7d')
102
+ */
103
+ async topPages(limit = 10, range = "7d") {
104
+ const interval = rangeToInterval(range);
105
+ const rows = await query(`
106
+ SELECT blob2 AS path, count() AS views
107
+ FROM ${dataset}
108
+ WHERE blob1 = 'pageview'
109
+ AND timestamp > NOW() - INTERVAL '${interval}'
110
+ ${siteFilter}
111
+ GROUP BY path
112
+ ORDER BY views DESC
113
+ LIMIT ${limit}
114
+ `);
115
+ return rows.map((r) => ({ path: String(r.path || "/"), views: Number(r.views) }));
116
+ },
117
+ /**
118
+ * Top referrers by visit count.
119
+ *
120
+ * @param limit Max results (default: 10)
121
+ * @param range Time range (default: '7d')
122
+ */
123
+ async topReferrers(limit = 10, range = "7d") {
124
+ const interval = rangeToInterval(range);
125
+ const rows = await query(`
126
+ SELECT blob3 AS referrer, count() AS count
127
+ FROM ${dataset}
128
+ WHERE blob1 = 'pageview'
129
+ AND blob3 != ''
130
+ AND timestamp > NOW() - INTERVAL '${interval}'
131
+ ${siteFilter}
132
+ GROUP BY referrer
133
+ ORDER BY count DESC
134
+ LIMIT ${limit}
135
+ `);
136
+ return rows.map((r) => ({ referrer: String(r.referrer), count: Number(r.count) }));
137
+ },
138
+ /**
139
+ * Pageview breakdown by country.
140
+ *
141
+ * @param limit Max results (default: 10)
142
+ * @param range Time range (default: '7d')
143
+ */
144
+ async countries(limit = 10, range = "7d") {
145
+ const interval = rangeToInterval(range);
146
+ const rows = await query(`
147
+ SELECT blob4 AS country, count() AS count
148
+ FROM ${dataset}
149
+ WHERE blob1 = 'pageview'
150
+ AND timestamp > NOW() - INTERVAL '${interval}'
151
+ ${siteFilter}
152
+ GROUP BY country
153
+ ORDER BY count DESC
154
+ LIMIT ${limit}
155
+ `);
156
+ return rows.map((r) => ({ country: String(r.country || "XX"), count: Number(r.count) }));
157
+ },
158
+ /**
159
+ * Device type breakdown.
160
+ *
161
+ * @param range Time range (default: '7d')
162
+ */
163
+ async devices(range = "7d") {
164
+ const interval = rangeToInterval(range);
165
+ const rows = await query(`
166
+ SELECT blob5 AS device, count() AS count
167
+ FROM ${dataset}
168
+ WHERE blob1 = 'pageview'
169
+ AND timestamp > NOW() - INTERVAL '${interval}'
170
+ ${siteFilter}
171
+ GROUP BY device
172
+ `);
173
+ const result = { mobile: 0, desktop: 0, bot: 0 };
174
+ for (const r of rows) {
175
+ const d = String(r.device);
176
+ if (d in result) result[d] = Number(r.count);
177
+ }
178
+ return result;
179
+ },
180
+ /**
181
+ * Custom event breakdown.
182
+ *
183
+ * @param name Filter to a specific event name. If omitted, returns all events.
184
+ * @param limit Max results (default: 20)
185
+ * @param range Time range (default: '7d')
186
+ */
187
+ async events(name, limit = 20, range = "7d") {
188
+ const interval = rangeToInterval(range);
189
+ const nameFilter = name ? `AND blob1 = '${name.replace(/'/g, "''")}'` : "AND blob1 != 'pageview'";
190
+ const rows = await query(`
191
+ SELECT
192
+ blob1 AS name,
193
+ count() AS count,
194
+ max(timestamp) AS lastSeen
195
+ FROM ${dataset}
196
+ WHERE timestamp > NOW() - INTERVAL '${interval}'
197
+ ${nameFilter}
198
+ ${siteFilter}
199
+ GROUP BY name
200
+ ORDER BY count DESC
201
+ LIMIT ${limit}
202
+ `);
203
+ return rows.map((r) => ({
204
+ name: String(r.name),
205
+ count: Number(r.count),
206
+ lastSeen: String(r.lastSeen)
207
+ }));
208
+ },
209
+ /**
210
+ * Returns a full KPI summary object — useful for the dashboard overview card. Runs multiple
211
+ * queries in parallel.
212
+ *
213
+ * @param range Time range (default: '7d')
214
+ */
215
+ async summary(range = "7d") {
216
+ const [pvResult, visitors, topPages, topReferrers, countries, devices] = await Promise.all([
217
+ this.pageviews(range),
218
+ this.visitors(range),
219
+ this.topPages(10, range),
220
+ this.topReferrers(10, range),
221
+ this.countries(10, range),
222
+ this.devices(range)
223
+ ]);
224
+ return {
225
+ pageviews: pvResult.total,
226
+ visitors,
227
+ topPages,
228
+ topReferrers,
229
+ countries,
230
+ devices
231
+ };
232
+ }
233
+ };
234
+ }
@@ -0,0 +1,60 @@
1
+ import type { RequestEvent } from "nuxt/server";
2
+ import type { QarpeoSession } from "../../types/auth";
3
+ /** Ensures core auth tables (_qarpeo_users, _qarpeo_accounts, _qarpeo_sessions) exist in D1. */
4
+ export declare function ensureAuthTables(d1: any): Promise<void>;
5
+ export interface NormalizeOAuthProfileOptions {
6
+ provider: string;
7
+ rawUser: any;
8
+ tokens: any;
9
+ }
10
+ export declare function normalizeOAuthProfile({ provider, rawUser, tokens }: NormalizeOAuthProfileOptions): {
11
+ provider: string;
12
+ providerAccountId: string;
13
+ email: any;
14
+ emailVerified: boolean;
15
+ name: any;
16
+ avatarUrl: any;
17
+ tokens: any;
18
+ };
19
+ export interface HandleOAuthSuccessOptions {
20
+ event: RequestEvent;
21
+ provider: string;
22
+ user: any;
23
+ tokens: any;
24
+ }
25
+ /**
26
+ * Handles OAuth callback success:
27
+ *
28
+ * 1. Upserts user in D1 database
29
+ * 2. Manages account linking according to security rules
30
+ * 3. Triggers `qarpeo:auth:oauth:success` Nitro hook
31
+ * 4. Triggers `qarpeo:auth:session:create` Nitro hook
32
+ * 5. Issues secured session cookie
33
+ */
34
+ export declare function handleOAuthSuccess({ event, provider, user: rawUser, tokens, }: HandleOAuthSuccessOptions): Promise<QarpeoSession>;
35
+ export interface DeleteAccountOptions {
36
+ confirm?: boolean;
37
+ phrase?: string;
38
+ turnstileToken?: string;
39
+ cascadeOrg?: boolean;
40
+ }
41
+ /**
42
+ * Permanently deletes a user account and purges all related sessions, OAuth accounts,
43
+ * 2FA credentials, WebAuthn authenticators, API tokens, and notification records.
44
+ * Throws 400 if user is sole owner of an organization and cascadeOrg is not specified.
45
+ */
46
+ export declare function deleteUserAccount(event: any, userId: string, options?: DeleteAccountOptions): Promise<{
47
+ success: boolean;
48
+ userId: string;
49
+ }>;
50
+ /**
51
+ * Evaluates whether Multi-Factor Authentication is required for a user
52
+ * based on user 2FA enrollment and global/organization MFA policies.
53
+ */
54
+ export declare function resolveMfaStatus(d1: any, user: {
55
+ id: string;
56
+ role?: string;
57
+ }, authConfig?: any): Promise<{
58
+ mfaRequired: boolean;
59
+ mfaVerified: boolean;
60
+ }>;
@@ -0,0 +1,361 @@
1
+ import { useNitroApp } from "nitro/app";
2
+ import { getD1Binding } from "../../db.mjs";
3
+ import { getQarpeoConfig } from "./config.mjs";
4
+ import { encryptToken } from "./crypto.mjs";
5
+ import { createDeviceSession, setAuthSession } from "./session.mjs";
6
+ let tablesEnsured = false;
7
+ export async function ensureAuthTables(d1) {
8
+ if (tablesEnsured) return;
9
+ await d1.batch([
10
+ d1.prepare(`
11
+ CREATE TABLE IF NOT EXISTS _qarpeo_users (
12
+ id TEXT PRIMARY KEY,
13
+ email TEXT UNIQUE NOT NULL,
14
+ email_verified INTEGER DEFAULT 0,
15
+ name TEXT,
16
+ avatar_url TEXT,
17
+ role TEXT DEFAULT 'user',
18
+ created_at INTEGER NOT NULL,
19
+ updated_at INTEGER NOT NULL
20
+ )
21
+ `),
22
+ d1.prepare(`
23
+ CREATE TABLE IF NOT EXISTS _qarpeo_accounts (
24
+ id TEXT PRIMARY KEY,
25
+ user_id TEXT NOT NULL REFERENCES _qarpeo_users(id) ON DELETE CASCADE,
26
+ provider TEXT NOT NULL,
27
+ provider_account_id TEXT NOT NULL,
28
+ email TEXT,
29
+ email_verified INTEGER DEFAULT 0,
30
+ access_token TEXT,
31
+ refresh_token TEXT,
32
+ expires_at INTEGER,
33
+ created_at INTEGER NOT NULL,
34
+ UNIQUE(provider, provider_account_id)
35
+ )
36
+ `),
37
+ d1.prepare(`
38
+ CREATE TABLE IF NOT EXISTS _qarpeo_sessions (
39
+ id TEXT PRIMARY KEY,
40
+ user_id TEXT NOT NULL REFERENCES _qarpeo_users(id) ON DELETE CASCADE,
41
+ token_hash TEXT NOT NULL,
42
+ client_type TEXT DEFAULT 'web',
43
+ user_agent TEXT,
44
+ ip_address TEXT,
45
+ last_active INTEGER NOT NULL,
46
+ expires_at INTEGER NOT NULL
47
+ )
48
+ `),
49
+ d1.prepare(`
50
+ CREATE TABLE IF NOT EXISTS _qarpeo_two_factor (
51
+ id TEXT PRIMARY KEY,
52
+ user_id TEXT NOT NULL UNIQUE REFERENCES _qarpeo_users(id) ON DELETE CASCADE,
53
+ secret TEXT NOT NULL,
54
+ backup_codes TEXT NOT NULL,
55
+ enabled INTEGER DEFAULT 0,
56
+ created_at INTEGER NOT NULL
57
+ )
58
+ `),
59
+ d1.prepare(`
60
+ CREATE TABLE IF NOT EXISTS _qarpeo_authenticators (
61
+ id TEXT PRIMARY KEY,
62
+ user_id TEXT NOT NULL REFERENCES _qarpeo_users(id) ON DELETE CASCADE,
63
+ credential_id TEXT NOT NULL UNIQUE,
64
+ public_key BLOB NOT NULL,
65
+ counter INTEGER NOT NULL DEFAULT 0,
66
+ transports TEXT,
67
+ created_at INTEGER NOT NULL
68
+ )
69
+ `),
70
+ d1.prepare(`
71
+ CREATE TABLE IF NOT EXISTS _qarpeo_organizations (
72
+ id TEXT PRIMARY KEY,
73
+ name TEXT NOT NULL,
74
+ slug TEXT NOT NULL UNIQUE,
75
+ logo_url TEXT,
76
+ created_at INTEGER NOT NULL
77
+ )
78
+ `),
79
+ d1.prepare(`
80
+ CREATE TABLE IF NOT EXISTS _qarpeo_members (
81
+ id TEXT PRIMARY KEY,
82
+ organization_id TEXT NOT NULL REFERENCES _qarpeo_organizations(id) ON DELETE CASCADE,
83
+ user_id TEXT NOT NULL REFERENCES _qarpeo_users(id) ON DELETE CASCADE,
84
+ role TEXT NOT NULL DEFAULT 'member',
85
+ created_at INTEGER NOT NULL,
86
+ UNIQUE(organization_id, user_id)
87
+ )
88
+ `),
89
+ d1.prepare(`
90
+ CREATE TABLE IF NOT EXISTS _qarpeo_invitations (
91
+ id TEXT PRIMARY KEY,
92
+ organization_id TEXT NOT NULL REFERENCES _qarpeo_organizations(id) ON DELETE CASCADE,
93
+ email TEXT NOT NULL,
94
+ role TEXT NOT NULL DEFAULT 'member',
95
+ token_hash TEXT NOT NULL,
96
+ expires_at INTEGER NOT NULL,
97
+ created_at INTEGER NOT NULL
98
+ )
99
+ `),
100
+ d1.prepare(`
101
+ CREATE TABLE IF NOT EXISTS _qarpeo_api_tokens (
102
+ id TEXT PRIMARY KEY,
103
+ user_id TEXT NOT NULL REFERENCES _qarpeo_users(id) ON DELETE CASCADE,
104
+ name TEXT NOT NULL,
105
+ token_hash TEXT NOT NULL,
106
+ scopes TEXT DEFAULT '["*"]',
107
+ last_used_at INTEGER,
108
+ expires_at INTEGER,
109
+ created_at INTEGER NOT NULL
110
+ )
111
+ `),
112
+ // Secondary indexes for hot paths (FK lookups & session validation)
113
+ d1.prepare(
114
+ `CREATE INDEX IF NOT EXISTS _qarpeo_sessions_user_id_idx ON _qarpeo_sessions(user_id)`
115
+ ),
116
+ d1.prepare(
117
+ `CREATE INDEX IF NOT EXISTS _qarpeo_sessions_token_hash_idx ON _qarpeo_sessions(token_hash)`
118
+ ),
119
+ d1.prepare(
120
+ `CREATE INDEX IF NOT EXISTS _qarpeo_sessions_expires_at_idx ON _qarpeo_sessions(expires_at)`
121
+ ),
122
+ d1.prepare(
123
+ `CREATE INDEX IF NOT EXISTS _qarpeo_accounts_user_id_idx ON _qarpeo_accounts(user_id)`
124
+ ),
125
+ d1.prepare(
126
+ `CREATE INDEX IF NOT EXISTS _qarpeo_api_tokens_user_id_idx ON _qarpeo_api_tokens(user_id)`
127
+ ),
128
+ d1.prepare(
129
+ `CREATE INDEX IF NOT EXISTS _qarpeo_members_user_id_idx ON _qarpeo_members(user_id)`
130
+ ),
131
+ d1.prepare(
132
+ `CREATE INDEX IF NOT EXISTS _qarpeo_members_org_id_idx ON _qarpeo_members(organization_id)`
133
+ )
134
+ ]);
135
+ tablesEnsured = true;
136
+ }
137
+ export function normalizeOAuthProfile({ provider, rawUser, tokens }) {
138
+ let email = rawUser.email || null;
139
+ let name = rawUser.name || rawUser.login || rawUser.username || null;
140
+ let avatarUrl = rawUser.avatar_url || rawUser.picture || (rawUser.avatar ? `https://cdn.discordapp.com/avatars/${rawUser.id}/${rawUser.avatar}.png` : null);
141
+ let providerAccountId = String(rawUser.id || rawUser.sub || "");
142
+ let emailVerified = Boolean(rawUser.email_verified || rawUser.verified);
143
+ if (provider === "github" && rawUser.email) {
144
+ emailVerified = Boolean(rawUser.email_verified ?? true);
145
+ }
146
+ return {
147
+ provider,
148
+ providerAccountId,
149
+ email,
150
+ emailVerified,
151
+ name,
152
+ avatarUrl,
153
+ tokens
154
+ };
155
+ }
156
+ export async function handleOAuthSuccess({
157
+ event,
158
+ provider,
159
+ user: rawUser,
160
+ tokens
161
+ }) {
162
+ let d1;
163
+ try {
164
+ const bindingName = globalThis.process?.env?.QARPEO_DEFAULT_DB_BINDING || "DB";
165
+ d1 = getD1Binding(bindingName, event);
166
+ await ensureAuthTables(d1);
167
+ } catch (err) {
168
+ console.warn("[qarpeo:auth] Failed to initialize D1 auth tables:", err);
169
+ d1 = null;
170
+ }
171
+ const profile = normalizeOAuthProfile({ provider, rawUser, tokens });
172
+ const authConfig = getQarpeoConfig(event).auth;
173
+ const linkAccounts = authConfig.linkAccounts !== false;
174
+ const now = Date.now();
175
+ let dbUser = null;
176
+ let isNew = false;
177
+ if (d1 && profile.providerAccountId) {
178
+ const existingAccount = await d1.prepare(
179
+ "SELECT * FROM _qarpeo_accounts WHERE provider = ? AND provider_account_id = ? LIMIT 1"
180
+ ).bind(provider, profile.providerAccountId).first();
181
+ const encryptedAccessToken = tokens?.access_token ? await encryptToken(tokens.access_token, event) : null;
182
+ const encryptedRefreshToken = tokens?.refresh_token ? await encryptToken(tokens.refresh_token, event) : null;
183
+ if (existingAccount) {
184
+ dbUser = await d1.prepare("SELECT * FROM _qarpeo_users WHERE id = ? LIMIT 1").bind(existingAccount.user_id).first();
185
+ if (dbUser) {
186
+ await d1.prepare("UPDATE _qarpeo_accounts SET access_token = ?, refresh_token = ? WHERE id = ?").bind(encryptedAccessToken, encryptedRefreshToken, existingAccount.id).run();
187
+ await d1.prepare("UPDATE _qarpeo_users SET updated_at = ? WHERE id = ?").bind(now, dbUser.id).run();
188
+ }
189
+ }
190
+ if (!dbUser && profile.email) {
191
+ const existingUser = await d1.prepare("SELECT * FROM _qarpeo_users WHERE email = ? LIMIT 1").bind(profile.email).first();
192
+ if (existingUser) {
193
+ const canLink = linkAccounts && Boolean(existingUser.email_verified) && Boolean(profile.emailVerified);
194
+ if (canLink || !linkAccounts) {
195
+ dbUser = existingUser;
196
+ const accountId = crypto.randomUUID();
197
+ await d1.prepare(`
198
+ INSERT INTO _qarpeo_accounts (id, user_id, provider, provider_account_id, email, email_verified, access_token, refresh_token, created_at)
199
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
200
+ `).bind(
201
+ accountId,
202
+ dbUser.id,
203
+ provider,
204
+ profile.providerAccountId,
205
+ profile.email,
206
+ profile.emailVerified ? 1 : 0,
207
+ encryptedAccessToken,
208
+ encryptedRefreshToken,
209
+ now
210
+ ).run();
211
+ }
212
+ }
213
+ }
214
+ if (!dbUser) {
215
+ isNew = true;
216
+ const userId = crypto.randomUUID();
217
+ const accountId = crypto.randomUUID();
218
+ const userStmt = d1.prepare(`
219
+ INSERT INTO _qarpeo_users (id, email, email_verified, name, avatar_url, role, created_at, updated_at)
220
+ VALUES (?, ?, ?, ?, ?, 'user', ?, ?)
221
+ `).bind(
222
+ userId,
223
+ profile.email || `${provider}_${profile.providerAccountId}@qarpeo.local`,
224
+ profile.emailVerified ? 1 : 0,
225
+ profile.name || null,
226
+ profile.avatarUrl || null,
227
+ now,
228
+ now
229
+ );
230
+ const accountStmt = d1.prepare(`
231
+ INSERT INTO _qarpeo_accounts (id, user_id, provider, provider_account_id, email, email_verified, access_token, refresh_token, created_at)
232
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
233
+ `).bind(
234
+ accountId,
235
+ userId,
236
+ provider,
237
+ profile.providerAccountId,
238
+ profile.email,
239
+ profile.emailVerified ? 1 : 0,
240
+ encryptedAccessToken,
241
+ encryptedRefreshToken,
242
+ now
243
+ );
244
+ await d1.batch([userStmt, accountStmt]);
245
+ dbUser = {
246
+ id: userId,
247
+ email: profile.email || `${provider}_${profile.providerAccountId}@qarpeo.local`,
248
+ email_verified: profile.emailVerified ? 1 : 0,
249
+ name: profile.name,
250
+ avatar_url: profile.avatarUrl,
251
+ role: "user"
252
+ };
253
+ }
254
+ }
255
+ const finalUser = dbUser ? {
256
+ id: dbUser.id,
257
+ email: dbUser.email,
258
+ name: dbUser.name,
259
+ avatarUrl: dbUser.avatar_url,
260
+ emailVerified: Boolean(dbUser.email_verified),
261
+ role: dbUser.role || "user"
262
+ } : {
263
+ id: profile.providerAccountId || crypto.randomUUID(),
264
+ email: profile.email || `${provider}@qarpeo.local`,
265
+ name: profile.name,
266
+ avatarUrl: profile.avatarUrl,
267
+ emailVerified: profile.emailVerified,
268
+ role: "user"
269
+ };
270
+ const nitroApp = useNitroApp();
271
+ await nitroApp.hooks?.callHook("qarpeo:auth:oauth:success", {
272
+ event,
273
+ provider,
274
+ user: { ...finalUser, isNew },
275
+ tokens
276
+ });
277
+ const sessionData = {
278
+ user: finalUser,
279
+ provider,
280
+ loggedInAt: now,
281
+ tenantId: event?.context?.tenant?.id ?? void 0
282
+ };
283
+ await nitroApp.hooks?.callHook("qarpeo:auth:session:create", {
284
+ event,
285
+ user: finalUser,
286
+ session: sessionData
287
+ });
288
+ const sessionCfg = authConfig.session || {};
289
+ try {
290
+ const deviceSession = await createDeviceSession(event, finalUser, {
291
+ provider,
292
+ maxAge: sessionCfg.maxAge || 604800,
293
+ maxSessionsPerUser: sessionCfg.maxSessionsPerUser ?? 5,
294
+ backend: sessionCfg.backend || "cookie"
295
+ });
296
+ sessionData.sessionId = deviceSession.sessionId;
297
+ } catch (err) {
298
+ console.warn("[qarpeo:auth] Failed to register device session:", err);
299
+ }
300
+ await setAuthSession(event, sessionData);
301
+ return sessionData;
302
+ }
303
+ export async function deleteUserAccount(event, userId, options = {}) {
304
+ let d1;
305
+ try {
306
+ const bindingName = globalThis.process?.env?.QARPEO_DEFAULT_DB_BINDING || "DB";
307
+ d1 = getD1Binding(bindingName, event);
308
+ } catch {
309
+ d1 = null;
310
+ }
311
+ if (d1) {
312
+ const memberships = await d1.prepare("SELECT m.organization_id, m.role, o.name as org_name FROM _qarpeo_members m LEFT JOIN _qarpeo_organizations o ON m.organization_id = o.id WHERE m.user_id = ? AND m.role = 'owner'").bind(userId).all();
313
+ const ownedOrgs = memberships.results || [];
314
+ for (const org of ownedOrgs) {
315
+ const otherOwners = await d1.prepare("SELECT COUNT(*) as count FROM _qarpeo_members WHERE organization_id = ? AND role = 'owner' AND user_id != ?").bind(org.organization_id, userId).first();
316
+ const otherOwnerCount = Number(otherOwners?.count || 0);
317
+ if (otherOwnerCount === 0) {
318
+ if (options.cascadeOrg) {
319
+ await d1.prepare("DELETE FROM _qarpeo_organizations WHERE id = ?").bind(org.organization_id).run();
320
+ } else {
321
+ throw new Error(
322
+ `Cannot delete account: You are the sole owner of organization "${org.org_name || org.organization_id}". Transfer ownership or delete the organization first, or pass cascadeOrg: true.`
323
+ );
324
+ }
325
+ }
326
+ }
327
+ try {
328
+ await d1.prepare("DELETE FROM _qarpeo_notifications WHERE user_id = ?").bind(userId).run();
329
+ await d1.prepare("DELETE FROM _qarpeo_push_subscriptions WHERE user_id = ?").bind(userId).run();
330
+ } catch {
331
+ }
332
+ await d1.prepare("DELETE FROM _qarpeo_users WHERE id = ?").bind(userId).run();
333
+ }
334
+ try {
335
+ const nitroApp = useNitroApp();
336
+ await nitroApp.hooks?.callHook("qarpeo:auth:account:delete", {
337
+ event,
338
+ userId
339
+ });
340
+ } catch {
341
+ }
342
+ return { success: true, userId };
343
+ }
344
+ export async function resolveMfaStatus(d1, user, authConfig = {}) {
345
+ let userHas2FA = false;
346
+ if (d1 && user?.id) {
347
+ try {
348
+ const twoFa = await d1.prepare("SELECT enabled FROM _qarpeo_two_factor WHERE user_id = ? AND enabled = 1 LIMIT 1").bind(user.id).first();
349
+ userHas2FA = Boolean(twoFa?.enabled);
350
+ } catch {
351
+ }
352
+ }
353
+ const mfaCfg = typeof authConfig.mfa === "object" ? authConfig.mfa : {};
354
+ const roleEnforced = mfaCfg.enforce === "role" && Array.isArray(mfaCfg.roles) && mfaCfg.roles.includes(user.role || "user");
355
+ const globalEnforced = mfaCfg.enforce === true;
356
+ const required = userHas2FA || globalEnforced || roleEnforced;
357
+ return {
358
+ mfaRequired: required,
359
+ mfaVerified: !required
360
+ };
361
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared in-memory Blob/R2 store for local development and preview mode. Attached to globalThis to
3
+ * ensure cross-chunk persistence in Nitro/Vite.
4
+ */
5
+ export interface DevMockBlobItem {
6
+ key: string;
7
+ size: number;
8
+ contentType: string;
9
+ uploaded: string;
10
+ data?: Uint8Array;
11
+ access?: string;
12
+ }
13
+ export declare function getDevMockBlobStore(): Map<string, DevMockBlobItem>;