better-supabase 0.11.0 → 0.12.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 (449) hide show
  1. package/dist/{adapter-B2WRsRIg.js → adapter-CRNH2aX_.js} +362 -253
  2. package/dist/{agents-CbUIrH-w.d.ts → agents-CGP2AQge.d.ts} +1 -1
  3. package/dist/{ai-files-DXbgWA5M.js → ai-files-ChFDkMLN.js} +12 -4
  4. package/dist/ai-sdk/agents/index.d.ts +3 -3
  5. package/dist/ai-sdk/batches/index.d.ts +1 -1
  6. package/dist/ai-sdk/embeddings/index.d.ts +2 -2
  7. package/dist/ai-sdk/files/index.d.ts +1 -1
  8. package/dist/ai-sdk/files/index.js +1 -1
  9. package/dist/ai-sdk/index.d.ts +1 -1
  10. package/dist/ai-sdk/mcp/index.d.ts +3 -3
  11. package/dist/ai-sdk/memory/index.d.ts +2 -2
  12. package/dist/{ai-tasks-BJJChl-D.d.ts → ai-tasks-ZvPnNudQ.d.ts} +1 -1
  13. package/dist/{api-keys-qnM63qjS.d.ts → api-keys-AgDXbcql.d.ts} +1 -1
  14. package/dist/{approvals-CRZtzxNt.d.ts → approvals-CyX709B-.d.ts} +1 -1
  15. package/dist/astro/index.d.ts +6 -6
  16. package/dist/astro/index.js +2 -2
  17. package/dist/{attachments-Bk3tyeUF.js → attachments-CK8D8bIV.js} +8 -2
  18. package/dist/{authorization-hooks-mLi894KH.d.ts → authorization-hooks-WDQMKIsc.d.ts} +1 -1
  19. package/dist/better-result/index.d.ts +2 -2
  20. package/dist/{bind-CTNKpBM6.d.ts → bind-Bfo40o63.d.ts} +3 -3
  21. package/dist/blocks/access-requests/index.d.ts +1 -1
  22. package/dist/blocks/agents/index.d.ts +2 -2
  23. package/dist/blocks/ai-cache/index.d.ts +1 -1
  24. package/dist/blocks/ai-chat/index.d.ts +2 -2
  25. package/dist/blocks/ai-chat/react/index.d.ts +1 -1
  26. package/dist/blocks/ai-chat/solid/index.d.ts +2 -2
  27. package/dist/blocks/ai-chat/svelte/index.d.ts +2 -2
  28. package/dist/blocks/ai-chat/vue/index.d.ts +2 -2
  29. package/dist/blocks/ai-files/index.d.ts +2 -2
  30. package/dist/blocks/ai-files/index.js +1 -1
  31. package/dist/blocks/ai-providers/index.d.ts +2 -2
  32. package/dist/blocks/ai-tasks/index.d.ts +2 -2
  33. package/dist/blocks/announcements/index.d.ts +2 -2
  34. package/dist/blocks/announcements/react/index.d.ts +1 -1
  35. package/dist/blocks/announcements/solid/index.d.ts +2 -2
  36. package/dist/blocks/announcements/svelte/index.d.ts +2 -2
  37. package/dist/blocks/announcements/vue/index.d.ts +2 -2
  38. package/dist/blocks/api-keys/index.d.ts +4 -4
  39. package/dist/blocks/api-keys/react/index.d.ts +1 -1
  40. package/dist/blocks/api-keys/react/server.d.ts +1 -1
  41. package/dist/blocks/api-keys/solid/index.d.ts +2 -2
  42. package/dist/blocks/api-keys/svelte/index.d.ts +2 -2
  43. package/dist/blocks/api-keys/vue/index.d.ts +2 -2
  44. package/dist/blocks/approvals/index.d.ts +2 -2
  45. package/dist/blocks/attachments/index.d.ts +2 -2
  46. package/dist/blocks/attachments/index.js +1 -1
  47. package/dist/blocks/audit/index.d.ts +2 -2
  48. package/dist/blocks/audit/react/index.d.ts +1 -1
  49. package/dist/blocks/audit/react/server.d.ts +1 -1
  50. package/dist/blocks/audit/solid/index.d.ts +2 -2
  51. package/dist/blocks/audit/svelte/index.d.ts +2 -2
  52. package/dist/blocks/audit/vue/index.d.ts +2 -2
  53. package/dist/blocks/billing/index.d.ts +3 -3
  54. package/dist/blocks/billing/react/index.d.ts +1 -1
  55. package/dist/blocks/billing/react/server.d.ts +1 -1
  56. package/dist/blocks/billing/solid/index.d.ts +2 -2
  57. package/dist/blocks/billing/svelte/index.d.ts +2 -2
  58. package/dist/blocks/billing/vue/index.d.ts +2 -2
  59. package/dist/blocks/bookings/index.d.ts +2 -2
  60. package/dist/blocks/bookings/react/index.d.ts +1 -1
  61. package/dist/blocks/bookings/solid/index.d.ts +2 -2
  62. package/dist/blocks/bookings/svelte/index.d.ts +2 -2
  63. package/dist/blocks/bookings/vue/index.d.ts +2 -2
  64. package/dist/blocks/bulk/index.d.ts +1 -1
  65. package/dist/blocks/calendar/index.d.ts +2 -2
  66. package/dist/blocks/calendar/react/index.d.ts +1 -1
  67. package/dist/blocks/calendar/solid/index.d.ts +2 -2
  68. package/dist/blocks/calendar/svelte/index.d.ts +2 -2
  69. package/dist/blocks/calendar/vue/index.d.ts +2 -2
  70. package/dist/blocks/catalog/index.d.ts +1 -1
  71. package/dist/blocks/collections/index.d.ts +1 -1
  72. package/dist/blocks/comments/index.d.ts +2 -2
  73. package/dist/blocks/comments/react/index.d.ts +1 -1
  74. package/dist/blocks/comments/react/server.d.ts +1 -1
  75. package/dist/blocks/comments/solid/index.d.ts +2 -2
  76. package/dist/blocks/comments/svelte/index.d.ts +2 -2
  77. package/dist/blocks/comments/vue/index.d.ts +2 -2
  78. package/dist/blocks/connectors/index.d.ts +2 -2
  79. package/dist/blocks/custom-fields/index.d.ts +1 -1
  80. package/dist/blocks/data-lifecycle/index.d.ts +2 -2
  81. package/dist/blocks/deals/index.d.ts +1 -1
  82. package/dist/blocks/documents/index.d.ts +1 -1
  83. package/dist/blocks/domains/index.d.ts +1 -1
  84. package/dist/blocks/drive/index.d.ts +2 -3
  85. package/dist/blocks/drive/index.js +14 -5
  86. package/dist/blocks/employees/index.d.ts +1 -1
  87. package/dist/blocks/engagements/index.d.ts +1 -1
  88. package/dist/blocks/entitlements/index.d.ts +3 -3
  89. package/dist/blocks/entitlements/react/index.d.ts +2 -2
  90. package/dist/blocks/entitlements/solid/index.d.ts +2 -2
  91. package/dist/blocks/entitlements/svelte/index.d.ts +2 -2
  92. package/dist/blocks/entitlements/vue/index.d.ts +2 -2
  93. package/dist/blocks/flags/index.d.ts +1 -1
  94. package/dist/blocks/forms/index.d.ts +2 -2
  95. package/dist/blocks/forms/react/index.d.ts +1 -1
  96. package/dist/blocks/forms/solid/index.d.ts +2 -2
  97. package/dist/blocks/forms/svelte/index.d.ts +2 -2
  98. package/dist/blocks/forms/vue/index.d.ts +2 -2
  99. package/dist/blocks/hiring/index.d.ts +1 -1
  100. package/dist/blocks/identities/index.d.ts +2 -2
  101. package/dist/blocks/imports/index.d.ts +1 -1
  102. package/dist/blocks/inbox/index.d.ts +2 -2
  103. package/dist/blocks/inbox/react/index.d.ts +2 -2
  104. package/dist/blocks/inbox/react/server.d.ts +2 -2
  105. package/dist/blocks/inbox/solid/index.d.ts +2 -2
  106. package/dist/blocks/inbox/svelte/index.d.ts +2 -2
  107. package/dist/blocks/inbox/vue/index.d.ts +2 -2
  108. package/dist/blocks/index.d.ts +2 -2
  109. package/dist/blocks/inventory/index.d.ts +1 -1
  110. package/dist/blocks/invoices/index.d.ts +1 -1
  111. package/dist/blocks/jobs/index.d.ts +1 -1
  112. package/dist/blocks/knowledge/index.d.ts +2 -2
  113. package/dist/blocks/leave/index.d.ts +1 -1
  114. package/dist/blocks/memory/index.d.ts +3 -3
  115. package/dist/blocks/metrics/index.d.ts +1 -1
  116. package/dist/blocks/mfa/index.d.ts +2 -2
  117. package/dist/blocks/mfa/react/index.d.ts +1 -1
  118. package/dist/blocks/mfa/react/server.d.ts +1 -1
  119. package/dist/blocks/mfa/solid/index.d.ts +2 -2
  120. package/dist/blocks/mfa/svelte/index.d.ts +2 -2
  121. package/dist/blocks/mfa/vue/index.d.ts +2 -2
  122. package/dist/blocks/notifications/index.d.ts +3 -3
  123. package/dist/blocks/notifications/react/index.d.ts +1 -1
  124. package/dist/blocks/notifications/react/server.d.ts +1 -1
  125. package/dist/blocks/notifications/solid/index.d.ts +2 -2
  126. package/dist/blocks/notifications/svelte/index.d.ts +2 -2
  127. package/dist/blocks/notifications/vue/index.d.ts +2 -2
  128. package/dist/blocks/number-sequences/index.d.ts +1 -1
  129. package/dist/blocks/oauth-server/index.d.ts +1 -1
  130. package/dist/blocks/onboarding/index.d.ts +2 -2
  131. package/dist/blocks/onboarding/react/index.d.ts +1 -1
  132. package/dist/blocks/onboarding/react/server.d.ts +1 -1
  133. package/dist/blocks/onboarding/solid/index.d.ts +2 -2
  134. package/dist/blocks/onboarding/svelte/index.d.ts +2 -2
  135. package/dist/blocks/onboarding/vue/index.d.ts +2 -2
  136. package/dist/blocks/orders/index.d.ts +1 -1
  137. package/dist/blocks/organizations/index.d.ts +2 -2
  138. package/dist/blocks/organizations/react/index.d.ts +1 -1
  139. package/dist/blocks/organizations/react/server.d.ts +1 -1
  140. package/dist/blocks/organizations/solid/index.d.ts +2 -2
  141. package/dist/blocks/organizations/svelte/index.d.ts +2 -2
  142. package/dist/blocks/organizations/vue/index.d.ts +2 -2
  143. package/dist/blocks/outbox/index.d.ts +2 -2
  144. package/dist/blocks/parties/index.d.ts +1 -1
  145. package/dist/blocks/pipelines/index.d.ts +1 -1
  146. package/dist/blocks/profiles/index.d.ts +1 -1
  147. package/dist/blocks/promotions/index.d.ts +1 -1
  148. package/dist/blocks/push/index.d.ts +2 -2
  149. package/dist/blocks/quotes/index.d.ts +1 -1
  150. package/dist/blocks/rank/index.d.ts +1 -1
  151. package/dist/blocks/reactions/index.d.ts +2 -2
  152. package/dist/blocks/reactions/react/index.d.ts +1 -1
  153. package/dist/blocks/reactions/solid/index.d.ts +2 -2
  154. package/dist/blocks/reactions/svelte/index.d.ts +2 -2
  155. package/dist/blocks/reactions/vue/index.d.ts +2 -2
  156. package/dist/blocks/relations/index.d.ts +1 -1
  157. package/dist/blocks/reminders/index.d.ts +3 -3
  158. package/dist/blocks/reviews/index.d.ts +1 -1
  159. package/dist/blocks/rules/index.d.ts +4 -4
  160. package/dist/blocks/rules/react/index.d.ts +1 -1
  161. package/dist/blocks/rules/solid/index.d.ts +2 -2
  162. package/dist/blocks/rules/svelte/index.d.ts +2 -2
  163. package/dist/blocks/rules/vue/index.d.ts +2 -2
  164. package/dist/blocks/saved-views/index.d.ts +2 -2
  165. package/dist/blocks/saved-views/react/index.d.ts +1 -1
  166. package/dist/blocks/saved-views/react/server.d.ts +1 -1
  167. package/dist/blocks/saved-views/solid/index.d.ts +2 -2
  168. package/dist/blocks/saved-views/svelte/index.d.ts +2 -2
  169. package/dist/blocks/saved-views/vue/index.d.ts +2 -2
  170. package/dist/blocks/search/index.d.ts +2 -2
  171. package/dist/blocks/search/react/index.d.ts +1 -1
  172. package/dist/blocks/search/react/server.d.ts +1 -1
  173. package/dist/blocks/search/solid/index.d.ts +2 -2
  174. package/dist/blocks/search/svelte/index.d.ts +2 -2
  175. package/dist/blocks/search/vue/index.d.ts +2 -2
  176. package/dist/blocks/service-principals/index.d.ts +1 -1
  177. package/dist/blocks/sessions/index.d.ts +2 -2
  178. package/dist/blocks/sessions/react/index.d.ts +1 -1
  179. package/dist/blocks/sessions/react/server.d.ts +1 -1
  180. package/dist/blocks/sessions/solid/index.d.ts +2 -2
  181. package/dist/blocks/sessions/svelte/index.d.ts +2 -2
  182. package/dist/blocks/sessions/vue/index.d.ts +2 -2
  183. package/dist/blocks/settings/index.d.ts +2 -2
  184. package/dist/blocks/settings/react/index.d.ts +1 -1
  185. package/dist/blocks/settings/react/server.d.ts +1 -1
  186. package/dist/blocks/settings/solid/index.d.ts +2 -2
  187. package/dist/blocks/settings/svelte/index.d.ts +2 -2
  188. package/dist/blocks/settings/vue/index.d.ts +2 -2
  189. package/dist/blocks/share-links/index.d.ts +1 -1
  190. package/dist/blocks/shared-signals/index.d.ts +2 -2
  191. package/dist/blocks/signing-keys/index.d.ts +1 -1
  192. package/dist/blocks/sla/index.d.ts +1 -1
  193. package/dist/blocks/sso/index.d.ts +2 -2
  194. package/dist/blocks/state-machine/index.d.ts +1 -1
  195. package/dist/blocks/tags/index.d.ts +2 -2
  196. package/dist/blocks/tags/react/index.d.ts +1 -1
  197. package/dist/blocks/tags/react/server.d.ts +1 -1
  198. package/dist/blocks/tags/solid/index.d.ts +2 -2
  199. package/dist/blocks/tags/svelte/index.d.ts +2 -2
  200. package/dist/blocks/tags/vue/index.d.ts +2 -2
  201. package/dist/blocks/targets/index.d.ts +1 -1
  202. package/dist/blocks/teams/index.d.ts +1 -1
  203. package/dist/blocks/templates/index.d.ts +3 -3
  204. package/dist/blocks/time-tracking/index.d.ts +1 -1
  205. package/dist/blocks/trash/index.d.ts +1 -1
  206. package/dist/blocks/undo/index.d.ts +2 -2
  207. package/dist/blocks/undo/react/index.d.ts +1 -1
  208. package/dist/blocks/undo/react/server.d.ts +1 -1
  209. package/dist/blocks/undo/solid/index.d.ts +2 -2
  210. package/dist/blocks/undo/svelte/index.d.ts +2 -2
  211. package/dist/blocks/undo/vue/index.d.ts +2 -2
  212. package/dist/blocks/usage/index.d.ts +2 -2
  213. package/dist/blocks/usage/react/index.d.ts +1 -1
  214. package/dist/blocks/usage/react/server.d.ts +1 -1
  215. package/dist/blocks/usage/solid/index.d.ts +2 -2
  216. package/dist/blocks/usage/svelte/index.d.ts +2 -2
  217. package/dist/blocks/usage/vue/index.d.ts +2 -2
  218. package/dist/blocks/vercel-marketplace/index.d.ts +1 -1
  219. package/dist/blocks/versions/index.d.ts +1 -1
  220. package/dist/blocks/waitlist/index.d.ts +1 -1
  221. package/dist/blocks/webhooks/index.d.ts +4 -4
  222. package/dist/blocks/work-items/index.d.ts +1 -1
  223. package/dist/blocks/workflow-builder/index.d.ts +4 -4
  224. package/dist/blocks/workflow-builder/react/index.d.ts +2 -2
  225. package/dist/blocks/workflow-builder/solid/index.d.ts +2 -2
  226. package/dist/blocks/workflow-builder/svelte/index.d.ts +2 -2
  227. package/dist/blocks/workflow-builder/vue/index.d.ts +2 -2
  228. package/dist/blocks/workflows/index.d.ts +2 -2
  229. package/dist/blocks/workflows/react/index.d.ts +1 -1
  230. package/dist/blocks/workflows/solid/index.d.ts +2 -2
  231. package/dist/blocks/workflows/svelte/index.d.ts +2 -2
  232. package/dist/blocks/workflows/vue/index.d.ts +2 -2
  233. package/dist/{bucket-BBSNDFNH.d.ts → bucket-BbePDVwc.d.ts} +16 -0
  234. package/dist/chat-sdk/index.d.ts +2 -2
  235. package/dist/chat-sdk/react/index.d.ts +2 -2
  236. package/dist/chat-sdk/react/server.d.ts +2 -2
  237. package/dist/cli/add-DnAyR9w_.js +1 -0
  238. package/dist/cli/{add-B5V6uokQ.js → add-TT72pQk6.js} +3 -3
  239. package/dist/cli/adopt-BuS-DC7_.js +1 -0
  240. package/dist/cli/{adopt-Ht34C3QD.js → adopt-mbB1bcIG.js} +4 -4
  241. package/dist/cli/{apply-4BmTvj2A.js → apply-CiBFOFGw.js} +15 -21
  242. package/dist/cli/bin.js +1 -1
  243. package/dist/cli/{blocks-jIvPqPtw.js → blocks-5-JGzwXX.js} +1 -1
  244. package/dist/cli/{blocks-bBI050w6.js → blocks-DeLQOlUK.js} +1 -1
  245. package/dist/cli/{cache-CVJmPGpd.js → cache-DQwgb3rg.js} +1 -1
  246. package/dist/cli/{codemod-vsknM1Ue.js → codemod-BzAMX4el.js} +2 -2
  247. package/dist/cli/{command-DLCZeHdo.js → command-dfdVhU_2.js} +16 -1
  248. package/dist/cli/{completion-CEZ-c3ja.js → completion-4lLjtI49.js} +1 -1
  249. package/dist/cli/{completion-D2BObVth.js → completion-D4InNrxw.js} +2 -2
  250. package/dist/cli/{completion-BAm8SwGQ.js → completion-zsp5s0zI.js} +2 -2
  251. package/dist/cli/{config-CynctXbc.js → config-CCyweX7Y.js} +1 -1
  252. package/dist/cli/{config-CC5DXgKX.js → config-DI6ielsx.js} +1 -1
  253. package/dist/cli/{config-C4e_RrmL.js → config-yZ55rsKZ.js} +1 -1
  254. package/dist/cli/{db-BxMRcHrY.js → db-TRymMyAW.js} +3 -3
  255. package/dist/cli/{design-edit-B-WsnhUF.js → design-edit-0U9iCTiS.js} +29 -2
  256. package/dist/cli/{doctor-D47sFjh9.js → doctor-DOfy6kjt.js} +119 -70
  257. package/dist/cli/env-Cmu99uKR.js +1 -0
  258. package/dist/cli/{env--JFvv45k.js → env-Dh5K5t2U.js} +32 -31
  259. package/dist/cli/{gen-D2E8osBE.js → gen-D3sC5jDn.js} +11 -11
  260. package/dist/cli/index.d.ts +1 -1
  261. package/dist/cli/index.js +6 -6
  262. package/dist/cli/{init-Cx7DDAdQ.js → init-DNomoycJ.js} +12 -18
  263. package/dist/cli/{introspect-Ck7aa6v0.js → introspect-kYX06Q2g.js} +3 -3
  264. package/dist/cli/{keys-6ufnWeZl.js → keys-B8dIJwwi.js} +1 -1
  265. package/dist/cli/{live-CLxJNC0r.js → live-CkV3d3yp.js} +1 -1
  266. package/dist/cli/{mcp-BVWvEoKo.js → mcp-DrxB2Wuw.js} +3 -3
  267. package/dist/cli/{metadata-BRywyPvv.js → metadata-BGkle6WM.js} +1 -1
  268. package/dist/cli/{moved-BmtFuMK3.js → moved-BMQu1YNY.js} +1 -1
  269. package/dist/cli/{parse-ksnw4phM.js → parse-QzDvMpXH.js} +1 -1
  270. package/dist/cli/{preset-B1o6KbFp.js → preset-CfIs24cc.js} +1 -1
  271. package/dist/cli/run-Bck-p0MI.js +63 -0
  272. package/dist/cli/{run-Bb8Nn8Ax.js → run-BhJKAanr.js} +2 -2
  273. package/dist/cli/{run-nX5ffQM_.js → run-DRZ10srj.js} +51 -43
  274. package/dist/cli/{scaffold-DcXr4z7M.js → scaffold-DoURlDEI.js} +1 -1
  275. package/dist/cli/{scaffold-fO-FJGoO.js → scaffold-mzy3OsN5.js} +1 -1
  276. package/dist/cli/seed-C5q4UUIL.js +1 -0
  277. package/dist/cli/{seed-BmOC6_iz.js → seed-CIdg6s7m.js} +3 -3
  278. package/dist/cli/{skills-CUx7S0bk.js → skills-D3zwIlGA.js} +1 -1
  279. package/dist/cli/{snapshot-ClgWGd-b.js → snapshot-BBKFojqM.js} +3 -3
  280. package/dist/cli/{source-args-BDiUhsH8.js → source-args-Cwo7zwvq.js} +1 -1
  281. package/dist/cli/{spec-DjHpWZJM.js → spec-DOgQUZwM.js} +1 -1
  282. package/dist/cli/{spec-CM7iyRnE.js → spec-DZeIP9ta.js} +3 -3
  283. package/dist/cli/{sql-C4ymac2h.js → sql-CL_Lbhwl.js} +1 -1
  284. package/dist/cli/{sql-ybcjbz20.js → sql-DLOvvnBV.js} +1 -1
  285. package/dist/cli/stack-env-_uWWNHWq.js +87 -0
  286. package/dist/cli/{stack-status-Cb_D79ZR.js → stack-status-_NUgd-g5.js} +41 -1
  287. package/dist/cli/{version-CUKjFbNd.js → version-B7akdvDv.js} +1 -1
  288. package/dist/client/index.d.ts +5 -5
  289. package/dist/client/native/index.d.ts +5 -5
  290. package/dist/{client-GdJH4XJM.d.ts → client-BAOZuBhz.d.ts} +1 -1
  291. package/dist/{client-B9_8yzct.d.ts → client-BJN0IMEp.d.ts} +2 -2
  292. package/dist/{client-QvuCfO4b.d.ts → client-BMcjLG0V.d.ts} +5 -5
  293. package/dist/{client-CeH7vd-g.d.ts → client-BN_fXOs7.d.ts} +1 -1
  294. package/dist/{client-CCGSn7m5.d.ts → client-BONsuFYf.d.ts} +4 -4
  295. package/dist/{client-CBQ2TV0r.d.ts → client-BPn9XhAM.d.ts} +1 -1
  296. package/dist/{client-ehjQ2tIT.d.ts → client-BtC-r4hE.d.ts} +3 -3
  297. package/dist/{client-DarDYaQj.d.ts → client-BuneNd-C.d.ts} +1 -1
  298. package/dist/{client-B_vHBwB6.d.ts → client-CHwNV8Kz.d.ts} +3 -3
  299. package/dist/{client-DbxvLC9Y.d.ts → client-CLQHsa-2.d.ts} +1 -1
  300. package/dist/{client-9ZOirdtr.d.ts → client-CMxxwT3N.d.ts} +3 -3
  301. package/dist/{client-B4a7f5ma.d.ts → client-CU7aNN_B.d.ts} +2 -2
  302. package/dist/{client-cWUWrgis.d.ts → client-CYEdJKjk.d.ts} +1 -1
  303. package/dist/{client-CNh-pjkT.d.ts → client-CYhSGlCN.d.ts} +3 -3
  304. package/dist/{client-5YAtJjyT.d.ts → client-D3gRTNSi.d.ts} +1 -1
  305. package/dist/{client-BqoYuTK3.d.ts → client-DB34f_7i.d.ts} +2 -2
  306. package/dist/{client-eCtwzCbQ.d.ts → client-DCawyopp.d.ts} +3 -3
  307. package/dist/{client-Bovn6-M9.d.ts → client-Dqa4XyJ5.d.ts} +1 -1
  308. package/dist/{client-CXTDJCIs.d.ts → client-Dr5h2r9r.d.ts} +1 -1
  309. package/dist/{client-CrZKZVbb.d.ts → client-DrTqKgvy.d.ts} +1 -1
  310. package/dist/{client-BNy-K6XT.d.ts → client-GCCRI9ge.d.ts} +1 -1
  311. package/dist/{client-DLz68Qga.d.ts → client-P6v3h7vh.d.ts} +1 -1
  312. package/dist/{client-CJT3xiuI.d.ts → client-P8l8ncxV.d.ts} +3 -3
  313. package/dist/{client-BXv09wO1.d.ts → client-kWg4OqIr.d.ts} +2 -2
  314. package/dist/{client-C3rmP3b0.d.ts → client-tvG258_1.d.ts} +4 -4
  315. package/dist/{client-Dft5Vq6m.d.ts → client-wKmX-f3r.d.ts} +1 -1
  316. package/dist/{composite-BFatHqOU.js → composite-1kPAxXto.js} +1 -1
  317. package/dist/{composite-B1Mmo4TU.d.ts → composite-DzvBL5nb.d.ts} +5 -5
  318. package/dist/{connectors-CR9FJGzV.d.ts → connectors-BwPNt-ZG.d.ts} +1 -1
  319. package/dist/{controller-BBXX1RMw.d.ts → controller-BZhiIb-N.d.ts} +1 -1
  320. package/dist/create/index.d.ts +24 -2
  321. package/dist/create/index.js +1001 -914
  322. package/dist/credentials/index.d.ts +2 -2
  323. package/dist/{define-M_r1d2AT.d.ts → define-DYZnvAbs.d.ts} +1 -1
  324. package/dist/{define-block-CPyJ95rq.d.ts → define-block-BHxLHLys.d.ts} +2 -2
  325. package/dist/edge/index.d.ts +8 -8
  326. package/dist/edge/index.js +3 -3
  327. package/dist/elysia/index.d.ts +1 -1
  328. package/dist/{embeddings-lTUwzvW4.d.ts → embeddings-CKhygw4C.d.ts} +1 -1
  329. package/dist/{ended-DQmwYosO.d.ts → ended-De6H52nX.d.ts} +1 -1
  330. package/dist/{entitlements-DgkeStXd.d.ts → entitlements-CtBGXb3B.d.ts} +2 -2
  331. package/dist/eve/index.d.ts +3 -3
  332. package/dist/eve/index.js +1 -1
  333. package/dist/{eve-C_Onyk_j.d.ts → eve-B6ru2Bt4.d.ts} +2 -2
  334. package/dist/{executor-DfdC00xr.d.ts → executor-BWgJNbGh.d.ts} +1 -1
  335. package/dist/expo/index.d.ts +3 -3
  336. package/dist/expo/index.js +3 -3
  337. package/dist/expo-sqlite/index.d.ts +1 -1
  338. package/dist/{field-errors-DmJICh93.d.ts → field-errors-Z-sgsdoN.d.ts} +6 -6
  339. package/dist/{framework-D6IFkuAg.d.ts → framework-BQhTsLX-.d.ts} +5 -5
  340. package/dist/{framework-Ch8bMmQY.js → framework-C6PKBgme.js} +1 -1
  341. package/dist/h3/index.d.ts +1 -1
  342. package/dist/h3/v1/index.d.ts +1 -1
  343. package/dist/hono/index.d.ts +8 -8
  344. package/dist/hono/index.js +2 -2
  345. package/dist/{index-DgobXyil.d.ts → index-1Vsg-7YV.d.ts} +1 -1
  346. package/dist/{index-D8yhOz_4.d.ts → index-BJLPQr2s.d.ts} +36 -3
  347. package/dist/{index-CK0Sxx57.d.ts → index-C-_fs7EI.d.ts} +7 -7
  348. package/dist/{index-F6XTTkC9.d.ts → index-CXFf-c-j.d.ts} +4 -4
  349. package/dist/{index-CEcDqDhc.d.ts → index-Cm2-g_4H.d.ts} +1 -1
  350. package/dist/{index-qCG78-Rf.d.ts → index-DTQSeHx2.d.ts} +2 -2
  351. package/dist/{index-DHReeV74.d.ts → index-Hc4tetmB.d.ts} +1 -1
  352. package/dist/{index-Bq409YZn.d.ts → index-QWTq2o31.d.ts} +1 -1
  353. package/dist/{index-Csi8jD-m.d.ts → index-XcTBR4Gb.d.ts} +1 -1
  354. package/dist/index.d.ts +2 -2
  355. package/dist/{kit-BeZX2pR_.d.ts → kit-De-EVRhw.d.ts} +3 -3
  356. package/dist/{knowledge-CRk1jOAJ.d.ts → knowledge-B5zdpDD-.d.ts} +1 -1
  357. package/dist/list/index.d.ts +1 -1
  358. package/dist/{list-query-FhFXzObg.d.ts → list-query-aXr2WkGA.d.ts} +1 -1
  359. package/dist/mcp/index.d.ts +4 -4
  360. package/dist/mcp/index.js +1 -1
  361. package/dist/mcp/sdk/index.d.ts +5 -5
  362. package/dist/mcp/sdk/index.js +1 -1
  363. package/dist/nestjs/index.d.ts +2 -2
  364. package/dist/next/index.d.ts +15 -15
  365. package/dist/next/index.js +2 -2
  366. package/dist/node/index.d.ts +2 -2
  367. package/dist/orpc/index.d.ts +5 -5
  368. package/dist/orpc/index.js +1 -1
  369. package/dist/otel/index.js +5 -5
  370. package/dist/{outbox-njgoVzFA.d.ts → outbox-B1hZ7PPY.d.ts} +1 -1
  371. package/dist/{ports-DCAcG26M.d.ts → ports-BCDIbC_U.d.ts} +1 -1
  372. package/dist/{ports-DGe1vzF2.d.ts → ports-P0A5wo_-.d.ts} +2 -2
  373. package/dist/powersync/index.d.ts +2 -2
  374. package/dist/preset/index.d.ts +2 -2
  375. package/dist/preset/index.js +2 -2
  376. package/dist/{preset-Cqwlwx6G.js → preset-Cf0T9GRt.js} +49 -6
  377. package/dist/{provider-CNs0Jx0I.d.ts → provider-DXgx5oSA.d.ts} +1 -1
  378. package/dist/{push-token-D2sDxSNN.d.ts → push-token-y1Gnz5bQ.d.ts} +1 -1
  379. package/dist/query/index.d.ts +1 -1
  380. package/dist/react/index.d.ts +7 -7
  381. package/dist/react/native/index.d.ts +1 -1
  382. package/dist/react/server.d.ts +8 -8
  383. package/dist/react/session.d.ts +2 -2
  384. package/dist/react-router/index.d.ts +5 -5
  385. package/dist/react-router/index.js +2 -2
  386. package/dist/realtime/index.d.ts +5 -5
  387. package/dist/{refusal-CufncwaN.d.ts → refusal-C7geIBRl.d.ts} +1 -1
  388. package/dist/{resolve-f8QNuYI3.js → resolve-AtncaPTU.js} +12 -5
  389. package/dist/{resolve-Bqb8TMTt.d.ts → resolve-Ceft-18-.d.ts} +6 -2
  390. package/dist/{resource-execute-ruP2L1op.d.ts → resource-execute-Bxvgmx-n.d.ts} +1 -1
  391. package/dist/{resource-types-CGr0BbL-.d.ts → resource-types-LW1i5-h3.d.ts} +2 -2
  392. package/dist/{resources-BiQpsM6O.d.ts → resources-D3_FAz_H.d.ts} +1 -1
  393. package/dist/{respond-CEBC6KUX.d.ts → respond-BSL36dQp.d.ts} +1 -1
  394. package/dist/server/index.d.ts +27 -19
  395. package/dist/server/index.js +4 -4
  396. package/dist/{server-types-BKN_R4Ws.d.ts → server-types-fLdep4gb.d.ts} +11 -9
  397. package/dist/{session-CwpfitmI.d.ts → session-DObioXpX.d.ts} +3 -3
  398. package/dist/solid/index.d.ts +7 -7
  399. package/dist/{solid-controller-Uqi5ef6z.d.ts → solid-controller-CWotGxcG.d.ts} +1 -1
  400. package/dist/solid-start/index.d.ts +5 -5
  401. package/dist/solid-start/index.js +2 -2
  402. package/dist/sql/index.d.ts +1 -1
  403. package/dist/sql/index.js +1 -1
  404. package/dist/{sql-DCfCbS2j.js → sql-CT1Jnwp8.js} +1 -1
  405. package/dist/ssr/index.d.ts +4 -4
  406. package/dist/ssr/index.js +1 -1
  407. package/dist/storage/index.d.ts +2 -2
  408. package/dist/storage/index.js +11 -0
  409. package/dist/{subject-readers-BNQzBDN9.d.ts → subject-readers-BUChuOxL.d.ts} +1 -1
  410. package/dist/{support-BAhTqI7y.js → support-C2wPYwD7.js} +1 -1
  411. package/dist/{support-view-IRnDLuGN.d.ts → support-view-Bj_lZ8Wr.d.ts} +1 -1
  412. package/dist/svelte/index.d.ts +6 -6
  413. package/dist/{svelte-controller-BQOIXWEw.d.ts → svelte-controller-sS4X66yL.d.ts} +1 -1
  414. package/dist/sveltekit/index.d.ts +6 -6
  415. package/dist/sveltekit/index.js +2 -2
  416. package/dist/{tags-AUpl4Ob9.d.ts → tags-BrGopDVG.d.ts} +1 -1
  417. package/dist/tanstack-db/index.d.ts +1 -1
  418. package/dist/tanstack-db/supabase/index.d.ts +1 -1
  419. package/dist/tanstack-start/index.d.ts +5 -5
  420. package/dist/tanstack-start/index.js +2 -2
  421. package/dist/{tenant-BNp3kBAG.d.ts → tenant-DZMLVuyQ.d.ts} +2 -2
  422. package/dist/testing/index.d.ts +13 -15
  423. package/dist/{topic-1WTkDnPd.d.ts → topic-DAY_HOX2.d.ts} +3 -3
  424. package/dist/{types-DDQ-Rsep.d.ts → types-BA1eTvy4.d.ts} +1 -1
  425. package/dist/{types-Bq64h5nY.d.ts → types-Bels39_u.d.ts} +2 -2
  426. package/dist/{types-DO9xWsGC.d.ts → types-DOC7wnh6.d.ts} +11 -2
  427. package/dist/{types-B4zhT6dq.d.ts → types-D_2rClz-.d.ts} +1 -1
  428. package/dist/upload-claim-BBFCZbBF.js +33 -0
  429. package/dist/{vault-DR2-zOjz.d.ts → vault-ClkzMGTP.d.ts} +1 -1
  430. package/dist/vercel-connect/index.d.ts +1 -1
  431. package/dist/{verify-BucYsoKq.d.ts → verify-DU4p9-Ve.d.ts} +1 -1
  432. package/dist/{version-TXpQEfh1.js → version-DSWxci83.js} +1 -1
  433. package/dist/{view-Bf7e07rQ.d.ts → view-KQhe6eNc.d.ts} +1 -1
  434. package/dist/vue/index.d.ts +7 -7
  435. package/dist/{vue-controller-Cav6Wt_r.d.ts → vue-controller-BUo1oove.d.ts} +1 -1
  436. package/dist/{watch-ry70AEm6.d.ts → watch-5btote1y.d.ts} +2 -2
  437. package/dist/{watch-topic-DWHy63ZJ.d.ts → watch-topic-C79ZW5-R.d.ts} +1 -1
  438. package/dist/workflow-sdk/builder/index.d.ts +3 -3
  439. package/dist/workflow-sdk/index.d.ts +1 -1
  440. package/dist/{workflow-sdk-DM7T3sF4.d.ts → workflow-sdk-CWdCWj7M.d.ts} +1 -1
  441. package/dist/yjs/index.d.ts +1 -1
  442. package/package.json +1 -1
  443. package/schemas/cli-commands-v1.json +15 -0
  444. package/schemas/config-v1.json +1 -1
  445. package/schemas/doctor-report-v1.json +1 -0
  446. package/dist/cli/add-DzRJEHzD.js +0 -1
  447. package/dist/cli/adopt-DDy50yz9.js +0 -1
  448. package/dist/cli/env-D-O91RK1.js +0 -1
  449. package/dist/cli/seed-C_BmN498.js +0 -1
