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
@@ -1,40 +0,0 @@
1
- const TEMPORAL_MISSING = `Temporal is not available in this runtime. Import "temporal-polyfill/global" once at startup.`;
2
- /** The runtime's `Temporal`, or `undefined` before the polyfill loads. */
3
- function optionalTemporal() {
4
- return globalThis.Temporal;
5
- }
6
- /**
7
- * The current instant, the default `now` everywhere. Without Temporal it
8
- * throws a `TypeError` that names the polyfill.
9
- */
10
- function nowInstant() {
11
- const namespace = optionalTemporal();
12
- if (namespace === void 0) throw new TypeError(TEMPORAL_MISSING);
13
- return namespace.Now.instant();
14
- }
15
- const ISO_TAGS = /* @__PURE__ */ new Set([
16
- "Temporal.Instant",
17
- "Temporal.PlainDateTime",
18
- "Temporal.PlainDate",
19
- "Temporal.PlainTime"
20
- ]);
21
- /**
22
- * The text Postgres reads back for a Temporal value: ISO 8601, with a
23
- * `ZonedDateTime` sent as its instant because Postgres rejects the
24
- * `[Region/City]` annotation. `undefined` for anything else.
25
- *
26
- * Values are recognized by `Symbol.toStringTag`, not `instanceof`, so values
27
- * from another realm or a second copy of the polyfill still encode.
28
- */
29
- function temporalText(value) {
30
- if (typeof value !== "object" || value === null) return void 0;
31
- if (!(Symbol.toStringTag in value)) return void 0;
32
- const tag = value[Symbol.toStringTag];
33
- if (ISO_TAGS.has(tag)) return String(value);
34
- return tag === "Temporal.ZonedDateTime" && isZoned(value) ? String(value.toInstant()) : void 0;
35
- }
36
- function isZoned(value) {
37
- return "toInstant" in value && typeof value.toInstant === "function";
38
- }
39
- //#endregion
40
- export { temporalText as i, nowInstant as n, optionalTemporal as r, TEMPORAL_MISSING as t };
@@ -1,49 +0,0 @@
1
- //#region src/query/invalidate.ts
2
- function isString(value) {
3
- return typeof value === "string";
4
- }
5
- function queryTables(query) {
6
- const tables = query.meta?.["bsTables"];
7
- if (Array.isArray(tables)) {
8
- const list = tables;
9
- return list.every(isString) ? list : list.filter(isString);
10
- }
11
- const [prefix, table] = query.queryKey;
12
- return prefix === "bs" && typeof table === "string" ? [table] : void 0;
13
- }
14
- /**
15
- * Invalidates every query that read one of `tables`: better-supabase queries
16
- * by their `meta.bsTables`, and other `['bs', table, ...]` keys by prefix.
17
- */
18
- function invalidateTables(client, tables) {
19
- if (tables.length === 0) return Promise.resolve();
20
- const changed = new Set(tables);
21
- return client.invalidateQueries({ predicate: (query) => queryTables(query)?.some((table) => changed.has(table)) ?? false });
22
- }
23
- //#endregion
24
- //#region src/query/user-change.ts
25
- /**
26
- * Removes every `['bs', ...]` query when the signed-in user changes or signs
27
- * out, so the next user never sees the previous user's rows. Returns the
28
- * function that stops listening. `BetterSupabaseProvider` calls it for React;
29
- * call it yourself with Vue, Solid, Svelte or Angular Query.
30
- *
31
- * ```ts
32
- * const stop = clearOnUserChange(queryClient, bs.auth);
33
- * ```
34
- */
35
- function clearOnUserChange(queryClient, auth) {
36
- let user;
37
- const check = () => {
38
- const snapshot = auth.current();
39
- if (snapshot.status === "loading") return;
40
- const id = snapshot.user?.id ?? null;
41
- if (user !== void 0 && user !== id) queryClient.removeQueries({ queryKey: ["bs"] });
42
- user = id;
43
- };
44
- const stop = auth.subscribe(check);
45
- check();
46
- return stop;
47
- }
48
- //#endregion
49
- export { invalidateTables as n, clearOnUserChange as t };
@@ -1,285 +0,0 @@
1
- /// <reference lib="esnext.temporal" />
2
- import { P as TableKey, k as Row, n as AnyFunctions, r as AnyModels } from "../types-Dnf_wRDz.js";
3
- import { S as ErrorMapper, a as AsyncResult, u as Result } from "../executor-BunPOO-k.js";
4
- import { a as EventHub } from "../events-aIO7vsIk.js";
5
- import { t as BetterSupabase } from "../define-Bp_BZa5h.js";
6
- import { g as RequestContext } from "../plugin-o144f322.js";
7
- import { r as EventSink } from "../index-DOESKG27.js";
8
- import { i as sqlTransport, n as RpcClient, r as rpcTransport, t as KitTransport } from "../kit-transport-B82k1djG.js";
9
- import { _ as PublicUrlOptions, a as hmacSigner, b as publicUrl, c as WebhookSecretStore, d as WebhookPolicyError, f as WebhookRequest, g as AllowUrl, h as fetchTransport, i as WebhookSigner, l as sqlSecretStore, m as WebhookTransport, n as StandardWebhooksOptions, o as standardWebhooks, p as WebhookResponse, r as WebhookSignInput, s as RotateSecretOptions, t as HmacSignerOptions, u as FetchTransportOptions, v as ResolveHost, y as isPublicAddress } from "../signers-Cc6r98SW.js";
10
- //#region src/webhooks/verify.d.ts
11
- interface VerifiedWebhook<T = unknown> {
12
- readonly id: string;
13
- readonly timestamp: Temporal.Instant;
14
- readonly payload: T;
15
- readonly body: string;
16
- }
17
- interface VerifyOptions {
18
- /** Allowed clock skew in seconds. Defaults to 300. */
19
- readonly tolerance?: number;
20
- readonly now?: () => Temporal.Instant;
21
- }
22
- type WebhookInput = Request | {
23
- readonly headers: Headers | Readonly<Record<string, string>>;
24
- readonly body: string;
25
- };
26
- /** Constant-time string comparison. */
27
- export declare function timingSafeEqual(a: string, b: string): boolean;
28
- /** Headers for a signed Standard Webhooks request. */
29
- export declare function signWebhook(secret: string, message: {
30
- readonly id: string;
31
- readonly body: string;
32
- readonly timestamp?: Temporal.Instant;
33
- }): Promise<Record<string, string>>;
34
- /**
35
- * Verifies a Standard Webhooks signature (`webhook-id`, `webhook-timestamp`,
36
- * `webhook-signature`) and parses the JSON body. Pass several secrets while
37
- * rotating.
38
- */
39
- export declare function verifyWebhook<T = unknown>(input: WebhookInput, secrets: string | readonly string[], options?: VerifyOptions): Promise<Result<VerifiedWebhook<T>>>;
40
- /** Checks a shared-secret header (database webhooks), in constant time. */
41
- export declare function verifySharedSecret(request: Request, secret: string, headerName?: string): boolean;
42
- interface HookUser {
43
- readonly id: string;
44
- readonly email?: string;
45
- readonly phone?: string;
46
- readonly app_metadata?: Readonly<Record<string, unknown>>;
47
- readonly user_metadata?: Readonly<Record<string, unknown>>;
48
- readonly [key: string]: unknown;
49
- }
50
- interface AuthHookError {
51
- readonly error: {
52
- readonly http_code: number;
53
- readonly message: string;
54
- };
55
- }
56
- interface AuthHooks {
57
- custom_access_token: {
58
- input: {
59
- readonly user_id: string;
60
- readonly claims: Readonly<Record<string, unknown>> & {
61
- readonly sub: string;
62
- readonly role: string;
63
- };
64
- readonly authentication_method: string;
65
- };
66
- output: {
67
- readonly claims: Readonly<Record<string, unknown>>;
68
- };
69
- };
70
- send_email: {
71
- input: {
72
- readonly user: HookUser;
73
- readonly email_data: {
74
- readonly token: string;
75
- readonly token_hash: string;
76
- readonly redirect_to: string;
77
- readonly email_action_type: string;
78
- readonly site_url: string;
79
- readonly token_new: string;
80
- readonly token_hash_new: string;
81
- /** Auth adds fields over time (`old_email`, `factor_type`, ...). */
82
- readonly [key: string]: unknown;
83
- };
84
- };
85
- output: Record<never, never>;
86
- };
87
- send_sms: {
88
- input: {
89
- readonly user: HookUser;
90
- readonly sms: {
91
- readonly otp: string;
92
- };
93
- };
94
- output: Record<never, never>;
95
- };
96
- mfa_verification_attempt: {
97
- input: {
98
- readonly factor_id: string;
99
- readonly factor_type: string;
100
- readonly user_id: string;
101
- readonly valid: boolean;
102
- };
103
- output: {
104
- readonly decision: "continue" | "reject";
105
- readonly message?: string;
106
- };
107
- };
108
- password_verification_attempt: {
109
- input: {
110
- readonly user_id: string;
111
- readonly valid: boolean;
112
- };
113
- output: {
114
- readonly decision: "continue" | "reject";
115
- readonly message?: string;
116
- readonly should_logout_user?: boolean;
117
- };
118
- };
119
- before_user_created: {
120
- input: {
121
- readonly metadata: Readonly<Record<string, unknown>>;
122
- readonly user: HookUser;
123
- };
124
- output: Record<never, never>;
125
- };
126
- }
127
- type AuthHookKind = keyof AuthHooks;
128
- /** Rejects a hook with a status and message Supabase Auth passes to the client. */
129
- export declare function hookError(status: number, message: string): AuthHookError;
130
- /**
131
- * A `(request) => Response` handler for a Supabase Auth hook: verifies the
132
- * Standard Webhooks signature, types the payload and serializes the answer.
133
- *
134
- * ```ts
135
- * export const POST = authHook('custom_access_token', env.AUTH_HOOK_SECRET, async ({ claims, user_id }) => ({
136
- * claims: { ...claims, tenant_id: await orgFor(user_id) },
137
- * }));
138
- * ```
139
- */
140
- export declare function authHook<K extends AuthHookKind>(_kind: K, secret: string | readonly string[], handler: (payload: AuthHooks[K]["input"], webhook: VerifiedWebhook<AuthHooks[K]["input"]>) => AuthHooks[K]["output"] | AuthHookError | Promise<AuthHooks[K]["output"] | AuthHookError>, options?: VerifyOptions): (request: Request) => Promise<Response>;
141
- interface DatabaseWebhookPayload {
142
- readonly type: "INSERT" | "UPDATE" | "DELETE";
143
- readonly table: string;
144
- readonly schema: string;
145
- readonly record: Readonly<Record<string, unknown>> | null;
146
- readonly old_record: Readonly<Record<string, unknown>> | null;
147
- }
148
- interface DatabaseChange<R> {
149
- readonly type: "INSERT" | "UPDATE" | "DELETE";
150
- readonly table: string;
151
- readonly record: R | null;
152
- readonly oldRecord: Partial<R> | null;
153
- }
154
- export declare function isDatabaseWebhook(value: unknown): value is DatabaseWebhookPayload;
155
- /**
156
- * Reads a database webhook payload for `table` as an app-cased change.
157
- * Returns `null` for other tables or payloads that aren't database webhooks.
158
- */
159
- export declare function databaseChange<M extends AnyModels, D, F extends AnyFunctions, E, T extends TableKey<M>>(betterSupabase: BetterSupabase<M, D, F, E>, table: T, payload: unknown): DatabaseChange<Row<M, T>> | null;
160
- //#endregion
161
- //#region src/webhooks/outgoing.d.ts
162
- /** One claimed delivery, as `shouldDeliver`, `transform` and `headers` see it. */
163
- interface WebhookDelivery {
164
- readonly id: string;
165
- readonly endpointId: string;
166
- readonly url: string;
167
- readonly type: string;
168
- readonly payload: unknown;
169
- /** 1 on the first try. Counted when the delivery is claimed. */
170
- readonly attempt: number;
171
- readonly tenant: string | null;
172
- readonly eventId: string | null;
173
- readonly runId: string | null;
174
- readonly createdAt: Temporal.Instant;
175
- }
176
- interface RetryPolicy {
177
- /** Attempts before a delivery is dead-lettered. Defaults to 8. */
178
- readonly maxAttempts?: number;
179
- /**
180
- * Seconds before the next attempt. Defaults to 5 seconds, 5 minutes, 30
181
- * minutes, 2 hours, 5 hours, then 10 hours, each with full jitter. A
182
- * receiver's `Retry-After` wins when it asks for longer, up to a day.
183
- */
184
- readonly backoff?: (attempt: number) => number;
185
- /** Statuses worth retrying. Defaults to 408, 429 and 5xx; network errors always retry. */
186
- readonly retryable?: (status: number) => boolean;
187
- }
188
- interface WebhooksOptions {
189
- /** `sqlTransport(postgres.admin)` for the worker, or the user's connection to manage. */
190
- readonly transport: KitTransport;
191
- /** `kits.webhooks-out.schema`. Defaults to `better_supabase`. */
192
- readonly schema?: string;
193
- /** Defaults to `fetchTransport({ allowUrl })`. */
194
- readonly http?: WebhookTransport;
195
- /** Used by the default `http`. Defaults to `publicUrl()`. */
196
- readonly allowUrl?: AllowUrl;
197
- /** Defaults to `standardWebhooks()`. */
198
- readonly signer?: WebhookSigner;
199
- /** Defaults to `sqlSecretStore(transport)`. */
200
- readonly secrets?: WebhookSecretStore;
201
- readonly retry?: RetryPolicy;
202
- /** Return `false` (or throw) to cancel a delivery instead of sending it. */
203
- readonly shouldDeliver?: (delivery: WebhookDelivery) => boolean | Promise<boolean>;
204
- /**
205
- * The JSON body. Defaults to the Standard Webhooks envelope,
206
- * `{ type, timestamp, data }`.
207
- */
208
- readonly transform?: (delivery: WebhookDelivery) => unknown;
209
- /** Extra headers, e.g. an `idempotency-key`. */
210
- readonly headers?: (delivery: WebhookDelivery) => Readonly<Record<string, string>>;
211
- /** Characters of the response body kept in the log. Defaults to 2000. */
212
- readonly responseBodyLimit?: number;
213
- /** `betterSupabase.events`, for `webhook.*` kit events. */
214
- readonly events?: EventHub;
215
- readonly context?: RequestContext;
216
- readonly errorMappers?: readonly ErrorMapper[];
217
- }
218
- interface PublishInput {
219
- readonly type: string;
220
- readonly data: unknown;
221
- readonly tenant?: string;
222
- /** With an id, publishing it again never queues a second delivery. */
223
- readonly id?: string;
224
- }
225
- interface DispatchInput {
226
- readonly endpointId: string;
227
- readonly type: string;
228
- readonly data: unknown;
229
- /** An external run id stored with the delivery, e.g. a workflow run. */
230
- readonly runId?: string;
231
- readonly eventId?: string;
232
- }
233
- interface DeliverWebhooksOptions {
234
- /** Deliveries per claim. Defaults to 25. */
235
- readonly batch?: number;
236
- /**
237
- * Requests in flight at once. Defaults to 10, so a batch of 25 at the
238
- * 10-second timeout finishes well inside the lease.
239
- */
240
- readonly concurrency?: number;
241
- /** How long a claim holds a delivery. Defaults to `'2 minutes'`. */
242
- readonly lease?: string;
243
- readonly budgetMs?: number;
244
- }
245
- interface DeliverWebhooksResult {
246
- readonly succeeded: number;
247
- /** Failed attempts that will retry. */
248
- readonly retrying: number;
249
- /** Deliveries that ran out of attempts or can't succeed. */
250
- readonly dead: number;
251
- readonly canceled: number;
252
- /** Endpoints disabled after failing for `disableAfter`. */
253
- readonly disabled: number;
254
- }
255
- interface WebhooksRouteOptions extends DeliverWebhooksOptions {
256
- readonly secret: string | undefined;
257
- readonly onError?: (error: unknown) => void;
258
- }
259
- interface Webhooks {
260
- /** Queues the event for each subscribed endpoint; returns how many. */
261
- publish(event: PublishInput): AsyncResult<number>;
262
- /** Sends to one endpoint outside its subscriptions; returns the delivery id. */
263
- dispatch(input: DispatchInput): AsyncResult<string>;
264
- /** Queues a finished delivery again. */
265
- redeliver(deliveryId: string): AsyncResult<string>;
266
- /** A new signing secret, returned once. */
267
- rotateSecret(endpointId: string, options?: RotateSecretOptions): AsyncResult<string>;
268
- /** Sends due deliveries. Run it from a cron route or a job. */
269
- deliver(options?: DeliverWebhooksOptions): Promise<DeliverWebhooksResult>;
270
- /** A `GET`/`POST` handler for Vercel Cron that runs `deliver` behind a bearer secret. */
271
- deliverRoute(options: WebhooksRouteOptions): (request: Request) => Promise<Response>;
272
- /**
273
- * An `EventSink` that publishes CloudEvents, e.g. from the outbox relay.
274
- * Endpoints subscribe to unprefixed types, so it removes `typePrefix`
275
- * (`dev.better-supabase` by default, the relay's default) and the dot.
276
- */
277
- sink(options?: WebhookSinkOptions): EventSink;
278
- }
279
- interface WebhookSinkOptions {
280
- /** The relay's `typePrefix`. */
281
- readonly typePrefix?: string;
282
- }
283
- export declare function createWebhooks(options: WebhooksOptions): Webhooks;
284
- //#endregion
285
- export { type AllowUrl, type AuthHookError, type AuthHookKind, type AuthHooks, type DatabaseChange, type DatabaseWebhookPayload, type DeliverWebhooksOptions, type DeliverWebhooksResult, type DispatchInput, type FetchTransportOptions, type HmacSignerOptions, type KitTransport, type PublicUrlOptions, type PublishInput, type ResolveHost, type RetryPolicy, type RotateSecretOptions, type RpcClient, type StandardWebhooksOptions, type VerifiedWebhook, type VerifyOptions, type WebhookDelivery, type WebhookInput, WebhookPolicyError, type WebhookRequest, type WebhookResponse, type WebhookSecretStore, type WebhookSignInput, type WebhookSigner, type WebhookSinkOptions, type WebhookTransport, type Webhooks, type WebhooksOptions, type WebhooksRouteOptions, fetchTransport, hmacSigner, isPublicAddress, publicUrl, rpcTransport, sqlSecretStore, sqlTransport, standardWebhooks };
@@ -1,122 +0,0 @@
1
- # better-supabase next to PermDock
2
-
3
- PermDock handles authorization and better-supabase handles tokens and data.
4
- They share one access token hook and one claim contract, and neither imports
5
- the other.
6
-
7
- ## Who owns what
8
-
9
- | Area | better-supabase | PermDock |
10
- | -------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------- |
11
- | Access token hook | none | `permdock supabase hook generate`, the only hook |
12
- | Claims | `features`, through `supabase.hook.claims` | `user_role`, `roles`, `memberships`, the tenant claim, `attrs`, `authz_ver` |
13
- | SQL helpers | the SQL kit (`better_supabase.*`) | `permdock rls generate`: `permdock_has`, `permitted_<scope>_ids`, `member_<scope>_ids` |
14
- | Storage and Realtime | `defineBucket`, `defineTopic` with a `permdock` policy mode | the helpers those policies call |
15
- | MCP | `createMcp` with `authorize` and `visible` | the permissions in each tool's `meta` |
16
-
17
- ## Rules
18
-
19
- - Don't run `better-supabase sql add tenant` (it stops without `--force`),
20
- don't call `membership_claims()` from a hook, and don't write `roles`,
21
- `user_role`, `memberships` or the tenant claim yourself. Doctor reports
22
- BS407 when a hook does.
23
- - `sql add entitlements` is fine: `features` is not a PermDock claim. Add
24
- `claims: { features: 'better_supabase.feature_claims' }` to `supabase.hook`
25
- in `permdock.config.ts`, run `permdock supabase hook generate`, and
26
- `hasEntitlement(session, ...)` works.
27
- - Run `permdock supabase inspect --out` before `sql add entitlements`. With
28
- `permdock.manifest.json` present, the module reads PermDock's
29
- `member_<scope>_ids` helpers and doesn't add `tenant`. The scope is the
30
- manifest's root scope (the `rls.scopes` entry without `within`); set
31
- `entitlements.permdock: { scope }` in `better-supabase.config.ts` for
32
- another one.
33
- - Name the same tenant claim on both sides. A non-default `claims.tenant` in
34
- `better-supabase.config.ts` must also be PermDock's `rls.tenantClaim` and
35
- go to `subjectFromSupabase` or `subjectFromSupabaseSession` as `{ tenant }`.
36
- - Validate claims with PermDock's schema: `betterSupabase.claims(supabaseClaims().extend(appClaims))`.
37
- - The helpers live in PermDock's `rls.schema` (`permdock` by default). Buckets
38
- and topics in `permdock` mode call them in `permdock` unless their `schema`
39
- option names another schema; it must equal `rls.schema`.
40
- - Use the scope names the manifest declares (`organization`, not PermDock's
41
- `tenant` alias): the helpers are named after them, and doctor reports a
42
- key checked at another scope than its catalog entry.
43
- - The entitlements module needs PermDock's hook to fill `claims.features`
44
- from `better_supabase.feature_claims`
45
- (`supabase.hook.claims: { features: 'better_supabase.feature_claims' }`).
46
- - The `permdock` policy mode checks role and scope only. Use it only for
47
- permissions whose `rowConditions` is `false` in `permissions.catalog.json`.
48
- A missing flag or a key the catalog doesn't list is unknown and refused;
49
- regenerate the catalog with a current `permdock catalog`.
50
- Leave permissions with row conditions to the policies
51
- `permdock rls generate` writes; doctor reports BS214 and `permdock doctor`
52
- PD037 otherwise.
53
- - `permdock` mode compares ids as text, so a path or topic segment must be
54
- the id's lowercase form.
55
- - In MCP servers, narrow `tool.meta` with PermDock's `isPermission`, answer
56
- `visible` with `mayUse` and `authorize` with `can`. A tool without a
57
- PermDock permission in `meta` is denied: `visible` returns `false` and
58
- `authorize` returns `{ allowed: false }`. Use `decide` instead of `can` to
59
- put the denial reason in the refusal. `can` decides without a row, so check
60
- row-conditioned permissions inside `run` or rely on RLS.
61
- - In oRPC and Hono, pass the adapter's auth state to PermDock:
62
- `createPermDock(policy, { subject: ({ context }) => subjectFromSupabaseSession(context.auth) })`
63
- from `permdock/orpc`, or `(c) => subjectFromSupabaseSession(c.get("auth"))`
64
- from `permdock/hono`. Fail closed: export one builder that takes a
65
- permission (`(permission) => authed.use(pd.protect(permission))`, or the
66
- route helper `[bs.middleware(), pd.protect(permission)]` in Hono), and don't
67
- install `bs.middleware()` app-wide, so a route without a permission has no
68
- `db`.
69
- - In Next.js, cache the permission snapshot in a `'use cache: private'`
70
- loader. The user id and the snapshot only exist after `bs.cached()`
71
- returns, so pass it the static tags only, then tag and time the entry from
72
- inside the loader with Next.js's `cacheTag` and `cacheLife`:
73
-
74
- ```ts
75
- import { cacheLife, cacheTag } from "next/cache";
76
- import { snapshotFor } from "permdock";
77
- import { cacheLifeFor, snapshotTag } from "permdock/next";
78
- import { subjectFromSupabaseSession } from "permdock/supabase";
79
-
80
- export async function loadSnapshot(orgId: string) {
81
- "use cache: private";
82
- const { session } = await bs.cached({ tags: [`org:${orgId}`] });
83
- const snapshot = snapshotFor(policy, subjectFromSupabaseSession(session), {
84
- tenant: orgId,
85
- });
86
- if (session.kind === "user") cacheTag(snapshotTag(session.user.id));
87
- cacheLife(cacheLifeFor(snapshot));
88
- return snapshot;
89
- }
90
- ```
91
-
92
- `bs.cached()` already caps the stale time at the token's expiry, and Next.js
93
- keeps the smaller `stale` of the two `cacheLife` calls. When a role or plan
94
- changes, drop the user's entries and the snapshot with
95
- `bs.invalidateSession(userId, { tags: [snapshotTag(userId)] })`.
96
-
97
- - Doctor BS405 measures `memberships` plus `attrs` against PermDock's 1 KB
98
- budget and the whole token against 2 KB; run `doctor --as <user id>`.
99
- - For the SQL kit, set `kits.access.model: 'permdock'` and
100
- `kits.access.functions.canAssign: 'permdock.permdock_can_assign({role}, {tenant}::text)'`
101
- (use the manifest's `rls.schema`), then run `permdock supabase inspect --out`
102
- before `sql add`. The kit reads the schema, the root scope and its id type
103
- from `permdock.manifest.json`, and `sql add` stops instead of guessing when
104
- the manifest can't give them. Every permission key the kit modules check
105
- (`kitPermissionKeys` from `better-supabase/sql`) must be
106
- `rowConditions: false` in `permissions.catalog.json`; map others with
107
- `kits.<module>.permissions`. Doctor reports BS411.
108
- - Under that model `can_user()` and `member_can()` answer for the caller only
109
- and raise SQLSTATE `0A000` for another user. Invitations skip the inviter
110
- re-check at accept time and notifications don't filter recipients by read
111
- permission; check both in the app when they matter.
112
- - The `act` claim says who acts: `kind: "support"` (support sessions,
113
- `session.actor.kind === 'support'` with `sessionId` and `readOnly`),
114
- `kind: "impersonation"` (`actingAs`), or no `kind` for an OAuth client or
115
- agent chain (`oauth-client`, limited by `scopes`). Another `kind` makes the
116
- session invalid. `session.impersonator` is set for the first two only.
117
- `supabaseClaimFixtures` in `better-supabase/testing` has one token of each.
118
- - Only `allow: ['anonymous']` admits `signInAnonymously()` users; `'anon'`
119
- means no session. Pair the default `allow` with PermDock's
120
- `rls: { anonymousSignIns: 'deny' }` in `permdock.config.ts`.
121
-
122
- Docs: https://bettersupabase.com/docs/auth/permdock.md