better-supabase 0.5.0 → 0.6.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 (536) hide show
  1. package/README.md +299 -41
  2. package/dist/access-sql-B0dF-SoF.js +181 -0
  3. package/dist/actor-CQTlc1Hh.d.ts +43 -0
  4. package/dist/adapter-Bc1o3zyy.js +1106 -0
  5. package/dist/agents-CVHGd7It.d.ts +94 -0
  6. package/dist/ai-cache-CBWs1W0k.js +80 -0
  7. package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
  8. package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
  9. package/dist/ai-chat-B24UI962.js +743 -0
  10. package/dist/ai-files-CSPNswUY.js +319 -0
  11. package/dist/ai-sdk/agents/index.d.ts +74 -0
  12. package/dist/ai-sdk/agents/index.js +159 -0
  13. package/dist/ai-sdk/batches/index.d.ts +74 -0
  14. package/dist/ai-sdk/batches/index.js +180 -0
  15. package/dist/ai-sdk/cache/index.d.ts +38 -0
  16. package/dist/ai-sdk/cache/index.js +127 -0
  17. package/dist/ai-sdk/chat/index.d.ts +2 -0
  18. package/dist/ai-sdk/chat/index.js +246 -0
  19. package/dist/ai-sdk/embeddings/index.d.ts +3 -0
  20. package/dist/ai-sdk/embeddings/index.js +2 -0
  21. package/dist/ai-sdk/files/index.d.ts +61 -0
  22. package/dist/ai-sdk/files/index.js +111 -0
  23. package/dist/ai-sdk/index.d.ts +145 -0
  24. package/dist/ai-sdk/index.js +174 -0
  25. package/dist/ai-sdk/mcp/index.d.ts +102 -0
  26. package/dist/ai-sdk/mcp/index.js +362 -0
  27. package/dist/ai-sdk/memory/index.d.ts +67 -0
  28. package/dist/ai-sdk/memory/index.js +175 -0
  29. package/dist/ai-sdk/react/index.d.ts +2 -0
  30. package/dist/ai-sdk/react/index.js +3 -0
  31. package/dist/ai-sdk/react/server.d.ts +6 -0
  32. package/dist/ai-sdk/react/server.js +7 -0
  33. package/dist/ai-sdk/workflow/index.d.ts +249 -0
  34. package/dist/ai-sdk/workflow/index.js +575 -0
  35. package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
  36. package/dist/ai-sdk/workflow/react/index.js +66 -0
  37. package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
  38. package/dist/ai-sdk/workflow/react/server.js +12 -0
  39. package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
  40. package/dist/announcements-CiyOs-xP.js +107 -0
  41. package/dist/announcements-ZRGnScWI.d.ts +72 -0
  42. package/dist/api-keys-rCGtKaZA.d.ts +156 -0
  43. package/dist/assistant-DwdpDH1q.d.ts +147 -0
  44. package/dist/astro/index.d.ts +86 -0
  45. package/dist/astro/index.js +93 -0
  46. package/dist/attributes-5dYul0u0.js +13 -0
  47. package/dist/auth-link-BjFPqwLz.d.ts +97 -0
  48. package/dist/auth-link-DrDX9KOT.js +114 -0
  49. package/dist/authorization-BFCqamMs.d.ts +172 -0
  50. package/dist/before-route-CnR0C0Jr.js +30 -0
  51. package/dist/bind-Bu_ZNa3W.d.ts +62 -0
  52. package/dist/bind-l4kAvYSv.js +97 -0
  53. package/dist/block-events-CrT8r7Fe.js +76 -0
  54. package/dist/block-fields-GFkxl4dP.js +49 -0
  55. package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
  56. package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
  57. package/dist/block-helpers-DWHxHsEQ.js +190 -0
  58. package/dist/block-hooks-BmjMyXTa.js +114 -0
  59. package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
  60. package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
  61. package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
  62. package/dist/blocks/agents/index.d.ts +3 -0
  63. package/dist/blocks/agents/index.js +123 -0
  64. package/dist/blocks/ai-cache/index.d.ts +3 -0
  65. package/dist/blocks/ai-cache/index.js +3 -0
  66. package/dist/blocks/ai-chat/index.d.ts +31 -0
  67. package/dist/blocks/ai-chat/index.js +5 -0
  68. package/dist/blocks/ai-chat/react/index.d.ts +77 -0
  69. package/dist/blocks/ai-chat/react/index.js +387 -0
  70. package/dist/blocks/ai-chat/react/server.d.ts +16 -0
  71. package/dist/blocks/ai-chat/react/server.js +14 -0
  72. package/dist/blocks/ai-files/index.d.ts +14 -0
  73. package/dist/blocks/ai-files/index.js +3 -0
  74. package/dist/blocks/ai-providers/index.d.ts +7 -0
  75. package/dist/blocks/ai-providers/index.js +211 -0
  76. package/dist/blocks/ai-tasks/index.d.ts +3 -0
  77. package/dist/blocks/ai-tasks/index.js +203 -0
  78. package/dist/blocks/announcements/index.d.ts +3 -0
  79. package/dist/blocks/announcements/index.js +3 -0
  80. package/dist/blocks/announcements/react/index.d.ts +31 -0
  81. package/dist/blocks/announcements/react/index.js +86 -0
  82. package/dist/blocks/announcements/react/server.d.ts +6 -0
  83. package/dist/blocks/announcements/react/server.js +7 -0
  84. package/dist/blocks/api-keys/index.d.ts +35 -0
  85. package/dist/blocks/api-keys/index.js +334 -0
  86. package/dist/blocks/attachments/index.d.ts +210 -0
  87. package/dist/blocks/attachments/index.js +222 -0
  88. package/dist/blocks/audit/index.d.ts +366 -0
  89. package/dist/blocks/audit/index.js +714 -0
  90. package/dist/blocks/billing/index.d.ts +265 -0
  91. package/dist/blocks/billing/index.js +400 -0
  92. package/dist/blocks/comments/index.d.ts +200 -0
  93. package/dist/blocks/comments/index.js +207 -0
  94. package/dist/blocks/connectors/index.d.ts +3 -0
  95. package/dist/blocks/connectors/index.js +164 -0
  96. package/dist/blocks/data-lifecycle/index.d.ts +251 -0
  97. package/dist/blocks/data-lifecycle/index.js +353 -0
  98. package/dist/blocks/entitlements/index.d.ts +14 -0
  99. package/dist/blocks/entitlements/index.js +25 -0
  100. package/dist/blocks/flags/index.d.ts +226 -0
  101. package/dist/blocks/flags/index.js +282 -0
  102. package/dist/blocks/inbox/index.d.ts +6 -0
  103. package/dist/blocks/inbox/index.js +499 -0
  104. package/dist/blocks/inbox/react/index.d.ts +2 -0
  105. package/dist/blocks/inbox/react/index.js +225 -0
  106. package/dist/blocks/inbox/react/server.d.ts +10 -0
  107. package/dist/blocks/inbox/react/server.js +12 -0
  108. package/dist/blocks/index.d.ts +65 -0
  109. package/dist/blocks/index.js +77 -0
  110. package/dist/blocks/jobs/index.d.ts +297 -0
  111. package/dist/blocks/jobs/index.js +1051 -0
  112. package/dist/blocks/knowledge/index.d.ts +3 -0
  113. package/dist/blocks/knowledge/index.js +3 -0
  114. package/dist/blocks/memory/index.d.ts +8 -0
  115. package/dist/blocks/memory/index.js +289 -0
  116. package/dist/blocks/notifications/index.d.ts +297 -0
  117. package/dist/blocks/notifications/index.js +425 -0
  118. package/dist/blocks/notifications/react/index.d.ts +44 -0
  119. package/dist/blocks/notifications/react/index.js +67 -0
  120. package/dist/blocks/notifications/react/server.d.ts +6 -0
  121. package/dist/blocks/notifications/react/server.js +7 -0
  122. package/dist/blocks/onboarding/index.d.ts +3 -0
  123. package/dist/blocks/onboarding/index.js +64 -0
  124. package/dist/blocks/onboarding/react/index.d.ts +28 -0
  125. package/dist/blocks/onboarding/react/index.js +78 -0
  126. package/dist/blocks/onboarding/react/server.d.ts +7 -0
  127. package/dist/blocks/onboarding/react/server.js +7 -0
  128. package/dist/blocks/organizations/index.d.ts +241 -0
  129. package/dist/blocks/organizations/index.js +400 -0
  130. package/dist/blocks/outbox/index.d.ts +3 -0
  131. package/dist/blocks/outbox/index.js +266 -0
  132. package/dist/blocks/profiles/index.d.ts +40 -0
  133. package/dist/blocks/profiles/index.js +28 -0
  134. package/dist/blocks/push/index.d.ts +185 -0
  135. package/dist/blocks/push/index.js +258 -0
  136. package/dist/blocks/settings/index.d.ts +89 -0
  137. package/dist/blocks/settings/index.js +104 -0
  138. package/dist/blocks/sso/index.d.ts +198 -0
  139. package/dist/blocks/sso/index.js +1297 -0
  140. package/dist/blocks/usage/index.d.ts +4 -0
  141. package/dist/blocks/usage/index.js +233 -0
  142. package/dist/blocks/waitlist/index.d.ts +117 -0
  143. package/dist/blocks/waitlist/index.js +132 -0
  144. package/dist/blocks/webhooks/index.d.ts +304 -0
  145. package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
  146. package/dist/blocks/workflow-builder/index.d.ts +21 -0
  147. package/dist/blocks/workflow-builder/index.js +5 -0
  148. package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
  149. package/dist/blocks/workflow-builder/react/index.js +119 -0
  150. package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
  151. package/dist/blocks/workflow-builder/react/server.js +11 -0
  152. package/dist/blocks/workflows/index.d.ts +3 -0
  153. package/dist/blocks/workflows/index.js +3 -0
  154. package/dist/blocks/workflows/react/index.d.ts +47 -0
  155. package/dist/blocks/workflows/react/index.js +137 -0
  156. package/dist/blocks/workflows/react/server.d.ts +8 -0
  157. package/dist/blocks/workflows/react/server.js +11 -0
  158. package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
  159. package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
  160. package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
  161. package/dist/channels-CkgQ_X60.js +114 -0
  162. package/dist/chat-sdk/index.d.ts +303 -0
  163. package/dist/chat-sdk/index.js +733 -0
  164. package/dist/chat-sdk/react/index.d.ts +2 -0
  165. package/dist/chat-sdk/react/index.js +3 -0
  166. package/dist/chat-sdk/react/server.d.ts +3 -0
  167. package/dist/chat-sdk/react/server.js +2 -0
  168. package/dist/claims-DDBQT6BK.js +61 -0
  169. package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
  170. package/dist/cli/bin.js +1 -1
  171. package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
  172. package/dist/cli/config-B9HkL8nF.js +2 -0
  173. package/dist/cli/config-DU7EJImt.js +49 -0
  174. package/dist/cli/config-NiPxAmUF.js +1077 -0
  175. package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
  176. package/dist/cli/{doctor-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
  177. package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
  178. package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
  179. package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
  180. package/dist/cli/gen-BGLb_zou.js +3100 -0
  181. package/dist/cli/gen-DAH8FM2W.js +2 -0
  182. package/dist/cli/index.d.ts +44 -5
  183. package/dist/cli/index.js +7 -7
  184. package/dist/cli/{init-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
  185. package/dist/cli/{introspect--H7oGmcd.js → introspect-DNUTuNvb.js} +5 -5
  186. package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
  187. package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
  188. package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
  189. package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
  190. package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
  191. package/dist/cli/read-sets-CETOSFx4.js +223 -0
  192. package/dist/cli/{run-BKR2W_79.js → run-DNWxHynX.js} +33 -23
  193. package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
  194. package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
  195. package/dist/cli/sql-D0GUtUPp.js +536 -0
  196. package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
  197. package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
  198. package/dist/cli/{version-BDJuO0UR.js → version-hr88OZG0.js} +1 -1
  199. package/dist/client/index.d.ts +3 -2
  200. package/dist/client/index.js +11 -71
  201. package/dist/client/native/index.d.ts +228 -0
  202. package/dist/client/native/index.js +361 -0
  203. package/dist/client-CI0Z2zWX.js +277 -0
  204. package/dist/cloud-event-BnmD5fb9.js +46 -0
  205. package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
  206. package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
  207. package/dist/compose-BIBNgAnq.js +53 -0
  208. package/dist/composite-Bt1YK3Ke.d.ts +146 -0
  209. package/dist/composite-DhE66P5u.js +130 -0
  210. package/dist/config/index.d.ts +6 -4
  211. package/dist/config/index.js +5 -5
  212. package/dist/{config-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
  213. package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
  214. package/dist/connector-Dv8kK0MO.d.ts +107 -0
  215. package/dist/connectors-hkLCwyEz.d.ts +120 -0
  216. package/dist/context-BCrWe7ow.d.ts +237 -0
  217. package/dist/credentials/index.d.ts +31 -0
  218. package/dist/credentials/index.js +168 -0
  219. package/dist/cron-DVPUg5k3.js +145 -0
  220. package/dist/csv-CPAzEmB6.js +25 -0
  221. package/dist/db-exception-CnWcYPxL.js +15 -0
  222. package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
  223. package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
  224. package/dist/edge/index.d.ts +69 -11
  225. package/dist/edge/index.js +191 -75
  226. package/dist/elysia/index.d.ts +59 -0
  227. package/dist/elysia/index.js +62 -0
  228. package/dist/embeddings-4ZvFzjsU.js +127 -0
  229. package/dist/embeddings-C9KGQnXt.d.ts +68 -0
  230. package/dist/{refresh-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
  231. package/dist/{entitlements-DUxU4oHe.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
  232. package/dist/entitlements-DRl6ZJUm.js +24 -0
  233. package/dist/envelope-DqnYGRw7.js +47 -0
  234. package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
  235. package/dist/errors-DLjJHPLK.js +44 -0
  236. package/dist/escape-like-DHfx6jRr.js +7 -0
  237. package/dist/escape-like-ImTK0ps_.d.ts +15 -0
  238. package/dist/eve/index.d.ts +220 -0
  239. package/dist/eve/index.js +504 -0
  240. package/dist/eve-gT2Fpjut.d.ts +151 -0
  241. package/dist/events/index.d.ts +4 -3
  242. package/dist/events/index.js +9 -50
  243. package/dist/events-DWDhx77e.d.ts +549 -0
  244. package/dist/executor-Bq28caBo.js +718 -0
  245. package/dist/executor-C-R4pucm.js +83 -0
  246. package/dist/executor-CaWigTyR.d.ts +148 -0
  247. package/dist/executor-D14tGopJ.d.ts +36 -0
  248. package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
  249. package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
  250. package/dist/executor-DvsBbNBS.d.ts +261 -0
  251. package/dist/expo/index.d.ts +79 -0
  252. package/dist/expo/index.js +129 -0
  253. package/dist/expo-sqlite/index.d.ts +58 -0
  254. package/dist/expo-sqlite/index.js +104 -0
  255. package/dist/field-errors-BFOa7WhB.d.ts +99 -0
  256. package/dist/field-errors-VF1yb8yI.js +13 -0
  257. package/dist/framework-CONDyPYx.js +51 -0
  258. package/dist/framework-DuVb4Xa8.d.ts +25 -0
  259. package/dist/gateway-C1ssRHnf.d.ts +130 -0
  260. package/dist/graph-BGyLLFLX.js +265 -0
  261. package/dist/h3/index.d.ts +59 -0
  262. package/dist/h3/index.js +55 -0
  263. package/dist/h3/v1/index.d.ts +63 -0
  264. package/dist/h3/v1/index.js +49 -0
  265. package/dist/history-BZih6SFP.js +64 -0
  266. package/dist/hono/index.d.ts +56 -7
  267. package/dist/hono/index.js +97 -45
  268. package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
  269. package/dist/http-Cv4T29xh.js +40 -0
  270. package/dist/http-DdYadv-o.js +126 -0
  271. package/dist/image-url-pIVlO6R1.js +41 -0
  272. package/dist/impersonation-DcqaTBHx.js +148 -0
  273. package/dist/inbox-i7E1ppo6.d.ts +384 -0
  274. package/dist/index-ACiNPN4Z.d.ts +74 -0
  275. package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
  276. package/dist/index-BkWT_uBO.d.ts +51 -0
  277. package/dist/index-BpFYMsi0.d.ts +53 -0
  278. package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
  279. package/dist/index-CaxrMD1A.d.ts +1 -0
  280. package/dist/index-ClmjK_o-.d.ts +55 -0
  281. package/dist/index-CtuakVRc.d.ts +267 -0
  282. package/dist/index-D48jVS-N.d.ts +246 -0
  283. package/dist/index-DDrYaUcq.d.ts +138 -0
  284. package/dist/index-DQh4VCc9.d.ts +98 -0
  285. package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
  286. package/dist/index.d.ts +65 -18
  287. package/dist/index.js +42 -14
  288. package/dist/invalidate-BBqhpxyB.d.ts +19 -0
  289. package/dist/json-CEnpTHlZ.js +16 -0
  290. package/dist/json-schema-CvER4kgT.js +502 -0
  291. package/dist/keys-4MnkWTTh.js +35 -0
  292. package/dist/kit-B5tid-q5.d.ts +60 -0
  293. package/dist/kit-Fm-Fv7q5.js +78 -0
  294. package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
  295. package/dist/knowledge-CDmiMLew.js +255 -0
  296. package/dist/lint/index.d.ts +1 -1
  297. package/dist/lint/index.js +37 -0
  298. package/dist/list/index.d.ts +3 -2
  299. package/dist/list/index.js +1 -444
  300. package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
  301. package/dist/list-query-gl808ac1.js +459 -0
  302. package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
  303. package/dist/logger-DWVYUmwi.d.ts +18 -0
  304. package/dist/mcp/index.d.ts +38 -11
  305. package/dist/mcp/index.js +82 -46
  306. package/dist/mcp/sdk/index.d.ts +105 -0
  307. package/dist/mcp/sdk/index.js +126 -0
  308. package/dist/message-CaKlqdsX.js +219 -0
  309. package/dist/message-CfDoR0Y6.d.ts +94 -0
  310. package/dist/messages-B9-5887d.js +715 -0
  311. package/dist/messages-DYP0sUTe.d.ts +59 -0
  312. package/dist/{mfa-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
  313. package/dist/modules-DpPwzC7E.d.ts +192 -0
  314. package/dist/modules-dxrVK3ID.js +228 -0
  315. package/dist/nestjs/index.d.ts +68 -0
  316. package/dist/nestjs/index.js +164 -0
  317. package/dist/next/client/index.d.ts +35 -0
  318. package/dist/next/client/index.js +36 -0
  319. package/dist/next/image/index.js +3 -24
  320. package/dist/next/index.d.ts +150 -51
  321. package/dist/next/index.js +261 -107
  322. package/dist/node/index.d.ts +4 -0
  323. package/dist/node/index.js +210 -0
  324. package/dist/node-headers-AO06VhqH.d.ts +24 -0
  325. package/dist/node-headers-C71zNQHe.js +55 -0
  326. package/dist/nuxt/index.d.ts +60 -0
  327. package/dist/nuxt/index.js +64 -0
  328. package/dist/onboarding-BZGHYJks.d.ts +62 -0
  329. package/dist/openapi/index.d.ts +1 -1
  330. package/dist/openapi/index.js +3 -3
  331. package/dist/orpc/index.d.ts +70 -11
  332. package/dist/orpc/index.js +73 -24
  333. package/dist/otel/index.d.ts +7 -7
  334. package/dist/otel/index.js +87 -57
  335. package/dist/outbox-Cq7pPYvl.d.ts +161 -0
  336. package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
  337. package/dist/plugin-tfXW1-qO.js +45 -0
  338. package/dist/plugins/actor/index.d.ts +2 -2
  339. package/dist/plugins/actor/index.js +3 -3
  340. package/dist/plugins/rules/index.d.ts +11 -4
  341. package/dist/plugins/rules/index.js +40 -13
  342. package/dist/plugins/soft-delete/index.d.ts +5 -4
  343. package/dist/plugins/soft-delete/index.js +10 -5
  344. package/dist/plugins/tenant/index.d.ts +2 -2
  345. package/dist/plugins/tenant/index.js +18 -11
  346. package/dist/plugins/timestamps/index.d.ts +5 -3
  347. package/dist/plugins/timestamps/index.js +6 -4
  348. package/dist/plugins/validation/index.d.ts +2 -2
  349. package/dist/plugins/validation/index.js +10 -6
  350. package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
  351. package/dist/postgres/index.d.ts +4 -4
  352. package/dist/postgres/index.js +1 -2
  353. package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
  354. package/dist/powersync/index.d.ts +43 -0
  355. package/dist/powersync/index.js +199 -0
  356. package/dist/powersync/react/index.d.ts +87 -0
  357. package/dist/powersync/react/index.js +108 -0
  358. package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
  359. package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
  360. package/dist/provider-BH5UWZJ6.d.ts +113 -0
  361. package/dist/provider-Di3sRutW.js +57 -0
  362. package/dist/query/index.d.ts +4 -2
  363. package/dist/query/index.js +4 -3
  364. package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
  365. package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
  366. package/dist/react/index.d.ts +11 -7
  367. package/dist/react/index.js +7 -3
  368. package/dist/react/native/index.d.ts +116 -0
  369. package/dist/react/native/index.js +130 -0
  370. package/dist/react/server.d.ts +28 -10
  371. package/dist/react/server.js +22 -5
  372. package/dist/react/session.d.ts +2 -2
  373. package/dist/react-4ZqkP8da.js +79 -0
  374. package/dist/react-F80mF4-t.js +409 -0
  375. package/dist/react-router/index.d.ts +83 -0
  376. package/dist/react-router/index.js +89 -0
  377. package/dist/react-topic-seAWjL3_.js +38 -0
  378. package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
  379. package/dist/realtime/index.d.ts +4 -5
  380. package/dist/realtime/index.js +144 -82
  381. package/dist/refusal-CeJWxmkH.js +61 -0
  382. package/dist/refusal-D1rgbzNq.d.ts +15 -0
  383. package/dist/replicas-CwrYp5Zj.js +94 -0
  384. package/dist/{view-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
  385. package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
  386. package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
  387. package/dist/{resource-D8iqWMr-.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
  388. package/dist/respond-BUgsXNgk.js +91 -0
  389. package/dist/respond-DoBijysA.d.ts +93 -0
  390. package/dist/result-D7y2fT87.d.ts +282 -0
  391. package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
  392. package/dist/run-state-CPo-1X2B.d.ts +12 -0
  393. package/dist/run-state-CgBKzYMW.js +13 -0
  394. package/dist/search-CUWCRYKL.js +9 -0
  395. package/dist/server/index.d.ts +143 -21
  396. package/dist/server/index.js +46 -14
  397. package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
  398. package/dist/session-ChiXDZdZ.d.ts +72 -0
  399. package/dist/shared-CBxosKK3.js +75 -0
  400. package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
  401. package/dist/shared-DDSjEGDR.d.ts +11 -0
  402. package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
  403. package/dist/sign-in-Cb1mwv6X.js +86 -0
  404. package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
  405. package/dist/simplify-DDO0j0LI.js +83 -0
  406. package/dist/solid/index.d.ts +131 -0
  407. package/dist/solid/index.js +344 -0
  408. package/dist/solid-start/index.d.ts +75 -0
  409. package/dist/solid-start/index.js +58 -0
  410. package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
  411. package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
  412. package/dist/sql/index.d.ts +330 -194
  413. package/dist/sql/index.js +34901 -6489
  414. package/dist/ssr/index.d.ts +6 -5
  415. package/dist/ssr/index.js +3 -3
  416. package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
  417. package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
  418. package/dist/stats-D_AD9GGu.js +1123 -0
  419. package/dist/storage/index.d.ts +5 -5
  420. package/dist/storage/index.js +1027 -368
  421. package/dist/store-BdH5ruDx.js +66 -0
  422. package/dist/store-CGjgWu5n.d.ts +68 -0
  423. package/dist/streams/index.d.ts +76 -0
  424. package/dist/streams/index.js +77 -0
  425. package/dist/streams/redis/index.d.ts +52 -0
  426. package/dist/streams/redis/index.js +185 -0
  427. package/dist/stripe-BMj5LtsT.js +38 -0
  428. package/dist/stripe-D04h-QBT.d.ts +136 -0
  429. package/dist/{support-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
  430. package/dist/{support-view-Da5peKFg.d.ts → support-view-33Oi07TT.d.ts} +1 -1
  431. package/dist/svelte/index.d.ts +114 -0
  432. package/dist/svelte/index.js +344 -0
  433. package/dist/sveltekit/index.d.ts +116 -0
  434. package/dist/sveltekit/index.js +106 -0
  435. package/dist/tags-B99_U9Pp.js +39 -0
  436. package/dist/tags-Cx-LnIQP.d.ts +30 -0
  437. package/dist/tanstack-db/index.d.ts +71 -0
  438. package/dist/tanstack-db/index.js +72 -0
  439. package/dist/tanstack-start/index.d.ts +75 -0
  440. package/dist/tanstack-start/index.js +95 -0
  441. package/dist/tee-CoEppCER.js +101 -0
  442. package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
  443. package/dist/template-CwO38Do8.d.ts +6 -0
  444. package/dist/temporal-BJGitm-h.js +79 -0
  445. package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
  446. package/dist/tenant-I1TEZ_BX.js +27 -0
  447. package/dist/tenant-icPeuUBN.d.ts +17 -0
  448. package/dist/testing/index.d.ts +343 -37
  449. package/dist/testing/index.js +1186 -79
  450. package/dist/timing-CyTQPubY.js +92 -0
  451. package/dist/ttl-Hr34gRu8.js +12 -0
  452. package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
  453. package/dist/types-BI-0Sl2v.d.ts +359 -0
  454. package/dist/types-C05bxW-W.d.ts +220 -0
  455. package/dist/types-DGs5L0VN.d.ts +192 -0
  456. package/dist/types-TaiEeBGA.d.ts +156 -0
  457. package/dist/usage-CrvrL2vw.d.ts +177 -0
  458. package/dist/user-change-XzvgafU4.js +130 -0
  459. package/dist/vault-CSO7ss5C.d.ts +50 -0
  460. package/dist/vercel-connect/index.d.ts +47 -0
  461. package/dist/vercel-connect/index.js +119 -0
  462. package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
  463. package/dist/verify-DPuWngD4.d.ts +172 -0
  464. package/dist/{version-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
  465. package/dist/view-BeFcRV6G.js +99 -0
  466. package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
  467. package/dist/vue/index.d.ts +141 -0
  468. package/dist/vue/index.js +362 -0
  469. package/dist/watch-DI34G86j.d.ts +60 -0
  470. package/dist/watch-Xuxrvxq-.js +122 -0
  471. package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
  472. package/dist/workflow-builder-DJ1oHn8g.js +398 -0
  473. package/dist/workflow-sdk/builder/index.d.ts +85 -0
  474. package/dist/workflow-sdk/builder/index.js +250 -0
  475. package/dist/workflow-sdk/index.d.ts +14 -0
  476. package/dist/workflow-sdk/index.js +3 -0
  477. package/dist/workflow-sdk/world/index.d.ts +107 -0
  478. package/dist/workflow-sdk/world/index.js +702 -0
  479. package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
  480. package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
  481. package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
  482. package/dist/workflows-B0j9WKPu.d.ts +185 -0
  483. package/dist/workflows-wu1WWBn7.js +216 -0
  484. package/package.json +470 -29
  485. package/schemas/ai-message-v1.json +258 -0
  486. package/schemas/config-v1.json +1074 -140
  487. package/schemas/doctor-report-v1.json +21 -1
  488. package/schemas/snapshot-v2.json +8 -0
  489. package/skills/better-supabase/SKILL.md +41 -12
  490. package/skills/better-supabase/references/frontend.md +96 -0
  491. package/skills/better-supabase/references/plugins.md +10 -6
  492. package/skills/better-supabase/references/troubleshooting.md +2 -1
  493. package/skills/better-supabase-api/SKILL.md +76 -22
  494. package/skills/better-supabase-api/references/adapters.md +207 -0
  495. package/skills/better-supabase-api/references/ai.md +125 -0
  496. package/skills/better-supabase-api/references/expo.md +65 -0
  497. package/skills/better-supabase-api/references/powersync.md +35 -0
  498. package/skills/better-supabase-api/references/streams-credentials.md +105 -0
  499. package/skills/better-supabase-auth/SKILL.md +62 -18
  500. package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
  501. package/skills/better-supabase-testing/SKILL.md +3 -1
  502. package/dist/cli/config-dtoekM0v.js +0 -2
  503. package/dist/cli/gen-BJc9vdyu.js +0 -2
  504. package/dist/cli/gen-C2osRcr5.js +0 -2204
  505. package/dist/cli/read-sets-BfMQcKy8.js +0 -289
  506. package/dist/cli/sql-DzPbfngx.js +0 -348
  507. package/dist/entitlements-CTEBm7IB.js +0 -20
  508. package/dist/events-aIO7vsIk.d.ts +0 -230
  509. package/dist/executor-BunPOO-k.d.ts +0 -402
  510. package/dist/executor-XycESQPH.js +0 -94
  511. package/dist/impersonation-VfaGc4Q_.js +0 -41
  512. package/dist/index-BGdgBPdf.d.ts +0 -161
  513. package/dist/index-DOESKG27.d.ts +0 -100
  514. package/dist/index-DmXSxbLi.d.ts +0 -62
  515. package/dist/index-Dxn2a5cw.d.ts +0 -50
  516. package/dist/jobs/index.d.ts +0 -226
  517. package/dist/jobs/index.js +0 -1007
  518. package/dist/json-schema-m1fiwKgN.js +0 -208
  519. package/dist/kit-events-CTFDfSwb.js +0 -60
  520. package/dist/kit-transport-B82k1djG.d.ts +0 -33
  521. package/dist/kits-CGLLrNPd.js +0 -157
  522. package/dist/notifications/index.d.ts +0 -162
  523. package/dist/notifications/index.js +0 -264
  524. package/dist/orgs/index.d.ts +0 -132
  525. package/dist/orgs/index.js +0 -245
  526. package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
  527. package/dist/permdock-sql-DgOfeixi.js +0 -51
  528. package/dist/plugin-DwARMuQp.js +0 -59
  529. package/dist/server-Csx2sRjg.js +0 -655
  530. package/dist/stats-Bqob3WqT.js +0 -592
  531. package/dist/support-DT-OhSxD.d.ts +0 -88
  532. package/dist/template-mbvlysOo.d.ts +0 -6
  533. package/dist/temporal-CVlIV2DZ.js +0 -40
  534. package/dist/user-change-CHFEUro1.js +0 -49
  535. package/dist/webhooks/index.d.ts +0 -285
  536. package/skills/better-supabase-auth/references/permdock.md +0 -100
@@ -1,7 +1,39 @@
1
- import { r as dbErrorOf } from "../errors-DtwXa6b8.js";
2
- import { o as toProblem } from "../problem-BW1KhzSG.js";
3
- import { d as guard, m as settle, n as createServer, r as extendServer, u as defaultExpose } from "../server-Csx2sRjg.js";
1
+ import { r as dbErrorOf } from "../errors-B11Duf73.js";
2
+ import { o as toProblem } from "../problem-BreOl8b8.js";
3
+ import { i as claimsOf } from "../claims-PqzCxaTD.js";
4
+ import { t as tenantOf } from "../tenant-I1TEZ_BX.js";
5
+ import { c as extendServer, n as flushEvents, s as createServer, y as refreshFor } from "../adapter-Bc1o3zyy.js";
6
+ import { n as toSession } from "../view-BeFcRV6G.js";
7
+ import { o as settle, r as guard, t as defaultExpose } from "../respond-BUgsXNgk.js";
8
+ import { t as authorizeCaller } from "../kit-Fm-Fv7q5.js";
9
+ import { bufferRequest, pipeline, seedContext } from "@supabase/middleware";
4
10
  import { COMMON_ERROR_STATUS_MAP, ORPCError, os } from "@orpc/server";
11
+ //#region src/bridges/orpc.ts
12
+ /**
13
+ * Runs an entry array around an oRPC fetch handler. The procedures' initial
14
+ * context is `{ request }` plus every contributed key, and the response
15
+ * passes back through the entries, so refreshed cookies and response-phase
16
+ * headers reach it. A request no procedure matched answers 404.
17
+ *
18
+ * ```ts
19
+ * const os = implement(contract).$context<{ request: Request; db: Db }>()
20
+ * export default { fetch: toOrpc([withBetterSupabase(server)], new RPCHandler(router), { prefix: '/rpc' }) }
21
+ * ```
22
+ */
23
+ function toOrpc(entries, handler, options = {}) {
24
+ const run = pipeline(entries, async (request, ctx) => {
25
+ const { response } = await handler.handle(request, {
26
+ ...options.prefix ? { prefix: options.prefix } : {},
27
+ context: {
28
+ ...ctx,
29
+ request
30
+ }
31
+ });
32
+ return response ?? new Response("Not found", { status: 404 });
33
+ });
34
+ return (request, env) => run(request.body ? bufferRequest(request) : request, seedContext(env));
35
+ }
36
+ //#endregion
5
37
  //#region src/orpc/index.ts
6
38
  const CODES = /* @__PURE__ */ new Map(Object.entries(COMMON_ERROR_STATUS_MAP).map(([code, status]) => [status, code]));
7
39
  /** oRPC code for a `DbError`, from its HTTP status. */
@@ -12,6 +44,7 @@ function orpcCode(error) {
12
44
  function createOrpc(betterSupabase, options = {}) {
13
45
  const server = createServer(betterSupabase, options);
14
46
  const expose = options.exposeErrors ?? defaultExpose();
47
+ const tenantClaim = claimsOf(betterSupabase.meta).tenant;
15
48
  const contexts = /* @__PURE__ */ new WeakMap();
16
49
  const toOrpcError = (error) => {
17
50
  const problem = toProblem(error, { expose });
@@ -20,35 +53,51 @@ function createOrpc(betterSupabase, options = {}) {
20
53
  data: problem
21
54
  });
22
55
  };
56
+ const middleware = (middlewareOptions = {}) => {
57
+ return os.$context().middleware(async ({ context, next }) => {
58
+ const refresh = refreshFor(middlewareOptions.refresh, context.request) ?? false;
59
+ const known = contexts.get(context.request);
60
+ const ctx = known && (known.refresh || !refresh) ? known.ctx : await server.context(context.request, { refresh });
61
+ contexts.set(context.request, {
62
+ ctx,
63
+ refresh: refresh || (known?.refresh ?? false)
64
+ });
65
+ const denied = guard(ctx.auth, middlewareOptions.allow, middlewareOptions.aal, middlewareOptions.scopes);
66
+ if (denied) throw toOrpcError(denied);
67
+ if (middlewareOptions.requireTenant || middlewareOptions.authorize) {
68
+ const caller = await authorizeCaller(ctx.auth, middlewareOptions, void 0, tenantOf(toSession(ctx.auth), tenantClaim));
69
+ if ("kind" in caller) throw toOrpcError(caller);
70
+ }
71
+ try {
72
+ return await next({ context: {
73
+ bs: ctx,
74
+ db: ctx.db,
75
+ auth: ctx.auth
76
+ } });
77
+ } catch (cause) {
78
+ const thrown = dbErrorOf(cause);
79
+ if (thrown) throw toOrpcError(thrown);
80
+ throw cause;
81
+ }
82
+ });
83
+ };
23
84
  return extendServer(server, {
24
85
  toOrpcError,
25
- middleware(middlewareOptions = {}) {
26
- return os.$context().middleware(async ({ context, next }) => {
27
- const ctx = await server.context(context.request, { refresh: middlewareOptions.refresh ?? false });
28
- const denied = guard(ctx.auth, middlewareOptions.allow, middlewareOptions.aal, middlewareOptions.scopes);
29
- if (denied) throw toOrpcError(denied);
30
- contexts.set(context.request, ctx);
31
- try {
32
- return await next({ context: {
33
- bs: ctx,
34
- db: ctx.db,
35
- auth: ctx.auth
36
- } });
37
- } catch (cause) {
38
- const thrown = dbErrorOf(cause);
39
- if (thrown) throw toOrpcError(thrown);
40
- throw cause;
41
- }
42
- });
86
+ middleware,
87
+ authed(authedOptions) {
88
+ return os.$context().use(middleware(authedOptions));
43
89
  },
44
90
  fetchHandler(handler, fetchOptions = {}) {
45
- return async (request) => {
91
+ return async (request, _env, executionContext) => {
46
92
  const { response } = await handler.handle(request, {
47
93
  ...fetchOptions.prefix ? { prefix: fetchOptions.prefix } : {},
48
94
  context: { request }
49
95
  });
50
- const ctx = contexts.get(request);
96
+ const ctx = contexts.get(request)?.ctx;
51
97
  const answer = response ?? new Response("Not found", { status: 404 });
98
+ flushEvents(server, options.waitUntil ?? (executionContext ? (promise) => {
99
+ executionContext.waitUntil(promise);
100
+ } : void 0));
52
101
  return ctx ? ctx.apply(answer) : answer;
53
102
  };
54
103
  },
@@ -60,4 +109,4 @@ function createOrpc(betterSupabase, options = {}) {
60
109
  });
61
110
  }
62
111
  //#endregion
63
- export { createOrpc, orpcCode };
112
+ export { createOrpc, orpcCode, toOrpc };
@@ -1,6 +1,6 @@
1
- import { a as EventHub } from "../events-aIO7vsIk.js";
2
- import { p as Plugin } from "../plugin-o144f322.js";
3
- import { t as SPEC_PINS } from "../spec-pins-CqorWDnO.js";
1
+ import { d as Plugin } from "../plugin-FGY8UhYm.js";
2
+ import { a as EventHub } from "../events-DWDhx77e.js";
3
+ import { t as SPEC_PINS } from "../spec-pins-C89s6DyW.js";
4
4
  import { Attributes, Meter, Tracer } from "@opentelemetry/api";
5
5
  //#region src/otel/index.d.ts
6
6
  export declare const INSTRUMENTATION_NAME = "better-supabase";
@@ -42,12 +42,12 @@ export declare function traceAuth(betterSupabase: {
42
42
  readonly events: EventHub;
43
43
  }, options?: Pick<OtelOptions, "tracer" | "attributes">): () => void;
44
44
  /**
45
- * Records kit events (`support.started`, `webhook.failed`, ...) with the
46
- * `KIT_ATTRIBUTES` names: as an event on the active span, or as a short
47
- * `kit <type>` span when there is none. Failures (`*.failed`, `*.denied`)
45
+ * Records block events (`support.started`, `webhook.failed`, ...) with the
46
+ * `BLOCK_ATTRIBUTES` names: as an event on the active span, or as a short
47
+ * `block <type>` span when there is none. Failures (`*.failed`, `*.denied`)
48
48
  * set an error status. Returns a function that stops listening.
49
49
  */
50
- export declare function traceKitEvents(betterSupabase: {
50
+ export declare function traceBlockEvents(betterSupabase: {
51
51
  readonly events: EventHub;
52
52
  }, options?: Pick<OtelOptions, "tracer" | "attributes">): () => void;
53
53
  /**
@@ -1,7 +1,7 @@
1
- import { r as definePlugin } from "../plugin-DwARMuQp.js";
2
- import { t as SPEC_PINS } from "../spec-pins-C3oc-Tdp.js";
3
- import { r as kitEventAttributes } from "../kit-events-CTFDfSwb.js";
4
- import "../version-DM_Roffb.js";
1
+ import { r as definePlugin } from "../plugin-tfXW1-qO.js";
2
+ import { t as SPEC_PINS } from "../spec-pins--j6mTok4.js";
3
+ import { r as blockEventAttributes } from "../block-events-CrT8r7Fe.js";
4
+ import "../version-Bvv6aLjZ.js";
5
5
  import { SpanKind, SpanStatusCode, context, metrics, propagation, trace } from "@opentelemetry/api";
6
6
  //#region src/otel/index.ts
7
7
  const INSTRUMENTATION_NAME = "better-supabase";
@@ -40,9 +40,9 @@ function systemOf(executor) {
40
40
  * ```
41
41
  */
42
42
  function otel(options = {}) {
43
- const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.5.0");
43
+ const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.6.0");
44
44
  let histogram;
45
- if (options.metrics !== false) histogram = (options.meter ?? metrics.getMeter("better-supabase", "0.5.0")).createHistogram("db.client.operation.duration", {
45
+ if (options.metrics !== false) histogram = (options.meter ?? metrics.getMeter("better-supabase", "0.6.0")).createHistogram("db.client.operation.duration", {
46
46
  unit: "s",
47
47
  description: "Duration of database client operations.",
48
48
  advice: { explicitBucketBoundaries: [
@@ -95,53 +95,83 @@ function otel(options = {}) {
95
95
  }
96
96
  return entry;
97
97
  };
98
+ const failed = (span, error) => {
99
+ span.setAttributes({
100
+ "error.type": error.kind,
101
+ ...error.code && SQLSTATE.test(error.code) ? { "db.response.status_code": error.code } : {}
102
+ });
103
+ span.setStatus({
104
+ code: SpanStatusCode.ERROR,
105
+ message: error.message
106
+ });
107
+ return error.kind;
108
+ };
109
+ /** Runs `run` in a client span; `settle` returns the error type, if any. */
110
+ const traced = (summary, attributes, metric, run, settle) => {
111
+ const started = performance.now();
112
+ return tracer.startActiveSpan(summary, {
113
+ kind: SpanKind.CLIENT,
114
+ attributes
115
+ }, async (span) => {
116
+ const finish = (errorType) => {
117
+ histogram?.record((performance.now() - started) / 1e3, errorType ? {
118
+ ...metric,
119
+ "error.type": errorType
120
+ } : metric);
121
+ span.end();
122
+ };
123
+ try {
124
+ const result = await run();
125
+ finish(settle(span, result));
126
+ return result;
127
+ } catch (cause) {
128
+ const error = cause instanceof Error ? cause : new Error(String(cause));
129
+ span.recordException(error);
130
+ span.setAttribute("error.type", error.name);
131
+ span.setStatus({
132
+ code: SpanStatusCode.ERROR,
133
+ message: error.message
134
+ });
135
+ finish(error.name);
136
+ throw cause;
137
+ }
138
+ });
139
+ };
140
+ const base = {
141
+ ...options.attributes,
142
+ "db.system.name": system,
143
+ "better_supabase.executor": executor.name,
144
+ ...server
145
+ };
146
+ const baseMetric = {
147
+ ...server,
148
+ "db.system.name": system
149
+ };
150
+ const rpc = executor.rpc?.bind(executor);
98
151
  return {
99
152
  ...executor,
100
153
  name: executor.name,
101
154
  execute(op, executeContext) {
102
155
  const { summary, attributes, metric } = describe(op);
103
- const started = performance.now();
104
- return tracer.startActiveSpan(summary, {
105
- kind: SpanKind.CLIENT,
106
- attributes
107
- }, async (span) => {
108
- const finish = (errorType) => {
109
- histogram?.record((performance.now() - started) / 1e3, errorType ? {
110
- ...metric,
111
- "error.type": errorType
112
- } : metric);
113
- span.end();
114
- };
115
- try {
116
- const result = await executor.execute(op, executeContext);
117
- if (result.ok) {
118
- if (span.isRecording()) span.setAttribute("db.response.returned_rows", result.data.rows.length);
119
- finish();
120
- } else {
121
- span.setAttributes({
122
- "error.type": result.error.kind,
123
- ...result.error.code && SQLSTATE.test(result.error.code) ? { "db.response.status_code": result.error.code } : {}
124
- });
125
- span.setStatus({
126
- code: SpanStatusCode.ERROR,
127
- message: result.error.message
128
- });
129
- finish(result.error.kind);
130
- }
131
- return result;
132
- } catch (cause) {
133
- const error = cause instanceof Error ? cause : new Error(String(cause));
134
- span.recordException(error);
135
- span.setAttribute("error.type", error.name);
136
- span.setStatus({
137
- code: SpanStatusCode.ERROR,
138
- message: error.message
139
- });
140
- finish(error.name);
141
- throw cause;
142
- }
156
+ return traced(summary, attributes, metric, () => executor.execute(op, executeContext), (span, result) => {
157
+ if (!result.ok) return failed(span, result.error);
158
+ if (span.isRecording()) span.setAttribute("db.response.returned_rows", result.data.rows.length);
143
159
  });
144
- }
160
+ },
161
+ ...rpc ? { rpc(name, args, rpcContext) {
162
+ const summary = `EXECUTE ${name}`;
163
+ return traced(summary, {
164
+ ...base,
165
+ "db.namespace": database ? `${database}|${rpcContext.schema}` : rpcContext.schema,
166
+ "db.operation.name": "EXECUTE",
167
+ "db.stored_procedure.name": name,
168
+ "db.query.summary": summary
169
+ }, {
170
+ ...baseMetric,
171
+ "db.operation.name": "EXECUTE",
172
+ "db.stored_procedure.name": name
173
+ }, () => rpc(name, args, rpcContext), (span, result) => result.ok ? void 0 : failed(span, result.error));
174
+ } } : {}
145
175
  };
146
176
  }
147
177
  });
@@ -151,7 +181,7 @@ function otel(options = {}) {
151
181
  * Returns a function that stops listening.
152
182
  */
153
183
  function traceAuth(betterSupabase, options = {}) {
154
- const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.5.0");
184
+ const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.6.0");
155
185
  const offAuth = betterSupabase.events.on("auth", (event) => {
156
186
  const span = tracer.startSpan("auth.resolve", {
157
187
  kind: SpanKind.INTERNAL,
@@ -183,17 +213,17 @@ function traceAuth(betterSupabase, options = {}) {
183
213
  };
184
214
  }
185
215
  /**
186
- * Records kit events (`support.started`, `webhook.failed`, ...) with the
187
- * `KIT_ATTRIBUTES` names: as an event on the active span, or as a short
188
- * `kit <type>` span when there is none. Failures (`*.failed`, `*.denied`)
216
+ * Records block events (`support.started`, `webhook.failed`, ...) with the
217
+ * `BLOCK_ATTRIBUTES` names: as an event on the active span, or as a short
218
+ * `block <type>` span when there is none. Failures (`*.failed`, `*.denied`)
189
219
  * set an error status. Returns a function that stops listening.
190
220
  */
191
- function traceKitEvents(betterSupabase, options = {}) {
192
- const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.5.0");
193
- return betterSupabase.events.on("kit", (event) => {
221
+ function traceBlockEvents(betterSupabase, options = {}) {
222
+ const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.6.0");
223
+ return betterSupabase.events.on("block", (event) => {
194
224
  const attributes = {
195
225
  ...options.attributes,
196
- ...kitEventAttributes(event)
226
+ ...blockEventAttributes(event)
197
227
  };
198
228
  const failed = event.type.endsWith(".failed") || event.type.endsWith(".denied");
199
229
  const active = trace.getActiveSpan();
@@ -201,7 +231,7 @@ function traceKitEvents(betterSupabase, options = {}) {
201
231
  active.addEvent(event.type, attributes);
202
232
  return;
203
233
  }
204
- const span = tracer.startSpan(`kit ${event.type}`, {
234
+ const span = tracer.startSpan(`block ${event.type}`, {
205
235
  kind: SpanKind.INTERNAL,
206
236
  attributes
207
237
  });
@@ -227,4 +257,4 @@ function tracedFetch(base = fetch) {
227
257
  };
228
258
  }
229
259
  //#endregion
230
- export { INSTRUMENTATION_NAME, SEMCONV_VERSION, otel, traceAuth, traceKitEvents, tracedFetch };
260
+ export { INSTRUMENTATION_NAME, SEMCONV_VERSION, otel, traceAuth, traceBlockEvents, tracedFetch };
@@ -0,0 +1,161 @@
1
+ /// <reference lib="esnext.temporal" />
2
+ import { b as DbError, t as AsyncResult } from "./result-D7y2fT87.js";
3
+ import { t as SqlClient } from "./executor-DbvExCFC.js";
4
+ import { t as BlockTransport } from "./block-transport-DvaoPuZ9.js";
5
+ import { i as CursorPageOptions, r as BlockTemporalOptions } from "./block-helpers-CKtbFcRv.js";
6
+ import { t as BlockProblemOptions } from "./problem-DD8LZFjc.js";
7
+ import { r as EventSink, t as CloudEvent } from "./cloud-event-C1JCc1bH.js";
8
+ //#region src/blocks/outbox/outbox.d.ts
9
+ /** One row of the outbox, as `outbox_claim` and `outbox_history` return it. */
10
+ interface OutboxEvent {
11
+ /** The cursor value: increases with every event. */
12
+ readonly position: number;
13
+ readonly id: string;
14
+ readonly type: string;
15
+ readonly payload: unknown;
16
+ /** The module or function that wrote it, e.g. `better-supabase/blocks/organizations`. */
17
+ readonly source: string | null;
18
+ readonly subject: string | null;
19
+ readonly tenant: string | null;
20
+ readonly key: string | null;
21
+ readonly actorId: string | null;
22
+ readonly createdAt: Temporal.Instant;
23
+ }
24
+ interface EmitOptions {
25
+ readonly subject?: string;
26
+ readonly tenant?: string;
27
+ /** With a key, emitting again (per tenant) returns the first event. */
28
+ readonly key?: string;
29
+ readonly source?: string;
30
+ }
31
+ interface OutboxOptions extends BlockTemporalOptions {
32
+ /** The schema of the `outbox` module. Defaults to `better_supabase`. */
33
+ readonly schema?: string;
34
+ /** CloudEvents `source` of the relayed events, e.g. `https://crm.example.com`. */
35
+ readonly source: string;
36
+ /** Prepended to each type with a dot when relaying, e.g. `com.example`. Defaults to `dev.better-supabase`. */
37
+ readonly typePrefix?: string;
38
+ }
39
+ interface RegisterOptions {
40
+ /** Type patterns such as `organization.*` or `invoice.paid`. Defaults to every event. */
41
+ readonly types?: readonly string[];
42
+ /** Start at the first kept event instead of after the latest one. */
43
+ readonly fromStart?: boolean;
44
+ }
45
+ interface RelayOptions {
46
+ /** Events per claim and per `sink.send`. Defaults to 100. */
47
+ readonly batch?: number;
48
+ /** How long a claim holds the consumer. Defaults to `1 minute`. */
49
+ readonly lease?: string;
50
+ /** Stops claiming after this many milliseconds. */
51
+ readonly budgetMs?: number;
52
+ /** Identifies this worker in the lease. Defaults to a random id. */
53
+ readonly owner?: string;
54
+ /**
55
+ * Failures in a row before the event that keeps failing goes to the dead
56
+ * letters and the cursor moves past it. Defaults to 10.
57
+ */
58
+ readonly maxAttempts?: number;
59
+ /** The longest wait between failed attempts. Defaults to `10 minutes`. */
60
+ readonly maxBackoff?: string;
61
+ }
62
+ interface RelayResult {
63
+ readonly delivered: number;
64
+ /**
65
+ * Set when the sink threw: the consumer backs off and retries the batch
66
+ * one event at a time.
67
+ */
68
+ readonly error?: DbError;
69
+ /** 1 when this run moved the failing event to the dead letters. */
70
+ readonly deadLettered?: number;
71
+ }
72
+ /** An event a consumer skipped after `maxAttempts` failures. */
73
+ interface OutboxDeadLetter {
74
+ readonly consumer: string;
75
+ readonly event: OutboxEvent;
76
+ readonly attempts: number;
77
+ readonly error: string | null;
78
+ readonly deadAt: Temporal.Instant;
79
+ }
80
+ interface OutboxPurgeOptions {
81
+ /**
82
+ * A consumer that hasn't claimed for this long (a Postgres interval such
83
+ * as `30 days`) no longer holds events back. Defaults to waiting for
84
+ * every consumer.
85
+ */
86
+ readonly ignoreIdle?: string;
87
+ }
88
+ /**
89
+ * Takes a batch of outbox rows, with the actor and tenant that CloudEvents
90
+ * leave out. Throwing counts a failed attempt: the consumer backs off, then
91
+ * retries one event at a time until the event that fails goes to the dead
92
+ * letters.
93
+ */
94
+ type OutboxHandler = (events: readonly OutboxEvent[]) => unknown;
95
+ interface OutboxRouteOptions extends Omit<RelayOptions, "owner">, BlockProblemOptions {
96
+ /** The bearer secret, such as `process.env.CRON_SECRET`. */
97
+ readonly secret: string | undefined;
98
+ /** Consumer name to the sink its events go to, or a handler that takes the rows. */
99
+ readonly consumers: Readonly<Record<string, EventSink | OutboxHandler>>;
100
+ readonly onError?: (error: DbError, consumer: string) => void;
101
+ }
102
+ interface OutboxRouteResult {
103
+ readonly consumers: Readonly<Record<string, RelayResult>>;
104
+ readonly budgetExhausted: boolean;
105
+ }
106
+ interface HistoryFilter extends CursorPageOptions<number> {
107
+ readonly subject?: string;
108
+ readonly type?: string;
109
+ /** Only events after this position. */
110
+ readonly cursor?: number;
111
+ readonly limit?: number;
112
+ }
113
+ interface Outbox {
114
+ /** Writes an event in the current transaction and returns its id. */
115
+ emit(type: string, payload?: unknown, options?: EmitOptions): AsyncResult<string>;
116
+ /** Creates the consumer, or changes its types. Returns its cursor position. */
117
+ register(consumer: string, options?: RegisterOptions): AsyncResult<number>;
118
+ /** Removes the consumer, so purges stop waiting for it. */
119
+ unregister(consumer: string): AsyncResult<boolean>;
120
+ /**
121
+ * Claims the consumer's next events, sends them to `sink` as CloudEvents and
122
+ * moves the cursor, until none are left or the budget runs out. A sink that
123
+ * throws leaves the batch for a later run with backoff, so delivery is at
124
+ * least once; an event that fails `maxAttempts` times goes to the dead
125
+ * letters.
126
+ */
127
+ relay(consumer: string, sink: EventSink, options?: RelayOptions): Promise<RelayResult>;
128
+ /**
129
+ * Like `relay`, but hands `handler` the outbox rows themselves, with
130
+ * `actorId`, `tenant` and `key`, for consumers inside the app (search
131
+ * indexing, notifications) that need the actor.
132
+ */
133
+ consume(consumer: string, handler: OutboxHandler, options?: RelayOptions): Promise<RelayResult>;
134
+ /** A `GET`/`POST` handler for a cron that relays every consumer at once, within one budget. */
135
+ relayRoute(options: OutboxRouteOptions): (request: Request) => Promise<Response>;
136
+ history(filter?: HistoryFilter): AsyncResult<readonly OutboxEvent[]>;
137
+ /** The consumer's dead letters, newest first (default 100, at most 1000). */
138
+ deadLetters(consumer: string, limit?: number): AsyncResult<readonly OutboxDeadLetter[]>;
139
+ /**
140
+ * Deletes up to `batch` events (default 10,000) older than `olderThan` that
141
+ * every consumer has passed, and dead letters older than `olderThan`. Call
142
+ * it again while it returns `batch`.
143
+ */
144
+ purge(olderThan?: string, batch?: number, options?: OutboxPurgeOptions): AsyncResult<number>;
145
+ }
146
+ /**
147
+ * The CloudEvent for an outbox row: the row id as `id` (stable, so receivers
148
+ * can deduplicate), the payload as `data`, the tenant as `partitionkey` and
149
+ * the writing module as `producer`. The actor stays out of the context
150
+ * attributes, which must not carry personal data.
151
+ */
152
+ declare function outboxCloudEvent(event: OutboxEvent, options: Pick<OutboxOptions, "source" | "typePrefix">): CloudEvent;
153
+ /**
154
+ * The outbox over a server connection (`SqlClient`), or over a
155
+ * `BlockTransport` such as `rpcTransport(serviceClient, { schema: "api" })`
156
+ * for apps that reach the database only through the Data API. Over a
157
+ * transport, `emit` writes in its own transaction.
158
+ */
159
+ declare function createOutbox(source: SqlClient | BlockTransport, options: OutboxOptions): Outbox;
160
+ //#endregion
161
+ export { OutboxEvent as a, OutboxPurgeOptions as c, RegisterOptions as d, RelayOptions as f, outboxCloudEvent as h, OutboxDeadLetter as i, OutboxRouteOptions as l, createOutbox as m, HistoryFilter as n, OutboxHandler as o, RelayResult as p, Outbox as r, OutboxOptions as s, EmitOptions as t, OutboxRouteResult as u };
@@ -1,6 +1,7 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { F as TableMeta, j as SchemaMeta, r as AnyModels } from "./types-Dnf_wRDz.js";
3
- import { H as MutationOp, S as ErrorMapper, U as Operation, r as Executor } from "./executor-BunPOO-k.js";
2
+ import { w as ErrorMapper } from "./result-D7y2fT87.js";
3
+ import { I as TableFlags, P as SchemaMeta, R as TableMeta, a as AnyModels } from "./types-6BdhkmZe.js";
4
+ import { _ as MutationOp, g as MutationKind, h as MutationIntent, r as Executor, v as Operation } from "./executor-DvsBbNBS.js";
4
5
  //#region src/core/plugin.d.ts
5
6
  /** Who is making the request. */
6
7
  interface Actor {
@@ -29,10 +30,9 @@ interface HookArgs {
29
30
  readonly context: RequestContext;
30
31
  readonly options: CallOptions;
31
32
  readonly now: () => Temporal.Instant;
33
+ /** The caller's `signal`, when it passed one. Hooks that do I/O should honor it. */
34
+ readonly signal?: AbortSignal;
32
35
  }
33
- type MutationKind = "insert" | "upsert" | "update" | "delete";
34
- /** What the caller asked for: `softDelete` is a `delete` that a plugin turned into an update. */
35
- type MutationIntent = MutationKind | "softDelete";
36
36
  interface MutationEvent {
37
37
  readonly table: TableMeta;
38
38
  /** The statement that ran. */
@@ -47,7 +47,7 @@ interface MutationEvent {
47
47
  * returned (soft deletes, `returning: false`).
48
48
  */
49
49
  readonly keys?: readonly Readonly<Record<string, unknown>>[];
50
- /** The tenant of the write: `context.tenant`, or the one `tenant()` resolved. */
50
+ /** The tenant of the write: `context.tenant`, which `tenant()` fills from the claims. */
51
51
  readonly tenant?: string;
52
52
  readonly context: RequestContext;
53
53
  }
@@ -99,10 +99,30 @@ interface Plugin<Name extends string = string, Ext extends RepositoryExtension =
99
99
  readonly apiVersion: 1;
100
100
  readonly name: Name;
101
101
  /**
102
- * Hook order: `pre` plugins run first, `post` plugins last, the rest in
103
- * `use()` order. Validation is `post` so it sees columns other plugins fill.
102
+ * Hook order: `first`, then `pre`, then unmarked plugins, then `post`;
103
+ * plugins at the same level keep `use()` order. `first` is for plugins
104
+ * that check the query as the caller wrote it, before a `pre` plugin
105
+ * rewrites it (`rules()`). Validation is `post` so it sees columns other
106
+ * plugins fill.
104
107
  */
105
- readonly enforce?: "pre" | "post";
108
+ readonly enforce?: "first" | "pre" | "post";
109
+ /**
110
+ * The table flags whose tables this plugin's `transformQuery` filters
111
+ * (`tenant()` declares `['tenant']`). Read sets warn when they read such a
112
+ * table, because their generated SQL function runs without the plugin.
113
+ * `[]` means the plugin only inspects queries. A plugin with
114
+ * `transformQuery` that leaves this out is assumed to filter every table.
115
+ */
116
+ readonly scopes?: readonly (keyof TableFlags)[];
117
+ /**
118
+ * `context`: derive values from the connection's context once per
119
+ * `connect()` and `$with()`, so `db.$context` carries them (`tenant()`
120
+ * adds the tenant it resolved). Runs in hook order on the context the
121
+ * caller passed. A throw is logged and leaves the context unchanged.
122
+ */
123
+ readonly context?: (context: RequestContext, args: {
124
+ readonly schema: SchemaMeta;
125
+ }) => RequestContext;
106
126
  /** `ir`: rewrite an operation before it runs (filters, defaults). */
107
127
  readonly transformQuery?: (op: Operation, args: HookArgs) => Operation;
108
128
  /** `mutation`: rewrite a mutation or reject it by throwing a `DbException`. */
@@ -128,4 +148,4 @@ declare function definePlugin<const Name extends string, Ext extends RepositoryE
128
148
  readonly apiVersion?: 1;
129
149
  }): Plugin<Name, Ext>;
130
150
  //#endregion
131
- export { WithExtension as _, ExtensionOf as a, MutationEvent as c, NoExtension as d, PLUGIN_API_VERSION as f, RequestContext as g, RepositoryExtension as h, CallOptions as i, MutationIntent as l, RepositoryApi as m, AnyPlugin as n, HasFlag as o, Plugin as p, ApplyExtension as r, HookArgs as s, Actor as t, MutationKind as u, definePlugin as v };
151
+ export { ExtensionOf as a, MutationEvent as c, Plugin as d, RepositoryApi as f, definePlugin as g, WithExtension as h, CallOptions as i, NoExtension as l, RequestContext as m, AnyPlugin as n, HasFlag as o, RepositoryExtension as p, ApplyExtension as r, HookArgs as s, Actor as t, PLUGIN_API_VERSION as u };
@@ -0,0 +1,45 @@
1
+ //#region src/core/plugin.ts
2
+ const PLUGIN_API_VERSION = 1;
3
+ const RANK = {
4
+ first: 0,
5
+ pre: 1,
6
+ normal: 2,
7
+ post: 3
8
+ };
9
+ function rankOf(plugin) {
10
+ return RANK[plugin.enforce ?? "normal"];
11
+ }
12
+ /**
13
+ * Plugins in hook order: `first`, `pre`, unmarked, then `post`, each level
14
+ * in `use()` order.
15
+ */
16
+ function orderPlugins(plugins) {
17
+ return plugins.map((plugin, index) => ({
18
+ plugin,
19
+ index
20
+ })).sort((a, b) => rankOf(a.plugin) - rankOf(b.plugin) || a.index - b.index).map(({ plugin }) => plugin);
21
+ }
22
+ /** Identity helper that fixes `apiVersion` and infers the plugin types. */
23
+ function definePlugin(plugin) {
24
+ return {
25
+ ...plugin,
26
+ apiVersion: 1
27
+ };
28
+ }
29
+ /**
30
+ * A symbol key, so JSON, claims and spread request data can't set it, while
31
+ * `$with` copies it to the derived context.
32
+ */
33
+ const ALL_TENANTS = Symbol("better-supabase.allTenants");
34
+ /** `context`, marked so `tenant()` and tenant buckets skip their tenant scope. */
35
+ function allTenantsContext(context) {
36
+ return {
37
+ ...context,
38
+ [ALL_TENANTS]: true
39
+ };
40
+ }
41
+ function spansAllTenants(context) {
42
+ return Object.hasOwn(context, ALL_TENANTS);
43
+ }
44
+ //#endregion
45
+ export { spansAllTenants as a, orderPlugins as i, allTenantsContext as n, definePlugin as r, PLUGIN_API_VERSION as t };
@@ -1,4 +1,4 @@
1
- import { g as RequestContext, p as Plugin } from "../../plugin-o144f322.js";
1
+ import { d as Plugin, m as RequestContext } from "../../plugin-FGY8UhYm.js";
2
2
  //#region src/plugins/actor/index.d.ts
3
3
  export interface ActorOptions {
4
4
  /** Custom actor id resolution. Defaults to `context.actor.id` for users and services. */
@@ -9,7 +9,7 @@ export interface ActorOptions {
9
9
  * `updatedBy` on insert and update. Soft deletes are updates, so they record
10
10
  * who deleted the row. `impersonatedBy` gets `context.actor.impersonator` on
11
11
  * an impersonated insert or update and is left alone otherwise, so a user's
12
- * own update keeps the stamp, like the SQL kit's `track_actor`. Without an
12
+ * own update keeps the stamp, like the SQL modules' `track_actor`. Without an
13
13
  * actor (anonymous requests) nothing is set.
14
14
  */
15
15
  export declare function actor(options?: ActorOptions): Plugin<"actor">;
@@ -1,5 +1,5 @@
1
- import { r as definePlugin } from "../../plugin-DwARMuQp.js";
2
- import { a as insertsOnly, i as guardManaged, t as dbName, u as withDefault } from "../../shared-D1dRUrAg.js";
1
+ import { r as definePlugin } from "../../plugin-tfXW1-qO.js";
2
+ import { a as insertsOnly, i as guardManaged, t as dbName, u as withDefault } from "../../shared-CxWmcyqB.js";
3
3
  //#region src/plugins/actor/index.ts
4
4
  function defaultActor(context) {
5
5
  const actor = context.actor;
@@ -10,7 +10,7 @@ function defaultActor(context) {
10
10
  * `updatedBy` on insert and update. Soft deletes are updates, so they record
11
11
  * who deleted the row. `impersonatedBy` gets `context.actor.impersonator` on
12
12
  * an impersonated insert or update and is left alone otherwise, so a user's
13
- * own update keeps the stamp, like the SQL kit's `track_actor`. Without an
13
+ * own update keeps the stamp, like the SQL modules' `track_actor`. Without an
14
14
  * actor (anonymous requests) nothing is set.
15
15
  */
16
16
  function actor(options = {}) {