better-supabase 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/README.md +299 -41
  2. package/dist/access-sql-B0dF-SoF.js +181 -0
  3. package/dist/actor-CQTlc1Hh.d.ts +43 -0
  4. package/dist/adapter-Bc1o3zyy.js +1106 -0
  5. package/dist/agents-CVHGd7It.d.ts +94 -0
  6. package/dist/ai-cache-CBWs1W0k.js +80 -0
  7. package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
  8. package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
  9. package/dist/ai-chat-B24UI962.js +743 -0
  10. package/dist/ai-files-CSPNswUY.js +319 -0
  11. package/dist/ai-sdk/agents/index.d.ts +74 -0
  12. package/dist/ai-sdk/agents/index.js +159 -0
  13. package/dist/ai-sdk/batches/index.d.ts +74 -0
  14. package/dist/ai-sdk/batches/index.js +180 -0
  15. package/dist/ai-sdk/cache/index.d.ts +38 -0
  16. package/dist/ai-sdk/cache/index.js +127 -0
  17. package/dist/ai-sdk/chat/index.d.ts +2 -0
  18. package/dist/ai-sdk/chat/index.js +246 -0
  19. package/dist/ai-sdk/embeddings/index.d.ts +3 -0
  20. package/dist/ai-sdk/embeddings/index.js +2 -0
  21. package/dist/ai-sdk/files/index.d.ts +61 -0
  22. package/dist/ai-sdk/files/index.js +111 -0
  23. package/dist/ai-sdk/index.d.ts +145 -0
  24. package/dist/ai-sdk/index.js +174 -0
  25. package/dist/ai-sdk/mcp/index.d.ts +102 -0
  26. package/dist/ai-sdk/mcp/index.js +362 -0
  27. package/dist/ai-sdk/memory/index.d.ts +67 -0
  28. package/dist/ai-sdk/memory/index.js +175 -0
  29. package/dist/ai-sdk/react/index.d.ts +2 -0
  30. package/dist/ai-sdk/react/index.js +3 -0
  31. package/dist/ai-sdk/react/server.d.ts +6 -0
  32. package/dist/ai-sdk/react/server.js +7 -0
  33. package/dist/ai-sdk/workflow/index.d.ts +249 -0
  34. package/dist/ai-sdk/workflow/index.js +575 -0
  35. package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
  36. package/dist/ai-sdk/workflow/react/index.js +66 -0
  37. package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
  38. package/dist/ai-sdk/workflow/react/server.js +12 -0
  39. package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
  40. package/dist/announcements-CiyOs-xP.js +107 -0
  41. package/dist/announcements-ZRGnScWI.d.ts +72 -0
  42. package/dist/api-keys-rCGtKaZA.d.ts +156 -0
  43. package/dist/assistant-DwdpDH1q.d.ts +147 -0
  44. package/dist/astro/index.d.ts +86 -0
  45. package/dist/astro/index.js +93 -0
  46. package/dist/attributes-5dYul0u0.js +13 -0
  47. package/dist/auth-link-BjFPqwLz.d.ts +97 -0
  48. package/dist/auth-link-DrDX9KOT.js +114 -0
  49. package/dist/authorization-BFCqamMs.d.ts +172 -0
  50. package/dist/before-route-CnR0C0Jr.js +30 -0
  51. package/dist/bind-Bu_ZNa3W.d.ts +62 -0
  52. package/dist/bind-l4kAvYSv.js +97 -0
  53. package/dist/block-events-CrT8r7Fe.js +76 -0
  54. package/dist/block-fields-GFkxl4dP.js +49 -0
  55. package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
  56. package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
  57. package/dist/block-helpers-DWHxHsEQ.js +190 -0
  58. package/dist/block-hooks-BmjMyXTa.js +114 -0
  59. package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
  60. package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
  61. package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
  62. package/dist/blocks/agents/index.d.ts +3 -0
  63. package/dist/blocks/agents/index.js +123 -0
  64. package/dist/blocks/ai-cache/index.d.ts +3 -0
  65. package/dist/blocks/ai-cache/index.js +3 -0
  66. package/dist/blocks/ai-chat/index.d.ts +31 -0
  67. package/dist/blocks/ai-chat/index.js +5 -0
  68. package/dist/blocks/ai-chat/react/index.d.ts +77 -0
  69. package/dist/blocks/ai-chat/react/index.js +387 -0
  70. package/dist/blocks/ai-chat/react/server.d.ts +16 -0
  71. package/dist/blocks/ai-chat/react/server.js +14 -0
  72. package/dist/blocks/ai-files/index.d.ts +14 -0
  73. package/dist/blocks/ai-files/index.js +3 -0
  74. package/dist/blocks/ai-providers/index.d.ts +7 -0
  75. package/dist/blocks/ai-providers/index.js +211 -0
  76. package/dist/blocks/ai-tasks/index.d.ts +3 -0
  77. package/dist/blocks/ai-tasks/index.js +203 -0
  78. package/dist/blocks/announcements/index.d.ts +3 -0
  79. package/dist/blocks/announcements/index.js +3 -0
  80. package/dist/blocks/announcements/react/index.d.ts +31 -0
  81. package/dist/blocks/announcements/react/index.js +86 -0
  82. package/dist/blocks/announcements/react/server.d.ts +6 -0
  83. package/dist/blocks/announcements/react/server.js +7 -0
  84. package/dist/blocks/api-keys/index.d.ts +35 -0
  85. package/dist/blocks/api-keys/index.js +334 -0
  86. package/dist/blocks/attachments/index.d.ts +210 -0
  87. package/dist/blocks/attachments/index.js +222 -0
  88. package/dist/blocks/audit/index.d.ts +366 -0
  89. package/dist/blocks/audit/index.js +714 -0
  90. package/dist/blocks/billing/index.d.ts +265 -0
  91. package/dist/blocks/billing/index.js +400 -0
  92. package/dist/blocks/comments/index.d.ts +200 -0
  93. package/dist/blocks/comments/index.js +207 -0
  94. package/dist/blocks/connectors/index.d.ts +3 -0
  95. package/dist/blocks/connectors/index.js +164 -0
  96. package/dist/blocks/data-lifecycle/index.d.ts +251 -0
  97. package/dist/blocks/data-lifecycle/index.js +353 -0
  98. package/dist/blocks/entitlements/index.d.ts +14 -0
  99. package/dist/blocks/entitlements/index.js +25 -0
  100. package/dist/blocks/flags/index.d.ts +226 -0
  101. package/dist/blocks/flags/index.js +282 -0
  102. package/dist/blocks/inbox/index.d.ts +6 -0
  103. package/dist/blocks/inbox/index.js +499 -0
  104. package/dist/blocks/inbox/react/index.d.ts +2 -0
  105. package/dist/blocks/inbox/react/index.js +225 -0
  106. package/dist/blocks/inbox/react/server.d.ts +10 -0
  107. package/dist/blocks/inbox/react/server.js +12 -0
  108. package/dist/blocks/index.d.ts +65 -0
  109. package/dist/blocks/index.js +77 -0
  110. package/dist/blocks/jobs/index.d.ts +297 -0
  111. package/dist/blocks/jobs/index.js +1051 -0
  112. package/dist/blocks/knowledge/index.d.ts +3 -0
  113. package/dist/blocks/knowledge/index.js +3 -0
  114. package/dist/blocks/memory/index.d.ts +8 -0
  115. package/dist/blocks/memory/index.js +289 -0
  116. package/dist/blocks/notifications/index.d.ts +297 -0
  117. package/dist/blocks/notifications/index.js +425 -0
  118. package/dist/blocks/notifications/react/index.d.ts +44 -0
  119. package/dist/blocks/notifications/react/index.js +67 -0
  120. package/dist/blocks/notifications/react/server.d.ts +6 -0
  121. package/dist/blocks/notifications/react/server.js +7 -0
  122. package/dist/blocks/onboarding/index.d.ts +3 -0
  123. package/dist/blocks/onboarding/index.js +64 -0
  124. package/dist/blocks/onboarding/react/index.d.ts +28 -0
  125. package/dist/blocks/onboarding/react/index.js +78 -0
  126. package/dist/blocks/onboarding/react/server.d.ts +7 -0
  127. package/dist/blocks/onboarding/react/server.js +7 -0
  128. package/dist/blocks/organizations/index.d.ts +241 -0
  129. package/dist/blocks/organizations/index.js +400 -0
  130. package/dist/blocks/outbox/index.d.ts +3 -0
  131. package/dist/blocks/outbox/index.js +266 -0
  132. package/dist/blocks/profiles/index.d.ts +40 -0
  133. package/dist/blocks/profiles/index.js +28 -0
  134. package/dist/blocks/push/index.d.ts +185 -0
  135. package/dist/blocks/push/index.js +258 -0
  136. package/dist/blocks/settings/index.d.ts +89 -0
  137. package/dist/blocks/settings/index.js +104 -0
  138. package/dist/blocks/sso/index.d.ts +198 -0
  139. package/dist/blocks/sso/index.js +1297 -0
  140. package/dist/blocks/usage/index.d.ts +4 -0
  141. package/dist/blocks/usage/index.js +233 -0
  142. package/dist/blocks/waitlist/index.d.ts +117 -0
  143. package/dist/blocks/waitlist/index.js +132 -0
  144. package/dist/blocks/webhooks/index.d.ts +304 -0
  145. package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
  146. package/dist/blocks/workflow-builder/index.d.ts +21 -0
  147. package/dist/blocks/workflow-builder/index.js +5 -0
  148. package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
  149. package/dist/blocks/workflow-builder/react/index.js +119 -0
  150. package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
  151. package/dist/blocks/workflow-builder/react/server.js +11 -0
  152. package/dist/blocks/workflows/index.d.ts +3 -0
  153. package/dist/blocks/workflows/index.js +3 -0
  154. package/dist/blocks/workflows/react/index.d.ts +47 -0
  155. package/dist/blocks/workflows/react/index.js +137 -0
  156. package/dist/blocks/workflows/react/server.d.ts +8 -0
  157. package/dist/blocks/workflows/react/server.js +11 -0
  158. package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
  159. package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
  160. package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
  161. package/dist/channels-CkgQ_X60.js +114 -0
  162. package/dist/chat-sdk/index.d.ts +303 -0
  163. package/dist/chat-sdk/index.js +733 -0
  164. package/dist/chat-sdk/react/index.d.ts +2 -0
  165. package/dist/chat-sdk/react/index.js +3 -0
  166. package/dist/chat-sdk/react/server.d.ts +3 -0
  167. package/dist/chat-sdk/react/server.js +2 -0
  168. package/dist/claims-DDBQT6BK.js +61 -0
  169. package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
  170. package/dist/cli/bin.js +1 -1
  171. package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
  172. package/dist/cli/config-B9HkL8nF.js +2 -0
  173. package/dist/cli/config-DU7EJImt.js +49 -0
  174. package/dist/cli/config-NiPxAmUF.js +1077 -0
  175. package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
  176. package/dist/cli/{doctor-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
  177. package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
  178. package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
  179. package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
  180. package/dist/cli/gen-BGLb_zou.js +3100 -0
  181. package/dist/cli/gen-DAH8FM2W.js +2 -0
  182. package/dist/cli/index.d.ts +44 -5
  183. package/dist/cli/index.js +7 -7
  184. package/dist/cli/{init-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
  185. package/dist/cli/{introspect--H7oGmcd.js → introspect-DNUTuNvb.js} +5 -5
  186. package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
  187. package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
  188. package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
  189. package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
  190. package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
  191. package/dist/cli/read-sets-CETOSFx4.js +223 -0
  192. package/dist/cli/{run-BKR2W_79.js → run-DNWxHynX.js} +33 -23
  193. package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
  194. package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
  195. package/dist/cli/sql-D0GUtUPp.js +536 -0
  196. package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
  197. package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
  198. package/dist/cli/{version-BDJuO0UR.js → version-hr88OZG0.js} +1 -1
  199. package/dist/client/index.d.ts +3 -2
  200. package/dist/client/index.js +11 -71
  201. package/dist/client/native/index.d.ts +228 -0
  202. package/dist/client/native/index.js +361 -0
  203. package/dist/client-CI0Z2zWX.js +277 -0
  204. package/dist/cloud-event-BnmD5fb9.js +46 -0
  205. package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
  206. package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
  207. package/dist/compose-BIBNgAnq.js +53 -0
  208. package/dist/composite-Bt1YK3Ke.d.ts +146 -0
  209. package/dist/composite-DhE66P5u.js +130 -0
  210. package/dist/config/index.d.ts +6 -4
  211. package/dist/config/index.js +5 -5
  212. package/dist/{config-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
  213. package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
  214. package/dist/connector-Dv8kK0MO.d.ts +107 -0
  215. package/dist/connectors-hkLCwyEz.d.ts +120 -0
  216. package/dist/context-BCrWe7ow.d.ts +237 -0
  217. package/dist/credentials/index.d.ts +31 -0
  218. package/dist/credentials/index.js +168 -0
  219. package/dist/cron-DVPUg5k3.js +145 -0
  220. package/dist/csv-CPAzEmB6.js +25 -0
  221. package/dist/db-exception-CnWcYPxL.js +15 -0
  222. package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
  223. package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
  224. package/dist/edge/index.d.ts +69 -11
  225. package/dist/edge/index.js +191 -75
  226. package/dist/elysia/index.d.ts +59 -0
  227. package/dist/elysia/index.js +62 -0
  228. package/dist/embeddings-4ZvFzjsU.js +127 -0
  229. package/dist/embeddings-C9KGQnXt.d.ts +68 -0
  230. package/dist/{refresh-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
  231. package/dist/{entitlements-DUxU4oHe.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
  232. package/dist/entitlements-DRl6ZJUm.js +24 -0
  233. package/dist/envelope-DqnYGRw7.js +47 -0
  234. package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
  235. package/dist/errors-DLjJHPLK.js +44 -0
  236. package/dist/escape-like-DHfx6jRr.js +7 -0
  237. package/dist/escape-like-ImTK0ps_.d.ts +15 -0
  238. package/dist/eve/index.d.ts +220 -0
  239. package/dist/eve/index.js +504 -0
  240. package/dist/eve-gT2Fpjut.d.ts +151 -0
  241. package/dist/events/index.d.ts +4 -3
  242. package/dist/events/index.js +9 -50
  243. package/dist/events-DWDhx77e.d.ts +549 -0
  244. package/dist/executor-Bq28caBo.js +718 -0
  245. package/dist/executor-C-R4pucm.js +83 -0
  246. package/dist/executor-CaWigTyR.d.ts +148 -0
  247. package/dist/executor-D14tGopJ.d.ts +36 -0
  248. package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
  249. package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
  250. package/dist/executor-DvsBbNBS.d.ts +261 -0
  251. package/dist/expo/index.d.ts +79 -0
  252. package/dist/expo/index.js +129 -0
  253. package/dist/expo-sqlite/index.d.ts +58 -0
  254. package/dist/expo-sqlite/index.js +104 -0
  255. package/dist/field-errors-BFOa7WhB.d.ts +99 -0
  256. package/dist/field-errors-VF1yb8yI.js +13 -0
  257. package/dist/framework-CONDyPYx.js +51 -0
  258. package/dist/framework-DuVb4Xa8.d.ts +25 -0
  259. package/dist/gateway-C1ssRHnf.d.ts +130 -0
  260. package/dist/graph-BGyLLFLX.js +265 -0
  261. package/dist/h3/index.d.ts +59 -0
  262. package/dist/h3/index.js +55 -0
  263. package/dist/h3/v1/index.d.ts +63 -0
  264. package/dist/h3/v1/index.js +49 -0
  265. package/dist/history-BZih6SFP.js +64 -0
  266. package/dist/hono/index.d.ts +56 -7
  267. package/dist/hono/index.js +97 -45
  268. package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
  269. package/dist/http-Cv4T29xh.js +40 -0
  270. package/dist/http-DdYadv-o.js +126 -0
  271. package/dist/image-url-pIVlO6R1.js +41 -0
  272. package/dist/impersonation-DcqaTBHx.js +148 -0
  273. package/dist/inbox-i7E1ppo6.d.ts +384 -0
  274. package/dist/index-ACiNPN4Z.d.ts +74 -0
  275. package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
  276. package/dist/index-BkWT_uBO.d.ts +51 -0
  277. package/dist/index-BpFYMsi0.d.ts +53 -0
  278. package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
  279. package/dist/index-CaxrMD1A.d.ts +1 -0
  280. package/dist/index-ClmjK_o-.d.ts +55 -0
  281. package/dist/index-CtuakVRc.d.ts +267 -0
  282. package/dist/index-D48jVS-N.d.ts +246 -0
  283. package/dist/index-DDrYaUcq.d.ts +138 -0
  284. package/dist/index-DQh4VCc9.d.ts +98 -0
  285. package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
  286. package/dist/index.d.ts +65 -18
  287. package/dist/index.js +42 -14
  288. package/dist/invalidate-BBqhpxyB.d.ts +19 -0
  289. package/dist/json-CEnpTHlZ.js +16 -0
  290. package/dist/json-schema-CvER4kgT.js +502 -0
  291. package/dist/keys-4MnkWTTh.js +35 -0
  292. package/dist/kit-B5tid-q5.d.ts +60 -0
  293. package/dist/kit-Fm-Fv7q5.js +78 -0
  294. package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
  295. package/dist/knowledge-CDmiMLew.js +255 -0
  296. package/dist/lint/index.d.ts +1 -1
  297. package/dist/lint/index.js +37 -0
  298. package/dist/list/index.d.ts +3 -2
  299. package/dist/list/index.js +1 -444
  300. package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
  301. package/dist/list-query-gl808ac1.js +459 -0
  302. package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
  303. package/dist/logger-DWVYUmwi.d.ts +18 -0
  304. package/dist/mcp/index.d.ts +38 -11
  305. package/dist/mcp/index.js +82 -46
  306. package/dist/mcp/sdk/index.d.ts +105 -0
  307. package/dist/mcp/sdk/index.js +126 -0
  308. package/dist/message-CaKlqdsX.js +219 -0
  309. package/dist/message-CfDoR0Y6.d.ts +94 -0
  310. package/dist/messages-B9-5887d.js +715 -0
  311. package/dist/messages-DYP0sUTe.d.ts +59 -0
  312. package/dist/{mfa-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
  313. package/dist/modules-DpPwzC7E.d.ts +192 -0
  314. package/dist/modules-dxrVK3ID.js +228 -0
  315. package/dist/nestjs/index.d.ts +68 -0
  316. package/dist/nestjs/index.js +164 -0
  317. package/dist/next/client/index.d.ts +35 -0
  318. package/dist/next/client/index.js +36 -0
  319. package/dist/next/image/index.js +3 -24
  320. package/dist/next/index.d.ts +150 -51
  321. package/dist/next/index.js +261 -107
  322. package/dist/node/index.d.ts +4 -0
  323. package/dist/node/index.js +210 -0
  324. package/dist/node-headers-AO06VhqH.d.ts +24 -0
  325. package/dist/node-headers-C71zNQHe.js +55 -0
  326. package/dist/nuxt/index.d.ts +60 -0
  327. package/dist/nuxt/index.js +64 -0
  328. package/dist/onboarding-BZGHYJks.d.ts +62 -0
  329. package/dist/openapi/index.d.ts +1 -1
  330. package/dist/openapi/index.js +3 -3
  331. package/dist/orpc/index.d.ts +70 -11
  332. package/dist/orpc/index.js +73 -24
  333. package/dist/otel/index.d.ts +7 -7
  334. package/dist/otel/index.js +87 -57
  335. package/dist/outbox-Cq7pPYvl.d.ts +161 -0
  336. package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
  337. package/dist/plugin-tfXW1-qO.js +45 -0
  338. package/dist/plugins/actor/index.d.ts +2 -2
  339. package/dist/plugins/actor/index.js +3 -3
  340. package/dist/plugins/rules/index.d.ts +11 -4
  341. package/dist/plugins/rules/index.js +40 -13
  342. package/dist/plugins/soft-delete/index.d.ts +5 -4
  343. package/dist/plugins/soft-delete/index.js +10 -5
  344. package/dist/plugins/tenant/index.d.ts +2 -2
  345. package/dist/plugins/tenant/index.js +18 -11
  346. package/dist/plugins/timestamps/index.d.ts +5 -3
  347. package/dist/plugins/timestamps/index.js +6 -4
  348. package/dist/plugins/validation/index.d.ts +2 -2
  349. package/dist/plugins/validation/index.js +10 -6
  350. package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
  351. package/dist/postgres/index.d.ts +4 -4
  352. package/dist/postgres/index.js +1 -2
  353. package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
  354. package/dist/powersync/index.d.ts +43 -0
  355. package/dist/powersync/index.js +199 -0
  356. package/dist/powersync/react/index.d.ts +87 -0
  357. package/dist/powersync/react/index.js +108 -0
  358. package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
  359. package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
  360. package/dist/provider-BH5UWZJ6.d.ts +113 -0
  361. package/dist/provider-Di3sRutW.js +57 -0
  362. package/dist/query/index.d.ts +4 -2
  363. package/dist/query/index.js +4 -3
  364. package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
  365. package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
  366. package/dist/react/index.d.ts +11 -7
  367. package/dist/react/index.js +7 -3
  368. package/dist/react/native/index.d.ts +116 -0
  369. package/dist/react/native/index.js +130 -0
  370. package/dist/react/server.d.ts +28 -10
  371. package/dist/react/server.js +22 -5
  372. package/dist/react/session.d.ts +2 -2
  373. package/dist/react-4ZqkP8da.js +79 -0
  374. package/dist/react-F80mF4-t.js +409 -0
  375. package/dist/react-router/index.d.ts +83 -0
  376. package/dist/react-router/index.js +89 -0
  377. package/dist/react-topic-seAWjL3_.js +38 -0
  378. package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
  379. package/dist/realtime/index.d.ts +4 -5
  380. package/dist/realtime/index.js +144 -82
  381. package/dist/refusal-CeJWxmkH.js +61 -0
  382. package/dist/refusal-D1rgbzNq.d.ts +15 -0
  383. package/dist/replicas-CwrYp5Zj.js +94 -0
  384. package/dist/{view-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
  385. package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
  386. package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
  387. package/dist/{resource-D8iqWMr-.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
  388. package/dist/respond-BUgsXNgk.js +91 -0
  389. package/dist/respond-DoBijysA.d.ts +93 -0
  390. package/dist/result-D7y2fT87.d.ts +282 -0
  391. package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
  392. package/dist/run-state-CPo-1X2B.d.ts +12 -0
  393. package/dist/run-state-CgBKzYMW.js +13 -0
  394. package/dist/search-CUWCRYKL.js +9 -0
  395. package/dist/server/index.d.ts +143 -21
  396. package/dist/server/index.js +46 -14
  397. package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
  398. package/dist/session-ChiXDZdZ.d.ts +72 -0
  399. package/dist/shared-CBxosKK3.js +75 -0
  400. package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
  401. package/dist/shared-DDSjEGDR.d.ts +11 -0
  402. package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
  403. package/dist/sign-in-Cb1mwv6X.js +86 -0
  404. package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
  405. package/dist/simplify-DDO0j0LI.js +83 -0
  406. package/dist/solid/index.d.ts +131 -0
  407. package/dist/solid/index.js +344 -0
  408. package/dist/solid-start/index.d.ts +75 -0
  409. package/dist/solid-start/index.js +58 -0
  410. package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
  411. package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
  412. package/dist/sql/index.d.ts +330 -194
  413. package/dist/sql/index.js +34901 -6489
  414. package/dist/ssr/index.d.ts +6 -5
  415. package/dist/ssr/index.js +3 -3
  416. package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
  417. package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
  418. package/dist/stats-D_AD9GGu.js +1123 -0
  419. package/dist/storage/index.d.ts +5 -5
  420. package/dist/storage/index.js +1027 -368
  421. package/dist/store-BdH5ruDx.js +66 -0
  422. package/dist/store-CGjgWu5n.d.ts +68 -0
  423. package/dist/streams/index.d.ts +76 -0
  424. package/dist/streams/index.js +77 -0
  425. package/dist/streams/redis/index.d.ts +52 -0
  426. package/dist/streams/redis/index.js +185 -0
  427. package/dist/stripe-BMj5LtsT.js +38 -0
  428. package/dist/stripe-D04h-QBT.d.ts +136 -0
  429. package/dist/{support-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
  430. package/dist/{support-view-Da5peKFg.d.ts → support-view-33Oi07TT.d.ts} +1 -1
  431. package/dist/svelte/index.d.ts +114 -0
  432. package/dist/svelte/index.js +344 -0
  433. package/dist/sveltekit/index.d.ts +116 -0
  434. package/dist/sveltekit/index.js +106 -0
  435. package/dist/tags-B99_U9Pp.js +39 -0
  436. package/dist/tags-Cx-LnIQP.d.ts +30 -0
  437. package/dist/tanstack-db/index.d.ts +71 -0
  438. package/dist/tanstack-db/index.js +72 -0
  439. package/dist/tanstack-start/index.d.ts +75 -0
  440. package/dist/tanstack-start/index.js +95 -0
  441. package/dist/tee-CoEppCER.js +101 -0
  442. package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
  443. package/dist/template-CwO38Do8.d.ts +6 -0
  444. package/dist/temporal-BJGitm-h.js +79 -0
  445. package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
  446. package/dist/tenant-I1TEZ_BX.js +27 -0
  447. package/dist/tenant-icPeuUBN.d.ts +17 -0
  448. package/dist/testing/index.d.ts +343 -37
  449. package/dist/testing/index.js +1186 -79
  450. package/dist/timing-CyTQPubY.js +92 -0
  451. package/dist/ttl-Hr34gRu8.js +12 -0
  452. package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
  453. package/dist/types-BI-0Sl2v.d.ts +359 -0
  454. package/dist/types-C05bxW-W.d.ts +220 -0
  455. package/dist/types-DGs5L0VN.d.ts +192 -0
  456. package/dist/types-TaiEeBGA.d.ts +156 -0
  457. package/dist/usage-CrvrL2vw.d.ts +177 -0
  458. package/dist/user-change-XzvgafU4.js +130 -0
  459. package/dist/vault-CSO7ss5C.d.ts +50 -0
  460. package/dist/vercel-connect/index.d.ts +47 -0
  461. package/dist/vercel-connect/index.js +119 -0
  462. package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
  463. package/dist/verify-DPuWngD4.d.ts +172 -0
  464. package/dist/{version-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
  465. package/dist/view-BeFcRV6G.js +99 -0
  466. package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
  467. package/dist/vue/index.d.ts +141 -0
  468. package/dist/vue/index.js +362 -0
  469. package/dist/watch-DI34G86j.d.ts +60 -0
  470. package/dist/watch-Xuxrvxq-.js +122 -0
  471. package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
  472. package/dist/workflow-builder-DJ1oHn8g.js +398 -0
  473. package/dist/workflow-sdk/builder/index.d.ts +85 -0
  474. package/dist/workflow-sdk/builder/index.js +250 -0
  475. package/dist/workflow-sdk/index.d.ts +14 -0
  476. package/dist/workflow-sdk/index.js +3 -0
  477. package/dist/workflow-sdk/world/index.d.ts +107 -0
  478. package/dist/workflow-sdk/world/index.js +702 -0
  479. package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
  480. package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
  481. package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
  482. package/dist/workflows-B0j9WKPu.d.ts +185 -0
  483. package/dist/workflows-wu1WWBn7.js +216 -0
  484. package/package.json +470 -29
  485. package/schemas/ai-message-v1.json +258 -0
  486. package/schemas/config-v1.json +1074 -140
  487. package/schemas/doctor-report-v1.json +21 -1
  488. package/schemas/snapshot-v2.json +8 -0
  489. package/skills/better-supabase/SKILL.md +41 -12
  490. package/skills/better-supabase/references/frontend.md +96 -0
  491. package/skills/better-supabase/references/plugins.md +10 -6
  492. package/skills/better-supabase/references/troubleshooting.md +2 -1
  493. package/skills/better-supabase-api/SKILL.md +76 -22
  494. package/skills/better-supabase-api/references/adapters.md +207 -0
  495. package/skills/better-supabase-api/references/ai.md +125 -0
  496. package/skills/better-supabase-api/references/expo.md +65 -0
  497. package/skills/better-supabase-api/references/powersync.md +35 -0
  498. package/skills/better-supabase-api/references/streams-credentials.md +105 -0
  499. package/skills/better-supabase-auth/SKILL.md +62 -18
  500. package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
  501. package/skills/better-supabase-testing/SKILL.md +3 -1
  502. package/dist/cli/config-dtoekM0v.js +0 -2
  503. package/dist/cli/gen-BJc9vdyu.js +0 -2
  504. package/dist/cli/gen-C2osRcr5.js +0 -2204
  505. package/dist/cli/read-sets-BfMQcKy8.js +0 -289
  506. package/dist/cli/sql-DzPbfngx.js +0 -348
  507. package/dist/entitlements-CTEBm7IB.js +0 -20
  508. package/dist/events-aIO7vsIk.d.ts +0 -230
  509. package/dist/executor-BunPOO-k.d.ts +0 -402
  510. package/dist/executor-XycESQPH.js +0 -94
  511. package/dist/impersonation-VfaGc4Q_.js +0 -41
  512. package/dist/index-BGdgBPdf.d.ts +0 -161
  513. package/dist/index-DOESKG27.d.ts +0 -100
  514. package/dist/index-DmXSxbLi.d.ts +0 -62
  515. package/dist/index-Dxn2a5cw.d.ts +0 -50
  516. package/dist/jobs/index.d.ts +0 -226
  517. package/dist/jobs/index.js +0 -1007
  518. package/dist/json-schema-m1fiwKgN.js +0 -208
  519. package/dist/kit-events-CTFDfSwb.js +0 -60
  520. package/dist/kit-transport-B82k1djG.d.ts +0 -33
  521. package/dist/kits-CGLLrNPd.js +0 -157
  522. package/dist/notifications/index.d.ts +0 -162
  523. package/dist/notifications/index.js +0 -264
  524. package/dist/orgs/index.d.ts +0 -132
  525. package/dist/orgs/index.js +0 -245
  526. package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
  527. package/dist/permdock-sql-DgOfeixi.js +0 -51
  528. package/dist/plugin-DwARMuQp.js +0 -59
  529. package/dist/server-Csx2sRjg.js +0 -655
  530. package/dist/stats-Bqob3WqT.js +0 -592
  531. package/dist/support-DT-OhSxD.d.ts +0 -88
  532. package/dist/template-mbvlysOo.d.ts +0 -6
  533. package/dist/temporal-CVlIV2DZ.js +0 -40
  534. package/dist/user-change-CHFEUro1.js +0 -49
  535. package/dist/webhooks/index.d.ts +0 -285
  536. package/skills/better-supabase-auth/references/permdock.md +0 -100
@@ -0,0 +1,222 @@
1
+ import { n as dbError } from "../../errors-B11Duf73.js";
2
+ import { a as ok, r as err, t as AsyncResult } from "../../result-DzUbqgdW.js";
3
+ import { n as rpcTransport, r as sqlTransport } from "../../block-transport-BLr-ZgLc.js";
4
+ import { O as textOf, c as errorText, d as isRecord, h as optionalText, i as blockCall, k as toInstant, m as optionalInstant, n as applyTemporal, x as recordsOf, y as recordOf } from "../../block-helpers-DWHxHsEQ.js";
5
+ import { t as fromStorageError } from "../../errors-DLjJHPLK.js";
6
+ //#region src/blocks/attachments/attachments.ts
7
+ const STATUSES = [
8
+ "pending",
9
+ "clean",
10
+ "infected",
11
+ "failed"
12
+ ];
13
+ function statusOf(value) {
14
+ const status = STATUSES.find((candidate) => candidate === value);
15
+ if (status === void 0) throw new TypeError(`Unknown attachment status ${JSON.stringify(value)}`);
16
+ return status;
17
+ }
18
+ function attachmentOf(value) {
19
+ const row = recordOf(value, "attachments");
20
+ return {
21
+ id: textOf(row["id"]),
22
+ organizationId: optionalText(row["organization_id"]),
23
+ subjectType: optionalText(row["subject_type"]),
24
+ subjectId: optionalText(row["subject_id"]),
25
+ bucket: textOf(row["bucket"]),
26
+ path: textOf(row["object_path"]),
27
+ name: textOf(row["name"]),
28
+ mimeType: textOf(row["mime_type"]),
29
+ size: Number(row["size"]),
30
+ status: statusOf(row["status"]),
31
+ scanDetail: optionalText(row["scan_detail"]),
32
+ metadata: isRecord(row["metadata"]) ? row["metadata"] : {},
33
+ uploadedBy: optionalText(row["uploaded_by"]),
34
+ createdAt: toInstant(textOf(row["created_at"])),
35
+ uploadedAt: optionalInstant(row["uploaded_at"]),
36
+ scannedAt: optionalInstant(row["scanned_at"])
37
+ };
38
+ }
39
+ const notFound = () => dbError("not_found", "No attachment you can see has this id", { hint: "ATTACHMENT_NOT_FOUND" });
40
+ function stored(reply) {
41
+ return AsyncResult.from(async () => {
42
+ try {
43
+ const { data, error } = await reply;
44
+ if (error) return err(fromStorageError(error, "storage.objects"));
45
+ if (data === null || data === void 0) return err(dbError("network", "Storage returned no data"));
46
+ return ok(data);
47
+ } catch (cause) {
48
+ return err(fromStorageError(cause, "storage.objects"));
49
+ }
50
+ });
51
+ }
52
+ function lookup(call, id) {
53
+ return call("get_attachment", { id }, (value) => value).andThen((value) => Promise.resolve(isRecord(value) ? ok(attachmentOf(value)) : err(notFound())));
54
+ }
55
+ /** Attachments as the caller: the table's and the bucket's policies apply. */
56
+ function createAttachments(options) {
57
+ applyTemporal(options);
58
+ const call = blockCall(options.transport, options.schema, options.mappers);
59
+ const requireScan = options.requireScan ?? true;
60
+ const ttl = options.downloadTtl ?? 300;
61
+ const bucket = (attachment) => options.storage.from(attachment.bucket);
62
+ /** Why a file can't be read yet, or `undefined` once it can. */
63
+ const gate = (attachment) => {
64
+ return attachment.status === "clean" || !requireScan && attachment.status !== "infected" && attachment.uploadedAt !== void 0 ? void 0 : dbError("invalid_request", attachment.status === "infected" ? "The file failed the malware scan" : "The file is not scanned yet", { hint: "ATTACHMENT_NOT_SCANNED" });
65
+ };
66
+ const upload = (attachment) => call("create_attachment", {
67
+ tenant: attachment.organizationId,
68
+ name: attachment.name,
69
+ mime_type: attachment.mimeType,
70
+ size: attachment.size,
71
+ subject_type: attachment.subjectType,
72
+ subject_id: attachment.subjectId,
73
+ metadata: attachment.metadata
74
+ }, attachmentOf).andThen((created) => stored(bucket(created).createSignedUploadUrl(created.path)).map((url) => ({
75
+ attachment: created,
76
+ signedUrl: url.signedUrl,
77
+ token: url.token
78
+ })));
79
+ return {
80
+ upload,
81
+ confirm: (id) => call("confirm_attachment", { id }, attachmentOf),
82
+ get: (id) => lookup(call, id),
83
+ list: (organizationId, subject) => call("list_attachments", {
84
+ tenant: organizationId,
85
+ subject_type: subject?.type,
86
+ subject_id: subject?.id
87
+ }, (value) => recordsOf(value, "list_attachments").map(attachmentOf)),
88
+ download: (id, download = {}) => lookup(call, id).andThen((attachment) => {
89
+ const blocked = gate(attachment);
90
+ if (blocked) return Promise.resolve(err(blocked));
91
+ return stored(bucket(attachment).createSignedUrl(attachment.path, ttl, download.as === void 0 ? void 0 : { download: download.as })).map((url) => ({
92
+ attachment,
93
+ signedUrl: url.signedUrl
94
+ }));
95
+ }),
96
+ put: (attachment, file) => upload(attachment).andThen(async ({ attachment: created }) => {
97
+ const target = bucket(created);
98
+ if (!target.upload) return err(dbError("invalid_request", "The storage client has no upload", { hint: "ATTACHMENT_STORAGE_CLIENT" }));
99
+ const sent = await stored(target.upload(created.path, file, {
100
+ contentType: created.mimeType,
101
+ upsert: false
102
+ }));
103
+ if (!sent.ok) return sent;
104
+ return call("confirm_attachment", { id: created.id }, attachmentOf);
105
+ }),
106
+ read: (id) => lookup(call, id).andThen((attachment) => {
107
+ const blocked = gate(attachment);
108
+ if (blocked) return Promise.resolve(err(blocked));
109
+ return stored(bucket(attachment).download(attachment.path)).map((file) => ({
110
+ attachment,
111
+ file
112
+ }));
113
+ }),
114
+ remove: (id) => lookup(call, id).andThen((attachment) => stored(bucket(attachment).remove([attachment.path]))).andThen(() => call("delete_attachment", { id }, (value) => value === true))
115
+ };
116
+ }
117
+ /**
118
+ * Scans uploaded files with the app's `scan` function and records `clean`,
119
+ * `infected` or `failed`. A file already clean or infected is not scanned
120
+ * again, so replayed events and retried jobs are safe.
121
+ */
122
+ function createAttachmentScanner(options) {
123
+ applyTemporal(options);
124
+ const call = blockCall(options.transport, options.schema);
125
+ const prefix = `${options.typePrefix ?? "dev.better-supabase"}.`;
126
+ const record = (id, status, detail) => call("set_attachment_status", {
127
+ id,
128
+ status,
129
+ detail
130
+ }, (value) => value).andThen((value) => Promise.resolve(isRecord(value) ? ok(attachmentOf(value)) : err(notFound())));
131
+ const scan = (id, signal) => lookup(call, id).andThen((attachment) => {
132
+ if (attachment.status === "clean" || attachment.status === "infected") return Promise.resolve(ok(attachment));
133
+ if (attachment.uploadedAt === void 0) return Promise.resolve(err(dbError("invalid_request", "The file was not uploaded yet", { hint: "ATTACHMENT_NOT_UPLOADED" })));
134
+ return stored(options.storage.from(attachment.bucket).download(attachment.path)).andThen(async (file) => {
135
+ let verdict;
136
+ try {
137
+ verdict = await options.scan(file, attachment, signal);
138
+ } catch (cause) {
139
+ const failed = await record(id, "failed", errorText(cause));
140
+ return failed.ok ? err(dbError("raised", `The scan failed: ${errorText(cause)}`, { hint: "ATTACHMENT_SCAN_FAILED" })) : failed;
141
+ }
142
+ return record(id, verdict.status, verdict.detail);
143
+ });
144
+ });
145
+ return {
146
+ scan,
147
+ job: async (payload, _job, signal) => {
148
+ await scan(payload.attachmentId, signal).orThrow();
149
+ },
150
+ sink: () => ({ async send(events) {
151
+ for (const event of events) {
152
+ if ((event.type.startsWith(prefix) ? event.type.slice(prefix.length) : event.type) !== "attachment.uploaded" || !isRecord(event.data)) continue;
153
+ const id = optionalText(event.data["attachmentId"]);
154
+ if (id !== void 0) await scan(id).orThrow();
155
+ }
156
+ } })
157
+ };
158
+ }
159
+ function scannedOf(value) {
160
+ const row = recordOf(value, "scanned_objects");
161
+ const status = textOf(row["status"]);
162
+ return {
163
+ bucket: textOf(row["bucket"]),
164
+ path: textOf(row["object_path"]),
165
+ status: status === "clean" || status === "infected" || status === "failed" ? status : "pending",
166
+ detail: optionalText(row["scan_detail"]),
167
+ scannedAt: optionalInstant(row["scanned_at"])
168
+ };
169
+ }
170
+ /**
171
+ * The scan gate for objects outside the attachments table, such as a file
172
+ * drive or avatars: scans an object with the app's `scan` function and
173
+ * records the verdict in `scanned_objects`, which storage policies read with
174
+ * `object_clean(bucket_id, name)`. With `options.scanBuckets`, new objects in
175
+ * those buckets get a pending row and an `object.uploaded` event.
176
+ */
177
+ function createObjectScanner(options) {
178
+ applyTemporal(options);
179
+ const call = blockCall(options.transport, options.schema);
180
+ const prefix = `${options.typePrefix ?? "dev.better-supabase"}.`;
181
+ const record = (bucket, path, status, detail) => call("set_object_scan", {
182
+ bucket,
183
+ path,
184
+ status,
185
+ detail
186
+ }, scannedOf);
187
+ const scan = (bucket, path, signal) => call("object_scan", {
188
+ bucket,
189
+ path
190
+ }, (value) => isRecord(value) ? scannedOf(value) : void 0).andThen((current) => {
191
+ if (current?.status === "clean" || current?.status === "infected") return Promise.resolve(ok(current));
192
+ return stored(options.storage.from(bucket).download(path)).andThen(async (file) => {
193
+ let verdict;
194
+ try {
195
+ verdict = await options.scan(file, {
196
+ bucket,
197
+ path
198
+ }, signal);
199
+ } catch (cause) {
200
+ const failed = await record(bucket, path, "failed", errorText(cause));
201
+ return failed.ok ? err(dbError("raised", `The scan failed: ${errorText(cause)}`, { hint: "ATTACHMENT_SCAN_FAILED" })) : failed;
202
+ }
203
+ return record(bucket, path, verdict.status, verdict.detail);
204
+ });
205
+ });
206
+ return {
207
+ scan,
208
+ job: async (payload, _job, signal) => {
209
+ await scan(payload.bucket, payload.path, signal).orThrow();
210
+ },
211
+ sink: () => ({ async send(events) {
212
+ for (const event of events) {
213
+ if ((event.type.startsWith(prefix) ? event.type.slice(prefix.length) : event.type) !== "object.uploaded" || !isRecord(event.data)) continue;
214
+ const bucket = optionalText(event.data["bucket"]);
215
+ const path = optionalText(event.data["path"]);
216
+ if (bucket !== void 0 && path !== void 0) await scan(bucket, path).orThrow();
217
+ }
218
+ } })
219
+ };
220
+ }
221
+ //#endregion
222
+ export { createAttachmentScanner, createAttachments, createObjectScanner, rpcTransport, sqlTransport };
@@ -0,0 +1,366 @@
1
+ /// <reference lib="esnext.temporal" />
2
+ import { t as AsyncResult, w as ErrorMapper } from "../../result-D7y2fT87.js";
3
+ import { L as TableKey, a as AnyModels, i as AnyFunctions } from "../../types-6BdhkmZe.js";
4
+ import { t as SqlClient } from "../../executor-DbvExCFC.js";
5
+ import { i as sqlTransport, r as rpcTransport, t as BlockTransport } from "../../block-transport-DvaoPuZ9.js";
6
+ import { r as BlockTemporalOptions } from "../../block-helpers-CKtbFcRv.js";
7
+ import { t as BetterSupabase, zt as WhereInput } from "../../define-CJJkkr1-.js";
8
+ import { r as EventSink, t as CloudEvent } from "../../cloud-event-C1JCc1bH.js";
9
+ import { i as ListDefinition } from "../../list-query-BRt-zDF7.js";
10
+ import { n as AuditCategory } from "../../context-BCrWe7ow.js";
11
+ //#region src/blocks/audit/audit.d.ts
12
+ interface PurgeAuditLogOptions extends BlockTemporalOptions {
13
+ /** How long entries are kept when `retention` has no answer. Defaults to `1 year`. */
14
+ readonly olderThan?: number | string;
15
+ /** The most entries deleted per tenant in one call. Defaults to 10000. */
16
+ readonly batch?: number;
17
+ /**
18
+ * Days a tenant keeps its entries (a plan's retention, say); `undefined`
19
+ * uses `olderThan`. Called with `null` for entries without a tenant.
20
+ * Retention shorter than a day is not supported. `setAuditRetention`
21
+ * reads the days from a column.
22
+ */
23
+ readonly retention?: (tenant: string | null) => number | undefined | Promise<number | undefined>;
24
+ }
25
+ type Retention = NonNullable<PurgeAuditLogOptions["retention"]>;
26
+ /**
27
+ * Deletes audit entries past their retention and returns how many. Without
28
+ * `retention` it is one `purge_audit_log` call (which honours an
29
+ * `audit_retention` SQL hook); with it, each tenant is purged with its own
30
+ * interval. Run it from a schedule until it returns 0.
31
+ */
32
+ export declare function purgeAuditLog(sql: SqlClient, options?: PurgeAuditLogOptions): AsyncResult<number>;
33
+ interface AuditRetentionSource {
34
+ /** `schema.table` holding one row per tenant, e.g. `public.organizations`. */
35
+ readonly table: string;
36
+ /** The integer column with the days to keep; `null` uses `olderThan`. */
37
+ readonly column: string;
38
+ /** The tenant id column. Defaults to `id`. */
39
+ readonly key?: string;
40
+ }
41
+ /**
42
+ * A `retention` callback for `purgeAuditLog` that reads each tenant's days
43
+ * from a column (a plan's `audit_retention_days`, say). `purgeAuditLog` reads
44
+ * every tenant's days in one query; a direct call reads one tenant.
45
+ */
46
+ export declare function setAuditRetention(sql: SqlClient, source: AuditRetentionSource): Retention;
47
+ /** One audit entry as `exportAuditLog` reads it. */
48
+ interface AuditEntry {
49
+ readonly id: string;
50
+ readonly occurredAt: Temporal.Instant;
51
+ /** `insert`, `update` and `delete` for row changes; `event` for `audit_event()`. */
52
+ readonly op: string;
53
+ readonly table?: string;
54
+ readonly record?: string;
55
+ readonly changed?: readonly string[];
56
+ readonly actor?: string;
57
+ readonly actorRole?: string;
58
+ readonly organizationId?: string;
59
+ readonly eventType?: string;
60
+ readonly category?: string;
61
+ readonly outcome?: string;
62
+ readonly source?: string;
63
+ readonly targetType?: string;
64
+ readonly metadata?: Readonly<Record<string, unknown>>;
65
+ }
66
+ interface OcsfProduct {
67
+ readonly name: string;
68
+ readonly vendor_name?: string;
69
+ readonly version?: string;
70
+ }
71
+ /**
72
+ * One entry as an OCSF event (`SPEC_PINS.ocsf`). Row changes are Entity
73
+ * Management (3004); semantic events are API Activity (6003), with the
74
+ * activity read from the event type's last segment (`deal.created` is Create).
75
+ */
76
+ export declare function toOcsf(entry: AuditEntry, product: OcsfProduct): Record<string, unknown>;
77
+ interface ExportAuditLogOptions extends BlockTemporalOptions {
78
+ /** Only this tenant's entries. */
79
+ readonly organizationId: string;
80
+ readonly from?: Temporal.Instant;
81
+ /** Exclusive. */
82
+ readonly to?: Temporal.Instant;
83
+ /** `ndjson` writes entries as they are; `ocsf` maps each with `toOcsf`. */
84
+ readonly format?: "ndjson" | "ocsf";
85
+ /** Required for `ocsf`: `metadata.product`. */
86
+ readonly product?: OcsfProduct;
87
+ /** Rows per query. Defaults to 1000. */
88
+ readonly batch?: number;
89
+ /** Defaults to `better_supabase.audit_events`. */
90
+ readonly table?: string;
91
+ }
92
+ /**
93
+ * Streams one tenant's audit entries as newline-delimited JSON, in id
94
+ * order, one keyset query per batch. Run it with a member's claims (the
95
+ * `readPolicy` filters) or as the service role. It reads the managed
96
+ * module's column names; for an adopted log, the version 3 columns or CSV,
97
+ * use `createAuditLog().export()`, which reads `list_audit_events`.
98
+ */
99
+ export declare function exportAuditLog(sql: SqlClient, options: ExportAuditLogOptions): ReadableStream<Uint8Array>;
100
+ type AuditSort = "newest" | "oldest";
101
+ type AuditFacet = "table" | "record" | "op" | "actor" | "event" | "category" | "outcome" | "target";
102
+ type AuditListDefinition<M extends AnyModels, T extends TableKey<M>, E> = ListDefinition<M, T, E, AuditSort, AuditFacet, false, "cursor"> & {
103
+ /** A `where` for `run(db, query, { where })`: entries in `[from, to)`. */
104
+ between(from?: Temporal.Instant, to?: Temporal.Instant): WhereInput<M, T>;
105
+ };
106
+ /**
107
+ * A cursor-paged list over the audit table through the Data API or
108
+ * `ctx.sql` (generate types for the module's schema to get it in your
109
+ * models; facets follow the managed column names). `createAuditLog().list()`
110
+ * reads `list_audit_events` instead, with an adopted log's columns mapped.
111
+ * Filtered by actor,
112
+ * table, record, event type, category, outcome and target, newest first.
113
+ * The `readPolicy` and the `restricted` table decide what a member sees.
114
+ */
115
+ export declare function auditListQuery<M extends AnyModels, D, Fn extends AnyFunctions, E, T extends TableKey<M>>(betterSupabase: BetterSupabase<M, D, Fn, E>, table: T, options?: {
116
+ readonly pageSize?: number;
117
+ readonly maxPageSize?: number;
118
+ }): AuditListDefinition<M, T, E>;
119
+ //#endregion
120
+ //#region src/blocks/audit/csv.d.ts
121
+ /** A CSV export column: a key, or a key and the header to write for it. */
122
+ type AuditCsvColumn = string | {
123
+ readonly key: string;
124
+ readonly label: string;
125
+ };
126
+ /** How `export({ format: "csv" })` writes its rows. */
127
+ interface AuditCsvOptions<Columns extends AuditColumns = AuditColumns> {
128
+ /**
129
+ * The columns, in order: a key of the record (`eventType`),
130
+ * `columns.<name>` for a column `metadataColumns` fills, or
131
+ * `restricted.<field>` (`ip`, `userAgent`, `sessionId`, `metadata`, `old`,
132
+ * `new` or `changes`) for a caller who may reveal the entries. A restricted
133
+ * column reads each page through `reveal_audit_entries`, which records
134
+ * `audit.revealed`, and is empty for entries the caller may not reveal.
135
+ * Defaults to the built-in columns.
136
+ */
137
+ readonly columns?: readonly AuditCsvColumn[];
138
+ /** Lines written before the header row, one cell each, such as a title. */
139
+ readonly preamble?: readonly string[];
140
+ /**
141
+ * The row to write, by column key. It gets the default row, the record and
142
+ * its restricted details (only with a restricted column).
143
+ */
144
+ readonly formatRow?: (row: Readonly<Record<string, unknown>>, record: AuditRecord<Columns>, details: AuditDetails | undefined) => Readonly<Record<string, unknown>>;
145
+ }
146
+ //#endregion
147
+ //#region src/blocks/audit/sink.d.ts
148
+ interface AuditSinkOptions {
149
+ /** The type prefix stripped from each event's `type`. Defaults to `dev.better-supabase`. */
150
+ readonly typePrefix?: string;
151
+ /**
152
+ * The category for an event type (without the prefix), from the categories
153
+ * the SQL modules use. Defaults to `security` for `account.*` and
154
+ * `support.*`, and no category for the rest.
155
+ */
156
+ readonly category?: (eventType: string) => AuditCategory | undefined;
157
+ }
158
+ /**
159
+ * The audit entry for one CloudEvent: its type without the prefix, its
160
+ * subject as the record, the tenant from the `tenant` or `partitionkey`
161
+ * extension (or `data.organizationId`), and the data as metadata. The
162
+ * idempotency key is the event's source and id, so a redelivery records once.
163
+ */
164
+ export declare function auditEventOf(event: CloudEvent, options?: AuditSinkOptions): AuditEventInput;
165
+ /**
166
+ * An `EventSink` that records each CloudEvent in the audit log. `send`
167
+ * throws when an entry fails, so an outbox relay retries the batch; the
168
+ * idempotency key keeps the entries already written from repeating.
169
+ */
170
+ export declare function auditSink(record: (event: AuditEventInput) => AsyncResult<string>, options?: AuditSinkOptions): EventSink;
171
+ //#endregion
172
+ //#region src/blocks/audit/client.d.ts
173
+ /** The adopted log's own columns, by column name, as `metadataColumns` maps them. */
174
+ type AuditColumns = Readonly<Record<string, unknown>>;
175
+ /**
176
+ * One entry as `list_audit_events` returns it: the module's columns under
177
+ * stable keys, whatever the adopted log calls them. Fields the log doesn't
178
+ * have, or the caller may not read, are missing.
179
+ */
180
+ interface AuditRecord<Columns extends AuditColumns = AuditColumns> {
181
+ readonly id: string;
182
+ readonly occurredAt: Temporal.Instant;
183
+ readonly op?: string;
184
+ readonly table?: string;
185
+ readonly record?: string;
186
+ readonly changed?: readonly string[];
187
+ readonly old?: Readonly<Record<string, unknown>>;
188
+ readonly new?: Readonly<Record<string, unknown>>;
189
+ readonly actorId?: string;
190
+ readonly actorRole?: string;
191
+ readonly actorKind?: string;
192
+ readonly actorLabel?: string;
193
+ readonly tenant?: string;
194
+ readonly tenantLabel?: string;
195
+ readonly impersonatedBy?: string;
196
+ readonly impersonationReason?: string;
197
+ readonly supportSession?: string;
198
+ readonly eventType?: string;
199
+ readonly category?: string;
200
+ readonly outcome?: string;
201
+ readonly source?: string;
202
+ readonly targetType?: string;
203
+ readonly targetLabel?: string;
204
+ readonly summary?: string;
205
+ readonly requestId?: string;
206
+ readonly correlationId?: string;
207
+ readonly scope?: string;
208
+ readonly metadata?: Readonly<Record<string, unknown>>;
209
+ /**
210
+ * The adopted log's columns that `sql.modules.audit.options.metadataColumns`
211
+ * fills, by column name. Missing without that option.
212
+ */
213
+ readonly columns?: Readonly<Partial<Columns>>;
214
+ }
215
+ /** Where a page ends: pass it as `before` for the next, older page. */
216
+ interface AuditCursor {
217
+ readonly occurredAt: Temporal.Instant;
218
+ readonly id: string;
219
+ }
220
+ type OneOrMany = string | readonly string[];
221
+ interface AuditListOptions {
222
+ readonly organizationId?: OneOrMany;
223
+ readonly eventType?: OneOrMany;
224
+ readonly actorId?: OneOrMany;
225
+ readonly targetType?: OneOrMany;
226
+ readonly record?: OneOrMany;
227
+ readonly category?: OneOrMany;
228
+ readonly outcome?: OneOrMany;
229
+ readonly source?: OneOrMany;
230
+ readonly actorKind?: OneOrMany;
231
+ readonly correlationId?: OneOrMany;
232
+ readonly search?: string;
233
+ readonly order?: "desc" | "asc";
234
+ readonly count?: boolean;
235
+ /** Entries at or after this instant. */
236
+ readonly since?: Temporal.Instant;
237
+ /** Entries before this instant. */
238
+ readonly until?: Temporal.Instant;
239
+ /** `page.next` of the previous page; `undefined` starts at the newest. */
240
+ readonly cursor?: AuditCursor | undefined;
241
+ /** Default 50, at most 1000. */
242
+ readonly limit?: number;
243
+ readonly offset?: number;
244
+ }
245
+ interface AuditPage<Columns extends AuditColumns = AuditColumns> {
246
+ readonly entries: readonly AuditRecord<Columns>[];
247
+ /** The cursor of the next page, or `undefined` on the last one. */
248
+ readonly next: AuditCursor | undefined;
249
+ readonly total?: number;
250
+ }
251
+ /** The restricted details `reveal` returns, when the entry has them. */
252
+ interface AuditDetails {
253
+ readonly entry: string;
254
+ readonly old?: Readonly<Record<string, unknown>>;
255
+ readonly new?: Readonly<Record<string, unknown>>;
256
+ readonly ip?: string;
257
+ readonly userAgent?: string;
258
+ readonly metadata?: Readonly<Record<string, unknown>>;
259
+ readonly sessionId?: string;
260
+ readonly changes?: unknown;
261
+ }
262
+ interface AuditExportOptions<Columns extends AuditColumns = AuditColumns> extends Omit<AuditListOptions, "before" | "limit" | "count">, AuditCsvOptions<Columns> {
263
+ /**
264
+ * `ndjson` (default) writes the records as they are, `csv` a spreadsheet
265
+ * with a header row, `ocsf` each record mapped with `toOcsf`.
266
+ */
267
+ readonly format?: "ndjson" | "csv" | "ocsf";
268
+ /** Required for `ocsf`: `metadata.product`. */
269
+ readonly product?: OcsfProduct;
270
+ /** Entries per call. Default 500. */
271
+ readonly batch?: number;
272
+ }
273
+ /** The part of `supabase.storage.from(bucket)` an export upload uses. */
274
+ interface AuditExportBucket {
275
+ upload(path: string, body: Blob, options?: {
276
+ contentType?: string;
277
+ upsert?: boolean;
278
+ }): PromiseLike<{
279
+ readonly data: unknown;
280
+ readonly error: unknown;
281
+ }>;
282
+ createSignedUrl?(path: string, expiresIn: number, options?: {
283
+ download?: string | boolean;
284
+ }): PromiseLike<{
285
+ readonly data: {
286
+ readonly signedUrl: string;
287
+ } | null;
288
+ readonly error: unknown;
289
+ }>;
290
+ }
291
+ interface AuditExportToStorageOptions<Columns extends AuditColumns = AuditColumns> extends AuditExportOptions<Columns> {
292
+ readonly storage: {
293
+ from(bucket: string): AuditExportBucket;
294
+ };
295
+ readonly bucket: string;
296
+ /** The object path, such as `{organizationId}/audit/{jobId}.csv`. */
297
+ readonly path: string;
298
+ /** Also sign a download URL that lives this many seconds. */
299
+ readonly signedUrlTtl?: number;
300
+ }
301
+ interface AuditEventInput {
302
+ readonly eventType: string;
303
+ readonly category?: string;
304
+ readonly outcome?: string;
305
+ readonly source?: string;
306
+ readonly targetType?: string;
307
+ readonly record?: string;
308
+ readonly organizationId?: string;
309
+ readonly metadata?: Readonly<Record<string, unknown>>;
310
+ readonly idempotencyKey?: string;
311
+ readonly restricted?: Readonly<Record<string, unknown>>;
312
+ readonly summary?: string;
313
+ readonly targetLabel?: string;
314
+ readonly correlationId?: string;
315
+ readonly actorId?: string;
316
+ readonly actorKind?: string;
317
+ readonly actorLabel?: string;
318
+ readonly ip?: string;
319
+ readonly userAgent?: string;
320
+ readonly sessionId?: string;
321
+ readonly requestId?: string;
322
+ readonly scope?: string;
323
+ }
324
+ interface AuditLogOptions extends BlockTemporalOptions {
325
+ /** `sqlTransport(ctx.postgres)` for members, or `rpcTransport` over an API schema. */
326
+ readonly transport: BlockTransport;
327
+ /** The audit module's schema, or its API schema. Default `better_supabase`. */
328
+ readonly schema?: string;
329
+ readonly mappers?: readonly ErrorMapper[];
330
+ }
331
+ interface AuditLog<Columns extends AuditColumns = AuditColumns> {
332
+ record(event: AuditEventInput): AsyncResult<string>;
333
+ /** A page of the entries the caller can read, newest first. */
334
+ list(options?: AuditListOptions): AsyncResult<AuditPage<Columns>>;
335
+ /**
336
+ * The restricted details of one entry for a caller with the reveal
337
+ * permission in its tenant (or platform staff); the reveal is itself
338
+ * recorded as `audit.revealed`. `not_found` otherwise.
339
+ */
340
+ reveal(entryId: string): AsyncResult<AuditDetails>;
341
+ /** Every matching entry as NDJSON, CSV or OCSF, read page by page as the caller. */
342
+ export(options?: AuditExportOptions<Columns>): ReadableStream<Uint8Array>;
343
+ /**
344
+ * Writes an export to a Storage object, for a job that runs it in the
345
+ * background (the data lifecycle export bucket, say), and returns the path
346
+ * and a signed URL when `signedUrlTtl` is set.
347
+ */
348
+ exportToStorage(options: AuditExportToStorageOptions<Columns>): AsyncResult<{
349
+ readonly path: string;
350
+ readonly url: string | undefined;
351
+ }>;
352
+ /**
353
+ * An `EventSink` that records CloudEvents, for `forwardBlockEvents`,
354
+ * `forwardMutations`, an outbox relay or the server's `audit` option.
355
+ * Build the log on a service-role transport so the event's actor counts.
356
+ */
357
+ sink(options?: AuditSinkOptions): EventSink;
358
+ }
359
+ /**
360
+ * The audit log over the `audit` module's functions, as the caller: the
361
+ * read policy decides what `list` and `export` return, and column mappings
362
+ * of an adopted log are already applied.
363
+ */
364
+ export declare function createAuditLog<Columns extends AuditColumns = AuditColumns>(options: AuditLogOptions): AuditLog<Columns>;
365
+ //#endregion
366
+ export { type AuditColumns, type AuditCsvColumn, type AuditCsvOptions, type AuditCursor, type AuditDetails, type AuditEntry, type AuditEventInput, type AuditExportBucket, type AuditExportOptions, type AuditExportToStorageOptions, type AuditFacet, type AuditListDefinition, type AuditListOptions, type AuditLog, type AuditLogOptions, type AuditPage, type AuditRecord, type AuditRetentionSource, type AuditSinkOptions, type AuditSort, type BlockTransport, type ExportAuditLogOptions, type OcsfProduct, type PurgeAuditLogOptions, rpcTransport, sqlTransport };