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,50 @@
1
+ import { t as AsyncResult, w as ErrorMapper } from "./result-D7y2fT87.js";
2
+ import { t as BlockTransport } from "./block-transport-DvaoPuZ9.js";
3
+ import { c as SetCredentialOptions, i as CredentialRef, r as CredentialProvider } from "./provider-BH5UWZJ6.js";
4
+ //#region src/credentials/vault.d.ts
5
+ /** How a request the third party sends is signed with the stored secret. */
6
+ type VaultInboundScheme = "standard-webhooks" | "hmac-sha256" | "shared-secret";
7
+ /**
8
+ * A credential in Vault. `scope: 'user'` keeps one secret per user subject.
9
+ * The token goes out as `<header>: <scheme> <token>`, `Authorization: Bearer`
10
+ * by default; `scheme: null` sends it bare (`x-api-key`).
11
+ */
12
+ interface VaultCredentialRef {
13
+ readonly provider: "vault";
14
+ readonly secret: string;
15
+ /** Stores the secret as `tenant/<tenant>/<secret>`, apart from every other tenant's. */
16
+ readonly tenant?: string;
17
+ readonly scope?: "app" | "user";
18
+ readonly header?: string;
19
+ readonly scheme?: string | null;
20
+ readonly inbound?: VaultInboundScheme;
21
+ /** Defaults to `x-hub-signature-256` for `hmac-sha256`, `authorization` for `shared-secret`. */
22
+ readonly signatureHeader?: string;
23
+ }
24
+ interface VaultCredentialsOptions {
25
+ /** `sqlTransport(postgres.asService())` or `rpcTransport` with the service role key. */
26
+ readonly transport: BlockTransport;
27
+ /** The schema of the `credentials` module. Defaults to `better_supabase`. */
28
+ readonly schema?: string;
29
+ readonly mappers?: readonly ErrorMapper[];
30
+ /**
31
+ * How long a read secret stays in memory, in milliseconds. Defaults to
32
+ * 60000; `0` reads Vault on every call. `set` and `revoke` clear it.
33
+ */
34
+ readonly cacheMs?: number;
35
+ }
36
+ interface VaultCredentials extends CredentialProvider {
37
+ readonly name: "vault";
38
+ /** Stores or replaces the credential a ref names, for `subject` when the ref is per user. */
39
+ set(ref: CredentialRef, value: string, options?: SetCredentialOptions): AsyncResult<void>;
40
+ verifyInbound(request: Request, ref: CredentialRef): AsyncResult<boolean>;
41
+ }
42
+ /**
43
+ * A `CredentialProvider` over the `credentials` SQL module: tokens and API
44
+ * keys in Supabase Vault, read through security definer functions only the
45
+ * service role may call. Static secrets only; OAuth connections come from
46
+ * a provider such as `better-supabase/vercel-connect`.
47
+ */
48
+ declare function vaultCredentials(options: VaultCredentialsOptions): VaultCredentials;
49
+ //#endregion
50
+ export { vaultCredentials as a, VaultInboundScheme as i, VaultCredentials as n, VaultCredentialsOptions as r, VaultCredentialRef as t };
@@ -0,0 +1,47 @@
1
+ import { a as CredentialSubject, r as CredentialProvider } from "../provider-BH5UWZJ6.js";
2
+ //#region src/vercel-connect/vercel-connect.d.ts
3
+ interface ConnectTokenParams {
4
+ subject: CredentialSubject;
5
+ installationId?: string;
6
+ scopes?: string[];
7
+ }
8
+ interface ConnectOptions {
9
+ vercelToken?: string;
10
+ }
11
+ /** The part of `@vercel/connect` this provider calls, typed structurally. */
12
+ interface VercelConnectModule {
13
+ getTokenResponse(connector: string, params: ConnectTokenParams, options?: ConnectOptions): Promise<{
14
+ token: string;
15
+ expiresAt: number;
16
+ }>;
17
+ revokeToken(connector: string, params: {
18
+ subject: CredentialSubject;
19
+ installationId?: string;
20
+ }, options?: ConnectOptions): Promise<void>;
21
+ startAuthorization(connector: string, params: ConnectTokenParams, options?: {
22
+ vercelToken?: string;
23
+ callbackUrl?: string;
24
+ }): Promise<{
25
+ url: string;
26
+ }>;
27
+ }
28
+ /** A Vercel Connect connector; `connector` is its UID. */
29
+ interface VercelConnectRef {
30
+ readonly provider: "vercel-connect";
31
+ readonly connector: string;
32
+ readonly installationId?: string;
33
+ readonly scopes?: readonly string[];
34
+ }
35
+ interface VercelConnectCredentialsOptions {
36
+ /** Defaults to the OIDC token `@vercel/connect` reads on Vercel. */
37
+ readonly vercelToken?: string;
38
+ /** Returns `@vercel/connect`; defaults to importing it on first use. */
39
+ readonly load?: () => Promise<unknown>;
40
+ }
41
+ /**
42
+ * A `CredentialProvider` over Vercel Connect: OAuth tokens for a connector,
43
+ * for the app or a user, refreshed by Vercel. Needs `@vercel/connect`.
44
+ */
45
+ export declare function vercelConnectCredentials(options?: VercelConnectCredentialsOptions): CredentialProvider;
46
+ //#endregion
47
+ export type { VercelConnectCredentialsOptions, VercelConnectModule, VercelConnectRef };
@@ -0,0 +1,119 @@
1
+ import { n as dbError } from "../errors-B11Duf73.js";
2
+ import { c as optionalTemporal } from "../temporal-BJGitm-h.js";
3
+ import { a as ok, r as err, t as AsyncResult } from "../result-DzUbqgdW.js";
4
+ import { d as isRecord } from "../block-helpers-DWHxHsEQ.js";
5
+ //#region src/vercel-connect/vercel-connect.ts
6
+ const isModule = (value) => isRecord(value) && typeof value["getTokenResponse"] === "function" && typeof value["revokeToken"] === "function" && typeof value["startAuthorization"] === "function";
7
+ /**
8
+ * Loads `@vercel/connect` on first use. The specifier is a variable so
9
+ * bundlers leave the optional peer out of apps that don't use it.
10
+ */
11
+ async function loadConnect() {
12
+ const specifier = "@vercel/connect";
13
+ try {
14
+ return await import(specifier);
15
+ } catch {
16
+ return;
17
+ }
18
+ }
19
+ function connectRef(ref) {
20
+ const { connector, installationId, scopes } = ref;
21
+ if (ref.provider !== "vercel-connect" || typeof connector !== "string") return err(dbError("invalid_input", `vercel-connect resolves refs with a connector, not "${ref.provider}"`, { hint: "CREDENTIAL_REF_INVALID" }));
22
+ return ok({
23
+ provider: "vercel-connect",
24
+ connector,
25
+ ...typeof installationId === "string" ? { installationId } : {},
26
+ ...Array.isArray(scopes) ? { scopes: scopes.filter((scope) => typeof scope === "string") } : {}
27
+ });
28
+ }
29
+ /** Maps the `@vercel/connect` error classes by name, without importing them. */
30
+ function connectError(cause) {
31
+ const name = cause instanceof Error ? cause.name : "";
32
+ const message = cause instanceof Error ? cause.message : String(cause);
33
+ switch (name) {
34
+ case "UserAuthorizationRequiredError": return err(dbError("forbidden", message, { hint: "CREDENTIAL_AUTHORIZATION_REQUIRED" }));
35
+ case "ConnectorInstallationRequiredError": return err(dbError("forbidden", message, { hint: "CREDENTIAL_INSTALLATION_REQUIRED" }));
36
+ case "NoValidTokenError": return err(dbError("not_found", message, { hint: "CREDENTIAL_NOT_FOUND" }));
37
+ default: return err(dbError("network", message));
38
+ }
39
+ }
40
+ /**
41
+ * A `CredentialProvider` over Vercel Connect: OAuth tokens for a connector,
42
+ * for the app or a user, refreshed by Vercel. Needs `@vercel/connect`.
43
+ */
44
+ function vercelConnectCredentials(options = {}) {
45
+ let loaded;
46
+ const connect = () => loaded ??= (options.load ?? loadConnect)().then((value) => {
47
+ if (!isModule(value)) {
48
+ loaded = void 0;
49
+ throw new TypeError("vercelConnectCredentials needs the @vercel/connect package: pnpm add @vercel/connect");
50
+ }
51
+ return value;
52
+ });
53
+ const connectOptions = options.vercelToken === void 0 ? {} : { vercelToken: options.vercelToken };
54
+ const run = (ref, subject, fn) => {
55
+ if (ref.tenant !== void 0 && subject.type === "app") return AsyncResult.err(dbError("forbidden", "vercel-connect has no per-tenant credentials; use a user subject or a provider with tenant namespaces", { hint: "CREDENTIAL_REF_FOREIGN" }));
56
+ const parsed = connectRef(ref);
57
+ if (!parsed.ok) return AsyncResult.err(parsed.error);
58
+ return AsyncResult.from(async () => {
59
+ const module = await connect();
60
+ try {
61
+ return ok(await fn(module, parsed.data));
62
+ } catch (cause) {
63
+ return connectError(cause);
64
+ }
65
+ });
66
+ };
67
+ const params = (parsed, subject, scopes, installationId) => {
68
+ const chosen = scopes ?? parsed.scopes;
69
+ const installation = installationId ?? parsed.installationId;
70
+ return {
71
+ subject,
72
+ ...installation === void 0 ? {} : { installationId: installation },
73
+ ...chosen === void 0 ? {} : { scopes: [...chosen] }
74
+ };
75
+ };
76
+ return {
77
+ apiVersion: 1,
78
+ name: "vercel-connect",
79
+ getToken(ref, getOptions) {
80
+ return run(ref, getOptions.subject, async (module, parsed) => {
81
+ const response = await module.getTokenResponse(parsed.connector, params(parsed, getOptions.subject, getOptions.scopes, getOptions.installationId), connectOptions);
82
+ const temporal = optionalTemporal();
83
+ return {
84
+ token: response.token,
85
+ ...temporal === void 0 ? {} : { expiresAt: temporal.Instant.fromEpochMilliseconds(response.expiresAt) },
86
+ headers: { authorization: `Bearer ${response.token}` }
87
+ };
88
+ });
89
+ },
90
+ capabilities() {
91
+ return {
92
+ userSubjects: true,
93
+ authorization: true,
94
+ revoke: true,
95
+ inbound: false
96
+ };
97
+ },
98
+ startAuthorization(ref, startOptions) {
99
+ return run(ref, startOptions.subject, async (module, parsed) => {
100
+ const { url } = await module.startAuthorization(parsed.connector, params(parsed, startOptions.subject, startOptions.scopes, void 0), {
101
+ ...connectOptions,
102
+ callbackUrl: startOptions.redirectUri
103
+ });
104
+ return { url };
105
+ });
106
+ },
107
+ revoke(ref, revokeOptions) {
108
+ return run(ref, revokeOptions.subject, async (module, parsed) => {
109
+ await module.revokeToken(parsed.connector, {
110
+ subject: revokeOptions.subject,
111
+ ...parsed.installationId === void 0 ? {} : { installationId: parsed.installationId }
112
+ }, connectOptions);
113
+ return true;
114
+ });
115
+ }
116
+ };
117
+ }
118
+ //#endregion
119
+ export { vercelConnectCredentials };
@@ -1,10 +1,10 @@
1
- import { n as dbError } from "./errors-DtwXa6b8.js";
2
- import { n as nowInstant, r as optionalTemporal } from "./temporal-CVlIV2DZ.js";
3
- import { n as temporalMissing } from "./temporal-required-CAt4Dc9Z.js";
4
- import { i as ok, n as err } from "./result-BKiliPY7.js";
1
+ import { n as dbError } from "./errors-B11Duf73.js";
2
+ import { c as optionalTemporal, s as nowInstant } from "./temporal-BJGitm-h.js";
3
+ import { n as temporalMissing } from "./temporal-required-BVvW7SYJ.js";
4
+ import { a as ok, r as err } from "./result-DzUbqgdW.js";
5
5
  import { i as toBase64, r as fromBase64 } from "./base64-D2gsioCY.js";