@@ -11,7 +11,7 @@ import { i as forwardBlockEvents, t as DEFAULT_TYPE_PREFIX } from "./cloud-event
11
11
  import { a as replicaState, i as primaryCookieWrite, o as routedExecutor, r as pinnedUntil, s as withPrimaryPin } from "./replicas-BvIL4_jL.js";
12
12
  import { t as authContext } from "./context-BiwgsycK.js";
13
13
  import { a as narrowCap, i as delegatedClaims, r as contextClaims } from "./delegation-B7uNnz6z.js";
14
- import { d as parseCookies, h as sessionCookieName, m as serializeCookie, n as prefetchJwks, r as resolveAuth, s as AUTH_CACHE_HEADERS, u as clearSessionAtScopes } from "./resolve-f8QNuYI3.js";
14
+ import { d as parseCookies, h as sessionCookieName, m as serializeCookie, n as prefetchJwks, r as resolveAuth, s as AUTH_CACHE_HEADERS, u as clearSessionAtScopes } from "./resolve-AtncaPTU.js";
15
15
  import { t as credentialProviderOf } from "./provider-C-Ti38J6.js";
16
16
  import { a as respond, n as defaultPrefetchJwks, r as guard, t as defaultExpose } from "./respond-Bhp3G__q.js";
17
17
  import { createClient } from "@supabase/supabase-js";
