better-supabase 0.5.1 → 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 +187 -46
  2. package/dist/access-sql-B0dF-SoF.js +181 -0
  3. package/dist/{actor-DaJjqD5R.d.ts → actor-CQTlc1Hh.d.ts} +1 -1
  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-C_A-KEAz.js → doctor-B4JOm_ox.js} +991 -317
  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-DMa6M7hV.js → init-BIIwclPg.js} +242 -27
  185. package/dist/cli/{introspect-BKlaIu_M.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-Bo_NLT5n.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-BCtlgDQx.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-Bv7gvfzC.d.ts → config-D44Y7PAv.d.ts} +406 -214
  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-CFPX0Qft.d.ts → ended-jLfvw8h-.d.ts} +20 -2
  231. package/dist/{entitlements-BiJZ4t49.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-BgSHAYLf.js → impersonation-DcqaTBHx.js} +21 -6
  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-Daak8ukG.d.ts +54 -0
  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-Bn6HNKUe.js → resolve-D_IcnvFd.js} +248 -240
  385. package/dist/{impersonation-BmePsuxz.d.ts → resolve-KW8nCeL6.d.ts} +29 -69
  386. package/dist/{resource-mqfJW4YF.js → resource-BsvzCMlX.js} +4 -4
  387. package/dist/{resource-DNRFP7KR.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 -22
  396. package/dist/server/index.js +46 -14
  397. package/dist/{respond-BR1fJWOB.d.ts → server-CeVeeXwz.d.ts} +224 -85
  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 +313 -212
  413. package/dist/sql/index.js +34872 -6579
  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-wHnK6zp-.js → support-BivNqSpK.js} +32 -11
  430. package/dist/{support-view-B8SlToQX.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 +315 -41
  449. package/dist/testing/index.js +1046 -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-DOYTYwHP.js → version-Bvv6aLjZ.js} +1 -1
  465. package/dist/view-BeFcRV6G.js +99 -0
  466. package/dist/{view-CbgObAeb.d.ts → view-DbxLNu8L.d.ts} +22 -5
  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 +461 -20
  485. package/schemas/ai-message-v1.json +258 -0
  486. package/schemas/config-v1.json +1074 -140
  487. package/schemas/doctor-report-v1.json +20 -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 +47 -11
  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-CIdSQZad.js +0 -2
  504. package/dist/cli/gen-CjElD1Vw.js +0 -2241
  505. package/dist/cli/read-sets-VQcPgxU9.js +0 -436
  506. package/dist/cli/sql-CVx-1O8G.js +0 -373
  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/index-CWMDdEr4.d.ts +0 -50
  512. package/dist/index-DOESKG27.d.ts +0 -100
  513. package/dist/index-DmXSxbLi.d.ts +0 -62
  514. package/dist/index-Dp2VDwog.d.ts +0 -161
  515. package/dist/jobs/index.d.ts +0 -226
  516. package/dist/jobs/index.js +0 -1007
  517. package/dist/json-schema-m1fiwKgN.js +0 -208
  518. package/dist/kit-events-CTFDfSwb.js +0 -60
  519. package/dist/kit-transport-B82k1djG.d.ts +0 -33
  520. package/dist/kits-CGLLrNPd.js +0 -157
  521. package/dist/mfa-Cu96oJdw.d.ts +0 -30
  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-B1mZ7CgQ.js +0 -660
  530. package/dist/stats-Bqob3WqT.js +0 -592
  531. package/dist/support-CEPwlw2G.d.ts +0 -89
  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 -122
