better-supabase 0.8.0 → 0.9.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 (1374) hide show
  1. package/README.md +144 -83
  2. package/bin/better-supabase.js +14 -2
  3. package/dist/access-sql-DUSSMaC3.js +201 -0
  4. package/dist/actor-BAhb-d1S.d.ts +104 -0
  5. package/dist/actor-KHDOKGb1.js +151 -0
  6. package/dist/adapter-CEjmtazZ.js +1984 -0
  7. package/dist/agents-BCNhIxVZ.d.ts +111 -0
  8. package/dist/ai-cache-Dps7aRu1.d.ts +70 -0
  9. package/dist/ai-cache-zeUL94pB.js +84 -0
  10. package/dist/ai-chat-3GBSlFR4.d.ts +608 -0
  11. package/dist/ai-files-D2_9YLjF.js +331 -0
  12. package/dist/ai-sdk/agents/index.d.ts +154 -10
  13. package/dist/ai-sdk/agents/index.js +172 -17
  14. package/dist/ai-sdk/batches/index.d.ts +4 -4
  15. package/dist/ai-sdk/batches/index.js +5 -5
  16. package/dist/ai-sdk/cache/index.d.ts +2 -2
  17. package/dist/ai-sdk/cache/index.js +1 -1
  18. package/dist/ai-sdk/chat/index.d.ts +1 -1
  19. package/dist/ai-sdk/chat/index.js +7 -6
  20. package/dist/ai-sdk/embeddings/index.d.ts +3 -3
  21. package/dist/ai-sdk/embeddings/index.js +1 -2
  22. package/dist/ai-sdk/files/index.d.ts +2 -2
  23. package/dist/ai-sdk/files/index.js +4 -4
  24. package/dist/ai-sdk/index.d.ts +7 -6
  25. package/dist/ai-sdk/index.js +4 -3
  26. package/dist/ai-sdk/mcp/index.d.ts +4 -4
  27. package/dist/ai-sdk/mcp/index.js +6 -6
  28. package/dist/ai-sdk/memory/index.d.ts +5 -2
  29. package/dist/ai-sdk/memory/index.js +2 -2
  30. package/dist/ai-sdk/react/index.js +1 -2
  31. package/dist/ai-sdk/workflow/index.d.ts +5 -4
  32. package/dist/ai-sdk/workflow/index.js +8 -8
  33. package/dist/ai-tasks-Ih5oHfyj.d.ts +157 -0
  34. package/dist/announcements-BHCzraR6.js +128 -0
  35. package/dist/api-CFjuYKFY.js +680 -0
  36. package/dist/api-TG3jE5aO.d.ts +411 -0
  37. package/dist/api-keys-BEQatEUW.js +318 -0
  38. package/dist/api-keys-BYoGCM9p.d.ts +205 -0
  39. package/dist/app-tables-BGl5_U2x.js +584 -0
  40. package/dist/approvals-a2KmioBh.d.ts +124 -0
  41. package/dist/arazzo/index.d.ts +5 -5
  42. package/dist/arazzo/index.js +6 -6
  43. package/dist/assistant-Bf2cA6RO.d.ts +148 -0
  44. package/dist/astro/index.d.ts +9 -8
  45. package/dist/astro/index.js +10 -7
  46. package/dist/asyncapi/index.d.ts +4 -4
  47. package/dist/asyncapi/index.js +6 -6
  48. package/dist/attachments-DAj2Yp95.js +264 -0
  49. package/dist/attributes-D4mA7WhI.js +38 -0
  50. package/dist/audit-log-BMMuGPdP.js +786 -0
  51. package/dist/auth-CdBKt0CS.js +20 -0
  52. package/dist/auth-reply-DUCwb8YO.js +31 -0
  53. package/dist/auth-reply-Dj124sbX.d.ts +11 -0
  54. package/dist/authorization-DpRfs6Wx.d.ts +1412 -0
  55. package/dist/authorization-hooks-DkmrnDX7.d.ts +214 -0
  56. package/dist/authorizer-DH7DjkL3.js +126 -0
  57. package/dist/base64-BmeCBgGo.js +42 -0
  58. package/dist/batch-limit-DKVQDz4o.js +5 -0
  59. package/dist/before-route-B98js9m_.js +30 -0
  60. package/dist/better-result/index.d.ts +5 -5
  61. package/dist/better-result/index.js +1 -1
  62. package/dist/bind-a7sUgvf4.d.ts +70 -0
  63. package/dist/block-env-CBd_SoL5.js +29 -0
  64. package/dist/block-env-Dxl7rsI0.d.ts +10 -0
  65. package/dist/block-events-DD9Q_NUz.js +96 -0
  66. package/dist/block-fields-5UA84ZUg.d.ts +55 -0
  67. package/dist/block-fields-ffD6Gxe4.js +139 -0
  68. package/dist/block-helpers-C86hPEjI.d.ts +37 -0
  69. package/dist/block-helpers-CfG_MvDR.js +264 -0
  70. package/dist/block-hooks-BLPWD3Jt.d.ts +107 -0
  71. package/dist/block-hooks-BsXncUlZ.js +114 -0
  72. package/dist/block-transport-DaGGXjIw.d.ts +70 -0
  73. package/dist/block-transport-G4t1umrR.js +85 -0
  74. package/dist/blocks/access-requests/index.d.ts +98 -0
  75. package/dist/blocks/access-requests/index.js +99 -0
  76. package/dist/blocks/agents/index.d.ts +21 -3
  77. package/dist/blocks/agents/index.js +64 -18
  78. package/dist/blocks/ai-cache/index.d.ts +7 -2
  79. package/dist/blocks/ai-cache/index.js +15 -3
  80. package/dist/blocks/ai-chat/index.d.ts +22 -3
  81. package/dist/blocks/ai-chat/index.js +29 -3
  82. package/dist/blocks/ai-chat/react/index.d.ts +12 -46
  83. package/dist/blocks/ai-chat/react/index.js +43 -335
  84. package/dist/blocks/ai-chat/solid/index.d.ts +34 -0
  85. package/dist/blocks/ai-chat/solid/index.js +41 -0
  86. package/dist/blocks/ai-chat/svelte/index.d.ts +34 -0
  87. package/dist/blocks/ai-chat/svelte/index.js +41 -0
  88. package/dist/blocks/ai-chat/vue/index.d.ts +34 -0
  89. package/dist/blocks/ai-chat/vue/index.js +41 -0
  90. package/dist/blocks/ai-files/index.d.ts +10 -3
  91. package/dist/blocks/ai-files/index.js +16 -3
  92. package/dist/blocks/ai-providers/index.d.ts +18 -3
  93. package/dist/blocks/ai-providers/index.js +40 -15
  94. package/dist/blocks/ai-tasks/index.d.ts +9 -2
  95. package/dist/blocks/ai-tasks/index.js +70 -21
  96. package/dist/blocks/announcements/index.d.ts +18 -3
  97. package/dist/blocks/announcements/index.js +27 -3
  98. package/dist/blocks/announcements/react/index.d.ts +4 -14
  99. package/dist/blocks/announcements/react/index.js +22 -70
  100. package/dist/blocks/announcements/solid/index.d.ts +13 -0
  101. package/dist/blocks/announcements/solid/index.js +14 -0
  102. package/dist/blocks/announcements/svelte/index.d.ts +13 -0
  103. package/dist/blocks/announcements/svelte/index.js +14 -0
  104. package/dist/blocks/announcements/vue/index.d.ts +13 -0
  105. package/dist/blocks/announcements/vue/index.js +14 -0
  106. package/dist/blocks/api-keys/index.d.ts +24 -7
  107. package/dist/blocks/api-keys/index.js +29 -294
  108. package/dist/blocks/api-keys/react/index.d.ts +29 -0
  109. package/dist/blocks/api-keys/react/index.js +43 -0
  110. package/dist/blocks/api-keys/react/server.d.ts +7 -0
  111. package/dist/blocks/api-keys/react/server.js +7 -0
  112. package/dist/blocks/api-keys/solid/index.d.ts +13 -0
  113. package/dist/blocks/api-keys/solid/index.js +14 -0
  114. package/dist/blocks/api-keys/svelte/index.d.ts +13 -0
  115. package/dist/blocks/api-keys/svelte/index.js +14 -0
  116. package/dist/blocks/api-keys/vue/index.d.ts +13 -0
  117. package/dist/blocks/api-keys/vue/index.js +14 -0
  118. package/dist/blocks/approvals/index.d.ts +22 -0
  119. package/dist/blocks/approvals/index.js +189 -0
  120. package/dist/blocks/attachments/index.d.ts +18 -227
  121. package/dist/blocks/attachments/index.js +26 -242
  122. package/dist/blocks/audit/index.d.ts +72 -365
  123. package/dist/blocks/audit/index.js +91 -714
  124. package/dist/blocks/audit/react/index.d.ts +26 -0
  125. package/dist/blocks/audit/react/index.js +44 -0
  126. package/dist/blocks/audit/react/server.d.ts +7 -0
  127. package/dist/blocks/audit/react/server.js +7 -0
  128. package/dist/blocks/audit/solid/index.d.ts +13 -0
  129. package/dist/blocks/audit/solid/index.js +14 -0
  130. package/dist/blocks/audit/svelte/index.d.ts +13 -0
  131. package/dist/blocks/audit/svelte/index.js +14 -0
  132. package/dist/blocks/audit/vue/index.d.ts +13 -0
  133. package/dist/blocks/audit/vue/index.js +14 -0
  134. package/dist/blocks/billing/index.d.ts +37 -12
  135. package/dist/blocks/billing/index.js +43 -12
  136. package/dist/blocks/billing/react/index.d.ts +34 -0
  137. package/dist/blocks/billing/react/index.js +36 -0
  138. package/dist/blocks/billing/react/server.d.ts +7 -0
  139. package/dist/blocks/billing/react/server.js +7 -0
  140. package/dist/blocks/billing/solid/index.d.ts +15 -0
  141. package/dist/blocks/billing/solid/index.js +14 -0
  142. package/dist/blocks/billing/svelte/index.d.ts +15 -0
  143. package/dist/blocks/billing/svelte/index.js +14 -0
  144. package/dist/blocks/billing/vue/index.d.ts +15 -0
  145. package/dist/blocks/billing/vue/index.js +14 -0
  146. package/dist/blocks/bookings/index.d.ts +36 -0
  147. package/dist/blocks/bookings/index.js +28 -0
  148. package/dist/blocks/bookings/react/index.d.ts +31 -0
  149. package/dist/blocks/bookings/react/index.js +59 -0
  150. package/dist/blocks/bookings/react/server.d.ts +6 -0
  151. package/dist/blocks/bookings/react/server.js +7 -0
  152. package/dist/blocks/bookings/solid/index.d.ts +13 -0
  153. package/dist/blocks/bookings/solid/index.js +14 -0
  154. package/dist/blocks/bookings/svelte/index.d.ts +13 -0
  155. package/dist/blocks/bookings/svelte/index.js +14 -0
  156. package/dist/blocks/bookings/vue/index.d.ts +13 -0
  157. package/dist/blocks/bookings/vue/index.js +14 -0
  158. package/dist/blocks/bulk/index.d.ts +142 -0
  159. package/dist/blocks/bulk/index.js +154 -0
  160. package/dist/blocks/calendar/index.d.ts +20 -0
  161. package/dist/blocks/calendar/index.js +33 -0
  162. package/dist/blocks/calendar/react/index.d.ts +26 -0
  163. package/dist/blocks/calendar/react/index.js +58 -0
  164. package/dist/blocks/calendar/react/server.d.ts +6 -0
  165. package/dist/blocks/calendar/react/server.js +7 -0
  166. package/dist/blocks/calendar/solid/index.d.ts +13 -0
  167. package/dist/blocks/calendar/solid/index.js +14 -0
  168. package/dist/blocks/calendar/svelte/index.d.ts +13 -0
  169. package/dist/blocks/calendar/svelte/index.js +14 -0
  170. package/dist/blocks/calendar/vue/index.d.ts +13 -0
  171. package/dist/blocks/calendar/vue/index.js +14 -0
  172. package/dist/blocks/catalog/index.d.ts +224 -0
  173. package/dist/blocks/catalog/index.js +292 -0
  174. package/dist/blocks/collections/index.d.ts +184 -0
  175. package/dist/blocks/collections/index.js +208 -0
  176. package/dist/blocks/comments/index.d.ts +19 -166
  177. package/dist/blocks/comments/index.js +26 -207
  178. package/dist/blocks/comments/react/index.d.ts +27 -0
  179. package/dist/blocks/comments/react/index.js +45 -0
  180. package/dist/blocks/comments/react/server.d.ts +7 -0
  181. package/dist/blocks/comments/react/server.js +7 -0
  182. package/dist/blocks/comments/solid/index.d.ts +13 -0
  183. package/dist/blocks/comments/solid/index.js +14 -0
  184. package/dist/blocks/comments/svelte/index.d.ts +13 -0
  185. package/dist/blocks/comments/svelte/index.js +14 -0
  186. package/dist/blocks/comments/vue/index.d.ts +13 -0
  187. package/dist/blocks/comments/vue/index.js +14 -0
  188. package/dist/blocks/connectors/index.d.ts +21 -3
  189. package/dist/blocks/connectors/index.js +53 -18
  190. package/dist/blocks/custom-fields/index.d.ts +62 -0
  191. package/dist/blocks/custom-fields/index.js +85 -0
  192. package/dist/blocks/data-lifecycle/index.d.ts +114 -9
  193. package/dist/blocks/data-lifecycle/index.js +98 -12
  194. package/dist/blocks/deals/index.d.ts +262 -0
  195. package/dist/blocks/deals/index.js +380 -0
  196. package/dist/blocks/documents/index.d.ts +17 -0
  197. package/dist/blocks/documents/index.js +118 -0
  198. package/dist/blocks/domains/index.d.ts +117 -0
  199. package/dist/blocks/domains/index.js +118 -0
  200. package/dist/blocks/drive/index.d.ts +296 -0
  201. package/dist/blocks/drive/index.js +483 -0
  202. package/dist/blocks/employees/index.d.ts +205 -0
  203. package/dist/blocks/employees/index.js +289 -0
  204. package/dist/blocks/engagements/index.d.ts +125 -0
  205. package/dist/blocks/engagements/index.js +143 -0
  206. package/dist/blocks/entitlements/index.d.ts +40 -4
  207. package/dist/blocks/entitlements/index.js +14 -24
  208. package/dist/blocks/entitlements/react/index.d.ts +24 -0
  209. package/dist/blocks/entitlements/react/index.js +35 -0
  210. package/dist/blocks/entitlements/react/server.d.ts +6 -0
  211. package/dist/blocks/entitlements/react/server.js +7 -0
  212. package/dist/blocks/entitlements/solid/index.d.ts +13 -0
  213. package/dist/blocks/entitlements/solid/index.js +14 -0
  214. package/dist/blocks/entitlements/svelte/index.d.ts +13 -0
  215. package/dist/blocks/entitlements/svelte/index.js +14 -0
  216. package/dist/blocks/entitlements/vue/index.d.ts +13 -0
  217. package/dist/blocks/entitlements/vue/index.js +14 -0
  218. package/dist/blocks/flags/index.d.ts +61 -187
  219. package/dist/blocks/flags/index.js +65 -253
  220. package/dist/blocks/forms/index.d.ts +302 -0
  221. package/dist/blocks/forms/index.js +341 -0
  222. package/dist/blocks/forms/react/index.d.ts +16 -0
  223. package/dist/blocks/forms/react/index.js +25 -0
  224. package/dist/blocks/forms/react/server.d.ts +6 -0
  225. package/dist/blocks/forms/react/server.js +7 -0
  226. package/dist/blocks/forms/solid/index.d.ts +13 -0
  227. package/dist/blocks/forms/solid/index.js +14 -0
  228. package/dist/blocks/forms/svelte/index.d.ts +13 -0
  229. package/dist/blocks/forms/svelte/index.js +14 -0
  230. package/dist/blocks/forms/vue/index.d.ts +13 -0
  231. package/dist/blocks/forms/vue/index.js +14 -0
  232. package/dist/blocks/hiring/index.d.ts +154 -0
  233. package/dist/blocks/hiring/index.js +180 -0
  234. package/dist/blocks/identities/index.d.ts +83 -0
  235. package/dist/blocks/identities/index.js +103 -0
  236. package/dist/blocks/imports/index.d.ts +91 -0
  237. package/dist/blocks/imports/index.js +123 -0
  238. package/dist/blocks/inbox/index.d.ts +22 -3
  239. package/dist/blocks/inbox/index.js +77 -4
  240. package/dist/blocks/inbox/react/index.d.ts +3 -2
  241. package/dist/blocks/inbox/react/index.js +55 -199
  242. package/dist/blocks/inbox/react/server.d.ts +2 -1
  243. package/dist/blocks/inbox/solid/index.d.ts +27 -0
  244. package/dist/blocks/inbox/solid/index.js +32 -0
  245. package/dist/blocks/inbox/svelte/index.d.ts +27 -0
  246. package/dist/blocks/inbox/svelte/index.js +32 -0
  247. package/dist/blocks/inbox/vue/index.d.ts +27 -0
  248. package/dist/blocks/inbox/vue/index.js +32 -0
  249. package/dist/blocks/index.d.ts +9 -64
  250. package/dist/blocks/index.js +191 -55
  251. package/dist/blocks/inventory/index.d.ts +181 -0
  252. package/dist/blocks/inventory/index.js +219 -0
  253. package/dist/blocks/invoices/index.d.ts +154 -0
  254. package/dist/blocks/invoices/index.js +216 -0
  255. package/dist/blocks/jobs/index.d.ts +156 -33
  256. package/dist/blocks/jobs/index.js +675 -261
  257. package/dist/blocks/knowledge/index.d.ts +10 -3
  258. package/dist/blocks/knowledge/index.js +17 -3
  259. package/dist/blocks/leave/index.d.ts +241 -0
  260. package/dist/blocks/leave/index.js +209 -0
  261. package/dist/blocks/memory/index.d.ts +9 -4
  262. package/dist/blocks/memory/index.js +48 -12
  263. package/dist/blocks/metrics/index.d.ts +174 -0
  264. package/dist/blocks/metrics/index.js +217 -0
  265. package/dist/blocks/mfa/index.d.ts +7 -0
  266. package/dist/blocks/mfa/index.js +12 -0
  267. package/dist/blocks/mfa/react/index.d.ts +30 -0
  268. package/dist/blocks/mfa/react/index.js +45 -0
  269. package/dist/blocks/mfa/react/server.d.ts +9 -0
  270. package/dist/blocks/mfa/react/server.js +12 -0
  271. package/dist/blocks/mfa/solid/index.d.ts +20 -0
  272. package/dist/blocks/mfa/solid/index.js +23 -0
  273. package/dist/blocks/mfa/svelte/index.d.ts +20 -0
  274. package/dist/blocks/mfa/svelte/index.js +23 -0
  275. package/dist/blocks/mfa/vue/index.d.ts +20 -0
  276. package/dist/blocks/mfa/vue/index.js +23 -0
  277. package/dist/blocks/notifications/index.d.ts +342 -25
  278. package/dist/blocks/notifications/index.js +733 -104
  279. package/dist/blocks/notifications/react/index.d.ts +7 -32
  280. package/dist/blocks/notifications/react/index.js +23 -49
  281. package/dist/blocks/notifications/react/server.d.ts +2 -1
  282. package/dist/blocks/notifications/solid/index.d.ts +13 -0
  283. package/dist/blocks/notifications/solid/index.js +14 -0
  284. package/dist/blocks/notifications/svelte/index.d.ts +13 -0
  285. package/dist/blocks/notifications/svelte/index.js +14 -0
  286. package/dist/blocks/notifications/vue/index.d.ts +13 -0
  287. package/dist/blocks/notifications/vue/index.js +14 -0
  288. package/dist/blocks/number-sequences/index.d.ts +39 -0
  289. package/dist/blocks/number-sequences/index.js +38 -0
  290. package/dist/blocks/oauth-server/index.d.ts +228 -0
  291. package/dist/blocks/oauth-server/index.js +309 -0
  292. package/dist/blocks/onboarding/index.d.ts +8 -3
  293. package/dist/blocks/onboarding/index.js +17 -63
  294. package/dist/blocks/onboarding/react/index.d.ts +3 -12
  295. package/dist/blocks/onboarding/react/index.js +18 -60
  296. package/dist/blocks/onboarding/react/server.d.ts +2 -2
  297. package/dist/blocks/onboarding/react/server.js +2 -2
  298. package/dist/blocks/onboarding/solid/index.d.ts +13 -0
  299. package/dist/blocks/onboarding/solid/index.js +14 -0
  300. package/dist/blocks/onboarding/svelte/index.d.ts +13 -0
  301. package/dist/blocks/onboarding/svelte/index.js +14 -0
  302. package/dist/blocks/onboarding/vue/index.d.ts +13 -0
  303. package/dist/blocks/onboarding/vue/index.js +14 -0
  304. package/dist/blocks/orders/index.d.ts +264 -0
  305. package/dist/blocks/orders/index.js +589 -0
  306. package/dist/blocks/organizations/index.d.ts +31 -238
  307. package/dist/blocks/organizations/index.js +49 -392
  308. package/dist/blocks/organizations/react/index.d.ts +108 -0
  309. package/dist/blocks/organizations/react/index.js +113 -0
  310. package/dist/blocks/organizations/react/server.d.ts +11 -0
  311. package/dist/blocks/organizations/react/server.js +15 -0
  312. package/dist/blocks/organizations/solid/index.d.ts +34 -0
  313. package/dist/blocks/organizations/solid/index.js +32 -0
  314. package/dist/blocks/organizations/svelte/index.d.ts +34 -0
  315. package/dist/blocks/organizations/svelte/index.js +32 -0
  316. package/dist/blocks/organizations/vue/index.d.ts +34 -0
  317. package/dist/blocks/organizations/vue/index.js +32 -0
  318. package/dist/blocks/outbox/index.d.ts +12 -3
  319. package/dist/blocks/outbox/index.js +85 -46
  320. package/dist/blocks/parties/index.d.ts +181 -0
  321. package/dist/blocks/parties/index.js +258 -0
  322. package/dist/blocks/pipelines/index.d.ts +189 -0
  323. package/dist/blocks/pipelines/index.js +204 -0
  324. package/dist/blocks/profiles/index.d.ts +13 -8
  325. package/dist/blocks/profiles/index.js +19 -6
  326. package/dist/blocks/promotions/index.d.ts +125 -0
  327. package/dist/blocks/promotions/index.js +123 -0
  328. package/dist/blocks/push/index.d.ts +48 -28
  329. package/dist/blocks/push/index.js +45 -16
  330. package/dist/blocks/quotes/index.d.ts +152 -0
  331. package/dist/blocks/quotes/index.js +209 -0
  332. package/dist/blocks/rank/index.d.ts +71 -0
  333. package/dist/blocks/rank/index.js +53 -0
  334. package/dist/blocks/reactions/index.d.ts +18 -0
  335. package/dist/blocks/reactions/index.js +26 -0
  336. package/dist/blocks/reactions/react/index.d.ts +23 -0
  337. package/dist/blocks/reactions/react/index.js +46 -0
  338. package/dist/blocks/reactions/react/server.d.ts +6 -0
  339. package/dist/blocks/reactions/react/server.js +7 -0
  340. package/dist/blocks/reactions/solid/index.d.ts +13 -0
  341. package/dist/blocks/reactions/solid/index.js +14 -0
  342. package/dist/blocks/reactions/svelte/index.d.ts +13 -0
  343. package/dist/blocks/reactions/svelte/index.js +14 -0
  344. package/dist/blocks/reactions/vue/index.d.ts +13 -0
  345. package/dist/blocks/reactions/vue/index.js +14 -0
  346. package/dist/blocks/relations/index.d.ts +180 -0
  347. package/dist/blocks/relations/index.js +254 -0
  348. package/dist/blocks/reminders/index.d.ts +177 -0
  349. package/dist/blocks/reminders/index.js +171 -0
  350. package/dist/blocks/reviews/index.d.ts +148 -0
  351. package/dist/blocks/reviews/index.js +139 -0
  352. package/dist/blocks/rules/index.d.ts +103 -0
  353. package/dist/blocks/rules/index.js +54 -0
  354. package/dist/blocks/rules/react/index.d.ts +34 -0
  355. package/dist/blocks/rules/react/index.js +55 -0
  356. package/dist/blocks/rules/react/server.d.ts +6 -0
  357. package/dist/blocks/rules/react/server.js +7 -0
  358. package/dist/blocks/rules/solid/index.d.ts +13 -0
  359. package/dist/blocks/rules/solid/index.js +14 -0
  360. package/dist/blocks/rules/svelte/index.d.ts +13 -0
  361. package/dist/blocks/rules/svelte/index.js +14 -0
  362. package/dist/blocks/rules/vue/index.d.ts +13 -0
  363. package/dist/blocks/rules/vue/index.js +14 -0
  364. package/dist/blocks/saved-views/index.d.ts +17 -0
  365. package/dist/blocks/saved-views/index.js +29 -0
  366. package/dist/blocks/saved-views/react/index.d.ts +34 -0
  367. package/dist/blocks/saved-views/react/index.js +57 -0
  368. package/dist/blocks/saved-views/react/server.d.ts +7 -0
  369. package/dist/blocks/saved-views/react/server.js +7 -0
  370. package/dist/blocks/saved-views/solid/index.d.ts +13 -0
  371. package/dist/blocks/saved-views/solid/index.js +14 -0
  372. package/dist/blocks/saved-views/svelte/index.d.ts +13 -0
  373. package/dist/blocks/saved-views/svelte/index.js +14 -0
  374. package/dist/blocks/saved-views/vue/index.d.ts +13 -0
  375. package/dist/blocks/saved-views/vue/index.js +14 -0
  376. package/dist/blocks/search/index.d.ts +31 -0
  377. package/dist/blocks/search/index.js +61 -0
  378. package/dist/blocks/search/react/index.d.ts +36 -0
  379. package/dist/blocks/search/react/index.js +49 -0
  380. package/dist/blocks/search/react/server.d.ts +7 -0
  381. package/dist/blocks/search/react/server.js +8 -0
  382. package/dist/blocks/search/solid/index.d.ts +13 -0
  383. package/dist/blocks/search/solid/index.js +14 -0
  384. package/dist/blocks/search/svelte/index.d.ts +13 -0
  385. package/dist/blocks/search/svelte/index.js +14 -0
  386. package/dist/blocks/search/vue/index.d.ts +13 -0
  387. package/dist/blocks/search/vue/index.js +14 -0
  388. package/dist/blocks/service-principals/index.d.ts +126 -0
  389. package/dist/blocks/service-principals/index.js +107 -0
  390. package/dist/blocks/sessions/index.d.ts +7 -0
  391. package/dist/blocks/sessions/index.js +14 -0
  392. package/dist/blocks/sessions/react/index.d.ts +31 -0
  393. package/dist/blocks/sessions/react/index.js +51 -0
  394. package/dist/blocks/sessions/react/server.d.ts +9 -0
  395. package/dist/blocks/sessions/react/server.js +11 -0
  396. package/dist/blocks/sessions/solid/index.d.ts +20 -0
  397. package/dist/blocks/sessions/solid/index.js +23 -0
  398. package/dist/blocks/sessions/svelte/index.d.ts +20 -0
  399. package/dist/blocks/sessions/svelte/index.js +23 -0
  400. package/dist/blocks/sessions/vue/index.d.ts +20 -0
  401. package/dist/blocks/sessions/vue/index.js +23 -0
  402. package/dist/blocks/settings/index.d.ts +20 -86
  403. package/dist/blocks/settings/index.js +28 -102
  404. package/dist/blocks/settings/react/index.d.ts +25 -0
  405. package/dist/blocks/settings/react/index.js +37 -0
  406. package/dist/blocks/settings/react/server.d.ts +7 -0
  407. package/dist/blocks/settings/react/server.js +7 -0
  408. package/dist/blocks/settings/solid/index.d.ts +13 -0
  409. package/dist/blocks/settings/solid/index.js +14 -0
  410. package/dist/blocks/settings/svelte/index.d.ts +13 -0
  411. package/dist/blocks/settings/svelte/index.js +14 -0
  412. package/dist/blocks/settings/vue/index.d.ts +13 -0
  413. package/dist/blocks/settings/vue/index.js +14 -0
  414. package/dist/blocks/share-links/index.d.ts +99 -0
  415. package/dist/blocks/share-links/index.js +99 -0
  416. package/dist/blocks/shared-signals/index.d.ts +395 -0
  417. package/dist/blocks/shared-signals/index.js +880 -0
  418. package/dist/blocks/signing-keys/index.d.ts +29 -0
  419. package/dist/blocks/signing-keys/index.js +161 -0
  420. package/dist/blocks/sla/index.d.ts +114 -0
  421. package/dist/blocks/sla/index.js +122 -0
  422. package/dist/blocks/sso/index.d.ts +169 -147
  423. package/dist/blocks/sso/index.js +258 -321
  424. package/dist/blocks/state-machine/index.d.ts +105 -0
  425. package/dist/blocks/state-machine/index.js +116 -0
  426. package/dist/blocks/tags/index.d.ts +20 -0
  427. package/dist/blocks/tags/index.js +28 -0
  428. package/dist/blocks/tags/react/index.d.ts +28 -0
  429. package/dist/blocks/tags/react/index.js +47 -0
  430. package/dist/blocks/tags/react/server.d.ts +7 -0
  431. package/dist/blocks/tags/react/server.js +7 -0
  432. package/dist/blocks/tags/solid/index.d.ts +13 -0
  433. package/dist/blocks/tags/solid/index.js +14 -0
  434. package/dist/blocks/tags/svelte/index.d.ts +13 -0
  435. package/dist/blocks/tags/svelte/index.js +14 -0
  436. package/dist/blocks/tags/vue/index.d.ts +13 -0
  437. package/dist/blocks/tags/vue/index.js +14 -0
  438. package/dist/blocks/targets/index.d.ts +82 -0
  439. package/dist/blocks/targets/index.js +73 -0
  440. package/dist/blocks/teams/index.d.ts +61 -0
  441. package/dist/blocks/teams/index.js +83 -0
  442. package/dist/blocks/templates/index.d.ts +362 -0
  443. package/dist/blocks/templates/index.js +483 -0
  444. package/dist/blocks/time-tracking/index.d.ts +250 -0
  445. package/dist/blocks/time-tracking/index.js +317 -0
  446. package/dist/blocks/trash/index.d.ts +78 -0
  447. package/dist/blocks/trash/index.js +79 -0
  448. package/dist/blocks/undo/index.d.ts +9 -0
  449. package/dist/blocks/undo/index.js +14 -0
  450. package/dist/blocks/undo/react/index.d.ts +17 -0
  451. package/dist/blocks/undo/react/index.js +24 -0
  452. package/dist/blocks/undo/react/server.d.ts +7 -0
  453. package/dist/blocks/undo/react/server.js +7 -0
  454. package/dist/blocks/undo/solid/index.d.ts +13 -0
  455. package/dist/blocks/undo/solid/index.js +14 -0
  456. package/dist/blocks/undo/svelte/index.d.ts +13 -0
  457. package/dist/blocks/undo/svelte/index.js +14 -0
  458. package/dist/blocks/undo/vue/index.d.ts +13 -0
  459. package/dist/blocks/undo/vue/index.js +14 -0
  460. package/dist/blocks/usage/index.d.ts +10 -4
  461. package/dist/blocks/usage/index.js +16 -233
  462. package/dist/blocks/usage/react/index.d.ts +23 -0
  463. package/dist/blocks/usage/react/index.js +38 -0
  464. package/dist/blocks/usage/react/server.d.ts +7 -0
  465. package/dist/blocks/usage/react/server.js +7 -0
  466. package/dist/blocks/usage/solid/index.d.ts +13 -0
  467. package/dist/blocks/usage/solid/index.js +14 -0
  468. package/dist/blocks/usage/svelte/index.d.ts +13 -0
  469. package/dist/blocks/usage/svelte/index.js +14 -0
  470. package/dist/blocks/usage/vue/index.d.ts +13 -0
  471. package/dist/blocks/usage/vue/index.js +14 -0
  472. package/dist/blocks/versions/index.d.ts +165 -0
  473. package/dist/blocks/versions/index.js +283 -0
  474. package/dist/blocks/waitlist/index.d.ts +57 -19
  475. package/dist/blocks/waitlist/index.js +46 -12
  476. package/dist/blocks/webhooks/index.d.ts +269 -137
  477. package/dist/blocks/webhooks/index.js +752 -179
  478. package/dist/blocks/work-items/index.d.ts +208 -0
  479. package/dist/blocks/work-items/index.js +305 -0
  480. package/dist/blocks/workflow-builder/index.d.ts +26 -6
  481. package/dist/blocks/workflow-builder/index.js +30 -5
  482. package/dist/blocks/workflow-builder/react/index.d.ts +4 -19
  483. package/dist/blocks/workflow-builder/react/index.js +45 -89
  484. package/dist/blocks/workflow-builder/solid/index.d.ts +20 -0
  485. package/dist/blocks/workflow-builder/solid/index.js +23 -0
  486. package/dist/blocks/workflow-builder/svelte/index.d.ts +20 -0
  487. package/dist/blocks/workflow-builder/svelte/index.js +23 -0
  488. package/dist/blocks/workflow-builder/vue/index.d.ts +20 -0
  489. package/dist/blocks/workflow-builder/vue/index.js +23 -0
  490. package/dist/blocks/workflows/index.d.ts +20 -3
  491. package/dist/blocks/workflows/index.js +27 -3
  492. package/dist/blocks/workflows/react/index.d.ts +5 -20
  493. package/dist/blocks/workflows/react/index.js +41 -113
  494. package/dist/blocks/workflows/solid/index.d.ts +20 -0
  495. package/dist/blocks/workflows/solid/index.js +23 -0
  496. package/dist/blocks/workflows/svelte/index.d.ts +20 -0
  497. package/dist/blocks/workflows/svelte/index.js +23 -0
  498. package/dist/blocks/workflows/vue/index.d.ts +20 -0
  499. package/dist/blocks/workflows/vue/index.js +23 -0
  500. package/dist/blocks-D2WQ63PI.js +84 -0
  501. package/dist/bookings-0XnhHNLM.js +181 -0
  502. package/dist/build-Cm0T5MVG.js +1815 -0
  503. package/dist/build-Cx08LOT7.js +689 -0
  504. package/dist/calendar-DcFrpSOy.js +801 -0
  505. package/dist/channel-D-LHCY11.d.ts +78 -0
  506. package/dist/channels-C-GCoNLd.js +114 -0
  507. package/dist/chat-sdk/index.d.ts +131 -7
  508. package/dist/chat-sdk/index.js +154 -6
  509. package/dist/chat-sdk/react/index.d.ts +2 -1
  510. package/dist/chat-sdk/react/index.js +1 -2
  511. package/dist/chat-sdk/react/server.d.ts +2 -1
  512. package/dist/chat-sdk/react/server.js +1 -2
  513. package/dist/cli/add-B0zoJUYX.js +651 -0
  514. package/dist/cli/add-Bd5M6uEZ.js +75 -0
  515. package/dist/cli/add-CT6p5psO.js +1 -0
  516. package/dist/cli/adopt-C9jl8z0h.js +1 -0
  517. package/dist/cli/adopt-CebmlHL-.js +393 -0
  518. package/dist/cli/agent-CCt_aXpJ.js +176 -0
  519. package/dist/cli/apply-Dxk8AUNU.js +302 -0
  520. package/dist/cli/bin.js +40 -20
  521. package/dist/cli/blocks-Bzz326nn.js +1 -0
  522. package/dist/cli/blocks-Dq25D80b.js +124 -0
  523. package/dist/cli/cache-Cx6qlRDR.js +502 -0
  524. package/dist/cli/catalog-Di15TkM2.js +187 -0
  525. package/dist/cli/codemod-woL4cVe0.js +985 -0
  526. package/dist/cli/command-CK9Cn8HV.js +836 -0
  527. package/dist/cli/completion-BO5UK6bG.js +1 -0
  528. package/dist/cli/completion-CWoDmFZr.js +205 -0
  529. package/dist/cli/completion-J3dqnNoW.js +30 -0
  530. package/dist/cli/config-C1d-mbUA.js +1 -0
  531. package/dist/cli/config-CLHpTk9Y.js +1421 -0
  532. package/dist/cli/config-MuKY9kUj.js +39 -0
  533. package/dist/cli/config-edit-Ct1lXe8a.js +603 -0
  534. package/dist/cli/db-DT1bGB02.js +78 -0
  535. package/dist/cli/design-edit-B-WsnhUF.js +175 -0
  536. package/dist/cli/detect-DYDUBLU4.js +84 -0
  537. package/dist/cli/dist-D_VbPAMR.js +129 -0
  538. package/dist/cli/dist-DuiMMRbJ.js +1112 -0
  539. package/dist/cli/doctor-SGw36h1D.js +3806 -0
  540. package/dist/cli/emit-ZAYeh4Yn.js +1042 -0
  541. package/dist/cli/env-CVXvJoLP.js +142 -0
  542. package/dist/cli/env-D3gZ-OHj.js +1 -0
  543. package/dist/cli/env-DJ4ZaJpe.js +1 -0
  544. package/dist/cli/env-DMw_MBe5.js +996 -0
  545. package/dist/cli/errors-Caiz_0so.js +98 -0
  546. package/dist/cli/fastest-levenshtein-dhRRvrM2.js +120 -0
  547. package/dist/cli/files-DDvAwTko.js +963 -0
  548. package/dist/cli/gen-B344S1Oy.js +304 -0
  549. package/dist/cli/guards-CUlDNYZs.js +8 -0
  550. package/dist/cli/index.d.ts +258 -129
  551. package/dist/cli/index.js +13 -10
  552. package/dist/cli/init-B1dL-RZL.js +393 -0
  553. package/dist/cli/introspect-BPcFi8ow.js +51 -0
  554. package/dist/cli/io-BiPX-_J1.js +37 -0
  555. package/dist/cli/jsonc-C8M0EhHB.js +1 -0
  556. package/dist/cli/keys-jsxCNJdz.js +106 -0
  557. package/dist/cli/metadata-CxBZo4KM.js +138 -0
  558. package/dist/cli/module-migration-YFFdWC5X.js +592 -0
  559. package/dist/cli/moved-D9OT_Uyy.js +152 -0
  560. package/dist/cli/parse-DE59XyWt.js +170 -0
  561. package/dist/cli/preset-DmcC4nWE.js +129 -0
  562. package/dist/cli/prompts-Bvg_DBpe.js +1137 -0
  563. package/dist/cli/redact-PjNswZOs.js +35 -0
  564. package/dist/cli/rolldown-runtime-kJ_i4yPo.js +26 -0
  565. package/dist/cli/run-CM_2g6KQ.js +684 -0
  566. package/dist/cli/run-DaHfUUO9.js +1539 -0
  567. package/dist/cli/scaffold-CFdDq36-.js +898 -0
  568. package/dist/cli/scaffold-Dsjr7sOT.js +1 -0
  569. package/dist/cli/seed-DldDdXWO.js +113 -0
  570. package/dist/cli/seed-DtRFysBe.js +1 -0
  571. package/dist/cli/shell-Btv_4Yhe.js +10 -0
  572. package/dist/cli/skills-v34NDb2D.js +121 -0
  573. package/dist/cli/snapshot-DAxLi4hO.js +347 -0
  574. package/dist/cli/source-args-0I9zylYy.js +47 -0
  575. package/dist/cli/spec-CaaSOYZS.js +7501 -0
  576. package/dist/cli/spec-De0cfceR.js +1 -0
  577. package/dist/cli/sql-0I1EQ3JG.js +2 -0
  578. package/dist/cli/sql-DDLWwzh9.js +326 -0
  579. package/dist/cli/stack-status-CRanl-CN.js +456 -0
  580. package/dist/cli/style-2JfIPVMQ.js +29 -0
  581. package/dist/cli/supabase-toml-DjLgBYEo.js +1153 -0
  582. package/dist/cli/sync-DFx-6t5n.js +88 -0
  583. package/dist/cli/topics-GJuIDwlY.js +30 -0
  584. package/dist/cli/trace-VbdO6bcN.js +7 -0
  585. package/dist/cli/typegen--TfvOPLh.js +494 -0
  586. package/dist/cli/typegen-version-BNBPI4Eu.js +9 -0
  587. package/dist/cli/validate-BfWNKvxy.js +7522 -0
  588. package/dist/cli/version-DNRW4DAP.js +4 -0
  589. package/dist/cli/write-BS6F3Yvz.js +180 -0
  590. package/dist/client/index.d.ts +7 -4
  591. package/dist/client/index.js +152 -6
  592. package/dist/client/native/index.d.ts +71 -4
  593. package/dist/client/native/index.js +65 -6
  594. package/dist/client-01MAuqzW.js +137 -0
  595. package/dist/client-B7QVIrJS.d.ts +263 -0
  596. package/dist/client-B9CqzgPO.js +75 -0
  597. package/dist/client-BAcILZOf.d.ts +122 -0
  598. package/dist/client-BOT2KVIp.js +128 -0
  599. package/dist/client-BUGIS__1.js +1051 -0
  600. package/dist/client-BVZtq_rQ.d.ts +34 -0
  601. package/dist/client-BYaOGCOG.js +84 -0
  602. package/dist/client-BfgwocyT.js +155 -0
  603. package/dist/client-BpS8a6Fm.js +51 -0
  604. package/dist/client-BxnLb9bz.d.ts +58 -0
  605. package/dist/client-BzCv4kKE.js +65 -0
  606. package/dist/client-C-2ajnhM.js +89 -0
  607. package/dist/client-C5mUEb2n.js +55 -0
  608. package/dist/client-C9QrWrnt.js +209 -0
  609. package/dist/client-CFdMJ1h9.d.ts +277 -0
  610. package/dist/client-CHmjaI0j.d.ts +103 -0
  611. package/dist/client-CWs3X4g1.js +120 -0
  612. package/dist/client-Cdedx_lw.js +438 -0
  613. package/dist/client-CiGjS6us.js +169 -0
  614. package/dist/client-CilSKXNu.js +288 -0
  615. package/dist/client-ClZ0D-if.d.ts +162 -0
  616. package/dist/client-Cmensu7l.d.ts +419 -0
  617. package/dist/client-Co6BPmvr.d.ts +108 -0
  618. package/dist/client-CoVGPi0c.js +133 -0
  619. package/dist/client-CvITjt-9.js +310 -0
  620. package/dist/client-CzI4QpG3.d.ts +131 -0
  621. package/dist/client-D5CZ2a34.d.ts +455 -0
  622. package/dist/client-DAHsEOVV.d.ts +155 -0
  623. package/dist/client-DG7FwgZD.js +104 -0
  624. package/dist/client-DIrCmOXz.d.ts +157 -0
  625. package/dist/client-DNq8xYb-.js +52 -0
  626. package/dist/client-DdfSIZ3M.d.ts +107 -0
  627. package/dist/client-DjTRlN3a.d.ts +68 -0
  628. package/dist/client-Ezlbskjq.js +60 -0
  629. package/dist/client-LLmgiCwJ.d.ts +135 -0
  630. package/dist/client-Lx3mlvKO.d.ts +100 -0
  631. package/dist/client-PGRk3DGz.js +98 -0
  632. package/dist/client-Tc47rlSe.d.ts +350 -0
  633. package/dist/client-VvY0K3wr.d.ts +59 -0
  634. package/dist/client-WAdEBBrH.d.ts +65 -0
  635. package/dist/client-WHeWTNVL.d.ts +130 -0
  636. package/dist/client-WgrPIHH-.js +213 -0
  637. package/dist/client-ZTtSV3l8.js +40 -0
  638. package/dist/client-b2_GjzzD.js +438 -0
  639. package/dist/client-ckXfdy1k.js +38 -0
  640. package/dist/client-e-hFkLUf.d.ts +34 -0
  641. package/dist/client-hyP_nS5R.d.ts +218 -0
  642. package/dist/client-i8glKhxh.js +67 -0
  643. package/dist/client-iDLLvGR4.d.ts +52 -0
  644. package/dist/client-pxjbgOz6.js +376 -0
  645. package/dist/client-xkSCp9hN.d.ts +101 -0
  646. package/dist/client-ysNShuJZ.d.ts +39 -0
  647. package/dist/cloud-event-5rCEzIgK.d.ts +64 -0
  648. package/dist/codecs-Bm46sVxr.d.ts +215 -0
  649. package/dist/codecs-YAekuQ08.js +358 -0
  650. package/dist/codegen-DeoSt1mi.d.ts +1571 -0
  651. package/dist/comments-D7sbd0xG.js +230 -0
  652. package/dist/commerce/index.d.ts +211 -0
  653. package/dist/commerce/index.js +517 -0
  654. package/dist/compiler-BVxepAY0.d.ts +14 -0
  655. package/dist/compose-Djntdacs.js +53 -0
  656. package/dist/composite-M6zPs1Xm.js +130 -0
  657. package/dist/composite-djtGy6bz.d.ts +67 -0
  658. package/dist/config/index.d.ts +7 -5
  659. package/dist/config/index.js +7 -4
  660. package/dist/config-BA1K4OPk.js +557 -0
  661. package/dist/config-C4MozTD7.js +3892 -0
  662. package/dist/connector-Cp8CqssJ.d.ts +107 -0
  663. package/dist/connectors-CjD-R2ks.d.ts +141 -0
  664. package/dist/context-1sSWcd7_.d.ts +365 -0
  665. package/dist/context-B8_p3MXo.js +11 -0
  666. package/dist/context-BDDgjoxz.js +41 -0
  667. package/dist/context-C-bHOtoD.js +5 -0
  668. package/dist/context-D6ZMKc2L.js +19 -0
  669. package/dist/context-wDKxSl9x.js +9 -0
  670. package/dist/controller-D6NyNrlZ.js +79 -0
  671. package/dist/controller-D845qKh2.d.ts +46 -0
  672. package/dist/credentials/index.d.ts +15 -5
  673. package/dist/credentials/index.js +16 -8
  674. package/dist/cron-CUaKTjWC.js +145 -0
  675. package/dist/cron-route-CoL-By8Z.js +24 -0
  676. package/dist/csv-CVfXqaAu.js +89 -0
  677. package/dist/csv-D3eKxV1T.d.ts +28 -0
  678. package/dist/define-B2ln373W.js +1896 -0
  679. package/dist/define-DxHHbNEb.d.ts +1005 -0
  680. package/dist/define-block-B6Gjs57G.js +52 -0
  681. package/dist/define-block-CLZMEFeK.d.ts +256 -0
  682. package/dist/delegation-Dt8hMJWu.js +140 -0
  683. package/dist/delivery-B1mKaOen.js +30 -0
  684. package/dist/delivery-BeHgwS3k.d.ts +69 -0
  685. package/dist/documents-CWn2mtYf.d.ts +96 -0
  686. package/dist/edge/index.d.ts +16 -14
  687. package/dist/edge/index.js +24 -18
  688. package/dist/elysia/index.d.ts +1 -1
  689. package/dist/elysia/index.js +2 -2
  690. package/dist/email-BcmbIWOX.d.ts +42 -0
  691. package/dist/embeddings-C2S14foD.d.ts +78 -0
  692. package/dist/embeddings-CVeOoufZ.js +128 -0
  693. package/dist/ended-nIdGCHxk.d.ts +70 -0
  694. package/dist/entitlements-BvU5dLpW.js +45 -0
  695. package/dist/entitlements-CbzCKalR.d.ts +53 -0
  696. package/dist/env/index.d.ts +1 -1
  697. package/dist/env/index.js +3 -3
  698. package/dist/envelope-CHYk5MXU.js +90 -0
  699. package/dist/errors-8i6tSICm.js +301 -0
  700. package/dist/errors-PIpcoe4z.js +44 -0
  701. package/dist/escape-like-AUEPn-C5.d.ts +15 -0
  702. package/dist/eve/index.d.ts +5 -5
  703. package/dist/eve/index.js +9 -9
  704. package/dist/eve-DUF70Vgi.d.ts +151 -0
  705. package/dist/event-calendar-DJXXMJ3x.d.ts +217 -0
  706. package/dist/event-map-Dy2vKHai.js +19 -0
  707. package/dist/events/index.d.ts +4 -4
  708. package/dist/events/index.js +10 -7
  709. package/dist/events-CTreRrgP.d.ts +800 -0
  710. package/dist/events-xbpHkcK9.js +82 -0
  711. package/dist/executor-BBHgjUJu.d.ts +39 -0
  712. package/dist/executor-BINiCFNp.d.ts +95 -0
  713. package/dist/executor-BXSHYyW2.js +735 -0
  714. package/dist/executor-D1kYY5BA.js +206 -0
  715. package/dist/executor-D3K3tycZ.js +147 -0
  716. package/dist/executor-DKrZr3AC.d.ts +174 -0
  717. package/dist/executor-DoE-5iM8.d.ts +272 -0
  718. package/dist/expo/index.d.ts +4 -4
  719. package/dist/expo/index.js +6 -6
  720. package/dist/expo-sqlite/index.d.ts +3 -3
  721. package/dist/expo-sqlite/index.js +2 -2
  722. package/dist/field-errors-CWXN_h_E.d.ts +113 -0
  723. package/dist/field-formats-Cif5gr7c.js +102 -0
  724. package/dist/field-formats-DCvOQlOy.d.ts +39 -0
  725. package/dist/filter-evaluate-C0ULNfS7.js +214 -0
  726. package/dist/filter-evaluate-CjcFq0RT.d.ts +34 -0
  727. package/dist/filter-query-B3lhckKX.js +518 -0
  728. package/dist/filter-query-BKmRYrTE.d.ts +121 -0
  729. package/dist/flags-D_D1jAHB.d.ts +230 -0
  730. package/dist/flags-XAOsdNAc.js +279 -0
  731. package/dist/flags-sdk/index.d.ts +143 -0
  732. package/dist/flags-sdk/index.js +175 -0
  733. package/dist/form-definition-sagoefQr.d.ts +95 -0
  734. package/dist/format-CNwSjXUU.d.ts +70 -0
  735. package/dist/framework-DG5Bv39u.d.ts +26 -0
  736. package/dist/framework-INbjMZX1.js +51 -0
  737. package/dist/function-contract-B4c0XuTU.d.ts +21 -0
  738. package/dist/function-contract-DmkBg19r.js +5 -0
  739. package/dist/gateway-Cup00l0w.d.ts +109 -0
  740. package/dist/gateway-options-ClvvfuuU.d.ts +29 -0
  741. package/dist/gateway-options-DcLcWL5_.js +27 -0
  742. package/dist/graph-Cs28bOlK.js +360 -0
  743. package/dist/groups-CxonH3u5.js +16 -0
  744. package/dist/h3/index.d.ts +7 -3
  745. package/dist/h3/index.js +3 -3
  746. package/dist/h3/v1/index.d.ts +1 -1
  747. package/dist/h3/v1/index.js +2 -2
  748. package/dist/hono/index.d.ts +24 -10
  749. package/dist/hono/index.js +50 -22
  750. package/dist/http-BF-V0CUF.js +25 -0
  751. package/dist/impersonation-CDeCzZP6.js +62 -0
  752. package/dist/impersonation-D5chOkrO.d.ts +25 -0
  753. package/dist/inbox-3ql4phyr.d.ts +400 -0
  754. package/dist/index-BIi8i6BO.d.ts +97 -0
  755. package/dist/index-BkzNUPId.d.ts +131 -0
  756. package/dist/index-BlqrGvb3.d.ts +227 -0
  757. package/dist/index-Brhm22eL.d.ts +138 -0
  758. package/dist/index-Bvw9r94Q.d.ts +245 -0
  759. package/dist/index-CETRk4YO.d.ts +82 -0
  760. package/dist/index-CrZitvSC.d.ts +258 -0
  761. package/dist/index-DfVXx4Ia.d.ts +202 -0
  762. package/dist/index-DygICr8c.d.ts +206 -0
  763. package/dist/index-Ej8XQ9w9.d.ts +58 -0
  764. package/dist/index-jhqhynmh.d.ts +58 -0
  765. package/dist/index.d.ts +15 -15
  766. package/dist/index.js +15 -14
  767. package/dist/iso4217-A8ev-CNW.js +176 -0
  768. package/dist/json-schema-CpYINXG8.js +548 -0
  769. package/dist/jws-35a8VhFV.d.ts +60 -0
  770. package/dist/jws-milwSg7E.js +191 -0
  771. package/dist/kit-D5S7KNFe.d.ts +66 -0
  772. package/dist/kit-MUK34-ZG.js +104 -0
  773. package/dist/knowledge-BXQ2-V0a.d.ts +187 -0
  774. package/dist/knowledge-CJ_Mm3ic.js +272 -0
  775. package/dist/lint/index.js +9 -9
  776. package/dist/list/index.d.ts +4 -2
  777. package/dist/list/index.js +4 -2
  778. package/dist/list-query-CBXNfJt4.js +549 -0
  779. package/dist/list-query-PvP3pPGQ.d.ts +194 -0
  780. package/dist/live-DwDreq1n.js +239 -0
  781. package/dist/mcp/index.d.ts +24 -7
  782. package/dist/mcp/index.js +76 -55
  783. package/dist/mcp/sdk/index.d.ts +6 -6
  784. package/dist/mcp/sdk/index.js +7 -7
  785. package/dist/messages-Cx4ttLJJ.js +493 -0
  786. package/dist/metric-definition-95HFoW1V.d.ts +70 -0
  787. package/dist/metric-definition-BjxVn4R5.js +117 -0
  788. package/dist/mfa-DtflCXEt.d.ts +30 -0
  789. package/dist/model-lUafmeBQ.d.ts +311 -0
  790. package/dist/model-messages-CTu-6kBu.js +206 -0
  791. package/dist/money-95Rff2vT.js +185 -0
  792. package/dist/money-DFpWzQvk.d.ts +76 -0
  793. package/dist/money-codec-C_-K5ZUU.js +41 -0
  794. package/dist/nestjs/index.d.ts +2 -2
  795. package/dist/nestjs/index.js +2 -2
  796. package/dist/next/index.d.ts +26 -16
  797. package/dist/next/index.js +17 -16
  798. package/dist/node/index.d.ts +2 -2
  799. package/dist/node/index.js +3 -3
  800. package/dist/nuxt/index.d.ts +2 -2
  801. package/dist/nuxt/index.js +3 -2
  802. package/dist/onboarding-BZvLLPaY.js +68 -0
  803. package/dist/openapi/index.d.ts +3 -3
  804. package/dist/openapi/index.js +2 -2
  805. package/dist/operations-C9-UcReN.d.ts +6 -0
  806. package/dist/operations-CsIfMED7.js +29 -0
  807. package/dist/optional-peer-Dx8TaYXw.js +29 -0
  808. package/dist/options-B0FcEKtH.js +5 -0
  809. package/dist/options-B5BU2Yg7.js +11 -0
  810. package/dist/options-B5woz53h.js +5 -0
  811. package/dist/options-B7EJaOX-.js +5 -0
  812. package/dist/options-B9q8CROT.js +9 -0
  813. package/dist/options-BA6jV6py.js +10 -0
  814. package/dist/options-BAW2ZlZ8.js +8 -0
  815. package/dist/options-BMjcVuaI.js +82 -0
  816. package/dist/options-BOOEzor9.js +5 -0
  817. package/dist/options-BQ07tTYr.js +11 -0
  818. package/dist/options-BZsoPJGX.js +5 -0
  819. package/dist/options-BesyRBnM.js +16 -0
  820. package/dist/options-Bf96aVk5.js +10 -0
  821. package/dist/options-BlOPivzq.js +8 -0
  822. package/dist/options-Blg8lAkz.js +9 -0
  823. package/dist/options-Bn4cu0gt.js +5 -0
  824. package/dist/options-BnoJOwXK.js +8 -0
  825. package/dist/options-Bp7sgKvl.js +30 -0
  826. package/dist/options-BqO9GYig.js +311 -0
  827. package/dist/options-BxcFLL1G.js +8 -0
  828. package/dist/options-C1HR4UZd.js +13 -0
  829. package/dist/options-C239TLRF.js +14 -0
  830. package/dist/options-C2HesT4A.js +9 -0
  831. package/dist/options-C3EzJATk.js +10 -0
  832. package/dist/options-C3hZ1fbC.js +10 -0
  833. package/dist/options-C6rEL6U5.js +8 -0
  834. package/dist/options-CAzVf-1T.js +8 -0
  835. package/dist/options-CGKSUFUq.js +5 -0
  836. package/dist/options-CGjGE8xS.js +12 -0
  837. package/dist/options-CK5WiFwG.js +11 -0
  838. package/dist/options-CN7PHkhU.js +8 -0
  839. package/dist/options-CTZNpb2n.js +5 -0
  840. package/dist/options-CUqQ9pm7.js +9 -0
  841. package/dist/options-CVSWgZpY.js +8 -0
  842. package/dist/options-CXFz0xxS.js +8 -0
  843. package/dist/options-CZk_fbbg.js +9 -0
  844. package/dist/options-C_pb1Nd3.js +5 -0
  845. package/dist/options-CbSOj53r.d.ts +52 -0
  846. package/dist/options-ChD15QxJ.js +9 -0
  847. package/dist/options-CkScQRJR.js +12 -0
  848. package/dist/options-CljDnQt2.js +25 -0
  849. package/dist/options-CmraJhd9.js +5 -0
  850. package/dist/options-CoX6VKGb.js +8 -0
  851. package/dist/options-CrC78Tee.js +5 -0
  852. package/dist/options-Ctac2R0Q.js +11 -0
  853. package/dist/options-CyD7OObW.js +17 -0
  854. package/dist/options-D1blDihM.js +9 -0
  855. package/dist/options-D2Gd6VfS.js +8 -0
  856. package/dist/options-D2d1fFuw.js +11 -0
  857. package/dist/options-D40CQzji.js +8 -0
  858. package/dist/options-D7f2VKzj.js +25 -0
  859. package/dist/options-DARkpk2P.js +8 -0
  860. package/dist/options-DCduTMST.js +17 -0
  861. package/dist/options-DDzggjN7.js +8 -0
  862. package/dist/options-DMR68VAC.js +5 -0
  863. package/dist/options-DNKyN5uq.js +20 -0
  864. package/dist/options-DTDxFT6J.js +13 -0
  865. package/dist/options-DWpz3V3F.js +8 -0
  866. package/dist/options-DXqcJyOP.js +10 -0
  867. package/dist/options-DYBQ973I.js +8 -0
  868. package/dist/options-Dh4wu9Ks.js +15 -0
  869. package/dist/options-Dmg1Da9P.js +25 -0
  870. package/dist/options-DsUgamiy.js +5 -0
  871. package/dist/options-EsUh744F.js +13 -0
  872. package/dist/options-Fz6xqu-b.js +5 -0
  873. package/dist/options-HSv8R6h5.js +13 -0
  874. package/dist/options-I8zVkB_y.js +8 -0
  875. package/dist/options-MHhjOoWz.js +5 -0
  876. package/dist/options-MLxMkd5B.js +11 -0
  877. package/dist/options-OJ5zmgr8.js +10 -0
  878. package/dist/options-QKP9FFcK.js +8 -0
  879. package/dist/options-SViK_2x2.js +12 -0
  880. package/dist/options-XgfTctbI.js +5 -0
  881. package/dist/options-_9arpsX9.js +11 -0
  882. package/dist/options-eBPsk4WI.js +11 -0
  883. package/dist/options-kLKILdIu.js +10 -0
  884. package/dist/options-n22NK3PL.js +8 -0
  885. package/dist/options-oeAq4Ho5.js +12 -0
  886. package/dist/options-qU8vgxhO.js +18 -0
  887. package/dist/options-vXMBEWSH.js +5 -0
  888. package/dist/options-wFnK3qWl.js +9 -0
  889. package/dist/options-xVAy3UsV.js +9 -0
  890. package/dist/organizations-Cw7om8uk.js +398 -0
  891. package/dist/orpc/index.d.ts +26 -10
  892. package/dist/orpc/index.js +54 -33
  893. package/dist/otel/index.d.ts +3 -3
  894. package/dist/otel/index.js +42 -7
  895. package/dist/outbox-BTeqjbum.d.ts +181 -0
  896. package/dist/overlay/index.d.ts +1 -1
  897. package/dist/overlay/index.js +3 -3
  898. package/dist/payments-h45bswA-.js +16 -0
  899. package/dist/pg-error-BV_X8Isq.js +26 -0
  900. package/dist/plugin-CDLJRFFg.d.ts +190 -0
  901. package/dist/plugins/actor/index.d.ts +1 -1
  902. package/dist/plugins/actor/index.js +1 -1
  903. package/dist/plugins/rules/index.d.ts +2 -2
  904. package/dist/plugins/rules/index.js +2 -2
  905. package/dist/plugins/soft-delete/index.d.ts +3 -3
  906. package/dist/plugins/soft-delete/index.js +4 -4
  907. package/dist/plugins/tenant/index.d.ts +4 -3
  908. package/dist/plugins/tenant/index.js +3 -3
  909. package/dist/plugins/timestamps/index.d.ts +1 -1
  910. package/dist/plugins/timestamps/index.js +1 -1
  911. package/dist/plugins/validation/index.d.ts +2 -2
  912. package/dist/plugins/validation/index.js +3 -3
  913. package/dist/pool-CwOCsX9e.d.ts +114 -0
  914. package/dist/pool-errors-GMjlCN0d.js +27 -0
  915. package/dist/ports-Ca63W4cW.d.ts +285 -0
  916. package/dist/ports-DAdQyjZz.d.ts +86 -0
  917. package/dist/ports-DGK3KTDH.js +133 -0
  918. package/dist/postgres/index.d.ts +28 -6
  919. package/dist/postgres/index.js +54 -23
  920. package/dist/postgrest-Cw9Bs5gm.d.ts +53 -0
  921. package/dist/powersync/index.d.ts +4 -4
  922. package/dist/powersync/index.js +4 -4
  923. package/dist/powersync/react/index.d.ts +8 -3
  924. package/dist/powersync/react/index.js +11 -3
  925. package/dist/preset/index.d.ts +352 -0
  926. package/dist/preset/index.js +564 -0
  927. package/dist/problem-CEjyhV5T.d.ts +76 -0
  928. package/dist/problem-pIiL3WbE.js +159 -0
  929. package/dist/provider-9gBq9W6k.d.ts +113 -0
  930. package/dist/provider-DKh2xFZb.js +57 -0
  931. package/dist/push-token-D6REHMMw.js +16 -0
  932. package/dist/push-token-asrmi7-6.d.ts +24 -0
  933. package/dist/query/index.d.ts +2 -2
  934. package/dist/range-DwpWe8e7.js +7 -0
  935. package/dist/range-p5V4rBhZ.d.ts +8 -0
  936. package/dist/rank-keys-DcPMt_Jk.js +60 -0
  937. package/dist/rank-result-DS8IoLup.js +18 -0
  938. package/dist/rank-result-Dngpt2n5.d.ts +14 -0
  939. package/dist/rate-limit--QSiFA6D.js +325 -0
  940. package/dist/rate-limit-BtbddDnE.js +49 -0
  941. package/dist/rate-limit-C88MEAOm.d.ts +41 -0
  942. package/dist/ratelimit-headers-Bsxx0Tj2.js +62 -0
  943. package/dist/react/index.d.ts +9 -9
  944. package/dist/react/index.js +3 -4
  945. package/dist/react/native/index.d.ts +1 -1
  946. package/dist/react/native/index.js +2 -2
  947. package/dist/react/server.d.ts +10 -10
  948. package/dist/react/server.js +3 -3
  949. package/dist/react/session.d.ts +2 -2
  950. package/dist/react-CKXUkwPx.js +410 -0
  951. package/dist/react-controller-Xn-IU44p.js +40 -0
  952. package/dist/react-env-Cc7Vf6eb.js +13 -0
  953. package/dist/react-router/index.d.ts +6 -6
  954. package/dist/react-router/index.js +7 -7
  955. package/dist/read-set-GEb-i0On.js +314 -0
  956. package/dist/realtime/index.d.ts +8 -4
  957. package/dist/realtime/index.js +5 -327
  958. package/dist/realtime-status-D2dw1hOE.js +12 -0
  959. package/dist/realtime-status-DcsO00Gw.d.ts +8 -0
  960. package/dist/refusal-br4Ma9Cf.js +61 -0
  961. package/dist/refusal-oD3ISM9h.d.ts +18 -0
  962. package/dist/replicas-BvIL4_jL.js +94 -0
  963. package/dist/resolve-CAR9oaKW.js +869 -0
  964. package/dist/resolve-w9EpHzuM.d.ts +266 -0
  965. package/dist/resource-B4ka8dDH.d.ts +106 -0
  966. package/dist/resource-C8r5xGqY.js +463 -0
  967. package/dist/resource-DO4gbVi5.js +91 -0
  968. package/dist/resource-execute-D0yQ-8WR.d.ts +12 -0
  969. package/dist/resource-types-D2vEQVXI.d.ts +141 -0
  970. package/dist/resources-BklF-rjz.d.ts +7 -0
  971. package/dist/resources-BlZdLsWQ.js +64 -0
  972. package/dist/respond-C7I8kLK_.d.ts +93 -0
  973. package/dist/respond-DdhZ9Wbn.js +95 -0
  974. package/dist/result-BlgnMB0H.js +128 -0
  975. package/dist/result-Cj3yWhjH.d.ts +298 -0
  976. package/dist/rrule-zBh3CA1r.js +290 -0
  977. package/dist/rules-B0-3Iosu.js +261 -0
  978. package/dist/run-watch-CQRdpy-f.js +53 -0
  979. package/dist/sales-lines-BAk8In-Z.js +41 -0
  980. package/dist/sales-lines-C6gafAwg.d.ts +28 -0
  981. package/dist/sales-shared-DAAGwQwN.d.ts +8 -0
  982. package/dist/sales-shared-SblIgCgI.js +22 -0
  983. package/dist/scope-DgWjuXUw.js +90 -0
  984. package/dist/search-B6h03cAx.js +106 -0
  985. package/dist/search-BtoWY6n_.js +9 -0
  986. package/dist/server/index.d.ts +157 -51
  987. package/dist/server/index.js +295 -20
  988. package/dist/server-types-OohhIQb2.d.ts +737 -0
  989. package/dist/session-DiWHtYrO.d.ts +95 -0
  990. package/dist/settings-BXFn9zpS.js +90 -0
  991. package/dist/shared-BmMcMoW9.js +89 -0
  992. package/dist/shared-DbO3Dfms.js +14 -0
  993. package/dist/shared-as0EG51f.js +60 -0
  994. package/dist/sign-in-D0xN6E_l.js +360 -0
  995. package/dist/signatures-B41ApWXA.js +145 -0
  996. package/dist/signatures-BMdJ7neI.d.ts +43 -0
  997. package/dist/signers-CXt_wA9S.d.ts +385 -0
  998. package/dist/signing-keys-Bq9mMCTh.d.ts +90 -0
  999. package/dist/solid/index.d.ts +8 -8
  1000. package/dist/solid/index.js +3 -8
  1001. package/dist/solid-controller-DLsmrczT.js +33 -0
  1002. package/dist/solid-controller-DqlvYFZa.d.ts +11 -0
  1003. package/dist/solid-start/index.d.ts +8 -12
  1004. package/dist/solid-start/index.js +8 -7
  1005. package/dist/spec/index.d.ts +25 -5
  1006. package/dist/spec/index.js +37 -4
  1007. package/dist/spec-pins-Dqpml2dZ.d.ts +84 -0
  1008. package/dist/spec-pins-S4PymRxp.js +60 -0
  1009. package/dist/sql/index.d.ts +189 -28
  1010. package/dist/sql/index.js +74328 -26488
  1011. package/dist/sql-DJrXG-3Z.js +422 -0
  1012. package/dist/sso-BDva_-4y.js +217 -0
  1013. package/dist/sso-BN0LnMqE.d.ts +131 -0
  1014. package/dist/ssr/index.d.ts +5 -6
  1015. package/dist/ssr/index.js +4 -4
  1016. package/dist/standard-B5fe2gnW.js +25 -0
  1017. package/dist/standard-C3_AAF3g.d.ts +7 -0
  1018. package/dist/stats-D6vkb89f.js +1128 -0
  1019. package/dist/storage/index.d.ts +3 -3
  1020. package/dist/storage/index.js +14 -10
  1021. package/dist/storage-api-Cx-1iWBd.d.ts +582 -0
  1022. package/dist/store-B5qYKsTh.d.ts +68 -0
  1023. package/dist/streams/index.d.ts +4 -4
  1024. package/dist/streams/index.js +4 -4
  1025. package/dist/streams/redis/index.d.ts +1 -1
  1026. package/dist/streams/redis/index.js +4 -4
  1027. package/dist/stripe/index.d.ts +16 -0
  1028. package/dist/stripe/index.js +14 -0
  1029. package/dist/stripe-NVcNOhHy.d.ts +140 -0
  1030. package/dist/stripe-XZrSmDTf.js +32 -0
  1031. package/dist/subject-readers-DiePmaYP.js +46 -0
  1032. package/dist/subject-readers-fxP5wu0s.d.ts +21 -0
  1033. package/dist/subjects-z8VWA_lF.d.ts +69 -0
  1034. package/dist/subscribers-Cq--DL1E.js +34 -0
  1035. package/dist/supabase-mcp-DomZ-amK.js +28 -0
  1036. package/dist/support-BsKkvA92.js +522 -0
  1037. package/dist/support-view-BbcZR7Io.d.ts +17 -0
  1038. package/dist/svelte/index.d.ts +7 -7
  1039. package/dist/svelte/index.js +2 -2
  1040. package/dist/svelte-controller-CDAujo-_.js +50 -0
  1041. package/dist/svelte-controller-DxxHEHxD.d.ts +10 -0
  1042. package/dist/sveltekit/index.d.ts +11 -13
  1043. package/dist/sveltekit/index.js +9 -9
  1044. package/dist/table-schema-pQlER3jj.js +283 -0
  1045. package/dist/tags-Dw8vKkcI.d.ts +30 -0
  1046. package/dist/tags-PaG0Ns_9.js +84 -0
  1047. package/dist/tanstack-db/index.d.ts +2 -2
  1048. package/dist/tanstack-db/index.js +1 -1
  1049. package/dist/tanstack-db/supabase/index.d.ts +5 -6
  1050. package/dist/tanstack-db/supabase/index.js +180 -9
  1051. package/dist/tanstack-start/index.d.ts +7 -7
  1052. package/dist/tanstack-start/index.js +6 -6
  1053. package/dist/tax-DDZUB_oc.d.ts +273 -0
  1054. package/dist/tax-D_kSCdWU.js +140 -0
  1055. package/dist/tee-Bsisfd7t.js +101 -0
  1056. package/dist/template-DdgYjIZ5.js +123 -0
  1057. package/dist/temporal-CB5Fpo5d.js +79 -0
  1058. package/dist/temporal-required-DqRzr7i0.js +20 -0
  1059. package/dist/tenant-B-fiItlJ.js +27 -0
  1060. package/dist/tenant-DdmVhsff.d.ts +17 -0
  1061. package/dist/tenant-naming-Bsj3Uvap.js +27 -0
  1062. package/dist/testing/index.d.ts +235 -32
  1063. package/dist/testing/index.js +1132 -32
  1064. package/dist/timing-BMCWgpdZ.js +92 -0
  1065. package/dist/topic-ByDz9edV.js +542 -0
  1066. package/dist/topic-cMS7UtM1.d.ts +359 -0
  1067. package/dist/types-6oiy6rIa.d.ts +205 -0
  1068. package/dist/types-CdP0z5tS.d.ts +564 -0
  1069. package/dist/types-D0W4fnsc.d.ts +162 -0
  1070. package/dist/types-R6syp1el.js +29 -0
  1071. package/dist/types-YfwpIE-d.d.ts +357 -0
  1072. package/dist/types-pNY_UpDs.d.ts +240 -0
  1073. package/dist/types-vaoP9S9_.d.ts +635 -0
  1074. package/dist/undo-CEGIRkPA.js +44 -0
  1075. package/dist/undo-DGo0skyO.d.ts +43 -0
  1076. package/dist/usage-CdlfuS3i.js +250 -0
  1077. package/dist/usage-DM2rzczj.d.ts +202 -0
  1078. package/dist/vault-tOkPLnMB.d.ts +50 -0
  1079. package/dist/vercel-connect/index.d.ts +1 -1
  1080. package/dist/vercel-connect/index.js +4 -4
  1081. package/dist/verify-D63A2ALE.d.ts +142 -0
  1082. package/dist/verify-EQcC3Khp.js +126 -0
  1083. package/dist/version-D87ZteKy.js +4 -0
  1084. package/dist/view-DZ63nqwt.js +105 -0
  1085. package/dist/view-Dv0A949a.d.ts +90 -0
  1086. package/dist/vue/index.d.ts +8 -8
  1087. package/dist/vue/index.js +3 -16
  1088. package/dist/vue-controller-C9tFzqAc.js +32 -0
  1089. package/dist/vue-controller-HPfMTDa2.d.ts +11 -0
  1090. package/dist/watch-DDuWYv0Y.d.ts +84 -0
  1091. package/dist/watch-DT_B3CnJ.js +139 -0
  1092. package/dist/watch-topic-EFpOIIDE.d.ts +28 -0
  1093. package/dist/watch-topic-miuymrli.js +57 -0
  1094. package/dist/wire-DEY0ajW9.js +45 -0
  1095. package/dist/workflow-builder-OrglbXUh.js +681 -0
  1096. package/dist/workflow-sdk/builder/index.d.ts +46 -15
  1097. package/dist/workflow-sdk/builder/index.js +69 -21
  1098. package/dist/workflow-sdk/index.d.ts +75 -2
  1099. package/dist/workflow-sdk/index.js +83 -3
  1100. package/dist/workflow-sdk/world/index.d.ts +29 -4
  1101. package/dist/workflow-sdk/world/index.js +137 -59
  1102. package/dist/workflow-sdk-BZ6qsRlY.js +243 -0
  1103. package/dist/workflow-sdk-q8cLwW1K.d.ts +161 -0
  1104. package/dist/workflow-sdk-world-DPMdBfzn.js +2103 -0
  1105. package/dist/workflows-C-OvZpeg.js +282 -0
  1106. package/dist/workflows-DFQeXDAI.d.ts +243 -0
  1107. package/dist/yjs/index.d.ts +67 -0
  1108. package/dist/yjs/index.js +212 -0
  1109. package/package.json +788 -46
  1110. package/schemas/cli-commands-v1.json +220 -0
  1111. package/schemas/cli-result-v1.json +138 -0
  1112. package/schemas/config-v1.json +4147 -726
  1113. package/schemas/doctor-report-v1.json +23 -0
  1114. package/schemas/snapshot-v2.json +271 -0
  1115. package/skills/better-supabase/SKILL.md +11 -4
  1116. package/skills/better-supabase/references/plugins.md +2 -2
  1117. package/skills/better-supabase/references/ui-recipes.md +18652 -0
  1118. package/skills/better-supabase-api/SKILL.md +14 -14
  1119. package/skills/better-supabase-api/references/adapters.md +12 -2
  1120. package/skills/better-supabase-api/references/ai.md +4 -4
  1121. package/skills/better-supabase-api/references/expo.md +1 -1
  1122. package/skills/better-supabase-api/references/powersync.md +1 -1
  1123. package/skills/better-supabase-api/references/streams-credentials.md +8 -5
  1124. package/skills/better-supabase-auth/SKILL.md +18 -11
  1125. package/skills/better-supabase-auth/references/authorization-providers.md +5 -5
  1126. package/skills/better-supabase-testing/SKILL.md +2 -2
  1127. package/testing/act-cases.json +370 -0
  1128. package/dist/access-sql-CrSbK1q-.js +0 -181
  1129. package/dist/actor-CQTlc1Hh.d.ts +0 -43
  1130. package/dist/adapter-CN45ibbV.js +0 -1691
  1131. package/dist/agents-BY_LQXtQ.d.ts +0 -94
  1132. package/dist/ai-cache-Dfgk8nBT.js +0 -81
  1133. package/dist/ai-cache-DrUMMgp6.d.ts +0 -64
  1134. package/dist/ai-chat-CVLRWbtS.js +0 -744
  1135. package/dist/ai-chat-DXkMy74O.d.ts +0 -590
  1136. package/dist/ai-files-CioLu5du.js +0 -320
  1137. package/dist/ai-tasks-BRQ6iQLc.d.ts +0 -131
  1138. package/dist/announcements-Bouy0Ski.d.ts +0 -72
  1139. package/dist/announcements-p_BFofiR.js +0 -107
  1140. package/dist/api-Dnf2q-Ht.d.ts +0 -370
  1141. package/dist/api-DtHFC037.js +0 -676
  1142. package/dist/api-keys-C8BlF3L2.d.ts +0 -156
  1143. package/dist/assistant-DBlFDZsi.d.ts +0 -147
  1144. package/dist/attributes-5dYul0u0.js +0 -13
  1145. package/dist/authorization-BFCqamMs.d.ts +0 -172
  1146. package/dist/authorizer-ayxUDXXP.js +0 -126
  1147. package/dist/base64-D2gsioCY.js +0 -42
  1148. package/dist/before-route-CnR0C0Jr.js +0 -30
  1149. package/dist/bind-ButSzrHe.js +0 -97
  1150. package/dist/bind-CQ5mPyX1.d.ts +0 -62
  1151. package/dist/block-events-DTxU5tfr.js +0 -91
  1152. package/dist/block-fields-CroxUuF2.js +0 -49
  1153. package/dist/block-fields-D1pfrcIY.d.ts +0 -31
  1154. package/dist/block-helpers-C0Xj8War.d.ts +0 -37
  1155. package/dist/block-helpers-Cy3pB96I.js +0 -222
  1156. package/dist/block-hooks-BPNMIlLl.js +0 -114
  1157. package/dist/block-hooks-DaOVC7SC.d.ts +0 -107
  1158. package/dist/block-transport-bAKh-dGc.js +0 -85
  1159. package/dist/block-transport-inD4fFq-.d.ts +0 -70
  1160. package/dist/build-hPwk3_X5.js +0 -1296
  1161. package/dist/build-meLuYGri.js +0 -689
  1162. package/dist/channel-_2Mx1Oyu.d.ts +0 -70
  1163. package/dist/channels-CkgQ_X60.js +0 -114
  1164. package/dist/cli/add-1dc5wM5k.js +0 -69
  1165. package/dist/cli/bin.d.ts +0 -1
  1166. package/dist/cli/cache-CIfA-jBV.js +0 -483
  1167. package/dist/cli/codemod-JVlTQQG2.js +0 -491
  1168. package/dist/cli/command-DV-StG1x.js +0 -507
  1169. package/dist/cli/config-C2Pz2_4A.js +0 -52
  1170. package/dist/cli/config-DpbF8ML3.js +0 -2
  1171. package/dist/cli/config-M-WzL9O2.js +0 -1175
  1172. package/dist/cli/db-BkcfOlyB.js +0 -53
  1173. package/dist/cli/diff-D1jGdb3Y.js +0 -752
  1174. package/dist/cli/dist-DBPdlPYK.js +0 -1112
  1175. package/dist/cli/dist-DRAVaE6w.js +0 -842
  1176. package/dist/cli/dist-DreZ24Sz.js +0 -129
  1177. package/dist/cli/doctor-VcDtuusV.js +0 -3686
  1178. package/dist/cli/emit-BHHfwUoT.js +0 -1136
  1179. package/dist/cli/env-B--LMhEe.js +0 -514
  1180. package/dist/cli/env-vzBG90Um.js +0 -2
  1181. package/dist/cli/env-zHJtMIBo.js +0 -116
  1182. package/dist/cli/errors-CqTLXe2M.js +0 -72
  1183. package/dist/cli/fastest-levenshtein-CF7BCi9l.js +0 -120
  1184. package/dist/cli/files-BVupXPIC.js +0 -34
  1185. package/dist/cli/gen-DmVj3u4L.js +0 -322
  1186. package/dist/cli/glue-C1UE8gQN.js +0 -468
  1187. package/dist/cli/init-CVZ3s5kl.js +0 -258
  1188. package/dist/cli/introspect-BToGNfm-.js +0 -81
  1189. package/dist/cli/io-CFzJVJ68.js +0 -37
  1190. package/dist/cli/jsonc-BUniUpOk.js +0 -2
  1191. package/dist/cli/keys-CJhtIxJ3.js +0 -85
  1192. package/dist/cli/metadata-DSRKCaf-.js +0 -133
  1193. package/dist/cli/openapi-DWa4Ir1q.js +0 -60
  1194. package/dist/cli/project-DZRaBaY7.js +0 -75
  1195. package/dist/cli/prompts-BdeVmVpg.js +0 -2
  1196. package/dist/cli/prompts-DZJB1nTw.js +0 -1142
  1197. package/dist/cli/read-sets-DjJrm8Wj.js +0 -223
  1198. package/dist/cli/rolldown-runtime-CMFfr-1z.js +0 -26
  1199. package/dist/cli/run-DA6_lg3w.js +0 -389
  1200. package/dist/cli/run-DuN1MX-7.js +0 -705
  1201. package/dist/cli/scaffold-5DenHSxF.js +0 -292
  1202. package/dist/cli/scaffold-CwQUMFRb.js +0 -2
  1203. package/dist/cli/seed-CzBmrGON.js +0 -96
  1204. package/dist/cli/seed-DOmit9Hq.js +0 -2
  1205. package/dist/cli/skills-CnO8QFS7.js +0 -139
  1206. package/dist/cli/snapshot-Bstk6ulj.js +0 -287
  1207. package/dist/cli/source-args-BYfq6imV.js +0 -31
  1208. package/dist/cli/spec-CzosTYm3.js +0 -7438
  1209. package/dist/cli/spec-T_0Bcyw7.js +0 -2
  1210. package/dist/cli/sql-BKOOQAX3.js +0 -517
  1211. package/dist/cli/sql-DJrNDxQm.js +0 -3
  1212. package/dist/cli/sql-layout-D6cphHT3.js +0 -69
  1213. package/dist/cli/style-CB3vxgh0.js +0 -29
  1214. package/dist/cli/supabase-toml-B-bIukQF.js +0 -1095
  1215. package/dist/cli/typegen-Demi5-VQ.js +0 -486
  1216. package/dist/cli/typegen-version-DeFbtzYI.js +0 -8
  1217. package/dist/cli/validate-Ca13ktgz.js +0 -7522
  1218. package/dist/cli/version-B4k0aUxS.js +0 -4
  1219. package/dist/client-wxeTQFtB.js +0 -310
  1220. package/dist/cloud-event-Dune0KI7.d.ts +0 -64
  1221. package/dist/compiler-V1qvcST1.d.ts +0 -14
  1222. package/dist/compose-BHej1acw.js +0 -53
  1223. package/dist/composite-CWAJTRBF.d.ts +0 -146
  1224. package/dist/composite-zTe0TCqj.js +0 -130
  1225. package/dist/config-DlKvtt95.js +0 -540
  1226. package/dist/connector-CySQEFcW.d.ts +0 -107
  1227. package/dist/connectors--PGhmiu0.d.ts +0 -120
  1228. package/dist/context-DsV2SueA.d.ts +0 -246
  1229. package/dist/context-nPDvQ-Zl.js +0 -41
  1230. package/dist/cron-D25Ukpxy.js +0 -145
  1231. package/dist/cron-route-D2AN9SA1.js +0 -24
  1232. package/dist/csv-BZnHA1Py.js +0 -25
  1233. package/dist/define-CFQcvM20.js +0 -1949
  1234. package/dist/define-DmcfoNXB.d.ts +0 -1005
  1235. package/dist/embeddings-4ZvFzjsU.js +0 -127
  1236. package/dist/embeddings-B4vhS-dY.d.ts +0 -68
  1237. package/dist/ended-CcvcRqEd.d.ts +0 -69
  1238. package/dist/entitlements-BYFf0Cdh.js +0 -24
  1239. package/dist/entitlements-Ds8qoYZ-.d.ts +0 -51
  1240. package/dist/envelope-DqnYGRw7.js +0 -47
  1241. package/dist/errors-2M6CKMP4.js +0 -271
  1242. package/dist/errors-rZ7VIqp6.js +0 -44
  1243. package/dist/escape-like-DDWoHzh_.d.ts +0 -15
  1244. package/dist/eve-CoAIcCkq.d.ts +0 -151
  1245. package/dist/events-D1BOCll8.d.ts +0 -551
  1246. package/dist/executor-B-fD7DLt.js +0 -735
  1247. package/dist/executor-B_Hfobee.js +0 -162
  1248. package/dist/executor-C-R4pucm.js +0 -83
  1249. package/dist/executor-CpxLPCiz.d.ts +0 -36
  1250. package/dist/executor-DfEtf0cq.d.ts +0 -164
  1251. package/dist/executor-Drzu3dBK.d.ts +0 -261
  1252. package/dist/executor-ngjKL_Pe.d.ts +0 -30
  1253. package/dist/field-errors-DIe9XYWL.d.ts +0 -109
  1254. package/dist/format-DTXdu8ya.d.ts +0 -70
  1255. package/dist/framework-148t1m3C.d.ts +0 -25
  1256. package/dist/framework-3ey3QmrO.js +0 -51
  1257. package/dist/function-contract-BcZenXMO.d.ts +0 -8
  1258. package/dist/gateway-S9vicgeo.d.ts +0 -130
  1259. package/dist/graph-BGyLLFLX.js +0 -265
  1260. package/dist/hooks-Bhza9Hnr.js +0 -277
  1261. package/dist/http-sbmBe5d2.js +0 -25
  1262. package/dist/impersonation-DcqaTBHx.js +0 -148
  1263. package/dist/inbox-Cd1KCEBL.d.ts +0 -384
  1264. package/dist/index-B72Rvv_j.d.ts +0 -89
  1265. package/dist/index-BCHR4Ucl.d.ts +0 -300
  1266. package/dist/index-BUK7jUzR.d.ts +0 -82
  1267. package/dist/index-Ba1SI-uO.d.ts +0 -1331
  1268. package/dist/index-BfxOaOYs.d.ts +0 -245
  1269. package/dist/index-CicIyqOe.d.ts +0 -55
  1270. package/dist/index-D69h4QqD.d.ts +0 -74
  1271. package/dist/index-DG2SUXDQ.d.ts +0 -58
  1272. package/dist/index-DoNVLHOU.d.ts +0 -206
  1273. package/dist/index-R274XFlg.d.ts +0 -138
  1274. package/dist/index-_4R4b01v.d.ts +0 -257
  1275. package/dist/json-schema-CT4tvrkA.js +0 -548
  1276. package/dist/kit-BhHr9T9v.js +0 -104
  1277. package/dist/kit-W99LCPBS.d.ts +0 -66
  1278. package/dist/knowledge-CAReFpRA.d.ts +0 -176
  1279. package/dist/knowledge-DnHtb64A.js +0 -256
  1280. package/dist/list-query-D3JQeEL7.d.ts +0 -164
  1281. package/dist/list-query-gl808ac1.js +0 -459
  1282. package/dist/live-CTAZQkwl.js +0 -257
  1283. package/dist/messages-CJoHHCWT.js +0 -514
  1284. package/dist/mfa-SZc9YYyb.d.ts +0 -54
  1285. package/dist/model-OgBxvk3N.d.ts +0 -300
  1286. package/dist/model-messages-Cxw_Up4f.js +0 -206
  1287. package/dist/modules-DksjZyMW.js +0 -77
  1288. package/dist/modules-DpPwzC7E.d.ts +0 -192
  1289. package/dist/onboarding-LZvlK1P4.d.ts +0 -62
  1290. package/dist/optional-peer-D1pi-skw.js +0 -24
  1291. package/dist/outbox-DZfAvfzC.d.ts +0 -161
  1292. package/dist/plugin-CPK2HsbY.d.ts +0 -190
  1293. package/dist/pool-gkhbGp2E.d.ts +0 -89
  1294. package/dist/postgrest-BUqLag2Q.d.ts +0 -53
  1295. package/dist/problem-CJvFeGu7.js +0 -126
  1296. package/dist/problem-TvGdxO1t.d.ts +0 -73
  1297. package/dist/provider-DxRTex4x.js +0 -57
  1298. package/dist/provider-ib9wzUDz.d.ts +0 -113
  1299. package/dist/rate-limit-Bw7HgmFj.js +0 -260
  1300. package/dist/react-Bmpo59D7.js +0 -409
  1301. package/dist/react-topic-seAWjL3_.js +0 -38
  1302. package/dist/read-set-DAeWhqPf.js +0 -314
  1303. package/dist/refusal-CFI8-5nf.d.ts +0 -18
  1304. package/dist/refusal-K78A1Vmq.js +0 -61
  1305. package/dist/replicas-CwrYp5Zj.js +0 -94
  1306. package/dist/resolve-Bvgf3ut_.js +0 -786
  1307. package/dist/resolve-MxXVWyhd.d.ts +0 -173
  1308. package/dist/resource--vTrBe6I.d.ts +0 -103
  1309. package/dist/resource-BqNqlYg9.js +0 -91
  1310. package/dist/resource-DA811u_4.js +0 -463
  1311. package/dist/resource-execute-rbKvuCsY.d.ts +0 -12
  1312. package/dist/resource-types-CqB6GWGT.d.ts +0 -141
  1313. package/dist/resources-BVYPnuLo.js +0 -56
  1314. package/dist/resources-DZSk8tXJ.d.ts +0 -7
  1315. package/dist/respond-Cw-zanCm.d.ts +0 -93
  1316. package/dist/respond-volM3ByS.js +0 -91
  1317. package/dist/result-BchM1XZn.d.ts +0 -288
  1318. package/dist/result-DEqHCMKP.js +0 -128
  1319. package/dist/scope-CDHcS7dE.js +0 -90
  1320. package/dist/search-CUWCRYKL.js +0 -9
  1321. package/dist/server-types-CrAmZ8jv.d.ts +0 -614
  1322. package/dist/session-ChiXDZdZ.d.ts +0 -72
  1323. package/dist/shared-CBxosKK3.js +0 -75
  1324. package/dist/shared-DHjhfRdV.js +0 -60
  1325. package/dist/shared-DTneRoxi.js +0 -14
  1326. package/dist/sign-in-D_yoP0PF.js +0 -86
  1327. package/dist/signatures-BRS_p3WD.d.ts +0 -34
  1328. package/dist/signatures-DsWv_bYR.js +0 -103
  1329. package/dist/signers-cpdmZYrv.d.ts +0 -166
  1330. package/dist/spec-pins-CwzDY25w.d.ts +0 -44
  1331. package/dist/spec-pins-DsLfUH7l.js +0 -40
  1332. package/dist/sql-CwuqaQ4Y.js +0 -388
  1333. package/dist/standard-DkzZUneg.js +0 -25
  1334. package/dist/standard-lmkbOtPB.d.ts +0 -7
  1335. package/dist/stats-DhU78Ctf.js +0 -1127
  1336. package/dist/storage-api-CB7Zl1Ci.d.ts +0 -582
  1337. package/dist/store-DsIYEBnv.d.ts +0 -68
  1338. package/dist/stripe-D04h-QBT.d.ts +0 -136
  1339. package/dist/stripe-v-Y2lmop.js +0 -32
  1340. package/dist/supabase-mcp-Cpn5A4i-.js +0 -28
  1341. package/dist/support-D1pFFouF.js +0 -350
  1342. package/dist/support-view-scqMgtOo.d.ts +0 -17
  1343. package/dist/table-schema-htM_SbCW.js +0 -286
  1344. package/dist/tags-BO9LjtWG.d.ts +0 -30
  1345. package/dist/tee-Cb98Vn3b.js +0 -101
  1346. package/dist/template-lPVh-EwW.js +0 -123
  1347. package/dist/temporal-BJGitm-h.js +0 -79
  1348. package/dist/temporal-required-BtynQtM-.js +0 -20
  1349. package/dist/tenant-CM368LXb.d.ts +0 -17
  1350. package/dist/tenant-I1TEZ_BX.js +0 -27
  1351. package/dist/timing-CyTQPubY.js +0 -92
  1352. package/dist/types-6cYK9pbJ.js +0 -29
  1353. package/dist/types-Bb_4-vdW.d.ts +0 -220
  1354. package/dist/types-CD6yCDx3.d.ts +0 -359
  1355. package/dist/types-CbOUc5IH.d.ts +0 -156
  1356. package/dist/types-CoE5Zwy4.d.ts +0 -348
  1357. package/dist/types-DSJ3-m9X.d.ts +0 -192
  1358. package/dist/types-D__3EN0q.d.ts +0 -425
  1359. package/dist/usage-D0NNUFfr.d.ts +0 -177
  1360. package/dist/vault-BpmApxxW.d.ts +0 -50
  1361. package/dist/verify-C91Wyp40.d.ts +0 -142
  1362. package/dist/verify-CJbYfADA.js +0 -124
  1363. package/dist/version-Cq8gfDbd.js +0 -4
  1364. package/dist/view-D5ryq3gz.js +0 -99
  1365. package/dist/view-TpXEUcVN.d.ts +0 -87
  1366. package/dist/watch-BcvtAHOd.js +0 -122
  1367. package/dist/watch-COzRWvVN.d.ts +0 -74
  1368. package/dist/wire-Df3EWkG8.js +0 -45
  1369. package/dist/workflow-builder-CHqHpAVt.js +0 -399
  1370. package/dist/workflow-sdk-C2WJ_G2O.js +0 -173
  1371. package/dist/workflow-sdk-DTZyrvNo.d.ts +0 -98
  1372. package/dist/workflow-sdk-world-CMV1ahFW.js +0 -1399
  1373. package/dist/workflows-CcpCBfIe.d.ts +0 -185
  1374. package/dist/workflows-IvxzG2cl.js +0 -217