@@ -835,10 +835,19 @@ where bucket_id = $1 and name = $2 and user_metadata ->> 'supportSessionId' = $5
835
835
  const OWN_COPY = `update storage.objects
836
836
  set owner = $3::uuid, owner_id = $4, user_metadata = coalesce(user_metadata, '{}'::jsonb) || $5::jsonb
837
837
  where bucket_id = $1 and name = $2 and owner_id is null`;
838
+ const OWN_SIGNED_UPLOAD = `${OWN_COPY}
839
+ returning name`;
838
840
  const OWN_MOVE = `update storage.objects
839
841
  set owner = $3::uuid, owner_id = $4, user_metadata = coalesce(user_metadata, '{}'::jsonb) || $5::jsonb
840
842
  where bucket_id = $1 and name = $2 and owner_id is not distinct from $6`;
841
843
  const UUID = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/i;
844
+ const OWNED = {
845
+ name: "StorageApiError",
846
+ message: "The object belongs to another user",
847
+ status: 403,
848
+ statusCode: "403",
849
+ code: "AccessDenied"
850
+ };
842
851
  const HIDDEN_URL = "Either the object does not exist or you do not have access to it";
843
852
  const LIST_SORT_COLUMNS = /* @__PURE__ */ new Set([
844
853
  "name",
@@ -1094,9 +1103,17 @@ function infoOf(row) {
1094
1103
  * decide as for the target's own request. Then the service client writes,
1095
1104
  * the admin connection makes the target the owner of the stored object,
1096
1105
  * and its `user_metadata` records the session id and the admin's id. A
1097
- * refused dry run resolves to Storage's `403`. Signed uploads resolve to a
1098
- * `403` `SUPPORT_STORAGE_WRITES` error, and every write in a read-only
1099
- * session to a `403` `SUPPORT_READ_ONLY` error.
1106
+ * refused dry run resolves to Storage's `403`.
1107
+ *
1108
+ * `createSignedUploadUrl` runs the same dry run as `upload` before the
1109
+ * service client signs the URL. The object a browser uploads there has no
1110
+ * owner, so `claimSignedUpload(bucket, path)` finishes the upload: it checks again
1111
+ * that the target may insert at the path, then makes the target the owner
1112
+ * of an object without one and stamps the session on its `user_metadata`.
1113
+ * An object another user owns is refused with a `403`. `uploadToSignedUrl`
1114
+ * claims what it stores. Every write in a read-only session resolves to a
1115
+ * `403` `SUPPORT_READ_ONLY` error, and without `adminSql`, `session` or a
1116
+ * `sql` client with `transaction` to a `403` `SUPPORT_STORAGE_WRITES` error.
1100
1117
  */
1101
1118
  function supportStorage(options) {
1102
1119
  const readOnly = options.readOnly ?? true;
@@ -1106,9 +1123,7 @@ function supportStorage(options) {
1106
1123
  session
1107
1124
  } : void 0;
1108
1125
  const refusal = readOnly ? apiError(403, "The support session is read-only", "SUPPORT_READ_ONLY") : apiError(403, "Storage writes in a support session need adminSql, session and a sql client with transaction", "SUPPORT_STORAGE_WRITES");
1109
- const signedRefusal = readOnly ? refusal : apiError(403, "Signed uploads are not available in a support session", "SUPPORT_STORAGE_WRITES");
1110
1126
  const refuse = () => Promise.resolve(failed(refusal));
1111
- const refuseSigned = () => Promise.resolve(failed(signedRefusal));
1112
1127
  const rows = (query, values) => sql.queryRaw(query, values);
1113
1128
  let versioned;
1114
1129
  const upsertStatement = () => (versioned ??= rows(CURRENT_VERSION_INDEX, []).then(([row]) => row?.["versioned"] === true).catch((cause) => {
@@ -1132,272 +1147,354 @@ function supportStorage(options) {
1132
1147
  throw cause;
1133
1148
  }
1134
1149
  };
1135
- return { from(bucket) {
1136
- const admin = () => options.admin.from(bucket);
1137
- const visible = async (path) => {
1138
- const [row] = await rows(VISIBLE_OBJECT, [bucket, path]);
1139
- return row?.["visible"] === true;
1150
+ const rehearseStore = (bucket, active, name, statement, metadata) => rehearse(async (client) => {
1151
+ await client.queryRaw(statement, [
1152
+ bucket,
1153
+ name,
1154
+ ownerOf(active.targetUserId),
1155
+ active.targetUserId,
1156
+ JSON.stringify(metadata)
1157
+ ]);
1158
+ return null;
1159
+ });
1160
+ const claimFor = async (bucket, { adminSql: ownerSql, session: active }, name) => {
1161
+ const [claimed] = await ownerSql.queryRaw(OWN_SIGNED_UPLOAD, [
1162
+ bucket,
1163
+ name,
1164
+ ownerOf(active.targetUserId),
1165
+ active.targetUserId,
1166
+ JSON.stringify(stampOf(active))
1167
+ ]);
1168
+ if (claimed) return {
1169
+ data: { path: name },
1170
+ error: null
1140
1171
  };
1141
- const checked = (path, read) => settled(async () => {
1172
+ const [found] = await ownerSql.queryRaw(SOURCE_OBJECT, [bucket, name]);
1173
+ if (!found) return failed(NOT_FOUND);
1174
+ return found["owner_id"] === active.targetUserId ? {
1175
+ data: { path: name },
1176
+ error: null
1177
+ } : failed(OWNED);
1178
+ };
1179
+ const claimSignedUpload = (bucket, path) => {
1180
+ if (!writer) return refuse();
1181
+ return settled(async () => {
1142
1182
  const name = normalizePath(path);
1143
- if (!await visible(name)) return failed(NOT_FOUND);
1144
- return read(name);
1145
- });
1146
- const list = (path, listOptions = {}) => settled(async () => {
1147
- const problem = listProblem(listOptions);
1148
- if (problem) return failed(invalid(problem));
1149
- let prefix = path ?? "";
1150
- if (prefix.length > 0 && !prefix.endsWith("/")) prefix = `${prefix}/`;
1151
- const column = listOptions.sortBy?.column ?? "name";
1152
- const escape = column !== "name";
1153
- const safePrefix = escape ? escapeLike(prefix) : prefix;
1154
- const search = listOptions.search ?? "";
1155
- const safeSearch = escape ? escapeLike(search) : search;
1156
- return {
1157
- data: (await rows(SEARCH, [
1158
- safePrefix,
1159
- bucket,
1160
- listOptions.limit ?? 100,
1161
- (safePrefix + safeSearch).split("/").length,
1162
- listOptions.offset ?? 0,
1163
- safeSearch,
1164
- column,
1165
- listOptions.sortBy?.order ?? "asc"
1166
- ])).map(listEntryOf),
1167
- error: null
1168
- };
1169
- });
1170
- const listV2 = (listOptions = {}) => settled(async () => {
1171
- const problem = listV2Problem(listOptions);
1172
- if (problem) return failed(invalid(problem));
1173
- const limit = Math.min(listOptions.limit ?? 1e3, 1e3);
1174
- const prefix = listOptions.prefix ?? "";
1175
- const cursor = listOptions.cursor ? decodeCursor(listOptions.cursor) : void 0;
1176
- if (listOptions.cursor && !cursor) return failed(apiError(400, "Invalid continuation token", "InvalidParameter"));
1177
- const sortOrder = filled(cursor?.sortOrder) ?? listOptions.sortBy?.order;
1178
- const sortColumn = filled(cursor?.sortColumn) ?? listOptions.sortBy?.column;
1179
- let found;
1180
- if (listOptions.with_delimiter) found = await rows(SEARCH_V2, [
1181
- prefix,
1182
- bucket,
1183
- limit + 1,
1184
- prefix ? prefix.split("/").length : 1,
1185
- cursor?.startAfter ?? "",
1186
- sortOrder ?? "asc",
1187
- sortColumn ?? "name",
1188
- filled(cursor?.sortColumnAfter) ?? null
1189
- ]);
1190
- else {
1191
- const page = flatPage(bucket, listOptions.prefix, limit + 1, cursor, sortColumn, sortOrder);
1192
- found = await rows(page.text, page.values);
1193
- }
1194
- const entries = listOptions.with_delimiter ? delimited(found, prefix) : found;
1195
- const hasNext = entries.length > limit;
1196
- const count = hasNext ? limit : entries.length;
1197
- const folders = [];
1198
- const objects = [];
1199
- for (const entry of entries.slice(0, count)) if (entry["id"] === null || entry["id"] === void 0) folders.push(folderOf(entry));
1200
- else objects.push(objectOf(entry));
1201
- const last = entries[count - 1];
1202
- const after = last && sortColumn && sortColumn !== "name" ? iso(last[sortColumn]) : void 0;
1203
- const nextCursor = hasNext && last ? encodeCursor({
1204
- startAfter: String(last["name"]),
1205
- ...sortOrder ? { sortOrder } : {},
1206
- ...sortColumn ? { sortColumn } : {},
1207
- ...typeof after === "string" ? { sortColumnAfter: new Date(after).toISOString() } : {}
1208
- }) : void 0;
1209
- return {
1210
- data: {
1211
- hasNext,
1212
- ...nextCursor === void 0 ? {} : { nextCursor },
1213
- folders,
1214
- objects
1215
- },
1216
- error: null
1217
- };
1218
- });
1219
- const store = (method) => (path, body, fileOptions = {}) => {
1220
- if (!writer) return refuse();
1221
- const { adminSql: ownerSql, session: active } = writer;
1222
- return settled(async () => {
1223
- const name = normalizePath(path);
1224
- const owner = ownerOf(active.targetUserId);
1225
- const metadata = {
1226
- ...fileOptions.metadata,
1227
- ...stampOf(active)
1228
- };
1229
- const statement = method === "update" || fileOptions.upsert === true ? await upsertStatement() : INSERT_OBJECT;
1230
- const refused = await rehearse(async (client) => {
1231
- await client.queryRaw(statement, [
1232
- bucket,
1233
- name,
1234
- owner,
1235
- active.targetUserId,
1236
- JSON.stringify(metadata)
1237
- ]);
1238
- return null;
1239
- });
1240
- if (refused) return failed(refused);
1241
- const reply = await admin()[method](name, body, {
1242
- ...fileOptions,
1243
- metadata
1244
- });
1245
- if (reply.error) return reply;
1183
+ const active = writer.session;
1184
+ const refused = await rehearse(async (client) => {
1246
1185
  try {
1247
- await ownerSql.queryRaw(OWN_UPLOAD, [
1186
+ await client.queryRaw(INSERT_OBJECT, [
1248
1187
  bucket,
1249
1188
  name,
1250
- owner,
1189
+ ownerOf(active.targetUserId),
1251
1190
  active.targetUserId,
1252
- active.id
1191
+ JSON.stringify(stampOf(active))
1253
1192
  ]);
1254
1193
  } catch (cause) {
1255
- await admin().remove([name]);
1256
- return failed(sqlFailure(cause));
1194
+ if (fromPgError(cause)?.code === "23505") return null;
1195
+ throw cause;
1257
1196
  }
1258
- return reply;
1197
+ return NOT_FOUND;
1259
1198
  });
1260
- };
1261
- const relocate = (method) => (from, to, destination = {}) => {
1262
- if (!writer) return refuse();
1263
- const { adminSql: ownerSql, session: active } = writer;
1264
- return settled(async () => {
1265
- const source = normalizePath(from);
1266
- const name = normalizePath(to);
1267
- const target = destination.destinationBucket ?? bucket;
1268
- const owner = ownerOf(active.targetUserId);
1269
- const stamp = JSON.stringify(stampOf(active));
1270
- let previousOwner = null;
1271
- const refused = await rehearse(async (client) => {
1272
- const [found] = await client.queryRaw(SOURCE_OBJECT, [bucket, source]);
1273
- if (!found) return NOT_FOUND;
1274
- previousOwner = text(found["owner_id"]) ?? null;
1275
- if (method === "copy") {
1276
- await client.queryRaw(INSERT_OBJECT, [
1277
- target,
1278
- name,
1279
- owner,
1280
- active.targetUserId,
1281
- stamp
1282
- ]);
1283
- return null;
1284
- }
1285
- const [moved] = await client.queryRaw(MOVE_OBJECT, [
1286
- bucket,
1287
- source,
1288
- target,
1289
- name,
1290
- owner,
1291
- active.targetUserId
1292
- ]);
1293
- return moved ? null : NOT_FOUND;
1294
- });
1295
- if (refused) return failed(refused);
1296
- const reply = await admin()[method](source, name, destination);
1297
- if (reply.error) return reply;
1298
- try {
1299
- await (method === "copy" ? ownerSql.queryRaw(OWN_COPY, [
1300
- target,
1301
- name,
1302
- owner,
1303
- active.targetUserId,
1304
- stamp
1305
- ]) : ownerSql.queryRaw(OWN_MOVE, [
1306
- target,
1307
- name,
1308
- owner,
1309
- active.targetUserId,
1310
- stamp,
1311
- previousOwner
1312
- ]));
1313
- } catch (cause) {
1314
- const written = options.admin.from(target);
1315
- await (method === "copy" ? written.remove([name]) : written.move(name, source, { destinationBucket: bucket }));
1316
- return failed(sqlFailure(cause));
1317
- }
1318
- return reply;
1199
+ if (refused) return failed(refused);
1200
+ return claimFor(bucket, writer, name);
1201
+ });
1202
+ };
1203
+ return {
1204
+ claimSignedUpload,
1205
+ from(bucket) {
1206
+ const admin = () => options.admin.from(bucket);
1207
+ const visible = async (path) => {
1208
+ const [row] = await rows(VISIBLE_OBJECT, [bucket, path]);
1209
+ return row?.["visible"] === true;
1210
+ };
1211
+ const checked = (path, read) => settled(async () => {
1212
+ const name = normalizePath(path);
1213
+ if (!await visible(name)) return failed(NOT_FOUND);
1214
+ return read(name);
1319
1215
  });
1320
- };
1321
- const remove = (paths) => {
1322
- if (!writer) return refuse();
1323
- return settled(async () => {
1324
- const entries = paths.map((entry) => typeof entry === "string" ? normalizePath(entry) : {
1325
- ...entry,
1326
- path: normalizePath(entry.path)
1327
- });
1328
- const names = entries.map((entry) => typeof entry === "string" ? entry : entry.path);
1329
- const removable = /* @__PURE__ */ new Set();
1330
- const refused = await rehearse(async (client) => {
1331
- await client.queryRaw(ALLOW_DELETE);
1332
- const deleted = await client.queryRaw(DELETE_OBJECTS, [bucket, [...new Set(names)]]);
1333
- for (const row of deleted) removable.add(String(row["name"]));
1334
- return null;
1335
- });
1336
- if (refused) return failed(refused);
1337
- const permitted = entries.filter((_, index) => removable.has(names[index] ?? ""));
1338
- if (permitted.length === 0) return {
1339
- data: [],
1216
+ const list = (path, listOptions = {}) => settled(async () => {
1217
+ const problem = listProblem(listOptions);
1218
+ if (problem) return failed(invalid(problem));
1219
+ let prefix = path ?? "";
1220
+ if (prefix.length > 0 && !prefix.endsWith("/")) prefix = `${prefix}/`;
1221
+ const column = listOptions.sortBy?.column ?? "name";
1222
+ const escape = column !== "name";
1223
+ const safePrefix = escape ? escapeLike(prefix) : prefix;
1224
+ const search = listOptions.search ?? "";
1225
+ const safeSearch = escape ? escapeLike(search) : search;
1226
+ return {
1227
+ data: (await rows(SEARCH, [
1228
+ safePrefix,
1229
+ bucket,
1230
+ listOptions.limit ?? 100,
1231
+ (safePrefix + safeSearch).split("/").length,
1232
+ listOptions.offset ?? 0,
1233
+ safeSearch,
1234
+ column,
1235
+ listOptions.sortBy?.order ?? "asc"
1236
+ ])).map(listEntryOf),
1340
1237
  error: null
1341
1238
  };
1342
- return admin().remove(permitted);
1343
1239
  });
1344
- };
1345
- return {
1346
- exists: (path) => settled(async () => ({
1347
- data: await visible(normalizePath(path)),
1348
- error: null
1349
- })).then((reply) => reply.error === null ? reply : {
1350
- data: false,
1351
- error: reply.error
1352
- }),
1353
- info: (path, infoOptions) => settled(async () => {
1354
- const versionId = infoOptions?.versionId;
1355
- const name = normalizePath(path);
1356
- const [row] = await rows(versionId === void 0 ? OBJECT_INFO : `${OBJECT_INFO} and o.version = $3`, versionId === void 0 ? [bucket, name] : [
1240
+ const listV2 = (listOptions = {}) => settled(async () => {
1241
+ const problem = listV2Problem(listOptions);
1242
+ if (problem) return failed(invalid(problem));
1243
+ const limit = Math.min(listOptions.limit ?? 1e3, 1e3);
1244
+ const prefix = listOptions.prefix ?? "";
1245
+ const cursor = listOptions.cursor ? decodeCursor(listOptions.cursor) : void 0;
1246
+ if (listOptions.cursor && !cursor) return failed(apiError(400, "Invalid continuation token", "InvalidParameter"));
1247
+ const sortOrder = filled(cursor?.sortOrder) ?? listOptions.sortBy?.order;
1248
+ const sortColumn = filled(cursor?.sortColumn) ?? listOptions.sortBy?.column;
1249
+ let found;
1250
+ if (listOptions.with_delimiter) found = await rows(SEARCH_V2, [
1251
+ prefix,
1357
1252
  bucket,
1358
- name,
1359
- versionId
1253
+ limit + 1,
1254
+ prefix ? prefix.split("/").length : 1,
1255
+ cursor?.startAfter ?? "",
1256
+ sortOrder ?? "asc",
1257
+ sortColumn ?? "name",
1258
+ filled(cursor?.sortColumnAfter) ?? null
1360
1259
  ]);
1361
- const object = row?.["object"];
1362
- return isRecord(object) ? {
1363
- data: infoOf(object),
1364
- error: null
1365
- } : failed(NOT_FOUND);
1366
- }),
1367
- download: (path, downloadOptions, parameters) => checked(path, (name) => admin().download(name, downloadOptions, parameters)),
1368
- createSignedUrl: (path, expiresIn, urlOptions) => checked(path, (name) => admin().createSignedUrl(name, expiresIn, urlOptions)),
1369
- createSignedUrls: (paths, expiresIn, urlOptions) => settled(async () => {
1370
- const names = paths.map(normalizePath);
1371
- const seen = new Set((await rows(VISIBLE_OBJECTS, [bucket, names])).map((row) => String(row["path"])));
1372
- const shown = [...new Set(names.filter((name) => seen.has(name)))];
1373
- const signed = /* @__PURE__ */ new Map();
1374
- if (shown.length > 0) {
1375
- const reply = await admin().createSignedUrls(shown, expiresIn, urlOptions);
1376
- if (reply.error) return failed(reply.error);
1377
- for (const entry of reply.data) if (entry.path !== null) signed.set(entry.path, entry);
1260
+ else {
1261
+ const page = flatPage(bucket, listOptions.prefix, limit + 1, cursor, sortColumn, sortOrder);
1262
+ found = await rows(page.text, page.values);
1378
1263
  }
1264
+ const entries = listOptions.with_delimiter ? delimited(found, prefix) : found;
1265
+ const hasNext = entries.length > limit;
1266
+ const count = hasNext ? limit : entries.length;
1267
+ const folders = [];
1268
+ const objects = [];
1269
+ for (const entry of entries.slice(0, count)) if (entry["id"] === null || entry["id"] === void 0) folders.push(folderOf(entry));
1270
+ else objects.push(objectOf(entry));
1271
+ const last = entries[count - 1];
1272
+ const after = last && sortColumn && sortColumn !== "name" ? iso(last[sortColumn]) : void 0;
1273
+ const nextCursor = hasNext && last ? encodeCursor({
1274
+ startAfter: String(last["name"]),
1275
+ ...sortOrder ? { sortOrder } : {},
1276
+ ...sortColumn ? { sortColumn } : {},
1277
+ ...typeof after === "string" ? { sortColumnAfter: new Date(after).toISOString() } : {}
1278
+ }) : void 0;
1379
1279
  return {
1380
- data: names.map((name) => signed.get(name) ?? {
1381
- error: HIDDEN_URL,
1382
- path: name,
1383
- signedUrl: null
1384
- }),
1280
+ data: {
1281
+ hasNext,
1282
+ ...nextCursor === void 0 ? {} : { nextCursor },
1283
+ folders,
1284
+ objects
1285
+ },
1385
1286
  error: null
1386
1287
  };
1387
- }),
1388
- getPublicUrl: (path, urlOptions) => admin().getPublicUrl(path, urlOptions),
1389
- list,
1390
- listV2,
1391
- upload: store("upload"),
1392
- update: store("update"),
1393
- createSignedUploadUrl: refuseSigned,
1394
- uploadToSignedUrl: refuseSigned,
1395
- remove,
1396
- copy: relocate("copy"),
1397
- move: relocate("move"),
1398
- purgeCache: (path, cacheOptions, parameters) => writer ? checked(path, (name) => admin().purgeCache(name, cacheOptions, parameters)) : refuse()
1399
- };
1400
- } };
1288
+ });
1289
+ const createSignedUploadUrl = (path, uploadOptions) => {
1290
+ if (!writer) return refuse();
1291
+ return settled(async () => {
1292
+ const name = normalizePath(path);
1293
+ const statement = uploadOptions?.upsert === true ? await upsertStatement() : INSERT_OBJECT;
1294
+ const refused = await rehearseStore(bucket, writer.session, name, statement, stampOf(writer.session));
1295
+ if (refused) return failed(refused);
1296
+ return admin().createSignedUploadUrl(name, uploadOptions);
1297
+ });
1298
+ };
1299
+ const uploadToSignedUrl = (path, token, body, fileOptions = {}) => {
1300
+ if (!writer) return refuse();
1301
+ return settled(async () => {
1302
+ const name = normalizePath(path);
1303
+ const metadata = {
1304
+ ...fileOptions.metadata,
1305
+ ...stampOf(writer.session)
1306
+ };
1307
+ const statement = fileOptions.upsert === true ? await upsertStatement() : INSERT_OBJECT;
1308
+ const refused = await rehearseStore(bucket, writer.session, name, statement, metadata);
1309
+ if (refused) return failed(refused);
1310
+ const reply = await admin().uploadToSignedUrl(name, token, body, {
1311
+ ...fileOptions,
1312
+ metadata
1313
+ });
1314
+ if (reply.error) return reply;
1315
+ try {
1316
+ const claimed = await claimFor(bucket, writer, name);
1317
+ return claimed.error ? claimed : reply;
1318
+ } catch (cause) {
1319
+ await admin().remove([name]);
1320
+ return failed(sqlFailure(cause));
1321
+ }
1322
+ });
1323
+ };
1324
+ const store = (method) => (path, body, fileOptions = {}) => {
1325
+ if (!writer) return refuse();
1326
+ const { adminSql: ownerSql, session: active } = writer;
1327
+ return settled(async () => {
1328
+ const name = normalizePath(path);
1329
+ const owner = ownerOf(active.targetUserId);
1330
+ const metadata = {
1331
+ ...fileOptions.metadata,
1332
+ ...stampOf(active)
1333
+ };
1334
+ const statement = method === "update" || fileOptions.upsert === true ? await upsertStatement() : INSERT_OBJECT;
1335
+ const refused = await rehearseStore(bucket, active, name, statement, metadata);
1336
+ if (refused) return failed(refused);
1337
+ const reply = await admin()[method](name, body, {
1338
+ ...fileOptions,
1339
+ metadata
1340
+ });
1341
+ if (reply.error) return reply;
1342
+ try {
1343
+ await ownerSql.queryRaw(OWN_UPLOAD, [
1344
+ bucket,
1345
+ name,
1346
+ owner,
1347
+ active.targetUserId,
1348
+ active.id
1349
+ ]);
1350
+ } catch (cause) {
1351
+ await admin().remove([name]);
1352
+ return failed(sqlFailure(cause));
1353
+ }
1354
+ return reply;
1355
+ });
1356
+ };
1357
+ const relocate = (method) => (from, to, destination = {}) => {
1358
+ if (!writer) return refuse();
1359
+ const { adminSql: ownerSql, session: active } = writer;
1360
+ return settled(async () => {
1361
+ const source = normalizePath(from);
1362
+ const name = normalizePath(to);
1363
+ const target = destination.destinationBucket ?? bucket;
1364
+ const owner = ownerOf(active.targetUserId);
1365
+ const stamp = JSON.stringify(stampOf(active));
1366
+ let previousOwner = null;
1367
+ const refused = await rehearse(async (client) => {
1368
+ const [found] = await client.queryRaw(SOURCE_OBJECT, [bucket, source]);
1369
+ if (!found) return NOT_FOUND;
1370
+ previousOwner = text(found["owner_id"]) ?? null;
1371
+ if (method === "copy") {
1372
+ await client.queryRaw(INSERT_OBJECT, [
1373
+ target,
1374
+ name,
1375
+ owner,
1376
+ active.targetUserId,
1377
+ stamp
1378
+ ]);
1379
+ return null;
1380
+ }
1381
+ const [moved] = await client.queryRaw(MOVE_OBJECT, [
1382
+ bucket,
1383
+ source,
1384
+ target,
1385
+ name,
1386
+ owner,
1387
+ active.targetUserId
1388
+ ]);
1389
+ return moved ? null : NOT_FOUND;
1390
+ });
1391
+ if (refused) return failed(refused);
1392
+ const reply = await admin()[method](source, name, destination);
1393
+ if (reply.error) return reply;
1394
+ try {
1395
+ await (method === "copy" ? ownerSql.queryRaw(OWN_COPY, [
1396
+ target,
1397
+ name,
1398
+ owner,
1399
+ active.targetUserId,
1400
+ stamp
1401
+ ]) : ownerSql.queryRaw(OWN_MOVE, [
1402
+ target,
1403
+ name,
1404
+ owner,
1405
+ active.targetUserId,
1406
+ stamp,
1407
+ previousOwner
1408
+ ]));
1409
+ } catch (cause) {
1410
+ const written = options.admin.from(target);
1411
+ await (method === "copy" ? written.remove([name]) : written.move(name, source, { destinationBucket: bucket }));
1412
+ return failed(sqlFailure(cause));
1413
+ }
1414
+ return reply;
1415
+ });
1416
+ };
1417
+ const remove = (paths) => {
1418
+ if (!writer) return refuse();
1419
+ return settled(async () => {
1420
+ const entries = paths.map((entry) => typeof entry === "string" ? normalizePath(entry) : {
1421
+ ...entry,
1422
+ path: normalizePath(entry.path)
1423
+ });
1424
+ const names = entries.map((entry) => typeof entry === "string" ? entry : entry.path);
1425
+ const removable = /* @__PURE__ */ new Set();
1426
+ const refused = await rehearse(async (client) => {
1427
+ await client.queryRaw(ALLOW_DELETE);
1428
+ const deleted = await client.queryRaw(DELETE_OBJECTS, [bucket, [...new Set(names)]]);
1429
+ for (const row of deleted) removable.add(String(row["name"]));
1430
+ return null;
1431
+ });
1432
+ if (refused) return failed(refused);
1433
+ const permitted = entries.filter((_, index) => removable.has(names[index] ?? ""));
1434
+ if (permitted.length === 0) return {
1435
+ data: [],
1436
+ error: null
1437
+ };
1438
+ return admin().remove(permitted);
1439
+ });
1440
+ };
1441
+ return {
1442
+ exists: (path) => settled(async () => ({
1443
+ data: await visible(normalizePath(path)),
1444
+ error: null
1445
+ })).then((reply) => reply.error === null ? reply : {
1446
+ data: false,
1447
+ error: reply.error
1448
+ }),
1449
+ info: (path, infoOptions) => settled(async () => {
1450
+ const versionId = infoOptions?.versionId;
1451
+ const name = normalizePath(path);
1452
+ const [row] = await rows(versionId === void 0 ? OBJECT_INFO : `${OBJECT_INFO} and o.version = $3`, versionId === void 0 ? [bucket, name] : [
1453
+ bucket,
1454
+ name,
1455
+ versionId
1456
+ ]);
1457
+ const object = row?.["object"];
1458
+ return isRecord(object) ? {
1459
+ data: infoOf(object),
1460
+ error: null
1461
+ } : failed(NOT_FOUND);
1462
+ }),
1463
+ download: (path, downloadOptions, parameters) => checked(path, (name) => admin().download(name, downloadOptions, parameters)),
1464
+ createSignedUrl: (path, expiresIn, urlOptions) => checked(path, (name) => admin().createSignedUrl(name, expiresIn, urlOptions)),
1465
+ createSignedUrls: (paths, expiresIn, urlOptions) => settled(async () => {
1466
+ const names = paths.map(normalizePath);
1467
+ const seen = new Set((await rows(VISIBLE_OBJECTS, [bucket, names])).map((row) => String(row["path"])));
1468
+ const shown = [...new Set(names.filter((name) => seen.has(name)))];
1469
+ const signed = /* @__PURE__ */ new Map();
1470
+ if (shown.length > 0) {
1471
+ const reply = await admin().createSignedUrls(shown, expiresIn, urlOptions);
1472
+ if (reply.error) return failed(reply.error);
1473
+ for (const entry of reply.data) if (entry.path !== null) signed.set(entry.path, entry);
1474
+ }
1475
+ return {
1476
+ data: names.map((name) => signed.get(name) ?? {
1477
+ error: HIDDEN_URL,
1478
+ path: name,
1479
+ signedUrl: null
1480
+ }),
1481
+ error: null
1482
+ };
1483
+ }),
1484
+ getPublicUrl: (path, urlOptions) => admin().getPublicUrl(path, urlOptions),
1485
+ list,
1486
+ listV2,
1487
+ upload: store("upload"),
1488
+ update: store("update"),
1489
+ createSignedUploadUrl,
1490
+ uploadToSignedUrl,
1491
+ remove,
1492
+ copy: relocate("copy"),
1493
+ move: relocate("move"),
1494
+ purgeCache: (path, cacheOptions, parameters) => writer ? checked(path, (name) => admin().purgeCache(name, cacheOptions, parameters)) : refuse()
1495
+ };
1496
+ }
1497
+ };
1401
1498
  }
1402
1499
  //#endregion
1403
1500
  //#region src/server/server.ts
@@ -1405,6 +1502,18 @@ function supportStorage(options) {
1405
1502
  const ACTOR_HEADER = "x-bs-actor";
1406
1503
  /** The environment as `getEnv` resolves it, one variable at a time. */
1407
1504
  const RUNTIME_ENV = new Proxy({}, { get: (_target, key) => typeof key === "string" ? getEnv(key) : void 0 });
1505
+ /**
1506
+ * `options.env` as given when it is loaded already, parsed when it is a
1507
+ * variable map (never merged with the runtime's), else the runtime's.
1508
+ */
1509
+ function envOf(env) {
1510
+ if (env === void 0) return loadEnv(RUNTIME_ENV);
1511
+ return isLoadedEnv(env) ? env : loadEnv(env);
1512
+ }
1513
+ /** An `EnvSource` holds only strings, so a `URL` in `jwksUrl` means a loaded env. */
1514
+ function isLoadedEnv(env) {
1515
+ return env.jwksUrl instanceof URL;
1516
+ }
1408
1517
  const needsPostgres = (method) => dbError("invalid_request", `${method} needs createServer(betterSupabase, { postgres: createPostgres() })`);
1409
1518
  /**
1410
1519
  * A framework adapter's server: `server` plus the adapter's own methods,
@@ -1426,7 +1535,7 @@ function extendServer(server, extra) {
1426
1535
  function createServer(betterSupabase, options = {}) {
1427
1536
  const credentials = options.credentials === void 0 ? {} : { credentials: credentialProviderOf(options.credentials) };
1428
1537
  let loaded;
1429
- const env = () => loaded ??= options.env ?? loadEnv(RUNTIME_ENV);
1538
+ const env = () => loaded ??= envOf(options.env);
1430
1539
  const lite = liteBackend(options, env);
1431
1540
  if (lite === void 0 && (options.prefetchJwks ?? defaultPrefetchJwks()) && options.auth?.jwks === void 0) try {
1432
1541
  prefetchJwks({