6
- import { c as toApp } from "./shared-D1dRUrAg.js";
7
- //#region src/webhooks/verify.ts
6
+ import { c as toApp } from "./shared-CxWmcyqB.js";
7
+ //#region src/blocks/webhooks/verify.ts
8
8
  const encoder = /* @__PURE__ */ new TextEncoder();
9
9
  /** Accepts `whsec_…`, `v1,whsec_…` (Supabase Auth hooks) or raw base64. */
10
10
  function secretBytes(secret) {
@@ -65,14 +65,15 @@ async function signWebhook(secret, message) {
65
65
  }
66
66
  /**
67
67
  * Verifies a Standard Webhooks signature (`webhook-id`, `webhook-timestamp`,
68
- * `webhook-signature`) and parses the JSON body. Pass several secrets while
69
- * rotating.
68
+ * `webhook-signature`, or the `svix-` names Svix-based senders use) and
69
+ * parses the JSON body. Pass several secrets while rotating.
70
70
  */
71
71
  async function verifyWebhook(input, secrets, options = {}) {
72
72
  const headers = input.headers;
73
- const id = header(headers, "webhook-id");
74
- const timestamp = header(headers, "webhook-timestamp");
75
- const signatures = header(headers, "webhook-signature");
73
+ const prefix = header(headers, "webhook-id") === null ? "svix" : "webhook";
74
+ const id = header(headers, `${prefix}-id`);
75
+ const timestamp = header(headers, `${prefix}-timestamp`);
76
+ const signatures = header(headers, `${prefix}-signature`);
76
77
  if (!id || !timestamp || !signatures) return err(unauthorized("WEBHOOK_MISSING_HEADERS", "Missing webhook signature headers"));
77
78
  const seconds = Number(timestamp);
78
79
  if (!/^\d+$/.test(timestamp)) return err(unauthorized("WEBHOOK_INVALID_TIMESTAMP", "Invalid webhook timestamp"));
@@ -106,6 +107,77 @@ async function verifyWebhook(input, secrets, options = {}) {
106
107
  function verifySharedSecret(request, secret, headerName = "authorization") {
107
108
  return timingSafeEqual((request.headers.get(headerName) ?? "").replace(/^Bearer\s+/i, ""), secret);
108
109
  }
110
+ const toHex = (bytes) => Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
111
+ /** Stripe signs with the endpoint secret's UTF-8 bytes, not its base64 decoding. */
112
+ async function stripeSignature(secret, content) {
113
+ const key = await crypto.subtle.importKey("raw", encoder.encode(secret), {
114
+ name: "HMAC",
115
+ hash: "SHA-256"
116
+ }, false, ["sign"]);
117
+ return toHex(new Uint8Array(await crypto.subtle.sign("HMAC", key, encoder.encode(content))));
118
+ }
119
+ /** The `Stripe-Signature` header for `body`, for tests and local replays. */
120
+ async function signStripeWebhook(secret, body, timestamp = nowInstant()) {
121
+ const seconds = String(Math.floor(timestamp.epochMilliseconds / 1e3));
122
+ return `t=${seconds},v1=${await stripeSignature(secret, `${seconds}.${body}`)}`;
123
+ }
124
+ /**
125
+ * Verifies a `Stripe-Signature` header (`t=…,v1=…`) with the endpoint's
126
+ * `whsec_…` secret and parses the event. Pass several secrets while rolling
127
+ * the endpoint secret. Runs on WebCrypto, so it needs no `stripe` package.
128
+ */
129
+ async function verifyStripeWebhook(input, secrets, options = {}) {
130
+ const value = header(input.headers, "stripe-signature");
131
+ if (!value) return err(unauthorized("WEBHOOK_MISSING_HEADERS", "Missing Stripe-Signature header"));
132
+ const parts = value.split(",").map((part) => {
133
+ const index = part.indexOf("=");
134
+ return [part.slice(0, index).trim(), part.slice(index + 1).trim()];
135
+ });
136
+ const timestamp = parts.find(([name]) => name === "t")?.[1] ?? "";
137
+ const offered = parts.filter(([name]) => name === "v1").map(([, sig]) => sig);
138
+ if (!/^\d+$/.test(timestamp)) return err(unauthorized("WEBHOOK_INVALID_TIMESTAMP", "Invalid webhook timestamp"));
139
+ const namespace = optionalTemporal();
140
+ if (namespace === void 0) return err(temporalMissing());
141
+ const seconds = Number(timestamp);
142
+ const now = (options.now?.() ?? namespace.Now.instant()).epochMilliseconds / 1e3;
143
+ if (Math.abs(now - seconds) > (options.tolerance ?? 300)) return err(unauthorized("WEBHOOK_TIMESTAMP_OUT_OF_RANGE", "Webhook timestamp is outside the tolerance"));
144
+ const body = input instanceof Request ? await input.text() : input.body;
145
+ let valid = false;
146
+ for (const secret of typeof secrets === "string" ? [secrets] : secrets) {
147
+ const expected = await stripeSignature(secret, `${timestamp}.${body}`);
148
+ for (const candidate of offered) if (timingSafeEqual(candidate, expected)) valid = true;
149
+ }
150
+ if (!valid) return err(unauthorized("WEBHOOK_INVALID_SIGNATURE", "Invalid webhook signature"));
151
+ let payload;
152
+ try {
153
+ payload = JSON.parse(body);
154
+ } catch {
155
+ return err(dbError("invalid_request", "Webhook body is not JSON"));
156
+ }
157
+ const id = typeof payload === "object" && payload !== null && "id" in payload ? String(payload.id) : "";
158
+ return ok({
159
+ id,
160
+ timestamp: namespace.Instant.fromEpochMilliseconds(seconds * 1e3),
161
+ payload,
162
+ body
163
+ });
164
+ }
165
+ /**
166
+ * `createWebhookInbox({ source: 'stripe', verify: stripeInboxVerify(secret) })`:
167
+ * stores Stripe events keyed by their event id.
168
+ */
169
+ function stripeInboxVerify(secrets, options = {}) {
170
+ return async (request, body) => {
171
+ const verified = await verifyStripeWebhook({
172
+ headers: request.headers,
173
+ body
174
+ }, secrets, options);
175
+ return verified.ok ? ok({
176
+ id: verified.data.id,
177
+ payload: verified.data.payload
178
+ }) : verified;
179
+ };
180
+ }
109
181
  /** Rejects a hook with a status and message Supabase Auth passes to the client. */
110
182
  function hookError(status, message) {
111
183
  return { error: {
@@ -119,7 +191,7 @@ function hookError(status, message) {
119
191
  *
120
192
  * ```ts
121
193
  * export const POST = authHook('custom_access_token', env.AUTH_HOOK_SECRET, async ({ claims, user_id }) => ({
122
- * claims: { ...claims, tenant_id: await orgFor(user_id) },
194
+ * claims: { ...claims, tenant_id: await organizationFor(user_id) },
123
195
  * }));
124
196
  * ```
125
197
  */
@@ -157,4 +229,4 @@ function databaseChange(betterSupabase, table, payload) {
157
229
  };
158
230
  }
159
231
  //#endregion
160
- export { signWebhook as a, verifyWebhook as c, isDatabaseWebhook as i, databaseChange as n, timingSafeEqual as o, hookError as r, verifySharedSecret as s, authHook as t };
232
+ export { signStripeWebhook as a, timingSafeEqual as c, verifyWebhook as d, isDatabaseWebhook as i, verifySharedSecret as l, databaseChange as n, signWebhook as o, hookError as r, stripeInboxVerify as s, authHook as t, verifyStripeWebhook as u };
@@ -0,0 +1,172 @@
1
+ /// <reference lib="esnext.temporal" />
2
+ import { f as Result } from "./result-D7y2fT87.js";
3
+ import { L as TableKey, M as Row, a as AnyModels, i as AnyFunctions } from "./types-6BdhkmZe.js";
4
+ import { t as BetterSupabase } from "./define-CJJkkr1-.js";
5
+ //#region src/blocks/webhooks/verify.d.ts
6
+ interface VerifiedWebhook<T = unknown> {
7
+ readonly id: string;
8
+ readonly timestamp: Temporal.Instant;
9
+ readonly payload: T;
10
+ readonly body: string;
11
+ }
12
+ interface VerifyOptions {
13
+ /** Allowed clock skew in seconds. Defaults to 300. */
14
+ readonly tolerance?: number;
15
+ readonly now?: () => Temporal.Instant;
16
+ }
17
+ type WebhookInput = Request | {
18
+ readonly headers: Headers | Readonly<Record<string, string>>;
19
+ readonly body: string;
20
+ };
21
+ /** Constant-time string comparison. */
22
+ declare function timingSafeEqual(a: string, b: string): boolean;
23
+ /** Headers for a signed Standard Webhooks request. */
24
+ declare function signWebhook(secret: string, message: {
25
+ readonly id: string;
26
+ readonly body: string;
27
+ readonly timestamp?: Temporal.Instant;
28
+ }): Promise<Record<string, string>>;
29
+ /**
30
+ * Verifies a Standard Webhooks signature (`webhook-id`, `webhook-timestamp`,
31
+ * `webhook-signature`, or the `svix-` names Svix-based senders use) and
32
+ * parses the JSON body. Pass several secrets while rotating.
33
+ */
34
+ declare function verifyWebhook<T = unknown>(input: WebhookInput, secrets: string | readonly string[], options?: VerifyOptions): Promise<Result<VerifiedWebhook<T>>>;
35
+ /** Checks a shared-secret header (database webhooks), in constant time. */
36
+ declare function verifySharedSecret(request: Request, secret: string, headerName?: string): boolean;
37
+ /** The `Stripe-Signature` header for `body`, for tests and local replays. */
38
+ declare function signStripeWebhook(secret: string, body: string, timestamp?: Temporal.Instant): Promise<string>;
39
+ /**
40
+ * Verifies a `Stripe-Signature` header (`t=…,v1=…`) with the endpoint's
41
+ * `whsec_…` secret and parses the event. Pass several secrets while rolling
42
+ * the endpoint secret. Runs on WebCrypto, so it needs no `stripe` package.
43
+ */
44
+ declare function verifyStripeWebhook<T = unknown>(input: WebhookInput, secrets: string | readonly string[], options?: VerifyOptions): Promise<Result<VerifiedWebhook<T>>>;
45
+ /**
46
+ * `createWebhookInbox({ source: 'stripe', verify: stripeInboxVerify(secret) })`:
47
+ * stores Stripe events keyed by their event id.
48
+ */
49
+ declare function stripeInboxVerify(secrets: string | readonly string[], options?: VerifyOptions): (request: Request, body: string) => Promise<Result<{
50
+ id: string;
51
+ payload: unknown;
52
+ }>>;
53
+ interface HookUser {
54
+ readonly id: string;
55
+ readonly email?: string;
56
+ readonly phone?: string;
57
+ readonly app_metadata?: Readonly<Record<string, unknown>>;
58
+ readonly user_metadata?: Readonly<Record<string, unknown>>;
59
+ readonly [key: string]: unknown;
60
+ }
61
+ interface AuthHookError {
62
+ readonly error: {
63
+ readonly http_code: number;
64
+ readonly message: string;
65
+ };
66
+ }
67
+ interface AuthHooks {
68
+ custom_access_token: {
69
+ input: {
70
+ readonly user_id: string;
71
+ readonly claims: Readonly<Record<string, unknown>> & {
72
+ readonly sub: string;
73
+ readonly role: string;
74
+ };
75
+ readonly authentication_method: string;
76
+ };
77
+ output: {
78
+ readonly claims: Readonly<Record<string, unknown>>;
79
+ };
80
+ };
81
+ send_email: {
82
+ input: {
83
+ readonly user: HookUser;
84
+ readonly email_data: {
85
+ readonly token: string;
86
+ readonly token_hash: string;
87
+ readonly redirect_to: string;
88
+ readonly email_action_type: string;
89
+ readonly site_url: string;
90
+ readonly token_new: string;
91
+ readonly token_hash_new: string;
92
+ /** Auth adds fields over time (`old_email`, `factor_type`, ...). */
93
+ readonly [key: string]: unknown;
94
+ };
95
+ };
96
+ output: Record<never, never>;
97
+ };
98
+ send_sms: {
99
+ input: {
100
+ readonly user: HookUser;
101
+ readonly sms: {
102
+ readonly otp: string;
103
+ };
104
+ };
105
+ output: Record<never, never>;
106
+ };
107
+ mfa_verification_attempt: {
108
+ input: {
109
+ readonly factor_id: string;
110
+ readonly factor_type: string;
111
+ readonly user_id: string;
112
+ readonly valid: boolean;
113
+ };
114
+ output: {
115
+ readonly decision: "continue" | "reject";
116
+ readonly message?: string;
117
+ };
118
+ };
119
+ password_verification_attempt: {
120
+ input: {
121
+ readonly user_id: string;
122
+ readonly valid: boolean;
123
+ };
124
+ output: {
125
+ readonly decision: "continue" | "reject";
126
+ readonly message?: string;
127
+ readonly should_logout_user?: boolean;
128
+ };
129
+ };
130
+ before_user_created: {
131
+ input: {
132
+ readonly metadata: Readonly<Record<string, unknown>>;
133
+ readonly user: HookUser;
134
+ };
135
+ output: Record<never, never>;
136
+ };
137
+ }
138
+ type AuthHookKind = keyof AuthHooks;
139
+ /** Rejects a hook with a status and message Supabase Auth passes to the client. */
140
+ declare function hookError(status: number, message: string): AuthHookError;
141
+ /**
142
+ * A `(request) => Response` handler for a Supabase Auth hook: verifies the
143
+ * Standard Webhooks signature, types the payload and serializes the answer.
144
+ *
145
+ * ```ts
146
+ * export const POST = authHook('custom_access_token', env.AUTH_HOOK_SECRET, async ({ claims, user_id }) => ({
147
+ * claims: { ...claims, tenant_id: await organizationFor(user_id) },
148
+ * }));
149
+ * ```
150
+ */
151
+ declare function authHook<K extends AuthHookKind>(_kind: K, secret: string | readonly string[], handler: (payload: AuthHooks[K]["input"], webhook: VerifiedWebhook<AuthHooks[K]["input"]>) => AuthHooks[K]["output"] | AuthHookError | Promise<AuthHooks[K]["output"] | AuthHookError>, options?: VerifyOptions): (request: Request) => Promise<Response>;
152
+ interface DatabaseWebhookPayload {
153
+ readonly type: "INSERT" | "UPDATE" | "DELETE";
154
+ readonly table: string;
155
+ readonly schema: string;
156
+ readonly record: Readonly<Record<string, unknown>> | null;
157
+ readonly old_record: Readonly<Record<string, unknown>> | null;
158
+ }
159
+ interface DatabaseChange<R> {
160
+ readonly type: "INSERT" | "UPDATE" | "DELETE";
161
+ readonly table: string;
162
+ readonly record: R | null;
163
+ readonly oldRecord: Partial<R> | null;
164
+ }
165
+ declare function isDatabaseWebhook(value: unknown): value is DatabaseWebhookPayload;
166
+ /**
167
+ * Reads a database webhook payload for `table` as an app-cased change.
168
+ * Returns `null` for other tables or payloads that aren't database webhooks.
169
+ */
170
+ declare function databaseChange<M extends AnyModels, D, F extends AnyFunctions, E, T extends TableKey<M>>(betterSupabase: BetterSupabase<M, D, F, E>, table: T, payload: unknown): DatabaseChange<Row<M, T>> | null;
171
+ //#endregion
172
+ export { verifySharedSecret as _, DatabaseWebhookPayload as a, WebhookInput as c, hookError as d, isDatabaseWebhook as f, timingSafeEqual as g, stripeInboxVerify as h, DatabaseChange as i, authHook as l, signWebhook as m, AuthHookKind as n, VerifiedWebhook as o, signStripeWebhook as p, AuthHooks as r, VerifyOptions as s, AuthHookError as t, databaseChange as u, verifyStripeWebhook as v, verifyWebhook as y };
@@ -1,4 +1,4 @@
1
1
  //#region src/core/version.ts
2
- const VERSION = "0.5.1";
2
+ const VERSION = "0.6.0";
3
3
  //#endregion
4
4
  export { VERSION as t };
@@ -0,0 +1,99 @@
1
+ import { n as dbError } from "./errors-B11Duf73.js";
2
+ import { a as actorOf, o as delegationOf, r as impersonatorOf } from "./impersonation-DcqaTBHx.js";
3
+ //#region src/auth/mfa.ts
4
+ /** The session's assurance level from its claims; anything but `aal2` reads as `aal1`. */
5
+ function aalOf(claims) {
6
+ return claims["aal"] === "aal2" ? "aal2" : "aal1";
7
+ }
8
+ /** The `amr` claim as typed entries, skipping malformed ones. */
9
+ function amrOf(claims) {
10
+ const amr = claims["amr"];
11
+ if (!Array.isArray(amr)) return [];
12
+ return amr.flatMap((entry) => {
13
+ if (typeof entry !== "object" || entry === null) return [];
14
+ const { method, timestamp, provider } = entry;
15
+ if (typeof method !== "string" || typeof timestamp !== "number") return [];
16
+ return [typeof provider === "string" ? {
17
+ method,
18
+ timestamp,
19
+ provider
20
+ } : {
21
+ method,
22
+ timestamp
23
+ }];
24
+ });
25
+ }
26
+ /**
27
+ * `undefined` when a user session meets `required`; otherwise a `forbidden`
28
+ * error with `required` and code `INSUFFICIENT_AAL`, for the client to start
29
+ * an MFA challenge. Non-user sessions pass: `allow` decides about them.
30
+ */
31
+ function checkAal(auth, required) {
32
+ if (required === "aal1" || auth.kind !== "user" || !("claims" in auth)) return void 0;
33
+ if (aalOf(auth.claims) === "aal2") return void 0;
34
+ return dbError("forbidden", "Verify a second factor to continue", {
35
+ code: "INSUFFICIENT_AAL",
36
+ required
37
+ });
38
+ }
39
+ //#endregion
40
+ //#region src/auth/view.ts
41
+ /** Whether the token belongs to an anonymous user (`signInAnonymously()`). */
42
+ function isAnonymousUser(claims) {
43
+ return "is_anonymous" in claims && claims.is_anonymous === true;
44
+ }
45
+ /** Drops the token from an `AuthState`, leaving only serializable fields. */
46
+ function toSession(auth) {
47
+ switch (auth.kind) {
48
+ case "user": {
49
+ const impersonator = impersonatorOf(auth.claims);
50
+ const outcome = actorOf(auth.claims);
51
+ const actor = outcome.ok ? outcome.actor : void 0;
52
+ const client = actor?.kind === "oauth-client" ? actor : void 0;
53
+ const scopes = client ? delegationOf(auth.claims)?.scopes : void 0;
54
+ const delegation = client && (scopes || client.chain) ? {
55
+ scopes: scopes ?? [],
56
+ ...client.chain ? { chain: client.chain } : {}
57
+ } : void 0;
58
+ return {
59
+ kind: "user",
60
+ user: auth.user,
61
+ claims: auth.claims,
62
+ expiresAt: auth.expiresAt,
63
+ ...auth.profile === void 0 ? {} : { profile: auth.profile },
64
+ aal: aalOf(auth.claims),
65
+ anonymous: isAnonymousUser(auth.claims),
66
+ amr: amrOf(auth.claims),
67
+ ...impersonator ? { impersonator } : {},
68
+ ...actor ? { actor } : {},
69
+ ...delegation ? { delegation } : {}
70
+ };
71
+ }
72
+ case "service": return {
73
+ kind: "service",
74
+ keyName: auth.keyName
75
+ };
76
+ case "apiKey": return {
77
+ kind: "apiKey",
78
+ keyId: auth.keyId,
79
+ name: auth.name,
80
+ ...auth.organizationId ? { organizationId: auth.organizationId } : {},
81
+ ...auth.userId ? { userId: auth.userId } : {},
82
+ scopes: auth.scopes,
83
+ ...auth.createdAt ? { createdAt: Math.floor(auth.createdAt.epochMilliseconds / 1e3) } : {},
84
+ ...auth.createdBy ? { createdBy: auth.createdBy } : {}
85
+ };
86
+ case "anon": return {
87
+ kind: "anon",
88
+ reason: auth.reason
89
+ };
90
+ case "invalid": return {
91
+ kind: "invalid",
92
+ reason: auth.reason,
93
+ error: auth.error
94
+ };
95
+ default: return auth;
96
+ }
97
+ }
98
+ //#endregion
99
+ export { checkAal as a, amrOf as i, toSession as n, aalOf as r, isAnonymousUser as t };
@@ -1,7 +1,7 @@
1
- import { _ as DbError } from "./executor-BunPOO-k.js";
2
- import { n as Impersonator, o as AuthState, s as InvalidReason } from "./impersonation-BmePsuxz.js";
3
- import { n as AmrEntry, t as Aal } from "./mfa-Cu96oJdw.js";
4
- import { n as SessionActor, r as SessionDelegation } from "./actor-DaJjqD5R.js";
1
+ import { b as DbError } from "./result-D7y2fT87.js";
2
+ import { i as InvalidReason, r as AuthState } from "./resolve-KW8nCeL6.js";
3
+ import { n as AmrEntry, s as Impersonator, t as Aal } from "./mfa-Daak8ukG.js";
4
+ import { n as SessionActor, r as SessionDelegation } from "./actor-CQTlc1Hh.js";
5
5
  import { JWTClaims, UserClaims } from "@supabase/server";
6
6
  //#region src/auth/view.d.ts
7
7
  /**
@@ -10,6 +10,12 @@ import { JWTClaims, UserClaims } from "@supabase/server";
10
10
  */
11
11
  type AuthSession<C = unknown, P = unknown> = {
12
12
  readonly kind: "user";
13
+ /**
14
+ * Read from the verified claims (`sub`, `email`, `role`,
15
+ * `app_metadata`, `user_metadata`), never from the user object in the
16
+ * cookie, so it is the same with `tokens-only` cookies. Call
17
+ * `auth.getUser()` when a flow must see a revoked or changed user.
18
+ */
13
19
  readonly user: UserClaims;
14
20
  /**
15
21
  * The verified JWT payload, including custom access token hook claims,
@@ -42,7 +48,7 @@ type AuthSession<C = unknown, P = unknown> = {
42
48
  /**
43
49
  * Who acts for the user: an OAuth client or agent (`client_id`, or an
44
50
  * `act` chain without `kind`), a support session or an impersonated
45
- * session, as PermDock's `actorOf` reads it.
51
+ * session, read from the `act` and `client_id` claims.
46
52
  */
47
53
  readonly actor?: SessionActor;
48
54
  /**
@@ -53,6 +59,17 @@ type AuthSession<C = unknown, P = unknown> = {
53
59
  } | {
54
60
  readonly kind: "service";
55
61
  readonly keyName: string;
62
+ } | {
63
+ readonly kind: "apiKey";
64
+ readonly keyId: string;
65
+ readonly name: string;
66
+ readonly organizationId?: string;
67
+ readonly userId?: string;
68
+ readonly scopes: readonly string[];
69
+ /** Seconds since epoch, when the key was created. */
70
+ readonly createdAt?: number;
71
+ /** The user who created the key. */
72
+ readonly createdBy?: string;
56
73
  } | {
57
74
  readonly kind: "anon";
58
75
  readonly reason: AnonReason;