@@ -1,1691 +0,0 @@
1
- import { c as mapDbError, n as dbError, o as isDbError, r as dbErrorOf } from "./errors-2M6CKMP4.js";
2
- import { t as temporal } from "./temporal-required-BtynQtM-.js";
3
- import { a as ok, r as err, s as toDbError, t as AsyncResult } from "./result-DEqHCMKP.js";
4
- import { n as isRecord } from "./guards-6F2bCtQR.js";
5
- import { a as postgrestExecutor, n as StatsRecorder } from "./stats-DhU78Ctf.js";
6
- import { o as problemResponse } from "./problem-CJvFeGu7.js";
7
- import { loadEnv } from "./env/index.js";
8
- import { a as actorOf, i as userContext, n as impersonatorClaim, t as actClaim } from "./impersonation-DcqaTBHx.js";
9
- import { t as fromPgError } from "./executor-B_Hfobee.js";
10
- import { i as forwardBlockEvents, t as DEFAULT_TYPE_PREFIX } from "./cloud-event-CTh9Sr5w.js";
11
- import { a as replicaState, i as primaryCookieWrite, o as routedExecutor, r as pinnedUntil, s as withPrimaryPin } from "./replicas-CwrYp5Zj.js";
12
- import { t as authContext } from "./context-nPDvQ-Zl.js";
13
- import { d as parseCookies, m as sessionCookieName, n as prefetchJwks, p as serializeCookie, r as resolveAuth, s as AUTH_CACHE_HEADERS, u as clearSessionAtScopes } from "./resolve-Bvgf3ut_.js";
14
- import { t as credentialProviderOf } from "./provider-DxRTex4x.js";
15
- import { a as respond, n as defaultPrefetchJwks, r as guard, t as defaultExpose } from "./respond-volM3ByS.js";
16
- import { createClient } from "@supabase/supabase-js";
17
- import { defineMiddleware, getEnv, pipeline, seedContext } from "@supabase/middleware";
18
- import { PostgrestClient } from "@supabase/postgrest-js";
19
- //#region src/server/delete-account.ts
20
- const REMOVE_BATCH = 1e3;
21
- /** Maps an `AuthApiError` from `auth.admin.deleteUser` to a `DbError`. */
22
- function fromAuthError(raw) {
23
- if (isDbError(raw)) return raw;
24
- const failure = typeof raw === "object" && raw !== null ? raw : {};
25
- const message = failure.message ?? "Auth request failed";
26
- const base = {
27
- table: "auth.users",
28
- ...failure.code ? { code: failure.code } : {}
29
- };
30
- if (failure.code === "user_not_found" || failure.status === 404) return dbError("not_found", message, base);
31
- if (/database error deleting user/i.test(message)) return dbError("conflict", message, {
32
- ...base,
33
- hint: "A foreign key to auth.users without on delete cascade or set null blocks the delete (doctor BS406)"
34
- });
35
- if (failure.status === 401) return dbError("unauthorized", message, base);
36
- if (failure.status === 403) return dbError("forbidden", message, base);
37
- return failure.name === "AuthRetryableFetchError" || (failure.status ?? 0) >= 500 ? dbError("network", message, base) : dbError("unexpected", message, base);
38
- }
39
- const UUID$1 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
40
- const PROBE = "better_supabase.delete_account_probe";
41
- /**
42
- * The database error that refuses deleting `userId`, from the delete and its
43
- * deferred checks run in a `do` block that always fails, so nothing is
44
- * deleted. Undefined when the delete itself would pass.
45
- */
46
- async function databaseRefusal(sql, userId) {
47
- if (!UUID$1.test(userId)) return void 0;
48
- try {
49
- await sql.queryRaw(`do $$
50
- begin
51
- delete from auth.users where id = '${userId}';
52
- set constraints all immediate;
53
- raise exception '${PROBE}';
54
- end;
55
- $$`);
56
- } catch (cause) {
57
- const raw = isDbError(cause) ? void 0 : fromPgError(cause);
58
- const error = isDbError(cause) ? cause : raw && mapDbError(raw);
59
- if (!error || error.message === PROBE) return void 0;
60
- return {
61
- ...error,
62
- table: "auth.users"
63
- };
64
- }
65
- }
66
- /**
67
- * Deletes the Auth user, then removes their Storage objects, then announces
68
- * the delete. Rows referencing `auth.users` follow their foreign keys. The
69
- * objects are listed first and removed only once the user is gone, so a
70
- * delete the database refuses leaves them in place.
71
- *
72
- * `server.deleteAccount` calls it with the server's service client. Apps on
73
- * the `@supabase/server` pipeline call it with theirs:
74
- * `deleteAccount(betterSupabase, ctx.supabaseAdmin, userId)`.
75
- */
76
- function deleteAccount(betterSupabase, service, userId, options = {}) {
77
- return AsyncResult.from(async () => {
78
- const client = typeof service === "function" ? service() : service;
79
- const listedPaths = [];
80
- for (const bucket of options.buckets ?? []) {
81
- const param = bucket.owner;
82
- if (!param) continue;
83
- options.signal?.throwIfAborted();
84
- const listed = await bucket.connect(client, { allTenants: true }).list({ [param]: userId }, options.signal ? { signal: options.signal } : {});
85
- if (!listed.ok) return listed;
86
- listedPaths.push([bucket, listed.data.map((object) => object.path).filter((path) => {
87
- return bucket.match(path)?.[param] === userId;
88
- })]);
89
- }
90
- options.signal?.throwIfAborted();
91
- try {
92
- const { error } = await client.auth.admin.deleteUser(userId);
93
- if (error) {
94
- const failure = fromAuthError(error);
95
- const refusal = options.sql && (failure.kind === "conflict" || failure.kind === "network" || failure.kind === "unexpected") ? await databaseRefusal(options.sql, userId) : void 0;
96
- return err(refusal ?? failure);
97
- }
98
- } catch (cause) {
99
- return err(fromAuthError(cause));
100
- }
101
- const removed = {};
102
- for (const [bucket, paths] of listedPaths) {
103
- const storage = bucket.connect(client, { allTenants: true });
104
- for (let start = 0; start < paths.length; start += REMOVE_BATCH) {
105
- const batch = await storage.remove(paths.slice(start, start + REMOVE_BATCH));
106
- if (!batch.ok) return batch;
107
- }
108
- removed[bucket.id] = paths.length;
109
- }
110
- const context = options.context ?? {};
111
- betterSupabase.events.emit("mutation", {
112
- table: "auth.users",
113
- kind: "delete",
114
- rows: [{ id: userId }],
115
- context
116
- });
117
- for (const table of options.cascades ?? []) betterSupabase.events.emit("mutation", {
118
- table,
119
- kind: "delete",
120
- rows: [],
121
- context
122
- });
123
- return ok({
124
- userId,
125
- removed
126
- });
127
- });
128
- }
129
- //#endregion
130
- //#region src/server/suspend-account.ts
131
- const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
132
- const FOREVER = "876000h";
133
- const END_SESSIONS = `with ended as (
134
- delete from auth.sessions where user_id = $1::uuid returning id
135
- ), tokens as (
136
- delete from auth.refresh_tokens where user_id = $1::text
137
- )
138
- select count(*)::int as ended from ended`;
139
- function invalidUser(userId) {
140
- return dbError("invalid_request", `"${userId}" is not a user id`, { table: "auth.users" });
141
- }
142
- function fromSqlError(cause) {
143
- const known = dbErrorOf(cause);
144
- if (known) return known;
145
- const raw = fromPgError(cause);
146
- if (raw) return {
147
- ...mapDbError(raw),
148
- table: "auth.sessions"
149
- };
150
- return dbError("unexpected", cause instanceof Error ? cause.message : "Ending the sessions failed", { table: "auth.sessions" });
151
- }
152
- async function deleteSessions(sql, userId) {
153
- const [row] = await sql.queryRaw(END_SESSIONS, [userId]);
154
- return row?.ended ?? 0;
155
- }
156
- function endSessions(sql, userId) {
157
- return AsyncResult.from(async () => {
158
- if (!UUID.test(userId)) return err(invalidUser(userId));
159
- try {
160
- return ok({
161
- userId,
162
- ended: await deleteSessions(sql, userId)
163
- });
164
- } catch (cause) {
165
- return err(fromSqlError(cause));
166
- }
167
- });
168
- }
169
- const LAST_SIGN_INS = `select user_id, last_sign_in_at
170
- from better_supabase.last_sign_ins($1::uuid[])`;
171
- /**
172
- * The last sign-in of each user, in one query (`better_supabase.last_sign_ins`
173
- * from the `sessions` module, which only the service role may call). Users
174
- * that don't exist are missing from the map.
175
- */
176
- function lastSignIns(sql, userIds) {
177
- return AsyncResult.from(async () => {
178
- const invalid = userIds.find((userId) => !UUID.test(userId));
179
- if (invalid !== void 0) return err(invalidUser(invalid));
180
- if (userIds.length === 0) return ok(/* @__PURE__ */ new Map());
181
- try {
182
- const rows = await sql.queryRaw(LAST_SIGN_INS, [[...new Set(userIds)]]);
183
- return ok(new Map(rows.map((row) => [row.user_id, {
184
- userId: row.user_id,
185
- 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)
186
- }])));
187
- } catch (cause) {
188
- return err(fromSqlError(cause));
189
- }
190
- });
191
- }
192
- async function ban(client, userId, duration) {
193
- try {
194
- const { error } = await client.auth.admin.updateUserById(userId, { ban_duration: duration });
195
- return error ? fromAuthError(error) : void 0;
196
- } catch (cause) {
197
- return fromAuthError(cause);
198
- }
199
- }
200
- function suspendAccount(service, sql, userId, options) {
201
- return AsyncResult.from(async () => {
202
- if (!UUID.test(userId)) return err(invalidUser(userId));
203
- const client = typeof service === "function" ? service() : service;
204
- const { suspended } = options;
205
- if (suspended) {
206
- const refused = await ban(client, userId, options.duration ?? FOREVER);
207
- if (refused) return err(refused);
208
- if (options.endSessions !== true) return ok({
209
- userId,
210
- suspended,
211
- ended: 0
212
- });
213
- }
214
- let ended;
215
- try {
216
- ended = await deleteSessions(sql, userId);
217
- } catch (cause) {
218
- return err(fromSqlError(cause));
219
- }
220
- if (!suspended) {
221
- const refused = await ban(client, userId, "none");
222
- if (refused) return err(refused);
223
- }
224
- return ok({
225
- userId,
226
- suspended,
227
- ended
228
- });
229
- });
230
- }
231
- //#endregion
232
- //#region src/server/audit.ts
233
- /** The CloudEvents `source` of the events the server sends to its `audit` sink. */
234
- const SERVER_EVENT_SOURCE = "/better-supabase/server";
235
- const OFF = { account: () => void 0 };
236
- /**
237
- * The server's audit trail: account actions are sent to `sink` as CloudEvents
238
- * typed `dev.better-supabase.account.*` with subject `users/<id>`, and
239
- * `support.denied` block events are forwarded to it.
240
- */
241
- function serverAudit(betterSupabase, sink) {
242
- if (sink === void 0) return OFF;
243
- const { events } = betterSupabase;
244
- forwardBlockEvents(betterSupabase, sink, {
245
- source: SERVER_EVENT_SOURCE,
246
- types: ["support.denied"]
247
- });
248
- const report = (cause) => {
249
- events.logger.error("audit sink failed", { cause });
250
- };
251
- return { account(type, userId, data) {
252
- const event = {
253
- specversion: "1.0",
254
- id: crypto.randomUUID(),
255
- source: SERVER_EVENT_SOURCE,
256
- type: `${DEFAULT_TYPE_PREFIX}.${type}`,
257
- subject: `users/${userId}`,
258
- time: (/* @__PURE__ */ new Date()).toISOString(),
259
- datacontenttype: "application/json",
260
- data: {
261
- userId,
262
- ...data
263
- }
264
- };
265
- try {
266
- events.track(Promise.resolve(sink.send([event])).catch(report));
267
- } catch (cause) {
268
- report(cause);
269
- }
270
- } };
271
- }
272
- //#endregion
273
- //#region src/server/clients.ts
274
- const STATELESS = {
275
- persistSession: false,
276
- autoRefreshToken: false,
277
- detectSessionInUrl: false
278
- };
279
- /** The Supabase and PostgREST clients of one server: shared service and anon clients, per-request user clients. */
280
- function createClients(input) {
281
- const { options, env, definitionExecutor, lite, createClient } = input;
282
- let adminClient;
283
- let anonClient;
284
- const secretKey = () => {
285
- const key = env().secretKey;
286
- if (!key) throw new TypeError("admin() needs SUPABASE_SECRET_KEY; it is not set");
287
- return key;
288
- };
289
- const customFetch = options.fetch ? { fetch: options.fetch } : void 0;
290
- const urlLengthLimit = options.db?.urlLengthLimit ?? definitionExecutor.urlLengthLimit;
291
- const db = {
292
- ...options.db?.timeout === void 0 ? {} : { timeout: options.db.timeout },
293
- ...options.db?.retry === void 0 ? {} : { retry: options.db.retry },
294
- ...urlLengthLimit === void 0 ? {} : { urlLengthLimit }
295
- };
296
- const dbOptions = Object.keys(db).length > 0 ? { db } : {};
297
- const sharedGlobal = {
298
- ...customFetch ? { global: customFetch } : {},
299
- ...dbOptions
300
- };
301
- /** postgrest-js options a bare `PostgrestClient` takes; `timeout` is the executor's. */
302
- const restOptions = {
303
- ...db.retry === void 0 ? {} : { retry: db.retry },
304
- ...urlLengthLimit === void 0 ? {} : { urlLengthLimit }
305
- };
306
- const rpcUnavailable = lite?.rpcUnavailable;
307
- const executorOptions = {
308
- ...definitionExecutor,
309
- ...urlLengthLimit === void 0 ? {} : { urlLengthLimit },
310
- ...db.timeout === void 0 ? {} : { timeout: db.timeout },
311
- ...db.retry === void 0 ? {} : { retry: db.retry },
312
- ...rpcUnavailable === void 0 ? {} : { rpcUnavailable }
313
- };
314
- /** Set when `db` options or the backend need an executor built with them. */
315
- const tunedExecutor = options.db !== void 0 || rpcUnavailable !== void 0;
316
- const serviceClient = () => {
317
- adminClient ??= createClient(env().url, secretKey(), {
318
- auth: STATELESS,
319
- ...sharedGlobal
320
- });
321
- return adminClient;
322
- };
323
- const readUrl = () => options.readUrl === false ? void 0 : options.readUrl?.replace(/\/+$/, "") ?? env().readUrl;
324
- const apiKeyClient = () => {
325
- 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");
326
- };
327
- /** Clients for the primary share the service and anon clients; others don't. */
328
- const supabaseAt = (url, auth, headers = {}) => {
329
- const custom = Object.keys(headers).length > 0;
330
- const global = custom ? {
331
- global: {
332
- headers,
333
- ...customFetch
334
- },
335
- ...dbOptions
336
- } : sharedGlobal;
337
- const shared = !custom && url === env().url;
338
- switch (auth.kind) {
339
- case "user": return createClient(url, env().publishableKey, {
340
- accessToken: () => Promise.resolve(auth.token),
341
- ...global
342
- });
343
- case "service": return shared ? serviceClient() : createClient(url, secretKey(), {
344
- auth: STATELESS,
345
- ...global
346
- });
347
- case "anon":
348
- case "invalid":
349
- if (!shared) return createClient(url, env().publishableKey, {
350
- auth: STATELESS,
351
- ...global
352
- });
353
- anonClient ??= createClient(url, env().publishableKey, {
354
- auth: STATELESS,
355
- ...sharedGlobal
356
- });
357
- return anonClient;
358
- case "apiKey": return apiKeyClient();
359
- default: return auth;
360
- }
361
- };
362
- const supabaseFor = (auth, headers = {}) => supabaseAt(env().url, auth, headers);
363
- const restUrls = /* @__PURE__ */ new Map();
364
- const restUrl = (url) => {
365
- let rest = restUrls.get(url);
366
- if (rest === void 0) {
367
- rest = new URL("rest/v1", url.endsWith("/") ? url : `${url}/`).href;
368
- restUrls.set(url, rest);
369
- }
370
- return rest;
371
- };
372
- /**
373
- * The client queries run on. Requests need only PostgREST, so they skip
374
- * building Realtime, Storage and Auth clients per request; the shared
375
- * service and anon clients for the primary are built once anyway.
376
- */
377
- const restAt = (url, auth, headers = {}) => {
378
- let key;
379
- let bearer;
380
- switch (auth.kind) {
381
- case "user":
382
- key = env().publishableKey;
383
- bearer = auth.token;
384
- break;
385
- case "service":
386
- case "anon":
387
- case "invalid":
388
- if (Object.keys(headers).length === 0 && url === env().url) return supabaseAt(url, auth, headers);
389
- key = auth.kind === "service" ? secretKey() : env().publishableKey;
390
- bearer = key;
391
- break;
392
- case "apiKey": return apiKeyClient();
393
- default: return auth;
394
- }
395
- return new PostgrestClient(restUrl(url), {
396
- headers: {
397
- ...headers,
398
- apikey: key,
399
- Authorization: `Bearer ${bearer}`
400
- },
401
- ...customFetch,
402
- ...restOptions
403
- });
404
- };
405
- return {
406
- executorOptions,
407
- tunedExecutor,
408
- serviceClient,
409
- readUrl,
410
- apiKeyClient,
411
- supabaseFor,
412
- restAt
413
- };
414
- }
415
- //#endregion
416
- //#region src/server/entries/core.ts
417
- const cores = /* @__PURE__ */ new WeakMap();
418
- /** Records the core behind `server`, so `serverCore` finds it on copies too. */
419
- function registerCore(server, core) {
420
- cores.set(server, core);
421
- }
422
- /** Copies the registration from `from` to `to` (`extendServer` builds a new object). */
423
- function shareCore(from, to) {
424
- const core = cores.get(from);
425
- if (core) cores.set(to, core);
426
- }
427
- /** The core of a server built by `createServer` or one of the adapter factories. */
428
- function serverCore(server) {
429
- const core = cores.get(server);
430
- if (!core) throw new TypeError("better-supabase: this server was not built by createServer(); pass the definition or a server from createServer");
431
- return core;
432
- }
433
- const CALL = Symbol("better-supabase.call");
434
- const supportLookups = /* @__PURE__ */ new WeakMap();
435
- /**
436
- * Starts the support lookup for a signed-in caller, so `withTenant` can run
437
- * the tenant resolver while the support store answers. Other callers never
438
- * have a support session, so they skip it.
439
- */
440
- function startSupportLookup(core, request, session) {
441
- if (session.auth.kind !== "user" || supportLookups.has(session)) return;
442
- const lookup = core.support(request, session.auth);
443
- lookup.catch(() => void 0);
444
- supportLookups.set(session, lookup);
445
- }
446
- /** The support session of a resolved request: the started lookup, else a new one. */
447
- function supportLookup(core, request, session) {
448
- return supportLookups.get(session) ?? core.support(request, session.auth);
449
- }
450
- /** The call state on a context seeded by `server.context()`, if any. */
451
- function callOf(ctx) {
452
- return ctx[CALL];
453
- }
454
- //#endregion
455
- //#region src/server/entries/context.ts
456
- /**
457
- * Entry contributing `ctx.bs`, the request's `ServerContext`: `auth`, `db`,
458
- * `sql`, `supabase`, `replica`, `stats()` and the rest, each built on first
459
- * read. In a support session `auth`, `db` and `sql` are the target's.
460
- */
461
- function withServerContext(core) {
462
- return defineMiddleware({
463
- key: "bs",
464
- run: () => (request, ctx) => {
465
- const options = callOf(ctx)?.options ?? {};
466
- const bs = core.context(ctx.session, request, ctx.support ? {
467
- ...options,
468
- support: ctx.support
469
- } : options, ctx.tenant);
470
- return Promise.resolve({ bs });
471
- }
472
- })();
473
- }
474
- //#endregion
475
- //#region src/server/refresh.ts
476
- /** A router or browser prefetch, by its request headers. */
477
- function isPrefetch(request) {
478
- const h = request.headers;
479
- return h.has("next-router-prefetch") || h.get("purpose") === "prefetch" || (h.get("sec-purpose")?.includes("prefetch") ?? false);
480
- }
481
- const FORM_TYPES = ["application/x-www-form-urlencoded", "multipart/form-data"];
482
- /**
483
- * Whether a request should refresh an expired session cookie: page loads,
484
- * client navigations (`rsc`, `x-sveltekit-*`, `_data` loaders), form posts
485
- * and Server Actions. Prefetches, assets and `fetch` calls from scripts
486
- * read the session as it is, so a burst of parallel requests never races
487
- * on the single-use refresh token.
488
- */
489
- function shouldRefresh(request) {
490
- const h = request.headers;
491
- if (request.method !== "GET" && request.method !== "HEAD") {
492
- if (h.has("next-action") || h.has("x-sveltekit-action")) return true;
493
- if (h.get("sec-fetch-dest") === "document") return true;
494
- const type = h.get("content-type") ?? "";
495
- return FORM_TYPES.some((form) => type.startsWith(form));
496
- }
497
- if (isPrefetch(request)) return false;
498
- if (h.get("rsc") === "1") return true;
499
- const dest = h.get("sec-fetch-dest");
500
- if (dest) return dest === "document";
501
- return h.get("accept")?.includes("text/html") ?? false;
502
- }
503
- /**
504
- * Whether a request should ask the Auth server if the session still exists
505
- * (`checkSession`): full page loads, and `paths` you list for client
506
- * navigations. Never prefetches or mutations.
507
- */
508
- function shouldCheckSession(request, paths) {
509
- if (request.method !== "GET" && request.method !== "HEAD") return false;
510
- if (isPrefetch(request)) return false;
511
- if (request.headers.get("sec-fetch-dest") === "document") return true;
512
- return paths?.includes(new URL(request.url).pathname) ?? false;
513
- }
514
- /** `policy` for one request. */
515
- function refreshFor(policy, request) {
516
- if (policy === void 0 || typeof policy === "boolean") return policy;
517
- return policy === "navigation" ? shouldRefresh(request) : policy(request);
518
- }
519
- //#endregion
520
- //#region src/server/entries/session.ts
521
- function checkFor(policy, request) {
522
- if (policy === void 0 || typeof policy === "boolean") return policy ?? false;
523
- return policy === "navigation" ? shouldCheckSession(request) : policy(request);
524
- }
525
- /** Appends `Max-Age=0` writes for the session cookie at the old scopes, and the no-store headers. */
526
- function clearOldScopes(response, request, name, scopes) {
527
- const writes = clearSessionAtScopes(parseCookies(request.headers.get("cookie")), name, scopes);
528
- if (writes.length === 0) return response;
529
- const headers = new Headers(response.headers);
530
- for (const write of writes) headers.append("set-cookie", serializeCookie(write));
531
- for (const [key, value] of Object.entries(AUTH_CACHE_HEADERS)) headers.set(key, value);
532
- return new Response(response.body, {
533
- status: response.status,
534
- statusText: response.statusText,
535
- headers
536
- });
537
- }
538
- /**
539
- * Entry contributing `ctx.session`, the request's `AuthResolution`: a bearer
540
- * token first, the session cookie second. It is the only entry with a
541
- * response seam for cookies: on the way out it adds the refreshed session
542
- * cookies and the no-store headers, and hands pending event sends to
543
- * `waitUntil`.
544
- */
545
- function withSession(core, config = {}) {
546
- return defineMiddleware({
547
- key: "session",
548
- run: () => async function* (request, ctx) {
549
- const call = callOf(ctx)?.options;
550
- const refresh = call ? call.refresh ?? false : refreshFor(config.refresh, request);
551
- const cookies = call ? call.cookies : config.cookies;
552
- const checkSession = !call && checkFor(config.checkSession, request);
553
- const session = await core.resolve(request, {
554
- ...refresh === void 0 ? {} : { refresh },
555
- ...cookies === void 0 ? {} : { cookies },
556
- ...checkSession ? { checkSession } : {},
557
- ...config.encode === void 0 ? {} : { encode: config.encode }
558
- });
559
- try {
560
- const response = yield { session };
561
- const applied = session.apply(response);
562
- return config.cookieScopes?.length ? clearOldScopes(applied, request, core.sessionCookie(), config.cookieScopes) : applied;
563
- } finally {
564
- if (config.waitUntil && core.events.pending) config.waitUntil(core.events.settled());
565
- }
566
- }
567
- })();
568
- }
569
- //#endregion
570
- //#region src/server/entries/support.ts
571
- /**
572
- * Entry contributing `ctx.support`: the support session ("view as user") the
573
- * request's support cookie names, when `ServerOptions.support` is set and
574
- * the caller is the admin who started it. `undefined` otherwise.
575
- */
576
- function withSupport(core) {
577
- return defineMiddleware({
578
- key: "support",
579
- run: () => async (request, ctx) => {
580
- return { support: callOf(ctx)?.options.support ?? await supportLookup(core, request, ctx.session) };
581
- }
582
- })();
583
- }
584
- //#endregion
585
- //#region src/server/entries/tenant.ts
586
- /**
587
- * Entry contributing `ctx.tenant`: the active tenant from
588
- * `ServerOptions.tenant` (a URL slug, a header), or `undefined`. It becomes
589
- * `context.tenant` for the `tenant()` plugin, the `better_supabase.tenant`
590
- * setting over Postgres and the `x-bs-tenant` header over PostgREST. It
591
- * starts the support lookup that `withSupport` awaits, so both run at once.
592
- */
593
- function withTenant(core) {
594
- return defineMiddleware({
595
- key: "tenant",
596
- run: () => async (request, ctx) => {
597
- const options = callOf(ctx)?.options;
598
- if (options?.support === void 0) startSupportLookup(core, request, ctx.session);
599
- return { tenant: options?.tenant ?? await core.tenant(request, ctx.session.auth) };
600
- }
601
- })();
602
- }
603
- //#endregion
604
- //#region src/server/lite.ts
605
- /** Lite's default driver, the one `lite init` scaffolds. */
606
- const DEFAULT_LITE_DRIVER = "sqlite-postgres";
607
- /** Whether the driver stores data in SQLite, where Lite has no database functions. */
608
- function isSqliteDriver(driver) {
609
- switch (driver) {
610
- case "sqlite-postgres":
611
- case "sqlite": return true;
612
- case "pglite":
613
- case "postgres": return false;
614
- default: return driver;
615
- }
616
- }
617
- function liteRpcUnavailable(driver) {
618
- 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.`;
619
- }
620
- /** What `backend: "lite"` changes in `createServer`; `undefined` for Supabase. */
621
- function liteBackend(options, env) {
622
- if (options.backend !== "lite") return void 0;
623
- const driver = options.liteDriver ?? DEFAULT_LITE_DRIVER;
624
- 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".`);
625
- return {
626
- auth() {
627
- if (options.auth?.jwtSecret !== void 0) return options.auth;
628
- const jwtSecret = env().jwtSecret;
629
- if (jwtSecret === void 0) throw new TypeError("backend: \"lite\" needs SUPABASE_JWT_SECRET, the auth.jwt_secret Supabase Lite signs user tokens with");
630
- return {
631
- ...options.auth,
632
- jwtSecret
633
- };
634
- },
635
- rpcUnavailable: isSqliteDriver(driver) ? liteRpcUnavailable(driver) : void 0
636
- };
637
- }
638
- //#endregion
639
- //#region src/server/refusing-executor.ts
640
- /**
641
- * An executor for credentials that did not verify: every query, function
642
- * call and batch answers `error`, so a handler that skips the route guard
643
- * gets a 401 `Result` and never queries as anon.
644
- */
645
- function refusingExecutor(error) {
646
- const refuse = () => err(error);
647
- return {
648
- name: "refused",
649
- functionSources: true,
650
- execute: () => Promise.resolve(refuse()),
651
- rpc: () => Promise.resolve(refuse()),
652
- batch: (ops) => Promise.resolve(ops.map(() => refuse()))
653
- };
654
- }
655
- //#endregion
656
- //#region src/server/request-ids.ts
657
- const REQUEST_ID_PATTERN = /^[A-Za-z0-9._:;,@/+=-]{1,128}$/;
658
- function requestIdOrUndefined(value) {
659
- return typeof value === "string" && REQUEST_ID_PATTERN.test(value) ? value : void 0;
660
- }
661
- function sessionWith(ids, tenant, readOnly = false) {
662
- const settings = {
663
- ...ids.requestId === void 0 ? {} : { "better_supabase.request_id": ids.requestId },
664
- ...ids.correlationId === void 0 ? {} : { "better_supabase.correlation_id": ids.correlationId },
665
- ...tenant === void 0 ? {} : { "better_supabase.tenant": tenant }
666
- };
667
- const hasSettings = Object.keys(settings).length > 0;
668
- if (!hasSettings && !readOnly) return void 0;
669
- return {
670
- ...readOnly ? { readOnly: true } : {},
671
- ...hasSettings ? { settings } : {}
672
- };
673
- }
674
- function requestIdPolicy(options = {}) {
675
- const on = options !== false;
676
- const settings = on ? options : {};
677
- const requestHeader = (settings.requestHeader ?? "x-request-id").toLowerCase();
678
- const correlationHeader = (settings.correlationHeader ?? "x-correlation-id").toLowerCase();
679
- const incoming = on && (settings.incoming ?? true);
680
- const generate = on && (settings.generate ?? true);
681
- const generated = /* @__PURE__ */ new WeakMap();
682
- const fromHeader = (request, name) => incoming && request ? requestIdOrUndefined(request.headers.get(name)) : void 0;
683
- const generatedFor = (request) => {
684
- if (!generate || !request) return void 0;
685
- const known = generated.get(request);
686
- if (known !== void 0) return known;
687
- const id = crypto.randomUUID();
688
- generated.set(request, id);
689
- return id;
690
- };
691
- return {
692
- forRequest(request, explicit) {
693
- const requestId = requestIdOrUndefined(explicit.requestId) ?? fromHeader(request, requestHeader) ?? generatedFor(request);
694
- const correlationId = requestIdOrUndefined(explicit.correlationId) ?? fromHeader(request, correlationHeader) ?? requestId;
695
- return {
696
- ...requestId === void 0 ? {} : { requestId },
697
- ...correlationId === void 0 ? {} : { correlationId }
698
- };
699
- },
700
- headers: (ids) => ({
701
- ...ids.requestId === void 0 ? {} : { [requestHeader]: ids.requestId },
702
- ...ids.correlationId === void 0 ? {} : { [correlationHeader]: ids.correlationId }
703
- })
704
- };
705
- }
706
- //#endregion
707
- //#region src/server/server-types.ts
708
- /** The header `current_tenant_id()` reads over the Data API. */
709
- const TENANT_HEADER = "x-bs-tenant";
710
- //#endregion
711
- //#region src/auth/support-cookie.ts
712
- /** The cookie that carries the support session id. */
713
- const SUPPORT_COOKIE = "bs-support";
714
- /** Seconds until the session expires, rounded up so the cookie never outlives it by less than a second. */
715
- function supportCookieMaxAge(session, now = Date.now()) {
716
- return Math.max(0, Math.ceil((session.expiresAt.epochMilliseconds - now) / 1e3));
717
- }
718
- /** `Set-Cookie` for a session: HttpOnly, SameSite=Lax, gone when the session expires. */
719
- function supportCookie(session, options = {}, now = Date.now()) {
720
- return cookieLine(options, encodeURIComponent(session.id), supportCookieMaxAge(session, now));
721
- }
722
- /** `Set-Cookie` that removes the support cookie. */
723
- function clearSupportCookie(options = {}) {
724
- return cookieLine(options, "", 0);
725
- }
726
- function cookieLine(options, value, maxAge) {
727
- return [
728
- `${options.name ?? "bs-support"}=${value}`,
729
- `Path=${options.path ?? "/"}`,
730
- `Max-Age=${String(maxAge)}`,
731
- "HttpOnly",
732
- "SameSite=Lax",
733
- ...options.secure === false ? [] : ["Secure"]
734
- ].join("; ");
735
- }
736
- /** The support session id in a `Cookie` header, or `undefined`. */
737
- function supportCookieValue(cookieHeader, name = SUPPORT_COOKIE) {
738
- if (!cookieHeader) return void 0;
739
- for (const part of cookieHeader.split(";")) {
740
- const index = part.indexOf("=");
741
- if (index === -1 || part.slice(0, index).trim() !== name) continue;
742
- let value;
743
- try {
744
- value = decodeURIComponent(part.slice(index + 1).trim());
745
- } catch {
746
- return;
747
- }
748
- return value === "" ? void 0 : value;
749
- }
750
- }
751
- //#endregion
752
- //#region src/server/support-off.ts
753
- const NOT_CONFIGURED = "Support sessions need createServer(betterSupabase, { support: supportSessions({ store }) })";
754
- const notConfigured = () => AsyncResult.err(dbError("unexpected", NOT_CONFIGURED));
755
- /** `bs.support` without `ServerOptions.support`: every call fails. */
756
- const supportOff = {
757
- start: notConfigured,
758
- stop: notConfigured,
759
- revoke: notConfigured,
760
- current: () => Promise.resolve(void 0),
761
- list: notConfigured,
762
- expire: notConfigured,
763
- expireRoute: () => () => Promise.resolve(problemResponse(dbError("unexpected", NOT_CONFIGURED))),
764
- sessionIdOf: () => void 0,
765
- clearCookie: () => clearSupportCookie()
766
- };
767
- //#endregion
768
- //#region src/server/support-storage.ts
769
- const VISIBLE_OBJECT = "select exists (select 1 from storage.objects o where o.bucket_id = $1 and o.name = $2) as visible";
770
- const VISIBLE_OBJECTS = `select n.path from unnest($2::text[]) as n(path)
771
- where exists (select 1 from storage.objects o where o.bucket_id = $1 and o.name = n.path)`;
772
- const OBJECT_INFO = "select to_jsonb(o) as object from storage.objects o where o.bucket_id = $1 and o.name = $2";
773
- const SEARCH = `select s.name, s.id::text as id, s.updated_at, s.created_at, s.last_accessed_at, s.metadata
774
- from storage.search($1::text, $2::text, $3::int, $4::int, $5::int, $6::text, $7::text, $8::text) s`;
775
- 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
776
- from storage.search_v2($1::text, $2::text, $3::int, $4::int, $5::text, $6::text, $7::text, $8::text) s`;
777
- const HIDDEN_URL = "Either the object does not exist or you do not have access to it";
778
- const LIST_SORT_COLUMNS = /* @__PURE__ */ new Set([
779
- "name",
780
- "updated_at",
781
- "created_at",
782
- "last_accessed_at"
783
- ]);
784
- const LIST_V2_SORT_COLUMNS = /* @__PURE__ */ new Set([
785
- "name",
786
- "updated_at",
787
- "created_at"
788
- ]);
789
- const FLAT_SORT_COLUMNS = /* @__PURE__ */ new Set(["updated_at", "created_at"]);
790
- const SORT_ORDERS = /* @__PURE__ */ new Set(["asc", "desc"]);
791
- const CURSOR_PARTS = {
792
- l: "startAfter",
793
- o: "sortOrder",
794
- c: "sortColumn",
795
- a: "sortColumnAfter"
796
- };
797
- const isCursorKey = (key) => Object.hasOwn(CURSOR_PARTS, key);
798
- /** The path storage-js sends for an upload: no leading or trailing `/`, and no empty folders. */
799
- function normalizePath(path) {
800
- return path.replaceAll(/^\/|\/$/g, "").replaceAll(/\/+/g, "/");
801
- }
802
- /** `undefined` for an empty string, which storage-api treats as absent. */
803
- const filled = (value) => value === "" ? void 0 : value;
804
- /** `LIKE` escaping as storage-api applies it. */
805
- function escapeLike(text) {
806
- return text.replaceAll("\\", "\\\\").replaceAll(/([%_])/g, "\\$1");
807
- }
808
- function iso(value) {
809
- if (value instanceof Date) return value.toISOString();
810
- if (typeof value !== "string") return value;
811
- const time = Date.parse(value);
812
- return Number.isNaN(time) ? value : new Date(time).toISOString();
813
- }
814
- /** storage-api's continuation token: `key:value` lines, base64 encoded. */
815
- function encodeCursor(cursor) {
816
- const text = Object.entries(CURSOR_PARTS).flatMap(([key, part]) => cursor[part] ? [`${key}:${cursor[part]}`] : []).join("\n");
817
- let binary = "";
818
- for (const byte of new TextEncoder().encode(text)) binary += String.fromCodePoint(byte);
819
- return btoa(binary);
820
- }
821
- function decodeCursor(token) {
822
- let text;
823
- try {
824
- text = new TextDecoder().decode(Uint8Array.from(atob(token), (char) => char.codePointAt(0) ?? 0));
825
- } catch {
826
- return;
827
- }
828
- const cursor = {
829
- startAfter: "",
830
- sortOrder: "asc"
831
- };
832
- for (const part of text.split("\n")) {
833
- const match = /^(\S):(.*)/.exec(part);
834
- const key = match?.[1];
835
- if (!key || !isCursorKey(key)) return void 0;
836
- cursor[CURSOR_PARTS[key]] = match[2] ?? "";
837
- }
838
- return cursor;
839
- }
840
- const apiError = (status, message, code) => ({
841
- name: "StorageApiError",
842
- message,
843
- status,
844
- statusCode: String(status),
845
- code
846
- });
847
- const failed = (error) => ({
848
- data: null,
849
- error
850
- });
851
- /** Storage answers a hidden object like a missing one: HTTP 400 with `statusCode` 404. */
852
- const NOT_FOUND = {
853
- name: "StorageApiError",
854
- message: "Object not found",
855
- status: 400,
856
- statusCode: "404",
857
- code: "NoSuchKey"
858
- };
859
- const invalid = (message) => apiError(400, message, "InvalidRequest");
860
- /** A database failure as a Storage `error` that `fromStorageError` passes through unchanged. */
861
- function sqlFailure(cause) {
862
- const raw = fromPgError(cause);
863
- return {
864
- name: "DbError",
865
- ...raw ? mapDbError(raw) : toDbError(cause)
866
- };
867
- }
868
- async function settled(run) {
869
- try {
870
- return await run();
871
- } catch (cause) {
872
- return failed(sqlFailure(cause));
873
- }
874
- }
875
- function listProblem(options) {
876
- const { limit, offset, sortBy } = options;
877
- if (limit !== void 0 && (!Number.isInteger(limit) || limit < 1)) return "body/limit must be an integer of at least 1";
878
- if (offset !== void 0 && (!Number.isInteger(offset) || offset < 0)) return "body/offset must be an integer of at least 0";
879
- 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";
880
- if (sortBy?.order !== void 0 && !SORT_ORDERS.has(sortBy.order)) return "body/sortBy/order must be asc or desc";
881
- }
882
- function listV2Problem(options) {
883
- const { limit, sortBy } = options;
884
- if (limit !== void 0 && (!Number.isInteger(limit) || limit < 1)) return "body/limit must be an integer of at least 1";
885
- if (sortBy !== void 0 && !LIST_V2_SORT_COLUMNS.has(sortBy.column)) return "body/sortBy/column must be name, updated_at or created_at";
886
- if (sortBy?.order !== void 0 && !SORT_ORDERS.has(sortBy.order)) return "body/sortBy/order must be asc or desc";
887
- }
888
- /** The query storage-api runs for a `list-v2` page without a delimiter. */
889
- function flatPage(bucket, prefix, maxKeys, cursor, column, order) {
890
- const values = [bucket, maxKeys];
891
- const conditions = ["bucket_id = $1"];
892
- const sortColumn = column && FLAT_SORT_COLUMNS.has(column) ? column : void 0;
893
- const sortOrder = order && SORT_ORDERS.has(order) ? order : "asc";
894
- const operator = sortOrder === "asc" ? ">" : "<";
895
- const param = () => `$${String(values.length)}`;
896
- if (prefix) {
897
- values.push(`${escapeLike(prefix)}%`);
898
- conditions.push(`name like ${param()}`);
899
- }
900
- const startAfter = cursor?.startAfter;
901
- if (startAfter && sortColumn && cursor.sortColumnAfter) {
902
- values.push(cursor.sortColumnAfter);
903
- const afterParam = param();
904
- values.push(startAfter);
905
- conditions.push(`row(date_trunc('milliseconds', ${sortColumn}), name collate "C") ${operator} row(coalesce(nullif(${afterParam}, '')::timestamptz, 'epoch'::timestamptz), ${param()})`);
906
- } else if (startAfter) {
907
- values.push(startAfter);
908
- conditions.push(`name collate "C" ${operator} ${param()}`);
909
- }
910
- return {
911
- text: `select id::text as id, name, metadata, updated_at, created_at, last_accessed_at
912
- from storage.objects
913
- where ${conditions.join(" and ")}
914
- order by ${sortColumn ? `${sortColumn} ${sortOrder}, ` : ""}name collate "C" ${sortOrder}
915
- limit $2::int`,
916
- values
917
- };
918
- }
919
- /** Groups the entries below the next delimiter into folders, as storage-api does. */
920
- function delimited(entries, prefix) {
921
- const grouped = [];
922
- let previous = "";
923
- for (const entry of entries) {
924
- const name = String(entry["name"]);
925
- const index = name.replace(prefix, "").indexOf("/");
926
- if (index < 0) {
927
- grouped.push(entry);
928
- continue;
929
- }
930
- const folder = name.slice(0, prefix.length + index + 1);
931
- if (folder === previous) continue;
932
- previous = folder;
933
- grouped.push({
934
- id: null,
935
- name: folder
936
- });
937
- }
938
- return grouped;
939
- }
940
- const text = (value) => typeof value === "string" ? value : void 0;
941
- const metadataOf = (value) => isRecord(value) ? value : null;
942
- function listEntryOf(row) {
943
- return {
944
- name: String(row["name"]),
945
- id: text(row["id"]) ?? null,
946
- updated_at: text(iso(row["updated_at"])) ?? null,
947
- created_at: text(iso(row["created_at"])) ?? null,
948
- last_accessed_at: text(iso(row["last_accessed_at"])) ?? null,
949
- metadata: metadataOf(row["metadata"])
950
- };
951
- }
952
- function folderOf(row) {
953
- const name = String(row["name"]);
954
- const key = text(row["key"]);
955
- return {
956
- name: name.endsWith("/") ? name : `${name}/`,
957
- ...key === void 0 ? {} : { key }
958
- };
959
- }
960
- function objectOf(row) {
961
- const key = text(row["key"]);
962
- const lastAccessed = text(iso(row["last_accessed_at"]));
963
- return {
964
- name: String(row["name"]),
965
- ...key === void 0 ? {} : { key },
966
- id: text(row["id"]) ?? "",
967
- updated_at: text(iso(row["updated_at"])) ?? "",
968
- created_at: text(iso(row["created_at"])) ?? "",
969
- ...lastAccessed === void 0 ? {} : { last_accessed_at: lastAccessed },
970
- metadata: metadataOf(row["metadata"])
971
- };
972
- }
973
- function infoOf(row) {
974
- const metadata = isRecord(row["metadata"]) ? row["metadata"] : {};
975
- const size = metadata["size"];
976
- const contentType = text(metadata["mimetype"]);
977
- const cacheControl = text(metadata["cacheControl"]);
978
- const etag = text(metadata["eTag"]);
979
- const lastModified = text(iso(row["updated_at"]));
980
- const userMetadata = row["user_metadata"];
981
- const archivedAt = row["archived_at"];
982
- const deleteMarker = row["is_delete_marker"];
983
- const versioned = row["is_versioned"];
984
- return {
985
- id: text(row["id"]) ?? "",
986
- name: text(row["name"]) ?? "",
987
- version: text(row["version"]) ?? "",
988
- bucketId: text(row["bucket_id"]) ?? "",
989
- createdAt: text(iso(row["created_at"])) ?? "",
990
- ...typeof size === "number" ? { size } : {},
991
- ...contentType === void 0 ? {} : { contentType },
992
- ...cacheControl === void 0 ? {} : { cacheControl },
993
- ...etag === void 0 ? {} : { etag },
994
- ...lastModified === void 0 ? {} : { lastModified },
995
- ...isRecord(userMetadata) ? { metadata: userMetadata } : {},
996
- ...archivedAt === void 0 ? {} : { archivedAt: text(iso(archivedAt)) ?? null },
997
- ...typeof deleteMarker === "boolean" ? { isDeleteMarker: deleteMarker } : {},
998
- ...typeof versioned === "boolean" ? { isVersioned: versioned } : {}
999
- };
1000
- }
1001
- /**
1002
- * Storage for a support session, with the same `from(bucket)` file API as
1003
- * `supabase.storage`, so `bucket.connect()` and the blocks take it.
1004
- *
1005
- * Storage policies read `auth.uid()` from the request's token, and there is
1006
- * no token for the target, so reads go through Postgres as the target.
1007
- * `exists`, `info`, `list` and `listV2` run entirely there: the listings
1008
- * call the invoker-rights `storage.search` functions storage-api calls, so
1009
- * RLS filters each page as it would for the target's own request.
1010
- * `download` and the signed URLs first check there that the target may see
1011
- * the object, then the service client serves it. A hidden object answers
1012
- * like a missing one. `getPublicUrl` is built without a check, as it is
1013
- * built without a request.
1014
- *
1015
- * Writes resolve to a `403` error: `SUPPORT_READ_ONLY` in a read-only
1016
- * session and `SUPPORT_STORAGE_WRITES` in a writable one. The service client
1017
- * would store the object with no owner, and Storage never sees the session's
1018
- * `act` claim, so the write could be neither attributed to the target nor
1019
- * audited as the admin's.
1020
- */
1021
- function supportStorage(options) {
1022
- const refusal = options.readOnly ?? true ? apiError(403, "The support session is read-only", "SUPPORT_READ_ONLY") : apiError(403, "Storage writes are not available in a support session", "SUPPORT_STORAGE_WRITES");
1023
- const refuse = () => Promise.resolve(failed(refusal));
1024
- const rows = (query, values) => options.sql.queryRaw(query, values);
1025
- return { from(bucket) {
1026
- const admin = () => options.admin.from(bucket);
1027
- const visible = async (path) => {
1028
- const [row] = await rows(VISIBLE_OBJECT, [bucket, path]);
1029
- return row?.["visible"] === true;
1030
- };
1031
- const checked = (path, read) => settled(async () => {
1032
- const name = normalizePath(path);
1033
- if (!await visible(name)) return failed(NOT_FOUND);
1034
- return read(name);
1035
- });
1036
- const list = (path, listOptions = {}) => settled(async () => {
1037
- const problem = listProblem(listOptions);
1038
- if (problem) return failed(invalid(problem));
1039
- let prefix = path ?? "";
1040
- if (prefix.length > 0 && !prefix.endsWith("/")) prefix = `${prefix}/`;
1041
- const column = listOptions.sortBy?.column ?? "name";
1042
- const escape = column !== "name";
1043
- const safePrefix = escape ? escapeLike(prefix) : prefix;
1044
- const search = listOptions.search ?? "";
1045
- const safeSearch = escape ? escapeLike(search) : search;
1046
- return {
1047
- data: (await rows(SEARCH, [
1048
- safePrefix,
1049
- bucket,
1050
- listOptions.limit ?? 100,
1051
- (safePrefix + safeSearch).split("/").length,
1052
- listOptions.offset ?? 0,
1053
- safeSearch,
1054
- column,
1055
- listOptions.sortBy?.order ?? "asc"
1056
- ])).map(listEntryOf),
1057
- error: null
1058
- };
1059
- });
1060
- const listV2 = (listOptions = {}) => settled(async () => {
1061
- const problem = listV2Problem(listOptions);
1062
- if (problem) return failed(invalid(problem));
1063
- const limit = Math.min(listOptions.limit ?? 1e3, 1e3);
1064
- const prefix = listOptions.prefix ?? "";
1065
- const cursor = listOptions.cursor ? decodeCursor(listOptions.cursor) : void 0;
1066
- if (listOptions.cursor && !cursor) return failed(apiError(400, "Invalid continuation token", "InvalidParameter"));
1067
- const sortOrder = filled(cursor?.sortOrder) ?? listOptions.sortBy?.order;
1068
- const sortColumn = filled(cursor?.sortColumn) ?? listOptions.sortBy?.column;
1069
- let found;
1070
- if (listOptions.with_delimiter) found = await rows(SEARCH_V2, [
1071
- prefix,
1072
- bucket,
1073
- limit + 1,
1074
- prefix ? prefix.split("/").length : 1,
1075
- cursor?.startAfter ?? "",
1076
- sortOrder ?? "asc",
1077
- sortColumn ?? "name",
1078
- filled(cursor?.sortColumnAfter) ?? null
1079
- ]);
1080
- else {
1081
- const page = flatPage(bucket, listOptions.prefix, limit + 1, cursor, sortColumn, sortOrder);
1082
- found = await rows(page.text, page.values);
1083
- }
1084
- const entries = listOptions.with_delimiter ? delimited(found, prefix) : found;
1085
- const hasNext = entries.length > limit;
1086
- const count = hasNext ? limit : entries.length;
1087
- const folders = [];
1088
- const objects = [];
1089
- for (const entry of entries.slice(0, count)) if (entry["id"] === null || entry["id"] === void 0) folders.push(folderOf(entry));
1090
- else objects.push(objectOf(entry));
1091
- const last = entries[count - 1];
1092
- const after = last && sortColumn && sortColumn !== "name" ? iso(last[sortColumn]) : void 0;
1093
- const nextCursor = hasNext && last ? encodeCursor({
1094
- startAfter: String(last["name"]),
1095
- ...sortOrder ? { sortOrder } : {},
1096
- ...sortColumn ? { sortColumn } : {},
1097
- ...typeof after === "string" ? { sortColumnAfter: new Date(after).toISOString() } : {}
1098
- }) : void 0;
1099
- return {
1100
- data: {
1101
- hasNext,
1102
- ...nextCursor === void 0 ? {} : { nextCursor },
1103
- folders,
1104
- objects
1105
- },
1106
- error: null
1107
- };
1108
- });
1109
- return {
1110
- exists: (path) => settled(async () => ({
1111
- data: await visible(normalizePath(path)),
1112
- error: null
1113
- })).then((reply) => reply.error === null ? reply : {
1114
- data: false,
1115
- error: reply.error
1116
- }),
1117
- info: (path, infoOptions) => settled(async () => {
1118
- const versionId = infoOptions?.versionId;
1119
- const name = normalizePath(path);
1120
- const [row] = await rows(versionId === void 0 ? OBJECT_INFO : `${OBJECT_INFO} and o.version = $3`, versionId === void 0 ? [bucket, name] : [
1121
- bucket,
1122
- name,
1123
- versionId
1124
- ]);
1125
- const object = row?.["object"];
1126
- return isRecord(object) ? {
1127
- data: infoOf(object),
1128
- error: null
1129
- } : failed(NOT_FOUND);
1130
- }),
1131
- download: (path, downloadOptions, parameters) => checked(path, (name) => admin().download(name, downloadOptions, parameters)),
1132
- createSignedUrl: (path, expiresIn, urlOptions) => checked(path, (name) => admin().createSignedUrl(name, expiresIn, urlOptions)),
1133
- createSignedUrls: (paths, expiresIn, urlOptions) => settled(async () => {
1134
- const names = paths.map(normalizePath);
1135
- const seen = new Set((await rows(VISIBLE_OBJECTS, [bucket, names])).map((row) => String(row["path"])));
1136
- const shown = [...new Set(names.filter((name) => seen.has(name)))];
1137
- const signed = /* @__PURE__ */ new Map();
1138
- if (shown.length > 0) {
1139
- const reply = await admin().createSignedUrls(shown, expiresIn, urlOptions);
1140
- if (reply.error) return failed(reply.error);
1141
- for (const entry of reply.data) if (entry.path !== null) signed.set(entry.path, entry);
1142
- }
1143
- return {
1144
- data: names.map((name) => signed.get(name) ?? {
1145
- error: HIDDEN_URL,
1146
- path: name,
1147
- signedUrl: null
1148
- }),
1149
- error: null
1150
- };
1151
- }),
1152
- getPublicUrl: (path, urlOptions) => admin().getPublicUrl(path, urlOptions),
1153
- list,
1154
- listV2,
1155
- upload: refuse,
1156
- update: refuse,
1157
- createSignedUploadUrl: refuse,
1158
- uploadToSignedUrl: refuse,
1159
- remove: refuse,
1160
- copy: refuse,
1161
- move: refuse,
1162
- purgeCache: refuse
1163
- };
1164
- } };
1165
- }
1166
- //#endregion
1167
- //#region src/server/server.ts
1168
- /** The environment as `getEnv` resolves it, one variable at a time. */
1169
- const RUNTIME_ENV = new Proxy({}, { get: (_target, key) => typeof key === "string" ? getEnv(key) : void 0 });
1170
- const needsPostgres = (method) => dbError("invalid_request", `${method} needs createServer(betterSupabase, { postgres: createPostgres() })`);
1171
- /**
1172
- * A framework adapter's server: `server` plus the adapter's own methods,
1173
- * without reading the lazy `env` getter. `extra` can't replace a
1174
- * `BetterServer` method.
1175
- */
1176
- function extendServer(server, extra) {
1177
- const extended = Object.defineProperties({}, {
1178
- ...Object.getOwnPropertyDescriptors(server),
1179
- ...Object.getOwnPropertyDescriptors(extra)
1180
- });
1181
- shareCore(server, extended);
1182
- return extended;
1183
- }
1184
- /**
1185
- * Server-side entry point for APIs, jobs, MCP servers and framework
1186
- * adapters. Holds the secrets; `betterSupabase` stays isomorphic.
1187
- */
1188
- function createServer(betterSupabase, options = {}) {
1189
- const credentials = options.credentials === void 0 ? {} : { credentials: credentialProviderOf(options.credentials) };
1190
- let loaded;
1191
- const env = () => loaded ??= options.env ?? loadEnv(RUNTIME_ENV);
1192
- const lite = liteBackend(options, env);
1193
- if (lite === void 0 && (options.prefetchJwks ?? defaultPrefetchJwks()) && options.auth?.jwks === void 0) try {
1194
- prefetchJwks({
1195
- ...options.auth,
1196
- env: env()
1197
- });
1198
- } catch {}
1199
- const { executorOptions, tunedExecutor, serviceClient, readUrl, apiKeyClient, supabaseFor, restAt } = createClients({
1200
- options,
1201
- env,
1202
- definitionExecutor: betterSupabase.executorOptions(),
1203
- lite,
1204
- createClient
1205
- });
1206
- /** `$client` stays the full Supabase client, built when first read. */
1207
- const withLazyClient = (db, client) => Object.defineProperty(db, "$client", {
1208
- get: client,
1209
- enumerable: true,
1210
- configurable: true
1211
- });
1212
- const dbFor = (auth, context = {}) => {
1213
- let supabase;
1214
- const rest = restAt(env().url, auth);
1215
- const db = betterSupabase.connect(rest, {
1216
- ...authContext(auth),
1217
- ...context
1218
- }, auth.kind === "invalid" ? { executor: refusingExecutor(auth.error) } : tunedExecutor ? { executor: postgrestExecutor(rest, executorOptions) } : {});
1219
- return withLazyClient(db, () => supabase ??= supabaseFor(auth));
1220
- };
1221
- const sqlFor = (claims, context, stats, session, storage) => {
1222
- if (!options.postgres) throw new TypeError("Direct Postgres access needs createServer(betterSupabase, { postgres: createPostgres() })");
1223
- return betterSupabase.connect(session ? options.postgres.executorFor(claims, session) : options.postgres.executorFor(claims), context, {
1224
- ...stats ? { stats } : {},
1225
- ...storage ? { storage } : {}
1226
- });
1227
- };
1228
- /** `ServerOptions.tenant` outside `context()`, where it can't be awaited. */
1229
- const syncTenant = (request, auth) => {
1230
- const tenant = options.tenant?.(request, auth);
1231
- if (tenant !== void 0 && typeof tenant !== "string") throw new TypeError("ServerOptions.tenant returned a promise: use context(request), or pass { tenant } to contextFromResolution");
1232
- return tenant;
1233
- };
1234
- const pinMs = options.replicas?.pinMs ?? 5e3;
1235
- const idPolicy = requestIdPolicy(options.requestIds);
1236
- if (options.support && !options.postgres) throw new TypeError("Support sessions need createServer(betterSupabase, { postgres: createPostgres(), support })");
1237
- const audit = serverAudit(betterSupabase, options.audit);
1238
- const support = options.support ? options.support.create(betterSupabase.events, options.auth?.claims ?? betterSupabase.claimsSchema, betterSupabase.temporal) : supportOff;
1239
- /**
1240
- * The target's context in a support session. Queries run over direct
1241
- * Postgres with the target's claims plus `act`, read-only unless the
1242
- * session allows writes; nothing reaches Supabase with the admin's token.
1243
- */
1244
- const supportContextFor = (resolution, active, parent, tenant, ids) => {
1245
- const { session, claims } = active;
1246
- const record = (key) => {
1247
- const value = claims[key];
1248
- return typeof value === "object" && value !== null && !Array.isArray(value) ? Object.fromEntries(Object.entries(value)) : void 0;
1249
- };
1250
- const appMetadata = record("app_metadata");
1251
- const userMetadata = record("user_metadata");
1252
- const user = {
1253
- id: session.targetUserId,
1254
- role: typeof claims["role"] === "string" ? claims["role"] : "authenticated",
1255
- ...typeof claims["email"] === "string" ? { email: claims["email"] } : {},
1256
- ...appMetadata ? { appMetadata } : {},
1257
- ...userMetadata ? { userMetadata } : {}
1258
- };
1259
- const auth = {
1260
- kind: "user",
1261
- token: "",
1262
- claims,
1263
- user,
1264
- source: "support",
1265
- expiresAt: Math.floor(session.expiresAt.epochMilliseconds / 1e3)
1266
- };
1267
- const scope = tenant ?? session.tenant;
1268
- const base = userContext(user, claims);
1269
- const context = scope === void 0 ? base : {
1270
- ...base,
1271
- tenant: scope
1272
- };
1273
- const sessionOptions = sessionWith(ids, scope, session.readOnly);
1274
- const recorder = new StatsRecorder(parent);
1275
- const sqlClaims = claims;
1276
- const unavailable = () => {
1277
- 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");
1278
- };
1279
- let db;
1280
- let sql;
1281
- let storage;
1282
- const targetStorage = () => {
1283
- const postgres = options.postgres;
1284
- if (!postgres) throw new TypeError("Support sessions need createServer(betterSupabase, { postgres: createPostgres(), support })");
1285
- let asTarget;
1286
- storage ??= supportStorage({
1287
- admin: { from: (bucket) => serviceClient().storage.from(bucket) },
1288
- sql: { queryRaw: (text, params) => (asTarget ??= postgres.asUser(sqlClaims, sessionOptions)).queryRaw(text, params) },
1289
- readOnly: session.readOnly
1290
- });
1291
- return storage;
1292
- };
1293
- return {
1294
- ...credentials,
1295
- ...ids,
1296
- auth,
1297
- resolution,
1298
- support: active,
1299
- get storage() {
1300
- return targetStorage();
1301
- },
1302
- get supabase() {
1303
- return unavailable();
1304
- },
1305
- get db() {
1306
- db ??= Object.defineProperty(sqlFor(sqlClaims, context, recorder, sessionOptions, targetStorage()), "$client", {
1307
- get: unavailable,
1308
- enumerable: true,
1309
- configurable: true
1310
- });
1311
- return db;
1312
- },
1313
- get sql() {
1314
- sql ??= sqlFor(sqlClaims, context, recorder, sessionOptions, targetStorage());
1315
- return sql;
1316
- },
1317
- replica: void 0,
1318
- stats: () => recorder.snapshot(),
1319
- apply: (response) => resolution.apply(response),
1320
- cookies: () => resolution.cookies
1321
- };
1322
- };
1323
- /**
1324
- * An API key's context. There is no JWT for PostgREST, so `ctx.db` and
1325
- * `ctx.sql` run over direct Postgres with the key's synthesized claims,
1326
- * scoped to its organization unless the tenant option names another.
1327
- */
1328
- const apiKeyContextFor = (resolution, auth, parent, tenant, ids) => {
1329
- const scope = tenant ?? auth.organizationId;
1330
- const base = authContext(auth);
1331
- const context = scope === void 0 ? base : {
1332
- ...base,
1333
- tenant: scope
1334
- };
1335
- const session = sessionWith(ids, scope);
1336
- const recorder = new StatsRecorder(parent);
1337
- let db;
1338
- let sql;
1339
- return {
1340
- ...credentials,
1341
- ...ids,
1342
- auth: resolution.auth,
1343
- resolution,
1344
- get supabase() {
1345
- return apiKeyClient();
1346
- },
1347
- get db() {
1348
- db ??= Object.defineProperty(sqlFor(auth.claims, context, recorder, session), "$client", {
1349
- get: apiKeyClient,
1350
- enumerable: true,
1351
- configurable: true
1352
- });
1353
- return db;
1354
- },
1355
- get sql() {
1356
- sql ??= sqlFor(auth.claims, context, recorder, session);
1357
- return sql;
1358
- },
1359
- replica: void 0,
1360
- stats: () => recorder.snapshot(),
1361
- apply: (response) => resolution.apply(response),
1362
- cookies: () => resolution.cookies
1363
- };
1364
- };
1365
- /** Clients and repositories are built on first access: most scopes use one of them. */
1366
- const contextFor = (resolution, requestHeaders, parent, until = 0, tenant, active, ids = {}) => {
1367
- if (active) return supportContextFor(resolution, active, parent, tenant, ids);
1368
- const { auth } = resolution;
1369
- if (auth.kind === "apiKey") return apiKeyContextFor(resolution, auth, parent, tenant, ids);
1370
- const context = tenant === void 0 ? authContext(auth) : {
1371
- ...authContext(auth),
1372
- tenant
1373
- };
1374
- const clientHeaders = tenant === void 0 ? requestHeaders : {
1375
- ...requestHeaders,
1376
- [TENANT_HEADER]: tenant
1377
- };
1378
- const headers = {
1379
- ...idPolicy.headers(ids),
1380
- ...clientHeaders
1381
- };
1382
- const sharesClient = auth.kind !== "user";
1383
- const session = sessionWith(ids, tenant);
1384
- const recorder = new StatsRecorder(parent);
1385
- let supabase;
1386
- let db;
1387
- let sql;
1388
- const sqlClaims = auth.kind === "user" ? auth.claims : auth.kind === "anon" ? { role: "anon" } : void 0;
1389
- const client = () => supabase ??= supabaseFor(auth, sharesClient ? clientHeaders : headers);
1390
- let replica;
1391
- const replicaUrl = () => {
1392
- const url = readUrl();
1393
- if (url) replica ??= replicaState(until);
1394
- return url;
1395
- };
1396
- return {
1397
- ...credentials,
1398
- ...ids,
1399
- auth,
1400
- resolution,
1401
- get supabase() {
1402
- return client();
1403
- },
1404
- get db() {
1405
- if (db) return db;
1406
- const url = replicaUrl();
1407
- const rest = (sharesClient ? void 0 : supabase) ?? restAt(env().url, auth, headers);
1408
- const connected = betterSupabase.connect(rest, context, {
1409
- stats: recorder,
1410
- ...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) } : {}
1411
- });
1412
- db = withLazyClient(connected, client);
1413
- return db;
1414
- },
1415
- get replica() {
1416
- replicaUrl();
1417
- return replica;
1418
- },
1419
- get sql() {
1420
- if (!options.postgres || !sqlClaims) return;
1421
- sql ??= sqlFor(sqlClaims, context, recorder, session);
1422
- return sql;
1423
- },
1424
- stats: () => recorder.snapshot(),
1425
- apply: (response) => withPrimaryPin(resolution.apply(response), replica, pinMs),
1426
- cookies: () => {
1427
- const pin = primaryCookieWrite(replica, pinMs);
1428
- return pin ? [...resolution.cookies, pin] : resolution.cookies;
1429
- }
1430
- };
1431
- };
1432
- 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));
1433
- const resolve = async (request, resolveOptions = {}) => {
1434
- const claims = options.auth?.claims ?? betterSupabase.claimsSchema;
1435
- const userMetadata = betterSupabase.userMetadataSchema;
1436
- const resolution = await resolveAuth(request, {
1437
- logger: betterSupabase.events.logger,
1438
- ...lite ? lite.auth() : options.auth,
1439
- ...claims ? { claims } : {},
1440
- ...userMetadata ? { userMetadata } : {},
1441
- env: env(),
1442
- ...resolveOptions.refresh === void 0 ? {} : { refresh: resolveOptions.refresh },
1443
- ...resolveOptions.cookies === void 0 ? {} : { cookies: resolveOptions.cookies },
1444
- ...resolveOptions.checkSession ? { checkSession: true } : {},
1445
- ...resolveOptions.encode === void 0 ? {} : { cookie: {
1446
- ...options.auth?.cookie,
1447
- encode: resolveOptions.encode
1448
- } },
1449
- onRefresh: (event) => {
1450
- options.auth?.onRefresh?.(event);
1451
- betterSupabase.events.emit("refresh", event);
1452
- }
1453
- });
1454
- if (betterSupabase.events.has("auth")) {
1455
- const { auth } = resolution;
1456
- betterSupabase.events.emit("auth", {
1457
- source: auth.kind === "user" ? auth.source === "cookie" ? "cookie" : "bearer" : auth.kind === "service" || auth.kind === "apiKey" ? "bearer" : "none",
1458
- ok: auth.kind !== "invalid",
1459
- ...auth.kind === "user" ? {
1460
- userId: auth.user.id,
1461
- rawSource: auth.source
1462
- } : {},
1463
- ...auth.kind === "anon" || auth.kind === "invalid" ? { reason: auth.reason } : {}
1464
- });
1465
- }
1466
- return resolution;
1467
- };
1468
- /** One context per request and `refresh`/`cookies` pair: Server Components ask repeatedly. */
1469
- const contextMemo = /* @__PURE__ */ new WeakMap();
1470
- const server = {
1471
- get env() {
1472
- return env();
1473
- },
1474
- events: betterSupabase.events,
1475
- authorizer: options.authorizer,
1476
- resolve,
1477
- supabaseFor,
1478
- dbFor,
1479
- contextFor: (auth, contextOptions = {}) => contextFor({
1480
- auth,
1481
- cookies: [],
1482
- headers: {},
1483
- requestCookies: [],
1484
- apply: (response) => response
1485
- }, {}, contextOptions.stats, contextOptions.pinnedUntil, contextOptions.tenant, contextOptions.support, idPolicy.forRequest(void 0, contextOptions)),
1486
- context(request, contextOptions = {}) {
1487
- const { refresh, cookies, ...rest } = contextOptions;
1488
- const key = Object.keys(rest).length === 0 ? `${String(refresh ?? false)}:${String(cookies ?? true)}` : void 0;
1489
- let byOptions = key ? contextMemo.get(request) : void 0;
1490
- const known = key ? byOptions?.get(key) : void 0;
1491
- if (known) return known;
1492
- const resolving = (async () => {
1493
- const call = { options: contextOptions };
1494
- await fold(request, {
1495
- ...seedContext(),
1496
- [CALL]: call
1497
- });
1498
- return call.context;
1499
- })();
1500
- if (key) {
1501
- if (!byOptions) {
1502
- byOptions = /* @__PURE__ */ new Map();
1503
- contextMemo.set(request, byOptions);
1504
- }
1505
- const memo = byOptions;
1506
- memo.set(key, resolving);
1507
- resolving.catch(() => {
1508
- if (memo.get(key) === resolving) memo.delete(key);
1509
- });
1510
- }
1511
- return resolving;
1512
- },
1513
- contextFromResolution: (resolution, request, contextOptions = {}) => fromResolution(resolution, request, contextOptions, contextOptions.tenant ?? syncTenant(request, resolution.auth)),
1514
- admin: (context = {}) => {
1515
- const client = serviceClient();
1516
- return betterSupabase.connect(client, {
1517
- actor: {
1518
- id: "service",
1519
- kind: "service",
1520
- role: "service_role"
1521
- },
1522
- claims: { role: "service_role" },
1523
- ...context
1524
- }, tunedExecutor ? { executor: postgrestExecutor(client, executorOptions) } : {});
1525
- },
1526
- support,
1527
- deleteAccount: (userId, deleteOptions) => deleteAccount(betterSupabase, serviceClient, userId, {
1528
- ...options.postgres ? { sql: options.postgres.admin } : {},
1529
- ...deleteOptions
1530
- }).map((deleted) => {
1531
- audit.account("account.deleted", userId, { removed: deleted.removed });
1532
- return deleted;
1533
- }),
1534
- endSessions: (userId) => options.postgres ? endSessions(options.postgres.admin, userId).map((ended) => {
1535
- audit.account("account.sessions_ended", userId, { ended: ended.ended });
1536
- return ended;
1537
- }) : AsyncResult.err(needsPostgres("endSessions")),
1538
- suspendAccount: (userId, suspendOptions) => options.postgres ? suspendAccount(serviceClient, options.postgres.admin, userId, suspendOptions).map((suspended) => {
1539
- audit.account(suspended.suspended ? "account.suspended" : "account.unsuspended", userId, {
1540
- ended: suspended.ended,
1541
- ...suspendOptions.duration === void 0 ? {} : { duration: suspendOptions.duration }
1542
- });
1543
- return suspended;
1544
- }) : AsyncResult.err(needsPostgres("suspendAccount")),
1545
- actingAs: (userId, claims = {}, impersonation) => {
1546
- const full = {
1547
- role: "authenticated",
1548
- ...claims,
1549
- sub: userId,
1550
- ...impersonation ? { act: actClaim(impersonation) } : {}
1551
- };
1552
- return sqlFor(full, {
1553
- actor: {
1554
- id: userId,
1555
- kind: "user",
1556
- role: full.role ?? "authenticated",
1557
- ...impersonation ? { impersonator: impersonation.actor } : {}
1558
- },
1559
- claims: full
1560
- });
1561
- },
1562
- forContext: (context, forOptions = {}) => {
1563
- const { actor, tenant } = context;
1564
- if (actor?.kind !== "user") return AsyncResult.err(dbError("forbidden", `forContext needs a user actor, got ${actor ? actor.kind : "none"}: use admin() for service work`));
1565
- if (!options.postgres) return AsyncResult.err(dbError("invalid_request", "Direct Postgres access needs createServer(betterSupabase, { postgres: createPostgres() })"));
1566
- const recorded = actorOf(context.claims ?? {});
1567
- if (!recorded.ok) return AsyncResult.err(dbError("forbidden", "forContext got an invalid act claim"));
1568
- const support = recorded.actor?.kind === "support" ? recorded.actor : void 0;
1569
- const impersonator = support?.id ?? actor.impersonator;
1570
- return AsyncResult.from(async () => {
1571
- const claims = {
1572
- ...await options.claimsFor?.(actor.id, context) ?? {},
1573
- role: "authenticated",
1574
- sub: actor.id,
1575
- ...tenant === void 0 ? {} : { tenant_id: tenant },
1576
- ...support ? { act: impersonatorClaim(support) } : actor.impersonator ? { act: actClaim({
1577
- actor: actor.impersonator,
1578
- reason: forOptions.reason ?? "job"
1579
- }) } : {}
1580
- };
1581
- const session = sessionWith({}, tenant, support?.readOnly);
1582
- return ok(sqlFor(claims, {
1583
- actor: {
1584
- id: actor.id,
1585
- kind: "user",
1586
- role: "authenticated",
1587
- ...impersonator ? { impersonator } : {}
1588
- },
1589
- claims,
1590
- ...tenant === void 0 ? {} : { tenant }
1591
- }, void 0, session));
1592
- });
1593
- }
1594
- };
1595
- const core = {
1596
- events: betterSupabase.events,
1597
- pinMs,
1598
- resolve,
1599
- sessionCookie: () => options.auth?.cookie?.name ?? sessionCookieName(env().url),
1600
- tenant: (request, auth) => options.tenant?.(request, auth),
1601
- support: (request, auth) => support.current(request, auth),
1602
- context: (resolution, request, contextOptions, tenant) => fromResolution(resolution, request, contextOptions, tenant)
1603
- };
1604
- registerCore(server, core);
1605
- const fold = pipeline([
1606
- withSession(core),
1607
- withTenant(core),
1608
- withSupport(core),
1609
- withServerContext(core)
1610
- ], (_request, ctx) => {
1611
- const call = callOf(ctx);
1612
- if (call) call.context = ctx.bs;
1613
- return Promise.resolve(new Response(null, { status: 204 }));
1614
- });
1615
- return server;
1616
- }
1617
- //#endregion
1618
- //#region src/server/adapter.ts
1619
- /** Hands event sink sends still running to `waitUntil`; a no-op without either. */
1620
- function flushEvents(server, waitUntil) {
1621
- if (waitUntil && server.events.pending) waitUntil(server.events.settled());
1622
- }
1623
- /** Runs `run`, then hands pending event sink sends to `waitUntil` even when it throws. */
1624
- async function withFlush(server, waitUntil, run) {
1625
- try {
1626
- return await run();
1627
- } finally {
1628
- flushEvents(server, waitUntil);
1629
- }
1630
- }
1631
- /** The 500 for an error a handler threw; the message only when `expose` is set. */
1632
- function unexpectedResponse(cause, options) {
1633
- return problemResponse(dbError("unexpected", options.expose && cause instanceof Error ? cause.message : "Internal server error"), options);
1634
- }
1635
- /**
1636
- * Runs `run` as the request's caller, the way every built-in adapter does:
1637
- * resolves the context, applies the guard (401/403 Problem Details), turns
1638
- * the return value into a response with `respond()`, turns other thrown
1639
- * errors into a 500, adds the context's cookies with `ctx.apply()` and
1640
- * hands pending event sink sends to `waitUntil`.
1641
- *
1642
- * ```ts
1643
- * export default { fetch: (request, env, ctx) =>
1644
- * handle(server, request, (c) => c.db.notes.findMany(), { waitUntil: (p) => ctx.waitUntil(p) }) }
1645
- * ```
1646
- */
1647
- async function handle(server, request, run, options = {}) {
1648
- const expose = options.expose ?? defaultExpose();
1649
- const instance = options.instance ?? new URL(request.url).pathname;
1650
- const ctx = await server.context(request, {
1651
- ...options.context,
1652
- refresh: refreshFor(options.refresh, request) ?? false
1653
- });
1654
- const denied = guard(ctx.auth, options.allow, options.aal, options.scopes);
1655
- try {
1656
- let response;
1657
- try {
1658
- response = denied ? problemResponse(denied, {
1659
- instance,
1660
- expose
1661
- }) : await respond(() => run(ctx), {
1662
- instance,
1663
- expose,
1664
- ...options.status === void 0 ? {} : { status: options.status }
1665
- });
1666
- } catch (cause) {
1667
- options.rethrow?.(cause);
1668
- response = unexpectedResponse(cause, {
1669
- instance,
1670
- expose
1671
- });
1672
- }
1673
- return ctx.apply(response);
1674
- } finally {
1675
- flushEvents(server, options.waitUntil);
1676
- }
1677
- }
1678
- /** A request carrying only `token` as a bearer, for resolvers that read headers. */
1679
- function bearerRequest(token) {
1680
- return new Request("http://localhost/", { headers: token ? { authorization: `Bearer ${token}` } : {} });
1681
- }
1682
- /**
1683
- * Verifies a bare access token (an MCP transport's, a WebSocket's) without
1684
- * cookies or a refresh. An empty token resolves to `anon`.
1685
- */
1686
- async function resolveToken(server, token) {
1687
- const { auth } = await server.resolve(bearerRequest(token), { cookies: false });
1688
- return auth;
1689
- }
1690
- //#endregion
1691
- export { withServerContext as C, lastSignIns as D, endSessions as E, suspendAccount as O, shouldRefresh as S, SERVER_EVENT_SOURCE as T, withSupport as _, unexpectedResponse as a, refreshFor as b, extendServer as c, clearSupportCookie as d, supportCookie as f, withTenant as g, TENANT_HEADER as h, resolveToken as i, deleteAccount 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, withSession as v, serverCore as w, shouldCheckSession as x, isPrefetch as y };