better-supabase 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/README.md +187 -46
  2. package/dist/access-sql-B0dF-SoF.js +181 -0
  3. package/dist/{actor-DaJjqD5R.d.ts → actor-CQTlc1Hh.d.ts} +1 -1
  4. package/dist/adapter-Bc1o3zyy.js +1106 -0
  5. package/dist/agents-CVHGd7It.d.ts +94 -0
  6. package/dist/ai-cache-CBWs1W0k.js +80 -0
  7. package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
  8. package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
  9. package/dist/ai-chat-B24UI962.js +743 -0
  10. package/dist/ai-files-CSPNswUY.js +319 -0
  11. package/dist/ai-sdk/agents/index.d.ts +74 -0
  12. package/dist/ai-sdk/agents/index.js +159 -0
  13. package/dist/ai-sdk/batches/index.d.ts +74 -0
  14. package/dist/ai-sdk/batches/index.js +180 -0
  15. package/dist/ai-sdk/cache/index.d.ts +38 -0
  16. package/dist/ai-sdk/cache/index.js +127 -0
  17. package/dist/ai-sdk/chat/index.d.ts +2 -0
  18. package/dist/ai-sdk/chat/index.js +246 -0
  19. package/dist/ai-sdk/embeddings/index.d.ts +3 -0
  20. package/dist/ai-sdk/embeddings/index.js +2 -0
  21. package/dist/ai-sdk/files/index.d.ts +61 -0
  22. package/dist/ai-sdk/files/index.js +111 -0
  23. package/dist/ai-sdk/index.d.ts +145 -0
  24. package/dist/ai-sdk/index.js +174 -0
  25. package/dist/ai-sdk/mcp/index.d.ts +102 -0
  26. package/dist/ai-sdk/mcp/index.js +362 -0
  27. package/dist/ai-sdk/memory/index.d.ts +67 -0
  28. package/dist/ai-sdk/memory/index.js +175 -0
  29. package/dist/ai-sdk/react/index.d.ts +2 -0
  30. package/dist/ai-sdk/react/index.js +3 -0
  31. package/dist/ai-sdk/react/server.d.ts +6 -0
  32. package/dist/ai-sdk/react/server.js +7 -0
  33. package/dist/ai-sdk/workflow/index.d.ts +249 -0
  34. package/dist/ai-sdk/workflow/index.js +575 -0
  35. package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
  36. package/dist/ai-sdk/workflow/react/index.js +66 -0
  37. package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
  38. package/dist/ai-sdk/workflow/react/server.js +12 -0
  39. package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
  40. package/dist/announcements-CiyOs-xP.js +107 -0
  41. package/dist/announcements-ZRGnScWI.d.ts +72 -0
  42. package/dist/api-keys-rCGtKaZA.d.ts +156 -0
  43. package/dist/assistant-DwdpDH1q.d.ts +147 -0
  44. package/dist/astro/index.d.ts +86 -0
  45. package/dist/astro/index.js +93 -0
  46. package/dist/attributes-5dYul0u0.js +13 -0
  47. package/dist/auth-link-BjFPqwLz.d.ts +97 -0
  48. package/dist/auth-link-DrDX9KOT.js +114 -0
  49. package/dist/authorization-BFCqamMs.d.ts +172 -0
  50. package/dist/before-route-CnR0C0Jr.js +30 -0
  51. package/dist/bind-Bu_ZNa3W.d.ts +62 -0
  52. package/dist/bind-l4kAvYSv.js +97 -0
  53. package/dist/block-events-CrT8r7Fe.js +76 -0
  54. package/dist/block-fields-GFkxl4dP.js +49 -0
  55. package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
  56. package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
  57. package/dist/block-helpers-DWHxHsEQ.js +190 -0
  58. package/dist/block-hooks-BmjMyXTa.js +114 -0
  59. package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
  60. package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
  61. package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
  62. package/dist/blocks/agents/index.d.ts +3 -0
  63. package/dist/blocks/agents/index.js +123 -0
  64. package/dist/blocks/ai-cache/index.d.ts +3 -0
  65. package/dist/blocks/ai-cache/index.js +3 -0
  66. package/dist/blocks/ai-chat/index.d.ts +31 -0
  67. package/dist/blocks/ai-chat/index.js +5 -0
  68. package/dist/blocks/ai-chat/react/index.d.ts +77 -0
  69. package/dist/blocks/ai-chat/react/index.js +387 -0
  70. package/dist/blocks/ai-chat/react/server.d.ts +16 -0
  71. package/dist/blocks/ai-chat/react/server.js +14 -0
  72. package/dist/blocks/ai-files/index.d.ts +14 -0
  73. package/dist/blocks/ai-files/index.js +3 -0
  74. package/dist/blocks/ai-providers/index.d.ts +7 -0
  75. package/dist/blocks/ai-providers/index.js +211 -0
  76. package/dist/blocks/ai-tasks/index.d.ts +3 -0
  77. package/dist/blocks/ai-tasks/index.js +203 -0
  78. package/dist/blocks/announcements/index.d.ts +3 -0
  79. package/dist/blocks/announcements/index.js +3 -0
  80. package/dist/blocks/announcements/react/index.d.ts +31 -0
  81. package/dist/blocks/announcements/react/index.js +86 -0
  82. package/dist/blocks/announcements/react/server.d.ts +6 -0
  83. package/dist/blocks/announcements/react/server.js +7 -0
  84. package/dist/blocks/api-keys/index.d.ts +35 -0
  85. package/dist/blocks/api-keys/index.js +334 -0
  86. package/dist/blocks/attachments/index.d.ts +210 -0
  87. package/dist/blocks/attachments/index.js +222 -0
  88. package/dist/blocks/audit/index.d.ts +366 -0
  89. package/dist/blocks/audit/index.js +714 -0
  90. package/dist/blocks/billing/index.d.ts +265 -0
  91. package/dist/blocks/billing/index.js +400 -0
  92. package/dist/blocks/comments/index.d.ts +200 -0
  93. package/dist/blocks/comments/index.js +207 -0
  94. package/dist/blocks/connectors/index.d.ts +3 -0
  95. package/dist/blocks/connectors/index.js +164 -0
  96. package/dist/blocks/data-lifecycle/index.d.ts +251 -0
  97. package/dist/blocks/data-lifecycle/index.js +353 -0
  98. package/dist/blocks/entitlements/index.d.ts +14 -0
  99. package/dist/blocks/entitlements/index.js +25 -0
  100. package/dist/blocks/flags/index.d.ts +226 -0
  101. package/dist/blocks/flags/index.js +282 -0
  102. package/dist/blocks/inbox/index.d.ts +6 -0
  103. package/dist/blocks/inbox/index.js +499 -0
  104. package/dist/blocks/inbox/react/index.d.ts +2 -0
  105. package/dist/blocks/inbox/react/index.js +225 -0
  106. package/dist/blocks/inbox/react/server.d.ts +10 -0
  107. package/dist/blocks/inbox/react/server.js +12 -0
  108. package/dist/blocks/index.d.ts +65 -0
  109. package/dist/blocks/index.js +77 -0
  110. package/dist/blocks/jobs/index.d.ts +297 -0
  111. package/dist/blocks/jobs/index.js +1051 -0
  112. package/dist/blocks/knowledge/index.d.ts +3 -0
  113. package/dist/blocks/knowledge/index.js +3 -0
  114. package/dist/blocks/memory/index.d.ts +8 -0
  115. package/dist/blocks/memory/index.js +289 -0
  116. package/dist/blocks/notifications/index.d.ts +297 -0
  117. package/dist/blocks/notifications/index.js +425 -0
  118. package/dist/blocks/notifications/react/index.d.ts +44 -0
  119. package/dist/blocks/notifications/react/index.js +67 -0
  120. package/dist/blocks/notifications/react/server.d.ts +6 -0
  121. package/dist/blocks/notifications/react/server.js +7 -0
  122. package/dist/blocks/onboarding/index.d.ts +3 -0
  123. package/dist/blocks/onboarding/index.js +64 -0
  124. package/dist/blocks/onboarding/react/index.d.ts +28 -0
  125. package/dist/blocks/onboarding/react/index.js +78 -0
  126. package/dist/blocks/onboarding/react/server.d.ts +7 -0
  127. package/dist/blocks/onboarding/react/server.js +7 -0
  128. package/dist/blocks/organizations/index.d.ts +241 -0
  129. package/dist/blocks/organizations/index.js +400 -0
  130. package/dist/blocks/outbox/index.d.ts +3 -0
  131. package/dist/blocks/outbox/index.js +266 -0
  132. package/dist/blocks/profiles/index.d.ts +40 -0
  133. package/dist/blocks/profiles/index.js +28 -0
  134. package/dist/blocks/push/index.d.ts +185 -0
  135. package/dist/blocks/push/index.js +258 -0
  136. package/dist/blocks/settings/index.d.ts +89 -0
  137. package/dist/blocks/settings/index.js +104 -0
  138. package/dist/blocks/sso/index.d.ts +198 -0
  139. package/dist/blocks/sso/index.js +1297 -0
  140. package/dist/blocks/usage/index.d.ts +4 -0
  141. package/dist/blocks/usage/index.js +233 -0
  142. package/dist/blocks/waitlist/index.d.ts +117 -0
  143. package/dist/blocks/waitlist/index.js +132 -0
  144. package/dist/blocks/webhooks/index.d.ts +304 -0
  145. package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
  146. package/dist/blocks/workflow-builder/index.d.ts +21 -0
  147. package/dist/blocks/workflow-builder/index.js +5 -0
  148. package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
  149. package/dist/blocks/workflow-builder/react/index.js +119 -0
  150. package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
  151. package/dist/blocks/workflow-builder/react/server.js +11 -0
  152. package/dist/blocks/workflows/index.d.ts +3 -0
  153. package/dist/blocks/workflows/index.js +3 -0
  154. package/dist/blocks/workflows/react/index.d.ts +47 -0
  155. package/dist/blocks/workflows/react/index.js +137 -0
  156. package/dist/blocks/workflows/react/server.d.ts +8 -0
  157. package/dist/blocks/workflows/react/server.js +11 -0
  158. package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
  159. package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
  160. package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
  161. package/dist/channels-CkgQ_X60.js +114 -0
  162. package/dist/chat-sdk/index.d.ts +303 -0
  163. package/dist/chat-sdk/index.js +733 -0
  164. package/dist/chat-sdk/react/index.d.ts +2 -0
  165. package/dist/chat-sdk/react/index.js +3 -0
  166. package/dist/chat-sdk/react/server.d.ts +3 -0
  167. package/dist/chat-sdk/react/server.js +2 -0
  168. package/dist/claims-DDBQT6BK.js +61 -0
  169. package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
  170. package/dist/cli/bin.js +1 -1
  171. package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
  172. package/dist/cli/config-B9HkL8nF.js +2 -0
  173. package/dist/cli/config-DU7EJImt.js +49 -0
  174. package/dist/cli/config-NiPxAmUF.js +1077 -0
  175. package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
  176. package/dist/cli/{doctor-C_A-KEAz.js → doctor-B4JOm_ox.js} +991 -317
  177. package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
  178. package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
  179. package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
  180. package/dist/cli/gen-BGLb_zou.js +3100 -0
  181. package/dist/cli/gen-DAH8FM2W.js +2 -0
  182. package/dist/cli/index.d.ts +44 -5
  183. package/dist/cli/index.js +7 -7
  184. package/dist/cli/{init-DMa6M7hV.js → init-BIIwclPg.js} +242 -27
  185. package/dist/cli/{introspect-BKlaIu_M.js → introspect-DNUTuNvb.js} +5 -5
  186. package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
  187. package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
  188. package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
  189. package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
  190. package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
  191. package/dist/cli/read-sets-CETOSFx4.js +223 -0
  192. package/dist/cli/{run-Bo_NLT5n.js → run-DNWxHynX.js} +33 -23
  193. package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
  194. package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
  195. package/dist/cli/sql-D0GUtUPp.js +536 -0
  196. package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
  197. package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
  198. package/dist/cli/{version-BCtlgDQx.js → version-hr88OZG0.js} +1 -1
  199. package/dist/client/index.d.ts +3 -2
  200. package/dist/client/index.js +11 -71
  201. package/dist/client/native/index.d.ts +228 -0
  202. package/dist/client/native/index.js +361 -0
  203. package/dist/client-CI0Z2zWX.js +277 -0
  204. package/dist/cloud-event-BnmD5fb9.js +46 -0
  205. package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
  206. package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
  207. package/dist/compose-BIBNgAnq.js +53 -0
  208. package/dist/composite-Bt1YK3Ke.d.ts +146 -0
  209. package/dist/composite-DhE66P5u.js +130 -0
  210. package/dist/config/index.d.ts +6 -4
  211. package/dist/config/index.js +5 -5
  212. package/dist/{config-Bv7gvfzC.d.ts → config-D44Y7PAv.d.ts} +406 -214
  213. package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
  214. package/dist/connector-Dv8kK0MO.d.ts +107 -0
  215. package/dist/connectors-hkLCwyEz.d.ts +120 -0
  216. package/dist/context-BCrWe7ow.d.ts +237 -0
  217. package/dist/credentials/index.d.ts +31 -0
  218. package/dist/credentials/index.js +168 -0
  219. package/dist/cron-DVPUg5k3.js +145 -0
  220. package/dist/csv-CPAzEmB6.js +25 -0
  221. package/dist/db-exception-CnWcYPxL.js +15 -0
  222. package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
  223. package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
  224. package/dist/edge/index.d.ts +69 -11
  225. package/dist/edge/index.js +191 -75
  226. package/dist/elysia/index.d.ts +59 -0
  227. package/dist/elysia/index.js +62 -0
  228. package/dist/embeddings-4ZvFzjsU.js +127 -0
  229. package/dist/embeddings-C9KGQnXt.d.ts +68 -0
  230. package/dist/{refresh-CFPX0Qft.d.ts → ended-jLfvw8h-.d.ts} +20 -2
  231. package/dist/{entitlements-BiJZ4t49.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
  232. package/dist/entitlements-DRl6ZJUm.js +24 -0
  233. package/dist/envelope-DqnYGRw7.js +47 -0
  234. package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
  235. package/dist/errors-DLjJHPLK.js +44 -0
  236. package/dist/escape-like-DHfx6jRr.js +7 -0
  237. package/dist/escape-like-ImTK0ps_.d.ts +15 -0
  238. package/dist/eve/index.d.ts +220 -0
  239. package/dist/eve/index.js +504 -0
  240. package/dist/eve-gT2Fpjut.d.ts +151 -0
  241. package/dist/events/index.d.ts +4 -3
  242. package/dist/events/index.js +9 -50
  243. package/dist/events-DWDhx77e.d.ts +549 -0
  244. package/dist/executor-Bq28caBo.js +718 -0
  245. package/dist/executor-C-R4pucm.js +83 -0
  246. package/dist/executor-CaWigTyR.d.ts +148 -0
  247. package/dist/executor-D14tGopJ.d.ts +36 -0
  248. package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
  249. package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
  250. package/dist/executor-DvsBbNBS.d.ts +261 -0
  251. package/dist/expo/index.d.ts +79 -0
  252. package/dist/expo/index.js +129 -0
  253. package/dist/expo-sqlite/index.d.ts +58 -0
  254. package/dist/expo-sqlite/index.js +104 -0
  255. package/dist/field-errors-BFOa7WhB.d.ts +99 -0
  256. package/dist/field-errors-VF1yb8yI.js +13 -0
  257. package/dist/framework-CONDyPYx.js +51 -0
  258. package/dist/framework-DuVb4Xa8.d.ts +25 -0
  259. package/dist/gateway-C1ssRHnf.d.ts +130 -0
  260. package/dist/graph-BGyLLFLX.js +265 -0
  261. package/dist/h3/index.d.ts +59 -0
  262. package/dist/h3/index.js +55 -0
  263. package/dist/h3/v1/index.d.ts +63 -0
  264. package/dist/h3/v1/index.js +49 -0
  265. package/dist/history-BZih6SFP.js +64 -0
  266. package/dist/hono/index.d.ts +56 -7
  267. package/dist/hono/index.js +97 -45
  268. package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
  269. package/dist/http-Cv4T29xh.js +40 -0
  270. package/dist/http-DdYadv-o.js +126 -0
  271. package/dist/image-url-pIVlO6R1.js +41 -0
  272. package/dist/{impersonation-BgSHAYLf.js → impersonation-DcqaTBHx.js} +21 -6
  273. package/dist/inbox-i7E1ppo6.d.ts +384 -0
  274. package/dist/index-ACiNPN4Z.d.ts +74 -0
  275. package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
  276. package/dist/index-BkWT_uBO.d.ts +51 -0
  277. package/dist/index-BpFYMsi0.d.ts +53 -0
  278. package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
  279. package/dist/index-CaxrMD1A.d.ts +1 -0
  280. package/dist/index-ClmjK_o-.d.ts +55 -0
  281. package/dist/index-CtuakVRc.d.ts +267 -0
  282. package/dist/index-D48jVS-N.d.ts +246 -0
  283. package/dist/index-DDrYaUcq.d.ts +138 -0
  284. package/dist/index-DQh4VCc9.d.ts +98 -0
  285. package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
  286. package/dist/index.d.ts +65 -18
  287. package/dist/index.js +42 -14
  288. package/dist/invalidate-BBqhpxyB.d.ts +19 -0
  289. package/dist/json-CEnpTHlZ.js +16 -0
  290. package/dist/json-schema-CvER4kgT.js +502 -0
  291. package/dist/keys-4MnkWTTh.js +35 -0
  292. package/dist/kit-B5tid-q5.d.ts +60 -0
  293. package/dist/kit-Fm-Fv7q5.js +78 -0
  294. package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
  295. package/dist/knowledge-CDmiMLew.js +255 -0
  296. package/dist/lint/index.d.ts +1 -1
  297. package/dist/lint/index.js +37 -0
  298. package/dist/list/index.d.ts +3 -2
  299. package/dist/list/index.js +1 -444
  300. package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
  301. package/dist/list-query-gl808ac1.js +459 -0
  302. package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
  303. package/dist/logger-DWVYUmwi.d.ts +18 -0
  304. package/dist/mcp/index.d.ts +38 -11
  305. package/dist/mcp/index.js +82 -46
  306. package/dist/mcp/sdk/index.d.ts +105 -0
  307. package/dist/mcp/sdk/index.js +126 -0
  308. package/dist/message-CaKlqdsX.js +219 -0
  309. package/dist/message-CfDoR0Y6.d.ts +94 -0
  310. package/dist/messages-B9-5887d.js +715 -0
  311. package/dist/messages-DYP0sUTe.d.ts +59 -0
  312. package/dist/mfa-Daak8ukG.d.ts +54 -0
  313. package/dist/modules-DpPwzC7E.d.ts +192 -0
  314. package/dist/modules-dxrVK3ID.js +228 -0
  315. package/dist/nestjs/index.d.ts +68 -0
  316. package/dist/nestjs/index.js +164 -0
  317. package/dist/next/client/index.d.ts +35 -0
  318. package/dist/next/client/index.js +36 -0
  319. package/dist/next/image/index.js +3 -24
  320. package/dist/next/index.d.ts +150 -51
  321. package/dist/next/index.js +261 -107
  322. package/dist/node/index.d.ts +4 -0
  323. package/dist/node/index.js +210 -0
  324. package/dist/node-headers-AO06VhqH.d.ts +24 -0
  325. package/dist/node-headers-C71zNQHe.js +55 -0
  326. package/dist/nuxt/index.d.ts +60 -0
  327. package/dist/nuxt/index.js +64 -0
  328. package/dist/onboarding-BZGHYJks.d.ts +62 -0
  329. package/dist/openapi/index.d.ts +1 -1
  330. package/dist/openapi/index.js +3 -3
  331. package/dist/orpc/index.d.ts +70 -11
  332. package/dist/orpc/index.js +73 -24
  333. package/dist/otel/index.d.ts +7 -7
  334. package/dist/otel/index.js +87 -57
  335. package/dist/outbox-Cq7pPYvl.d.ts +161 -0
  336. package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
  337. package/dist/plugin-tfXW1-qO.js +45 -0
  338. package/dist/plugins/actor/index.d.ts +2 -2
  339. package/dist/plugins/actor/index.js +3 -3
  340. package/dist/plugins/rules/index.d.ts +11 -4
  341. package/dist/plugins/rules/index.js +40 -13
  342. package/dist/plugins/soft-delete/index.d.ts +5 -4
  343. package/dist/plugins/soft-delete/index.js +10 -5
  344. package/dist/plugins/tenant/index.d.ts +2 -2
  345. package/dist/plugins/tenant/index.js +18 -11
  346. package/dist/plugins/timestamps/index.d.ts +5 -3
  347. package/dist/plugins/timestamps/index.js +6 -4
  348. package/dist/plugins/validation/index.d.ts +2 -2
  349. package/dist/plugins/validation/index.js +10 -6
  350. package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
  351. package/dist/postgres/index.d.ts +4 -4
  352. package/dist/postgres/index.js +1 -2
  353. package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
  354. package/dist/powersync/index.d.ts +43 -0
  355. package/dist/powersync/index.js +199 -0
  356. package/dist/powersync/react/index.d.ts +87 -0
  357. package/dist/powersync/react/index.js +108 -0
  358. package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
  359. package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
  360. package/dist/provider-BH5UWZJ6.d.ts +113 -0
  361. package/dist/provider-Di3sRutW.js +57 -0
  362. package/dist/query/index.d.ts +4 -2
  363. package/dist/query/index.js +4 -3
  364. package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
  365. package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
  366. package/dist/react/index.d.ts +11 -7
  367. package/dist/react/index.js +7 -3
  368. package/dist/react/native/index.d.ts +116 -0
  369. package/dist/react/native/index.js +130 -0
  370. package/dist/react/server.d.ts +28 -10
  371. package/dist/react/server.js +22 -5
  372. package/dist/react/session.d.ts +2 -2
  373. package/dist/react-4ZqkP8da.js +79 -0
  374. package/dist/react-F80mF4-t.js +409 -0
  375. package/dist/react-router/index.d.ts +83 -0
  376. package/dist/react-router/index.js +89 -0
  377. package/dist/react-topic-seAWjL3_.js +38 -0
  378. package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
  379. package/dist/realtime/index.d.ts +4 -5
  380. package/dist/realtime/index.js +144 -82
  381. package/dist/refusal-CeJWxmkH.js +61 -0
  382. package/dist/refusal-D1rgbzNq.d.ts +15 -0
  383. package/dist/replicas-CwrYp5Zj.js +94 -0
  384. package/dist/{view-Bn6HNKUe.js → resolve-D_IcnvFd.js} +248 -240
  385. package/dist/{impersonation-BmePsuxz.d.ts → resolve-KW8nCeL6.d.ts} +29 -69
  386. package/dist/{resource-mqfJW4YF.js → resource-BsvzCMlX.js} +4 -4
  387. package/dist/{resource-DNRFP7KR.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
  388. package/dist/respond-BUgsXNgk.js +91 -0
  389. package/dist/respond-DoBijysA.d.ts +93 -0
  390. package/dist/result-D7y2fT87.d.ts +282 -0
  391. package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
  392. package/dist/run-state-CPo-1X2B.d.ts +12 -0
  393. package/dist/run-state-CgBKzYMW.js +13 -0
  394. package/dist/search-CUWCRYKL.js +9 -0
  395. package/dist/server/index.d.ts +143 -22
  396. package/dist/server/index.js +46 -14
  397. package/dist/{respond-BR1fJWOB.d.ts → server-CeVeeXwz.d.ts} +224 -85
  398. package/dist/session-ChiXDZdZ.d.ts +72 -0
  399. package/dist/shared-CBxosKK3.js +75 -0
  400. package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
  401. package/dist/shared-DDSjEGDR.d.ts +11 -0
  402. package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
  403. package/dist/sign-in-Cb1mwv6X.js +86 -0
  404. package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
  405. package/dist/simplify-DDO0j0LI.js +83 -0
  406. package/dist/solid/index.d.ts +131 -0
  407. package/dist/solid/index.js +344 -0
  408. package/dist/solid-start/index.d.ts +75 -0
  409. package/dist/solid-start/index.js +58 -0
  410. package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
  411. package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
  412. package/dist/sql/index.d.ts +313 -212
  413. package/dist/sql/index.js +34872 -6579
  414. package/dist/ssr/index.d.ts +6 -5
  415. package/dist/ssr/index.js +3 -3
  416. package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
  417. package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
  418. package/dist/stats-D_AD9GGu.js +1123 -0
  419. package/dist/storage/index.d.ts +5 -5
  420. package/dist/storage/index.js +1027 -368
  421. package/dist/store-BdH5ruDx.js +66 -0
  422. package/dist/store-CGjgWu5n.d.ts +68 -0
  423. package/dist/streams/index.d.ts +76 -0
  424. package/dist/streams/index.js +77 -0
  425. package/dist/streams/redis/index.d.ts +52 -0
  426. package/dist/streams/redis/index.js +185 -0
  427. package/dist/stripe-BMj5LtsT.js +38 -0
  428. package/dist/stripe-D04h-QBT.d.ts +136 -0
  429. package/dist/{support-wHnK6zp-.js → support-BivNqSpK.js} +32 -11
  430. package/dist/{support-view-B8SlToQX.d.ts → support-view-33Oi07TT.d.ts} +1 -1
  431. package/dist/svelte/index.d.ts +114 -0
  432. package/dist/svelte/index.js +344 -0
  433. package/dist/sveltekit/index.d.ts +116 -0
  434. package/dist/sveltekit/index.js +106 -0
  435. package/dist/tags-B99_U9Pp.js +39 -0
  436. package/dist/tags-Cx-LnIQP.d.ts +30 -0
  437. package/dist/tanstack-db/index.d.ts +71 -0
  438. package/dist/tanstack-db/index.js +72 -0
  439. package/dist/tanstack-start/index.d.ts +75 -0
  440. package/dist/tanstack-start/index.js +95 -0
  441. package/dist/tee-CoEppCER.js +101 -0
  442. package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
  443. package/dist/template-CwO38Do8.d.ts +6 -0
  444. package/dist/temporal-BJGitm-h.js +79 -0
  445. package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
  446. package/dist/tenant-I1TEZ_BX.js +27 -0
  447. package/dist/tenant-icPeuUBN.d.ts +17 -0
  448. package/dist/testing/index.d.ts +315 -41
  449. package/dist/testing/index.js +1046 -79
  450. package/dist/timing-CyTQPubY.js +92 -0
  451. package/dist/ttl-Hr34gRu8.js +12 -0
  452. package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
  453. package/dist/types-BI-0Sl2v.d.ts +359 -0
  454. package/dist/types-C05bxW-W.d.ts +220 -0
  455. package/dist/types-DGs5L0VN.d.ts +192 -0
  456. package/dist/types-TaiEeBGA.d.ts +156 -0
  457. package/dist/usage-CrvrL2vw.d.ts +177 -0
  458. package/dist/user-change-XzvgafU4.js +130 -0
  459. package/dist/vault-CSO7ss5C.d.ts +50 -0
  460. package/dist/vercel-connect/index.d.ts +47 -0
  461. package/dist/vercel-connect/index.js +119 -0
  462. package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
  463. package/dist/verify-DPuWngD4.d.ts +172 -0
  464. package/dist/{version-DOYTYwHP.js → version-Bvv6aLjZ.js} +1 -1
  465. package/dist/view-BeFcRV6G.js +99 -0
  466. package/dist/{view-CbgObAeb.d.ts → view-DbxLNu8L.d.ts} +22 -5
  467. package/dist/vue/index.d.ts +141 -0
  468. package/dist/vue/index.js +362 -0
  469. package/dist/watch-DI34G86j.d.ts +60 -0
  470. package/dist/watch-Xuxrvxq-.js +122 -0
  471. package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
  472. package/dist/workflow-builder-DJ1oHn8g.js +398 -0
  473. package/dist/workflow-sdk/builder/index.d.ts +85 -0
  474. package/dist/workflow-sdk/builder/index.js +250 -0
  475. package/dist/workflow-sdk/index.d.ts +14 -0
  476. package/dist/workflow-sdk/index.js +3 -0
  477. package/dist/workflow-sdk/world/index.d.ts +107 -0
  478. package/dist/workflow-sdk/world/index.js +702 -0
  479. package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
  480. package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
  481. package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
  482. package/dist/workflows-B0j9WKPu.d.ts +185 -0
  483. package/dist/workflows-wu1WWBn7.js +216 -0
  484. package/package.json +461 -20
  485. package/schemas/ai-message-v1.json +258 -0
  486. package/schemas/config-v1.json +1074 -140
  487. package/schemas/doctor-report-v1.json +20 -1
  488. package/schemas/snapshot-v2.json +8 -0
  489. package/skills/better-supabase/SKILL.md +41 -12
  490. package/skills/better-supabase/references/frontend.md +96 -0
  491. package/skills/better-supabase/references/plugins.md +10 -6
  492. package/skills/better-supabase/references/troubleshooting.md +2 -1
  493. package/skills/better-supabase-api/SKILL.md +76 -22
  494. package/skills/better-supabase-api/references/adapters.md +207 -0
  495. package/skills/better-supabase-api/references/ai.md +125 -0
  496. package/skills/better-supabase-api/references/expo.md +65 -0
  497. package/skills/better-supabase-api/references/powersync.md +35 -0
  498. package/skills/better-supabase-api/references/streams-credentials.md +105 -0
  499. package/skills/better-supabase-auth/SKILL.md +47 -11
  500. package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
  501. package/skills/better-supabase-testing/SKILL.md +3 -1
  502. package/dist/cli/config-dtoekM0v.js +0 -2
  503. package/dist/cli/gen-CIdSQZad.js +0 -2
  504. package/dist/cli/gen-CjElD1Vw.js +0 -2241
  505. package/dist/cli/read-sets-VQcPgxU9.js +0 -436
  506. package/dist/cli/sql-CVx-1O8G.js +0 -373
  507. package/dist/entitlements-CTEBm7IB.js +0 -20
  508. package/dist/events-aIO7vsIk.d.ts +0 -230
  509. package/dist/executor-BunPOO-k.d.ts +0 -402
  510. package/dist/executor-XycESQPH.js +0 -94
  511. package/dist/index-CWMDdEr4.d.ts +0 -50
  512. package/dist/index-DOESKG27.d.ts +0 -100
  513. package/dist/index-DmXSxbLi.d.ts +0 -62
  514. package/dist/index-Dp2VDwog.d.ts +0 -161
  515. package/dist/jobs/index.d.ts +0 -226
  516. package/dist/jobs/index.js +0 -1007
  517. package/dist/json-schema-m1fiwKgN.js +0 -208
  518. package/dist/kit-events-CTFDfSwb.js +0 -60
  519. package/dist/kit-transport-B82k1djG.d.ts +0 -33
  520. package/dist/kits-CGLLrNPd.js +0 -157
  521. package/dist/mfa-Cu96oJdw.d.ts +0 -30
  522. package/dist/notifications/index.d.ts +0 -162
  523. package/dist/notifications/index.js +0 -264
  524. package/dist/orgs/index.d.ts +0 -132
  525. package/dist/orgs/index.js +0 -245
  526. package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
  527. package/dist/permdock-sql-DgOfeixi.js +0 -51
  528. package/dist/plugin-DwARMuQp.js +0 -59
  529. package/dist/server-B1mZ7CgQ.js +0 -660
  530. package/dist/stats-Bqob3WqT.js +0 -592
  531. package/dist/support-CEPwlw2G.d.ts +0 -89
  532. package/dist/template-mbvlysOo.d.ts +0 -6
  533. package/dist/temporal-CVlIV2DZ.js +0 -40
  534. package/dist/user-change-CHFEUro1.js +0 -49
  535. package/dist/webhooks/index.d.ts +0 -285
  536. package/skills/better-supabase-auth/references/permdock.md +0 -122
@@ -0,0 +1,502 @@
1
+ import { t as isList } from "./guards-BnzDvFrz.js";
2
+ //#region src/generators/shared.ts
3
+ const INTEGER = /* @__PURE__ */ new Set([
4
+ "int2",
5
+ "int4",
6
+ "int8"
7
+ ]);
8
+ const NUMBER = /* @__PURE__ */ new Set([
9
+ "float4",
10
+ "float8",
11
+ "numeric",
12
+ "oid",
13
+ "money"
14
+ ]);
15
+ const DATETIME = /* @__PURE__ */ new Set(["timestamptz"]);
16
+ function scalarKind(column) {
17
+ if (column.enum) return {
18
+ kind: "enum",
19
+ values: column.enum
20
+ };
21
+ if (column.json) return { kind: "json" };
22
+ if (column.codec === "instant") return { kind: "instant" };
23
+ if (column.codec === "plainDateTime") return { kind: "plainDateTime" };
24
+ if (column.codec === "bigint") return { kind: "bigint" };
25
+ if (column.codec === "string") return { kind: "string" };
26
+ if (column.type === "uuid") return { kind: "uuid" };
27
+ if (INTEGER.has(column.type)) return { kind: "integer" };
28
+ if (NUMBER.has(column.type)) return { kind: "number" };
29
+ if (column.type === "bool") return { kind: "boolean" };
30
+ if (DATETIME.has(column.type)) return { kind: "datetime" };
31
+ if (column.type === "date") return { kind: "date" };
32
+ if (column.type === "record" || column.type === "void") return { kind: "unknown" };
33
+ return { kind: "string" };
34
+ }
35
+ /** App names of the columns that plugins fill from the table's flags. */
36
+ function managedColumns(table) {
37
+ const { timestamps, actor, softDelete } = table.flags;
38
+ return new Set([
39
+ timestamps?.createdAt,
40
+ timestamps?.updatedAt,
41
+ actor?.createdBy,
42
+ actor?.updatedBy,
43
+ actor?.impersonatedBy,
44
+ softDelete
45
+ ].filter((name) => name !== void 0));
46
+ }
47
+ /**
48
+ * The generated row type of a field (its element type for arrays). Storage
49
+ * path columns validate as strings and are cast to their `StoragePath` brand.
50
+ */
51
+ function rowType(table, plan) {
52
+ const type = `NonNullable<RowOf<'${table}'>['${plan.name}']>`;
53
+ return plan.column.array ? `${type}[number]` : type;
54
+ }
55
+ /** The fields a variant accepts; read-only columns are left out of writes. */
56
+ function fieldsFor(table, variant, input) {
57
+ const fields = [];
58
+ const managed = managedColumns(table);
59
+ for (const [name, column] of Object.entries(table.columns)) {
60
+ if (variant === "Insert" && (column.generated || column.insertable === false)) continue;
61
+ if (variant === "Update" && (column.generated || column.updatable === false)) continue;
62
+ fields.push({
63
+ name,
64
+ column,
65
+ scalar: scalarKind(column),
66
+ nullable: column.nullable,
67
+ optional: variant === "Update" || variant === "Insert" && (column.nullable || column.hasDefault),
68
+ customJson: Boolean(column.json && (input.config.json[`${table.schema}.${table.name}.${column.db}`] ?? input.config.json[`${table.name}.${column.db}`])),
69
+ managed: managed.has(name)
70
+ });
71
+ }
72
+ return fields;
73
+ }
74
+ const TEMPORAL_GUARDS = {
75
+ instant: "isInstant",
76
+ plainDateTime: "isPlainDateTime"
77
+ };
78
+ /**
79
+ * The `better-supabase` guards the generated validators call. They check
80
+ * `Symbol.toStringTag`, so the module never reads `Temporal` when it loads.
81
+ */
82
+ function temporalGuardImport(input) {
83
+ const names = /* @__PURE__ */ new Set();
84
+ for (const [, table] of tableEntries(input)) for (const plan of fieldsFor(table, "Row", input)) {
85
+ if (plan.customJson || plan.column.storage !== void 0) continue;
86
+ const guard = TEMPORAL_GUARDS[plan.scalar.kind];
87
+ if (guard) names.add(guard);
88
+ }
89
+ return names.size === 0 ? void 0 : `import { ${[...names].sort().join(", ")} } from "better-supabase";`;
90
+ }
91
+ const EXAMPLE = /^\s*@example\s+(.+?)\s*$/gm;
92
+ /**
93
+ * Splits a comment into its description and `@example` lines. An example is
94
+ * JSON (`@example 42`, `@example "KVK-1"`) or, when it doesn't parse, text.
95
+ */
96
+ function parseComment(comment) {
97
+ if (!comment) return { examples: [] };
98
+ const examples = [...comment.matchAll(EXAMPLE)].map((match) => {
99
+ const raw = match[1] ?? "";
100
+ try {
101
+ return JSON.parse(raw);
102
+ } catch {
103
+ return raw;
104
+ }
105
+ });
106
+ const description = comment.replace(EXAMPLE, "").trim();
107
+ return description ? {
108
+ description,
109
+ examples
110
+ } : { examples };
111
+ }
112
+ const COMPARISON = /^(?:(char_length|length)\(\(?"?(\w+)"?\)?(?:::[\w ]+)?\)|\(?"?(\w+)"?\)?(?:::[\w ]+)?)\s*(>=|>|<=|<)\s*\(?'?(-?\d+(?:\.\d+)?)'?\)?(?:::[\w ]+)?$/;
113
+ const REVERSED = /^\(?'?(-?\d+(?:\.\d+)?)'?\)?(?:::[\w ]+)?\s*(>=|>|<=|<)\s*(?:(char_length|length)\(\(?"?(\w+)"?\)?(?:::[\w ]+)?\)|\(?"?(\w+)"?\)?(?:::[\w ]+)?)$/;
114
+ const FLIP = {
115
+ ">=": "<=",
116
+ ">": "<",
117
+ "<=": ">=",
118
+ "<": ">"
119
+ };
120
+ /** Drops parentheses that wrap the whole expression. */
121
+ function unwrap(expression) {
122
+ let text = expression.trim().replace(/^CHECK\s*/, "");
123
+ while (text.startsWith("(") && text.endsWith(")")) {
124
+ let depth = 0;
125
+ let wraps = true;
126
+ for (let i = 0; i < text.length - 1; i++) {
127
+ if (text[i] === "(") depth++;
128
+ else if (text[i] === ")") depth--;
129
+ if (depth === 0) {
130
+ wraps = false;
131
+ break;
132
+ }
133
+ }
134
+ if (!wraps) break;
135
+ text = text.slice(1, -1).trim();
136
+ }
137
+ return text;
138
+ }
139
+ /** Terms of a top-level `AND` chain. */
140
+ function conjuncts(expression) {
141
+ const terms = [];
142
+ let depth = 0;
143
+ let start = 0;
144
+ for (let i = 0; i < expression.length; i++) {
145
+ const char = expression[i];
146
+ if (char === "(") depth++;
147
+ else if (char === ")") depth--;
148
+ else if (depth === 0 && expression.startsWith(" AND ", i)) {
149
+ terms.push(expression.slice(start, i));
150
+ start = i + 5;
151
+ }
152
+ }
153
+ terms.push(expression.slice(start));
154
+ return terms.map(unwrap);
155
+ }
156
+ function comparison(term) {
157
+ const forward = COMPARISON.exec(term);
158
+ if (forward) return {
159
+ column: forward[2] ?? forward[3] ?? "",
160
+ length: forward[1] !== void 0,
161
+ operator: forward[4],
162
+ value: Number(forward[5])
163
+ };
164
+ const reversed = REVERSED.exec(term);
165
+ if (!reversed) return void 0;
166
+ return {
167
+ column: reversed[4] ?? reversed[5] ?? "",
168
+ length: reversed[3] !== void 0,
169
+ operator: FLIP[reversed[2]],
170
+ value: Number(reversed[1])
171
+ };
172
+ }
173
+ /**
174
+ * Bounds from simple CHECK constraints, by column: `price >= 0`,
175
+ * `rating between 1 and 5`, `char_length(name) <= 200`. Terms joined by
176
+ * `OR`, functions other than `length` and `char_length`, and comparisons
177
+ * between columns are left out.
178
+ */
179
+ function parseCheckBounds(definition) {
180
+ const bounds = /* @__PURE__ */ new Map();
181
+ for (const term of conjuncts(unwrap(definition))) {
182
+ if (/\sOR\s/i.test(term)) continue;
183
+ const parsed = comparison(term);
184
+ if (!parsed?.column || Number.isNaN(parsed.value)) continue;
185
+ const current = bounds.get(parsed.column) ?? {};
186
+ bounds.set(parsed.column, {
187
+ ...current,
188
+ ...boundOf(parsed)
189
+ });
190
+ }
191
+ return bounds;
192
+ }
193
+ function boundOf({ length, operator, value }) {
194
+ if (length) switch (operator) {
195
+ case ">=": return { minLength: value };
196
+ case ">": return { minLength: value + 1 };
197
+ case "<=": return { maxLength: value };
198
+ case "<": return { maxLength: value - 1 };
199
+ default: return operator;
200
+ }
201
+ switch (operator) {
202
+ case ">=": return { minimum: value };
203
+ case ">": return { exclusiveMinimum: value };
204
+ case "<=": return { maximum: value };
205
+ case "<": return { exclusiveMaximum: value };
206
+ default: return operator;
207
+ }
208
+ }
209
+ /** `customer_tags` → `Customer tags`. */
210
+ function titleOf(name) {
211
+ const words = name.replaceAll("_", " ").trim();
212
+ return words.charAt(0).toUpperCase() + words.slice(1);
213
+ }
214
+ const docsIndexes = /* @__PURE__ */ new WeakMap();
215
+ const checkIndexes = /* @__PURE__ */ new WeakMap();
216
+ /** CHECK definitions by `schema.name`, built once per extras. */
217
+ function checksIndex(extras) {
218
+ let index = checkIndexes.get(extras);
219
+ if (index) return index;
220
+ const map = /* @__PURE__ */ new Map();
221
+ for (const table of extras.tables) {
222
+ const key = `${table.schema}.${table.name}`;
223
+ map.set(key, [...map.get(key) ?? [], ...table.checks.map((check) => check.definition)]);
224
+ }
225
+ index = map;
226
+ checkIndexes.set(extras, index);
227
+ return index;
228
+ }
229
+ /** The catalog keyed for `tableDocs`, built once per catalog. */
230
+ function docsIndex(catalog) {
231
+ let index = docsIndexes.get(catalog);
232
+ if (index) return index;
233
+ const entries = /* @__PURE__ */ new Map();
234
+ for (const item of [
235
+ ...catalog.tables,
236
+ ...catalog.views,
237
+ ...catalog.materializedViews ?? []
238
+ ]) {
239
+ const key = `${item.schema}.${item.name}`;
240
+ if (!entries.has(key)) entries.set(key, item);
241
+ }
242
+ const columns = /* @__PURE__ */ new Map();
243
+ for (const column of catalog.columns) {
244
+ const list = columns.get(column.table_id);
245
+ if (list) list.push(column);
246
+ else columns.set(column.table_id, [column]);
247
+ }
248
+ index = {
249
+ entries,
250
+ columns
251
+ };
252
+ docsIndexes.set(catalog, index);
253
+ return index;
254
+ }
255
+ /** Title, description and per-column docs, or `undefined` without a catalog. */
256
+ function tableDocs(input, table) {
257
+ const catalog = input.introspection;
258
+ if (!catalog) return void 0;
259
+ const index = docsIndex(catalog);
260
+ const entry = index.entries.get(`${table.schema}.${table.name}`);
261
+ const checks = /* @__PURE__ */ new Map();
262
+ const addChecks = (definition) => {
263
+ for (const [column, bounds] of parseCheckBounds(definition)) checks.set(column, {
264
+ ...checks.get(column),
265
+ ...bounds
266
+ });
267
+ };
268
+ const extras = input.extras;
269
+ for (const definition of extras ? checksIndex(extras).get(`${table.schema}.${table.name}`) ?? [] : []) addChecks(definition);
270
+ const fields = /* @__PURE__ */ new Map();
271
+ for (const column of entry ? index.columns.get(entry.id) ?? [] : []) {
272
+ if (column.check) addChecks(column.check);
273
+ const { description, examples } = parseComment(column.comment);
274
+ fields.set(column.name, {
275
+ ...description === void 0 ? {} : { description },
276
+ ...examples.length > 0 ? { examples } : {}
277
+ });
278
+ }
279
+ for (const [column, bounds] of checks) fields.set(column, {
280
+ ...fields.get(column),
281
+ ...bounds
282
+ });
283
+ const { description } = parseComment(entry?.comment ?? null);
284
+ return {
285
+ title: titleOf(table.name),
286
+ ...description === void 0 ? {} : { description },
287
+ fields
288
+ };
289
+ }
290
+ /** A variant's title: `Customers`, `Customers insert`, `Customers update`. */
291
+ function variantTitle(docs, variant) {
292
+ return variant === "Row" ? docs.title : `${docs.title} ${variant.toLowerCase()}`;
293
+ }
294
+ function exampleFits(scalar, value) {
295
+ switch (scalar.kind) {
296
+ case "uuid":
297
+ case "string":
298
+ case "datetime":
299
+ case "date": return typeof value === "string";
300
+ case "enum": return typeof value === "string" && scalar.values.includes(value);
301
+ case "integer": return Number.isInteger(value);
302
+ case "number": return typeof value === "number";
303
+ case "boolean": return typeof value === "boolean";
304
+ case "json":
305
+ case "unknown": return true;
306
+ case "instant":
307
+ case "plainDateTime":
308
+ case "bigint": return false;
309
+ default: return scalar;
310
+ }
311
+ }
312
+ /**
313
+ * The docs a field's validator can carry: value bounds on numbers, length
314
+ * bounds on text, and only examples its type accepts.
315
+ */
316
+ function fieldDocs(docs, plan) {
317
+ const found = docs?.fields.get(plan.column.db);
318
+ if (!found || plan.customJson || plan.column.storage !== void 0) return {};
319
+ const numeric = !plan.column.array && (plan.scalar.kind === "integer" || plan.scalar.kind === "number");
320
+ const text = !plan.column.array && plan.scalar.kind === "string";
321
+ const fits = (value) => value === null && plan.nullable || (plan.column.array ? Array.isArray(value) && value.every((item) => exampleFits(plan.scalar, item)) : exampleFits(plan.scalar, value));
322
+ const examples = found.examples?.filter(fits) ?? [];
323
+ return {
324
+ ...found.description === void 0 ? {} : { description: found.description },
325
+ ...examples.length > 0 ? { examples } : {},
326
+ ...numeric ? pick(found, [
327
+ "minimum",
328
+ "exclusiveMinimum",
329
+ "maximum",
330
+ "exclusiveMaximum"
331
+ ]) : {},
332
+ ...text ? pick(found, ["minLength", "maxLength"]) : {}
333
+ };
334
+ }
335
+ function pick(bounds, keys) {
336
+ const out = {};
337
+ for (const key of keys) {
338
+ const value = bounds[key];
339
+ if (value !== void 0) out[key] = value;
340
+ }
341
+ return out;
342
+ }
343
+ function optionalLine(line) {
344
+ return line === void 0 ? [] : [line];
345
+ }
346
+ function variantsFor(table) {
347
+ if (table.kind !== "view") return [
348
+ "Row",
349
+ "Insert",
350
+ "Update"
351
+ ];
352
+ const columns = Object.values(table.columns).filter((column) => !column.generated);
353
+ return [
354
+ "Row",
355
+ ...columns.some((column) => column.insertable !== false) ? ["Insert"] : [],
356
+ ...columns.some((column) => column.updatable !== false) ? ["Update"] : []
357
+ ];
358
+ }
359
+ function tableEntries(input) {
360
+ return Object.entries(input.meta.tables).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
361
+ }
362
+ function propertyKey(name) {
363
+ return /^[A-Za-z_$][\w$]*$/.test(name) ? name : JSON.stringify(name);
364
+ }
365
+ /** `customerTags` + `Insert` → `customerTagsInsert`. */
366
+ function schemaName(table, variant) {
367
+ return `${table.replace(/^[A-Z]/, (c) => c.toLowerCase())}${variant}`;
368
+ }
369
+ /** Output path next to the main module: `generated.ts` → `generated.zod.ts`. */
370
+ function siblingPath(output, suffix) {
371
+ return output.replace(/(\.[cm]?ts)?$/, `.${suffix}`);
372
+ }
373
+ const HEADER = "// Generated by better-supabase. Do not edit; run `better-supabase gen`.\n";
374
+ /** `./metadata.ts#metadataSchema` → `{ from: './metadata.ts', name: 'metadataSchema' }`. */
375
+ function parseImport(spec) {
376
+ const [from, name] = spec.split("#");
377
+ if (!from || !name) throw new Error(`Expected "path#export", got "${spec}"`);
378
+ return {
379
+ from,
380
+ name
381
+ };
382
+ }
383
+ //#endregion
384
+ //#region src/generators/json-schema.ts
385
+ function scalar(kind) {
386
+ switch (kind.kind) {
387
+ case "uuid": return {
388
+ type: "string",
389
+ format: "uuid"
390
+ };
391
+ case "string": return { type: "string" };
392
+ case "integer": return { type: "integer" };
393
+ case "number": return { type: "number" };
394
+ case "boolean": return { type: "boolean" };
395
+ case "datetime": return {
396
+ type: "string",
397
+ format: "date-time"
398
+ };
399
+ case "date": return {
400
+ type: "string",
401
+ format: "date"
402
+ };
403
+ case "instant": return {
404
+ type: "string",
405
+ format: "date-time"
406
+ };
407
+ case "plainDateTime": return {
408
+ type: "string",
409
+ pattern: "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?$"
410
+ };
411
+ case "bigint": return {
412
+ type: "string",
413
+ pattern: "^-?\\d+$"
414
+ };
415
+ case "json":
416
+ case "unknown": return {};
417
+ case "enum": return {
418
+ type: "string",
419
+ enum: [...kind.values]
420
+ };
421
+ default: return kind;
422
+ }
423
+ }
424
+ function property(plan, docs) {
425
+ const { description, examples, ...bounds } = docs;
426
+ const schema = {
427
+ ...nullable(plan, bounds),
428
+ ...description === void 0 ? {} : { description },
429
+ ...examples === void 0 ? {} : { examples: [...examples] }
430
+ };
431
+ return plan.managed ? {
432
+ ...schema,
433
+ readOnly: true
434
+ } : schema;
435
+ }
436
+ function nullable(plan, bounds) {
437
+ let schema = {
438
+ ...scalar(plan.scalar),
439
+ ...bounds
440
+ };
441
+ if (plan.column.array) schema = {
442
+ type: "array",
443
+ items: schema
444
+ };
445
+ if (!plan.nullable) return schema;
446
+ if (Object.keys(schema).length === 0) return schema;
447
+ const { enum: values, ...rest } = schema;
448
+ if (isList(values)) return {
449
+ ...rest,
450
+ type: ["string", "null"],
451
+ enum: [...values, null]
452
+ };
453
+ return typeof schema["type"] === "string" ? {
454
+ ...schema,
455
+ type: [schema["type"], "null"]
456
+ } : { anyOf: [schema, { type: "null" }] };
457
+ }
458
+ /** JSON Schema (2020-12) `$defs` for every table: `customersRow`, `customersInsert`, ... */
459
+ function buildJsonSchema(input, id) {
460
+ const defs = {};
461
+ for (const [key, table] of tableEntries(input)) {
462
+ const docs = tableDocs(input, table);
463
+ for (const variant of variantsFor(table)) {
464
+ const properties = {};
465
+ const required = [];
466
+ for (const plan of fieldsFor(table, variant, input)) {
467
+ properties[plan.name] = property(plan, fieldDocs(docs, plan));
468
+ if (!plan.optional) required.push(plan.name);
469
+ }
470
+ defs[`${key}${variant}`] = {
471
+ ...docs ? {
472
+ title: variantTitle(docs, variant),
473
+ ...docs.description === void 0 ? {} : { description: docs.description }
474
+ } : {},
475
+ type: "object",
476
+ properties,
477
+ ...required.length > 0 ? { required } : {},
478
+ additionalProperties: false
479
+ };
480
+ }
481
+ }
482
+ return {
483
+ $schema: "https://json-schema.org/draft/2020-12/schema",
484
+ ...id ? { $id: id } : {},
485
+ $defs: defs
486
+ };
487
+ }
488
+ /** Writes the JSON Schema document; `createOpenApi` reuses the same `$defs`. */
489
+ function jsonSchema(options = {}) {
490
+ return {
491
+ apiVersion: 1,
492
+ name: "json-schema",
493
+ generate(input) {
494
+ return [{
495
+ path: options.output ?? siblingPath(input.config.output, "schema.json"),
496
+ contents: `${JSON.stringify(buildJsonSchema(input, options.id), null, 2)}\n`
497
+ }];
498
+ }
499
+ };
500
+ }
501
+ //#endregion
502
+ export { fieldsFor as a, propertyKey as c, siblingPath as d, tableDocs as f, variantsFor as g, variantTitle as h, fieldDocs as i, rowType as l, temporalGuardImport as m, jsonSchema as n, optionalLine as o, tableEntries as p, HEADER as r, parseImport as s, buildJsonSchema as t, schemaName as u };
@@ -0,0 +1,35 @@
1
+ import { n as decodeJwtPayload } from "./base64-D2gsioCY.js";
2
+ import { a as tenantClaimPaths, i as claimsOf, n as claimAt } from "./claims-PqzCxaTD.js";
3
+ //#region src/bindings/keys.ts
4
+ /**
5
+ * The session's user id. With `tokens-only` cookies and no stored user,
6
+ * auth-js puts a placeholder in `session.user` whose getters throw, so the
7
+ * id falls back to the token's `sub`.
8
+ */
9
+ function sessionUserId(session) {
10
+ try {
11
+ if (typeof session.user.id === "string") return session.user.id;
12
+ } catch {}
13
+ const sub = decodeJwtPayload(session.access_token)?.["sub"];
14
+ return typeof sub === "string" ? sub : null;
15
+ }
16
+ /** The tenant claim `config.claims.tenant` names, for a signed-in caller. */
17
+ function claimedTenant(auth, meta) {
18
+ if (auth.status !== "signed-in") return void 0;
19
+ for (const path of tenantClaimPaths(claimsOf(meta).tenant)) {
20
+ const value = claimAt(auth.claims, path);
21
+ if (value !== void 0) return value;
22
+ }
23
+ }
24
+ const specKeys = /* @__PURE__ */ new WeakMap();
25
+ /** Specs are immutable, so a memoized or module-level spec is serialized once. */
26
+ function specKey(spec) {
27
+ let key = specKeys.get(spec);
28
+ if (key === void 0) {
29
+ key = JSON.stringify(spec, (_key, value) => typeof value === "bigint" ? { $bigint: value.toString() } : value);
30
+ specKeys.set(spec, key);
31
+ }
32
+ return key;
33
+ }
34
+ //#endregion
35
+ export { sessionUserId as n, specKey as r, claimedTenant as t };
@@ -0,0 +1,60 @@
1
+ import { b as DbError } from "./result-D7y2fT87.js";
2
+ import { r as AuthState } from "./resolve-KW8nCeL6.js";
3
+ import { t as AuthSession } from "./view-DbxLNu8L.js";
4
+ import { r as GuardOptions } from "./respond-DoBijysA.js";
5
+ import { StandardSchemaV1 } from "@standard-schema/spec";
6
+ //#region src/server/kit.d.ts
7
+ /** What a server action returns: plain data, safe across any serialization boundary. */
8
+ type ActionResult<T> = {
9
+ readonly ok: true;
10
+ readonly data: T;
11
+ readonly error: null;
12
+ } | {
13
+ readonly ok: false;
14
+ readonly data: null;
15
+ readonly error: DbError;
16
+ };
17
+ /**
18
+ * Checks after `allow`, `aal` and `scopes`. A caller who fails one gets
19
+ * `forbidden`: an `ActionResult` error, a 403, or the framework's refusal.
20
+ */
21
+ interface AuthorizeOptions<I, C, P, R extends boolean> {
22
+ /** Refuse callers without an active tenant, so `ctx.tenant` is a string. */
23
+ readonly requireTenant?: R;
24
+ /** Admit only users holding one of these roles at `roleClaim`. */
25
+ readonly roles?: readonly string[];
26
+ /** The dotted claim path `roles` reads: one string or an array. Defaults to `app_metadata.role`. */
27
+ readonly roleClaim?: string;
28
+ /** Return `false` to refuse the caller, e.g. `(session, input) => input.ownerId === session.user.id`. */
29
+ readonly authorize?: (session: AuthSession<C, P>, input: I) => boolean | Promise<boolean>;
30
+ }
31
+ /** What `requireTenant` and `authorize` add to the context. */
32
+ interface AuthorizedContext<C, P, R extends boolean> {
33
+ readonly session: AuthSession<C, P>;
34
+ /**
35
+ * The active tenant: the action's `tenant`, then the server's `tenant`
36
+ * option, then the tenant claim (`tenantOf(session)`).
37
+ */
38
+ readonly tenant: R extends true ? string : string | undefined;
39
+ }
40
+ type ActionInput<S> = S extends StandardSchemaV1 ? StandardSchemaV1.InferInput<S> | FormData : unknown;
41
+ type ActionParsed<S> = S extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<S> : unknown;
42
+ type Unwrapped<T> = T extends {
43
+ readonly ok: true;
44
+ readonly data: infer D;
45
+ } ? D : T extends {
46
+ readonly ok: false;
47
+ } ? never : T;
48
+ /** Guard, authorize and validate options of a framework-neutral action. */
49
+ interface BlockActionOptions<S extends StandardSchemaV1 | undefined, C = unknown, P = unknown, R extends boolean = boolean> extends GuardOptions, AuthorizeOptions<ActionParsed<S>, C, P, R> {
50
+ /** Validates the input (plain object or `FormData`) with any Standard Schema. */
51
+ readonly input?: S;
52
+ }
53
+ /** The guard and authorize checks of a loader, page or route. */
54
+ interface BlockRequireOptions<C = unknown, P = unknown, R extends boolean = boolean> extends GuardOptions, AuthorizeOptions<undefined, C, P, R> {}
55
+ /** The strings at a dotted claim path: one string, or every string in an array. */
56
+ declare function rolesAt(claims: Readonly<Record<string, unknown>> | undefined, path: string): readonly string[];
57
+ /** Whether a signed-in caller holds one of `roles` at the claim `path`. */
58
+ declare function hasRole(auth: AuthState, roles: readonly string[], path?: string): boolean;
59
+ //#endregion
60
+ export { AuthorizedContext as a, Unwrapped as c, AuthorizeOptions as i, hasRole as l, ActionParsed as n, BlockActionOptions as o, ActionResult as r, BlockRequireOptions as s, ActionInput as t, rolesAt as u };
@@ -0,0 +1,78 @@
1
+ import { n as dbError } from "./errors-B11Duf73.js";
2
+ import { n as validate } from "./standard-BK0cqJ7y.js";
3
+ import { n as claimAt } from "./claims-PqzCxaTD.js";
4
+ import { n as toSession } from "./view-BeFcRV6G.js";
5
+ import { o as settle, r as guard } from "./respond-BUgsXNgk.js";
6
+ //#region src/server/kit.ts
7
+ /** `FormData` as a plain object; repeated keys become arrays. */
8
+ function formDataObject(form) {
9
+ const out = {};
10
+ for (const key of new Set(form.keys())) {
11
+ const values = form.getAll(key);
12
+ out[key] = values.length > 1 ? values : values[0];
13
+ }
14
+ return out;
15
+ }
16
+ /** A failed `ActionResult`. */
17
+ function actionError(error) {
18
+ return {
19
+ ok: false,
20
+ data: null,
21
+ error
22
+ };
23
+ }
24
+ /** `requireTenant` and `authorize`: the session and tenant, or why the caller is refused. */
25
+ async function authorizeCaller(auth, checks, input, tenant) {
26
+ const session = toSession(auth);
27
+ if (checks.requireTenant && tenant === void 0) return dbError("forbidden", "Choose an organization first", { code: "NO_TENANT" });
28
+ if (checks.roles && !hasRole(auth, checks.roles, checks.roleClaim)) return dbError("forbidden", "You do not have the role this needs", { code: "MISSING_ROLE" });
29
+ if (checks.authorize && !await checks.authorize(session, input)) return dbError("forbidden", "You are not allowed to do this", { code: "NOT_AUTHORIZED" });
30
+ return {
31
+ session,
32
+ tenant
33
+ };
34
+ }
35
+ /** `guard`, then `authorizeCaller`: the caller, or the refusal. */
36
+ async function requireCaller(auth, options, tenant) {
37
+ return guard(auth, options.allow, options.aal, options.scopes) ?? authorizeCaller(auth, options, void 0, tenant);
38
+ }
39
+ /**
40
+ * Runs an action body with the guard, input validation and authorize checks
41
+ * every adapter shares, and settles it into an `ActionResult`: `Result`s
42
+ * unwrap, thrown `DbException`s become errors, other throws propagate (so
43
+ * framework redirects keep working).
44
+ */
45
+ async function runAction(auth, options, input, tenant, body) {
46
+ const denied = guard(auth, options.allow, options.aal, options.scopes);
47
+ if (denied) return actionError(denied);
48
+ let parsed = input instanceof FormData ? formDataObject(input) : input;
49
+ if (options.input) {
50
+ const checked = await validate(options.input, parsed, "input");
51
+ if (!checked.ok) return actionError(checked.error);
52
+ parsed = checked.data;
53
+ }
54
+ const caller = await authorizeCaller(auth, options, parsed, tenant);
55
+ if ("kind" in caller) return actionError(caller);
56
+ const settled = await settle(() => body(parsed, caller));
57
+ return settled.ok ? {
58
+ ok: true,
59
+ data: settled.data,
60
+ error: null
61
+ } : actionError(settled.error);
62
+ }
63
+ /** The strings at a dotted claim path: one string, or every string in an array. */
64
+ function rolesAt(claims, path) {
65
+ const single = claimAt(claims, path);
66
+ if (single !== void 0) return [single];
67
+ let value = claims;
68
+ for (const segment of path.split(".")) value = typeof value === "object" && value !== null ? value[segment] : void 0;
69
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
70
+ }
71
+ /** Whether a signed-in caller holds one of `roles` at the claim `path`. */
72
+ function hasRole(auth, roles, path = "app_metadata.role") {
73
+ if (auth.kind !== "user") return false;
74
+ const held = rolesAt(auth.claims, path);
75
+ return roles.some((role) => held.includes(role));
76
+ }
77
+ //#endregion
78
+ export { rolesAt as a, requireCaller as i, formDataObject as n, runAction as o, hasRole as r, authorizeCaller as t };