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,745 @@
1
+ <script setup lang="ts">
2
+ import { computed, onMounted, ref, watch } from "vue"
3
+
4
+ definePageMeta({ layout: false })
5
+
6
+ const route = useRoute()
7
+
8
+ const {
9
+ data: blobData,
10
+ status: blobStatus,
11
+ pending: blobPending,
12
+ execute: executeLoadBlob,
13
+ } = useFetch<any>("/_qarpeo/api/blob/files", {
14
+ immediate: false,
15
+ lazy: true,
16
+ default: () => ({ files: [] }),
17
+ })
18
+
19
+ const blobLoading = computed(
20
+ () => blobPending.value || blobStatus.value === "idle" || blobStatus.value === "pending",
21
+ )
22
+
23
+ const blobFiles = computed(() => blobData.value?.files || [])
24
+ const blobSearch = ref("")
25
+ const filterType = ref<"all" | "images" | "documents" | "other">("all")
26
+ const fileInputRef = ref<HTMLInputElement | null>(null)
27
+ const uploadingBlob = ref(false)
28
+ const deletingBlob = ref(false)
29
+ const showDeleteBlobModal = ref(false)
30
+ const isDragging = ref(false)
31
+ const copiedUrl = ref(false)
32
+ const copiedKey = ref(false)
33
+
34
+ const textContent = ref<string | null>(null)
35
+ const textLoading = ref(false)
36
+ const failedImages = ref<Record<string, boolean>>({})
37
+
38
+ function onImageError(key: string) {
39
+ failedImages.value[key] = true
40
+ }
41
+
42
+ // selectedKey is derived from / synced to the ?key= query param
43
+ const selectedKey = computed({
44
+ get: () => (route.query.key as string) || null,
45
+ set: (key: string | null) => {
46
+ navigateTo({ query: { ...route.query, key: key ?? undefined } })
47
+ },
48
+ })
49
+
50
+ const selectedBlob = computed(
51
+ () => blobFiles.value.find((f) => f.key === selectedKey.value) || null,
52
+ )
53
+
54
+ const isSlideoverOpen = computed({
55
+ get: () => Boolean(selectedBlob.value),
56
+ set: (val: boolean) => {
57
+ if (!val) {
58
+ selectedKey.value = null
59
+ }
60
+ },
61
+ })
62
+
63
+ function fmtBytes(bytes: number) {
64
+ if (!bytes) return "0 B"
65
+ if (bytes < 1024) return `${bytes} B`
66
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`
67
+ return `${(bytes / (1024 * 1024)).toFixed(2)} MB`
68
+ }
69
+
70
+ function fmtDate(iso?: string) {
71
+ if (!iso) return "—"
72
+ return new Date(iso).toLocaleDateString()
73
+ }
74
+
75
+ function fmtFullDate(iso?: string) {
76
+ if (!iso) return "—"
77
+ return new Date(iso).toLocaleString()
78
+ }
79
+
80
+ function getBlobIcon(contentType?: string): string {
81
+ if (contentType?.startsWith("image/")) return "i-lucide-image"
82
+ if (contentType?.startsWith("audio/")) return "i-lucide-music"
83
+ if (contentType?.startsWith("video/")) return "i-lucide-video"
84
+ if (
85
+ contentType?.includes("pdf") ||
86
+ contentType?.includes("document") ||
87
+ contentType?.includes("sheet")
88
+ ) {
89
+ return "i-lucide-file-text"
90
+ }
91
+ if (
92
+ contentType?.includes("json") ||
93
+ contentType?.includes("javascript") ||
94
+ contentType?.includes("text/")
95
+ ) {
96
+ return "i-lucide-file-code"
97
+ }
98
+ return "i-lucide-file"
99
+ }
100
+
101
+ function isImage(ct?: string) {
102
+ return Boolean(ct?.startsWith("image/"))
103
+ }
104
+
105
+ function isAudio(ct?: string) {
106
+ return Boolean(ct?.startsWith("audio/"))
107
+ }
108
+
109
+ function isVideo(ct?: string) {
110
+ return Boolean(ct?.startsWith("video/"))
111
+ }
112
+
113
+ function isTextOrJson(ct?: string) {
114
+ if (!ct) return false
115
+ return ct.startsWith("text/") || ct.includes("json") || ct.includes("javascript")
116
+ }
117
+
118
+ const counts = computed(() => {
119
+ let images = 0
120
+ let docs = 0
121
+ let other = 0
122
+ for (const f of blobFiles.value) {
123
+ if (isImage(f.contentType)) {
124
+ images++
125
+ } else if (
126
+ f.contentType?.includes("pdf") ||
127
+ f.contentType?.includes("text/") ||
128
+ f.contentType?.includes("json")
129
+ ) {
130
+ docs++
131
+ } else {
132
+ other++
133
+ }
134
+ }
135
+ return { all: blobFiles.value.length, images, docs, other }
136
+ })
137
+
138
+ const filteredFiles = computed(() => {
139
+ let list = blobFiles.value
140
+
141
+ if (filterType.value === "images") {
142
+ list = list.filter((f) => isImage(f.contentType))
143
+ } else if (filterType.value === "documents") {
144
+ list = list.filter(
145
+ (f) =>
146
+ !isImage(f.contentType) &&
147
+ (f.contentType?.includes("pdf") ||
148
+ f.contentType?.includes("text/") ||
149
+ f.contentType?.includes("json")),
150
+ )
151
+ } else if (filterType.value === "other") {
152
+ list = list.filter(
153
+ (f) =>
154
+ !isImage(f.contentType) &&
155
+ !f.contentType?.includes("pdf") &&
156
+ !f.contentType?.includes("text/") &&
157
+ !f.contentType?.includes("json"),
158
+ )
159
+ }
160
+
161
+ if (blobSearch.value.trim()) {
162
+ const q = blobSearch.value.toLowerCase()
163
+ list = list.filter((f) => f.key.toLowerCase().includes(q))
164
+ }
165
+
166
+ return list
167
+ })
168
+
169
+ async function loadBlob() {
170
+ await executeLoadBlob()
171
+ }
172
+
173
+ // Fetch text preview whenever a text/json file is selected in slideover
174
+ watch(
175
+ selectedKey,
176
+ async (key) => {
177
+ textContent.value = null
178
+ if (!key) return
179
+ const file = blobFiles.value.find((f) => f.key === key)
180
+ if (file && isTextOrJson(file.contentType)) {
181
+ textLoading.value = true
182
+ try {
183
+ textContent.value = await $fetch<string>(`/api/storage/file/${key}`, {
184
+ responseType: "text",
185
+ })
186
+ } catch {
187
+ textContent.value = "(Unable to load preview)"
188
+ } finally {
189
+ textLoading.value = false
190
+ }
191
+ }
192
+ },
193
+ { immediate: true },
194
+ )
195
+
196
+ function selectFile(file: any) {
197
+ selectedKey.value = file.key
198
+ }
199
+
200
+ async function uploadFileObject(file: File) {
201
+ uploadingBlob.value = true
202
+ try {
203
+ const formData = new FormData()
204
+ formData.append("file", file)
205
+ const uploaded = await $fetch<any>("/api/storage/upload", {
206
+ method: "POST",
207
+ body: formData,
208
+ })
209
+ await loadBlob()
210
+ const newKey = uploaded?.key || uploaded?.files?.[0]?.key || file.name
211
+ selectedKey.value = newKey
212
+ } catch (err) {
213
+ console.error("Upload failed", err)
214
+ } finally {
215
+ uploadingBlob.value = false
216
+ }
217
+ }
218
+
219
+ async function handleBlobUpload(e: Event) {
220
+ const target = e.target as HTMLInputElement
221
+ const file = target?.files?.[0]
222
+ if (!file) return
223
+ await uploadFileObject(file)
224
+ if (target) target.value = ""
225
+ }
226
+
227
+ async function handleDrop(e: DragEvent) {
228
+ isDragging.value = false
229
+ const files = e.dataTransfer?.files
230
+ if (!files || files.length === 0) return
231
+ for (let i = 0; i < files.length; i++) {
232
+ const file = files[i]
233
+ if (file) {
234
+ await uploadFileObject(file)
235
+ }
236
+ }
237
+ }
238
+
239
+ async function deleteBlobFile(key?: string) {
240
+ if (!key) return
241
+ deletingBlob.value = true
242
+ try {
243
+ await $fetch(`/api/storage/file/${key}`, {
244
+ method: "DELETE",
245
+ }).catch(() => {})
246
+ showDeleteBlobModal.value = false
247
+ selectedKey.value = null
248
+ await loadBlob()
249
+ } finally {
250
+ deletingBlob.value = false
251
+ }
252
+ }
253
+
254
+ function copyBlobUrl(key?: string) {
255
+ if (!key) return
256
+ if (typeof window !== "undefined") {
257
+ const url = `${window.location.origin}/api/storage/file/${key}`
258
+ navigator.clipboard?.writeText(url)
259
+ copiedUrl.value = true
260
+ setTimeout(() => {
261
+ copiedUrl.value = false
262
+ }, 1500)
263
+ }
264
+ }
265
+
266
+ function copyBlobKey(key?: string) {
267
+ if (!key) return
268
+ if (typeof navigator !== "undefined") {
269
+ navigator.clipboard?.writeText(key)
270
+ copiedKey.value = true
271
+ setTimeout(() => {
272
+ copiedKey.value = false
273
+ }, 1500)
274
+ }
275
+ }
276
+
277
+ onMounted(() => {
278
+ loadBlob()
279
+ })
280
+ </script>
281
+
282
+ <template>
283
+ <UDashboardPanel id="devtools-blob">
284
+ <template #header>
285
+ <UDashboardNavbar>
286
+ <template #title>
287
+ <div class="flex items-center gap-2">
288
+ <UIcon name="i-lucide-box" class="w-4 h-4 text-primary" />
289
+ <span class="font-bold text-sm text-highlighted">Blob Storage</span>
290
+ <UBadge size="xs" color="neutral" variant="subtle">R2</UBadge>
291
+ <UBadge size="xs" color="neutral" variant="subtle">
292
+ {{ filteredFiles.length }}
293
+ </UBadge>
294
+ </div>
295
+ </template>
296
+
297
+ <template #right>
298
+ <div class="flex items-center gap-1.5">
299
+ <input ref="fileInputRef" type="file" class="hidden" @change="handleBlobUpload" />
300
+ <UButton
301
+ icon="i-lucide-upload"
302
+ label="Upload File"
303
+ size="xs"
304
+ color="primary"
305
+ :loading="uploadingBlob"
306
+ @click="fileInputRef?.click()"
307
+ />
308
+ <UButton
309
+ icon="i-lucide-refresh-cw"
310
+ size="xs"
311
+ color="neutral"
312
+ variant="ghost"
313
+ title="Refresh files"
314
+ :loading="blobLoading"
315
+ @click="loadBlob"
316
+ />
317
+ </div>
318
+ </template>
319
+ </UDashboardNavbar>
320
+
321
+ <!-- Media Filter Toolbar -->
322
+ <UDashboardToolbar>
323
+ <!-- Type Filter Segmented Buttons -->
324
+ <div class="flex items-center gap-1 bg-muted p-0.5 rounded border border-default">
325
+ <UButton
326
+ label="All"
327
+ size="xs"
328
+ :color="filterType === 'all' ? 'primary' : 'neutral'"
329
+ :variant="filterType === 'all' ? 'subtle' : 'ghost'"
330
+ @click="filterType = 'all'"
331
+ >
332
+ <template #trailing>
333
+ <UBadge
334
+ size="xs"
335
+ :color="filterType === 'all' ? 'primary' : 'neutral'"
336
+ variant="subtle"
337
+ >
338
+ {{ counts.all }}
339
+ </UBadge>
340
+ </template>
341
+ </UButton>
342
+
343
+ <UButton
344
+ label="Images"
345
+ icon="i-lucide-image"
346
+ size="xs"
347
+ :color="filterType === 'images' ? 'primary' : 'neutral'"
348
+ :variant="filterType === 'images' ? 'subtle' : 'ghost'"
349
+ @click="filterType = 'images'"
350
+ >
351
+ <template #trailing>
352
+ <UBadge
353
+ size="xs"
354
+ :color="filterType === 'images' ? 'primary' : 'neutral'"
355
+ variant="subtle"
356
+ >
357
+ {{ counts.images }}
358
+ </UBadge>
359
+ </template>
360
+ </UButton>
361
+
362
+ <UButton
363
+ label="Documents"
364
+ icon="i-lucide-file-text"
365
+ size="xs"
366
+ :color="filterType === 'documents' ? 'primary' : 'neutral'"
367
+ :variant="filterType === 'documents' ? 'subtle' : 'ghost'"
368
+ @click="filterType = 'documents'"
369
+ >
370
+ <template #trailing>
371
+ <UBadge
372
+ size="xs"
373
+ :color="filterType === 'documents' ? 'primary' : 'neutral'"
374
+ variant="subtle"
375
+ >
376
+ {{ counts.docs }}
377
+ </UBadge>
378
+ </template>
379
+ </UButton>
380
+
381
+ <UButton
382
+ label="Other"
383
+ size="xs"
384
+ :color="filterType === 'other' ? 'primary' : 'neutral'"
385
+ :variant="filterType === 'other' ? 'subtle' : 'ghost'"
386
+ @click="filterType = 'other'"
387
+ >
388
+ <template #trailing>
389
+ <UBadge
390
+ size="xs"
391
+ :color="filterType === 'other' ? 'primary' : 'neutral'"
392
+ variant="subtle"
393
+ >
394
+ {{ counts.other }}
395
+ </UBadge>
396
+ </template>
397
+ </UButton>
398
+ </div>
399
+
400
+ <!-- Search Input -->
401
+ <div class="flex items-center gap-2 max-w-xs flex-1">
402
+ <UInput
403
+ v-model="blobSearch"
404
+ icon="i-lucide-search"
405
+ placeholder="Search files by key…"
406
+ class="w-full"
407
+ />
408
+ </div>
409
+ </UDashboardToolbar>
410
+ </template>
411
+
412
+ <template #body>
413
+ <div
414
+ class="space-y-4 min-h-[400px]"
415
+ @dragover.prevent="isDragging = true"
416
+ @dragleave.prevent="isDragging = false"
417
+ @drop.prevent="handleDrop"
418
+ >
419
+ <!-- Drag & Drop Active Overlay -->
420
+ <div
421
+ v-if="isDragging"
422
+ class="border-2 border-dashed border-primary rounded-xl p-8 flex flex-col items-center justify-center text-primary bg-primary/10 animate-pulse text-center"
423
+ >
424
+ <UIcon name="i-lucide-upload-cloud" class="w-10 h-10 mb-2" />
425
+ <span class="text-sm font-bold">Drop files here to upload</span>
426
+ <span class="text-xs text-muted"
427
+ >Files will be uploaded directly to Cloudflare R2 storage</span
428
+ >
429
+ </div>
430
+ <!-- Loading Skeleton Grid -->
431
+ <div
432
+ v-if="blobLoading"
433
+ class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-4"
434
+ >
435
+ <div
436
+ v-for="i in 12"
437
+ :key="i"
438
+ class="bg-elevated/40 border border-default rounded-xl overflow-hidden flex flex-col animate-pulse"
439
+ >
440
+ <div class="aspect-square bg-muted/60"></div>
441
+ <div class="p-2.5 space-y-2">
442
+ <div class="h-3 w-3/4 rounded bg-muted"></div>
443
+ <div class="h-2 w-1/2 rounded bg-muted"></div>
444
+ </div>
445
+ </div>
446
+ </div>
447
+
448
+ <!-- Visual Media Grid -->
449
+ <div
450
+ v-else-if="filteredFiles.length"
451
+ class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-4"
452
+ >
453
+ <div
454
+ v-for="file in filteredFiles"
455
+ :key="file.key"
456
+ class="group relative bg-elevated/40 hover:bg-elevated border border-default hover:border-primary/50 rounded-xl cursor-pointer transition-all duration-200 flex flex-col shadow-xs"
457
+ @click="selectFile(file)"
458
+ >
459
+ <!-- Thumbnail preview area -->
460
+ <div
461
+ class="aspect-square bg-muted/20 flex items-center justify-center border-b border-default relative"
462
+ >
463
+ <img
464
+ v-if="isImage(file.contentType) && !failedImages[file.key]"
465
+ :src="'/api/storage/file/' + file.key"
466
+ :alt="file.key"
467
+ class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300"
468
+ loading="lazy"
469
+ @error="onImageError(file.key)"
470
+ />
471
+ <div v-else class="flex flex-col items-center justify-center p-4 text-center">
472
+ <UIcon
473
+ :name="getBlobIcon(file.contentType)"
474
+ class="w-10 h-10 text-primary/70 mb-2 group-hover:scale-110 transition-transform"
475
+ />
476
+ <span class="text-[10px] font-mono text-muted uppercase">
477
+ {{ file.contentType?.split("/")[1] || "file" }}
478
+ </span>
479
+ </div>
480
+
481
+ <!-- Hover overlay badge -->
482
+ <div
483
+ class="absolute inset-0 bg-black/30 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center"
484
+ >
485
+ <UBadge size="xs" color="primary" variant="solid">View Details</UBadge>
486
+ </div>
487
+ </div>
488
+
489
+ <!-- Metadata Caption -->
490
+ <div class="p-2.5 flex flex-col justify-between flex-1">
491
+ <div
492
+ class="font-mono text-xs font-semibold text-highlighted truncate"
493
+ :title="file.key"
494
+ >
495
+ {{ file.key }}
496
+ </div>
497
+ <div class="flex items-center justify-between text-[11px] text-muted mt-1 font-mono">
498
+ <span>{{ fmtBytes(file.size) }}</span>
499
+ <span>{{ fmtDate(file.uploaded) }}</span>
500
+ </div>
501
+ </div>
502
+ </div>
503
+ </div>
504
+
505
+ <!-- Empty State -->
506
+ <div v-else class="flex flex-col items-center justify-center py-20 text-center space-y-3">
507
+ <div
508
+ class="w-12 h-12 rounded-full bg-primary/10 border border-primary/20 flex items-center justify-center text-primary"
509
+ >
510
+ <UIcon name="i-lucide-box" class="w-6 h-6" />
511
+ </div>
512
+ <div class="font-bold text-sm text-highlighted">No files found</div>
513
+ <p class="text-xs text-muted max-w-sm">
514
+ Upload images, documents, or data files to store them directly in your Cloudflare R2
515
+ bucket.
516
+ </p>
517
+ <UButton
518
+ label="Upload First File"
519
+ icon="i-lucide-upload"
520
+ size="sm"
521
+ color="primary"
522
+ @click="fileInputRef?.click()"
523
+ />
524
+ </div>
525
+ </div>
526
+ </template>
527
+ </UDashboardPanel>
528
+ <!-- ── Right Side Slideover for File Details & Live Preview ─────────── -->
529
+ <USlideover v-model:open="isSlideoverOpen" side="right" :title="selectedBlob?.key">
530
+ <template #title>
531
+ <div class="flex items-center gap-2 min-w-0 pr-4">
532
+ <UIcon
533
+ :name="getBlobIcon(selectedBlob?.contentType)"
534
+ class="w-5 h-5 text-primary shrink-0"
535
+ />
536
+ <span
537
+ class="font-mono font-bold text-sm text-highlighted truncate"
538
+ :title="selectedBlob?.key"
539
+ >
540
+ {{ selectedBlob?.key }}
541
+ </span>
542
+ </div>
543
+ </template>
544
+
545
+ <template #body>
546
+ <div v-if="selectedBlob" class="space-y-6">
547
+ <!-- Live Media Preview Box -->
548
+ <div
549
+ class="bg-muted/30 border border-default rounded-xl flex items-center justify-center p-4 min-h-[220px]"
550
+ >
551
+ <!-- Image -->
552
+ <div
553
+ v-if="isImage(selectedBlob.contentType)"
554
+ class="w-full flex items-center justify-center"
555
+ >
556
+ <img
557
+ v-if="!failedImages[selectedBlob.key]"
558
+ :src="'/api/storage/file/' + selectedBlob.key"
559
+ :alt="selectedBlob.key"
560
+ class="max-h-[320px] max-w-full object-contain rounded-lg shadow-xs"
561
+ @error="onImageError(selectedBlob.key)"
562
+ />
563
+ <div v-else class="text-center py-8 text-muted">
564
+ <UIcon name="i-lucide-image" class="w-12 h-12 opacity-40 mx-auto mb-2 text-primary" />
565
+ <div class="text-xs">Preview placeholder</div>
566
+ </div>
567
+ </div>
568
+
569
+ <!-- Audio -->
570
+ <div v-else-if="isAudio(selectedBlob.contentType)" class="w-full p-2 text-center">
571
+ <audio controls :src="'/api/storage/file/' + selectedBlob.key" class="w-full" />
572
+ </div>
573
+
574
+ <!-- Video -->
575
+ <div v-else-if="isVideo(selectedBlob.contentType)" class="w-full text-center">
576
+ <video
577
+ controls
578
+ :src="'/api/storage/file/' + selectedBlob.key"
579
+ class="w-full rounded-lg max-h-[300px]"
580
+ />
581
+ </div>
582
+
583
+ <!-- Text / Code / JSON -->
584
+ <div v-else-if="isTextOrJson(selectedBlob.contentType)" class="w-full">
585
+ <div v-if="textLoading" class="text-xs text-muted text-center py-8">
586
+ Loading text preview…
587
+ </div>
588
+ <pre
589
+ v-else
590
+ class="font-mono text-xs text-default bg-muted/40 p-3 rounded-md border border-default overflow-auto max-h-[300px] whitespace-pre-wrap break-all"
591
+ >{{ textContent || "(empty file)" }}</pre>
592
+ </div>
593
+
594
+ <!-- Generic Document / File -->
595
+ <div v-else class="text-center py-8 space-y-2 text-muted">
596
+ <UIcon
597
+ :name="getBlobIcon(selectedBlob.contentType)"
598
+ class="w-16 h-16 opacity-40 mx-auto"
599
+ />
600
+ <div class="text-xs">Preview not supported for this file format</div>
601
+ </div>
602
+ </div>
603
+
604
+ <!-- File Metadata List -->
605
+ <div class="space-y-3">
606
+ <div class="text-xs font-semibold uppercase tracking-wider text-muted">File Metadata</div>
607
+
608
+ <div
609
+ class="divide-y divide-default rounded-lg border border-default bg-elevated/40 text-xs font-mono"
610
+ >
611
+ <div class="flex items-center justify-between p-3">
612
+ <span class="text-muted">Storage Key</span>
613
+ <div class="flex items-center gap-1.5 min-w-0 ml-2">
614
+ <span class="text-highlighted font-bold truncate">{{ selectedBlob.key }}</span>
615
+ <UButton
616
+ type="button"
617
+ :icon="copiedKey ? 'i-lucide-check' : 'i-lucide-copy'"
618
+ :color="copiedKey ? 'success' : 'neutral'"
619
+ variant="ghost"
620
+ size="xs"
621
+ :title="copiedKey ? 'Copied!' : 'Copy key'"
622
+ class="shrink-0"
623
+ @click="copyBlobKey(selectedBlob.key)"
624
+ />
625
+ </div>
626
+ </div>
627
+
628
+ <div class="flex items-center justify-between p-3">
629
+ <span class="text-muted">Content-Type</span>
630
+ <span class="text-default font-semibold">{{ selectedBlob.contentType }}</span>
631
+ </div>
632
+
633
+ <div class="flex items-center justify-between p-3">
634
+ <span class="text-muted">File Size</span>
635
+ <span class="text-default">{{ fmtBytes(selectedBlob.size) }}</span>
636
+ </div>
637
+
638
+ <div class="flex items-center justify-between p-3">
639
+ <span class="text-muted">Uploaded</span>
640
+ <span class="text-default">{{ fmtFullDate(selectedBlob.uploaded) }}</span>
641
+ </div>
642
+
643
+ <div class="flex items-start justify-between p-3 gap-2">
644
+ <span class="text-muted shrink-0">Public URL</span>
645
+ <div class="flex items-center gap-1.5 min-w-0">
646
+ <span class="text-primary truncate font-mono text-[11px]">
647
+ /api/storage/file/{{ selectedBlob.key }}
648
+ </span>
649
+ <UButton
650
+ type="button"
651
+ :icon="copiedUrl ? 'i-lucide-check' : 'i-lucide-copy'"
652
+ :color="copiedUrl ? 'success' : 'neutral'"
653
+ variant="ghost"
654
+ size="xs"
655
+ :title="copiedUrl ? 'Copied URL!' : 'Copy URL'"
656
+ class="shrink-0"
657
+ @click="copyBlobUrl(selectedBlob.key)"
658
+ />
659
+ </div>
660
+ </div>
661
+ </div>
662
+ </div>
663
+ </div>
664
+ </template>
665
+
666
+ <template #footer>
667
+ <div v-if="selectedBlob" class="flex items-center justify-between w-full gap-2">
668
+ <div class="flex items-center gap-1.5">
669
+ <UButton
670
+ :label="copiedUrl ? 'Copied!' : 'Copy URL'"
671
+ :icon="copiedUrl ? 'i-lucide-check' : 'i-lucide-link'"
672
+ size="xs"
673
+ :color="copiedUrl ? 'success' : 'neutral'"
674
+ variant="subtle"
675
+ @click="copyBlobUrl(selectedBlob.key)"
676
+ />
677
+ <UButton
678
+ label="Download"
679
+ icon="i-lucide-download"
680
+ size="xs"
681
+ color="neutral"
682
+ variant="subtle"
683
+ :to="'/api/storage/file/' + selectedBlob.key"
684
+ target="_blank"
685
+ download
686
+ />
687
+ </div>
688
+ <UButton
689
+ label="Delete"
690
+ icon="i-lucide-trash"
691
+ size="xs"
692
+ color="error"
693
+ variant="subtle"
694
+ @click="showDeleteBlobModal = true"
695
+ />
696
+ </div>
697
+ </template>
698
+ </USlideover>
699
+
700
+ <!-- Delete File Confirmation Modal -->
701
+ <UModal v-model:open="showDeleteBlobModal" title="Delete Storage File">
702
+ <template #body>
703
+ <div class="space-y-3">
704
+ <p class="text-xs text-default">
705
+ Are you sure you want to permanently delete
706
+ <span class="font-mono font-bold text-highlighted">{{ selectedBlob?.key }}</span
707
+ >?
708
+ </p>
709
+ <div class="bg-elevated/40 border border-default rounded-lg p-2.5 text-xs space-y-1">
710
+ <div class="flex justify-between text-muted">
711
+ <span>Size:</span>
712
+ <span class="text-default font-mono">{{ fmtBytes(selectedBlob?.size || 0) }}</span>
713
+ </div>
714
+ <div class="flex justify-between text-muted">
715
+ <span>Type:</span>
716
+ <span class="text-default font-mono">{{ selectedBlob?.contentType }}</span>
717
+ </div>
718
+ </div>
719
+ <p class="text-xs text-muted">
720
+ This object will be deleted from your Cloudflare R2 bucket. Public or signed links to this
721
+ file will immediately return 404 Not Found.
722
+ </p>
723
+ </div>
724
+ </template>
725
+ <template #footer>
726
+ <div class="flex justify-end gap-2">
727
+ <UButton
728
+ label="Cancel"
729
+ color="neutral"
730
+ variant="ghost"
731
+ size="xs"
732
+ @click="showDeleteBlobModal = false"
733
+ />
734
+ <UButton
735
+ label="Confirm Delete"
736
+ color="error"
737
+ size="xs"
738
+ icon="i-lucide-trash"
739
+ :loading="deletingBlob"
740
+ @click="deleteBlobFile(selectedBlob?.key)"
741
+ />
742
+ </div>
743
+ </template>
744
+ </UModal>
745
+ </template>