better-supabase 0.5.1 → 0.6.1

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-CHnPkCPd.js +1160 -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 +224 -0
  87. package/dist/blocks/attachments/index.js +234 -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 +259 -0
  97. package/dist/blocks/data-lifecycle/index.js +358 -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-BMqBgM3X.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-4JlOwgWG.js +2 -0
  181. package/dist/cli/gen-DeuDgPxN.js +3100 -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-C7Xd0Kda.js} +242 -27
  185. package/dist/cli/{introspect-BKlaIu_M.js → introspect-CSnMJ94U.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-C8tnlHSb.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-C_4JwyiM.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-CLqs9-OA.js +130 -0
  209. package/dist/composite-pSfeJNce.d.ts +146 -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-CdPDPpFs.d.ts +25 -0
  258. package/dist/framework-xjTBoyBB.js +51 -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-C6DWVEVG.d.ts} +237 -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 +34924 -6609
  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-view-B8SlToQX.d.ts → support-view-33Oi07TT.d.ts} +1 -1
  430. package/dist/{support-wHnK6zp-.js → support-zIa1URaN.js} +32 -11
  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-CQt77F3T.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,157 +1,135 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { a as BucketPolicyName, j as SchemaMeta, o as Casing, t as AccessBucketPolicy, x as PermdockBucketPolicy } from "./types-Dnf_wRDz.js";
3
- import { GeneratorMetadata } from "@supabase/postgrest-typegen";
4
- //#region src/config/kits.d.ts
2
+ import { P as SchemaMeta, U as BucketLifecycle, c as Casing, s as BucketPolicyName, t as AccessBucketPolicy } from "./types-6BdhkmZe.js";
3
+ import { s as ModulesConfig } from "./modules-DpPwzC7E.js";
4
+ import { i as AuthorizationProvider } from "./authorization-BFCqamMs.js";
5
+ //#region src/config/generator-metadata.d.ts
5
6
  /**
6
- * `kits` in `better-supabase.config.ts`: how each SQL kit module maps onto
7
- * the app's database. A module's contract (the functions other modules and
8
- * the TypeScript side call) stays the same in every mode; only the tables
9
- * behind it change.
7
+ * A copy of `@supabase/postgrest-typegen`'s `GeneratorMetadata` contract
8
+ * (version 1), so the published types don't reference the package: it is an
9
+ * optional peer that only the CLI loads. `tests/config/generator-metadata.test-d.ts`
10
+ * checks the copy against the pinned version.
10
11
  */
