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,4 @@
1
+ import { i as sqlTransport, r as rpcTransport, t as BlockTransport } from "../../block-transport-DvaoPuZ9.js";
2
+ import { n as StripeSource, t as StripeClient } from "../../stripe-D04h-QBT.js";
3
+ import { a as UsageBatchRecorded, c as UsageHistoryEntry, d as UsageOptions, f as UsagePeriod, g as reportUsageToStripe, h as createUsage, i as Usage, l as UsageHistoryOptions, m as UsageStatus, n as ReportUsageOptions, o as UsageBreakdownEntry, p as UsageRecorded, r as ReportUsageResult, s as UsageEntry, t as RecordUsageOptions, u as UsageMeterInfo } from "../../usage-CrvrL2vw.js";
4
+ export { type BlockTransport, type RecordUsageOptions, type ReportUsageOptions, type ReportUsageResult, type StripeClient, type StripeSource, type Usage, type UsageBatchRecorded, type UsageBreakdownEntry, type UsageEntry, type UsageHistoryEntry, type UsageHistoryOptions, type UsageMeterInfo, type UsageOptions, type UsagePeriod, type UsageRecorded, type UsageStatus, createUsage, reportUsageToStripe, rpcTransport, sqlTransport };
@@ -0,0 +1,233 @@
1
+ import { n as rpcTransport, r as sqlTransport } from "../../block-transport-BLr-ZgLc.js";
2
+ import { O as textOf, d as isRecord, g as pageOf, h as optionalText, i as blockCall, k as toInstant, n as applyTemporal, o as eachLimit, x as recordsOf, y as recordOf } from "../../block-helpers-DWHxHsEQ.js";
3
+ import { t as lazyStripe } from "../../stripe-BMj5LtsT.js";
4
+ //#region src/blocks/usage/usage.ts
5
+ const numberOf = (value) => typeof value === "number" ? value : Number(value);
6
+ const optionalNumber = (value) => value === null || value === void 0 ? void 0 : numberOf(value);
7
+ const PERIODS = /* @__PURE__ */ new Set([
8
+ "day",
9
+ "week",
10
+ "month",
11
+ "year",
12
+ "billing"
13
+ ]);
14
+ const periodOf = (value) => {
15
+ const text = textOf(value);
16
+ return PERIODS.has(text) ? text : "month";
17
+ };
18
+ function recordedOf(value) {
19
+ const row = recordOf(value, "record_usage");
20
+ return {
21
+ recorded: row["recorded"] === true,
22
+ today: numberOf(row["today"]),
23
+ used: numberOf(row["used"])
24
+ };
25
+ }
26
+ const perMeter = (value) => isRecord(value) ? Object.fromEntries(Object.entries(value).map(([meter, used]) => [meter, numberOf(used)])) : {};
27
+ function statusOf(value) {
28
+ const row = recordOf(value, "usage_status");
29
+ return {
30
+ meter: textOf(row["meter"]),
31
+ used: numberOf(row["used"]),
32
+ limit: optionalNumber(row["limit"]),
33
+ remaining: optionalNumber(row["remaining"]),
34
+ unlimited: row["unlimited"] === true,
35
+ period: periodOf(row["period"]),
36
+ startsAt: row["starts_at"] === void 0 || row["starts_at"] === null ? void 0 : toInstant(textOf(row["starts_at"])),
37
+ resetsAt: toInstant(textOf(row["resets_at"])),
38
+ ...meterInfo(row)
39
+ };
40
+ }
41
+ function meterInfo(row) {
42
+ const unit = optionalText(row["unit"]);
43
+ const category = optionalText(row["category"]);
44
+ const label = optionalText(row["label"]);
45
+ return {
46
+ ...unit === void 0 ? {} : { unit },
47
+ ...category === void 0 ? {} : { category },
48
+ ...label === void 0 ? {} : { label }
49
+ };
50
+ }
51
+ /** Usage metering and quotas over the `usage` module's functions. */
52
+ function createUsage(options) {
53
+ applyTemporal(options);
54
+ const call = blockCall(options.transport, options.schema, options.mappers);
55
+ const args = (organizationId, meter, record = {}) => ({
56
+ tenant: organizationId,
57
+ meter,
58
+ quantity: record.quantity ?? 1,
59
+ idempotency_key: record.idempotencyKey,
60
+ source: record.source,
61
+ metadata: record.metadata,
62
+ actor: record.actor
63
+ });
64
+ const batch = (check) => (organizationId, entries, record = {}) => call("record_usage_batch", {
65
+ tenant: organizationId,
66
+ entries: JSON.stringify(entries.map((entry) => ({
67
+ meter: entry.meter,
68
+ quantity: entry.quantity ?? 1
69
+ }))),
70
+ idempotency_key: record.idempotencyKey,
71
+ check,
72
+ source: record.source,
73
+ metadata: record.metadata,
74
+ actor: record.actor
75
+ }, (value) => {
76
+ const row = recordOf(value, "record_usage_batch");
77
+ return {
78
+ recorded: row["recorded"] === true,
79
+ today: perMeter(row["today"]),
80
+ used: perMeter(row["used"])
81
+ };
82
+ });
83
+ const current = (organizationId, meter) => call("usage_status", {
84
+ tenant: organizationId,
85
+ meter
86
+ }, statusOf);
87
+ return {
88
+ record: (organizationId, meter, record) => call("record_usage", args(organizationId, meter, record), recordedOf),
89
+ consume: (organizationId, meter, record) => call("consume_quota", args(organizationId, meter, record), recordedOf),
90
+ recordMany: batch(false),
91
+ consumeMany: batch(true),
92
+ current,
93
+ overview: (organizationId) => call("usage_overview", { tenant: organizationId }, (value) => (Array.isArray(value) ? value : []).map(statusOf)),
94
+ remaining: (organizationId, meter) => current(organizationId, meter).map((status) => status.remaining),
95
+ history: (organizationId, list = {}) => call("usage_history", {
96
+ tenant: organizationId,
97
+ meter: list.meter,
98
+ max_rows: list.limit ?? 100,
99
+ before_id: pageOf(list).cursor
100
+ }, (value) => (Array.isArray(value) ? value.filter(isRecord) : []).map((row) => ({
101
+ id: numberOf(row["id"]),
102
+ meter: textOf(row["meter"]),
103
+ quantity: numberOf(row["quantity"]),
104
+ actor: optionalText(row["actor"]),
105
+ source: optionalText(row["source"]),
106
+ metadata: isRecord(row["metadata"]) ? row["metadata"] : {},
107
+ recordedAt: toInstant(textOf(row["recorded_at"]))
108
+ }))),
109
+ breakdown: (organizationId, meter) => call("usage_breakdown", {
110
+ tenant: organizationId,
111
+ meter
112
+ }, (value) => (Array.isArray(value) ? value.filter(isRecord) : []).map((row) => ({
113
+ actor: optionalText(row["actor"]),
114
+ source: optionalText(row["source"]),
115
+ quantity: numberOf(row["quantity"])
116
+ }))),
117
+ meters: () => call("usage_meters", {}, (value) => {
118
+ const row = isRecord(value) ? value : {};
119
+ return Object.fromEntries(Object.entries(row).map(([meter, info]) => [meter, meterInfo(isRecord(info) ? info : {})]));
120
+ })
121
+ };
122
+ }
123
+ /** Customer lookups, and meter events with their marks, in flight at once. */
124
+ const REPORT_CONCURRENCY = 8;
125
+ /**
126
+ * Sends unreported usage to Stripe as meter events, one per counter and
127
+ * delta. The event `identifier` is the tenant, meter, day and new total, so
128
+ * a run that fails after sending and before marking resends the same event,
129
+ * and Stripe drops the duplicate. Run it from a job or a cron route.
130
+ */
131
+ async function reportUsageToStripe(options) {
132
+ const transport = options.transport;
133
+ const schema = options.schema ?? "better_supabase";
134
+ const stripe = await lazyStripe(options.stripe)();
135
+ const customers = /* @__PURE__ */ new Map();
136
+ const customerOf = options.customer ?? (async (organizationId) => optionalText(await transport.call("better_supabase", "tenant_stripe_customer", { tenant: organizationId })));
137
+ const limit = options.batch ?? 500;
138
+ const skipMeters = /* @__PURE__ */ new Set();
139
+ const skipTenants = /* @__PURE__ */ new Set();
140
+ /** Sends the meter event when there is a delta, then marks the total; `true` when it sent one. */
141
+ const send = async (pending) => {
142
+ const { organizationId, meter, day, value, delta, identifier } = pending;
143
+ if (delta > 0) await stripe.billing.meterEvents.create({
144
+ event_name: pending.eventName,
145
+ payload: {
146
+ stripe_customer_id: pending.customer,
147
+ value: String(delta)
148
+ },
149
+ identifier,
150
+ timestamp: Math.floor(Math.min(Date.now(), Date.parse(`${day}T23:59:59Z`)) / 1e3)
151
+ }, { idempotencyKey: identifier });
152
+ await transport.call(schema, "mark_usage_reported", {
153
+ tenant: organizationId,
154
+ meter,
155
+ day,
156
+ value
157
+ });
158
+ return delta > 0;
159
+ };
160
+ let reported = 0;
161
+ let skipped = 0;
162
+ let handled = 0;
163
+ for (;;) {
164
+ const rows = recordsOf(await transport.call(schema, "unreported_usage", {
165
+ max_rows: limit - handled,
166
+ skip_meters: [...skipMeters],
167
+ skip_tenants: [...skipTenants]
168
+ }), "unreported_usage");
169
+ let passedOver = false;
170
+ const eventNameOf = (meter) => options.eventName ? options.eventName(meter) : meter;
171
+ const lookups = /* @__PURE__ */ new Set();
172
+ for (const row of rows) {
173
+ const organizationId = textOf(row["organization_id"]);
174
+ if (!customers.has(organizationId) && !skipTenants.has(organizationId) && eventNameOf(textOf(row["meter"])) !== void 0) lookups.add(organizationId);
175
+ }
176
+ await eachLimit([...lookups], REPORT_CONCURRENCY, async (organizationId) => {
177
+ customers.set(organizationId, await customerOf(organizationId));
178
+ });
179
+ const sends = [];
180
+ for (const row of rows) {
181
+ const organizationId = textOf(row["organization_id"]);
182
+ const meter = textOf(row["meter"]);
183
+ if (skipMeters.has(meter) || skipTenants.has(organizationId)) {
184
+ skipped += 1;
185
+ continue;
186
+ }
187
+ const eventName = eventNameOf(meter);
188
+ if (eventName === void 0) {
189
+ skipMeters.add(meter);
190
+ skipped += 1;
191
+ passedOver = true;
192
+ continue;
193
+ }
194
+ const customer = customers.get(organizationId);
195
+ if (customer === void 0) {
196
+ skipTenants.add(organizationId);
197
+ skipped += 1;
198
+ passedOver = true;
199
+ continue;
200
+ }
201
+ handled += 1;
202
+ const day = textOf(row["day"]).slice(0, 10);
203
+ const value = numberOf(row["value"]);
204
+ const previous = numberOf(row["reported_value"]);
205
+ const included = optionalNumber(row["included"]);
206
+ const before = numberOf(row["window_before"] ?? 0);
207
+ const delta = options.overage === true && row["unlimited"] === true ? 0 : options.overage === true && included !== void 0 ? Math.max(0, before + value - included) - Math.max(0, before + previous - included) : value - previous;
208
+ const identifier = `${organizationId}:${meter}:${day}:${String(value)}`;
209
+ sends.push({
210
+ organizationId,
211
+ meter,
212
+ day,
213
+ value,
214
+ delta,
215
+ eventName,
216
+ customer,
217
+ identifier
218
+ });
219
+ }
220
+ const sent = [];
221
+ await eachLimit(sends, REPORT_CONCURRENCY, async (pending, index) => {
222
+ sent[index] = await send(pending);
223
+ });
224
+ reported += sent.filter(Boolean).length;
225
+ if (!passedOver || handled >= limit || rows.length === 0) break;
226
+ }
227
+ return {
228
+ reported,
229
+ skipped
230
+ };
231
+ }
232
+ //#endregion
233
+ export { createUsage, reportUsageToStripe, rpcTransport, sqlTransport };
@@ -0,0 +1,117 @@
1
+ /// <reference lib="esnext.temporal" />
2
+ import { t as AsyncResult, w as ErrorMapper } from "../../result-D7y2fT87.js";
3
+ import { i as sqlTransport, r as rpcTransport, t as BlockTransport } from "../../block-transport-DvaoPuZ9.js";
4
+ import { r as BlockTemporalOptions } from "../../block-helpers-CKtbFcRv.js";
5
+ import { s as VerifyOptions } from "../../verify-DPuWngD4.js";
6
+ //#region src/blocks/waitlist/waitlist.d.ts
7
+ type WaitlistStatus = "waiting" | "approved" | "rejected" | "joined";
8
+ interface WaitlistEntry {
9
+ readonly id: string;
10
+ readonly email: string;
11
+ readonly status: WaitlistStatus;
12
+ readonly position: number;
13
+ readonly referrer: string | undefined;
14
+ readonly metadata: Readonly<Record<string, unknown>>;
15
+ readonly userId: string | undefined;
16
+ readonly decidedBy: string | undefined;
17
+ readonly decidedAt: Temporal.Instant | undefined;
18
+ readonly createdAt: Temporal.Instant;
19
+ }
20
+ /**
21
+ * What `join` tells the person. Without the service role it is always
22
+ * `waiting`, with the place a new address would get once the entry left the
23
+ * line, so it never reveals who was approved or signed up. The service role
24
+ * sees the real status, with rejected entries read as `waiting`.
25
+ */
26
+ interface WaitlistPlace {
27
+ /** Their place among the waiting entries; `undefined` for the service role once the entry left the line. */
28
+ readonly position: number | undefined;
29
+ readonly status: Exclude<WaitlistStatus, "rejected">;
30
+ }
31
+ interface InviteCode {
32
+ readonly id: string;
33
+ /** The first four characters, to tell codes apart in a list. */
34
+ readonly prefix: string;
35
+ readonly maxUses: number | undefined;
36
+ readonly uses: number;
37
+ readonly expiresAt: Temporal.Instant | undefined;
38
+ readonly organizationId: string | undefined;
39
+ readonly role: string | undefined;
40
+ readonly createdBy: string | undefined;
41
+ readonly createdAt: Temporal.Instant;
42
+ readonly revokedAt: Temporal.Instant | undefined;
43
+ }
44
+ interface CreateInviteCodeInput {
45
+ /** Defaults to 1. `null` allows any number of uses. */
46
+ readonly maxUses?: number | null;
47
+ readonly expiresAt?: Temporal.Instant;
48
+ /** Adds whoever redeems the code to this organization. */
49
+ readonly organizationId?: string;
50
+ /** The role in `organizationId`; `sql.modules.waitlist.options.defaultRole` otherwise. */
51
+ readonly role?: string;
52
+ /** Your own code, such as `LAUNCH2026`; a random one otherwise. */
53
+ readonly code?: string;
54
+ }
55
+ interface Redemption {
56
+ readonly organizationId: string | undefined;
57
+ /** The role the code granted; `undefined` when the user was a member already. */
58
+ readonly role: string | undefined;
59
+ }
60
+ interface WaitlistOptions extends BlockTemporalOptions {
61
+ readonly transport: BlockTransport;
62
+ /** The module schema (`sql.modules.waitlist.schema`), default `better_supabase`. */
63
+ readonly schema?: string;
64
+ readonly mappers?: readonly ErrorMapper[];
65
+ }
66
+ interface Waitlist {
67
+ /** Adds an address, or returns its place when it is already there. Works signed out; see `WaitlistPlace`. */
68
+ join(email: string, options?: {
69
+ readonly referrer?: string;
70
+ readonly metadata?: Readonly<Record<string, unknown>>;
71
+ }): AsyncResult<WaitlistPlace>;
72
+ /** Entries by position; needs `waitlist.manage` on the platform. */
73
+ entries(options?: {
74
+ readonly status?: WaitlistStatus | null;
75
+ readonly limit?: number;
76
+ readonly afterPosition?: number;
77
+ }): AsyncResult<readonly WaitlistEntry[]>;
78
+ /** Lets the address sign up and emits `waitlist.approved`. */
79
+ approve(entryId: string): AsyncResult<WaitlistEntry>;
80
+ reject(entryId: string): AsyncResult<WaitlistEntry>;
81
+ /** Creates a code; `code` is shown once, the database keeps its hash. */
82
+ createCode(input?: CreateInviteCodeInput): AsyncResult<{
83
+ readonly code: string;
84
+ readonly invite: InviteCode;
85
+ }>;
86
+ /** Platform codes, or one organization's. */
87
+ codes(organizationId?: string): AsyncResult<readonly InviteCode[]>;
88
+ revokeCode(codeId: string): AsyncResult<boolean>;
89
+ /** Uses a code for the signed-in user, e.g. one that joins an organization. */
90
+ redeem(code: string): AsyncResult<Redemption>;
91
+ }
92
+ /** A random code in groups of four, without characters that look alike. */
93
+ export declare function generateInviteCode(): string;
94
+ export declare function createWaitlist(options: WaitlistOptions): Waitlist;
95
+ interface WaitlistHookOptions {
96
+ /** A service transport: `waitlist_admit` is granted to the service role. */
97
+ readonly transport: BlockTransport;
98
+ /** The hook secret, `v1,whsec_...`, or several while rotating. */
99
+ readonly secret: string | readonly string[];
100
+ /** The user metadata field the client puts the code in (`codeField`), default `invite_code`. */
101
+ readonly codeField?: string;
102
+ /** What Supabase Auth tells a rejected sign-up. */
103
+ readonly message?: string;
104
+ readonly schema?: string;
105
+ readonly verify?: VerifyOptions;
106
+ }
107
+ /**
108
+ * The before-user-created Auth hook: lets an address sign up when it is
109
+ * approved on the waitlist or the sign-up carries a valid invite code.
110
+ *
111
+ * ```ts
112
+ * export const POST = waitlistHook({ transport, secret: env.BEFORE_USER_CREATED_SECRET });
113
+ * ```
114
+ */
115
+ export declare function waitlistHook(options: WaitlistHookOptions): (request: Request) => Promise<Response>;
116
+ //#endregion
117
+ export { type BlockTransport, type CreateInviteCodeInput, type InviteCode, type Redemption, type Waitlist, type WaitlistEntry, type WaitlistHookOptions, type WaitlistOptions, type WaitlistPlace, type WaitlistStatus, rpcTransport, sqlTransport };
@@ -0,0 +1,132 @@
1
+ import { n as rpcTransport, r as sqlTransport } from "../../block-transport-BLr-ZgLc.js";
2
+ import { O as textOf, d as isRecord, h as optionalText, i as blockCall, k as toInstant, m as optionalInstant, n as applyTemporal, u as instantArg, x as recordsOf, y as recordOf } from "../../block-helpers-DWHxHsEQ.js";
3
+ import { r as hookError, t as authHook } from "../../verify-DL41hbvY.js";
4
+ //#region src/blocks/waitlist/waitlist.ts
5
+ const STATUSES = /* @__PURE__ */ new Set([
6
+ "waiting",
7
+ "approved",
8
+ "rejected",
9
+ "joined"
10
+ ]);
11
+ function statusOf(value) {
12
+ const text = textOf(value);
13
+ if (!STATUSES.has(text)) throw new TypeError(`Unknown waitlist status ${text}`);
14
+ return text;
15
+ }
16
+ const optionalNumber = (value) => value === null || value === void 0 ? void 0 : Number(value);
17
+ function entryOf(value) {
18
+ const row = recordOf(value, "waitlist_entries");
19
+ return {
20
+ id: textOf(row["id"]),
21
+ email: textOf(row["email"]),
22
+ status: statusOf(row["status"]),
23
+ position: Number(row["position"]),
24
+ referrer: optionalText(row["referrer"]),
25
+ metadata: isRecord(row["metadata"]) ? row["metadata"] : {},
26
+ userId: optionalText(row["user_id"]),
27
+ decidedBy: optionalText(row["decided_by"]),
28
+ decidedAt: optionalInstant(row["decided_at"]),
29
+ createdAt: toInstant(textOf(row["created_at"]))
30
+ };
31
+ }
32
+ function codeOf(value) {
33
+ const row = recordOf(value, "invite_codes");
34
+ return {
35
+ id: textOf(row["id"]),
36
+ prefix: textOf(row["prefix"]),
37
+ maxUses: optionalNumber(row["max_uses"]),
38
+ uses: Number(row["uses"]),
39
+ expiresAt: optionalInstant(row["expires_at"]),
40
+ organizationId: optionalText(row["organization_id"]),
41
+ role: optionalText(row["role"]),
42
+ createdBy: optionalText(row["created_by"]),
43
+ createdAt: toInstant(textOf(row["created_at"])),
44
+ revokedAt: optionalInstant(row["revoked_at"])
45
+ };
46
+ }
47
+ /** A random code in groups of four, without characters that look alike. */
48
+ function generateInviteCode() {
49
+ const alphabet = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
50
+ const chars = [...crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16))].map((byte) => alphabet[byte % 32]);
51
+ return [
52
+ 0,
53
+ 4,
54
+ 8,
55
+ 12
56
+ ].map((at) => chars.slice(at, at + 4).join("")).join("-");
57
+ }
58
+ function createWaitlist(options) {
59
+ applyTemporal(options);
60
+ const call = blockCall(options.transport, options.schema, options.mappers);
61
+ const decide = (entryId, approve) => call("decide_waitlist_entry", {
62
+ id: entryId,
63
+ approve
64
+ }, entryOf);
65
+ return {
66
+ join: (email, more = {}) => call("join_waitlist", {
67
+ email,
68
+ referrer: more.referrer ?? null,
69
+ metadata: more.metadata ?? {}
70
+ }, (value) => {
71
+ const row = recordOf(value, "join_waitlist");
72
+ const status = statusOf(row["status"]);
73
+ return {
74
+ position: optionalNumber(row["position"]),
75
+ status: status === "rejected" ? "waiting" : status
76
+ };
77
+ }),
78
+ entries: (query = {}) => call("list_waitlist", {
79
+ status: query.status === void 0 ? "waiting" : query.status,
80
+ page_size: query.limit ?? 50,
81
+ after_position: query.afterPosition ?? null
82
+ }, (value) => recordsOf(value, "list_waitlist").map(entryOf)),
83
+ approve: (entryId) => decide(entryId, true),
84
+ reject: (entryId) => decide(entryId, false),
85
+ createCode: (input = {}) => {
86
+ const code = input.code ?? generateInviteCode();
87
+ return call("create_invite_code", {
88
+ code,
89
+ max_uses: input.maxUses === void 0 ? 1 : input.maxUses,
90
+ expires_at: instantArg(input.expiresAt),
91
+ tenant: input.organizationId ?? null,
92
+ role: input.role ?? null
93
+ }, (value) => ({
94
+ code,
95
+ invite: codeOf(value)
96
+ }));
97
+ },
98
+ codes: (organizationId) => call("list_invite_codes", { tenant: organizationId ?? null }, (value) => recordsOf(value, "list_invite_codes").map(codeOf)),
99
+ revokeCode: (codeId) => call("revoke_invite_code", { id: codeId }, (value) => value === true),
100
+ redeem: (code) => call("redeem_invite_code", { code }, (value) => {
101
+ const row = recordOf(value, "redeem_invite_code");
102
+ return {
103
+ organizationId: optionalText(row["organizationId"]),
104
+ role: optionalText(row["role"])
105
+ };
106
+ })
107
+ };
108
+ }
109
+ /**
110
+ * The before-user-created Auth hook: lets an address sign up when it is
111
+ * approved on the waitlist or the sign-up carries a valid invite code.
112
+ *
113
+ * ```ts
114
+ * export const POST = waitlistHook({ transport, secret: env.BEFORE_USER_CREATED_SECRET });
115
+ * ```
116
+ */
117
+ function waitlistHook(options) {
118
+ const call = blockCall(options.transport, options.schema);
119
+ const field = options.codeField ?? "invite_code";
120
+ const message = options.message ?? "Sign-ups are invite-only. Join the waitlist first.";
121
+ return authHook("before_user_created", options.secret, async ({ user }) => {
122
+ const code = user.user_metadata?.[field];
123
+ const result = await call("waitlist_admit", {
124
+ email: user.email ?? "",
125
+ code: typeof code === "string" && code !== "" ? code : null
126
+ }, (value) => recordOf(value, "waitlist_admit")["allowed"] === true);
127
+ if (!result.ok) throw new Error(result.error.message);
128
+ return result.data ? {} : hookError(403, message);
129
+ }, options.verify);
130
+ }
131
+ //#endregion
132
+ export { createWaitlist, generateInviteCode, rpcTransport, sqlTransport, waitlistHook };