better-supabase 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1640) hide show
  1. package/README.md +67 -377
  2. package/dist/access-sql-B-MkVARa.js +207 -0
  3. package/dist/actor-go7p9-CJ.js +150 -0
  4. package/dist/adapter-B0b6MXYS.js +2299 -0
  5. package/dist/agents-5n8DWRfP.d.ts +117 -0
  6. package/dist/ai-cache-Cu8j6aQQ.js +87 -0
  7. package/dist/ai-cache-DyHohbFP.d.ts +82 -0
  8. package/dist/ai-chat-D1GuRnke.d.ts +619 -0
  9. package/dist/ai-files-CgFCRsnU.js +339 -0
  10. package/dist/ai-schedules-CAquecT_.d.ts +166 -0
  11. package/dist/ai-sdk/agents/index.d.ts +6 -6
  12. package/dist/ai-sdk/agents/index.js +2 -2
  13. package/dist/ai-sdk/batches/index.d.ts +5 -5
  14. package/dist/ai-sdk/batches/index.js +4 -4
  15. package/dist/ai-sdk/cache/index.d.ts +3 -3
  16. package/dist/ai-sdk/cache/index.js +2 -2
  17. package/dist/ai-sdk/chat/index.d.ts +1 -1
  18. package/dist/ai-sdk/chat/index.js +5 -5
  19. package/dist/ai-sdk/embeddings/index.d.ts +2 -2
  20. package/dist/ai-sdk/files/index.d.ts +2 -2
  21. package/dist/ai-sdk/files/index.js +5 -5
  22. package/dist/ai-sdk/index.d.ts +10 -10
  23. package/dist/ai-sdk/index.js +3 -3
  24. package/dist/ai-sdk/mcp/index.d.ts +4 -4
  25. package/dist/ai-sdk/mcp/index.js +6 -6
  26. package/dist/ai-sdk/memory/index.d.ts +3 -3
  27. package/dist/ai-sdk/memory/index.js +1 -1
  28. package/dist/ai-sdk/workflow/index.d.ts +4 -4
  29. package/dist/ai-sdk/workflow/index.js +7 -7
  30. package/dist/api-DxAPqMrE.d.ts +495 -0
  31. package/dist/api-keys-D5k63K6y.d.ts +213 -0
  32. package/dist/app-tables-CF2DD-Mu.d.ts +28 -0
  33. package/dist/app-tables-D29Rahtg.js +16350 -0
  34. package/dist/approvals-Crutd4-o.d.ts +129 -0
  35. package/dist/assistant-CD_h8Vxx.d.ts +157 -0
  36. package/dist/astro/index.d.ts +12 -12
  37. package/dist/astro/index.js +8 -8
  38. package/dist/attachments-aJYgdYtB.js +369 -0
  39. package/dist/attributes-Bzf51_nc.js +47 -0
  40. package/dist/auth-reply-tlXB2FQ9.js +31 -0
  41. package/dist/authorization-HZdJCaVm.d.ts +3595 -0
  42. package/dist/authorization-hooks-Cs1vP_ej.d.ts +217 -0
  43. package/dist/authorizer-B6X09otb.d.ts +118 -0
  44. package/dist/authorizer-BGhXaDmo.js +172 -0
  45. package/dist/automation-D41DXyvT.js +75 -0
  46. package/dist/automations-BYsz43AG.js +314 -0
  47. package/dist/automations-Bc2ue55V.js +26 -0
  48. package/dist/automations-CD1XlL2W.js +33 -0
  49. package/dist/automations-CIwRq7zm.js +30 -0
  50. package/dist/availability-vguUvEK2.d.ts +226 -0
  51. package/dist/better-result/index.d.ts +20 -30
  52. package/dist/better-result/index.js +2 -2
  53. package/dist/bind-CrMBwrPN.d.ts +104 -0
  54. package/dist/block-authors-BDV3y1SP.js +14 -0
  55. package/dist/block-env-B_uEM2xz.d.ts +32 -0
  56. package/dist/block-fields-BE7pInWZ.d.ts +58 -0
  57. package/dist/block-fields-DE_FgpOU.js +139 -0
  58. package/dist/block-helpers-CRpAHrp_.d.ts +62 -0
  59. package/dist/block-helpers-CtBdjgO4.js +353 -0
  60. package/dist/block-hooks-BfxX3682.js +130 -0
  61. package/dist/block-hooks-DZN2w69m.d.ts +117 -0
  62. package/dist/block-method-C9hWdHom.js +21 -0
  63. package/dist/block-method-CiVa2G-J.d.ts +14 -0
  64. package/dist/block-subjects-BhDKK_j7.js +55 -0
  65. package/dist/block-subjects-CphkQPxp.d.ts +6 -0
  66. package/dist/block-tenant-DHp7subc.js +14 -0
  67. package/dist/block-transport-DWZSJrwN.d.ts +69 -0
  68. package/dist/blocks/access-requests/index.d.ts +8 -8
  69. package/dist/blocks/access-requests/index.js +6 -6
  70. package/dist/blocks/activities/index.d.ts +215 -0
  71. package/dist/blocks/activities/index.js +414 -0
  72. package/dist/blocks/agents/index.d.ts +4 -4
  73. package/dist/blocks/agents/index.js +5 -5
  74. package/dist/blocks/ai-cache/index.d.ts +3 -3
  75. package/dist/blocks/ai-cache/index.js +3 -3
  76. package/dist/blocks/ai-chat/index.d.ts +119 -6
  77. package/dist/blocks/ai-chat/index.js +1067 -5
  78. package/dist/blocks/ai-files/index.d.ts +5 -5
  79. package/dist/blocks/ai-files/index.js +3 -3
  80. package/dist/blocks/ai-keys/index.d.ts +22 -0
  81. package/dist/blocks/ai-keys/index.js +236 -0
  82. package/dist/blocks/ai-schedules/index.d.ts +10 -0
  83. package/dist/blocks/ai-schedules/index.js +258 -0
  84. package/dist/blocks/announcements/index.d.ts +134 -5
  85. package/dist/blocks/announcements/index.js +179 -4
  86. package/dist/blocks/api-keys/index.d.ts +69 -8
  87. package/dist/blocks/api-keys/index.js +417 -7
  88. package/dist/blocks/approvals/index.d.ts +4 -4
  89. package/dist/blocks/approvals/index.js +10 -10
  90. package/dist/blocks/assets/index.d.ts +11 -13
  91. package/dist/blocks/assets/index.js +10 -10
  92. package/dist/blocks/assignment/index.d.ts +8 -8
  93. package/dist/blocks/assignment/index.js +5 -5
  94. package/dist/blocks/attachments/index.d.ts +97 -12
  95. package/dist/blocks/attachments/index.js +279 -47
  96. package/dist/blocks/audit/index.d.ts +476 -7
  97. package/dist/blocks/audit/index.js +863 -6
  98. package/dist/blocks/automations/index.d.ts +524 -0
  99. package/dist/blocks/automations/index.js +553 -0
  100. package/dist/blocks/billable-time/index.d.ts +22 -24
  101. package/dist/blocks/billable-time/index.js +13 -13
  102. package/dist/blocks/billing/index.d.ts +82 -11
  103. package/dist/blocks/billing/index.js +93 -9
  104. package/dist/blocks/bookings/index.d.ts +49 -7
  105. package/dist/blocks/bookings/index.js +419 -4
  106. package/dist/blocks/bulk/index.d.ts +6 -6
  107. package/dist/blocks/bulk/index.js +4 -4
  108. package/dist/blocks/calendar/index.d.ts +180 -7
  109. package/dist/blocks/calendar/index.js +1073 -5
  110. package/dist/blocks/catalog/index.d.ts +128 -13
  111. package/dist/blocks/catalog/index.js +149 -13
  112. package/dist/blocks/channels/index.d.ts +15 -13
  113. package/dist/blocks/channels/index.js +12 -13
  114. package/dist/blocks/collections/index.d.ts +16 -16
  115. package/dist/blocks/collections/index.js +8 -8
  116. package/dist/blocks/comments/index.d.ts +231 -14
  117. package/dist/blocks/comments/index.js +260 -13
  118. package/dist/blocks/compliance/index.d.ts +325 -0
  119. package/dist/blocks/compliance/index.js +410 -0
  120. package/dist/blocks/connectors/index.d.ts +4 -4
  121. package/dist/blocks/connectors/index.js +8 -8
  122. package/dist/blocks/contacts/index.d.ts +182 -0
  123. package/dist/blocks/contacts/index.js +358 -0
  124. package/dist/blocks/content/index.d.ts +188 -0
  125. package/dist/blocks/content/index.js +219 -0
  126. package/dist/blocks/contracts/index.d.ts +16 -18
  127. package/dist/blocks/contracts/index.js +24 -24
  128. package/dist/blocks/courses/index.d.ts +17 -17
  129. package/dist/blocks/courses/index.js +13 -13
  130. package/dist/blocks/created-by/index.d.ts +27 -0
  131. package/dist/blocks/created-by/index.js +14 -0
  132. package/dist/blocks/custom-fields/index.d.ts +11 -11
  133. package/dist/blocks/custom-fields/index.js +7 -7
  134. package/dist/blocks/data-lifecycle/index.d.ts +9 -9
  135. package/dist/blocks/data-lifecycle/index.js +7 -7
  136. package/dist/blocks/deals/index.d.ts +10 -10
  137. package/dist/blocks/deals/index.js +11 -11
  138. package/dist/blocks/dispatch/index.d.ts +20 -22
  139. package/dist/blocks/dispatch/index.js +17 -17
  140. package/dist/blocks/documents/index.d.ts +4 -4
  141. package/dist/blocks/documents/index.js +4 -4
  142. package/dist/blocks/domains/index.d.ts +7 -7
  143. package/dist/blocks/domains/index.js +6 -6
  144. package/dist/blocks/donations/index.d.ts +27 -29
  145. package/dist/blocks/donations/index.js +36 -28
  146. package/dist/blocks/drive/index.d.ts +10 -10
  147. package/dist/blocks/drive/index.js +8 -8
  148. package/dist/blocks/employees/index.d.ts +204 -7
  149. package/dist/blocks/employees/index.js +36 -10
  150. package/dist/blocks/enrichment/index.d.ts +7 -7
  151. package/dist/blocks/enrichment/index.js +14 -6
  152. package/dist/blocks/enrollments/index.d.ts +14 -16
  153. package/dist/blocks/enrollments/index.js +10 -10
  154. package/dist/blocks/entitlements/index.d.ts +48 -8
  155. package/dist/blocks/entitlements/index.js +62 -4
  156. package/dist/blocks/expenses/index.d.ts +8 -8
  157. package/dist/blocks/expenses/index.js +11 -11
  158. package/dist/blocks/field-history/index.d.ts +5 -5
  159. package/dist/blocks/field-history/index.js +3 -5
  160. package/dist/blocks/flags/index.d.ts +17 -13
  161. package/dist/blocks/flags/index.js +7 -7
  162. package/dist/blocks/forecasts/index.d.ts +7 -7
  163. package/dist/blocks/forecasts/index.js +7 -7
  164. package/dist/blocks/forms/index.d.ts +144 -12
  165. package/dist/blocks/forms/index.js +385 -7
  166. package/dist/blocks/goals/index.d.ts +82 -0
  167. package/dist/blocks/goals/index.js +72 -0
  168. package/dist/blocks/guests/index.d.ts +19 -21
  169. package/dist/blocks/guests/index.js +12 -12
  170. package/dist/blocks/hiring/index.d.ts +20 -10
  171. package/dist/blocks/hiring/index.js +10 -9
  172. package/dist/blocks/identities/index.d.ts +7 -7
  173. package/dist/blocks/identities/index.js +4 -4
  174. package/dist/blocks/imports/index.d.ts +8 -8
  175. package/dist/blocks/imports/index.js +6 -6
  176. package/dist/blocks/inbox/index.d.ts +137 -8
  177. package/dist/blocks/inbox/index.js +290 -56
  178. package/dist/blocks/incidents/index.d.ts +8 -8
  179. package/dist/blocks/incidents/index.js +7 -7
  180. package/dist/blocks/index.d.ts +37 -18
  181. package/dist/blocks/index.js +40 -19
  182. package/dist/blocks/inventory/index.d.ts +10 -10
  183. package/dist/blocks/inventory/index.js +6 -6
  184. package/dist/blocks/invoices/index.d.ts +11 -11
  185. package/dist/blocks/invoices/index.js +8 -8
  186. package/dist/blocks/knowledge/index.d.ts +3 -3
  187. package/dist/blocks/knowledge/index.js +4 -4
  188. package/dist/blocks/lead-scoring/index.d.ts +11 -11
  189. package/dist/blocks/lead-scoring/index.js +7 -7
  190. package/dist/blocks/leases/index.d.ts +16 -73
  191. package/dist/blocks/leases/index.js +29 -104
  192. package/dist/blocks/leave/index.d.ts +8 -8
  193. package/dist/blocks/leave/index.js +5 -5
  194. package/dist/blocks/ledger/index.d.ts +11 -13
  195. package/dist/blocks/ledger/index.js +10 -10
  196. package/dist/blocks/mail-sync/index.d.ts +6 -6
  197. package/dist/blocks/mail-sync/index.js +18 -10
  198. package/dist/blocks/memberships/index.d.ts +67 -0
  199. package/dist/blocks/memberships/index.js +14 -0
  200. package/dist/blocks/memory/index.d.ts +4 -4
  201. package/dist/blocks/memory/index.js +8 -8
  202. package/dist/blocks/messaging/index.d.ts +113 -13
  203. package/dist/blocks/messaging/index.js +579 -8
  204. package/dist/blocks/metrics/index.d.ts +7 -7
  205. package/dist/blocks/metrics/index.js +6 -6
  206. package/dist/blocks/mfa/index.d.ts +145 -3
  207. package/dist/blocks/mfa/index.js +211 -2
  208. package/dist/blocks/moderation/index.d.ts +13 -15
  209. package/dist/blocks/moderation/index.js +10 -10
  210. package/dist/blocks/notifications/index.d.ts +67 -15
  211. package/dist/blocks/notifications/index.js +62 -13
  212. package/dist/blocks/numbering/index.d.ts +45 -0
  213. package/dist/blocks/numbering/index.js +49 -0
  214. package/dist/blocks/oauth-server/index.d.ts +6 -6
  215. package/dist/blocks/oauth-server/index.js +6 -6
  216. package/dist/blocks/onboarding/index.d.ts +112 -4
  217. package/dist/blocks/onboarding/index.js +107 -4
  218. package/dist/blocks/orders/index.d.ts +35 -14
  219. package/dist/blocks/orders/index.js +49 -12
  220. package/dist/blocks/organizations/index.d.ts +452 -6
  221. package/dist/blocks/organizations/index.js +689 -5
  222. package/dist/blocks/outbox/index.d.ts +4 -4
  223. package/dist/blocks/outbox/index.js +19 -6
  224. package/dist/blocks/passes/index.d.ts +19 -21
  225. package/dist/blocks/passes/index.js +17 -17
  226. package/dist/blocks/permissions/index.d.ts +92 -0
  227. package/dist/blocks/permissions/index.js +127 -0
  228. package/dist/blocks/pipelines/index.d.ts +15 -15
  229. package/dist/blocks/pipelines/index.js +12 -12
  230. package/dist/blocks/posts/index.d.ts +9 -9
  231. package/dist/blocks/posts/index.js +8 -8
  232. package/dist/blocks/profiles/index.d.ts +7 -7
  233. package/dist/blocks/profiles/index.js +5 -5
  234. package/dist/blocks/promotions/index.d.ts +9 -9
  235. package/dist/blocks/promotions/index.js +7 -7
  236. package/dist/blocks/push/index.d.ts +9 -9
  237. package/dist/blocks/push/index.js +4 -4
  238. package/dist/blocks/queue/index.d.ts +562 -0
  239. package/dist/blocks/queue/index.js +1407 -0
  240. package/dist/blocks/quotes/index.d.ts +29 -14
  241. package/dist/blocks/quotes/index.js +14 -13
  242. package/dist/blocks/rank/index.d.ts +7 -7
  243. package/dist/blocks/rank/index.js +4 -4
  244. package/dist/blocks/reactions/index.d.ts +154 -5
  245. package/dist/blocks/reactions/index.js +168 -4
  246. package/dist/blocks/relations/index.d.ts +36 -38
  247. package/dist/blocks/relations/index.js +18 -18
  248. package/dist/blocks/reminders/index.d.ts +16 -16
  249. package/dist/blocks/reminders/index.js +14 -14
  250. package/dist/blocks/reviews/index.d.ts +8 -8
  251. package/dist/blocks/reviews/index.js +6 -6
  252. package/dist/blocks/saved-views/index.d.ts +311 -4
  253. package/dist/blocks/saved-views/index.js +437 -2
  254. package/dist/blocks/scores/index.d.ts +8 -10
  255. package/dist/blocks/scores/index.js +10 -10
  256. package/dist/blocks/search/index.d.ts +168 -5
  257. package/dist/blocks/search/index.js +277 -5
  258. package/dist/blocks/security-events/index.d.ts +440 -0
  259. package/dist/blocks/security-events/index.js +885 -0
  260. package/dist/blocks/segments/index.d.ts +13 -13
  261. package/dist/blocks/segments/index.js +7 -7
  262. package/dist/blocks/sequences/index.d.ts +13 -13
  263. package/dist/blocks/sequences/index.js +16 -10
  264. package/dist/blocks/service-accounts/index.d.ts +132 -0
  265. package/dist/blocks/service-accounts/index.js +109 -0
  266. package/dist/blocks/sessions/index.d.ts +138 -3
  267. package/dist/blocks/sessions/index.js +173 -2
  268. package/dist/blocks/settings/index.d.ts +181 -5
  269. package/dist/blocks/settings/index.js +226 -4
  270. package/dist/blocks/share-links/index.d.ts +20 -22
  271. package/dist/blocks/share-links/index.js +16 -16
  272. package/dist/blocks/shipments/index.d.ts +23 -25
  273. package/dist/blocks/shipments/index.js +30 -22
  274. package/dist/blocks/signatures/index.d.ts +9 -9
  275. package/dist/blocks/signatures/index.js +5 -5
  276. package/dist/blocks/signing-keys/index.d.ts +4 -4
  277. package/dist/blocks/signing-keys/index.js +3 -3
  278. package/dist/blocks/sla/index.d.ts +20 -22
  279. package/dist/blocks/sla/index.js +22 -16
  280. package/dist/blocks/sso/index.d.ts +7 -7
  281. package/dist/blocks/sso/index.js +4 -4
  282. package/dist/blocks/state-machine/index.d.ts +14 -14
  283. package/dist/blocks/state-machine/index.js +4 -4
  284. package/dist/blocks/subjects/index.d.ts +41 -7
  285. package/dist/blocks/subjects/index.js +187 -5
  286. package/dist/blocks/tags/index.d.ts +146 -13
  287. package/dist/blocks/tags/index.js +229 -14
  288. package/dist/blocks/tasks/index.d.ts +346 -0
  289. package/dist/blocks/tasks/index.js +626 -0
  290. package/dist/blocks/teams/index.d.ts +7 -7
  291. package/dist/blocks/teams/index.js +4 -4
  292. package/dist/blocks/templates/index.d.ts +18 -18
  293. package/dist/blocks/templates/index.js +10 -10
  294. package/dist/blocks/time-tracking/index.d.ts +16 -16
  295. package/dist/blocks/time-tracking/index.js +13 -13
  296. package/dist/blocks/timeline/index.d.ts +116 -0
  297. package/dist/blocks/timeline/index.js +164 -0
  298. package/dist/blocks/trash/index.d.ts +47 -9
  299. package/dist/blocks/trash/index.js +9 -7
  300. package/dist/blocks/undo/index.d.ts +48 -5
  301. package/dist/blocks/undo/index.js +60 -4
  302. package/dist/blocks/updated-at/index.d.ts +20 -0
  303. package/dist/blocks/updated-at/index.js +14 -0
  304. package/dist/blocks/usage/index.d.ts +39 -5
  305. package/dist/blocks/usage/index.js +301 -4
  306. package/dist/blocks/vercel-marketplace/index.d.ts +7 -7
  307. package/dist/blocks/vercel-marketplace/index.js +8 -8
  308. package/dist/blocks/versions/index.d.ts +20 -22
  309. package/dist/blocks/versions/index.js +16 -16
  310. package/dist/blocks/waitlist/index.d.ts +9 -9
  311. package/dist/blocks/waitlist/index.js +5 -5
  312. package/dist/blocks/webhooks/index.d.ts +21 -21
  313. package/dist/blocks/webhooks/index.js +16 -16
  314. package/dist/blocks/workflow-editor/index.d.ts +99 -0
  315. package/dist/blocks/workflow-editor/index.js +733 -0
  316. package/dist/blocks/workflows/index.d.ts +72 -6
  317. package/dist/blocks/workflows/index.js +379 -4
  318. package/dist/bookings-D4dvGXiR.d.ts +290 -0
  319. package/dist/bucket-CiNi8sIw.d.ts +666 -0
  320. package/dist/build-BFC8nFiL.js +797 -0
  321. package/dist/build-QitPVzzO.js +2073 -0
  322. package/dist/carrier-KzeYXVrW.d.ts +169 -0
  323. package/dist/chat-sdk/index.d.ts +8 -8
  324. package/dist/chat-sdk/index.js +3 -3
  325. package/dist/claims-DTy6R6my.js +63 -0
  326. package/dist/cli/add-BgsUjCan.js +1252 -0
  327. package/dist/cli/add-DCI5JKjA.js +99 -0
  328. package/dist/cli/add-DWjlVwvP.js +1 -0
  329. package/dist/cli/args-UEwg0l-N.js +27 -0
  330. package/dist/cli/backfill-nxPbcsns.js +293 -0
  331. package/dist/cli/bin.js +1 -1
  332. package/dist/cli/blocks-BZHI8mRC.js +156 -0
  333. package/dist/cli/blocks-Cr4HGePW.js +1 -0
  334. package/dist/cli/cache-CXgR_Ahi.js +607 -0
  335. package/dist/cli/codemod-DSN7iAdg.js +2343 -0
  336. package/dist/cli/codemod-block-renames-BuSaTE_G.js +239 -0
  337. package/dist/cli/command-CQ61x6gN.js +941 -0
  338. package/dist/cli/completion-2Y3D_eNu.js +211 -0
  339. package/dist/cli/completion-BwI0_Ap5.js +30 -0
  340. package/dist/cli/completion-Dlu5AdUW.js +1 -0
  341. package/dist/cli/config-9t5ec_N7.js +1642 -0
  342. package/dist/cli/config-CBqkQjjN.js +1 -0
  343. package/dist/cli/config-CPux9Wa7.js +47 -0
  344. package/dist/cli/config-edit-CrWfk8s3.js +621 -0
  345. package/dist/cli/config-group-C8tjut39.js +391 -0
  346. package/dist/cli/content-mapper-DNs7lTu7.js +182 -0
  347. package/dist/cli/db-DrBI_HNv.js +223 -0
  348. package/dist/cli/detect-D9JaAX20.js +84 -0
  349. package/dist/cli/dist-D_VbPAMR.js +129 -0
  350. package/dist/cli/doctor-DDrEM6S1.js +4561 -0
  351. package/dist/cli/env-BBl5L8Bf.js +143 -0
  352. package/dist/cli/env-CAU1nknN.js +1 -0
  353. package/dist/cli/files-CX71yBm8.js +1010 -0
  354. package/dist/cli/gen-MtijJQ9r.js +387 -0
  355. package/dist/cli/in-stack-diff-DQTW53Vf.js +257 -0
  356. package/dist/cli/index.d.ts +43 -8
  357. package/dist/cli/index.js +8 -8
  358. package/dist/cli/init-D-aDv9r5.js +440 -0
  359. package/dist/cli/keys-DGEpMbeB.js +106 -0
  360. package/dist/cli/live-iEeH15ck.js +341 -0
  361. package/dist/cli/mcp-BAPyaQ62.js +249 -0
  362. package/dist/cli/metadata-DVx9Zgbj.js +150 -0
  363. package/dist/cli/migration-safety-D7PhzFxm.js +928 -0
  364. package/dist/cli/module-migration-aPCckev6.js +734 -0
  365. package/dist/cli/moved-CsfDQcyk.js +254 -0
  366. package/dist/cli/orphans-BAboqyVM.js +28 -0
  367. package/dist/cli/parse-B9Iv_-Pf.js +182 -0
  368. package/dist/cli/preset-BwmIfFnh.js +101 -0
  369. package/dist/cli/print-BeWO7OJY.js +67 -0
  370. package/dist/cli/remove-B46Dmd2M.js +238 -0
  371. package/dist/cli/render-ucJmUyuM.js +2170 -0
  372. package/dist/cli/run-BXx6D1aR.js +63 -0
  373. package/dist/cli/run-CvYVAztY.js +1427 -0
  374. package/dist/cli/run-DYhLBcFW.js +702 -0
  375. package/dist/cli/seed-Cz8PcXeT.js +188 -0
  376. package/dist/cli/seed-D6XijwbR.js +1 -0
  377. package/dist/cli/shared-LZroULBe.js +151 -0
  378. package/dist/cli/skills-toUan_OV.js +121 -0
  379. package/dist/cli/snapshot-C8MVPyO8.js +729 -0
  380. package/dist/cli/source-DANaJJVc.js +320 -0
  381. package/dist/cli/source-args-IpJRJO5t.js +59 -0
  382. package/dist/cli/spec-DGVNMSSB.js +7530 -0
  383. package/dist/cli/spec-g8_G5K7o.js +1 -0
  384. package/dist/cli/stack-CWEHdO0b.js +135 -0
  385. package/dist/cli/sync-btj01bcM.js +319 -0
  386. package/dist/cli/upgrade-B596d4t8.js +403 -0
  387. package/dist/cli/upgrade-Dw3TMQzn.js +41 -0
  388. package/dist/cli/version-Du4CgONY.js +4 -0
  389. package/dist/client/index.d.ts +8 -7
  390. package/dist/client/index.js +9 -7
  391. package/dist/client/native/index.d.ts +6 -6
  392. package/dist/client/native/index.js +3 -3
  393. package/dist/client-BAEbEA7t.js +287 -0
  394. package/dist/cloud-event-CzZTJkXv.d.ts +64 -0
  395. package/dist/codecs-CMWlhHZ0.d.ts +222 -0
  396. package/dist/codecs-TylXqU_I.js +358 -0
  397. package/dist/commerce/index.d.ts +3 -3
  398. package/dist/commerce/index.js +6 -6
  399. package/dist/compiler-D3UmE7ao.d.ts +14 -0
  400. package/dist/compose-DKW0Tr3e.js +53 -0
  401. package/dist/composite-BARuBEDE.js +130 -0
  402. package/dist/composite-Dsxj7T5K.d.ts +82 -0
  403. package/dist/config/index.d.ts +6 -7
  404. package/dist/config/index.js +6 -6
  405. package/dist/config-CcehOvbz.js +1698 -0
  406. package/dist/config-DWGgUQCh.js +1108 -0
  407. package/dist/connectors-Fud4amxp.d.ts +147 -0
  408. package/dist/context-CEuTKrkz.d.ts +4129 -0
  409. package/dist/context-DBicfUNz.js +41 -0
  410. package/dist/controller-BNZKd6bJ.js +73 -0
  411. package/dist/controller-BrP0gn47.d.ts +52 -0
  412. package/dist/conversion-BAbucuXq.d.ts +86 -0
  413. package/dist/conversion-Dq1S7xzE.js +77 -0
  414. package/dist/create/index.d.ts +19 -21
  415. package/dist/create/index.js +21 -22
  416. package/dist/create/lite/index.d.ts +2 -2
  417. package/dist/create/supabase/index.d.ts +2 -2
  418. package/dist/create/supabase/index.js +2 -2
  419. package/dist/create-blocks-Bu4H5TXw.js +352 -0
  420. package/dist/credentials/index.d.ts +5 -5
  421. package/dist/credentials/index.js +6 -6
  422. package/dist/cron-CgHTKwYG.js +148 -0
  423. package/dist/cron-route-UU9i5i9J.js +24 -0
  424. package/dist/data-engine-BWoz9lED.d.ts +273 -0
  425. package/dist/data-engine-D1BkmBoR.js +173 -0
  426. package/dist/data-hooks-tgF1Ct0F.js +280 -0
  427. package/dist/db-blocks-DJGbjIPz.js +62 -0
  428. package/dist/deal-forecast-Bv52QMyX.js +39 -0
  429. package/dist/define-DFBnQyYg.d.ts +1255 -0
  430. package/dist/define-DlUeKHce.js +2011 -0
  431. package/dist/define-block-BGqOO8B3.js +64 -0
  432. package/dist/define-block-BVcLQ3DF.d.ts +1657 -0
  433. package/dist/delegation--93jRsVO.js +146 -0
  434. package/dist/documents-Cup1rpjF.d.ts +152 -0
  435. package/dist/edge/index.d.ts +20 -20
  436. package/dist/edge/index.js +14 -14
  437. package/dist/elysia/index.d.ts +1 -1
  438. package/dist/elysia/index.js +1 -1
  439. package/dist/embeddings-kFbRvuic.d.ts +78 -0
  440. package/dist/ended-gUsMZVNg.d.ts +26 -0
  441. package/dist/entitlements-CJpYQXeE.d.ts +54 -0
  442. package/dist/entitlements-NZAE_vLj.js +45 -0
  443. package/dist/entity-naming-Dtyq5sKE.js +131 -0
  444. package/dist/entity-schema-BDv6w-OQ.js +39 -0
  445. package/dist/envelope-Bzu0JnY2.js +90 -0
  446. package/dist/errors-BVFgt8BZ.js +328 -0
  447. package/dist/errors-CyxMxzlu.js +44 -0
  448. package/dist/escape-like-PReMbEEU.d.ts +30 -0
  449. package/dist/eve/index.d.ts +5 -5
  450. package/dist/eve/index.js +3 -3
  451. package/dist/eve-BFSwTu1z.d.ts +157 -0
  452. package/dist/event-calendar-DCufbihU.d.ts +65 -0
  453. package/dist/events/index.d.ts +3 -4
  454. package/dist/events-vcqenSYU.d.ts +852 -0
  455. package/dist/executor-3qcMhg6R.js +207 -0
  456. package/dist/executor-BQ7dYw4E.js +843 -0
  457. package/dist/executor-CVIn6JHa.d.ts +174 -0
  458. package/dist/executor-D3gB-9si.js +486 -0
  459. package/dist/executor-_2ekNofh.d.ts +104 -0
  460. package/dist/executor-hGjrop3A.d.ts +37 -0
  461. package/dist/expo/index.d.ts +12 -11
  462. package/dist/expo/index.js +11 -10
  463. package/dist/extension-B-lajjex.js +58 -0
  464. package/dist/extension-B0EjCYhO.js +61 -0
  465. package/dist/extension-DeAd_MqI.js +121 -0
  466. package/dist/extension-DzCc0IOd.js +103 -0
  467. package/dist/extension-shared-Djm8mGHD.js +60 -0
  468. package/dist/field-errors-fsbFktYF.d.ts +216 -0
  469. package/dist/field-formats-CAFNkKSN.d.ts +38 -0
  470. package/dist/fields-B0zaJAO3.js +107 -0
  471. package/dist/fields-C3q2ypnO.d.ts +78 -0
  472. package/dist/filter-evaluate-CPxeae5X.d.ts +37 -0
  473. package/dist/filter-evaluate-w1XOIUOL.js +217 -0
  474. package/dist/filter-query-BXLs72G9.d.ts +133 -0
  475. package/dist/filter-query-DMoKo82_.js +566 -0
  476. package/dist/flags-BOdA_ETQ.js +279 -0
  477. package/dist/flags-C01PLMJ-.d.ts +246 -0
  478. package/dist/flags-sdk/index.d.ts +1 -1
  479. package/dist/flags-sdk/index.js +2 -2
  480. package/dist/format-u-65igKI.d.ts +79 -0
  481. package/dist/framework-BKyTeS-j.d.ts +47 -0
  482. package/dist/framework-DDdkR7FX.js +58 -0
  483. package/dist/function-contract-DxFNOmsm.d.ts +27 -0
  484. package/dist/gateway-TD1pRfTP.d.ts +115 -0
  485. package/dist/h3/index.d.ts +2 -4
  486. package/dist/h3/index.js +2 -4
  487. package/dist/h3/v1/index.d.ts +2 -3
  488. package/dist/h3/v1/index.js +2 -3
  489. package/dist/hono/index.d.ts +27 -21
  490. package/dist/hono/index.js +22 -20
  491. package/dist/http-7-UvHjQe.js +28 -0
  492. package/dist/impersonation-DM3oWNoD.js +62 -0
  493. package/dist/inbox-NDKwSk_H.d.ts +321 -0
  494. package/dist/index-B938YqY-.d.ts +188 -0
  495. package/dist/index-BUuVq1co.d.ts +158 -0
  496. package/dist/index-BnH4Gomw.d.ts +633 -0
  497. package/dist/index-BxYOB1Oc.d.ts +149 -0
  498. package/dist/index-C-qpk8EQ.d.ts +262 -0
  499. package/dist/index-CG9rA8H8.d.ts +407 -0
  500. package/dist/index-CguFm716.d.ts +518 -0
  501. package/dist/index-DLq69k3F.d.ts +588 -0
  502. package/dist/index-Do2ChN_y.d.ts +287 -0
  503. package/dist/index.d.ts +39 -17
  504. package/dist/index.js +94 -16
  505. package/dist/instances-BHjCZoF8.js +277 -0
  506. package/dist/invalidate-DMp4eqfF.d.ts +21 -0
  507. package/dist/json-schema-Ca6gYbEP.js +888 -0
  508. package/dist/jwks-cache-DEsKI0hJ.js +49 -0
  509. package/dist/kit-5l-o8RxL.js +133 -0
  510. package/dist/kit-DOwKpSkA.d.ts +94 -0
  511. package/dist/knowledge-BGbtxMP9.js +300 -0
  512. package/dist/knowledge-CtL-Vfgy.d.ts +217 -0
  513. package/dist/lint/index.d.ts +94 -11
  514. package/dist/lint/index.js +268 -26
  515. package/dist/list/index.d.ts +4 -4
  516. package/dist/list/index.js +3 -3
  517. package/dist/list-query-BDVutLFr.d.ts +222 -0
  518. package/dist/list-query-BKy2zBaT.js +559 -0
  519. package/dist/live-C21DgbsD.js +275 -0
  520. package/dist/mapper/bin.js +380 -0
  521. package/dist/mcp/index.d.ts +8 -8
  522. package/dist/mcp/index.js +11 -11
  523. package/dist/mcp/sdk/index.d.ts +10 -10
  524. package/dist/mcp/sdk/index.js +11 -11
  525. package/dist/messages-D4XWuRTj.js +492 -0
  526. package/dist/messaging-C_Pr9tGx.d.ts +297 -0
  527. package/dist/methods-B3o7BFOW.js +11 -0
  528. package/dist/mfa-oIOYTpvc.d.ts +36 -0
  529. package/dist/model-hwpvole9.d.ts +340 -0
  530. package/dist/model-messages-CKG0zwdF.js +206 -0
  531. package/dist/money-codec-BzddguAQ.js +41 -0
  532. package/dist/nestjs/index.d.ts +3 -3
  533. package/dist/nestjs/index.js +2 -2
  534. package/dist/next/index.d.ts +244 -205
  535. package/dist/next/index.js +288 -197
  536. package/dist/node/index.d.ts +2 -2
  537. package/dist/node/index.js +6 -8
  538. package/dist/operations-CSc_IsHO.d.ts +6 -0
  539. package/dist/options-0qvUckqt.js +9 -0
  540. package/dist/options-1GgseJq5.js +10 -0
  541. package/dist/options-21s0dpnX.js +9 -0
  542. package/dist/options-B-cxGmRA.js +5 -0
  543. package/dist/options-B0EJULm5.js +5 -0
  544. package/dist/options-B2swWnJW.js +9 -0
  545. package/dist/options-BMGClqoa.js +11 -0
  546. package/dist/options-BQIYfx9F.js +9 -0
  547. package/dist/options-BVg58avP.js +5 -0
  548. package/dist/options-BbnPv6p7.js +12 -0
  549. package/dist/options-BfLmA375.js +5 -0
  550. package/dist/options-BlncUmIc.js +9 -0
  551. package/dist/options-BlzSfWxC.d.ts +10 -0
  552. package/dist/options-BnZS7IK-.js +9 -0
  553. package/dist/options-Bt0bYMLl.js +24 -0
  554. package/dist/options-BvtnxHfK.js +24 -0
  555. package/dist/options-C-dQHH5-.js +8 -0
  556. package/dist/options-C3RgtOLo.js +5 -0
  557. package/dist/options-CE93HOYi.d.ts +7 -0
  558. package/dist/options-CM6-18FQ.d.ts +13 -0
  559. package/dist/options-CPK2nQER.js +5 -0
  560. package/dist/options-CRz8Ht_4.js +9 -0
  561. package/dist/options-CW9wTqOk.js +11 -0
  562. package/dist/options-Cl9Ag2Pt.js +8 -0
  563. package/dist/options-Cp0HyUEk.js +9 -0
  564. package/dist/options-Cqq2jUww.js +10 -0
  565. package/dist/options-CsGl5BLH.d.ts +52 -0
  566. package/dist/options-CtUUU71w.js +20 -0
  567. package/dist/options-CvD9vNvx.js +9 -0
  568. package/dist/options-CyAhRKKm.d.ts +14 -0
  569. package/dist/options-D0G06Zm9.js +8 -0
  570. package/dist/options-D6as77gU.d.ts +16 -0
  571. package/dist/options-DChZoVfs.d.ts +11 -0
  572. package/dist/options-DINdgVih.d.ts +9 -0
  573. package/dist/options-DPgdAXO5.js +11 -0
  574. package/dist/options-DWVYM8P0.d.ts +17 -0
  575. package/dist/options-DWbA9buW.js +9 -0
  576. package/dist/options-DXnBN2E7.js +8 -0
  577. package/dist/options-D_bBVCXg.js +5 -0
  578. package/dist/options-DcOx8_3X.d.ts +19 -0
  579. package/dist/options-DeNejBtq.js +8 -0
  580. package/dist/options-DgQo80Xh.js +5 -0
  581. package/dist/options-DplE18Ko.d.ts +12 -0
  582. package/dist/options-HLwOuF2H.js +10 -0
  583. package/dist/options-KV84gAxl.js +10 -0
  584. package/dist/options-Li1Dyu88.d.ts +10 -0
  585. package/dist/options-Q1Bzgqpr.js +5 -0
  586. package/dist/options-_F-enoBs.d.ts +26 -0
  587. package/dist/options-c5WCsky5.js +21 -0
  588. package/dist/options-nFzfgtA6.js +5 -0
  589. package/dist/options-pOVWwbAK.d.ts +10 -0
  590. package/dist/options-y_-AkVCs.d.ts +15 -0
  591. package/dist/orpc/index.d.ts +69 -71
  592. package/dist/orpc/index.js +161 -27
  593. package/dist/otel/index.d.ts +3 -3
  594. package/dist/otel/index.js +6 -6
  595. package/dist/outbox-HvGAJuBe.d.ts +199 -0
  596. package/dist/payments-BXvabJOw.js +16 -0
  597. package/dist/payments-BYcN34Fp.d.ts +114 -0
  598. package/dist/permissions-controller-BMsqIE5T.js +34 -0
  599. package/dist/plugin-AKwwe2gF.js +48 -0
  600. package/dist/pool-CrtT4dg-.d.ts +123 -0
  601. package/dist/pool-errors-JUBcGrre.js +27 -0
  602. package/dist/ports-DOhtuw3c.js +152 -0
  603. package/dist/ports-sx226JUL.d.ts +89 -0
  604. package/dist/postgres/index.d.ts +5 -5
  605. package/dist/postgres/index.js +3 -3
  606. package/dist/postgrest-executor-BFW4oWte.js +1064 -0
  607. package/dist/postgrest-z-T0l23T.d.ts +53 -0
  608. package/dist/powersync/index.d.ts +106 -7
  609. package/dist/powersync/index.js +123 -7
  610. package/dist/preset/index.d.ts +4 -4
  611. package/dist/preset/index.js +4 -4
  612. package/dist/preset-CsHnIBJF.js +875 -0
  613. package/dist/problem-Bf0cJ7tk.js +162 -0
  614. package/dist/problem-DNwN8iGz.d.ts +79 -0
  615. package/dist/provider-B6g7rBZX.js +57 -0
  616. package/dist/provider-CqwEOLCA.d.ts +112 -0
  617. package/dist/push-token-D3Vcf0Pf.d.ts +24 -0
  618. package/dist/queries-BWYYS9um.js +239 -0
  619. package/dist/query/index.d.ts +4 -4
  620. package/dist/query/index.js +114 -48
  621. package/dist/rank-result-BBJIK-k_.js +18 -0
  622. package/dist/rank-result-Bwe7igy-.d.ts +14 -0
  623. package/dist/rate-limit-BWKGlhTM.js +49 -0
  624. package/dist/rate-limit-Bztf32cl.d.ts +50 -0
  625. package/dist/rate-limit-o44SYkVY.js +327 -0
  626. package/dist/react/index.d.ts +10 -9
  627. package/dist/react/index.js +5 -5
  628. package/dist/react/native/index.d.ts +1 -1
  629. package/dist/react/native/index.js +2 -3
  630. package/dist/react/server.d.ts +47 -15
  631. package/dist/react/server.js +46 -11
  632. package/dist/react/session.d.ts +3 -3
  633. package/dist/react-BuDYI62C.js +979 -0
  634. package/dist/react-router/index.d.ts +13 -10
  635. package/dist/react-router/index.js +10 -10
  636. package/dist/read-set-BnKnofIj.js +199 -0
  637. package/dist/realtime/index.d.ts +7 -7
  638. package/dist/realtime/index.js +4 -4
  639. package/dist/record-bindings-DkBJpC5A.js +26 -0
  640. package/dist/record-form-BYs9xv_N.d.ts +82 -0
  641. package/dist/record-type-DRbnlj5q.js +221 -0
  642. package/dist/recordings-BBSJt_YV.d.ts +119 -0
  643. package/dist/records/index.d.ts +28 -28
  644. package/dist/records/index.js +22 -23
  645. package/dist/refresh-DT_ICaK-.d.ts +54 -0
  646. package/dist/refusal-ByBZcm0V.js +64 -0
  647. package/dist/refusal-CSntB_x8.d.ts +32 -0
  648. package/dist/replicas-Dyoh3CEg.js +94 -0
  649. package/dist/resolve-B0mW2m7f.js +932 -0
  650. package/dist/resolve-CXX6DHv3.d.ts +288 -0
  651. package/dist/resource-D8pzB5Qf.d.ts +123 -0
  652. package/dist/resource-DV2GC2dB.js +520 -0
  653. package/dist/resource-DvgXqZB_.js +105 -0
  654. package/dist/resource-execute-CzHuDsil.d.ts +15 -0
  655. package/dist/resource-types-DnKiH4G2.d.ts +157 -0
  656. package/dist/resources-B9cQxhjw.d.ts +7 -0
  657. package/dist/resources-C02l_YBJ.js +64 -0
  658. package/dist/respond-C3CcOZlA.js +100 -0
  659. package/dist/respond-Dn1_YhC1.d.ts +106 -0
  660. package/dist/result-DZeA5KS6.d.ts +351 -0
  661. package/dist/result-ntFBW2p2.js +146 -0
  662. package/dist/rows-BDLZStp4.js +80 -0
  663. package/dist/rows-Bm6sskji.js +39 -0
  664. package/dist/rrule-79K2c3Nr.js +290 -0
  665. package/dist/run-state-BMCD_1Lt.d.ts +13 -0
  666. package/dist/sales-lines-Bk4mbLH1.d.ts +37 -0
  667. package/dist/sales-lines-D-sf9PIB.js +43 -0
  668. package/dist/sales-shared-DXGFJP4g.js +22 -0
  669. package/dist/schemas-l2aF78zQ.js +216 -0
  670. package/dist/scores-B2BiNuVJ.d.ts +174 -0
  671. package/dist/scores-CRp3vvQU.js +177 -0
  672. package/dist/server/index.d.ts +103 -42
  673. package/dist/server/index.js +98 -30
  674. package/dist/server-types-CFtehAsr.d.ts +946 -0
  675. package/dist/session-CH0SKgIz.d.ts +99 -0
  676. package/dist/shared-C47zAh2A.js +17 -0
  677. package/dist/sign-in-BAjR49fq.d.ts +24 -0
  678. package/dist/sign-in-BsIaNx2C.js +392 -0
  679. package/dist/sign-in-DNCdrk05.js +608 -0
  680. package/dist/signatures-CNcoq392.js +145 -0
  681. package/dist/signatures-Dkx9OE8j.d.ts +43 -0
  682. package/dist/signers-BAEzvTJ0.d.ts +390 -0
  683. package/dist/signing-keys-BNDUxpQL.d.ts +119 -0
  684. package/dist/signing-keys-wGKh4vtt.js +164 -0
  685. package/dist/solid/index.d.ts +52 -18
  686. package/dist/solid/index.js +69 -11
  687. package/dist/solid-start/index.d.ts +11 -11
  688. package/dist/solid-start/index.js +8 -8
  689. package/dist/spec/index.d.ts +691 -10
  690. package/dist/spec/index.js +2487 -5
  691. package/dist/spec-DTWkHzYZ.js +124 -0
  692. package/dist/spec-pins-C1Vm8OBl.js +61 -0
  693. package/dist/spec-pins-DIx95afw.d.ts +125 -0
  694. package/dist/sql/index.d.ts +5 -5
  695. package/dist/sql/index.js +5 -5
  696. package/dist/sql-BPbbPzRJ.js +421 -0
  697. package/dist/sql-ClHIdgKS.js +126996 -0
  698. package/dist/sqlite/index.d.ts +126 -0
  699. package/dist/sqlite/index.js +197 -0
  700. package/dist/sso-B0Txid2-.d.ts +161 -0
  701. package/dist/sso-d2S4x_f9.js +217 -0
  702. package/dist/ssr/index.d.ts +5 -4
  703. package/dist/ssr/index.js +3 -3
  704. package/dist/standard-BA3mLh6w.js +25 -0
  705. package/dist/standard-DBV730sF.d.ts +7 -0
  706. package/dist/stats-BHl1-zj9.js +83 -0
  707. package/dist/storage/index.d.ts +3 -3
  708. package/dist/storage/index.js +10 -10
  709. package/dist/store-CpheI-lN.d.ts +83 -0
  710. package/dist/streams/index.d.ts +3 -3
  711. package/dist/streams/index.js +2 -2
  712. package/dist/streams/redis/index.d.ts +2 -2
  713. package/dist/streams/redis/index.js +3 -3
  714. package/dist/subject-readers-B-pQ9Mmo.js +49 -0
  715. package/dist/subject-readers-BNSzkqw_.d.ts +21 -0
  716. package/dist/subjects-BpIEN1MS.d.ts +90 -0
  717. package/dist/subjects-DvmQeF_F.d.ts +79 -0
  718. package/dist/support-view-BYOgwXsJ.d.ts +17 -0
  719. package/dist/svelte/index.d.ts +52 -15
  720. package/dist/svelte/index.js +87 -11
  721. package/dist/sveltekit/index.d.ts +13 -13
  722. package/dist/sveltekit/index.js +13 -13
  723. package/dist/table-schema-BlF6k62Q.d.ts +81 -0
  724. package/dist/table-schema-CD8cJz_M.js +293 -0
  725. package/dist/tags-BjHflcHF.d.ts +30 -0
  726. package/dist/tags-CIZTqtlY.js +39 -0
  727. package/dist/tanstack-db/index.d.ts +50 -6
  728. package/dist/tanstack-db/index.js +43 -2
  729. package/dist/tanstack-start/index.d.ts +9 -9
  730. package/dist/tanstack-start/index.js +9 -9
  731. package/dist/tax-BkCNWWMc.js +140 -0
  732. package/dist/tax-DPShHual.d.ts +170 -0
  733. package/dist/tee-V97_v1ZS.js +101 -0
  734. package/dist/template-Drgg3v2J.js +126 -0
  735. package/dist/temporal-required-Dy0GGD8E.js +20 -0
  736. package/dist/tenant-BgIiMQpo.js +27 -0
  737. package/dist/tenant-yYg0E2-n.d.ts +17 -0
  738. package/dist/testing/index.d.ts +77 -75
  739. package/dist/testing/index.js +89 -99
  740. package/dist/timeline--VU3A1e4.js +50 -0
  741. package/dist/timeline-CtG0sehj.d.ts +151 -0
  742. package/dist/timing-dypS0nxW.js +95 -0
  743. package/dist/topic-CJrQZQaa.d.ts +415 -0
  744. package/dist/topic-ikV_pLTX.js +643 -0
  745. package/dist/types-BBQLbui9.d.ts +659 -0
  746. package/dist/types-CAQBmpDx.d.ts +217 -0
  747. package/dist/types-DFdg_4yN.d.ts +912 -0
  748. package/dist/types-Dp3UCr1e.d.ts +194 -0
  749. package/dist/types-Dr9wZgNy.d.ts +251 -0
  750. package/dist/types-EO2crSX_.d.ts +177 -0
  751. package/dist/types-SFRomQF7.d.ts +624 -0
  752. package/dist/undo-B1jwnVyN.d.ts +46 -0
  753. package/dist/undo-BjCChCmH.js +44 -0
  754. package/dist/upload-claim-B1ZU8ydB.js +33 -0
  755. package/dist/usage-D7QkrwzV.d.ts +232 -0
  756. package/dist/user-change-DgWC6RRC.js +135 -0
  757. package/dist/variants-Cy--Ub-a.js +53 -0
  758. package/dist/vault-O-YlAyHb.d.ts +62 -0
  759. package/dist/vercel-connect/index.d.ts +1 -1
  760. package/dist/vercel-connect/index.js +3 -3
  761. package/dist/verify-CMou8dWZ.d.ts +146 -0
  762. package/dist/verify-ZLFUdlqE.js +130 -0
  763. package/dist/view-C8Ve14ja.js +247 -0
  764. package/dist/view-DyFdMCqg.d.ts +97 -0
  765. package/dist/vue/index.d.ts +52 -23
  766. package/dist/vue/index.js +77 -14
  767. package/dist/watch-topic-BcGfvZOE.d.ts +31 -0
  768. package/dist/wiring-CDNuQoJJ.js +13 -0
  769. package/dist/workflow-sdk/builder/index.d.ts +12 -12
  770. package/dist/workflow-sdk/builder/index.js +16 -17
  771. package/dist/workflow-sdk/index.d.ts +18 -15
  772. package/dist/workflow-sdk/index.js +2 -2
  773. package/dist/workflow-sdk/world/index.d.ts +6 -6
  774. package/dist/workflow-sdk/world/index.js +12 -12
  775. package/dist/workflow-sdk-BFHu4sci.d.ts +163 -0
  776. package/dist/workflow-sdk-BVlFEB5Q.js +242 -0
  777. package/dist/workflow-sdk-Bw6_u0ar.js +2446 -0
  778. package/dist/workflows-B0ZPAQu0.d.ts +255 -0
  779. package/dist/yjs/index.d.ts +3 -3
  780. package/dist/yjs/index.js +2 -2
  781. package/package.json +75 -623
  782. package/schemas/config-v1.json +2082 -1754
  783. package/schemas/design-v1.json +141 -5
  784. package/schemas/doctor-report-v1.json +14 -0
  785. package/skills/better-supabase/SKILL.md +70 -28
  786. package/skills/better-supabase/references/block-extensions.md +64 -0
  787. package/skills/better-supabase/references/frontend.md +29 -26
  788. package/skills/better-supabase/references/troubleshooting.md +3 -3
  789. package/skills/better-supabase/references/ui-recipes.md +267 -134
  790. package/skills/better-supabase-api/SKILL.md +49 -38
  791. package/skills/better-supabase-api/references/adapters.md +42 -39
  792. package/skills/better-supabase-api/references/ai.md +4 -4
  793. package/skills/better-supabase-api/references/expo.md +8 -8
  794. package/skills/better-supabase-api/references/powersync.md +20 -13
  795. package/skills/better-supabase-api/references/streams-credentials.md +3 -3
  796. package/skills/better-supabase-auth/SKILL.md +17 -17
  797. package/skills/better-supabase-auth/references/authorization-providers.md +8 -6
  798. package/skills/better-supabase-testing/SKILL.md +8 -8
  799. package/dist/access-sql-CPoq9F86.js +0 -207
  800. package/dist/access-z7NwWtqx.js +0 -34
  801. package/dist/actor-hNajGNEK.js +0 -150
  802. package/dist/adapter-BCFAg58A.js +0 -2190
  803. package/dist/agents-CmZlLPXC.d.ts +0 -117
  804. package/dist/ai-cache-BxlOkc_M.d.ts +0 -82
  805. package/dist/ai-cache-DQikwXhJ.js +0 -87
  806. package/dist/ai-chat-DBxEz3o1.d.ts +0 -619
  807. package/dist/ai-files-t-kHmS5H.js +0 -339
  808. package/dist/ai-tasks-BDywBUgN.d.ts +0 -166
  809. package/dist/announcements-BeOD0zbc.js +0 -128
  810. package/dist/api-CWhpq24a.d.ts +0 -174
  811. package/dist/api-DKp2Ggz_.js +0 -685
  812. package/dist/api-keys-CboAenU8.d.ts +0 -213
  813. package/dist/api-keys-DT6Fi50R.js +0 -318
  814. package/dist/app-tables-BHrzAUFJ.d.ts +0 -27
  815. package/dist/app-tables-C5aoI5rZ.js +0 -959
  816. package/dist/approvals-bMb7dsBY.d.ts +0 -129
  817. package/dist/arazzo/index.d.ts +0 -278
  818. package/dist/arazzo/index.js +0 -630
  819. package/dist/assistant-D1yev_fR.d.ts +0 -157
  820. package/dist/asyncapi/index.d.ts +0 -110
  821. package/dist/asyncapi/index.js +0 -572
  822. package/dist/attachments-Cjdgarpa.js +0 -351
  823. package/dist/attributes-BOFl922R.js +0 -44
  824. package/dist/audit-log-C3rQxeHd.js +0 -788
  825. package/dist/auth-reply-jVKoAV6R.js +0 -31
  826. package/dist/authorization-BuT26_sR.d.ts +0 -3455
  827. package/dist/authorization-hooks-dLmUO_PZ.d.ts +0 -217
  828. package/dist/authorizer-DFP3gHv8.d.ts +0 -82
  829. package/dist/authorizer-DPTeL-7h.js +0 -125
  830. package/dist/availability-q3dZoZYM.d.ts +0 -226
  831. package/dist/bind-Dz8y3T5T.d.ts +0 -95
  832. package/dist/block-authors-BRTlT0qv.js +0 -14
  833. package/dist/block-controller-DTGuBemi.js +0 -112
  834. package/dist/block-env-DJiUu1fq.js +0 -35
  835. package/dist/block-env-kFcaaJLM.d.ts +0 -10
  836. package/dist/block-env-options-2e6IQrSw.js +0 -26
  837. package/dist/block-events-records-BGVyoz57.d.ts +0 -343
  838. package/dist/block-fields-3w4MZr8U.d.ts +0 -58
  839. package/dist/block-fields-DBSJSeaO.js +0 -139
  840. package/dist/block-helpers-BaugZlJV.d.ts +0 -62
  841. package/dist/block-helpers-CiKtrb6g.js +0 -353
  842. package/dist/block-hooks-BymdcD0V.js +0 -130
  843. package/dist/block-hooks-CmjPKqQ_.d.ts +0 -117
  844. package/dist/block-method-Bvsao626.js +0 -21
  845. package/dist/block-method-hsPAGFi5.d.ts +0 -19
  846. package/dist/block-names-Dbv_2wmE.js +0 -66
  847. package/dist/block-subjects-Dzq5Xn_0.js +0 -55
  848. package/dist/block-subjects-FHwLlIHU.d.ts +0 -6
  849. package/dist/block-tenant-C1sNV8_4.js +0 -14
  850. package/dist/block-transport-d53POsem.d.ts +0 -69
  851. package/dist/blocks/access/index.d.ts +0 -9
  852. package/dist/blocks/access/index.js +0 -18
  853. package/dist/blocks/access/react/index.d.ts +0 -52
  854. package/dist/blocks/access/react/index.js +0 -73
  855. package/dist/blocks/access/react/server.d.ts +0 -11
  856. package/dist/blocks/access/react/server.js +0 -16
  857. package/dist/blocks/access/solid/index.d.ts +0 -13
  858. package/dist/blocks/access/solid/index.js +0 -14
  859. package/dist/blocks/access/svelte/index.d.ts +0 -13
  860. package/dist/blocks/access/svelte/index.js +0 -14
  861. package/dist/blocks/access/vue/index.d.ts +0 -13
  862. package/dist/blocks/access/vue/index.js +0 -14
  863. package/dist/blocks/activity/index.d.ts +0 -116
  864. package/dist/blocks/activity/index.js +0 -164
  865. package/dist/blocks/ai-chat/react/index.d.ts +0 -52
  866. package/dist/blocks/ai-chat/react/index.js +0 -95
  867. package/dist/blocks/ai-chat/react/server.d.ts +0 -25
  868. package/dist/blocks/ai-chat/react/server.js +0 -23
  869. package/dist/blocks/ai-chat/solid/index.d.ts +0 -34
  870. package/dist/blocks/ai-chat/solid/index.js +0 -41
  871. package/dist/blocks/ai-chat/svelte/index.d.ts +0 -34
  872. package/dist/blocks/ai-chat/svelte/index.js +0 -41
  873. package/dist/blocks/ai-chat/vue/index.d.ts +0 -34
  874. package/dist/blocks/ai-chat/vue/index.js +0 -41
  875. package/dist/blocks/ai-providers/index.d.ts +0 -22
  876. package/dist/blocks/ai-providers/index.js +0 -236
  877. package/dist/blocks/ai-tasks/index.d.ts +0 -10
  878. package/dist/blocks/ai-tasks/index.js +0 -252
  879. package/dist/blocks/announcements/react/index.d.ts +0 -28
  880. package/dist/blocks/announcements/react/index.js +0 -38
  881. package/dist/blocks/announcements/react/server.d.ts +0 -9
  882. package/dist/blocks/announcements/react/server.js +0 -10
  883. package/dist/blocks/announcements/solid/index.d.ts +0 -13
  884. package/dist/blocks/announcements/solid/index.js +0 -14
  885. package/dist/blocks/announcements/svelte/index.d.ts +0 -13
  886. package/dist/blocks/announcements/svelte/index.js +0 -14
  887. package/dist/blocks/announcements/vue/index.d.ts +0 -13
  888. package/dist/blocks/announcements/vue/index.js +0 -14
  889. package/dist/blocks/api-keys/react/index.d.ts +0 -32
  890. package/dist/blocks/api-keys/react/index.js +0 -43
  891. package/dist/blocks/api-keys/react/server.d.ts +0 -7
  892. package/dist/blocks/api-keys/react/server.js +0 -7
  893. package/dist/blocks/api-keys/solid/index.d.ts +0 -13
  894. package/dist/blocks/api-keys/solid/index.js +0 -14
  895. package/dist/blocks/api-keys/svelte/index.d.ts +0 -13
  896. package/dist/blocks/api-keys/svelte/index.js +0 -14
  897. package/dist/blocks/api-keys/vue/index.d.ts +0 -13
  898. package/dist/blocks/api-keys/vue/index.js +0 -14
  899. package/dist/blocks/attachments/react/index.d.ts +0 -53
  900. package/dist/blocks/attachments/react/index.js +0 -78
  901. package/dist/blocks/attachments/react/server.d.ts +0 -9
  902. package/dist/blocks/attachments/react/server.js +0 -10
  903. package/dist/blocks/attachments/solid/index.d.ts +0 -13
  904. package/dist/blocks/attachments/solid/index.js +0 -14
  905. package/dist/blocks/attachments/svelte/index.d.ts +0 -13
  906. package/dist/blocks/attachments/svelte/index.js +0 -14
  907. package/dist/blocks/attachments/vue/index.d.ts +0 -13
  908. package/dist/blocks/attachments/vue/index.js +0 -14
  909. package/dist/blocks/audit/react/index.d.ts +0 -31
  910. package/dist/blocks/audit/react/index.js +0 -46
  911. package/dist/blocks/audit/react/server.d.ts +0 -7
  912. package/dist/blocks/audit/react/server.js +0 -7
  913. package/dist/blocks/audit/solid/index.d.ts +0 -13
  914. package/dist/blocks/audit/solid/index.js +0 -14
  915. package/dist/blocks/audit/svelte/index.d.ts +0 -13
  916. package/dist/blocks/audit/svelte/index.js +0 -14
  917. package/dist/blocks/audit/vue/index.d.ts +0 -13
  918. package/dist/blocks/audit/vue/index.js +0 -14
  919. package/dist/blocks/billing/react/index.d.ts +0 -44
  920. package/dist/blocks/billing/react/index.js +0 -40
  921. package/dist/blocks/billing/react/server.d.ts +0 -10
  922. package/dist/blocks/billing/react/server.js +0 -10
  923. package/dist/blocks/billing/solid/index.d.ts +0 -15
  924. package/dist/blocks/billing/solid/index.js +0 -14
  925. package/dist/blocks/billing/svelte/index.d.ts +0 -15
  926. package/dist/blocks/billing/svelte/index.js +0 -14
  927. package/dist/blocks/billing/vue/index.d.ts +0 -15
  928. package/dist/blocks/billing/vue/index.js +0 -14
  929. package/dist/blocks/bookings/react/index.d.ts +0 -36
  930. package/dist/blocks/bookings/react/index.js +0 -63
  931. package/dist/blocks/bookings/react/server.d.ts +0 -9
  932. package/dist/blocks/bookings/react/server.js +0 -10
  933. package/dist/blocks/bookings/solid/index.d.ts +0 -13
  934. package/dist/blocks/bookings/solid/index.js +0 -14
  935. package/dist/blocks/bookings/svelte/index.d.ts +0 -13
  936. package/dist/blocks/bookings/svelte/index.js +0 -14
  937. package/dist/blocks/bookings/vue/index.d.ts +0 -13
  938. package/dist/blocks/bookings/vue/index.js +0 -14
  939. package/dist/blocks/calendar/react/index.d.ts +0 -26
  940. package/dist/blocks/calendar/react/index.js +0 -58
  941. package/dist/blocks/calendar/react/server.d.ts +0 -9
  942. package/dist/blocks/calendar/react/server.js +0 -10
  943. package/dist/blocks/calendar/solid/index.d.ts +0 -13
  944. package/dist/blocks/calendar/solid/index.js +0 -14
  945. package/dist/blocks/calendar/svelte/index.d.ts +0 -13
  946. package/dist/blocks/calendar/svelte/index.js +0 -14
  947. package/dist/blocks/calendar/vue/index.d.ts +0 -13
  948. package/dist/blocks/calendar/vue/index.js +0 -14
  949. package/dist/blocks/comments/react/index.d.ts +0 -32
  950. package/dist/blocks/comments/react/index.js +0 -56
  951. package/dist/blocks/comments/react/server.d.ts +0 -7
  952. package/dist/blocks/comments/react/server.js +0 -7
  953. package/dist/blocks/comments/solid/index.d.ts +0 -13
  954. package/dist/blocks/comments/solid/index.js +0 -14
  955. package/dist/blocks/comments/svelte/index.d.ts +0 -13
  956. package/dist/blocks/comments/svelte/index.js +0 -14
  957. package/dist/blocks/comments/vue/index.d.ts +0 -13
  958. package/dist/blocks/comments/vue/index.js +0 -14
  959. package/dist/blocks/controls/index.d.ts +0 -325
  960. package/dist/blocks/controls/index.js +0 -410
  961. package/dist/blocks/engagements/index.d.ts +0 -41
  962. package/dist/blocks/engagements/index.js +0 -414
  963. package/dist/blocks/entitlements/react/index.d.ts +0 -27
  964. package/dist/blocks/entitlements/react/index.js +0 -35
  965. package/dist/blocks/entitlements/react/server.d.ts +0 -9
  966. package/dist/blocks/entitlements/react/server.js +0 -10
  967. package/dist/blocks/entitlements/solid/index.d.ts +0 -13
  968. package/dist/blocks/entitlements/solid/index.js +0 -14
  969. package/dist/blocks/entitlements/svelte/index.d.ts +0 -13
  970. package/dist/blocks/entitlements/svelte/index.js +0 -14
  971. package/dist/blocks/entitlements/vue/index.d.ts +0 -13
  972. package/dist/blocks/entitlements/vue/index.js +0 -14
  973. package/dist/blocks/forms/react/index.d.ts +0 -19
  974. package/dist/blocks/forms/react/index.js +0 -28
  975. package/dist/blocks/forms/react/server.d.ts +0 -9
  976. package/dist/blocks/forms/react/server.js +0 -10
  977. package/dist/blocks/forms/solid/index.d.ts +0 -13
  978. package/dist/blocks/forms/solid/index.js +0 -14
  979. package/dist/blocks/forms/svelte/index.d.ts +0 -13
  980. package/dist/blocks/forms/svelte/index.js +0 -14
  981. package/dist/blocks/forms/vue/index.d.ts +0 -13
  982. package/dist/blocks/forms/vue/index.js +0 -14
  983. package/dist/blocks/inbox/react/index.d.ts +0 -3
  984. package/dist/blocks/inbox/react/index.js +0 -87
  985. package/dist/blocks/inbox/react/server.d.ts +0 -17
  986. package/dist/blocks/inbox/react/server.js +0 -18
  987. package/dist/blocks/inbox/solid/index.d.ts +0 -27
  988. package/dist/blocks/inbox/solid/index.js +0 -32
  989. package/dist/blocks/inbox/svelte/index.d.ts +0 -27
  990. package/dist/blocks/inbox/svelte/index.js +0 -32
  991. package/dist/blocks/inbox/vue/index.d.ts +0 -27
  992. package/dist/blocks/inbox/vue/index.js +0 -32
  993. package/dist/blocks/jobs/index.d.ts +0 -523
  994. package/dist/blocks/jobs/index.js +0 -1345
  995. package/dist/blocks/messaging/react/index.d.ts +0 -39
  996. package/dist/blocks/messaging/react/index.js +0 -80
  997. package/dist/blocks/messaging/react/server.d.ts +0 -12
  998. package/dist/blocks/messaging/react/server.js +0 -14
  999. package/dist/blocks/messaging/solid/index.d.ts +0 -20
  1000. package/dist/blocks/messaging/solid/index.js +0 -23
  1001. package/dist/blocks/messaging/svelte/index.d.ts +0 -20
  1002. package/dist/blocks/messaging/svelte/index.js +0 -23
  1003. package/dist/blocks/messaging/vue/index.d.ts +0 -20
  1004. package/dist/blocks/messaging/vue/index.js +0 -23
  1005. package/dist/blocks/mfa/react/index.d.ts +0 -30
  1006. package/dist/blocks/mfa/react/index.js +0 -45
  1007. package/dist/blocks/mfa/react/server.d.ts +0 -9
  1008. package/dist/blocks/mfa/react/server.js +0 -12
  1009. package/dist/blocks/mfa/solid/index.d.ts +0 -20
  1010. package/dist/blocks/mfa/solid/index.js +0 -23
  1011. package/dist/blocks/mfa/svelte/index.d.ts +0 -20
  1012. package/dist/blocks/mfa/svelte/index.js +0 -23
  1013. package/dist/blocks/mfa/vue/index.d.ts +0 -20
  1014. package/dist/blocks/mfa/vue/index.js +0 -23
  1015. package/dist/blocks/notifications/react/index.d.ts +0 -19
  1016. package/dist/blocks/notifications/react/index.js +0 -41
  1017. package/dist/blocks/notifications/react/server.d.ts +0 -10
  1018. package/dist/blocks/notifications/react/server.js +0 -10
  1019. package/dist/blocks/notifications/solid/index.d.ts +0 -13
  1020. package/dist/blocks/notifications/solid/index.js +0 -14
  1021. package/dist/blocks/notifications/svelte/index.d.ts +0 -13
  1022. package/dist/blocks/notifications/svelte/index.js +0 -14
  1023. package/dist/blocks/notifications/vue/index.d.ts +0 -13
  1024. package/dist/blocks/notifications/vue/index.js +0 -14
  1025. package/dist/blocks/number-sequences/index.d.ts +0 -48
  1026. package/dist/blocks/number-sequences/index.js +0 -52
  1027. package/dist/blocks/onboarding/react/index.d.ts +0 -24
  1028. package/dist/blocks/onboarding/react/index.js +0 -38
  1029. package/dist/blocks/onboarding/react/server.d.ts +0 -10
  1030. package/dist/blocks/onboarding/react/server.js +0 -10
  1031. package/dist/blocks/onboarding/solid/index.d.ts +0 -13
  1032. package/dist/blocks/onboarding/solid/index.js +0 -14
  1033. package/dist/blocks/onboarding/svelte/index.d.ts +0 -13
  1034. package/dist/blocks/onboarding/svelte/index.js +0 -14
  1035. package/dist/blocks/onboarding/vue/index.d.ts +0 -13
  1036. package/dist/blocks/onboarding/vue/index.js +0 -14
  1037. package/dist/blocks/organizations/react/index.d.ts +0 -127
  1038. package/dist/blocks/organizations/react/index.js +0 -113
  1039. package/dist/blocks/organizations/react/server.d.ts +0 -20
  1040. package/dist/blocks/organizations/react/server.js +0 -24
  1041. package/dist/blocks/organizations/solid/index.d.ts +0 -34
  1042. package/dist/blocks/organizations/solid/index.js +0 -32
  1043. package/dist/blocks/organizations/svelte/index.d.ts +0 -34
  1044. package/dist/blocks/organizations/svelte/index.js +0 -32
  1045. package/dist/blocks/organizations/vue/index.d.ts +0 -34
  1046. package/dist/blocks/organizations/vue/index.js +0 -32
  1047. package/dist/blocks/parties/index.d.ts +0 -182
  1048. package/dist/blocks/parties/index.js +0 -358
  1049. package/dist/blocks/reactions/react/index.d.ts +0 -32
  1050. package/dist/blocks/reactions/react/index.js +0 -57
  1051. package/dist/blocks/reactions/react/server.d.ts +0 -9
  1052. package/dist/blocks/reactions/react/server.js +0 -10
  1053. package/dist/blocks/reactions/solid/index.d.ts +0 -13
  1054. package/dist/blocks/reactions/solid/index.js +0 -14
  1055. package/dist/blocks/reactions/svelte/index.d.ts +0 -13
  1056. package/dist/blocks/reactions/svelte/index.js +0 -14
  1057. package/dist/blocks/reactions/vue/index.d.ts +0 -13
  1058. package/dist/blocks/reactions/vue/index.js +0 -14
  1059. package/dist/blocks/rules/index.d.ts +0 -175
  1060. package/dist/blocks/rules/index.js +0 -163
  1061. package/dist/blocks/rules/react/index.d.ts +0 -38
  1062. package/dist/blocks/rules/react/index.js +0 -59
  1063. package/dist/blocks/rules/react/server.d.ts +0 -6
  1064. package/dist/blocks/rules/react/server.js +0 -7
  1065. package/dist/blocks/rules/solid/index.d.ts +0 -13
  1066. package/dist/blocks/rules/solid/index.js +0 -14
  1067. package/dist/blocks/rules/svelte/index.d.ts +0 -13
  1068. package/dist/blocks/rules/svelte/index.js +0 -14
  1069. package/dist/blocks/rules/vue/index.d.ts +0 -13
  1070. package/dist/blocks/rules/vue/index.js +0 -14
  1071. package/dist/blocks/saved-views/react/index.d.ts +0 -40
  1072. package/dist/blocks/saved-views/react/index.js +0 -60
  1073. package/dist/blocks/saved-views/react/server.d.ts +0 -10
  1074. package/dist/blocks/saved-views/react/server.js +0 -10
  1075. package/dist/blocks/saved-views/solid/index.d.ts +0 -13
  1076. package/dist/blocks/saved-views/solid/index.js +0 -14
  1077. package/dist/blocks/saved-views/svelte/index.d.ts +0 -13
  1078. package/dist/blocks/saved-views/svelte/index.js +0 -14
  1079. package/dist/blocks/saved-views/vue/index.d.ts +0 -13
  1080. package/dist/blocks/saved-views/vue/index.js +0 -14
  1081. package/dist/blocks/search/react/index.d.ts +0 -39
  1082. package/dist/blocks/search/react/index.js +0 -49
  1083. package/dist/blocks/search/react/server.d.ts +0 -10
  1084. package/dist/blocks/search/react/server.js +0 -11
  1085. package/dist/blocks/search/solid/index.d.ts +0 -13
  1086. package/dist/blocks/search/solid/index.js +0 -14
  1087. package/dist/blocks/search/svelte/index.d.ts +0 -13
  1088. package/dist/blocks/search/svelte/index.js +0 -14
  1089. package/dist/blocks/search/vue/index.d.ts +0 -13
  1090. package/dist/blocks/search/vue/index.js +0 -14
  1091. package/dist/blocks/service-principals/index.d.ts +0 -132
  1092. package/dist/blocks/service-principals/index.js +0 -109
  1093. package/dist/blocks/sessions/react/index.d.ts +0 -36
  1094. package/dist/blocks/sessions/react/index.js +0 -53
  1095. package/dist/blocks/sessions/react/server.d.ts +0 -15
  1096. package/dist/blocks/sessions/react/server.js +0 -17
  1097. package/dist/blocks/sessions/solid/index.d.ts +0 -20
  1098. package/dist/blocks/sessions/solid/index.js +0 -23
  1099. package/dist/blocks/sessions/svelte/index.d.ts +0 -20
  1100. package/dist/blocks/sessions/svelte/index.js +0 -23
  1101. package/dist/blocks/sessions/vue/index.d.ts +0 -20
  1102. package/dist/blocks/sessions/vue/index.js +0 -23
  1103. package/dist/blocks/settings/react/index.d.ts +0 -31
  1104. package/dist/blocks/settings/react/index.js +0 -37
  1105. package/dist/blocks/settings/react/server.d.ts +0 -10
  1106. package/dist/blocks/settings/react/server.js +0 -10
  1107. package/dist/blocks/settings/solid/index.d.ts +0 -13
  1108. package/dist/blocks/settings/solid/index.js +0 -14
  1109. package/dist/blocks/settings/svelte/index.d.ts +0 -13
  1110. package/dist/blocks/settings/svelte/index.js +0 -14
  1111. package/dist/blocks/settings/vue/index.d.ts +0 -13
  1112. package/dist/blocks/settings/vue/index.js +0 -14
  1113. package/dist/blocks/shared-signals/index.d.ts +0 -440
  1114. package/dist/blocks/shared-signals/index.js +0 -885
  1115. package/dist/blocks/subjects/react/index.d.ts +0 -31
  1116. package/dist/blocks/subjects/react/index.js +0 -60
  1117. package/dist/blocks/subjects/react/server.d.ts +0 -9
  1118. package/dist/blocks/subjects/react/server.js +0 -12
  1119. package/dist/blocks/subjects/solid/index.d.ts +0 -13
  1120. package/dist/blocks/subjects/solid/index.js +0 -14
  1121. package/dist/blocks/subjects/svelte/index.d.ts +0 -13
  1122. package/dist/blocks/subjects/svelte/index.js +0 -14
  1123. package/dist/blocks/subjects/vue/index.d.ts +0 -13
  1124. package/dist/blocks/subjects/vue/index.js +0 -14
  1125. package/dist/blocks/tags/react/index.d.ts +0 -29
  1126. package/dist/blocks/tags/react/index.js +0 -53
  1127. package/dist/blocks/tags/react/server.d.ts +0 -7
  1128. package/dist/blocks/tags/react/server.js +0 -7
  1129. package/dist/blocks/tags/solid/index.d.ts +0 -13
  1130. package/dist/blocks/tags/solid/index.js +0 -14
  1131. package/dist/blocks/tags/svelte/index.d.ts +0 -13
  1132. package/dist/blocks/tags/svelte/index.js +0 -14
  1133. package/dist/blocks/tags/vue/index.d.ts +0 -13
  1134. package/dist/blocks/tags/vue/index.js +0 -14
  1135. package/dist/blocks/targets/index.d.ts +0 -82
  1136. package/dist/blocks/targets/index.js +0 -72
  1137. package/dist/blocks/undo/react/index.d.ts +0 -17
  1138. package/dist/blocks/undo/react/index.js +0 -24
  1139. package/dist/blocks/undo/react/server.d.ts +0 -10
  1140. package/dist/blocks/undo/react/server.js +0 -10
  1141. package/dist/blocks/undo/solid/index.d.ts +0 -13
  1142. package/dist/blocks/undo/solid/index.js +0 -14
  1143. package/dist/blocks/undo/svelte/index.d.ts +0 -13
  1144. package/dist/blocks/undo/svelte/index.js +0 -14
  1145. package/dist/blocks/undo/vue/index.d.ts +0 -13
  1146. package/dist/blocks/undo/vue/index.js +0 -14
  1147. package/dist/blocks/usage/react/index.d.ts +0 -29
  1148. package/dist/blocks/usage/react/index.js +0 -38
  1149. package/dist/blocks/usage/react/server.d.ts +0 -7
  1150. package/dist/blocks/usage/react/server.js +0 -7
  1151. package/dist/blocks/usage/solid/index.d.ts +0 -13
  1152. package/dist/blocks/usage/solid/index.js +0 -14
  1153. package/dist/blocks/usage/svelte/index.d.ts +0 -13
  1154. package/dist/blocks/usage/svelte/index.js +0 -14
  1155. package/dist/blocks/usage/vue/index.d.ts +0 -13
  1156. package/dist/blocks/usage/vue/index.js +0 -14
  1157. package/dist/blocks/work-items/index.d.ts +0 -87
  1158. package/dist/blocks/work-items/index.js +0 -431
  1159. package/dist/blocks/workflow-builder/index.d.ts +0 -43
  1160. package/dist/blocks/workflow-builder/index.js +0 -33
  1161. package/dist/blocks/workflow-builder/react/index.d.ts +0 -32
  1162. package/dist/blocks/workflow-builder/react/index.js +0 -75
  1163. package/dist/blocks/workflow-builder/react/server.d.ts +0 -14
  1164. package/dist/blocks/workflow-builder/react/server.js +0 -17
  1165. package/dist/blocks/workflow-builder/solid/index.d.ts +0 -20
  1166. package/dist/blocks/workflow-builder/solid/index.js +0 -23
  1167. package/dist/blocks/workflow-builder/svelte/index.d.ts +0 -20
  1168. package/dist/blocks/workflow-builder/svelte/index.js +0 -23
  1169. package/dist/blocks/workflow-builder/vue/index.d.ts +0 -20
  1170. package/dist/blocks/workflow-builder/vue/index.js +0 -23
  1171. package/dist/blocks/workflows/react/index.d.ts +0 -39
  1172. package/dist/blocks/workflows/react/index.js +0 -65
  1173. package/dist/blocks/workflows/react/server.d.ts +0 -14
  1174. package/dist/blocks/workflows/react/server.js +0 -17
  1175. package/dist/blocks/workflows/solid/index.d.ts +0 -20
  1176. package/dist/blocks/workflows/solid/index.js +0 -23
  1177. package/dist/blocks/workflows/svelte/index.d.ts +0 -20
  1178. package/dist/blocks/workflows/svelte/index.js +0 -23
  1179. package/dist/blocks/workflows/vue/index.d.ts +0 -20
  1180. package/dist/blocks/workflows/vue/index.js +0 -23
  1181. package/dist/bookings-BB5lFlNO.js +0 -310
  1182. package/dist/bookings-CC7IeiRa.d.ts +0 -290
  1183. package/dist/bucket-TkB7_xv8.d.ts +0 -667
  1184. package/dist/build-DCfpwg78.js +0 -1839
  1185. package/dist/build-g9wTbQdp.js +0 -703
  1186. package/dist/calendar-T3Vdpq7E.js +0 -952
  1187. package/dist/carrier-C7Q_21Kd.d.ts +0 -169
  1188. package/dist/chat-sdk/react/index.d.ts +0 -3
  1189. package/dist/chat-sdk/react/index.js +0 -2
  1190. package/dist/chat-sdk/react/server.d.ts +0 -4
  1191. package/dist/chat-sdk/react/server.js +0 -1
  1192. package/dist/claims-T8TWZ53E.js +0 -63
  1193. package/dist/cli/add-Bf3kE6PY.js +0 -75
  1194. package/dist/cli/add-CYh6Sxk1.js +0 -674
  1195. package/dist/cli/add-Dg40eFKE.js +0 -1
  1196. package/dist/cli/adopt-B0vrj-4B.js +0 -421
  1197. package/dist/cli/adopt-DJR1k3lS.js +0 -1
  1198. package/dist/cli/apply-DUQ-5LC6.js +0 -329
  1199. package/dist/cli/blocks-DzgYfjVv.js +0 -124
  1200. package/dist/cli/blocks-gGupqvBH.js +0 -1
  1201. package/dist/cli/cache-C3K_wOE2.js +0 -536
  1202. package/dist/cli/catalog-CNM0ViIh.js +0 -199
  1203. package/dist/cli/codemod-Dz4R-tVY.js +0 -1127
  1204. package/dist/cli/command-33pu13LT.js +0 -963
  1205. package/dist/cli/completion-6M6Hr8TL.js +0 -211
  1206. package/dist/cli/completion-Bqu8yq0q.js +0 -1
  1207. package/dist/cli/completion-Ddr3yqd3.js +0 -30
  1208. package/dist/cli/config-B31tIvAl.js +0 -42
  1209. package/dist/cli/config-CjgXMZW2.js +0 -1522
  1210. package/dist/cli/config-D9k5ckqV.js +0 -1
  1211. package/dist/cli/config-edit-D46H0UHp.js +0 -613
  1212. package/dist/cli/db-CeagtENM.js +0 -473
  1213. package/dist/cli/design-edit-B40ljpGZ.js +0 -205
  1214. package/dist/cli/detect-RApSAA8v.js +0 -84
  1215. package/dist/cli/dist-DSwzLVAG.js +0 -129
  1216. package/dist/cli/doctor-COGJJ1gy.js +0 -3898
  1217. package/dist/cli/emit-DbQeLlHt.js +0 -1123
  1218. package/dist/cli/env-Ba-pOD3a.js +0 -1
  1219. package/dist/cli/env-DlgfvI8U.js +0 -143
  1220. package/dist/cli/files-C5JfVnj5.js +0 -972
  1221. package/dist/cli/gen-DHW1qENn.js +0 -307
  1222. package/dist/cli/init-CZifzAUD.js +0 -397
  1223. package/dist/cli/introspect-Dfwu5vAg.js +0 -51
  1224. package/dist/cli/keys-iJs_1WT8.js +0 -106
  1225. package/dist/cli/live-1eL2MIkS.js +0 -344
  1226. package/dist/cli/mcp-CaFW6uKU.js +0 -240
  1227. package/dist/cli/metadata-DkOQHZoH.js +0 -146
  1228. package/dist/cli/migration-safety-BsCKKxPf.js +0 -305
  1229. package/dist/cli/module-migration-CbX-jRhV.js +0 -606
  1230. package/dist/cli/moved-CdNtCf4t.js +0 -161
  1231. package/dist/cli/names-D6LrQnOv.js +0 -6
  1232. package/dist/cli/parse-CRZLku1b.js +0 -182
  1233. package/dist/cli/preset-C4fagbhZ.js +0 -130
  1234. package/dist/cli/run-CE2s5TDh.js +0 -711
  1235. package/dist/cli/run-Du5XPOCv.js +0 -63
  1236. package/dist/cli/run-KXjrgNCH.js +0 -2378
  1237. package/dist/cli/scaffold-CPH8sEhw.js +0 -901
  1238. package/dist/cli/scaffold-DS6g3INp.js +0 -1
  1239. package/dist/cli/seed-D6V-T5Af.js +0 -188
  1240. package/dist/cli/seed-DPQaA8aP.js +0 -1
  1241. package/dist/cli/shared-CCpxS5if.js +0 -151
  1242. package/dist/cli/skills-Bz4INB8f.js +0 -121
  1243. package/dist/cli/snapshot-Dkwxc1uV.js +0 -351
  1244. package/dist/cli/source-args-DZV4RnZL.js +0 -59
  1245. package/dist/cli/spec-B3Tbc7Dm.js +0 -7534
  1246. package/dist/cli/spec-Cv1GYrcW.js +0 -1
  1247. package/dist/cli/sql-C58MS9DI.js +0 -348
  1248. package/dist/cli/sql-DVPw5tvO.js +0 -2
  1249. package/dist/cli/stack-_F_JhllX.js +0 -135
  1250. package/dist/cli/sync-CjkKpI6d.js +0 -91
  1251. package/dist/cli/typegen-F9GEjpvD.js +0 -502
  1252. package/dist/cli/typegen-version-BNBPI4Eu.js +0 -9
  1253. package/dist/cli/version-CTqnp3HO.js +0 -4
  1254. package/dist/cli/write-3qdrpS1v.js +0 -201
  1255. package/dist/client--tyFmxDT.js +0 -52
  1256. package/dist/client-7_4Y21ue.d.ts +0 -122
  1257. package/dist/client-B1cjaIfv.js +0 -116
  1258. package/dist/client-B2GCMvfd.d.ts +0 -451
  1259. package/dist/client-B8cHiZfF.js +0 -67
  1260. package/dist/client-BIMg9IiF.d.ts +0 -349
  1261. package/dist/client-BKGVUgo7.js +0 -380
  1262. package/dist/client-BNaOcfeH.js +0 -58
  1263. package/dist/client-BQseXods.d.ts +0 -309
  1264. package/dist/client-BSnf6fn6.d.ts +0 -59
  1265. package/dist/client-BW3-RUbq.js +0 -235
  1266. package/dist/client-BYAY7lLs.d.ts +0 -137
  1267. package/dist/client-BcXmbm4f.js +0 -173
  1268. package/dist/client-BgmVu505.js +0 -167
  1269. package/dist/client-Bj0xrUzr.js +0 -437
  1270. package/dist/client-Bn0qqRBg.d.ts +0 -37
  1271. package/dist/client-Bni68sve.d.ts +0 -136
  1272. package/dist/client-BrtwaIBh.d.ts +0 -74
  1273. package/dist/client-BtRx0-kn.js +0 -82
  1274. package/dist/client-BteuBPIy.js +0 -337
  1275. package/dist/client-C1TxDBgX.js +0 -111
  1276. package/dist/client-C1zOmnS8.js +0 -89
  1277. package/dist/client-C56l0MnY.d.ts +0 -177
  1278. package/dist/client-CA6KuLDu.d.ts +0 -223
  1279. package/dist/client-CBcq7LBg.d.ts +0 -178
  1280. package/dist/client-CGJrSTMZ.js +0 -234
  1281. package/dist/client-CLIBcMzL.d.ts +0 -116
  1282. package/dist/client-COuIfjbB.d.ts +0 -46
  1283. package/dist/client-CVToJ4uI.js +0 -84
  1284. package/dist/client-C_0XZieg.js +0 -287
  1285. package/dist/client-CebKlRU7.js +0 -157
  1286. package/dist/client-ChOJ4v0D.js +0 -137
  1287. package/dist/client-CnENAa0E.d.ts +0 -69
  1288. package/dist/client-Cp79i2ZE.d.ts +0 -152
  1289. package/dist/client-CwKsEl6q.js +0 -99
  1290. package/dist/client-D-LPdEDQ.d.ts +0 -43
  1291. package/dist/client-D6gD9qt9.d.ts +0 -45
  1292. package/dist/client-DBwWXQKF.d.ts +0 -132
  1293. package/dist/client-DD3EcytK.js +0 -65
  1294. package/dist/client-DScMvaty.js +0 -38
  1295. package/dist/client-DT6Tvudr.d.ts +0 -54
  1296. package/dist/client-DU1_Jq4e.d.ts +0 -116
  1297. package/dist/client-Dd-a0tup.d.ts +0 -475
  1298. package/dist/client-Dh8zXgpq.js +0 -1060
  1299. package/dist/client-DkI0oyR7.js +0 -76
  1300. package/dist/client-DmjG9PHH.js +0 -211
  1301. package/dist/client-DnUFHmje.js +0 -129
  1302. package/dist/client-Do5hykMK.d.ts +0 -38
  1303. package/dist/client-DzOL3lsV.d.ts +0 -110
  1304. package/dist/client-DzukpHS1.d.ts +0 -165
  1305. package/dist/client-LngH55pZ.d.ts +0 -83
  1306. package/dist/client-PPSwiJaK.js +0 -291
  1307. package/dist/client-RoAuPQNB.d.ts +0 -103
  1308. package/dist/client-WzuQExHk.js +0 -253
  1309. package/dist/client-Y_HnZGF4.js +0 -51
  1310. package/dist/client-bDXsvSXp.d.ts +0 -90
  1311. package/dist/client-bx3Bk7c5.d.ts +0 -64
  1312. package/dist/client-jgDU7Roj.d.ts +0 -144
  1313. package/dist/client-kRvHKAKS.js +0 -60
  1314. package/dist/client-pxXoQOdC.js +0 -40
  1315. package/dist/client-yIxEJwTK.js +0 -121
  1316. package/dist/cloud-event-SPyXMdcd.d.ts +0 -64
  1317. package/dist/codecs-CQrX3ZW4.js +0 -358
  1318. package/dist/codecs-DAu2sYWn.d.ts +0 -222
  1319. package/dist/comments-CB8pFSV1.js +0 -142
  1320. package/dist/compiler-BCyHFI6n.d.ts +0 -14
  1321. package/dist/compose--4D1FoPN.js +0 -53
  1322. package/dist/composite-Dv6o2BSw.js +0 -130
  1323. package/dist/composite-KllwFim2.d.ts +0 -82
  1324. package/dist/config-BuOz_O-y.d.ts +0 -2152
  1325. package/dist/config-Dh4D8lBa.js +0 -13931
  1326. package/dist/config-Dn0cC3bM.js +0 -1093
  1327. package/dist/connector-BdCE4Efp.d.ts +0 -164
  1328. package/dist/connectors-DDiSNvkF.d.ts +0 -147
  1329. package/dist/context-9Q23weHu.d.ts +0 -524
  1330. package/dist/context-CMxVnPMY.js +0 -9
  1331. package/dist/context-CYquqpA6.js +0 -41
  1332. package/dist/controller-CSsC9s3s.js +0 -73
  1333. package/dist/controller-DAD4hbl4.d.ts +0 -52
  1334. package/dist/create-blocks-kPUhCvje.js +0 -217
  1335. package/dist/cron-_i5pBGkY.js +0 -148
  1336. package/dist/cron-route-Y0eJ-FNi.js +0 -24
  1337. package/dist/deal-forecast-CBlp20PY.js +0 -39
  1338. package/dist/define-DQznpZYl.js +0 -2023
  1339. package/dist/define-Dw7pRO4h.d.ts +0 -1123
  1340. package/dist/define-block-COpcS6aT.d.ts +0 -1338
  1341. package/dist/define-block-Dze77QTw.js +0 -56
  1342. package/dist/delegation-CeXm9AJ3.js +0 -146
  1343. package/dist/documents-kgDOHUfn.d.ts +0 -152
  1344. package/dist/embeddings-CcRP-cMN.d.ts +0 -78
  1345. package/dist/employees-Dwyvxs4r.d.ts +0 -180
  1346. package/dist/ended--Bd_Q6uL.d.ts +0 -76
  1347. package/dist/engagements-CsJhf2OM.d.ts +0 -179
  1348. package/dist/entitlements-B_ttRvI6.js +0 -45
  1349. package/dist/entitlements-DDevu4ZE.d.ts +0 -54
  1350. package/dist/entity-form-B67vq97h.d.ts +0 -82
  1351. package/dist/entity-naming-DLDhHTbK.js +0 -131
  1352. package/dist/entity-schema-BXXC1NnT.js +0 -39
  1353. package/dist/envelope-DCfHtVtZ.js +0 -90
  1354. package/dist/errors-03ysrOt4.js +0 -325
  1355. package/dist/errors-DZx8w-MH.js +0 -44
  1356. package/dist/escape-like-BfXS-iVe.d.ts +0 -30
  1357. package/dist/eve-BlJI8ZXL.d.ts +0 -157
  1358. package/dist/event-calendar-D3SVa3AE.d.ts +0 -65
  1359. package/dist/events-DbLjvxDX.d.ts +0 -852
  1360. package/dist/executor-BDAGTc_O.js +0 -207
  1361. package/dist/executor-BElVQpaB.d.ts +0 -188
  1362. package/dist/executor-CPyrQdjh.d.ts +0 -700
  1363. package/dist/executor-CsTaO3AT.d.ts +0 -37
  1364. package/dist/executor-DQoczQZJ.d.ts +0 -104
  1365. package/dist/executor-QtVn0axs.js +0 -147
  1366. package/dist/executor-o9HkOJ0m.js +0 -869
  1367. package/dist/expo-sqlite/index.d.ts +0 -61
  1368. package/dist/expo-sqlite/index.js +0 -110
  1369. package/dist/feature-BBLdbGu7.js +0 -224
  1370. package/dist/field-errors-vshYTVKr.d.ts +0 -166
  1371. package/dist/field-formats-DbjaDXoZ.d.ts +0 -39
  1372. package/dist/fields-CanaxA0U.d.ts +0 -75
  1373. package/dist/fields-DK30XCgc.js +0 -107
  1374. package/dist/filter-evaluate-C3i2bGfk.d.ts +0 -37
  1375. package/dist/filter-evaluate-CRDXv0Dl.js +0 -217
  1376. package/dist/filter-query-D4ZSwbcJ.js +0 -524
  1377. package/dist/filter-query-o3b_GuyC.d.ts +0 -133
  1378. package/dist/flags-BTDPaN11.d.ts +0 -246
  1379. package/dist/flags-BhYByvP1.js +0 -279
  1380. package/dist/flows/index.d.ts +0 -247
  1381. package/dist/flows/index.js +0 -229
  1382. package/dist/format-AYHceC2m.d.ts +0 -79
  1383. package/dist/framework-CXoyWGgd.js +0 -57
  1384. package/dist/framework-FxfJpyoF.d.ts +0 -41
  1385. package/dist/function-contract-vPqwt1j4.d.ts +0 -27
  1386. package/dist/gateway-DI8dbOml.d.ts +0 -115
  1387. package/dist/graph-B4eubUQG.js +0 -365
  1388. package/dist/groups-CxonH3u5.js +0 -16
  1389. package/dist/http-51t9xppD.js +0 -28
  1390. package/dist/impersonation-CZD9AOAk.js +0 -62
  1391. package/dist/inbox-BPBb6etH.d.ts +0 -321
  1392. package/dist/index-BSUX4dlB.d.ts +0 -305
  1393. package/dist/index-BgSuw4CC.d.ts +0 -151
  1394. package/dist/index-C7CrdGgz.d.ts +0 -562
  1395. package/dist/index-CvxK2BZS.d.ts +0 -847
  1396. package/dist/index-CxZQgNVE.d.ts +0 -62
  1397. package/dist/index-D4420jLW.d.ts +0 -66
  1398. package/dist/index-DK-YTWLd.d.ts +0 -443
  1399. package/dist/index-DbXWcrOI.d.ts +0 -577
  1400. package/dist/index-U0o7kU0s.d.ts +0 -69
  1401. package/dist/index-WEafENqH.d.ts +0 -149
  1402. package/dist/index-Yep7auV-.d.ts +0 -287
  1403. package/dist/index-eTY4kJzo.d.ts +0 -163
  1404. package/dist/invalidate-BLiBFbLy.d.ts +0 -19
  1405. package/dist/json-schema-DWDTfD8J.js +0 -888
  1406. package/dist/jwks-cache-CRymV-Dr.js +0 -49
  1407. package/dist/kit-Ct4Z6GIO.js +0 -127
  1408. package/dist/kit-DKfbNTAA.d.ts +0 -94
  1409. package/dist/knowledge-BKGrXdS_.js +0 -272
  1410. package/dist/knowledge-CFkCRxO9.d.ts +0 -202
  1411. package/dist/list-query-BtluNnYk.d.ts +0 -222
  1412. package/dist/list-query-CuS1w2Af.js +0 -559
  1413. package/dist/live-CZtRMh62.js +0 -246
  1414. package/dist/mentions-ByYnRNIG.js +0 -114
  1415. package/dist/messages-DNzIVvgN.js +0 -492
  1416. package/dist/messaging-BC-P-yAv.js +0 -329
  1417. package/dist/messaging-CZ6aWb10.d.ts +0 -297
  1418. package/dist/methods-7u6vSgz_.js +0 -11
  1419. package/dist/mfa-wrx1rqJT.d.ts +0 -36
  1420. package/dist/model-Btl8X9cs.d.ts +0 -326
  1421. package/dist/model-messages-D-jVOIOK.js +0 -206
  1422. package/dist/money-codec-jMP0PQLZ.js +0 -41
  1423. package/dist/onboarding-CGMuX7sP.js +0 -68
  1424. package/dist/openapi/index.d.ts +0 -5
  1425. package/dist/openapi/index.js +0 -36
  1426. package/dist/operations-nWYRexee.d.ts +0 -6
  1427. package/dist/options-289GJc2l.d.ts +0 -52
  1428. package/dist/options-70OsM-wK.js +0 -10
  1429. package/dist/options-B7EJaOX-.js +0 -5
  1430. package/dist/options-BkpqTGrJ.js +0 -8
  1431. package/dist/options-Blg8lAkz.js +0 -9
  1432. package/dist/options-Bn4cu0gt.js +0 -5
  1433. package/dist/options-BnoJOwXK.js +0 -8
  1434. package/dist/options-C2HesT4A.js +0 -9
  1435. package/dist/options-C3EzJATk.js +0 -10
  1436. package/dist/options-C3hZ1fbC.js +0 -10
  1437. package/dist/options-CAzVf-1T.js +0 -8
  1438. package/dist/options-CGKSUFUq.js +0 -5
  1439. package/dist/options-CGjGE8xS.js +0 -12
  1440. package/dist/options-CUqQ9pm7.js +0 -9
  1441. package/dist/options-CalPr6kN.d.ts +0 -12
  1442. package/dist/options-CfxBliP6.d.ts +0 -17
  1443. package/dist/options-ChD15QxJ.js +0 -9
  1444. package/dist/options-CmoJsd4V.d.ts +0 -8
  1445. package/dist/options-CyD7OObW.js +0 -17
  1446. package/dist/options-D1blDihM.js +0 -9
  1447. package/dist/options-D2Gd6VfS.js +0 -8
  1448. package/dist/options-D4aD9qwB.js +0 -5
  1449. package/dist/options-D65jzn7S.js +0 -5
  1450. package/dist/options-D7f2VKzj.js +0 -25
  1451. package/dist/options-D7sgG1bQ.js +0 -16
  1452. package/dist/options-DJm31rsi.d.ts +0 -16
  1453. package/dist/options-DXqcJyOP.js +0 -10
  1454. package/dist/options-DXuA4JVa.d.ts +0 -15
  1455. package/dist/options-DZupPoI0.d.ts +0 -10
  1456. package/dist/options-Dm-2crCx.d.ts +0 -273
  1457. package/dist/options-Dmg1Da9P.js +0 -25
  1458. package/dist/options-DsUgamiy.js +0 -5
  1459. package/dist/options-DujalSfR.js +0 -10
  1460. package/dist/options-Dz3hJxUw.d.ts +0 -10
  1461. package/dist/options-HSv8R6h5.js +0 -13
  1462. package/dist/options-I8zVkB_y.js +0 -8
  1463. package/dist/options-MHhjOoWz.js +0 -5
  1464. package/dist/options-MLxMkd5B.js +0 -11
  1465. package/dist/options-MQfTGMgP.d.ts +0 -14
  1466. package/dist/options-OJ5zmgr8.js +0 -10
  1467. package/dist/options-OMAUVcKK.d.ts +0 -10
  1468. package/dist/options-_9arpsX9.js +0 -11
  1469. package/dist/options-a-28mlYT.js +0 -9
  1470. package/dist/options-kLKILdIu.js +0 -10
  1471. package/dist/options-n22NK3PL.js +0 -8
  1472. package/dist/options-qU8vgxhO.js +0 -18
  1473. package/dist/options-te6d5-yz.d.ts +0 -19
  1474. package/dist/options-wFnK3qWl.js +0 -9
  1475. package/dist/options-xVAy3UsV.js +0 -9
  1476. package/dist/organizations-DtehZg3J.js +0 -401
  1477. package/dist/outbox-CsF_iKjx.d.ts +0 -199
  1478. package/dist/overlay/index.d.ts +0 -249
  1479. package/dist/overlay/index.js +0 -561
  1480. package/dist/payments-BtScsgPS.js +0 -16
  1481. package/dist/payments-CBzQIjoX.d.ts +0 -114
  1482. package/dist/permissions-BetA_Fo_.js +0 -34
  1483. package/dist/plugin-Ar5546xh.d.ts +0 -202
  1484. package/dist/plugin-D9bYbYli.js +0 -45
  1485. package/dist/plugins/actor/index.d.ts +0 -19
  1486. package/dist/plugins/actor/index.js +0 -57
  1487. package/dist/plugins/rules/index.d.ts +0 -96
  1488. package/dist/plugins/rules/index.js +0 -235
  1489. package/dist/plugins/soft-delete/index.d.ts +0 -39
  1490. package/dist/plugins/soft-delete/index.js +0 -90
  1491. package/dist/plugins/tenant/index.d.ts +0 -60
  1492. package/dist/plugins/tenant/index.js +0 -119
  1493. package/dist/plugins/timestamps/index.d.ts +0 -11
  1494. package/dist/plugins/timestamps/index.js +0 -47
  1495. package/dist/plugins/validation/index.d.ts +0 -24
  1496. package/dist/plugins/validation/index.js +0 -83
  1497. package/dist/pool-CRkU15dA.d.ts +0 -123
  1498. package/dist/pool-errors-B17BQRW-.js +0 -27
  1499. package/dist/ports-DsJicwI2.d.ts +0 -89
  1500. package/dist/ports-yajgT0t0.js +0 -139
  1501. package/dist/postgrest-DHLlN2nS.d.ts +0 -53
  1502. package/dist/powersync/react/index.d.ts +0 -93
  1503. package/dist/powersync/react/index.js +0 -120
  1504. package/dist/preset-DzcQ5CQM.js +0 -841
  1505. package/dist/problem-BWElIgIb.js +0 -162
  1506. package/dist/problem-DpHB7tWl.d.ts +0 -79
  1507. package/dist/provider-DmiaI1qt.d.ts +0 -112
  1508. package/dist/provider-EJ0-5GwJ.js +0 -57
  1509. package/dist/push-token-BxKmYhwk.d.ts +0 -24
  1510. package/dist/queries-Dw8y9bvz.js +0 -245
  1511. package/dist/rank-result-C_sHjkiz.js +0 -18
  1512. package/dist/rank-result-DwR0FawB.d.ts +0 -14
  1513. package/dist/rate-limit-B_U12PdL.js +0 -49
  1514. package/dist/rate-limit-CrOuXfjj.d.ts +0 -50
  1515. package/dist/rate-limit-DExDw3Cy.js +0 -327
  1516. package/dist/react-28VgUbm9.js +0 -852
  1517. package/dist/react-controller-CKSdtJ10.js +0 -43
  1518. package/dist/react-env-CfA3EdBH.js +0 -20
  1519. package/dist/read-set-BAR84kPC.js +0 -199
  1520. package/dist/recordings-DgDu7AOt.d.ts +0 -119
  1521. package/dist/refusal-DXydjgsS.js +0 -64
  1522. package/dist/refusal-efy5bZMd.d.ts +0 -32
  1523. package/dist/replicas-BvIL4_jL.js +0 -94
  1524. package/dist/resolve-CzUKTIMq.d.ts +0 -289
  1525. package/dist/resolve-DAYdcs22.js +0 -892
  1526. package/dist/resolved-names-Dr7brlLL.js +0 -133
  1527. package/dist/resource-BRRU-A7j.js +0 -91
  1528. package/dist/resource-DYDEnww-.d.ts +0 -115
  1529. package/dist/resource-Dk_JYsOt.js +0 -469
  1530. package/dist/resource-execute-bT9ltHVT.d.ts +0 -15
  1531. package/dist/resource-types-Bzt_bpR5.d.ts +0 -153
  1532. package/dist/resources-BV6j5TTD.js +0 -64
  1533. package/dist/resources-Du5wcL3f.d.ts +0 -7
  1534. package/dist/respond-CZYibxUx.d.ts +0 -101
  1535. package/dist/respond-z_yfyitp.js +0 -100
  1536. package/dist/result-B3m7xtRY.js +0 -146
  1537. package/dist/result-C6jDfedy.d.ts +0 -350
  1538. package/dist/rows-Bb0EPupt.js +0 -80
  1539. package/dist/rows-CtLWqdGQ.js +0 -39
  1540. package/dist/rrule-xDm2znty.js +0 -290
  1541. package/dist/rules-DcW5mj1r.js +0 -287
  1542. package/dist/run-state-CPo-1X2B.d.ts +0 -12
  1543. package/dist/sales-lines-9HsX89aO.d.ts +0 -28
  1544. package/dist/sales-lines-BhrIx2oK.js +0 -41
  1545. package/dist/sales-shared-C_u68eq2.js +0 -22
  1546. package/dist/sales-shared-DAAGwQwN.d.ts +0 -8
  1547. package/dist/schemas-9Ci3K0Hk.js +0 -103
  1548. package/dist/schemas-ypoQZ_6N.js +0 -157
  1549. package/dist/scores-CsURQDUB.d.ts +0 -172
  1550. package/dist/scores-DdPZVVt8.js +0 -177
  1551. package/dist/search-ToCOlCZ8.js +0 -106
  1552. package/dist/sections-DjxYmpu-.js +0 -26
  1553. package/dist/server-types-BOs-eFpo.d.ts +0 -809
  1554. package/dist/session-BgsOPGZs.d.ts +0 -97
  1555. package/dist/settings-mL-i7QUM.js +0 -93
  1556. package/dist/shared-LmlfYPv4.js +0 -60
  1557. package/dist/shared-eVrl39dX.js +0 -17
  1558. package/dist/sign-in-lAyf6Ohy.js +0 -386
  1559. package/dist/signatures-GUBuhLOB.js +0 -145
  1560. package/dist/signatures-zbu6KTNQ.d.ts +0 -43
  1561. package/dist/signers-D6ecZl22.d.ts +0 -390
  1562. package/dist/signing-keys-B3RHGMMu.d.ts +0 -119
  1563. package/dist/signing-keys-fWapUzi0.js +0 -164
  1564. package/dist/solid-bind-C1jeq4Qm.d.ts +0 -11
  1565. package/dist/solid-bind-iHGfGtBK.js +0 -38
  1566. package/dist/solid-controller-DGuv7V8a.js +0 -13
  1567. package/dist/spec-CoWHDoud.js +0 -119
  1568. package/dist/spec-pins-CZ2CL8YZ.d.ts +0 -120
  1569. package/dist/spec-pins-D3Tm6HJi.js +0 -60
  1570. package/dist/sql-CVYjOUyG.js +0 -421
  1571. package/dist/sql-rQDL6PIL.js +0 -122247
  1572. package/dist/sso-B744gHeS.d.ts +0 -161
  1573. package/dist/sso-Bt9HocgW.js +0 -217
  1574. package/dist/standard-DbQsD2xZ.d.ts +0 -7
  1575. package/dist/standard-DtkpFGkS.js +0 -25
  1576. package/dist/stats-qCEV5M3B.js +0 -1147
  1577. package/dist/store-o0HwYXl8.d.ts +0 -83
  1578. package/dist/subject-readers-CsTpx44c.js +0 -49
  1579. package/dist/subject-readers-DEZ45DQF.d.ts +0 -21
  1580. package/dist/subjects-B6p4oAZJ.d.ts +0 -78
  1581. package/dist/subjects-DXFmanh5.d.ts +0 -90
  1582. package/dist/subjects-DevU_atb.js +0 -107
  1583. package/dist/support-Ds1-UCN4.js +0 -534
  1584. package/dist/support-view-vwJbRMpV.d.ts +0 -17
  1585. package/dist/svelte-bind-BHN5a8VV.js +0 -46
  1586. package/dist/svelte-bind-Ja6CtQGp.d.ts +0 -13
  1587. package/dist/svelte-controller-oFKC9AYu.js +0 -19
  1588. package/dist/table-schema-BcB-VCQb.js +0 -293
  1589. package/dist/table-schema-Cb-IV_pZ.d.ts +0 -78
  1590. package/dist/tags-CLXi2c6O.d.ts +0 -30
  1591. package/dist/tags-C_ym1yDM.js +0 -39
  1592. package/dist/tags-EnvIccSJ.js +0 -86
  1593. package/dist/tanstack-db/supabase/index.d.ts +0 -66
  1594. package/dist/tanstack-db/supabase/index.js +0 -271
  1595. package/dist/tax-CIIxd8Zf.d.ts +0 -170
  1596. package/dist/tax-DmOMjrYc.js +0 -140
  1597. package/dist/tee-DwkUvJD_.js +0 -101
  1598. package/dist/template-BWP7IXZg.js +0 -126
  1599. package/dist/temporal-required-B8qQHYbI.js +0 -20
  1600. package/dist/tenant-Bg4PDLkG.d.ts +0 -17
  1601. package/dist/tenant-DnMqeNIM.js +0 -27
  1602. package/dist/timeline-0_hTBH0-.js +0 -52
  1603. package/dist/timeline-DUUsPLv5.d.ts +0 -152
  1604. package/dist/timing-C5NzaEgy.js +0 -95
  1605. package/dist/topic-CPOmMgkf.js +0 -643
  1606. package/dist/topic-D9j8G2dw.d.ts +0 -415
  1607. package/dist/types-BEDfwXL4.d.ts +0 -251
  1608. package/dist/types-BRJHGhSq.d.ts +0 -177
  1609. package/dist/types-BTK75521.js +0 -8
  1610. package/dist/types-CGUDoF5I.d.ts +0 -624
  1611. package/dist/types-DkPE7yd2.d.ts +0 -194
  1612. package/dist/types-QHeku_6b.d.ts +0 -217
  1613. package/dist/types-uHD9yANu.d.ts +0 -700
  1614. package/dist/undo-B696duxr.d.ts +0 -46
  1615. package/dist/undo-vutx78k8.js +0 -44
  1616. package/dist/upload-claim-D_wgDbi7.js +0 -33
  1617. package/dist/usage-BI1E2940.js +0 -264
  1618. package/dist/usage-DBcVGqnr.d.ts +0 -232
  1619. package/dist/user-change-CSR_prhd.js +0 -133
  1620. package/dist/variants-DL7NpFJ7.js +0 -53
  1621. package/dist/vault-BQTdu4eH.d.ts +0 -62
  1622. package/dist/verify-27w0I5C9.js +0 -130
  1623. package/dist/verify-BmuCB4PW.d.ts +0 -146
  1624. package/dist/view-2_I-2ukO.d.ts +0 -90
  1625. package/dist/view-BtgqxQLM.js +0 -108
  1626. package/dist/vue-bind-CFxon-Vs.js +0 -45
  1627. package/dist/vue-bind-TPkbLl4z.d.ts +0 -11
  1628. package/dist/vue-controller-WtbuT-Ux.js +0 -13
  1629. package/dist/watch-CfMT6vX7.js +0 -139
  1630. package/dist/watch-DziJudwj.d.ts +0 -93
  1631. package/dist/watch-topic-CIT3UlAh.d.ts +0 -31
  1632. package/dist/wire-Bizdxvp-.js +0 -66
  1633. package/dist/work-items-Cnntm8ij.d.ts +0 -238
  1634. package/dist/workflow-builder-2q1iqHYG.js +0 -699
  1635. package/dist/workflow-sdk-BTYWQQg9.d.ts +0 -163
  1636. package/dist/workflow-sdk-_pqDUwNK.js +0 -242
  1637. package/dist/workflow-sdk-world-BIwGVy6S.js +0 -2401
  1638. package/dist/workflows-D8U7KyXJ.d.ts +0 -258
  1639. package/dist/workflows-VJBSV-QR.js +0 -285
  1640. package/skills/better-supabase/references/plugins.md +0 -71