11
- /**
12
- * `managed`: the kit owns its tables. `adopt`: the kit writes its functions
13
- * and views over tables the app already has (`tables` and `columns`), never
14
- * `create table`. `custom`: the app implements the contract functions itself;
15
- * the kit writes nothing and doctor checks the signatures (BS307).
16
- */
17
- type KitMode = "managed" | "adopt" | "custom";
18
- /** Options every module takes. */
19
- interface KitModuleConfig {
20
- readonly mode?: KitMode;
21
- /** Schema of the module's functions and managed tables. Defaults to `better_supabase`. */
22
- readonly schema?: string;
23
- /**
24
- * Logical table to `table` or `schema.table`, e.g.
25
- * `{ memberships: 'public.organization_users' }`. An unqualified name is in
26
- * `schema`. `null` marks an optional table the app doesn't have.
27
- */
28
- readonly tables?: Readonly<Record<string, string | null>>;
29
- /**
30
- * Logical table to logical column to column name, e.g.
31
- * `{ memberships: { tenant: 'organization_id', role: 'role_id' } }`.
32
- * `null` marks an optional column the adopted table doesn't have.
33
- */
34
- readonly columns?: Readonly<Record<string, Readonly<Record<string, string | null>>>>;
35
- /** Type of tenant ids: `uuid` (default), `text`, `bigint` or `integer`. */
36
- readonly idType?: string;
37
- /**
38
- * Kit action to permission key, checked through the access contract, e.g.
39
- * `{ invite: 'organization.members.invite' }`.
40
- */
41
- readonly permissions?: Readonly<Record<string, string>>;
42
- /** Module-specific options; each module's docs page lists them. */
43
- readonly options?: Readonly<Record<string, unknown>>;
44
- /**
45
- * The app's optional `before_*` and `after_*` functions the module calls
46
- * when they exist, e.g. `after_organization_create(org, user)`. They are
47
- * looked up in `schema` (default `public`); `functions` maps a hook name
48
- * to another function, e.g. `{ after_organization_create: 'app.seed_org' }`.
49
- */
50
- readonly hooks?: {
51
- readonly schema?: string;
52
- readonly functions?: Readonly<Record<string, string>>;
53
- };
54
- /**
55
- * Whether the module writes its events to the outbox (`emit_event`) when
56
- * the `outbox` module is installed. Defaults to true.
57
- */
58
- readonly events?: boolean;
59
- }
60
- /**
61
- * Where the active tenant of a request comes from. Every source counts only
62
- * while the caller is a member, so a stale claim or setting grants nothing.
63
- */
64
- type ActiveTenantSource = "claim" | "resolver" | {
65
- readonly profileColumn: string;
66
- readonly key?: string;
67
- };
68
- /** URL tenancy: the tenant comes from the request (a slug), not a stored setting. */
69
- declare const DEFAULT_ACTIVE_TENANT: ActiveTenantSource;
70
- /**
71
- * The access contract every kit checks permissions through:
72
- * `can(scope, id, permission)`, `tenant_ids_with(permission)`,
73
- * `is_platform(permission)` and `can_user(user, scope, id, permission)`.
74
- */
75
- interface AccessKitConfig extends KitModuleConfig {
76
- /**
77
- * `roles`: a fixed role list from `roles` (the default). `catalog`: role,
78
- * permission and override tables (`tables.roles`, `permissions`,
79
- * `rolePermissions`, `overrides`, `platformAssignments`). `permdock`:
80
- * PermDock's `permitted_<scope>_ids` and `permdock_has`. `custom`:
81
- * expression templates in `functions`.
82
- */
83
- readonly model?: "roles" | "catalog" | "permdock" | "custom";
84
- /**
85
- * `roles` model: role name to permission keys. `*` grants everything and
86
- * `prefix.*` a prefix. Defaults to owner, admin, member and viewer.
87
- */
88
- readonly roles?: Readonly<Record<string, readonly string[]>>;
89
- /**
90
- * `custom` model: SQL expressions with `{scope}`, `{id}`, `{permission}`
91
- * and `{user}` placeholders, e.g.
92
- * `{ can: 'public.authorize_scope({scope}::public.scope_type, {id}, {permission})' }`.
93
- */
94
- readonly functions?: {
95
- readonly can?: string;
96
- readonly tenantIdsWith?: string;
97
- readonly isPlatform?: string;
98
- readonly canUser?: string;
99
- /**
100
- * `{tenant}` and `{role}`: whether the caller may assign the role.
101
- * Required by the `custom` model. For the `permdock` model, use
102
- * PermDock's assignment rule:
103
- * `'permdock.permdock_can_assign({role}, {tenant}::text)'` (with the
104
- * manifest's `rls.schema`). Without it, the `permdock` model lets only
105
- * the service role assign roles: PermDock projects don't install the
106
- * `tenant` module (doctor BS407), whose owner-role fallback is the only
107
- * other rule, and doctor BS411 warns.
108
- */
109
- readonly canAssign?: string;
110
- /** `{user}`: the permission claim for the access token hook. */
111
- readonly permissionClaims?: string;
112
- };
113
- /**
114
- * `roles` model: the JWT claim holding the caller's platform permission
115
- * keys (an array). Defaults to `platform_permissions`.
116
- */
117
- readonly platformClaim?: string;
118
- /**
119
- * Columns that disable a tenant or a user when set, as
120
- * `schema.table.column`, keyed by the table's `id` (tenant) or the column
121
- * named in `userKey` (user). Disabled tenants and users get no permissions.
122
- */
123
- readonly disabled?: {
124
- readonly tenant?: string;
125
- readonly user?: string;
126
- readonly userKey?: string;
127
- };
128
- readonly activeTenant?: ActiveTenantSource;
129
- /** `permdock` model: PermDock's `rls.schema` and the scope tenants are. */
130
- readonly permdock?: {
131
- readonly schema?: string;
132
- readonly scope?: string;
133
- };
134
- }
135
- /** `kits` in the config, keyed by module name. */
136
- interface KitsConfig {
137
- readonly access?: AccessKitConfig;
138
- /** `AccessKitConfig` is listed so an `access` literal passes the excess-property check. */
139
- readonly [module: string]: KitModuleConfig | AccessKitConfig | undefined;
140
- }
141
- /** A module's config with defaults applied. */
142
- interface ResolvedKitModule {
143
- readonly mode: KitMode;
144
- readonly schema: string;
145
- readonly tables: Readonly<Record<string, string | null>>;
146
- readonly columns: Readonly<Record<string, Readonly<Record<string, string | null>>>>;
147
- readonly idType?: string;
148
- readonly permissions: Readonly<Record<string, string>>;
149
- readonly options: Readonly<Record<string, unknown>>;
150
- readonly hooks: {
151
- readonly schema: string;
152
- readonly functions: Readonly<Record<string, string>>;
153
- };
154
- readonly events: boolean;
12
+ interface PostgresColumn {
13
+ table_id: number;
14
+ schema: string;
15
+ table: string;
16
+ id: string;
17
+ ordinal_position: number;
18
+ name: string;
19
+ default_value: unknown;
20
+ data_type: string;
21
+ format: string;
22
+ type_schema: string;
23
+ is_identity: boolean;
24
+ identity_generation: "ALWAYS" | "BY DEFAULT" | null;
25
+ is_generated: boolean;
26
+ is_nullable: boolean;
27
+ is_updatable: boolean;
28
+ is_unique: boolean;
29
+ enums: string[];
30
+ check: string | null;
31
+ comment: string | null;
32
+ }
33
+ interface PostgresFunctionArg {
34
+ mode: "in" | "inout" | "out" | "table" | "variadic";
35
+ name: string;
36
+ type_id: number;
37
+ has_default: boolean | null;
38
+ }
39
+ interface PostgresFunction {
40
+ id: number;
41
+ schema: string;
42
+ name: string;
43
+ language: string;
44
+ definition: string;
45
+ complete_statement: string;
46
+ args: PostgresFunctionArg[];
47
+ argument_types: string;
48
+ identity_argument_types: string;
49
+ return_type_id: number;
50
+ return_type: string;
51
+ return_type_relation_id: number | null;
52
+ is_set_returning_function: boolean;
53
+ prorows: number | null;
54
+ behavior: "IMMUTABLE" | "STABLE" | "VOLATILE";
55
+ security_definer: boolean;
56
+ config_params: {
57
+ [x: string]: string;
58
+ } | null;
59
+ }
60
+ interface GeneratorMetadata {
61
+ version: 1;
62
+ schemas: {
63
+ id: number;
64
+ name: string;
65
+ owner: string;
66
+ }[];
67
+ tables: {
68
+ bytes: number;
69
+ comment: string | null;
70
+ dead_rows_estimate: number;
71
+ id: number;
72
+ live_rows_estimate: number;
73
+ name: string;
74
+ replica_identity: "DEFAULT" | "FULL" | "INDEX" | "NOTHING";
75
+ rls_enabled: boolean;
76
+ rls_forced: boolean;
77
+ schema: string;
78
+ size: string;
79
+ }[];
80
+ foreignTables: {
81
+ comment: string | null;
82
+ id: number;
83
+ name: string;
84
+ schema: string;
85
+ }[];
86
+ views: {
87
+ comment: string | null;
88
+ id: number;
89
+ is_insert_enabled?: boolean | undefined;
90
+ is_updatable: boolean;
91
+ is_update_enabled?: boolean | undefined;
92
+ name: string;
93
+ schema: string;
94
+ }[];
95
+ materializedViews: {
96
+ comment: string | null;
97
+ id: number;
98
+ is_populated: boolean;
99
+ name: string;
100
+ schema: string;
101
+ }[];
102
+ columns: PostgresColumn[];
103
+ primaryKeys: {
104
+ schema: string;
105
+ table_name: string;
106
+ name: string;
107
+ table_id: number;
108
+ }[];
109
+ relationships: {
110
+ foreign_key_name: string;
111
+ schema: string;
112
+ relation: string;
113
+ columns: string[];
114
+ is_one_to_one: boolean;
115
+ referenced_schema: string;
116
+ referenced_relation: string;
117
+ referenced_columns: string[];
118
+ }[];
119
+ functions: PostgresFunction[];
120
+ types: {
121
+ id: number;
122
+ name: string;
123
+ schema: string;
124
+ format: string;
125
+ enums: string[];
126
+ attributes: {
127
+ name: string;
128
+ type_id: number;
129
+ }[];
130
+ comment: string | null;
131
+ type_relation_id: number | null;
132
+ }[];
155
133
  }
156
134
  //#endregion
157
135
  //#region src/config/snapshot.d.ts
@@ -191,6 +169,13 @@ interface SnapshotExtras {
191
169
  * in any schema. Absent in older snapshots and without a `config.toml`.
192
170
  */
193
171
  readonly hooks?: readonly ExtrasHook[];
172
+ /**
173
+ * Set when the snapshot comes from a `GeneratorMetadata` document alone
174
+ * (`gen --metadata`): unique keys, checks and foreign keys are inferred from
175
+ * the columns and relationships, and the rest is empty, so doctor skips
176
+ * the rules that read it.
177
+ */
178
+ readonly fromMetadata?: true;
194
179
  }
195
180
  /** An `[auth.hook.<name>]` with a `pg-functions://` URI. */
196
181
  interface ExtrasHook {
@@ -218,7 +203,7 @@ interface ExtrasHookFunction extends ExtrasFunction {
218
203
  interface ExtrasFunction {
219
204
  readonly schema: string;
220
205
  readonly name: string;
221
- /** Identity arguments, e.g. `org uuid`. */
206
+ /** Identity arguments, e.g. `organization uuid`. */
222
207
  readonly signature: string;
223
208
  /** `sql`, `plpgsql`, `c`, ... */
224
209
  readonly language: string;
@@ -307,6 +292,10 @@ interface SnapshotBucket {
307
292
  readonly public: boolean;
308
293
  readonly fileSizeLimit: number | null;
309
294
  readonly allowedMimeTypes: readonly string[] | null;
295
+ /** `versioning_status`; absent when Storage has no versioning. */
296
+ readonly versioning?: "DISABLED" | "ENABLED" | "SUSPENDED" | null;
297
+ /** `lifecycle_configuration`; absent when Storage has no lifecycles. */
298
+ readonly lifecycle?: unknown;
310
299
  }
311
300
  /**
312
301
  * The snapshot joined into one record per table, function and enum. Codegen
@@ -388,9 +377,13 @@ interface CatalogFunction {
388
377
  readonly returnsTable: readonly {
389
378
  readonly name: string;
390
379
  readonly udt: string;
380
+ /** Schema of the column's type, when typegen knows it. */
381
+ readonly typeSchema?: string;
391
382
  }[] | null;
392
383
  /** Return type name (`int4`, `_text`, a table's row type). */
393
384
  readonly returns: string;
385
+ /** Schema of the return type, when typegen knows it. */
386
+ readonly returnsSchema?: string;
394
387
  /** `schema.table` when the function returns rows of a table or view. */
395
388
  readonly returnsRelation: string | null;
396
389
  readonly returnsSet: boolean;
@@ -403,6 +396,8 @@ interface CatalogFunction {
403
396
  interface CatalogFunctionArg {
404
397
  readonly name: string;
405
398
  readonly udt: string;
399
+ /** Schema of the argument's type, when typegen knows it. */
400
+ readonly typeSchema?: string;
406
401
  readonly isArray: boolean;
407
402
  readonly hasDefault: boolean;
408
403
  }
@@ -455,8 +450,25 @@ interface TableConfig {
455
450
  readonly casing?: Casing;
456
451
  /** Leave the table out of the generated models. */
457
452
  readonly exclude?: boolean;
453
+ /**
454
+ * Keep the table off the Data API on purpose: only `service_role` reaches
455
+ * it. The models are still generated for admin clients, and doctor (BS106)
456
+ * checks that `anon` and `authenticated` have no grants instead of
457
+ * requiring them.
458
+ */
459
+ readonly serviceRole?: boolean;
458
460
  /** Rename generated relations: `{ primaryContact: 'contact' }`. */
459
461
  readonly relations?: Readonly<Record<string, string>>;
462
+ /**
463
+ * Database names of not-null columns an insert may leave out because the
464
+ * database fills them, for example from a `before insert` trigger. `gen`
465
+ * makes them optional in `InsertOf` and the insert validators.
466
+ */
467
+ readonly insertOptional?: readonly string[];
468
+ }
469
+ interface FunctionConfig {
470
+ /** `true`, or the `returns table` columns (database names) that are never null. */
471
+ readonly notNull?: true | readonly string[];
460
472
  }
461
473
  interface TimestampsConfig {
462
474
  readonly createdAt?: string;
@@ -468,10 +480,7 @@ interface SoftDeleteConfig {
468
480
  interface TenantConfig {
469
481
  readonly column?: string;
470
482
  }
471
- /**
472
- * Claim names shared by the SQL kit, codegen and the runtime defaults. They
473
- * follow PermDock's claim contract.
474
- */
483
+ /** Claim names shared by the SQL modules, codegen and the runtime defaults. */
475
484
  interface ClaimsConfig {
476
485
  /** Top-level claim holding the active tenant id. Defaults to `tenant_id`. */
477
486
  readonly tenant?: string;
@@ -479,11 +488,13 @@ interface ClaimsConfig {
479
488
  readonly scope?: string;
480
489
  /** Claim holding plan features per tenant (`{ [tenantId]: string[] }`). Defaults to `features`. */
481
490
  readonly features?: string;
491
+ /** Claim the memberships hook (`membership_claims()` or the provider's) writes. Defaults to `memberships`. */
492
+ readonly memberships?: string;
482
493
  }
483
494
  interface ActorConfig {
484
495
  readonly createdBy?: string;
485
496
  readonly updatedBy?: string;
486
- /** Defaults to `impersonated_by`, the column the SQL kit's `track_actor` fills. */
497
+ /** Defaults to `impersonated_by`, the column the SQL modules' `track_actor` fills. */
487
498
  readonly impersonatedBy?: string;
488
499
  }
489
500
  interface PluginFlagsConfig {
@@ -495,15 +506,20 @@ interface PluginFlagsConfig {
495
506
  interface BucketConfig {
496
507
  readonly id?: string;
497
508
  readonly public?: boolean;
498
- /** Path template with `{placeholders}`, e.g. `{orgId}/{customerId}/logo.webp`. */
499
- readonly path: string;
500
509
  /**
501
- * Generated storage policy, a PermDock policy (`{ permdock, scope }`) or
502
- * an access contract policy (`{ access }`).
510
+ * Path template with `{placeholders}`, e.g. `{organizationId}/{customerId}/logo.webp`,
511
+ * or several when the bucket stores objects in more than one layout. A last
512
+ * segment `{...rest}` matches one or more segments.
503
513
  */
504
- readonly policy?: BucketPolicyName | PermdockBucketPolicy | AccessBucketPolicy;
514
+ readonly path: string | readonly [string, ...string[]];
515
+ /** Generated storage policy, or an access contract policy (`{ access }`). */
516
+ readonly policy?: BucketPolicyName | AccessBucketPolicy;
505
517
  readonly fileSizeLimit?: string;
506
518
  readonly allowedMimeTypes?: readonly string[];
519
+ /** Keep earlier object versions. `bucket.apply()` sets it; doctor (BS302) compares it. */
520
+ readonly versioning?: boolean;
521
+ /** When noncurrent versions expire. Needs `versioning: true`. */
522
+ readonly lifecycle?: BucketLifecycle;
507
523
  }
508
524
  interface SqlConfig {
509
525
  /** Directory declarative schema files are written to. */
@@ -512,8 +528,20 @@ interface SqlConfig {
512
528
  readonly prefix?: string;
513
529
  /** Directory pgTAP files (the `pgtap` module) are written to. */
514
530
  readonly testsDir?: string;
515
- /** SQL kit modules to keep in sync (`better-supabase sql add`). */
516
- readonly kit?: readonly string[];
531
+ /**
532
+ * The SQL modules to keep in sync (`better-supabase sql add`): a list of
533
+ * names, or an object keyed by module name whose values set each module's
534
+ * mode, schema, table and column names, permission keys and options.
535
+ */
536
+ readonly modules?: readonly string[] | ModulesConfig;
537
+ }
538
+ /** `sql` with defaults applied: settings per module, and their names in order. */
539
+ interface ResolvedSqlConfig {
540
+ readonly dir: string;
541
+ readonly prefix: string;
542
+ readonly testsDir: string;
543
+ readonly modules: ModulesConfig;
544
+ readonly moduleNames: readonly string[];
517
545
  }
518
546
  interface SeedConfig {
519
547
  /** Module exporting `defineSeed(...)` as `seed` or default. */
@@ -543,10 +571,9 @@ interface DoctorConfig {
543
571
  */
544
572
  readonly policyHelperLimit?: number;
545
573
  /**
546
- * The BS405 limit in bytes. With a `permdock.config.ts` it is PermDock's
547
- * budget for `memberships` plus `attrs` (default 1024, matching
548
- * `supabase.hook.budget`) and the whole token keeps 2048. Without one it
549
- * limits the whole token's claims (default 2048).
574
+ * The BS405 limit in bytes. When the authorization provider's token hook
575
+ * has a budget, it replaces that budget and the whole token keeps 2048.
576
+ * Otherwise it limits the whole token's claims (default 2048).
550
577
  */
551
578
  readonly claimsLimit?: number;
552
579
  }
@@ -585,12 +612,51 @@ interface GeneratorInput {
585
612
  readonly output: string;
586
613
  /** Import path from `from` (a generated file) to `to`, with extension. */
587
614
  readonly importPath: (from: string, to: string) => string;
615
+ /**
616
+ * The tables and enums `gen` emits, with the TypeScript type it wrote for
617
+ * each column (after `json` overrides, codecs and enum unions). Frozen.
618
+ */
619
+ readonly model: GeneratorModel;
620
+ }
621
+ interface GeneratorColumn {
622
+ /** Name in rows, after casing. */
623
+ readonly app: string;
624
+ /** Database name. */
625
+ readonly db: string;
626
+ /** TypeScript type without `| null`. */
627
+ readonly tsType: string;
628
+ readonly nullable: boolean;
629
+ /** Optional on insert. */
630
+ readonly optional: boolean;
631
+ /** Generated or identity always: never written. */
632
+ readonly readonly: boolean;
633
+ /** Enum or check-constraint values, when the column has a closed set. */
634
+ readonly values: readonly string[] | undefined;
635
+ readonly json: boolean;
636
+ }
637
+ interface GeneratorTable {
638
+ /** Key in `schema.tables` and on the client. */
639
+ readonly key: string;
640
+ readonly schema: string;
641
+ readonly name: string;
642
+ readonly casing: Casing;
643
+ readonly columns: readonly GeneratorColumn[];
644
+ }
645
+ interface GeneratorModel {
646
+ readonly tables: readonly GeneratorTable[];
647
+ readonly enums: readonly {
648
+ readonly schema: string;
649
+ readonly name: string;
650
+ readonly values: readonly string[];
651
+ }[];
588
652
  }
589
653
  /**
590
654
  * Codegen extension point. First-party generators: `zod()`, `valibot()`,
591
655
  * `jsonSchema()`. Prove custom ones with `testGenerator`.
592
656
  */
593
657
  interface Generator {
658
+ /** The generator contract it targets. `gen` refuses versions it doesn't know. */
659
+ readonly apiVersion?: 1;
594
660
  readonly name: string;
595
661
  generate(input: GeneratorInput): readonly GeneratedFile[] | Promise<readonly GeneratedFile[]>;
596
662
  }
@@ -607,11 +673,31 @@ interface RealtimeConfig {
607
673
  * lacks the tenant column and is not listed here fails to install.
608
674
  */
609
675
  readonly global?: readonly string[];
676
+ /**
677
+ * Tables in `tables` whose rows belong to one user: table to its user
678
+ * column (`{ notifications: "user_id" }`). They broadcast on a topic per
679
+ * user, `bs:t:<schema>.<table>:u:<user id>`, which only that user
680
+ * receives, instead of the tenant's topic.
681
+ */
682
+ readonly users?: Readonly<Record<string, string>>;
683
+ /**
684
+ * Writes the `realtime.messages` policies of the topics that `from`
685
+ * exports (`defineTopic`) to `output`, a file in `supabase/schemas`, on
686
+ * `better-supabase sql sync`; `sql sync --check` fails when it is stale.
687
+ */
688
+ readonly policies?: TopicPoliciesConfig;
689
+ }
690
+ /** `realtime.policies`: where topic policies come from and go. */
691
+ interface TopicPoliciesConfig {
692
+ /** Modules that export `defineTopic` results. Node imports them. */
693
+ readonly from: readonly string[];
694
+ /** The SQL file to write, such as `supabase/schemas/905_topics.sql`. */
695
+ readonly output: string;
610
696
  }
611
697
  interface EntitlementsConfig {
612
698
  /**
613
699
  * `table.column` (or `schema.table.column`) holding each tenant's Stripe
614
- * customer id, read by the `entitlements` SQL kit module. Required
700
+ * customer id, read by the `entitlements` SQL module. Required
615
701
  * without the `organizations` module; with it, defaults to the
616
702
  * `stripe_customer_id` column that module adds.
617
703
  */
@@ -619,22 +705,64 @@ interface EntitlementsConfig {
619
705
  /** The tenant id column of that table. Defaults to `id`. */
620
706
  readonly key?: string;
621
707
  /**
622
- * With a PermDock manifest, `has_entitlement` and `feature_claims` read
623
- * PermDock's memberships (`member_<scope>_ids()` and
624
- * `member_<scope>_ids_for(user)`) instead of `better_supabase.memberships`.
625
- * `scope` is the PermDock scope tenants are. It defaults to the manifest's
626
- * root scope (the `rls.scopes` entry without `within`); `false` keeps the
627
- * kit's memberships table.
708
+ * Where `has_entitlement` and `feature_claims` read memberships from.
709
+ * `"provider"` calls the authorization provider's `memberIds` and
710
+ * `memberIdsFor` functions; `"tenant"` reads `better_supabase.memberships`.
711
+ * Defaults to `"provider"` when `authorization` is set, else `"tenant"`.
628
712
  */
629
- readonly permdock?: false | {
630
- readonly scope?: string;
713
+ readonly memberships?: "tenant" | "provider";
714
+ /**
715
+ * Where each tenant's entitlements come from. `"stripe-sync"` (the
716
+ * default) reads the Stripe Sync Engine's `stripe.active_entitlements`
717
+ * through `customer`. `{ plans }` reads a plan catalog: the tenant's
718
+ * active subscription and the features its plan includes. `"custom"`
719
+ * leaves `better_supabase.tenant_entitlements(tenant)` to you; the module
720
+ * writes the checks and the claim over it.
721
+ */
722
+ readonly source?: "stripe-sync" | "custom" | EntitlementPlansSource;
723
+ /**
724
+ * The shape of the features claim `feature_claims` writes, which every
725
+ * token carries. `false` writes `{}` (check entitlements in SQL with
726
+ * `has_entitlement` only); `maxTenants` keeps at most that many tenants;
727
+ * `keys` writes short codes instead of the feature keys. Pass the same
728
+ * `keys` to `hasEntitlement`.
729
+ */
730
+ readonly claim?: false | {
731
+ readonly maxTenants?: number;
732
+ readonly keys?: Readonly<Record<string, string>>;
631
733
  };
632
734
  }
633
- interface PermdockPathsConfig {
634
- /** What `permdock supabase inspect --out` writes. Defaults to `permdock.manifest.json`. */
635
- readonly manifest?: string;
636
- /** What `permdock catalog` writes. Defaults to `permissions.catalog.json`. */
637
- readonly catalog?: string;
735
+ /** `entitlements.source.plans`: a plan catalog in your own tables. */
736
+ interface EntitlementPlansSource {
737
+ readonly plans: {
738
+ readonly subscriptions: {
739
+ /** `table` or `schema.table`. */
740
+ readonly table: string;
741
+ /** The tenant id column. */
742
+ readonly tenant: string;
743
+ /** The plan key column. */
744
+ readonly plan: string;
745
+ /** A status column; with it, only rows in `activeStatuses` count. */
746
+ readonly status?: string;
747
+ /** Defaults to `["active", "trialing"]`. */
748
+ readonly activeStatuses?: readonly string[];
749
+ };
750
+ readonly features: {
751
+ /** `table` or `schema.table`. */
752
+ readonly table: string;
753
+ /** The plan key column. */
754
+ readonly plan: string;
755
+ /** The feature key column: what `has_entitlement` and the claim name. */
756
+ readonly feature: string;
757
+ /** A boolean column; with it, only included features count. */
758
+ readonly included?: string;
759
+ /**
760
+ * A column with the feature's value (a number, text or jsonb), such as
761
+ * a limit, that `tenant_entitlement_value` returns.
762
+ */
763
+ readonly value?: string;
764
+ };
765
+ };
638
766
  }
639
767
  /** pgvector distance: `<=>` (cosine), `<->` (l2) or `<#>` (negative inner product). */
640
768
  type VectorDistance = "cosine" | "l2" | "inner_product";
@@ -642,21 +770,70 @@ type VectorDistance = "cosine" | "l2" | "inner_product";
642
770
  type VectorSearchConfig = string | {
643
771
  readonly column: string;
644
772
  readonly distance?: VectorDistance;
773
+ /** The column's pgvector type. Defaults to `vector`. */
774
+ readonly type?: "vector" | "halfvec";
775
+ /** The primary key column `db.$search({ score: true })` merges by. Defaults to `id`. */
776
+ readonly key?: string;
777
+ /**
778
+ * Fuses a full-text ranking over a `tsvector` column with the vector
779
+ * ranking (reciprocal rank fusion), for `db.$search({ text })`.
780
+ */
781
+ readonly hybrid?: {
782
+ readonly tsvector: string;
783
+ /** The query's text search configuration. Defaults to `simple`. */
784
+ readonly config?: string;
785
+ /** The RRF constant. Defaults to 60. */
786
+ readonly k?: number;
787
+ };
788
+ /** A SQL expression over the row `t` the score is multiplied by, such as `t.priority`. */
789
+ readonly boost?: string;
790
+ /** Columns `db.$search({ filter })` narrows before ranking. */
791
+ readonly prefilter?: readonly string[];
792
+ /**
793
+ * A SQL condition over the row `t` every candidate must meet, applied
794
+ * before ranking: ranges, a parent row, such as
795
+ * `t.expires_at > now() and exists (select 1 from public.folders f where f.id = t.folder_id and not f.disabled)`.
796
+ */
797
+ readonly predicate?: string;
798
+ /** How `boost` combines with the score: `multiply` (default) or `add`. */
799
+ readonly boostMode?: "multiply" | "add";
800
+ /** A SQL `order by` list over the row `t` that breaks score ties, such as `t.created_at desc`. */
801
+ readonly order?: string;
645
802
  };
646
803
  /** A privilege the Data API roles can be granted on a table or view. */
647
804
  type Privilege = "select" | "insert" | "update" | "delete";
805
+ type ColumnPrivilege = `${"select" | "insert" | "update"}(${string})`;
806
+ type ExposePrivilege = Privilege | ColumnPrivilege;
807
+ /** A role the `grants` module writes privileges for. */
808
+ type ExposeRole = "anon" | "authenticated" | "service_role";
648
809
  /**
649
810
  * Data API grants for one table: privileges for `authenticated`, or per
650
- * role.
811
+ * role. `serviceRole` defaults to every privilege. For a function, keyed by
812
+ * its signature (`search_notes(text, integer)`), `execute` lists the roles
813
+ * that may call it; `service_role` is added unless `serviceRole` is false.
651
814
  */
652
- type ExposeConfig = readonly Privilege[] | {
653
- readonly anon?: readonly Privilege[];
654
- readonly authenticated?: readonly Privilege[];
815
+ type ExposeConfig = readonly ExposePrivilege[] | {
816
+ readonly anon?: readonly ExposePrivilege[];
817
+ readonly authenticated?: readonly ExposePrivilege[];
818
+ readonly serviceRole?: readonly ExposePrivilege[];
819
+ } | {
820
+ readonly execute: readonly ("anon" | "authenticated")[];
821
+ readonly serviceRole?: boolean;
655
822
  };
656
823
  /** Resolved grants for one table. */
657
824
  interface ResolvedExpose {
658
- readonly anon: readonly Privilege[];
659
- readonly authenticated: readonly Privilege[];
825
+ readonly anon: readonly ExposePrivilege[];
826
+ readonly authenticated: readonly ExposePrivilege[];
827
+ readonly serviceRole: readonly ExposePrivilege[];
828
+ }
829
+ interface RelationsConfig {
830
+ /**
831
+ * Type a to-one include as `| null` when the related table has row level
832
+ * security, even over a `not null` foreign key, since a policy can hide
833
+ * the related row. `required: true` on the include keeps it non-null.
834
+ * Defaults to `false`.
835
+ */
836
+ readonly nullableUnderRls?: boolean;
660
837
  }
661
838
  interface BetterSupabaseConfig {
662
839
  readonly $schema?: string;
@@ -680,6 +857,7 @@ interface BetterSupabaseConfig {
680
857
  /** Types for jsonb columns, keyed by `table.column`. */
681
858
  readonly json?: Readonly<Record<string, JsonTypeConfig>>;
682
859
  readonly codecs?: CodecsConfig;
860
+ readonly relations?: RelationsConfig;
683
861
  /**
684
862
  * Columns that must not be read by accident (`table.column` or
685
863
  * `schema.table.column`, database names), for the `noSensitiveSelect` rule.
@@ -693,16 +871,26 @@ interface BetterSupabaseConfig {
693
871
  */
694
872
  readonly storagePaths?: Readonly<Record<string, string>>;
695
873
  /**
696
- * Data API grants, keyed by `table` or `schema.table`. Supabase no longer
697
- * grants new tables to `anon` and `authenticated` automatically; the
698
- * `grants` SQL kit module writes these, and doctor (BS106) checks them.
699
- * Tables not listed need `select, insert, update, delete` for
700
- * `authenticated` (`select` for views).
874
+ * Function results `gen` may type as not null, keyed by function name.
875
+ * Results are `| null` by default, since Postgres can't promise a function
876
+ * returns a value. `notNull: true` covers the whole result (each element
877
+ * of a set, each column of `returns table`); a list names the
878
+ * `returns table` columns that are never null.
879
+ */
880
+ readonly functions?: Readonly<Record<string, FunctionConfig>>;
881
+ /**
882
+ * Data API grants, keyed by `table` or `schema.table`, and function
883
+ * `execute` grants, keyed by `name(argument types)` or
884
+ * `schema.name(argument types)`. Supabase no longer grants new tables to
885
+ * `anon` and `authenticated` automatically; the `grants` SQL module writes
886
+ * these as the complete privilege set (it revokes what is not listed), and
887
+ * doctor (BS106) checks them. Tables not listed need `select, insert,
888
+ * update, delete` for `authenticated` (`select` for views).
701
889
  */
702
890
  readonly expose?: Readonly<Record<string, ExposeConfig>>;
703
891
  /**
704
892
  * Modules that export `defineReadSet` results. `gen` compiles each set to
705
- * a function in the `read-sets` SQL kit module. Node imports them, so
893
+ * a function in the `read-sets` SQL module. Node imports them, so
706
894
  * relative imports need their `.ts` extension.
707
895
  */
708
896
  readonly readSets?: readonly string[];
@@ -711,25 +899,23 @@ interface BetterSupabaseConfig {
711
899
  readonly plugins?: PluginFlagsConfig;
712
900
  readonly claims?: ClaimsConfig;
713
901
  readonly buckets?: Readonly<Record<string, BucketConfig>>;
714
- /** Realtime topic templates: `{ notifications: 'org:{orgId}:notifications' }`. */
902
+ /** Realtime topic templates: `{ notifications: 'organization:{organizationId}:notifications' }`. */
715
903
  readonly topics?: Readonly<Record<string, string>>;
716
904
  readonly realtime?: RealtimeConfig;
717
905
  readonly entitlements?: EntitlementsConfig;
718
- /** Where PermDock's JSON outputs are, for doctor, `gen` and the SQL kit. */
719
- readonly permdock?: PermdockPathsConfig;
906
+ /**
907
+ * An authorization system the SQL modules, policies and doctor delegate
908
+ * to: the `provider` access model, `entitlements.memberships` and the
909
+ * hook and policy checks.
910
+ */
911
+ readonly authorization?: AuthorizationProvider;
720
912
  /**
721
913
  * Embedding columns, keyed by `table` or `schema.table`. The
722
- * `vector-search` SQL kit module writes `search_<table>(query, k)` for each,
914
+ * `vector-search` SQL module writes `search_<table>(query, k)` for each,
723
915
  * which `db.$search(table, { vector, k })` calls.
724
916
  */
725
917
  readonly vectorSearch?: Readonly<Record<string, VectorSearchConfig>>;
726
918
  readonly sql?: SqlConfig;
727
- /**
728
- * How each SQL kit module maps onto the database: `managed` tables, or
729
- * `adopt` and `custom` over the app's own, with table, column and
730
- * permission names, keyed by module name.
731
- */
732
- readonly kits?: KitsConfig;
733
919
  readonly seed?: SeedConfig;
734
920
  readonly openapi?: OpenApiConfig;
735
921
  readonly doctor?: DoctorConfig;
@@ -747,9 +933,14 @@ interface ResolvedConfig {
747
933
  readonly postgrestVersion: string;
748
934
  readonly json: Readonly<Record<string, JsonTypeConfig>>;
749
935
  readonly codecs: Required<CodecsConfig>;
936
+ readonly relations: Required<RelationsConfig>;
750
937
  readonly sensitive: readonly string[];
751
938
  readonly storagePaths: Readonly<Record<string, string>>;
939
+ readonly functions: Readonly<Record<string, FunctionConfig>>;
940
+ /** The table entries of `expose`. */
752
941
  readonly expose: Readonly<Record<string, ResolvedExpose>>;
942
+ /** The function entries of `expose`: the roles that may execute each one. */
943
+ readonly exposeFunctions: Readonly<Record<string, readonly ExposeRole[]>>;
753
944
  readonly readSets: readonly string[];
754
945
  readonly generators: readonly Generator[];
755
946
  readonly plugins: {
@@ -765,20 +956,21 @@ interface ResolvedConfig {
765
956
  readonly table?: string;
766
957
  readonly column?: string;
767
958
  readonly key: string;
768
- readonly permdock: false | {
769
- readonly scope?: string;
770
- };
959
+ readonly memberships: "tenant" | "provider";
960
+ readonly source: NonNullable<EntitlementsConfig["source"]>;
961
+ readonly claim?: NonNullable<EntitlementsConfig["claim"]>;
771
962
  };
772
- readonly permdock: Required<PermdockPathsConfig>;
773
- readonly vectorSearch: readonly {
963
+ readonly authorization?: AuthorizationProvider;
964
+ readonly vectorSearch: readonly ({
774
965
  readonly table: string;
775
966
  readonly column: string;
776
967
  readonly distance: VectorDistance;
777
- }[];
968
+ } & Omit<Exclude<VectorSearchConfig, string>, "column" | "distance">)[];
778
969
  readonly topics: Readonly<Record<string, string>>;
779
- readonly realtime: Required<RealtimeConfig>;
780
- readonly sql: Required<SqlConfig>;
781
- readonly kits: KitsConfig;
970
+ readonly realtime: Required<Omit<RealtimeConfig, "policies">> & {
971
+ readonly policies?: TopicPoliciesConfig;
972
+ };
973
+ readonly sql: ResolvedSqlConfig;
782
974
  readonly seed: Required<SeedConfig>;
783
975
  readonly openapi: Required<OpenApiConfig>;
784
976
  readonly doctor: Required<Omit<DoctorConfig, "claimsLimit">> & Pick<DoctorConfig, "claimsLimit">;
@@ -789,4 +981,4 @@ declare function defineConfig(config: BetterSupabaseConfig): BetterSupabaseConfi
789
981
  /** Applies defaults. Paths stay relative to `root`. */
790
982
  declare function resolveConfig(config: BetterSupabaseConfig, root: string): ResolvedConfig;
791
983
  //#endregion
792
- export { GeneratorMetadata as $, VectorSearchConfig as A, CatalogFunction as B, SoftDeleteConfig as C, TenantConfig as D, TableConfig as E, CatalogCheck as F, CatalogTable as G, CatalogGrant as H, CatalogColumn as I, ExtrasFunction as J, CatalogTrigger as K, CatalogColumnGrant as L, resolveConfig as M, resolveJsonSchema as N, TimestampsConfig as O, Catalog as P, ForeignKeyAction as Q, CatalogEnum as R, SeedConfig as S, SqlConfig as T, CatalogIndex as U, CatalogFunctionArg as V, CatalogPolicy as W, ExtrasHookFunction as X, ExtrasHook as Y, ExtrasTable as Z, PluginFlagsConfig as _, ClaimsConfig as a, DEFAULT_ACTIVE_TENANT as at, ResolvedConfig as b, EntitlementsConfig as c, KitsConfig as ct, Generator as d, Snapshot as et, GeneratorInput as f, PermdockPathsConfig as g, OpenApiConfig as h, CONFIG_SCHEMA_URL as i, ActiveTenantSource as it, defineConfig as j, VectorDistance as k, ExposeConfig as l, ResolvedKitModule as lt, JsonTypeConfig as m, BetterSupabaseConfig as n, SnapshotExtras as nt, CodecsConfig as o, KitMode as ot, JsonSchemaSource as p, CatalogUnique as q, BucketConfig as r, AccessKitConfig as rt, DoctorConfig as s, KitModuleConfig as st, ActorConfig as t, SnapshotBucket as tt, GeneratedFile as u, Privilege as v, SourceConfig as w, ResolvedExpose as x, RealtimeConfig as y, CatalogForeignKey as z };
984
+ export { CatalogTable as $, SeedConfig as A, resolveConfig as B, PluginFlagsConfig as C, ResolvedConfig as D, RelationsConfig as E, TenantConfig as F, CatalogColumnGrant as G, Catalog as H, TimestampsConfig as I, CatalogFunction as J, CatalogEnum as K, VectorDistance as L, SourceConfig as M, SqlConfig as N, ResolvedExpose as O, TableConfig as P, CatalogPolicy as Q, VectorSearchConfig as R, OpenApiConfig as S, RealtimeConfig as T, CatalogCheck as U, resolveJsonSchema as V, CatalogColumn as W, CatalogGrant as X, CatalogFunctionArg as Y, CatalogIndex as Z, GeneratorInput as _, ClaimsConfig as a, ExtrasTable as at, JsonSchemaSource as b, DoctorConfig as c, SnapshotBucket as ct, ExposeConfig as d, PostgresColumn as dt, CatalogTrigger as et, ExposePrivilege as f, PostgresFunction as ft, GeneratorColumn as g, Generator as h, CONFIG_SCHEMA_URL as i, ExtrasHookFunction as it, SoftDeleteConfig as j, ResolvedSqlConfig as k, EntitlementPlansSource as l, SnapshotExtras as lt, GeneratedFile as m, BetterSupabaseConfig as n, ExtrasFunction as nt, CodecsConfig as o, ForeignKeyAction as ot, ExposeRole as p, PostgresFunctionArg as pt, CatalogForeignKey as q, BucketConfig as r, ExtrasHook as rt, ColumnPrivilege as s, Snapshot as st, ActorConfig as t, CatalogUnique as tt, EntitlementsConfig as u, GeneratorMetadata as ut, GeneratorModel as v, Privilege as w, JsonTypeConfig as x, GeneratorTable as y, defineConfig as z };