@@ -0,0 +1,97 @@
1
+ import { n as decodeJwtPayload } from "./base64-D2gsioCY.js";
2
+ import { i as userContext } from "./impersonation-DcqaTBHx.js";
3
+ import { n as identityKey } from "./user-change-XzvgafU4.js";
4
+ import { n as createQueries } from "./query-BQ-NaZon.js";
5
+ //#region src/client/bind.ts
6
+ const LOADING = {
7
+ status: "loading",
8
+ user: null,
9
+ claims: null
10
+ };
11
+ const SIGNED_OUT = {
12
+ status: "signed-out",
13
+ user: null,
14
+ claims: null
15
+ };
16
+ /**
17
+ * `session.user`, or `undefined` when auth-js put its placeholder there: with
18
+ * `tokens-only` cookies and no user in `userStorage`, reading `id` throws.
19
+ */
20
+ function storedUser(session) {
21
+ try {
22
+ return typeof session.user.id === "string" ? session.user : void 0;
23
+ } catch {
24
+ return;
25
+ }
26
+ }
27
+ const text = (value) => typeof value === "string" && value !== "" ? value : void 0;
28
+ function snapshotOf(session) {
29
+ if (!session) return SIGNED_OUT;
30
+ const claims = decodeJwtPayload(session.access_token) ?? {};
31
+ const stored = storedUser(session);
32
+ const id = text(claims["sub"]) ?? stored?.id;
33
+ if (id === void 0) return SIGNED_OUT;
34
+ const email = text(claims["email"]) ?? text(stored?.email);
35
+ const role = text(claims["role"]) ?? text(stored?.role);
36
+ return {
37
+ status: "signed-in",
38
+ user: {
39
+ id,
40
+ ...email ? { email } : {},
41
+ ...role ? { role } : {}
42
+ },
43
+ claims
44
+ };
45
+ }
46
+ function contextOf(snapshot) {
47
+ if (snapshot.status !== "signed-in") return {
48
+ actor: {
49
+ id: "anon",
50
+ kind: "anon",
51
+ role: "anon"
52
+ },
53
+ claims: { role: "anon" }
54
+ };
55
+ return userContext(snapshot.user, snapshot.claims);
56
+ }
57
+ /**
58
+ * Repositories that follow `supabase`'s session, TanStack Query options and
59
+ * an auth store, for a supabase-js client you created yourself.
60
+ */
61
+ function bindClient(betterSupabase, supabase, options = {}) {
62
+ let snapshot = LOADING;
63
+ let db;
64
+ const listeners = /* @__PURE__ */ new Set();
65
+ const { data } = supabase.auth.onAuthStateChange((_event, session) => {
66
+ const next = snapshotOf(session);
67
+ if (next.status === snapshot.status && identityKey(next) === identityKey(snapshot)) return;
68
+ snapshot = next;
69
+ db = void 0;
70
+ for (const listener of listeners) listener();
71
+ });
72
+ const client = {
73
+ betterSupabase,
74
+ supabase,
75
+ get db() {
76
+ db ??= betterSupabase.connect(supabase, contextOf(snapshot));
77
+ return db;
78
+ },
79
+ queries: createQueries(betterSupabase, () => client.db, options.staleTime === void 0 ? {} : { staleTime: options.staleTime }),
80
+ dispose: () => {
81
+ data.subscription.unsubscribe();
82
+ listeners.clear();
83
+ },
84
+ auth: {
85
+ current: () => snapshot,
86
+ subscribe: (listener) => {
87
+ listeners.add(listener);
88
+ return () => {
89
+ listeners.delete(listener);
90
+ };
91
+ }
92
+ }
93
+ };
94
+ return client;
95
+ }
96
+ //#endregion
97
+ export { bindClient as t };
@@ -0,0 +1,76 @@
1
+ import { t as cloneValue } from "./clone-BfgmLU90.js";
2
+ import { s as nowInstant } from "./temporal-BJGitm-h.js";
3
+ //#region src/core/block-events.ts
4
+ /**
5
+ * Event types that changed name in 0.6, old to new, for sinks and consumers
6
+ * that still receive the old ones (`BLOCK_EVENT_RENAMES[type] ?? type`).
7
+ * `better-supabase codemod 0.6` rewrites the string literals.
8
+ */
9
+ const BLOCK_EVENT_RENAMES = {
10
+ "org.created": "organization.created",
11
+ "org.updated": "organization.updated",
12
+ "org.deleted": "organization.deleted",
13
+ "org.member_added": "organization.member_added",
14
+ "org.member_removed": "organization.member_removed",
15
+ "org.member_left": "organization.member_left",
16
+ "org.role_changed": "organization.role_changed",
17
+ "org.ownership_transferred": "organization.ownership_transferred",
18
+ "org.switched": "organization.switched"
19
+ };
20
+ /**
21
+ * Fixed OpenTelemetry attribute names for block work, so dashboards and
22
+ * queries can rely on them.
23
+ */
24
+ const BLOCK_ATTRIBUTES = {
25
+ event: "better_supabase.block.event",
26
+ tenant: "better_supabase.tenant",
27
+ actor: "better_supabase.actor.id",
28
+ supportSessionId: "better_supabase.support.session_id",
29
+ organizationId: "better_supabase.organization.id",
30
+ invitationId: "better_supabase.invitation.id",
31
+ notificationType: "better_supabase.notification.type",
32
+ webhookEndpointId: "better_supabase.webhook.endpoint_id"
33
+ };
34
+ /** The `BLOCK_ATTRIBUTES` an event carries. */
35
+ function blockEventAttributes(event) {
36
+ const attributes = { [BLOCK_ATTRIBUTES.event]: event.type };
37
+ if (event.tenant) attributes[BLOCK_ATTRIBUTES.tenant] = event.tenant;
38
+ if (event.actorId) attributes[BLOCK_ATTRIBUTES.actor] = event.actorId;
39
+ const data = Object.fromEntries(Object.entries(event.data));
40
+ const add = (key, value) => {
41
+ if (typeof value === "string" && value.length > 0) attributes[key] = value;
42
+ };
43
+ add(BLOCK_ATTRIBUTES.supportSessionId, data["sessionId"]);
44
+ add(BLOCK_ATTRIBUTES.organizationId, data["organizationId"]);
45
+ add(BLOCK_ATTRIBUTES.invitationId, data["invitationId"]);
46
+ add(BLOCK_ATTRIBUTES.notificationType, data["type"]);
47
+ add(BLOCK_ATTRIBUTES.webhookEndpointId, data["endpointId"]);
48
+ return attributes;
49
+ }
50
+ /**
51
+ * Emits a block event on `events` with a copy of `data`. Does nothing without
52
+ * a `block` handler, so blocks call it unconditionally.
53
+ */
54
+ function emitBlockEvent(events, type, data, meta = {}) {
55
+ if (!events.has("block")) return;
56
+ const event = {
57
+ ...meta,
58
+ type,
59
+ data: cloneValue(data),
60
+ time: nowInstant()
61
+ };
62
+ events.emit("block", event);
63
+ }
64
+ const matches = (pattern, type) => pattern.endsWith(".*") ? type.startsWith(pattern.slice(0, -1)) : pattern === type;
65
+ /**
66
+ * Listens to the block events that match `pattern` (`'support.started'` or
67
+ * `'support.*'`). Returns a function that stops listening.
68
+ */
69
+ function onBlockEvent(betterSupabase, pattern, handler) {
70
+ return betterSupabase.events.on("block", (event) => {
71
+ if (!matches(pattern, event.type)) return;
72
+ handler(event);
73
+ });
74
+ }
75
+ //#endregion
76
+ export { onBlockEvent as a, emitBlockEvent as i, BLOCK_EVENT_RENAMES as n, blockEventAttributes as r, BLOCK_ATTRIBUTES as t };
@@ -0,0 +1,49 @@
1
+ import { n as dbError } from "./errors-B11Duf73.js";
2
+ import { a as ok, r as err } from "./result-DzUbqgdW.js";
3
+ import { t as toIssues } from "./standard-BK0cqJ7y.js";
4
+ //#region src/core/block-fields.ts
5
+ const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
6
+ async function run(schema, value) {
7
+ return schema["~standard"].validate(value);
8
+ }
9
+ const invalid = (label, issues) => err(dbError("validation", `Invalid ${label}`, { issues }));
10
+ /**
11
+ * The `fields` helper block creators use. Without a schema, reads and
12
+ * writes pass through unchanged.
13
+ */
14
+ function blockFields(schema, label) {
15
+ return {
16
+ async read(row) {
17
+ if (schema === void 0) return ok(row);
18
+ const outcome = await run(schema, row);
19
+ if (outcome.issues) return invalid(label, toIssues(outcome.issues));
20
+ if (!isObject(outcome.value)) return invalid(label, [{ message: "fields must parse to an object" }]);
21
+ return ok({
22
+ ...row,
23
+ ...outcome.value
24
+ });
25
+ },
26
+ async write(attrs) {
27
+ if (schema === void 0) return ok(attrs);
28
+ const outcome = await run(schema, attrs);
29
+ if (!outcome.issues) {
30
+ if (!isObject(outcome.value)) return ok(attrs);
31
+ const parsed = outcome.value;
32
+ const picked = Object.fromEntries(Object.keys(attrs).filter((key) => key in parsed).map((key) => [key, parsed[key]]));
33
+ return ok({
34
+ ...attrs,
35
+ ...picked
36
+ });
37
+ }
38
+ const given = new Set(Object.keys(attrs));
39
+ const relevant = toIssues(outcome.issues).filter((issue) => {
40
+ const [first] = issue.path ?? [];
41
+ return first === void 0 || given.has(String(first));
42
+ });
43
+ if (relevant.length === 0) return ok(attrs);
44
+ return invalid(label, relevant);
45
+ }
46
+ };
47
+ }
48
+ //#endregion
49
+ export { blockFields as t };
@@ -0,0 +1,31 @@
1
+ import { f as Result } from "./result-D7y2fT87.js";
2
+ import { t as StandardSchemaV1 } from "./standard-CYsm7xpT.js";
3
+ //#region src/core/block-fields.d.ts
4
+ /** The fields a `fields` schema adds, or none when the block has no schema. */
5
+ type FieldsOf<S> = S extends StandardSchemaV1<unknown, infer O> ? O extends object ? O : never : Record<never, never>;
6
+ /**
7
+ * Parses and validates the extra fields an app adds to a block's table,
8
+ * with any Standard Schema (zod, valibot, arktype) for an object.
9
+ */
10
+ interface BlockFields<T extends object> {
11
+ /**
12
+ * Parses a row the block read: the schema's output replaces the fields it
13
+ * covers, and the other fields stay as read. A row the schema rejects is
14
+ * a `validation` error.
15
+ */
16
+ read<R extends object>(row: R): Promise<Result<R & T>>;
17
+ /**
18
+ * Validates the fields a write sets. Issues about fields the write leaves
19
+ * out are ignored, so partial updates pass; the database applies its
20
+ * defaults and `not null` checks. A rejected write is a `validation`
21
+ * error, and nothing is sent to the database.
22
+ */
23
+ write<A extends object>(attrs: A): Promise<Result<A>>;
24
+ }
25
+ /**
26
+ * The `fields` helper block creators use. Without a schema, reads and
27
+ * writes pass through unchanged.
28
+ */
29
+ declare function blockFields<T extends object = Record<never, never>>(schema: StandardSchemaV1 | undefined, label: string): BlockFields<T>;
30
+ //#endregion
31
+ export { FieldsOf as n, blockFields as r, BlockFields as t };
@@ -0,0 +1,37 @@
1
+ import { t as AsyncResult, w as ErrorMapper } from "./result-D7y2fT87.js";
2
+ import { t as BlockTransport } from "./block-transport-DvaoPuZ9.js";
3
+ //#region src/core/block-helpers.d.ts
4
+ /** The `temporal` option every block creator takes. */
5
+ interface BlockTemporalOptions {
6
+ /**
7
+ * The Temporal namespace for runtimes without a global one, such as
8
+ * `import { Temporal } from "temporal-polyfill"`. Blocks use it instead of
9
+ * `globalThis.Temporal`, which stays untouched; like
10
+ * `defineSupabase(schema, { temporal })`, it applies to the whole process.
11
+ */
12
+ readonly temporal?: typeof Temporal;
13
+ }
14
+ /** The options every block creator shares. */
15
+ interface BlockOptions extends BlockTemporalOptions {
16
+ /** `sqlTransport(ctx.postgres)` for members, or `rpcTransport` over an API schema. */
17
+ readonly transport: BlockTransport;
18
+ /** The transport for service-only calls (jobs, purges). Defaults to `transport`. */
19
+ readonly service?: BlockTransport;
20
+ /** The module's schema, or its API schema. Default `better_supabase`. */
21
+ readonly schema?: string;
22
+ /** Error mappers that run before the built-in ones. */
23
+ readonly mappers?: readonly ErrorMapper[];
24
+ }
25
+ /** Calls one block function and maps a rejection to a `DbError`. */
26
+ type BlockCall = <T>(fn: string, args: Readonly<Record<string, unknown>>, then: (value: unknown) => T | Promise<T>) => AsyncResult<T>;
27
+ /**
28
+ * One page of a list. `cursor` is the previous page's `next` cursor or last
29
+ * item, in the shape each list documents.
30
+ */
31
+ interface CursorPageOptions<Cursor> {
32
+ /** The most items to return. Each list documents its default and maximum. */
33
+ readonly limit?: number;
34
+ readonly cursor?: Cursor;
35
+ }
36
+ //#endregion
37
+ export { CursorPageOptions as i, BlockOptions as n, BlockTemporalOptions as r, BlockCall as t };
@@ -0,0 +1,190 @@
1
+ import { c as mapDbError, n as dbError } from "./errors-B11Duf73.js";
2
+ import { l as provideTemporal } from "./temporal-BJGitm-h.js";
3
+ import { t as temporal } from "./temporal-required-BVvW7SYJ.js";
4
+ import { a as ok, r as err, s as toDbError, t as AsyncResult } from "./result-DzUbqgdW.js";
5
+ import { t as fromPgError } from "./executor-De1Of3m3.js";
6
+ import { t as rawError } from "./block-transport-BLr-ZgLc.js";
7
+ //#region src/core/block-helpers.ts
8
+ /** Provides `options.temporal`, when set, for the block's time values. */
9
+ function applyTemporal(options) {
10
+ if (options?.temporal !== void 0) provideTemporal(options.temporal);
11
+ }
12
+ /** The block schema when the options name none. */
13
+ const DEFAULT_BLOCK_SCHEMA = "better_supabase";
14
+ /** A `BlockCall` over `transport`, in `schema`, with the app's error mappers first. */
15
+ function blockCall(transport, schema = DEFAULT_BLOCK_SCHEMA, mappers = []) {
16
+ return (fn, args, then) => AsyncResult.from(async () => {
17
+ let value;
18
+ try {
19
+ value = await transport.call(schema, fn, args);
20
+ } catch (cause) {
21
+ const raw = rawError(cause);
22
+ return err(raw ? mapDbError(raw, mappers) : toDbError(cause));
23
+ }
24
+ return ok(await then(value));
25
+ });
26
+ }
27
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
28
+ const textOf = (value) => typeof value === "string" ? value : String(value);
29
+ const optionalText = (value) => value === null || value === void 0 ? void 0 : textOf(value);
30
+ /** A function result that must be an object. */
31
+ function recordOf(value, fn) {
32
+ if (!isRecord(value)) throw new TypeError(`${fn} returned ${JSON.stringify(value)}`);
33
+ return value;
34
+ }
35
+ /** A function result that must be an array of objects. */
36
+ function recordsOf(value, fn) {
37
+ if (value === null || value === void 0) return [];
38
+ if (!Array.isArray(value) || !value.every(isRecord)) throw new TypeError(`${fn} returned ${JSON.stringify(value)}`);
39
+ return value;
40
+ }
41
+ const stringsOf = (value) => Array.isArray(value) ? value.map(textOf) : [];
42
+ /** `value` when it is one of `values`, otherwise `fallback`. */
43
+ function oneOf(value, values, fallback) {
44
+ return values.find((item) => item === value) ?? fallback;
45
+ }
46
+ /** `value` when it is one of `values`; throws for anything else. */
47
+ function enumOrThrow(value, values, what) {
48
+ const found = values.find((item) => item === value);
49
+ if (found === void 0) throw new TypeError(`unknown ${what} "${String(value)}"`);
50
+ return found;
51
+ }
52
+ /** A jsonb object column, or an empty object for anything else. */
53
+ const recordOrEmpty = (value) => isRecord(value) ? value : {};
54
+ /** A `credential_ref` column, or `undefined` when it names no provider. */
55
+ function credentialRefOf(value) {
56
+ if (!isRecord(value) || typeof value["provider"] !== "string") return;
57
+ return {
58
+ ...value,
59
+ provider: value["provider"]
60
+ };
61
+ }
62
+ /** The `not_found` error a block returns for a row the caller can't see. */
63
+ const notFoundError = (message, hint) => dbError("not_found", message, hint === void 0 ? {} : { hint });
64
+ /** A `timestamptz` from jsonb or `pg`, or `undefined` for null. */
65
+ const optionalInstant = (value) => value === null || value === void 0 ? void 0 : value instanceof Date || typeof value === "string" ? toInstant(value) : void 0;
66
+ /** A `timestamptz` that must be there; throws when it is null or missing. */
67
+ function requiredInstant(value, field) {
68
+ const instant = optionalInstant(value);
69
+ if (instant === void 0) throw new TypeError(`${field} is missing`);
70
+ return instant;
71
+ }
72
+ /** An optional `timestamptz` as text for a function argument. */
73
+ const instantArg = (value) => value === void 0 ? void 0 : value === null ? null : value.toString();
74
+ /** SHA-256 of `value` as lowercase hex, with WebCrypto. */
75
+ async function sha256Hex(value) {
76
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(value));
77
+ return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
78
+ }
79
+ /** `bytes` random bytes as base64url, for secrets and codes. */
80
+ function randomToken(bytes = 24) {
81
+ const data = crypto.getRandomValues(new Uint8Array(bytes));
82
+ let binary = "";
83
+ for (const byte of data) binary += String.fromCodePoint(byte);
84
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
85
+ }
86
+ function asDbError(cause) {
87
+ const raw = fromPgError(cause);
88
+ return raw ? mapDbError(raw) : toDbError(cause);
89
+ }
90
+ function run(fn) {
91
+ return AsyncResult.from(async () => {
92
+ try {
93
+ return ok(await fn());
94
+ } catch (cause) {
95
+ return err(asDbError(cause));
96
+ }
97
+ });
98
+ }
99
+ /**
100
+ * The request body as text, or `undefined` once it is longer than `limit`
101
+ * bytes. A larger `Content-Length` is refused before reading; otherwise
102
+ * reading stops at the limit, so a body without one can't fill memory.
103
+ */
104
+ async function readBodyCapped(request, limit) {
105
+ const length = Number(request.headers.get("content-length") ?? NaN);
106
+ if (Number.isFinite(length) && length > limit) return void 0;
107
+ if (!request.body) return "";
108
+ const reader = request.body.getReader();
109
+ const chunks = [];
110
+ let size = 0;
111
+ for (;;) {
112
+ const { done, value } = await reader.read();
113
+ if (done) break;
114
+ size += value.byteLength;
115
+ if (size > limit) {
116
+ reader.cancel().catch(() => void 0);
117
+ return;
118
+ }
119
+ chunks.push(value);
120
+ }
121
+ const bytes = new Uint8Array(size);
122
+ let offset = 0;
123
+ for (const chunk of chunks) {
124
+ bytes.set(chunk, offset);
125
+ offset += chunk.byteLength;
126
+ }
127
+ return new TextDecoder().decode(bytes);
128
+ }
129
+ function seconds(value) {
130
+ return typeof value === "number" ? `${String(value)} seconds` : value;
131
+ }
132
+ function workerId() {
133
+ return `worker-${crypto.randomUUID().slice(0, 8)}`;
134
+ }
135
+ /**
136
+ * Runs `fn` over `items` with at most `limit` calls in flight. After the
137
+ * first rejection no new item starts; the ones running finish, then it
138
+ * rethrows.
139
+ */
140
+ async function eachLimit(items, limit, fn) {
141
+ let next = 0;
142
+ let failure;
143
+ const lane = async () => {
144
+ while (failure === void 0 && next < items.length) {
145
+ const index = next++;
146
+ try {
147
+ await fn(items[index], index);
148
+ } catch (cause) {
149
+ failure ??= { cause };
150
+ }
151
+ }
152
+ };
153
+ await Promise.all(Array.from({ length: Math.min(Math.max(1, limit), items.length) }, lane));
154
+ if (failure) throw failure.cause;
155
+ }
156
+ const sleep = (ms, signal) => new Promise((resolve) => {
157
+ if (signal?.aborted) {
158
+ resolve();
159
+ return;
160
+ }
161
+ const timer = setTimeout(done, ms);
162
+ function done() {
163
+ clearTimeout(timer);
164
+ signal?.removeEventListener("abort", done);
165
+ resolve();
166
+ }
167
+ signal?.addEventListener("abort", done, { once: true });
168
+ });
169
+ /** pgmq and the inbox return `timestamptz` as text over RPC and as `Date` from `pg`. */
170
+ const toInstant = (value) => value instanceof Date ? temporal().Instant.fromEpochMilliseconds(value.getTime()) : temporal().Instant.from(value);
171
+ function errorText(error) {
172
+ if (error instanceof Error) return error.message;
173
+ if (typeof error === "object" && error !== null && "message" in error) return String(error.message);
174
+ return String(error);
175
+ }
176
+ function injectableOf(what, value) {
177
+ if (value === void 0) return void 0;
178
+ const version = value.apiVersion;
179
+ if (version !== void 0 && version !== 1) throw new TypeError(`${what} targets API ${String(version)}; this better-supabase supports 1. Upgrade better-supabase or use a release built for API 1.`);
180
+ return value;
181
+ }
182
+ /** Reads `limit` and `cursor` from a list's options. */
183
+ function pageOf(options = {}) {
184
+ return {
185
+ limit: options.limit,
186
+ cursor: options.cursor
187
+ };
188
+ }
189
+ //#endregion
190
+ export { workerId as A, run as C, stringsOf as D, sleep as E, textOf as O, requiredInstant as S, sha256Hex as T, randomToken as _, credentialRefOf as a, recordOrEmpty as b, errorText as c, isRecord as d, notFoundError as f, pageOf as g, optionalText as h, blockCall as i, toInstant as k, injectableOf as l, optionalInstant as m, applyTemporal as n, eachLimit as o, oneOf as p, asDbError as r, enumOrThrow as s, DEFAULT_BLOCK_SCHEMA as t, instantArg as u, readBodyCapped as v, seconds as w, recordsOf as x, recordOf as y };
@@ -0,0 +1,114 @@
1
+ import { n as dbError, o as isDbError } from "./errors-B11Duf73.js";
2
+ import { r as err, t as AsyncResult } from "./result-DzUbqgdW.js";
3
+ import { t as consoleLogger } from "./logger-glM28NVN.js";
4
+ import { i as blockCall } from "./block-helpers-DWHxHsEQ.js";
5
+ //#region src/core/block-hooks.ts
6
+ const isPlainObject = (value) => {
7
+ const proto = Object.getPrototypeOf(value);
8
+ return proto === Object.prototype || proto === null;
9
+ };
10
+ /** A copy of plain objects and arrays; class instances (Temporal values) are immutable and stay shared. */
11
+ function copyOf(value) {
12
+ if (Array.isArray(value)) return value.map(copyOf);
13
+ if (typeof value === "object" && value !== null && isPlainObject(value)) return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, copyOf(entry)]));
14
+ return value;
15
+ }
16
+ /** A new client with the same methods: a spread for object literals, a child object otherwise. */
17
+ function cloneClient(client) {
18
+ if (isPlainObject(client)) return { ...client };
19
+ return Object.create(client);
20
+ }
21
+ /** The client's method named `name`, or undefined when it has none. */
22
+ function methodOf(client, name) {
23
+ const value = client[name];
24
+ if (typeof value !== "function") return void 0;
25
+ return value;
26
+ }
27
+ /**
28
+ * Runs `hooks` around a block client's methods. Use it to add a rule the
29
+ * block doesn't know (refuse `invite` above a seat limit), rewrite arguments
30
+ * (fill a default), or observe results (metrics, an audit line). Methods
31
+ * without hooks are unchanged.
32
+ *
33
+ * ```ts
34
+ * const orgs = withBlockHooks(createOrganizations(options), {
35
+ * invite: { before: ([input]) => (input.role === "owner" ? dbError("forbidden", "Owners are added by support") : undefined) },
36
+ * });
37
+ * ```
38
+ */
39
+ function withBlockHooks(client, hooks, options = {}) {
40
+ if (hooks === void 0) return client;
41
+ const block = options.block ?? "block";
42
+ const logger = options.logger ?? consoleLogger;
43
+ const wrapped = cloneClient(client);
44
+ for (const [method, hook] of Object.entries(hooks)) {
45
+ if (hook === void 0) continue;
46
+ const original = methodOf(client, method);
47
+ if (original === void 0) throw new TypeError(`better-supabase: ${block} has no method "${method}" to hook`);
48
+ const { before, after } = hook;
49
+ const info = {
50
+ block,
51
+ method
52
+ };
53
+ wrapped[method] = (...args) => AsyncResult.from(async () => {
54
+ let current = args;
55
+ if (before) {
56
+ const outcome = await before(current, info);
57
+ if (isDbError(outcome)) return err(outcome);
58
+ if (Array.isArray(outcome)) current = outcome;
59
+ }
60
+ const result = await original.apply(client, current);
61
+ if (after) try {
62
+ await after(copyOf(result), current, info);
63
+ } catch (cause) {
64
+ logger.error(`${block}.${method} after hook threw`, { cause });
65
+ }
66
+ return result;
67
+ });
68
+ }
69
+ return wrapped;
70
+ }
71
+ /**
72
+ * Adds methods to a block client. The builder gets the base client, so a
73
+ * new method can compose existing ones, and `call` for SQL functions the
74
+ * app adds to the block's schema. Redefining a base method throws: wrap it
75
+ * with `withBlockHooks` instead.
76
+ *
77
+ * ```ts
78
+ * const orgs = extendBlock(createOrganizations(options), (base, { call }) => ({
79
+ * archive: (id: string) => call("archive_organization", { id }, () => undefined),
80
+ * }), { transport: options.transport });
81
+ * ```
82
+ */
83
+ function extendBlock(client, build, options = {}) {
84
+ const { transport } = options;
85
+ const additions = build(client, { call: transport ? blockCall(transport, options.schema ?? "better_supabase", options.mappers ?? []) : () => AsyncResult.err(dbError("unsupported", "extendBlock needs the transport option to call SQL functions")) });
86
+ const taken = Object.keys(additions).filter((key) => key in client);
87
+ if (taken.length > 0) throw new TypeError(`better-supabase: extendBlock can't redefine ${taken.map((key) => `"${key}"`).join(", ")}; wrap a base method with withBlockHooks instead`);
88
+ return Object.assign(cloneClient(client), additions);
89
+ }
90
+ /** Fills in `apiVersion: 1`. */
91
+ function defineTransportMiddleware(middleware) {
92
+ return {
93
+ ...middleware,
94
+ apiVersion: 1
95
+ };
96
+ }
97
+ /**
98
+ * A transport that runs `middleware` around `transport`, the first one
99
+ * outermost. Throws when a middleware targets an API other than 1.
100
+ */
101
+ function wrapTransport(transport, ...middleware) {
102
+ for (const entry of middleware) {
103
+ const version = entry.apiVersion;
104
+ if (version !== 1) throw new TypeError(`better-supabase: transport middleware "${entry.name}" targets API ${String(version)}; this better-supabase supports 1`);
105
+ }
106
+ const run = middleware.reduceRight((next, entry) => (request) => entry.call(request, next), (request) => transport.call(request.schema, request.fn, request.args));
107
+ return { call: (schema, fn, args) => run({
108
+ schema,
109
+ fn,
110
+ args
111
+ }) };
112
+ }
113
+ //#endregion
114
+ export { wrapTransport as i, extendBlock as n, withBlockHooks as r, defineTransportMiddleware as t };