@@ -0,0 +1,2299 @@
1
+ import { c as mapDbError, n as dbError, o as isDbError, r as dbErrorOf } from "./errors-BVFgt8BZ.js";
2
+ import { n as isRecord } from "./guards-6F2bCtQR.js";
3
+ import { t as temporal } from "./temporal-required-Dy0GGD8E.js";
4
+ import { a as ok, r as err, s as toDbError, t as AsyncResult } from "./result-ntFBW2p2.js";
5
+ import { n as postgrestExecutor } from "./postgrest-executor-BFW4oWte.js";
6
+ import { n as StatsRecorder } from "./stats-BHl1-zj9.js";
7
+ import { o as problemResponse } from "./problem-Bf0cJ7tk.js";
8
+ import { loadEnv } from "./env/index.js";
9
+ import { i as userContext, t as actClaim } from "./impersonation-DM3oWNoD.js";
10
+ import { t as fromPgError } from "./pg-error-B5QLDcbG.js";
11
+ import { i as forwardBlockEvents, t as DEFAULT_TYPE_PREFIX } from "./cloud-event-XsM53POL.js";
12
+ import { a as replicaState, i as primaryCookieWrite, o as routedExecutor, r as pinnedUntil, s as withPrimaryPin } from "./replicas-Dyoh3CEg.js";
13
+ import { t as authContext } from "./context-DBicfUNz.js";
14
+ import { a as narrowCap, i as delegatedClaims, r as contextClaims } from "./delegation--93jRsVO.js";
15
+ import { c as AUTH_CACHE_HEADERS, d as clearSessionAtScopes, f as parseCookies, g as sessionCookieName, h as serializeCookie, i as resolveAuth, n as prefetchJwks, r as requestToken } from "./resolve-B0mW2m7f.js";
16
+ import { o as requestMemo, t as bindAuthorizer } from "./authorizer-BGhXaDmo.js";
17
+ import { t as credentialProviderOf } from "./provider-B6g7rBZX.js";
18
+ import { c as sessionMemo, l as snapshotOf, r as authOfSnapshot } from "./view-C8Ve14ja.js";
19
+ import { a as respond, n as defaultPrefetchJwks, r as guard, t as defaultExpose } from "./respond-C3CcOZlA.js";
20
+ import { createClient } from "@supabase/supabase-js";
21
+ import { defineMiddleware, getEnv, pipeline, seedContext } from "@supabase/middleware";
22
+ import { PostgrestClient } from "@supabase/postgrest-js";
23
+ //#region src/server/delete-account.ts
24
+ const REMOVE_BATCH = 1e3;
25
+ /** Maps an `AuthApiError` from `auth.admin.deleteUser` to a `DbError`. */
26
+ function fromAuthError(raw) {
27
+ if (isDbError(raw)) return raw;
28
+ const failure = typeof raw === "object" && raw !== null ? raw : {};
29
+ const message = failure.message ?? "Auth request failed";
30
+ const base = {
31
+ table: "auth.users",
32
+ ...failure.code ? { code: failure.code } : {}
33
+ };
34
+ if (failure.code === "user_not_found" || failure.status === 404) return dbError("not_found", message, base);
35
+ if (/database error deleting user/i.test(message)) return dbError("conflict", message, {
36
+ ...base,
37
+ hint: "A foreign key to auth.users without on delete cascade or set null blocks the delete (doctor BS406)"
38
+ });
39
+ if (failure.status === 401) return dbError("unauthorized", message, base);
40
+ if (failure.status === 403) return dbError("forbidden", message, base);
41
+ return failure.name === "AuthRetryableFetchError" || (failure.status ?? 0) >= 500 ? dbError("network", message, base) : dbError("unexpected", message, base);
42
+ }
43
+ const UUID$2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
44
+ const PROBE = "better_supabase.delete_account_probe";
45
+ /**
46
+ * The database error that refuses deleting `userId`, from the delete and its
47
+ * deferred checks run in a `do` block that always fails, so nothing is deleted.
48
+ * Undefined when the delete itself would pass.
49
+ */
50
+ async function databaseRefusal(sql, userId) {
51
+ if (!UUID$2.test(userId)) return;
52
+ try {
53
+ await sql.queryRaw(`do $$
54
+ begin
55
+ delete from auth.users where id = '${userId}';
56
+ set constraints all immediate;
57
+ raise exception '${PROBE}';
58
+ end;
59
+ $$`);
60
+ } catch (cause) {
61
+ const raw = isDbError(cause) ? void 0 : fromPgError(cause);
62
+ const error = isDbError(cause) ? cause : raw && mapDbError(raw);
63
+ if (!error || error.message === PROBE) return;
64
+ return {
65
+ ...error,
66
+ table: "auth.users"
67
+ };
68
+ }
69
+ }
70
+ /**
71
+ * Deletes the Auth user, then removes their Storage objects, then announces the
72
+ * delete. Rows referencing `auth.users` follow their foreign keys. The objects
73
+ * are listed first and removed only once the user is gone, so a delete the
74
+ * database refuses leaves them in place.
75
+ *
76
+ * `server.deleteAccount` calls it with the server's service client. Apps on the
77
+ * `@supabase/server` pipeline call it with theirs:
78
+ * `deleteAccount(betterSupabase, ctx.supabaseAdmin, userId)`.
79
+ */
80
+ function deleteAccount(betterSupabase, service, userId, options = {}) {
81
+ return AsyncResult.from(async () => {
82
+ const client = typeof service === "function" ? service() : service;
83
+ const listedPaths = [];
84
+ for (const bucket of options.buckets ?? []) {
85
+ const param = bucket.owner;
86
+ if (!param) continue;
87
+ options.signal?.throwIfAborted();
88
+ const listed = await bucket.connect(client, { allTenants: true }).list({ [param]: userId }, options.signal ? { signal: options.signal } : {});
89
+ if (!listed.ok) return listed;
90
+ listedPaths.push([bucket, listed.data.map((object) => object.path).filter((path) => {
91
+ return bucket.match(path)?.[param] === userId;
92
+ })]);
93
+ }
94
+ options.signal?.throwIfAborted();
95
+ let alreadyGone = false;
96
+ try {
97
+ const { error } = await client.auth.admin.deleteUser(userId);
98
+ const failure = error ? fromAuthError(error) : void 0;
99
+ if (failure?.kind === "not_found") alreadyGone = true;
100
+ else if (failure) {
101
+ const refusal = options.sql && (failure.kind === "conflict" || failure.kind === "network" || failure.kind === "unexpected") ? await databaseRefusal(options.sql, userId) : void 0;
102
+ return err(refusal ?? failure);
103
+ }
104
+ } catch (cause) {
105
+ return err(fromAuthError(cause));
106
+ }
107
+ const removed = {};
108
+ for (const [bucket, paths] of listedPaths) {
109
+ const storage = bucket.connect(client, { allTenants: true });
110
+ for (let start = 0; start < paths.length; start += REMOVE_BATCH) {
111
+ const batch = await storage.remove(paths.slice(start, start + REMOVE_BATCH));
112
+ if (!batch.ok) return batch;
113
+ }
114
+ removed[bucket.id] = paths.length;
115
+ }
116
+ if (alreadyGone) return ok({
117
+ userId,
118
+ removed
119
+ });
120
+ const context = options.context ?? {};
121
+ betterSupabase.events.emit("mutation", {
122
+ table: "auth.users",
123
+ kind: "delete",
124
+ rows: [{ id: userId }],
125
+ context
126
+ });
127
+ for (const table of options.cascades ?? []) betterSupabase.events.emit("mutation", {
128
+ table,
129
+ kind: "delete",
130
+ rows: [],
131
+ context
132
+ });
133
+ return ok({
134
+ userId,
135
+ removed
136
+ });
137
+ });
138
+ }
139
+ //#endregion
140
+ //#region src/server/suspend-account.ts
141
+ const UUID$1 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
142
+ const FOREVER = "876000h";
143
+ const END_SESSIONS = `with ended as (
144
+ delete from auth.sessions where user_id = $1::uuid returning id
145
+ ), tokens as (
146
+ delete from auth.refresh_tokens where user_id = $1::text
147
+ )
148
+ select count(*)::int as ended from ended`;
149
+ function invalidUser(userId) {
150
+ return dbError("invalid_request", `"${userId}" is not a user id`, { table: "auth.users" });
151
+ }
152
+ function fromSqlError(cause) {
153
+ const known = dbErrorOf(cause);
154
+ if (known) return known;
155
+ const raw = fromPgError(cause);
156
+ if (raw) return {
157
+ ...mapDbError(raw),
158
+ table: "auth.sessions"
159
+ };
160
+ return dbError("unexpected", cause instanceof Error ? cause.message : "Ending the sessions failed", { table: "auth.sessions" });
161
+ }
162
+ async function deleteSessions(sql, userId) {
163
+ const [row] = await sql.queryRaw(END_SESSIONS, [userId]);
164
+ return row?.ended ?? 0;
165
+ }
166
+ function endSessions(sql, userId) {
167
+ return AsyncResult.from(async () => {
168
+ if (!UUID$1.test(userId)) return err(invalidUser(userId));
169
+ try {
170
+ return ok({
171
+ userId,
172
+ ended: await deleteSessions(sql, userId)
173
+ });
174
+ } catch (cause) {
175
+ return err(fromSqlError(cause));
176
+ }
177
+ });
178
+ }
179
+ const LAST_SIGN_INS = `select user_id, last_sign_in_at
180
+ from better_supabase.last_sign_ins($1::uuid[])`;
181
+ /**
182
+ * The last sign-in of each user, in one query (`better_supabase.last_sign_ins`
183
+ * from the `sessions` module, which only the service role may call). Users that
184
+ * don't exist are missing from the map.
185
+ */
186
+ function lastSignIns(sql, userIds) {
187
+ return AsyncResult.from(async () => {
188
+ const invalid = userIds.find((userId) => !UUID$1.test(userId));
189
+ if (invalid !== void 0) return err(invalidUser(invalid));
190
+ if (userIds.length === 0) return ok(/* @__PURE__ */ new Map());
191
+ try {
192
+ const rows = await sql.queryRaw(LAST_SIGN_INS, [[...new Set(userIds)]]);
193
+ return ok(new Map(rows.map((row) => [row.user_id, {
194
+ userId: row.user_id,
195
+ lastSignInAt: row.last_sign_in_at === null ? null : temporal().Instant.from(row.last_sign_in_at instanceof Date ? row.last_sign_in_at.toISOString() : row.last_sign_in_at)
196
+ }])));
197
+ } catch (cause) {
198
+ return err(fromSqlError(cause));
199
+ }
200
+ });
201
+ }
202
+ async function ban(client, userId, duration) {
203
+ try {
204
+ const { error } = await client.auth.admin.updateUserById(userId, { ban_duration: duration });
205
+ return error ? fromAuthError(error) : void 0;
206
+ } catch (cause) {
207
+ return fromAuthError(cause);
208
+ }
209
+ }
210
+ function suspendAccount(service, sql, userId, options) {
211
+ return AsyncResult.from(async () => {
212
+ if (!UUID$1.test(userId)) return err(invalidUser(userId));
213
+ const client = typeof service === "function" ? service() : service;
214
+ const { suspended } = options;
215
+ if (suspended) {
216
+ const refused = await ban(client, userId, options.duration ?? FOREVER);
217
+ if (refused) return err(refused);
218
+ if (options.endSessions !== true) return ok({
219
+ userId,
220
+ suspended,
221
+ ended: 0
222
+ });
223
+ }
224
+ let ended;
225
+ try {
226
+ ended = await deleteSessions(sql, userId);
227
+ } catch (cause) {
228
+ return err(fromSqlError(cause));
229
+ }
230
+ if (!suspended) {
231
+ const refused = await ban(client, userId, "none");
232
+ if (refused) return err(refused);
233
+ }
234
+ return ok({
235
+ userId,
236
+ suspended,
237
+ ended
238
+ });
239
+ });
240
+ }
241
+ //#endregion
242
+ //#region src/server/audit.ts
243
+ /** The CloudEvents `source` of the events the server sends to its `audit` sink. */
244
+ const SERVER_EVENT_SOURCE = "/better-supabase/server";
245
+ const OFF = { account: () => void 0 };
246
+ /**
247
+ * The server's audit trail: account actions are sent to `sink` as CloudEvents
248
+ * typed `dev.better-supabase.account.*` with subject `users/<id>`, and
249
+ * `support.denied` block events are forwarded to it.
250
+ */
251
+ function serverAudit(betterSupabase, sink) {
252
+ if (sink === void 0) return OFF;
253
+ const { events } = betterSupabase;
254
+ forwardBlockEvents(betterSupabase, sink, {
255
+ source: SERVER_EVENT_SOURCE,
256
+ types: ["support.denied"]
257
+ });
258
+ const report = (cause) => {
259
+ events.logger.error("audit sink failed", { cause });
260
+ };
261
+ return { account(type, userId, data) {
262
+ const event = {
263
+ specversion: "1.0",
264
+ id: crypto.randomUUID(),
265
+ source: SERVER_EVENT_SOURCE,
266
+ type: `${DEFAULT_TYPE_PREFIX}.${type}`,
267
+ subject: `users/${userId}`,
268
+ time: (/* @__PURE__ */ new Date()).toISOString(),
269
+ datacontenttype: "application/json",
270
+ data: {
271
+ userId,
272
+ ...data
273
+ }
274
+ };
275
+ try {
276
+ events.track(Promise.resolve(sink.send([event])).catch(report));
277
+ } catch (cause) {
278
+ report(cause);
279
+ }
280
+ } };
281
+ }
282
+ //#endregion
283
+ //#region src/core/contracts/authorization-hooks.ts
284
+ /** Types `hooks` and freezes it; better-supabase never mutates a provider. */
285
+ function defineAuthorizationHooks(hooks) {
286
+ return Object.freeze(hooks);
287
+ }
288
+ /** The error for hooks built for another API version, or `undefined` for version 1. */
289
+ function hooksApiProblem(hooks) {
290
+ if (hooks.apiVersion === 1) return;
291
+ return `authorization hooks "${typeof hooks.name === "string" ? hooks.name : "provider"}" target API ${String(hooks.apiVersion)}; this better-supabase supports 1.`;
292
+ }
293
+ //#endregion
294
+ //#region src/server/clients.ts
295
+ const STATELESS = {
296
+ persistSession: false,
297
+ autoRefreshToken: false,
298
+ detectSessionInUrl: false
299
+ };
300
+ /**
301
+ * The Supabase and PostgREST clients of one server: shared service and anon
302
+ * clients, per-request user clients.
303
+ */
304
+ function createClients(input) {
305
+ const { options, env, definitionExecutor, lite, createClient } = input;
306
+ let adminClient;
307
+ let anonClient;
308
+ const secretKey = () => {
309
+ const key = env().secretKey;
310
+ if (!key) throw new TypeError("admin() needs SUPABASE_SECRET_KEY; it is not set");
311
+ return key;
312
+ };
313
+ const customFetch = options.fetch ? { fetch: options.fetch } : void 0;
314
+ const urlLengthLimit = options.db?.urlLengthLimit ?? definitionExecutor.urlLengthLimit;
315
+ const db = {
316
+ ...options.db?.timeout === void 0 ? {} : { timeout: options.db.timeout },
317
+ ...options.db?.retry === void 0 ? {} : { retry: options.db.retry },
318
+ ...urlLengthLimit === void 0 ? {} : { urlLengthLimit }
319
+ };
320
+ const dbOptions = Object.keys(db).length > 0 ? { db } : {};
321
+ const sharedGlobal = {
322
+ ...customFetch ? { global: customFetch } : {},
323
+ ...dbOptions
324
+ };
325
+ /**
326
+ * Postgrest-js options a bare `PostgrestClient` takes; `timeout` is the
327
+ * executor's.
328
+ */
329
+ const restOptions = {
330
+ ...db.retry === void 0 ? {} : { retry: db.retry },
331
+ ...urlLengthLimit === void 0 ? {} : { urlLengthLimit }
332
+ };
333
+ const rpcUnavailable = lite?.rpcUnavailable;
334
+ const executorOptions = {
335
+ ...definitionExecutor,
336
+ ...urlLengthLimit === void 0 ? {} : { urlLengthLimit },
337
+ ...db.timeout === void 0 ? {} : { timeout: db.timeout },
338
+ ...db.retry === void 0 ? {} : { retry: db.retry },
339
+ ...rpcUnavailable === void 0 ? {} : { rpcUnavailable }
340
+ };
341
+ /** Set when `db` options or the backend need an executor built with them. */
342
+ const tunedExecutor = options.db !== void 0 || rpcUnavailable !== void 0;
343
+ const serviceClient = () => {
344
+ adminClient ??= createClient(env().url, secretKey(), {
345
+ auth: STATELESS,
346
+ ...sharedGlobal
347
+ });
348
+ return adminClient;
349
+ };
350
+ const readUrl = () => options.readUrl === false ? void 0 : options.readUrl?.replace(/\/+$/, "") ?? env().readUrl;
351
+ const apiKeyClient = () => {
352
+ throw new TypeError("ctx.supabase and ctx.db.$client are not available for an API key: ctx.db and ctx.sql run over direct Postgres with the key's claims");
353
+ };
354
+ /** Clients for the primary share the service and anon clients; others don't. */
355
+ const supabaseAt = (url, auth, headers = {}) => {
356
+ const custom = Object.keys(headers).length > 0;
357
+ const global = custom ? {
358
+ global: {
359
+ headers,
360
+ ...customFetch
361
+ },
362
+ ...dbOptions
363
+ } : sharedGlobal;
364
+ const shared = !custom && url === env().url;
365
+ switch (auth.kind) {
366
+ case "user": return createClient(url, env().publishableKey, {
367
+ accessToken: () => Promise.resolve(auth.token),
368
+ ...global
369
+ });
370
+ case "service": return shared ? serviceClient() : createClient(url, secretKey(), {
371
+ auth: STATELESS,
372
+ ...global
373
+ });
374
+ case "anon":
375
+ case "invalid":
376
+ if (!shared) return createClient(url, env().publishableKey, {
377
+ auth: STATELESS,
378
+ ...global
379
+ });
380
+ anonClient ??= createClient(url, env().publishableKey, {
381
+ auth: STATELESS,
382
+ ...sharedGlobal
383
+ });
384
+ return anonClient;
385
+ case "apiKey": return apiKeyClient();
386
+ default: return auth;
387
+ }
388
+ };
389
+ const supabaseFor = (auth, headers = {}) => supabaseAt(env().url, auth, headers);
390
+ const restUrls = /* @__PURE__ */ new Map();
391
+ const restUrl = (url) => {
392
+ let rest = restUrls.get(url);
393
+ if (rest === void 0) {
394
+ rest = new URL("rest/v1", url.endsWith("/") ? url : `${url}/`).href;
395
+ restUrls.set(url, rest);
396
+ }
397
+ return rest;
398
+ };
399
+ /**
400
+ * The client queries run on. Requests need only PostgREST, so they skip
401
+ * building Realtime, Storage and Auth clients per request; the shared service
402
+ * and anon clients for the primary are built once anyway.
403
+ */
404
+ const restAt = (url, auth, headers = {}) => {
405
+ let key;
406
+ let bearer;
407
+ switch (auth.kind) {
408
+ case "user":
409
+ key = env().publishableKey;
410
+ bearer = auth.token;
411
+ break;
412
+ case "service":
413
+ case "anon":
414
+ case "invalid":
415
+ if (Object.keys(headers).length === 0 && url === env().url) return supabaseAt(url, auth, headers);
416
+ key = auth.kind === "service" ? secretKey() : env().publishableKey;
417
+ bearer = key;
418
+ break;
419
+ case "apiKey": return apiKeyClient();
420
+ default: return auth;
421
+ }
422
+ return new PostgrestClient(restUrl(url), {
423
+ headers: {
424
+ ...headers,
425
+ apikey: key,
426
+ Authorization: `Bearer ${bearer}`
427
+ },
428
+ ...customFetch,
429
+ ...restOptions
430
+ });
431
+ };
432
+ return {
433
+ executorOptions,
434
+ tunedExecutor,
435
+ serviceClient,
436
+ readUrl,
437
+ apiKeyClient,
438
+ supabaseFor,
439
+ restAt
440
+ };
441
+ }
442
+ //#endregion
443
+ //#region src/server/entries/core.ts
444
+ const cores = /* @__PURE__ */ new WeakMap();
445
+ /** Records the core behind `server`, so `serverCore` finds it on copies too. */
446
+ function registerCore(server, core) {
447
+ cores.set(server, core);
448
+ }
449
+ /**
450
+ * Copies the registration from `from` to `to` (`extendServer` builds a new
451
+ * object).
452
+ */
453
+ function shareCore(from, to) {
454
+ const core = cores.get(from);
455
+ if (core) cores.set(to, core);
456
+ }
457
+ /** The core of a server built by `createServer` or one of the adapter factories. */
458
+ function serverCore(server) {
459
+ const core = cores.get(server);
460
+ if (!core) throw new TypeError("better-supabase: this server was not built by createServer(); pass the definition or a server from createServer");
461
+ return core;
462
+ }
463
+ const CALL = Symbol("better-supabase.call");
464
+ const supportLookups = /* @__PURE__ */ new WeakMap();
465
+ /**
466
+ * Starts the support lookup for a signed-in caller, so `withTenant` can run the
467
+ * tenant resolver while the support store answers. Other callers never have a
468
+ * support session, so they skip it.
469
+ */
470
+ function startSupportLookup(core, request, session) {
471
+ if (session.auth.kind !== "user" || supportLookups.has(session)) return;
472
+ const lookup = core.support(request, session.auth);
473
+ lookup.catch(() => void 0);
474
+ supportLookups.set(session, lookup);
475
+ }
476
+ /**
477
+ * The support session of a resolved request: the started lookup, else a new
478
+ * one.
479
+ */
480
+ function supportLookup(core, request, session) {
481
+ return supportLookups.get(session) ?? core.support(request, session.auth);
482
+ }
483
+ /** The call state on a context seeded by `server.context()`, if any. */
484
+ function callOf(ctx) {
485
+ return ctx[CALL];
486
+ }
487
+ //#endregion
488
+ //#region src/server/entries/context.ts
489
+ /**
490
+ * Entry contributing `ctx.bsb`, the request's `ServerContext`: `auth`, `db`,
491
+ * `sql`, `supabase`, `replica`, `stats()` and the rest, each built on first
492
+ * read. In a support session `auth`, `db` and `sql` are the target's.
493
+ */
494
+ function withServerContext(core) {
495
+ return defineMiddleware({
496
+ key: "bsb",
497
+ run: () => (request, ctx) => {
498
+ const options = callOf(ctx)?.options ?? {};
499
+ const bsb = core.context(ctx.session, request, ctx.support ? {
500
+ ...options,
501
+ support: ctx.support
502
+ } : options, ctx.tenant);
503
+ return Promise.resolve({ bsb });
504
+ }
505
+ })();
506
+ }
507
+ //#endregion
508
+ //#region src/server/refresh.ts
509
+ /**
510
+ * A router or browser prefetch, by its request headers: Next.js route and
511
+ * segment prefetches (`next-router-prefetch`, `next-router-segment-prefetch`),
512
+ * Next's middleware prefetch (`x-middleware-prefetch`), and browser and
513
+ * speculation-rules prefetches (`purpose`, `sec-purpose`, `x-moz`).
514
+ */
515
+ function isPrefetch(request) {
516
+ const h = request.headers;
517
+ return h.has("next-router-prefetch") || h.has("next-router-segment-prefetch") || h.get("x-middleware-prefetch") === "1" || h.get("purpose") === "prefetch" || h.get("x-moz") === "prefetch" || (h.get("sec-purpose")?.includes("prefetch") ?? false);
518
+ }
519
+ const FORM_TYPES = ["application/x-www-form-urlencoded", "multipart/form-data"];
520
+ /**
521
+ * Whether a request should refresh an expired session cookie: page loads,
522
+ * client navigations (`rsc`, `x-sveltekit-*`, `_data` loaders), form posts and
523
+ * Server Actions. Prefetches, assets and `fetch` calls from scripts read the
524
+ * session as it is, so a burst of parallel requests never races on the
525
+ * single-use refresh token.
526
+ */
527
+ function shouldRefresh(request) {
528
+ const h = request.headers;
529
+ if (request.method !== "GET" && request.method !== "HEAD") {
530
+ if (h.has("next-action") || h.has("x-sveltekit-action")) return true;
531
+ if (h.get("sec-fetch-dest") === "document") return true;
532
+ const type = h.get("content-type") ?? "";
533
+ return FORM_TYPES.some((form) => type.startsWith(form));
534
+ }
535
+ if (isPrefetch(request)) return false;
536
+ if (h.get("rsc") === "1") return true;
537
+ const dest = h.get("sec-fetch-dest");
538
+ if (dest) return dest === "document";
539
+ return h.get("accept")?.includes("text/html") ?? false;
540
+ }
541
+ /**
542
+ * Whether a request should ask the Auth server if the session still exists
543
+ * (`checkSession`): full page loads, and `paths` you list for client
544
+ * navigations. Never prefetches or mutations.
545
+ */
546
+ function shouldCheckSession(request, paths) {
547
+ if (request.method !== "GET" && request.method !== "HEAD") return false;
548
+ if (isPrefetch(request)) return false;
549
+ if (request.headers.get("sec-fetch-dest") === "document") return true;
550
+ return paths?.includes(new URL(request.url).pathname) ?? false;
551
+ }
552
+ /** `policy` for one request. */
553
+ function refreshFor(policy, request) {
554
+ if (policy === void 0 || typeof policy === "boolean") return policy;
555
+ return policy === "navigation" ? shouldRefresh(request) : policy(request);
556
+ }
557
+ //#endregion
558
+ //#region src/server/entries/session.ts
559
+ function checkFor(policy, request) {
560
+ if (policy === void 0 || typeof policy === "boolean") return policy ?? false;
561
+ return policy === "navigation" ? shouldCheckSession(request) : policy(request);
562
+ }
563
+ /**
564
+ * Runs `hook` for a resolution with an outage and returns its response when the
565
+ * session couldn't be kept.
566
+ */
567
+ async function outageResponse(hook, resolution, request, logger) {
568
+ const outage = resolution.outage;
569
+ if (!hook || !outage) return;
570
+ try {
571
+ const response = await hook(outage, request);
572
+ return outage.kept || !(response instanceof Response) ? void 0 : response;
573
+ } catch (cause) {
574
+ logger.warn("onAuthOutage threw", { cause });
575
+ return;
576
+ }
577
+ }
578
+ /**
579
+ * Appends `Max-Age=0` writes for the session cookie at the old scopes, and the
580
+ * no-store headers.
581
+ */
582
+ function clearOldScopes(response, request, name, scopes) {
583
+ const writes = clearSessionAtScopes(parseCookies(request.headers.get("cookie")), name, scopes);
584
+ if (writes.length === 0) return response;
585
+ const headers = new Headers(response.headers);
586
+ for (const write of writes) headers.append("set-cookie", serializeCookie(write));
587
+ for (const [key, value] of Object.entries(AUTH_CACHE_HEADERS)) headers.set(key, value);
588
+ return new Response(response.body, {
589
+ status: response.status,
590
+ statusText: response.statusText,
591
+ headers
592
+ });
593
+ }
594
+ /**
595
+ * Entry contributing `ctx.session`, the request's `AuthResolution`: a bearer
596
+ * token first, the session cookie second. It is the only entry with a response
597
+ * seam for cookies: on the way out it adds the refreshed session cookies and
598
+ * the no-store headers, and hands pending event sends to `waitUntil`.
599
+ */
600
+ function withSession(core, config = {}) {
601
+ return defineMiddleware({
602
+ key: "session",
603
+ run: () => async function* run(request, ctx) {
604
+ const call = callOf(ctx)?.options;
605
+ const refresh = call ? call.refresh ?? false : refreshFor(config.refresh, request);
606
+ const cookies = call ? call.cookies : config.cookies;
607
+ const checkSession = !call && checkFor(config.checkSession, request);
608
+ const session = await core.resolve(request, {
609
+ ...refresh === void 0 ? {} : { refresh },
610
+ ...cookies === void 0 ? {} : { cookies },
611
+ ...checkSession ? { checkSession } : {},
612
+ ...config.encode === void 0 ? {} : { encode: config.encode }
613
+ });
614
+ const outage = await outageResponse(config.onAuthOutage, session, request, core.events.logger);
615
+ if (outage) return session.apply(outage);
616
+ try {
617
+ const response = yield { session };
618
+ const applied = session.apply(response);
619
+ return config.cookieScopes?.length ? clearOldScopes(applied, request, core.sessionCookie(), config.cookieScopes) : applied;
620
+ } finally {
621
+ if (config.waitUntil && core.events.pending) config.waitUntil(core.events.settled());
622
+ }
623
+ }
624
+ })();
625
+ }
626
+ //#endregion
627
+ //#region src/server/entries/support.ts
628
+ /**
629
+ * Entry contributing `ctx.support`: the support session ("view as user") the
630
+ * request's support cookie names, when `ServerOptions.support` is set and the
631
+ * caller is the admin who started it. `undefined` otherwise.
632
+ */
633
+ function withSupport(core) {
634
+ return defineMiddleware({
635
+ key: "support",
636
+ run: () => async (request, ctx) => {
637
+ return { support: callOf(ctx)?.options.support ?? await supportLookup(core, request, ctx.session) };
638
+ }
639
+ })();
640
+ }
641
+ //#endregion
642
+ //#region src/server/entries/tenant.ts
643
+ /**
644
+ * Entry contributing `ctx.tenant`: the active tenant from
645
+ * `ServerOptions.tenant` (a URL slug, a header), or `undefined`. It becomes
646
+ * `context.tenant` for `membershipsExtension()`, the `better_supabase.tenant`
647
+ * setting over Postgres and the `x-bsb-tenant` header over PostgREST. It starts
648
+ * the support lookup that `withSupport` awaits, so both run at once.
649
+ */
650
+ function withTenant(core) {
651
+ return defineMiddleware({
652
+ key: "tenant",
653
+ run: () => async (request, ctx) => {
654
+ const options = callOf(ctx)?.options;
655
+ if (options?.support === void 0) startSupportLookup(core, request, ctx.session);
656
+ return { tenant: options?.tenant ?? await core.tenant(request, ctx.session.auth) };
657
+ }
658
+ })();
659
+ }
660
+ //#endregion
661
+ //#region src/server/lite.ts
662
+ /** Lite's default driver, the one `lite init` scaffolds. */
663
+ const DEFAULT_LITE_DRIVER = "sqlite-postgres";
664
+ /**
665
+ * Whether the driver stores data in SQLite, where Lite has no database
666
+ * functions.
667
+ */
668
+ function isSqliteDriver(driver) {
669
+ switch (driver) {
670
+ case "sqlite-postgres":
671
+ case "sqlite": return true;
672
+ case "pglite":
673
+ case "postgres": return false;
674
+ default: return driver;
675
+ }
676
+ }
677
+ function liteRpcUnavailable(driver) {
678
+ return `rpc() is not available on Supabase Lite with the ${driver} driver. Set [db] driver = "pglite" or "postgres" in supabase/config.toml, or call an HTTP endpoint instead.`;
679
+ }
680
+ /** What `backend: "lite"` changes in `createServer`; `undefined` for Supabase. */
681
+ function liteBackend(options, env) {
682
+ if (options.backend !== "lite") return;
683
+ const driver = options.liteDriver ?? DEFAULT_LITE_DRIVER;
684
+ if (options.postgres && driver !== "postgres") throw new TypeError(`Supabase Lite with the ${driver} driver has no Postgres connection for ctx.sql. Remove the postgres option, or run Lite with [db] driver = "postgres".`);
685
+ return {
686
+ auth() {
687
+ if (options.auth?.jwtSecret !== void 0) return options.auth;
688
+ const jwtSecret = env().jwtSecret;
689
+ if (jwtSecret === void 0) throw new TypeError("backend: \"lite\" needs SUPABASE_JWT_SECRET, the auth.jwt_secret Supabase Lite signs user tokens with");
690
+ return {
691
+ ...options.auth,
692
+ jwtSecret
693
+ };
694
+ },
695
+ rpcUnavailable: isSqliteDriver(driver) ? liteRpcUnavailable(driver) : void 0
696
+ };
697
+ }
698
+ //#endregion
699
+ //#region src/server/refusing-executor.ts
700
+ /**
701
+ * An executor for credentials that did not verify: every query, function call
702
+ * and batch answers `error`, so a handler that skips the route guard gets a 401
703
+ * `Result` and never queries as anon.
704
+ */
705
+ function refusingExecutor(error) {
706
+ const refuse = () => err(error);
707
+ return {
708
+ name: "refused",
709
+ functionSources: true,
710
+ execute: () => Promise.resolve(refuse()),
711
+ rpc: () => Promise.resolve(refuse()),
712
+ batch: (ops) => Promise.resolve(ops.map(() => refuse()))
713
+ };
714
+ }
715
+ //#endregion
716
+ //#region src/server/request-ids.ts
717
+ const REQUEST_ID_PATTERN = /^[A-Za-z0-9._:;,@/+=-]{1,128}$/;
718
+ function requestIdOrUndefined(value) {
719
+ return typeof value === "string" && REQUEST_ID_PATTERN.test(value) ? value : void 0;
720
+ }
721
+ function sessionWith(ids, tenant, readOnly = false) {
722
+ const settings = {
723
+ ...ids.requestId === void 0 ? {} : { "better_supabase.request_id": ids.requestId },
724
+ ...ids.correlationId === void 0 ? {} : { "better_supabase.correlation_id": ids.correlationId },
725
+ ...tenant === void 0 ? {} : { "better_supabase.tenant": tenant }
726
+ };
727
+ const hasSettings = Object.keys(settings).length > 0;
728
+ if (!hasSettings && !readOnly) return;
729
+ return {
730
+ ...readOnly ? { readOnly: true } : {},
731
+ ...hasSettings ? { settings } : {}
732
+ };
733
+ }
734
+ function requestIdPolicy(options = {}) {
735
+ const on = options !== false;
736
+ const settings = on ? options : {};
737
+ const requestHeader = (settings.requestHeader ?? "x-request-id").toLowerCase();
738
+ const correlationHeader = (settings.correlationHeader ?? "x-correlation-id").toLowerCase();
739
+ const incoming = on && (settings.incoming ?? true);
740
+ const generate = on && (settings.generate ?? true);
741
+ const generated = /* @__PURE__ */ new WeakMap();
742
+ const fromHeader = (request, name) => incoming && request ? requestIdOrUndefined(request.headers.get(name)) : void 0;
743
+ const generatedFor = (request) => {
744
+ if (!generate || !request) return;
745
+ const known = generated.get(request);
746
+ if (known !== void 0) return known;
747
+ const id = crypto.randomUUID();
748
+ generated.set(request, id);
749
+ return id;
750
+ };
751
+ return {
752
+ forRequest(request, explicit) {
753
+ const requestId = requestIdOrUndefined(explicit.requestId) ?? fromHeader(request, requestHeader) ?? generatedFor(request);
754
+ const correlationId = requestIdOrUndefined(explicit.correlationId) ?? fromHeader(request, correlationHeader) ?? requestId;
755
+ return {
756
+ ...requestId === void 0 ? {} : { requestId },
757
+ ...correlationId === void 0 ? {} : { correlationId }
758
+ };
759
+ },
760
+ headers: (ids) => ({
761
+ ...ids.requestId === void 0 ? {} : { [requestHeader]: ids.requestId },
762
+ ...ids.correlationId === void 0 ? {} : { [correlationHeader]: ids.correlationId }
763
+ })
764
+ };
765
+ }
766
+ //#endregion
767
+ //#region src/server/server-types.ts
768
+ /** The header `current_tenant_id()` reads over the Data API. */
769
+ const TENANT_HEADER = "x-bsb-tenant";
770
+ //#endregion
771
+ //#region src/server/sessions.ts
772
+ const ANON = {
773
+ kind: "anon",
774
+ reason: "none"
775
+ };
776
+ /**
777
+ * The verified state behind a snapshot this process built, `anon` once it
778
+ * expired, and `invalid` for a forged or deserialized one.
779
+ */
780
+ function authFor(session) {
781
+ const source = authOfSnapshot(session);
782
+ if (!source) return {
783
+ kind: "invalid",
784
+ reason: "token",
785
+ error: dbError("unauthorized", "The session snapshot is invalid")
786
+ };
787
+ if (session.expiresAt !== null && session.expiresAt * 1e3 <= Date.now()) return {
788
+ kind: "anon",
789
+ reason: "expired"
790
+ };
791
+ return source;
792
+ }
793
+ /** The members of `BetterServer` that the verified-session memo backs. */
794
+ function serverSessions(options) {
795
+ const memo = options.memo === false ? void 0 : sessionMemo((verified) => verified.auth.expiresAt, options.memo);
796
+ const verified = (auth, token) => {
797
+ if (auth.kind !== "user" || auth.token !== token) return null;
798
+ const snapshot = snapshotOf(auth);
799
+ return snapshot ? {
800
+ auth,
801
+ snapshot
802
+ } : null;
803
+ };
804
+ const snapshot = async (request) => {
805
+ const token = options.custom ? null : requestToken(request, options.cookieName(), options.cookies);
806
+ if (!token || !memo) {
807
+ const resolution = await options.resolve(request, { refresh: false });
808
+ return snapshotOf(resolution.auth);
809
+ }
810
+ return (await memo.get(token, async () => {
811
+ const resolution = await options.resolve(request, { refresh: false });
812
+ return verified(resolution.auth, token);
813
+ }))?.snapshot ?? null;
814
+ };
815
+ const contextFromSession = (session, contextOptions) => {
816
+ const auth = session ? authFor(session) : ANON;
817
+ return Promise.resolve(options.contextFor(auth, contextOptions ?? {}));
818
+ };
819
+ const evict = (userId) => {
820
+ memo?.evict((session) => session.auth.user.id === userId);
821
+ };
822
+ return {
823
+ snapshot,
824
+ contextFromSession,
825
+ sessions: {
826
+ stats: () => memo?.stats() ?? {
827
+ hits: 0,
828
+ misses: 0,
829
+ size: 0
830
+ },
831
+ seed: async (auth) => {
832
+ const found = auth.kind === "user" ? verified(auth, auth.token) : null;
833
+ if (found && memo) await memo.seed(found.auth.token, found);
834
+ },
835
+ evict,
836
+ clear: () => memo?.clear()
837
+ },
838
+ forgetSession: async (userId) => {
839
+ evict(userId);
840
+ await options.versions?.evict(userId);
841
+ }
842
+ };
843
+ }
844
+ //#endregion
845
+ //#region src/auth/support-cookie.ts
846
+ /** The cookie that carries the support session id. */
847
+ const SUPPORT_COOKIE = "bsb-support";
848
+ /**
849
+ * Seconds until the session expires, rounded up so the cookie never outlives it
850
+ * by less than a second.
851
+ */
852
+ function supportCookieMaxAge(session, now = Date.now()) {
853
+ return Math.max(0, Math.ceil((session.expiresAt.epochMilliseconds - now) / 1e3));
854
+ }
855
+ /**
856
+ * `Set-Cookie` for a session: HttpOnly, SameSite=Lax, gone when the session
857
+ * expires.
858
+ */
859
+ function supportCookie(session, options = {}, now = Date.now()) {
860
+ return cookieLine(options, encodeURIComponent(session.id), supportCookieMaxAge(session, now));
861
+ }
862
+ /** `Set-Cookie` that removes the support cookie. */
863
+ function clearSupportCookie(options = {}) {
864
+ return cookieLine(options, "", 0);
865
+ }
866
+ function cookieLine(options, value, maxAge) {
867
+ return [
868
+ `${options.name ?? "bsb-support"}=${value}`,
869
+ `Path=${options.path ?? "/"}`,
870
+ `Max-Age=${String(maxAge)}`,
871
+ "HttpOnly",
872
+ "SameSite=Lax",
873
+ ...options.secure === false ? [] : ["Secure"]
874
+ ].join("; ");
875
+ }
876
+ /** The support session id in a `Cookie` header, or `undefined`. */
877
+ function supportCookieValue(cookieHeader, name = SUPPORT_COOKIE) {
878
+ if (!cookieHeader) return;
879
+ for (const part of cookieHeader.split(";")) {
880
+ const index = part.indexOf("=");
881
+ if (index === -1 || part.slice(0, index).trim() !== name) continue;
882
+ let value;
883
+ try {
884
+ value = decodeURIComponent(part.slice(index + 1).trim());
885
+ } catch {
886
+ return;
887
+ }
888
+ return value === "" ? void 0 : value;
889
+ }
890
+ }
891
+ //#endregion
892
+ //#region src/server/support-off.ts
893
+ const NOT_CONFIGURED = "Support sessions need createServer(betterSupabase, { support: supportSessions({ store }) })";
894
+ const notConfigured = () => AsyncResult.err(dbError("unexpected", NOT_CONFIGURED));
895
+ /** `bsb.support` without `ServerOptions.support`: every call fails. */
896
+ const supportOff = {
897
+ start: notConfigured,
898
+ request: notConfigured,
899
+ approve: notConfigured,
900
+ stop: notConfigured,
901
+ revoke: notConfigured,
902
+ current: () => Promise.resolve(void 0),
903
+ resolve: () => Promise.resolve(void 0),
904
+ list: notConfigured,
905
+ expire: notConfigured,
906
+ expireRoute: () => () => Promise.resolve(problemResponse(dbError("unexpected", NOT_CONFIGURED))),
907
+ sessionIdOf: () => void 0,
908
+ clearCookie: () => clearSupportCookie()
909
+ };
910
+ //#endregion
911
+ //#region src/server/support-storage.ts
912
+ const VISIBLE_OBJECT = "select exists (select 1 from storage.objects o where o.bucket_id = $1 and o.name = $2) as visible";
913
+ const VISIBLE_OBJECTS = `select n.path from unnest($2::text[]) as n(path)
914
+ where exists (select 1 from storage.objects o where o.bucket_id = $1 and o.name = n.path)`;
915
+ const OBJECT_INFO = "select to_jsonb(o) as object from storage.objects o where o.bucket_id = $1 and o.name = $2";
916
+ const SEARCH = `select s.name, s.id::text as id, s.updated_at, s.created_at, s.last_accessed_at, s.metadata
917
+ from storage.search($1::text, $2::text, $3::int, $4::int, $5::int, $6::text, $7::text, $8::text) s`;
918
+ const SEARCH_V2 = `select s.key, s.name, s.id::text as id, s.updated_at, s.created_at, s.last_accessed_at, s.metadata
919
+ from storage.search_v2($1::text, $2::text, $3::int, $4::int, $5::text, $6::text, $7::text, $8::text) s`;
920
+ const SAVEPOINT = "better_supabase_support_write";
921
+ const INSERT_OBJECT = `insert into storage.objects (bucket_id, name, owner, owner_id, user_metadata)
922
+ values ($1, $2, $3::uuid, $4, $5::jsonb)`;
923
+ const CURRENT_VERSION_INDEX = `select exists (select 1 from pg_indexes
924
+ where schemaname = 'storage' and tablename = 'objects' and indexname = 'idx_objects_current_version') as versioned`;
925
+ const upsertObject = (versioned) => `${INSERT_OBJECT}
926
+ on conflict ${versioned ? "(bucket_id, name collate \"C\") where archived_at is null" : "(bucket_id, name)"} do update
927
+ set owner = excluded.owner, owner_id = excluded.owner_id, user_metadata = excluded.user_metadata`;
928
+ const SOURCE_OBJECT = "select name, owner_id from storage.objects where bucket_id = $1 and name = $2";
929
+ const MOVE_OBJECT = `update storage.objects
930
+ set bucket_id = $3, name = $4, owner = $5::uuid, owner_id = $6
931
+ where bucket_id = $1 and name = $2
932
+ returning name`;
933
+ const ALLOW_DELETE = "select set_config('storage.allow_delete_query', 'true', true)";
934
+ const DELETE_OBJECTS = "delete from storage.objects where bucket_id = $1 and name = any($2::text[]) returning name";
935
+ const OWN_UPLOAD = `update storage.objects set owner = $3::uuid, owner_id = $4
936
+ where bucket_id = $1 and name = $2 and user_metadata ->> 'supportSessionId' = $5`;
937
+ const OWN_COPY = `update storage.objects
938
+ set owner = $3::uuid, owner_id = $4, user_metadata = coalesce(user_metadata, '{}'::jsonb) || $5::jsonb
939
+ where bucket_id = $1 and name = $2 and owner_id is null`;
940
+ const ownSignedUpload = (versioned) => `update storage.objects
941
+ set owner = $3::uuid, owner_id = $4, user_metadata = coalesce(user_metadata, '{}'::jsonb) || $5::jsonb
942
+ where bucket_id = $1 and name = $2 and owner_id is null and updated_at >= $6::timestamptz${versioned ? " and archived_at is null" : ""}
943
+ returning name`;
944
+ const signedUploadOwner = (versioned) => `select owner_id, updated_at >= $3::timestamptz as recent
945
+ from storage.objects where bucket_id = $1 and name = $2${versioned ? " and archived_at is null" : ""}`;
946
+ const OWN_MOVE = `update storage.objects
947
+ set owner = $3::uuid, owner_id = $4, user_metadata = coalesce(user_metadata, '{}'::jsonb) || $5::jsonb
948
+ where bucket_id = $1 and name = $2 and owner_id is not distinct from $6`;
949
+ const UUID = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/i;
950
+ const STALE = {
951
+ name: "StorageApiError",
952
+ message: "The object was stored before the support session started",
953
+ status: 403,
954
+ statusCode: "403",
955
+ code: "AccessDenied"
956
+ };
957
+ const OWNED = {
958
+ name: "StorageApiError",
959
+ message: "The object belongs to another user",
960
+ status: 403,
961
+ statusCode: "403",
962
+ code: "AccessDenied"
963
+ };
964
+ const HIDDEN_URL = "Either the object does not exist or you do not have access to it";
965
+ const LIST_SORT_COLUMNS = /* @__PURE__ */ new Set([
966
+ "name",
967
+ "updated_at",
968
+ "created_at",
969
+ "last_accessed_at"
970
+ ]);
971
+ const LIST_V2_SORT_COLUMNS = /* @__PURE__ */ new Set([
972
+ "name",
973
+ "updated_at",
974
+ "created_at"
975
+ ]);
976
+ const FLAT_SORT_COLUMNS = /* @__PURE__ */ new Set(["updated_at", "created_at"]);
977
+ const SORT_ORDERS = /* @__PURE__ */ new Set(["asc", "desc"]);
978
+ const CURSOR_PARTS = {
979
+ l: "startAfter",
980
+ o: "sortOrder",
981
+ c: "sortColumn",
982
+ a: "sortColumnAfter"
983
+ };
984
+ const isCursorKey = (key) => Object.hasOwn(CURSOR_PARTS, key);
985
+ /**
986
+ * The path storage-js sends for an upload: no leading or trailing `/`, and no
987
+ * empty folders.
988
+ */
989
+ function normalizePath(path) {
990
+ return path.replaceAll(/^\/|\/$/g, "").replaceAll(/\/+/g, "/");
991
+ }
992
+ /** `undefined` for an empty string, which storage-api treats as absent. */
993
+ const filled = (value) => value === "" ? void 0 : value;
994
+ /** `LIKE` escaping as storage-api applies it. */
995
+ function escapeLike(text) {
996
+ return text.replaceAll("\\", "\\\\").replaceAll(/([%_])/g, "\\$1");
997
+ }
998
+ function iso(value) {
999
+ if (value instanceof Date) return value.toISOString();
1000
+ if (typeof value !== "string") return value;
1001
+ const time = Date.parse(value);
1002
+ return Number.isNaN(time) ? value : new Date(time).toISOString();
1003
+ }
1004
+ /** Storage-api's continuation token: `key:value` lines, base64 encoded. */
1005
+ function encodeCursor(cursor) {
1006
+ const text = Object.entries(CURSOR_PARTS).flatMap(([key, part]) => cursor[part] ? [`${key}:${cursor[part]}`] : []).join("\n");
1007
+ let binary = "";
1008
+ for (const byte of new TextEncoder().encode(text)) binary += String.fromCodePoint(byte);
1009
+ return btoa(binary);
1010
+ }
1011
+ function decodeCursor(token) {
1012
+ let text;
1013
+ try {
1014
+ text = new TextDecoder().decode(Uint8Array.from(atob(token), (char) => char.codePointAt(0) ?? 0));
1015
+ } catch {
1016
+ return;
1017
+ }
1018
+ const cursor = {
1019
+ startAfter: "",
1020
+ sortOrder: "asc"
1021
+ };
1022
+ for (const part of text.split("\n")) {
1023
+ const match = /^(\S):(.*)/.exec(part);
1024
+ const key = match?.[1];
1025
+ if (!key || !isCursorKey(key)) return;
1026
+ cursor[CURSOR_PARTS[key]] = match[2] ?? "";
1027
+ }
1028
+ return cursor;
1029
+ }
1030
+ const apiError = (status, message, code) => ({
1031
+ name: "StorageApiError",
1032
+ message,
1033
+ status,
1034
+ statusCode: String(status),
1035
+ code
1036
+ });
1037
+ const ownerOf = (userId) => UUID.test(userId) ? userId : null;
1038
+ const stampOf = (session) => ({
1039
+ supportSessionId: session.id,
1040
+ supportAdminId: session.adminId
1041
+ });
1042
+ const failed = (error) => ({
1043
+ data: null,
1044
+ error
1045
+ });
1046
+ /**
1047
+ * Storage answers a hidden object like a missing one: HTTP 400 with
1048
+ * `statusCode` 404.
1049
+ */
1050
+ const NOT_FOUND = {
1051
+ name: "StorageApiError",
1052
+ message: "Object not found",
1053
+ status: 400,
1054
+ statusCode: "404",
1055
+ code: "NoSuchKey"
1056
+ };
1057
+ const invalid = (message) => apiError(400, message, "InvalidRequest");
1058
+ /**
1059
+ * A database failure as a Storage `error` that `fromStorageError` passes
1060
+ * through unchanged.
1061
+ */
1062
+ function sqlFailure(cause) {
1063
+ const raw = fromPgError(cause);
1064
+ return {
1065
+ name: "DbError",
1066
+ ...raw ? mapDbError(raw) : toDbError(cause)
1067
+ };
1068
+ }
1069
+ /**
1070
+ * An RLS or duplicate failure of a dry run, as Storage reports it for the
1071
+ * target's own request.
1072
+ */
1073
+ function refusedWrite(cause) {
1074
+ const raw = fromPgError(cause);
1075
+ if (raw?.code === "42501") return apiError(403, raw.message === void 0 || raw.message.includes("row-level security") ? "new row violates row-level security policy" : raw.message, "AccessDenied");
1076
+ if (raw?.code === "23505") return apiError(409, "The resource already exists", "Duplicate");
1077
+ }
1078
+ async function settled(run) {
1079
+ try {
1080
+ return await run();
1081
+ } catch (cause) {
1082
+ return failed(sqlFailure(cause));
1083
+ }
1084
+ }
1085
+ function listProblem(options) {
1086
+ const { limit, offset, sortBy } = options;
1087
+ if (limit !== void 0 && (!Number.isInteger(limit) || limit < 1)) return "body/limit must be an integer of at least 1";
1088
+ if (offset !== void 0 && (!Number.isInteger(offset) || offset < 0)) return "body/offset must be an integer of at least 0";
1089
+ if (sortBy?.column !== void 0 && !LIST_SORT_COLUMNS.has(sortBy.column)) return "body/sortBy/column must be name, updated_at, created_at or last_accessed_at";
1090
+ if (sortBy?.order !== void 0 && !SORT_ORDERS.has(sortBy.order)) return "body/sortBy/order must be asc or desc";
1091
+ }
1092
+ function listV2Problem(options) {
1093
+ const { limit, sortBy } = options;
1094
+ if (limit !== void 0 && (!Number.isInteger(limit) || limit < 1)) return "body/limit must be an integer of at least 1";
1095
+ if (sortBy !== void 0 && !LIST_V2_SORT_COLUMNS.has(sortBy.column)) return "body/sortBy/column must be name, updated_at or created_at";
1096
+ if (sortBy?.order !== void 0 && !SORT_ORDERS.has(sortBy.order)) return "body/sortBy/order must be asc or desc";
1097
+ }
1098
+ /** The query storage-api runs for a `list-v2` page without a delimiter. */
1099
+ function flatPage(bucket, prefix, maxKeys, cursor, column, order) {
1100
+ const values = [bucket, maxKeys];
1101
+ const conditions = ["bucket_id = $1"];
1102
+ const sortColumn = column && FLAT_SORT_COLUMNS.has(column) ? column : void 0;
1103
+ const sortOrder = order && SORT_ORDERS.has(order) ? order : "asc";
1104
+ const operator = sortOrder === "asc" ? ">" : "<";
1105
+ const param = () => `$${String(values.length)}`;
1106
+ if (prefix) {
1107
+ values.push(`${escapeLike(prefix)}%`);
1108
+ conditions.push(`name like ${param()}`);
1109
+ }
1110
+ const startAfter = cursor?.startAfter;
1111
+ if (startAfter && sortColumn && cursor.sortColumnAfter) {
1112
+ values.push(cursor.sortColumnAfter);
1113
+ const afterParam = param();
1114
+ values.push(startAfter);
1115
+ conditions.push(`row(date_trunc('milliseconds', ${sortColumn}), name collate "C") ${operator} row(coalesce(nullif(${afterParam}, '')::timestamptz, 'epoch'::timestamptz), ${param()})`);
1116
+ } else if (startAfter) {
1117
+ values.push(startAfter);
1118
+ conditions.push(`name collate "C" ${operator} ${param()}`);
1119
+ }
1120
+ return {
1121
+ text: `select id::text as id, name, metadata, updated_at, created_at, last_accessed_at
1122
+ from storage.objects
1123
+ where ${conditions.join(" and ")}
1124
+ order by ${sortColumn ? `${sortColumn} ${sortOrder}, ` : ""}name collate "C" ${sortOrder}
1125
+ limit $2::int`,
1126
+ values
1127
+ };
1128
+ }
1129
+ /**
1130
+ * Groups the entries below the next delimiter into folders, as storage-api
1131
+ * does.
1132
+ */
1133
+ function delimited(entries, prefix) {
1134
+ const grouped = [];
1135
+ let previous = "";
1136
+ for (const entry of entries) {
1137
+ const name = String(entry["name"]);
1138
+ const index = name.replace(prefix, "").indexOf("/");
1139
+ if (index === -1) {
1140
+ grouped.push(entry);
1141
+ continue;
1142
+ }
1143
+ const folder = name.slice(0, prefix.length + index + 1);
1144
+ if (folder === previous) continue;
1145
+ previous = folder;
1146
+ grouped.push({
1147
+ id: null,
1148
+ name: folder
1149
+ });
1150
+ }
1151
+ return grouped;
1152
+ }
1153
+ const text = (value) => typeof value === "string" ? value : void 0;
1154
+ const metadataOf = (value) => isRecord(value) ? value : null;
1155
+ function listEntryOf(row) {
1156
+ return {
1157
+ name: String(row["name"]),
1158
+ id: text(row["id"]) ?? null,
1159
+ updated_at: text(iso(row["updated_at"])) ?? null,
1160
+ created_at: text(iso(row["created_at"])) ?? null,
1161
+ last_accessed_at: text(iso(row["last_accessed_at"])) ?? null,
1162
+ metadata: metadataOf(row["metadata"])
1163
+ };
1164
+ }
1165
+ function folderOf(row) {
1166
+ const name = String(row["name"]);
1167
+ const key = text(row["key"]);
1168
+ return {
1169
+ name: name.endsWith("/") ? name : `${name}/`,
1170
+ ...key === void 0 ? {} : { key }
1171
+ };
1172
+ }
1173
+ function objectOf(row) {
1174
+ const key = text(row["key"]);
1175
+ const lastAccessed = text(iso(row["last_accessed_at"]));
1176
+ return {
1177
+ name: String(row["name"]),
1178
+ ...key === void 0 ? {} : { key },
1179
+ id: text(row["id"]) ?? "",
1180
+ updated_at: text(iso(row["updated_at"])) ?? "",
1181
+ created_at: text(iso(row["created_at"])) ?? "",
1182
+ ...lastAccessed === void 0 ? {} : { last_accessed_at: lastAccessed },
1183
+ metadata: metadataOf(row["metadata"])
1184
+ };
1185
+ }
1186
+ function infoOf(row) {
1187
+ const metadata = isRecord(row["metadata"]) ? row["metadata"] : {};
1188
+ const size = metadata["size"];
1189
+ const contentType = text(metadata["mimetype"]);
1190
+ const cacheControl = text(metadata["cacheControl"]);
1191
+ const etag = text(metadata["eTag"]);
1192
+ const lastModified = text(iso(row["updated_at"]));
1193
+ const userMetadata = row["user_metadata"];
1194
+ const archivedAt = row["archived_at"];
1195
+ const deleteMarker = row["is_delete_marker"];
1196
+ const versioned = row["is_versioned"];
1197
+ return {
1198
+ id: text(row["id"]) ?? "",
1199
+ name: text(row["name"]) ?? "",
1200
+ version: text(row["version"]) ?? "",
1201
+ bucketId: text(row["bucket_id"]) ?? "",
1202
+ createdAt: text(iso(row["created_at"])) ?? "",
1203
+ ...typeof size === "number" ? { size } : {},
1204
+ ...contentType === void 0 ? {} : { contentType },
1205
+ ...cacheControl === void 0 ? {} : { cacheControl },
1206
+ ...etag === void 0 ? {} : { etag },
1207
+ ...lastModified === void 0 ? {} : { lastModified },
1208
+ ...isRecord(userMetadata) ? { metadata: userMetadata } : {},
1209
+ ...archivedAt === void 0 ? {} : { archivedAt: text(iso(archivedAt)) ?? null },
1210
+ ...typeof deleteMarker === "boolean" ? { isDeleteMarker: deleteMarker } : {},
1211
+ ...typeof versioned === "boolean" ? { isVersioned: versioned } : {}
1212
+ };
1213
+ }
1214
+ /**
1215
+ * Storage for a support session, with the same `from(bucket)` file API as
1216
+ * `supabase.storage`, so `bucket.connect()` and the blocks take it.
1217
+ *
1218
+ * Storage policies read `auth.uid()` from the request's token, and there is no
1219
+ * token for the target, so reads go through Postgres as the target. `exists`,
1220
+ * `info`, `list` and `listV2` run entirely there: the listings call the
1221
+ * invoker-rights `storage.search` functions storage-api calls, so RLS filters
1222
+ * each page as it would for the target's own request. `download` and the signed
1223
+ * URLs first check there that the target may see the object, then the service
1224
+ * client serves it. A hidden object answers like a missing one. `getPublicUrl`
1225
+ * is built without a check, as it is built without a request.
1226
+ *
1227
+ * In a writable session, `upload`, `update`, `remove`, `copy` and `move` first
1228
+ * run the row change Storage would make as the target, inside a savepoint that
1229
+ * is rolled back, so the policies on `storage.objects` decide as for the
1230
+ * target's own request. Then the service client writes, the admin connection
1231
+ * makes the target the owner of the stored object, and its `user_metadata`
1232
+ * records the session id and the admin's id. A refused dry run resolves to
1233
+ * Storage's `403`.
1234
+ *
1235
+ * `createSignedUploadUrl` runs the same dry run as `upload` before the service
1236
+ * client signs the URL. The object a browser uploads there has no owner, so
1237
+ * `claimSignedUpload(bucket, path)` finishes the upload: it checks again that
1238
+ * the target may insert at the path, then makes the target the owner of an
1239
+ * object without one that was stored after `session.startedAt`, and stamps the
1240
+ * session on its `user_metadata`. An older object, or one another user owns, is
1241
+ * refused with a `403`. `uploadToSignedUrl` claims what it stores and removes
1242
+ * it when the claim fails. Every write in a read-only session resolves to a
1243
+ * `403` `SUPPORT_READ_ONLY` error, and without `adminSql`, `session` or a `sql`
1244
+ * client with `transaction` to a `403` `SUPPORT_STORAGE_WRITES` error.
1245
+ */
1246
+ function supportStorage(options) {
1247
+ const readOnly = options.readOnly ?? true;
1248
+ const { adminSql, session, sql } = options;
1249
+ const writer = !readOnly && adminSql && session && sql.transaction ? {
1250
+ adminSql,
1251
+ session
1252
+ } : void 0;
1253
+ const refusal = readOnly ? apiError(403, "The support session is read-only", "SUPPORT_READ_ONLY") : apiError(403, "Storage writes in a support session need adminSql, session and a sql client with transaction", "SUPPORT_STORAGE_WRITES");
1254
+ const refuse = () => Promise.resolve(failed(refusal));
1255
+ const rows = (query, values) => sql.queryRaw(query, values);
1256
+ let versioned;
1257
+ const isVersioned = () => versioned ??= rows(CURRENT_VERSION_INDEX, []).then(([row]) => row?.["versioned"] === true).catch((cause) => {
1258
+ versioned = void 0;
1259
+ throw cause;
1260
+ });
1261
+ const upsertStatement = () => isVersioned().then(upsertObject);
1262
+ const rehearse = async (run) => {
1263
+ if (!sql.transaction) return refusal;
1264
+ try {
1265
+ return await sql.transaction(async (client) => {
1266
+ await client.queryRaw(`savepoint ${SAVEPOINT}`);
1267
+ try {
1268
+ return await run(client);
1269
+ } finally {
1270
+ await client.queryRaw(`rollback to savepoint ${SAVEPOINT}`);
1271
+ }
1272
+ });
1273
+ } catch (cause) {
1274
+ const refused = refusedWrite(cause);
1275
+ if (refused) return refused;
1276
+ throw cause;
1277
+ }
1278
+ };
1279
+ const rehearseStore = (bucket, active, name, statement, metadata) => rehearse(async (client) => {
1280
+ await client.queryRaw(statement, [
1281
+ bucket,
1282
+ name,
1283
+ ownerOf(active.targetUserId),
1284
+ active.targetUserId,
1285
+ JSON.stringify(metadata)
1286
+ ]);
1287
+ return null;
1288
+ });
1289
+ const claimFor = async (bucket, { adminSql: ownerSql, session: active }, name) => {
1290
+ const objectVersioned = await isVersioned();
1291
+ const since = active.startedAt.toString();
1292
+ const own = async () => {
1293
+ const [claimed] = await ownerSql.queryRaw(ownSignedUpload(objectVersioned), [
1294
+ bucket,
1295
+ name,
1296
+ ownerOf(active.targetUserId),
1297
+ active.targetUserId,
1298
+ JSON.stringify(stampOf(active)),
1299
+ since
1300
+ ]);
1301
+ return claimed !== void 0;
1302
+ };
1303
+ const inspect = async () => {
1304
+ const [found] = await ownerSql.queryRaw(signedUploadOwner(objectVersioned), [
1305
+ bucket,
1306
+ name,
1307
+ since
1308
+ ]);
1309
+ return found;
1310
+ };
1311
+ if (await own()) return {
1312
+ data: { path: name },
1313
+ error: null
1314
+ };
1315
+ let found = await inspect();
1316
+ if (found?.["owner_id"] === null && found["recent"] === true) {
1317
+ if (await own()) return {
1318
+ data: { path: name },
1319
+ error: null
1320
+ };
1321
+ found = await inspect();
1322
+ }
1323
+ if (!found) return failed(NOT_FOUND);
1324
+ if (found["owner_id"] === active.targetUserId) return {
1325
+ data: { path: name },
1326
+ error: null
1327
+ };
1328
+ return found["recent"] === true ? failed(OWNED) : failed(STALE);
1329
+ };
1330
+ const claimSignedUpload = (bucket, path) => {
1331
+ if (!writer) return refuse();
1332
+ return settled(async () => {
1333
+ const name = normalizePath(path);
1334
+ const active = writer.session;
1335
+ const refused = await rehearse(async (client) => {
1336
+ try {
1337
+ await client.queryRaw(INSERT_OBJECT, [
1338
+ bucket,
1339
+ name,
1340
+ ownerOf(active.targetUserId),
1341
+ active.targetUserId,
1342
+ JSON.stringify(stampOf(active))
1343
+ ]);
1344
+ } catch (cause) {
1345
+ if (fromPgError(cause)?.code === "23505") return null;
1346
+ throw cause;
1347
+ }
1348
+ return NOT_FOUND;
1349
+ });
1350
+ if (refused) return failed(refused);
1351
+ return claimFor(bucket, writer, name);
1352
+ });
1353
+ };
1354
+ return {
1355
+ claimSignedUpload,
1356
+ from(bucket) {
1357
+ const admin = () => options.admin.from(bucket);
1358
+ const visible = async (path) => {
1359
+ const [row] = await rows(VISIBLE_OBJECT, [bucket, path]);
1360
+ return row?.["visible"] === true;
1361
+ };
1362
+ const checked = (path, read) => settled(async () => {
1363
+ const name = normalizePath(path);
1364
+ if (!await visible(name)) return failed(NOT_FOUND);
1365
+ return read(name);
1366
+ });
1367
+ const list = (path, listOptions = {}) => settled(async () => {
1368
+ const problem = listProblem(listOptions);
1369
+ if (problem) return failed(invalid(problem));
1370
+ let prefix = path ?? "";
1371
+ if (prefix.length > 0 && !prefix.endsWith("/")) prefix = `${prefix}/`;
1372
+ const column = listOptions.sortBy?.column ?? "name";
1373
+ const escape = column !== "name";
1374
+ const safePrefix = escape ? escapeLike(prefix) : prefix;
1375
+ const search = listOptions.search ?? "";
1376
+ const safeSearch = escape ? escapeLike(search) : search;
1377
+ return {
1378
+ data: (await rows(SEARCH, [
1379
+ safePrefix,
1380
+ bucket,
1381
+ listOptions.limit ?? 100,
1382
+ (safePrefix + safeSearch).split("/").length,
1383
+ listOptions.offset ?? 0,
1384
+ safeSearch,
1385
+ column,
1386
+ listOptions.sortBy?.order ?? "asc"
1387
+ ])).map(listEntryOf),
1388
+ error: null
1389
+ };
1390
+ });
1391
+ const listV2 = (listOptions = {}) => settled(async () => {
1392
+ const problem = listV2Problem(listOptions);
1393
+ if (problem) return failed(invalid(problem));
1394
+ const limit = Math.min(listOptions.limit ?? 1e3, 1e3);
1395
+ const prefix = listOptions.prefix ?? "";
1396
+ const cursor = listOptions.cursor ? decodeCursor(listOptions.cursor) : void 0;
1397
+ if (listOptions.cursor && !cursor) return failed(apiError(400, "Invalid continuation token", "InvalidParameter"));
1398
+ const sortOrder = filled(cursor?.sortOrder) ?? listOptions.sortBy?.order;
1399
+ const sortColumn = filled(cursor?.sortColumn) ?? listOptions.sortBy?.column;
1400
+ let found;
1401
+ if (listOptions.with_delimiter) found = await rows(SEARCH_V2, [
1402
+ prefix,
1403
+ bucket,
1404
+ limit + 1,
1405
+ prefix ? prefix.split("/").length : 1,
1406
+ cursor?.startAfter ?? "",
1407
+ sortOrder ?? "asc",
1408
+ sortColumn ?? "name",
1409
+ filled(cursor?.sortColumnAfter) ?? null
1410
+ ]);
1411
+ else {
1412
+ const page = flatPage(bucket, listOptions.prefix, limit + 1, cursor, sortColumn, sortOrder);
1413
+ found = await rows(page.text, page.values);
1414
+ }
1415
+ const entries = listOptions.with_delimiter ? delimited(found, prefix) : found;
1416
+ const hasNext = entries.length > limit;
1417
+ const count = hasNext ? limit : entries.length;
1418
+ const folders = [];
1419
+ const objects = [];
1420
+ for (const entry of entries.slice(0, count)) if (entry["id"] === null || entry["id"] === void 0) folders.push(folderOf(entry));
1421
+ else objects.push(objectOf(entry));
1422
+ const last = entries[count - 1];
1423
+ const after = last && sortColumn && sortColumn !== "name" ? iso(last[sortColumn]) : void 0;
1424
+ const nextCursor = hasNext && last ? encodeCursor({
1425
+ startAfter: String(last["name"]),
1426
+ ...sortOrder ? { sortOrder } : {},
1427
+ ...sortColumn ? { sortColumn } : {},
1428
+ ...typeof after === "string" ? { sortColumnAfter: new Date(after).toISOString() } : {}
1429
+ }) : void 0;
1430
+ return {
1431
+ data: {
1432
+ hasNext,
1433
+ ...nextCursor === void 0 ? {} : { nextCursor },
1434
+ folders,
1435
+ objects
1436
+ },
1437
+ error: null
1438
+ };
1439
+ });
1440
+ const createSignedUploadUrl = (path, uploadOptions) => {
1441
+ if (!writer) return refuse();
1442
+ return settled(async () => {
1443
+ const name = normalizePath(path);
1444
+ const statement = uploadOptions?.upsert === true ? await upsertStatement() : INSERT_OBJECT;
1445
+ const refused = await rehearseStore(bucket, writer.session, name, statement, stampOf(writer.session));
1446
+ if (refused) return failed(refused);
1447
+ return admin().createSignedUploadUrl(name, uploadOptions);
1448
+ });
1449
+ };
1450
+ const uploadToSignedUrl = (path, token, body, fileOptions = {}) => {
1451
+ if (!writer) return refuse();
1452
+ return settled(async () => {
1453
+ const name = normalizePath(path);
1454
+ const metadata = {
1455
+ ...fileOptions.metadata,
1456
+ ...stampOf(writer.session)
1457
+ };
1458
+ const statement = fileOptions.upsert === true ? await upsertStatement() : INSERT_OBJECT;
1459
+ const refused = await rehearseStore(bucket, writer.session, name, statement, metadata);
1460
+ if (refused) return failed(refused);
1461
+ const reply = await admin().uploadToSignedUrl(name, token, body, {
1462
+ ...fileOptions,
1463
+ metadata
1464
+ });
1465
+ if (reply.error) return reply;
1466
+ const claimed = await claimFor(bucket, writer, name).catch((cause) => failed(sqlFailure(cause)));
1467
+ if (claimed.error) {
1468
+ await admin().remove([name]);
1469
+ return claimed;
1470
+ }
1471
+ return reply;
1472
+ });
1473
+ };
1474
+ const store = (method) => (path, body, fileOptions = {}) => {
1475
+ if (!writer) return refuse();
1476
+ const { adminSql: ownerSql, session: active } = writer;
1477
+ return settled(async () => {
1478
+ const name = normalizePath(path);
1479
+ const owner = ownerOf(active.targetUserId);
1480
+ const metadata = {
1481
+ ...fileOptions.metadata,
1482
+ ...stampOf(active)
1483
+ };
1484
+ const statement = method === "update" || fileOptions.upsert === true ? await upsertStatement() : INSERT_OBJECT;
1485
+ const refused = await rehearseStore(bucket, active, name, statement, metadata);
1486
+ if (refused) return failed(refused);
1487
+ const reply = await admin()[method](name, body, {
1488
+ ...fileOptions,
1489
+ metadata
1490
+ });
1491
+ if (reply.error) return reply;
1492
+ try {
1493
+ await ownerSql.queryRaw(OWN_UPLOAD, [
1494
+ bucket,
1495
+ name,
1496
+ owner,
1497
+ active.targetUserId,
1498
+ active.id
1499
+ ]);
1500
+ } catch (cause) {
1501
+ await admin().remove([name]);
1502
+ return failed(sqlFailure(cause));
1503
+ }
1504
+ return reply;
1505
+ });
1506
+ };
1507
+ const relocate = (method) => (from, to, destination = {}) => {
1508
+ if (!writer) return refuse();
1509
+ const { adminSql: ownerSql, session: active } = writer;
1510
+ return settled(async () => {
1511
+ const source = normalizePath(from);
1512
+ const name = normalizePath(to);
1513
+ const target = destination.destinationBucket ?? bucket;
1514
+ const owner = ownerOf(active.targetUserId);
1515
+ const stamp = JSON.stringify(stampOf(active));
1516
+ let previousOwner = null;
1517
+ const refused = await rehearse(async (client) => {
1518
+ const [found] = await client.queryRaw(SOURCE_OBJECT, [bucket, source]);
1519
+ if (!found) return NOT_FOUND;
1520
+ previousOwner = text(found["owner_id"]) ?? null;
1521
+ if (method === "copy") {
1522
+ await client.queryRaw(INSERT_OBJECT, [
1523
+ target,
1524
+ name,
1525
+ owner,
1526
+ active.targetUserId,
1527
+ stamp
1528
+ ]);
1529
+ return null;
1530
+ }
1531
+ const [moved] = await client.queryRaw(MOVE_OBJECT, [
1532
+ bucket,
1533
+ source,
1534
+ target,
1535
+ name,
1536
+ owner,
1537
+ active.targetUserId
1538
+ ]);
1539
+ return moved ? null : NOT_FOUND;
1540
+ });
1541
+ if (refused) return failed(refused);
1542
+ const reply = await admin()[method](source, name, destination);
1543
+ if (reply.error) return reply;
1544
+ try {
1545
+ await (method === "copy" ? ownerSql.queryRaw(OWN_COPY, [
1546
+ target,
1547
+ name,
1548
+ owner,
1549
+ active.targetUserId,
1550
+ stamp
1551
+ ]) : ownerSql.queryRaw(OWN_MOVE, [
1552
+ target,
1553
+ name,
1554
+ owner,
1555
+ active.targetUserId,
1556
+ stamp,
1557
+ previousOwner
1558
+ ]));
1559
+ } catch (cause) {
1560
+ const written = options.admin.from(target);
1561
+ await (method === "copy" ? written.remove([name]) : written.move(name, source, { destinationBucket: bucket }));
1562
+ return failed(sqlFailure(cause));
1563
+ }
1564
+ return reply;
1565
+ });
1566
+ };
1567
+ const remove = (paths) => {
1568
+ if (!writer) return refuse();
1569
+ return settled(async () => {
1570
+ const entries = paths.map((entry) => typeof entry === "string" ? normalizePath(entry) : {
1571
+ ...entry,
1572
+ path: normalizePath(entry.path)
1573
+ });
1574
+ const names = entries.map((entry) => typeof entry === "string" ? entry : entry.path);
1575
+ const removable = /* @__PURE__ */ new Set();
1576
+ const refused = await rehearse(async (client) => {
1577
+ await client.queryRaw(ALLOW_DELETE);
1578
+ const deleted = await client.queryRaw(DELETE_OBJECTS, [bucket, [...new Set(names)]]);
1579
+ for (const row of deleted) removable.add(String(row["name"]));
1580
+ return null;
1581
+ });
1582
+ if (refused) return failed(refused);
1583
+ const permitted = entries.filter((_, index) => removable.has(names[index] ?? ""));
1584
+ if (permitted.length === 0) return {
1585
+ data: [],
1586
+ error: null
1587
+ };
1588
+ return admin().remove(permitted);
1589
+ });
1590
+ };
1591
+ return {
1592
+ exists: (path) => settled(async () => ({
1593
+ data: await visible(normalizePath(path)),
1594
+ error: null
1595
+ })).then((reply) => reply.error === null ? reply : {
1596
+ data: false,
1597
+ error: reply.error
1598
+ }),
1599
+ info: (path, infoOptions) => settled(async () => {
1600
+ const versionId = infoOptions?.versionId;
1601
+ const name = normalizePath(path);
1602
+ const [row] = await rows(versionId === void 0 ? OBJECT_INFO : `${OBJECT_INFO} and o.version = $3`, versionId === void 0 ? [bucket, name] : [
1603
+ bucket,
1604
+ name,
1605
+ versionId
1606
+ ]);
1607
+ const object = row?.["object"];
1608
+ return isRecord(object) ? {
1609
+ data: infoOf(object),
1610
+ error: null
1611
+ } : failed(NOT_FOUND);
1612
+ }),
1613
+ download: (path, downloadOptions, parameters) => checked(path, (name) => admin().download(name, downloadOptions, parameters)),
1614
+ createSignedUrl: (path, expiresIn, urlOptions) => checked(path, (name) => admin().createSignedUrl(name, expiresIn, urlOptions)),
1615
+ createSignedUrls: (paths, expiresIn, urlOptions) => settled(async () => {
1616
+ const names = paths.map(normalizePath);
1617
+ const seen = new Set((await rows(VISIBLE_OBJECTS, [bucket, names])).map((row) => String(row["path"])));
1618
+ const shown = [...new Set(names.filter((name) => seen.has(name)))];
1619
+ const signed = /* @__PURE__ */ new Map();
1620
+ if (shown.length > 0) {
1621
+ const reply = await admin().createSignedUrls(shown, expiresIn, urlOptions);
1622
+ if (reply.error) return failed(reply.error);
1623
+ for (const entry of reply.data) if (entry.path !== null) signed.set(entry.path, entry);
1624
+ }
1625
+ return {
1626
+ data: names.map((name) => signed.get(name) ?? {
1627
+ error: HIDDEN_URL,
1628
+ path: name,
1629
+ signedUrl: null
1630
+ }),
1631
+ error: null
1632
+ };
1633
+ }),
1634
+ getPublicUrl: (path, urlOptions) => admin().getPublicUrl(path, urlOptions),
1635
+ list,
1636
+ listV2,
1637
+ upload: store("upload"),
1638
+ update: store("update"),
1639
+ createSignedUploadUrl,
1640
+ uploadToSignedUrl,
1641
+ remove,
1642
+ copy: relocate("copy"),
1643
+ move: relocate("move"),
1644
+ purgeCache: (path, cacheOptions, parameters) => writer ? checked(path, (name) => admin().purgeCache(name, cacheOptions, parameters)) : refuse()
1645
+ };
1646
+ }
1647
+ };
1648
+ }
1649
+ //#endregion
1650
+ //#region src/server/server.ts
1651
+ /** The header `better_supabase.acting_member()` reads for a service caller. */
1652
+ const ACTOR_HEADER = "x-bsb-actor";
1653
+ /** The environment as `getEnv` resolves it, one variable at a time. */
1654
+ const RUNTIME_ENV = new Proxy({}, { get: (_target, key) => typeof key === "string" ? getEnv(key) : void 0 });
1655
+ /**
1656
+ * `options.env` as given when it is loaded already, parsed when it is a
1657
+ * variable map (never merged with the runtime's), else the runtime's.
1658
+ */
1659
+ function envOf(env) {
1660
+ if (env === void 0) return loadEnv(RUNTIME_ENV);
1661
+ return isLoadedEnv(env) ? env : loadEnv(env);
1662
+ }
1663
+ /**
1664
+ * An `EnvSource` holds only strings, so a `URL` in `jwksUrl` means a loaded
1665
+ * env.
1666
+ */
1667
+ function isLoadedEnv(env) {
1668
+ return env.jwksUrl instanceof URL;
1669
+ }
1670
+ const needsPostgres = (method) => dbError("invalid_request", `${method} needs createServer(betterSupabase, { postgres: createPostgres() })`);
1671
+ /**
1672
+ * A framework adapter's server: `server` plus the adapter's own methods,
1673
+ * without reading the lazy `env` getter. `extra` can't replace a `BetterServer`
1674
+ * method.
1675
+ */
1676
+ function extendServer(server, extra) {
1677
+ const extended = Object.defineProperties({}, {
1678
+ ...Object.getOwnPropertyDescriptors(server),
1679
+ ...Object.getOwnPropertyDescriptors(extra)
1680
+ });
1681
+ shareCore(server, extended);
1682
+ return extended;
1683
+ }
1684
+ /**
1685
+ * Server-side entry point for APIs, jobs, MCP servers and framework adapters.
1686
+ * Holds the secrets; `betterSupabase` stays isomorphic.
1687
+ */
1688
+ function createServer(betterSupabase, options = {}) {
1689
+ const credentials = options.credentials === void 0 ? {} : { credentials: credentialProviderOf(options.credentials) };
1690
+ let loaded;
1691
+ const env = () => loaded ??= envOf(options.env);
1692
+ const lite = liteBackend(options, env);
1693
+ if (lite === void 0 && (options.prefetchJwks ?? defaultPrefetchJwks()) && options.auth?.jwks === void 0) try {
1694
+ prefetchJwks({
1695
+ ...options.auth,
1696
+ env: env()
1697
+ });
1698
+ } catch {}
1699
+ const { executorOptions, tunedExecutor, serviceClient, readUrl, apiKeyClient, supabaseFor, restAt } = createClients({
1700
+ options,
1701
+ env,
1702
+ definitionExecutor: betterSupabase.executorOptions(),
1703
+ lite,
1704
+ createClient
1705
+ });
1706
+ /** `$client` stays the full Supabase client, built when first read. */
1707
+ const withLazyClient = (db, client) => Object.defineProperty(db, "$client", {
1708
+ get: client,
1709
+ enumerable: true,
1710
+ configurable: true
1711
+ });
1712
+ const dbFor = (auth, context = {}) => {
1713
+ let supabase;
1714
+ const rest = restAt(env().url, auth);
1715
+ const storage = { from: (bucket) => (supabase ??= supabaseFor(auth)).storage.from(bucket) };
1716
+ const db = betterSupabase.connect(rest, {
1717
+ ...authContext(auth),
1718
+ ...context
1719
+ }, auth.kind === "invalid" ? {
1720
+ executor: refusingExecutor(auth.error),
1721
+ storage
1722
+ } : tunedExecutor ? {
1723
+ executor: postgrestExecutor(rest, executorOptions),
1724
+ storage
1725
+ } : { storage });
1726
+ return withLazyClient(db, () => supabase ??= supabaseFor(auth));
1727
+ };
1728
+ const sqlFor = (claims, context, stats, session, storage) => {
1729
+ if (!options.postgres) throw new TypeError("Direct Postgres access needs createServer(betterSupabase, { postgres: createPostgres() })");
1730
+ return betterSupabase.connect(session ? options.postgres.executorFor(claims, session) : options.postgres.executorFor(claims), context, {
1731
+ ...stats ? { stats } : {},
1732
+ ...storage ? { storage } : {}
1733
+ });
1734
+ };
1735
+ /** `ServerOptions.tenant` outside `context()`, where it can't be awaited. */
1736
+ const syncTenant = (request, auth) => {
1737
+ const tenant = options.tenant?.(request, auth);
1738
+ if (tenant !== void 0 && typeof tenant !== "string") throw new TypeError("ServerOptions.tenant returned a promise: use context(request), or pass { tenant } to contextFromResolution");
1739
+ return tenant;
1740
+ };
1741
+ const pinMs = options.replicas?.pinMs ?? 5e3;
1742
+ const idPolicy = requestIdPolicy(options.requestIds);
1743
+ if (options.support && !options.postgres) throw new TypeError("Support sessions need createServer(betterSupabase, { postgres: createPostgres(), support })");
1744
+ const hooksProblem = options.authorization === void 0 ? void 0 : hooksApiProblem(options.authorization);
1745
+ if (hooksProblem !== void 0) throw new TypeError(hooksProblem);
1746
+ const audit = serverAudit(betterSupabase, options.audit);
1747
+ const support = options.support ? options.support.create(betterSupabase.events, options.auth?.claims ?? betterSupabase.claimsSchema, betterSupabase.temporal, options.authorization) : supportOff;
1748
+ /**
1749
+ * The target's context in a support session. Queries run over direct Postgres
1750
+ * with the target's claims plus `act`, read-only unless the session allows
1751
+ * writes; nothing reaches Supabase with the admin's token.
1752
+ */
1753
+ const supportContextFor = (resolution, active, parent, tenant, ids) => {
1754
+ const { session, claims } = active;
1755
+ const record = (key) => {
1756
+ const value = claims[key];
1757
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? Object.fromEntries(Object.entries(value)) : void 0;
1758
+ };
1759
+ const appMetadata = record("app_metadata");
1760
+ const userMetadata = record("user_metadata");
1761
+ const user = {
1762
+ id: session.targetUserId,
1763
+ role: typeof claims["role"] === "string" ? claims["role"] : "authenticated",
1764
+ ...typeof claims["email"] === "string" ? { email: claims["email"] } : {},
1765
+ ...appMetadata ? { appMetadata } : {},
1766
+ ...userMetadata ? { userMetadata } : {}
1767
+ };
1768
+ const auth = {
1769
+ kind: "user",
1770
+ token: "",
1771
+ claims,
1772
+ user,
1773
+ source: "support",
1774
+ expiresAt: Math.floor(session.expiresAt.epochMilliseconds / 1e3)
1775
+ };
1776
+ const scope = tenant ?? session.tenant;
1777
+ const base = userContext(user, claims);
1778
+ const context = scope === void 0 ? base : {
1779
+ ...base,
1780
+ tenant: scope
1781
+ };
1782
+ const sessionOptions = sessionWith(ids, scope, session.readOnly);
1783
+ const recorder = new StatsRecorder(parent);
1784
+ const sqlClaims = claims;
1785
+ const unavailable = () => {
1786
+ throw new TypeError("ctx.supabase and ctx.db.$client are not available in a support session; ctx.db and ctx.sql run as the target");
1787
+ };
1788
+ let db;
1789
+ let sql;
1790
+ let storage;
1791
+ const targetStorage = () => {
1792
+ const postgres = options.postgres;
1793
+ if (!postgres) throw new TypeError("Support sessions need createServer(betterSupabase, { postgres: createPostgres(), support })");
1794
+ let asTarget;
1795
+ const target = () => asTarget ??= postgres.asUser(sqlClaims, sessionOptions);
1796
+ storage ??= supportStorage({
1797
+ admin: { from: (bucket) => serviceClient().storage.from(bucket) },
1798
+ sql: {
1799
+ queryRaw: (text, params) => target().queryRaw(text, params),
1800
+ transaction: (fn) => target().transaction?.(fn) ?? Promise.reject(/* @__PURE__ */ new TypeError("The target's SQL client has no transaction"))
1801
+ },
1802
+ adminSql: postgres.admin,
1803
+ session,
1804
+ readOnly: session.readOnly
1805
+ });
1806
+ return storage;
1807
+ };
1808
+ return {
1809
+ ...credentials,
1810
+ ...ids,
1811
+ memo: requestMemo(),
1812
+ auth,
1813
+ resolution,
1814
+ support: active,
1815
+ get storage() {
1816
+ return targetStorage();
1817
+ },
1818
+ get supabase() {
1819
+ return unavailable();
1820
+ },
1821
+ get db() {
1822
+ db ??= Object.defineProperty(sqlFor(sqlClaims, context, recorder, sessionOptions, targetStorage()), "$client", {
1823
+ get: unavailable,
1824
+ enumerable: true,
1825
+ configurable: true
1826
+ });
1827
+ return db;
1828
+ },
1829
+ get sql() {
1830
+ sql ??= sqlFor(sqlClaims, context, recorder, sessionOptions, targetStorage());
1831
+ return sql;
1832
+ },
1833
+ replica: void 0,
1834
+ stats: () => recorder.snapshot(),
1835
+ apply: (response) => resolution.apply(response),
1836
+ cookies: () => resolution.cookies
1837
+ };
1838
+ };
1839
+ /**
1840
+ * An API key's context. There is no JWT for PostgREST, so `ctx.db` and
1841
+ * `ctx.sql` run over direct Postgres with the key's synthesized claims,
1842
+ * scoped to its organization unless the tenant option names another.
1843
+ */
1844
+ const apiKeyContextFor = (resolution, auth, parent, tenant, ids) => {
1845
+ const scope = tenant ?? auth.organizationId;
1846
+ const base = authContext(auth);
1847
+ const context = scope === void 0 ? base : {
1848
+ ...base,
1849
+ tenant: scope
1850
+ };
1851
+ const session = sessionWith(ids, scope);
1852
+ const recorder = new StatsRecorder(parent);
1853
+ let db;
1854
+ let sql;
1855
+ return {
1856
+ ...credentials,
1857
+ ...ids,
1858
+ memo: requestMemo(),
1859
+ auth: resolution.auth,
1860
+ resolution,
1861
+ get supabase() {
1862
+ return apiKeyClient();
1863
+ },
1864
+ get db() {
1865
+ db ??= Object.defineProperty(sqlFor(auth.claims, context, recorder, session), "$client", {
1866
+ get: apiKeyClient,
1867
+ enumerable: true,
1868
+ configurable: true
1869
+ });
1870
+ return db;
1871
+ },
1872
+ get sql() {
1873
+ sql ??= sqlFor(auth.claims, context, recorder, session);
1874
+ return sql;
1875
+ },
1876
+ replica: void 0,
1877
+ stats: () => recorder.snapshot(),
1878
+ apply: (response) => resolution.apply(response),
1879
+ cookies: () => resolution.cookies
1880
+ };
1881
+ };
1882
+ /**
1883
+ * Clients and repositories are built on first access: most scopes use one of
1884
+ * them.
1885
+ */
1886
+ const contextFor = (resolution, requestHeaders, parent, until = 0, tenant, active, ids = {}) => {
1887
+ if (active) return supportContextFor(resolution, active, parent, tenant, ids);
1888
+ const { auth } = resolution;
1889
+ if (auth.kind === "apiKey") return apiKeyContextFor(resolution, auth, parent, tenant, ids);
1890
+ const context = tenant === void 0 ? authContext(auth) : {
1891
+ ...authContext(auth),
1892
+ tenant
1893
+ };
1894
+ const clientHeaders = tenant === void 0 ? requestHeaders : {
1895
+ ...requestHeaders,
1896
+ [TENANT_HEADER]: tenant
1897
+ };
1898
+ const headers = {
1899
+ ...idPolicy.headers(ids),
1900
+ ...clientHeaders
1901
+ };
1902
+ const sharesClient = auth.kind !== "user";
1903
+ const session = sessionWith(ids, tenant);
1904
+ const recorder = new StatsRecorder(parent);
1905
+ let supabase;
1906
+ let db;
1907
+ let sql;
1908
+ const sqlClaims = auth.kind === "user" ? auth.claims : auth.kind === "anon" ? { role: "anon" } : void 0;
1909
+ const client = () => supabase ??= supabaseFor(auth, sharesClient ? clientHeaders : headers);
1910
+ let replica;
1911
+ const replicaUrl = () => {
1912
+ const url = readUrl();
1913
+ if (url) replica ??= replicaState(until);
1914
+ return url;
1915
+ };
1916
+ return {
1917
+ ...credentials,
1918
+ ...ids,
1919
+ memo: requestMemo(),
1920
+ auth,
1921
+ resolution,
1922
+ get supabase() {
1923
+ return client();
1924
+ },
1925
+ get db() {
1926
+ if (db) return db;
1927
+ const url = replicaUrl();
1928
+ const rest = (sharesClient ? void 0 : supabase) ?? restAt(env().url, auth, headers);
1929
+ const connected = betterSupabase.connect(rest, context, {
1930
+ stats: recorder,
1931
+ storage: { from: (bucket) => client().storage.from(bucket) },
1932
+ ...auth.kind === "invalid" ? { executor: refusingExecutor(auth.error) } : url && replica ? { executor: routedExecutor(postgrestExecutor(rest, executorOptions), postgrestExecutor(restAt(url, auth, headers), executorOptions), replica) } : tunedExecutor ? { executor: postgrestExecutor(rest, executorOptions) } : {}
1933
+ });
1934
+ db = withLazyClient(connected, client);
1935
+ return db;
1936
+ },
1937
+ get replica() {
1938
+ replicaUrl();
1939
+ return replica;
1940
+ },
1941
+ get sql() {
1942
+ if (!options.postgres || !sqlClaims) return;
1943
+ sql ??= sqlFor(sqlClaims, context, recorder, session);
1944
+ return sql;
1945
+ },
1946
+ stats: () => recorder.snapshot(),
1947
+ apply: (response) => withPrimaryPin(resolution.apply(response), replica, pinMs),
1948
+ cookies: () => {
1949
+ const pin = primaryCookieWrite(replica, pinMs);
1950
+ return pin ? [...resolution.cookies, pin] : resolution.cookies;
1951
+ }
1952
+ };
1953
+ };
1954
+ const fromResolution = (resolution, request, contextOptions, tenant) => contextFor(resolution, options.headers?.(request) ?? {}, contextOptions.stats, contextOptions.pinnedUntil ?? (readUrl() ? pinnedUntil(resolution.requestCookies) : 0), tenant, contextOptions.support, idPolicy.forRequest(request, contextOptions));
1955
+ const resolve = async (request, resolveOptions = {}) => {
1956
+ const claims = options.auth?.claims ?? betterSupabase.claimsSchema;
1957
+ const userMetadata = betterSupabase.userMetadataSchema;
1958
+ const resolution = await resolveAuth(request, {
1959
+ logger: betterSupabase.events.logger,
1960
+ ...lite ? lite.auth() : options.auth,
1961
+ ...claims ? { claims } : {},
1962
+ ...userMetadata ? { userMetadata } : {},
1963
+ env: env(),
1964
+ ...resolveOptions.refresh === void 0 ? {} : { refresh: resolveOptions.refresh },
1965
+ ...resolveOptions.cookies === void 0 ? {} : { cookies: resolveOptions.cookies },
1966
+ ...resolveOptions.checkSession ? { checkSession: true } : {},
1967
+ ...resolveOptions.leeway === void 0 ? {} : { leeway: resolveOptions.leeway },
1968
+ ...resolveOptions.onTiming ? { onTiming: resolveOptions.onTiming } : {},
1969
+ ...resolveOptions.encode === void 0 ? {} : { cookie: {
1970
+ ...options.auth?.cookie,
1971
+ encode: resolveOptions.encode
1972
+ } },
1973
+ onRefresh: (event) => {
1974
+ options.auth?.onRefresh?.(event);
1975
+ betterSupabase.events.emit("refresh", event);
1976
+ }
1977
+ });
1978
+ if (betterSupabase.events.has("auth")) {
1979
+ const { auth } = resolution;
1980
+ betterSupabase.events.emit("auth", {
1981
+ source: auth.kind === "user" ? auth.source === "cookie" ? "cookie" : "bearer" : auth.kind === "service" || auth.kind === "apiKey" ? "bearer" : "none",
1982
+ ok: auth.kind !== "invalid",
1983
+ ...auth.kind === "user" ? {
1984
+ userId: auth.user.id,
1985
+ rawSource: auth.source
1986
+ } : {},
1987
+ ...auth.kind === "anon" || auth.kind === "invalid" ? { reason: auth.reason } : {}
1988
+ });
1989
+ }
1990
+ return resolution;
1991
+ };
1992
+ /**
1993
+ * One context per request and `refresh`/`cookies` pair: Server Components ask
1994
+ * repeatedly.
1995
+ */
1996
+ const contextMemo = /* @__PURE__ */ new WeakMap();
1997
+ const authorizer = bindAuthorizer(options.authorizer, options.versions ? { versions: options.versions } : {});
1998
+ const custom = lite !== void 0 || (options.auth?.resolvers?.length ?? 0) > 0;
1999
+ const { snapshot, contextFromSession, sessions, forgetSession } = serverSessions({
2000
+ resolve,
2001
+ cookieName: () => options.auth?.cookie?.name ?? sessionCookieName(env().url),
2002
+ cookies: options.auth?.cookies !== false,
2003
+ custom,
2004
+ memo: options.sessions,
2005
+ versions: options.versions,
2006
+ contextFor: (auth, contextOptions) => contextFor({
2007
+ auth,
2008
+ cookies: [],
2009
+ headers: {},
2010
+ requestCookies: [],
2011
+ apply: (response) => response
2012
+ }, {}, contextOptions.stats, contextOptions.pinnedUntil, contextOptions.tenant, contextOptions.support, idPolicy.forRequest(void 0, contextOptions))
2013
+ });
2014
+ const server = {
2015
+ get env() {
2016
+ return env();
2017
+ },
2018
+ events: betterSupabase.events,
2019
+ authorizer,
2020
+ authorization: options.authorization,
2021
+ versions: options.versions,
2022
+ snapshot,
2023
+ contextFromSession,
2024
+ sessions,
2025
+ forgetSession,
2026
+ resolve,
2027
+ supabaseFor,
2028
+ dbFor: (auth, context, dbOptions) => dbOptions?.support ? supportContextFor({
2029
+ auth,
2030
+ cookies: [],
2031
+ headers: {},
2032
+ requestCookies: [],
2033
+ apply: (response) => response
2034
+ }, dbOptions.support, void 0, context?.tenant, {}).db : dbFor(auth, context),
2035
+ contextFor: (auth, contextOptions = {}) => contextFor({
2036
+ auth,
2037
+ cookies: [],
2038
+ headers: {},
2039
+ requestCookies: [],
2040
+ apply: (response) => response
2041
+ }, {}, contextOptions.stats, contextOptions.pinnedUntil, contextOptions.tenant, contextOptions.support, idPolicy.forRequest(void 0, contextOptions)),
2042
+ context(request, contextOptions = {}) {
2043
+ const { refresh, cookies, ...rest } = contextOptions;
2044
+ const key = Object.keys(rest).length === 0 ? `${String(refresh ?? false)}:${String(cookies ?? true)}` : void 0;
2045
+ let byOptions = key ? contextMemo.get(request) : void 0;
2046
+ const known = key ? byOptions?.get(key) : void 0;
2047
+ if (known) return known;
2048
+ const resolving = (async () => {
2049
+ const call = { options: contextOptions };
2050
+ await fold(request, {
2051
+ ...seedContext(),
2052
+ [CALL]: call
2053
+ });
2054
+ return call.context;
2055
+ })();
2056
+ if (key) {
2057
+ if (!byOptions) {
2058
+ byOptions = /* @__PURE__ */ new Map();
2059
+ contextMemo.set(request, byOptions);
2060
+ }
2061
+ const memo = byOptions;
2062
+ memo.set(key, resolving);
2063
+ resolving.catch(() => {
2064
+ if (memo.get(key) === resolving) memo.delete(key);
2065
+ });
2066
+ }
2067
+ return resolving;
2068
+ },
2069
+ contextFromResolution: (resolution, request, contextOptions = {}) => fromResolution(resolution, request, contextOptions, contextOptions.tenant ?? syncTenant(request, resolution.auth)),
2070
+ admin: (context = {}, adminOptions = {}) => {
2071
+ const client = adminOptions.as === void 0 ? serviceClient() : supabaseFor({
2072
+ kind: "service",
2073
+ keyName: "secret"
2074
+ }, { [ACTOR_HEADER]: adminOptions.as });
2075
+ const db = betterSupabase.connect(client, {
2076
+ actor: {
2077
+ id: "service",
2078
+ kind: "service",
2079
+ role: "service_role"
2080
+ },
2081
+ claims: { role: "service_role" },
2082
+ ...context
2083
+ }, tunedExecutor ? { executor: postgrestExecutor(client, executorOptions) } : {});
2084
+ return Object.defineProperty(db, "$authAdmin", { get: () => client.auth.admin });
2085
+ },
2086
+ support,
2087
+ deleteAccount: (userId, deleteOptions) => deleteAccount(betterSupabase, serviceClient, userId, {
2088
+ ...options.postgres ? { sql: options.postgres.admin } : {},
2089
+ ...deleteOptions
2090
+ }).map((deleted) => {
2091
+ audit.account("account.deleted", userId, { removed: deleted.removed });
2092
+ return deleted;
2093
+ }),
2094
+ endSessions: (userId) => options.postgres ? endSessions(options.postgres.admin, userId).map((ended) => {
2095
+ audit.account("account.sessions_ended", userId, { ended: ended.ended });
2096
+ return ended;
2097
+ }) : AsyncResult.err(needsPostgres("endSessions")),
2098
+ suspendAccount: (userId, suspendOptions) => options.postgres ? suspendAccount(serviceClient, options.postgres.admin, userId, suspendOptions).map((suspended) => {
2099
+ audit.account(suspended.suspended ? "account.suspended" : "account.unsuspended", userId, {
2100
+ ended: suspended.ended,
2101
+ ...suspendOptions.duration === void 0 ? {} : { duration: suspendOptions.duration }
2102
+ });
2103
+ return suspended;
2104
+ }) : AsyncResult.err(needsPostgres("suspendAccount")),
2105
+ actingAs: (userId, claims = {}, impersonation) => {
2106
+ const full = {
2107
+ role: "authenticated",
2108
+ ...claims,
2109
+ sub: userId,
2110
+ ...impersonation ? { act: actClaim(impersonation) } : {}
2111
+ };
2112
+ return sqlFor(full, {
2113
+ actor: {
2114
+ id: userId,
2115
+ kind: "user",
2116
+ role: full.role ?? "authenticated",
2117
+ ...impersonation ? { impersonator: impersonation.actor } : {}
2118
+ },
2119
+ claims: full
2120
+ });
2121
+ },
2122
+ forContext: (context, forOptions = {}) => AsyncResult.from(async () => {
2123
+ const subject = await ticketSubject(context, forOptions.ticket ?? options.authorization?.tickets?.subject);
2124
+ if (!subject.ok) return subject;
2125
+ const target = subject.data;
2126
+ const { tenant } = target;
2127
+ const checked = contextClaims(target);
2128
+ if (!checked.ok) return err(dbError("forbidden", checked.message));
2129
+ if (!options.postgres) return err(dbError("invalid_request", "Direct Postgres access needs createServer(betterSupabase, { postgres: createPostgres() })"));
2130
+ const userId = checked.claims.sub;
2131
+ const extra = await options.claimsFor?.(userId, target) ?? {};
2132
+ const permissions = narrowCap(await delegationCap(target, userId, options.authorization?.delegation?.permissions), forOptions.permissions);
2133
+ const built = contextClaims(target, {
2134
+ extra,
2135
+ ...forOptions.reason === void 0 ? {} : { reason: forOptions.reason },
2136
+ ...permissions === void 0 ? {} : { permissions }
2137
+ });
2138
+ if (!built.ok) return err(dbError("forbidden", built.message));
2139
+ const { claims, impersonator, readOnly } = built;
2140
+ const session = sessionWith({}, tenant, readOnly);
2141
+ return ok(sqlFor(claims, {
2142
+ actor: {
2143
+ id: userId,
2144
+ kind: "user",
2145
+ role: "authenticated",
2146
+ ...impersonator ? { impersonator } : {}
2147
+ },
2148
+ claims,
2149
+ ...tenant === void 0 ? {} : { tenant }
2150
+ }, void 0, session));
2151
+ })
2152
+ };
2153
+ const core = {
2154
+ events: betterSupabase.events,
2155
+ pinMs,
2156
+ resolve,
2157
+ sessionCookie: () => options.auth?.cookie?.name ?? sessionCookieName(env().url),
2158
+ tenant: (request, auth) => options.tenant?.(request, auth),
2159
+ support: (request, auth) => support.current(request, auth),
2160
+ context: (resolution, request, contextOptions, tenant) => fromResolution(resolution, request, contextOptions, tenant)
2161
+ };
2162
+ registerCore(server, core);
2163
+ const fold = pipeline([
2164
+ withSession(core),
2165
+ withTenant(core),
2166
+ withSupport(core),
2167
+ withServerContext(core)
2168
+ ], (_request, ctx) => {
2169
+ const call = callOf(ctx);
2170
+ if (call) call.context = ctx.bsb;
2171
+ return Promise.resolve(new Response(null, { status: 204 }));
2172
+ });
2173
+ return server;
2174
+ }
2175
+ /**
2176
+ * The permission keys the provider's `delegation.permissions` hook grants a
2177
+ * delegated context, `undefined` for a context that is not delegated or without
2178
+ * the hook. A throw or an answer that is not a list of strings grants nothing.
2179
+ */
2180
+ async function delegationCap(context, userId, permissions) {
2181
+ if (permissions === void 0) return;
2182
+ const delegated = delegatedClaims(context.claims ?? {});
2183
+ if (!delegated.ok || delegated.delegation === void 0) return;
2184
+ const { client_id, scope, authorization_details } = delegated.delegation;
2185
+ try {
2186
+ const keys = await permissions({
2187
+ userId,
2188
+ ...context.tenant === void 0 ? {} : { tenant: context.tenant },
2189
+ ...client_id === void 0 ? {} : { clientId: client_id },
2190
+ scopes: scope === void 0 ? [] : scope.split(" "),
2191
+ ...authorization_details === void 0 ? {} : { authorizationDetails: authorization_details }
2192
+ });
2193
+ return Array.isArray(keys) && keys.every((key) => typeof key === "string") ? keys : [];
2194
+ } catch {
2195
+ return [];
2196
+ }
2197
+ }
2198
+ /**
2199
+ * The context `forContext` runs as: `context` itself, or for a context with a
2200
+ * ticket, the context `resolve` returns for it. A ticket without a resolver, a
2201
+ * `null` answer and a throw are `forbidden`; none of them fall back to the
2202
+ * recorded actor.
2203
+ */
2204
+ async function ticketSubject(context, resolve) {
2205
+ const ticket = context["ticket"];
2206
+ if (ticket === void 0) return ok(context);
2207
+ if (typeof ticket !== "string" || ticket === "") return err(dbError("forbidden", "forContext got an invalid ticket"));
2208
+ if (resolve === void 0) return err(dbError("forbidden", "forContext got a ticket but no ticket resolver: pass { ticket } or authorization.tickets.subject"));
2209
+ let resolved;
2210
+ try {
2211
+ resolved = await resolve(ticket);
2212
+ } catch {
2213
+ resolved = null;
2214
+ }
2215
+ if (typeof resolved !== "object" || resolved === null) return err(dbError("forbidden", "The ticket resolver refused the ticket"));
2216
+ return ok(resolved);
2217
+ }
2218
+ //#endregion
2219
+ //#region src/server/adapter.ts
2220
+ /** Hands event sink sends still running to `waitUntil`; a no-op without either. */
2221
+ function flushEvents(server, waitUntil) {
2222
+ if (waitUntil && server.events.pending) waitUntil(server.events.settled());
2223
+ }
2224
+ /**
2225
+ * Runs `run`, then hands pending event sink sends to `waitUntil` even when it
2226
+ * throws.
2227
+ */
2228
+ async function withFlush(server, waitUntil, run) {
2229
+ try {
2230
+ return await run();
2231
+ } finally {
2232
+ flushEvents(server, waitUntil);
2233
+ }
2234
+ }
2235
+ /** The 500 for an error a handler threw; the message only when `expose` is set. */
2236
+ function unexpectedResponse(cause, options) {
2237
+ return problemResponse(dbError("unexpected", options.expose && cause instanceof Error ? cause.message : "Internal server error"), options);
2238
+ }
2239
+ /**
2240
+ * Runs `run` as the request's caller, the way every built-in adapter does:
2241
+ * resolves the context, applies the guard (401/403 Problem Details), turns the
2242
+ * return value into a response with `respond()`, turns other thrown errors into
2243
+ * a 500, adds the context's cookies with `ctx.apply()` and hands pending event
2244
+ * sink sends to `waitUntil`.
2245
+ *
2246
+ * ```ts
2247
+ * export default {
2248
+ * fetch: (request, env, ctx) =>
2249
+ * handle(server, request, (c) => c.db.notes.list(), {
2250
+ * waitUntil: (p) => ctx.waitUntil(p),
2251
+ * }),
2252
+ * };
2253
+ * ```
2254
+ */
2255
+ async function handle(server, request, run, options = {}) {
2256
+ const expose = options.expose ?? defaultExpose();
2257
+ const instance = options.instance ?? new URL(request.url).pathname;
2258
+ const ctx = await server.context(request, {
2259
+ ...options.context,
2260
+ refresh: refreshFor(options.refresh, request) ?? false
2261
+ });
2262
+ const denied = guard(ctx.auth, options.allow, options.aal, options.scopes);
2263
+ try {
2264
+ let response;
2265
+ try {
2266
+ response = denied ? problemResponse(denied, {
2267
+ instance,
2268
+ expose
2269
+ }) : await respond(() => run(ctx), {
2270
+ instance,
2271
+ expose,
2272
+ ...options.status === void 0 ? {} : { status: options.status }
2273
+ });
2274
+ } catch (cause) {
2275
+ options.rethrow?.(cause);
2276
+ response = unexpectedResponse(cause, {
2277
+ instance,
2278
+ expose
2279
+ });
2280
+ }
2281
+ return ctx.apply(response);
2282
+ } finally {
2283
+ flushEvents(server, options.waitUntil);
2284
+ }
2285
+ }
2286
+ /** A request carrying only `token` as a bearer, for resolvers that read headers. */
2287
+ function bearerRequest(token) {
2288
+ return new Request("http://localhost/", { headers: token ? { authorization: `Bearer ${token}` } : {} });
2289
+ }
2290
+ /**
2291
+ * Verifies a bare access token (an MCP transport's, a WebSocket's) without
2292
+ * cookies or a refresh. An empty token resolves to `anon`.
2293
+ */
2294
+ async function resolveToken(server, token) {
2295
+ const { auth } = await server.resolve(bearerRequest(token), { cookies: false });
2296
+ return auth;
2297
+ }
2298
+ //#endregion
2299
+ export { suspendAccount as A, shouldRefresh as C, SERVER_EVENT_SOURCE as D, defineAuthorizationHooks as E, endSessions as O, shouldCheckSession as S, serverCore as T, withSupport as _, unexpectedResponse as a, isPrefetch as b, extendServer as c, clearSupportCookie as d, supportCookie as f, withTenant as g, TENANT_HEADER as h, resolveToken as i, deleteAccount as j, lastSignIns as k, supportStorage as l, supportCookieValue as m, flushEvents as n, withFlush as o, supportCookieMaxAge as p, handle as r, createServer as s, bearerRequest as t, SUPPORT_COOKIE as u, outageResponse as v, withServerContext as w, refreshFor as x, withSession as y };