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,40 @@
1
+ import { t as AsyncResult, w as ErrorMapper } from "../../result-D7y2fT87.js";
2
+ import { i as sqlTransport, n as RpcClient, r as rpcTransport, t as BlockTransport } from "../../block-transport-DvaoPuZ9.js";
3
+ import { n as Logger } from "../../logger-DWVYUmwi.js";
4
+ import { t as StandardSchemaV1 } from "../../standard-CYsm7xpT.js";
5
+ import { r as BlockTemporalOptions } from "../../block-helpers-CKtbFcRv.js";
6
+ import { a as BlockTransportMiddleware, d as extendBlock, f as withBlockHooks, n as BlockHooks, p as wrapTransport } from "../../block-hooks-plbZ0AbJ.js";
7
+ import { n as FieldsOf } from "../../block-fields-SJ6fEf3o.js";
8
+ //#region src/blocks/profiles/profiles.d.ts
9
+ interface ProfilesOptions<S extends StandardSchemaV1 | undefined = undefined> extends BlockTemporalOptions {
10
+ readonly transport: BlockTransport;
11
+ /** `sql.modules.profiles.schema`, or the API schema of its wrappers. */
12
+ readonly schema?: string;
13
+ /**
14
+ * A Standard Schema for the profile columns the app adds
15
+ * (`sql.modules.profiles.options.extraColumns`), keyed by database name.
16
+ * It types and parses them on `mine()`, and validates them on
17
+ * `updateMine`, which returns a `validation` error for a bad value. The
18
+ * parsed fields are merged over the row, so the other columns stay.
19
+ */
20
+ readonly fields?: S;
21
+ /** `withBlockHooks` hooks around `mine` and `updateMine`. */
22
+ readonly hooks?: NoInfer<BlockHooks<Profiles<FieldsOf<S>>>>;
23
+ /** Receives the errors `after` hooks throw. Default: `console`. */
24
+ readonly logger?: Logger;
25
+ /** Error mappers that run before the built-in ones, as in `betterSupabase.mapError()`. */
26
+ readonly mappers?: readonly ErrorMapper[];
27
+ }
28
+ /** The caller's profile columns, by database name; `F` types the ones `fields` describes. */
29
+ type Profile<F extends object = Record<never, never>> = Readonly<Record<string, unknown>> & F;
30
+ interface Profiles<F extends object = Record<never, never>> {
31
+ mine(): AsyncResult<Profile<F> | undefined>;
32
+ updateMine(attrs: Readonly<Record<string, unknown>> & Partial<F>): AsyncResult<boolean>;
33
+ }
34
+ /**
35
+ * The `profiles` SQL module as typed calls. `mine` and `updateMine` are the
36
+ * functions a signed-in user runs on their own row.
37
+ */
38
+ export declare function createProfiles<S extends StandardSchemaV1 | undefined = undefined>(options: ProfilesOptions<S>): Profiles<FieldsOf<S>>;
39
+ //#endregion
40
+ export { type BlockHooks, type BlockTransport, type BlockTransportMiddleware, type Profile, type Profiles, type ProfilesOptions, type RpcClient, extendBlock, rpcTransport, sqlTransport, withBlockHooks, wrapTransport };
@@ -0,0 +1,28 @@
1
+ import { a as ok, t as AsyncResult } from "../../result-DzUbqgdW.js";
2
+ import { n as rpcTransport, r as sqlTransport } from "../../block-transport-BLr-ZgLc.js";
3
+ import { d as isRecord, i as blockCall, n as applyTemporal } from "../../block-helpers-DWHxHsEQ.js";
4
+ import { i as wrapTransport, n as extendBlock, r as withBlockHooks } from "../../block-hooks-BmjMyXTa.js";
5
+ import { t as blockFields } from "../../block-fields-GFkxl4dP.js";
6
+ //#region src/blocks/profiles/profiles.ts
7
+ /**
8
+ * The `profiles` SQL module as typed calls. `mine` and `updateMine` are the
9
+ * functions a signed-in user runs on their own row.
10
+ */
11
+ function createProfiles(options) {
12
+ applyTemporal(options);
13
+ const run = blockCall(options.transport, options.schema, options.mappers ?? []);
14
+ const fields = blockFields(options.fields, "profile fields");
15
+ return withBlockHooks({
16
+ mine() {
17
+ return run("my_profile", {}, (value) => isRecord(value) ? value : void 0).andThen(async (row) => row === void 0 ? ok(row) : fields.read(row));
18
+ },
19
+ updateMine(attrs) {
20
+ return AsyncResult.from(() => fields.write(attrs)).andThen((valid) => run("update_my_profile", { attrs: valid }, (value) => value === true));
21
+ }
22
+ }, options.hooks, {
23
+ block: "profiles",
24
+ ...options.logger ? { logger: options.logger } : {}
25
+ });
26
+ }
27
+ //#endregion
28
+ export { createProfiles, extendBlock, rpcTransport, sqlTransport, withBlockHooks, wrapTransport };
@@ -0,0 +1,185 @@
1
+ import { t as AsyncResult, w as ErrorMapper } from "../../result-D7y2fT87.js";
2
+ import { i as sqlTransport, r as rpcTransport, t as BlockTransport } from "../../block-transport-DvaoPuZ9.js";
3
+ import { r as BlockTemporalOptions } from "../../block-helpers-CKtbFcRv.js";
4
+ import { n as NotificationMessage, t as NotificationChannel } from "../../channel-_2Mx1Oyu.js";
5
+ //#region src/blocks/push/push.d.ts
6
+ type PushPlatform = "ios" | "android" | "web";
7
+ type PushProvider = "expo" | "fcm" | "apns" | "webpush";
8
+ interface PushDeviceInput {
9
+ readonly token: string;
10
+ readonly platform: PushPlatform;
11
+ /** Defaults to `expo`. */
12
+ readonly provider?: PushProvider;
13
+ readonly deviceName?: string;
14
+ readonly appVersion?: string;
15
+ }
16
+ /** One device a user gets pushes on. */
17
+ interface PushTarget {
18
+ readonly userId: string;
19
+ readonly token: string;
20
+ readonly platform: PushPlatform;
21
+ readonly provider: PushProvider;
22
+ }
23
+ interface PushDevicesOptions extends BlockTemporalOptions {
24
+ /** `sqlTransport(postgres.asUser(claims))`, `rpcTransport(supabase)`, or over `postgres.admin` for the sender. */
25
+ readonly transport: BlockTransport;
26
+ /** `sql.modules.push.schema`. Defaults to `better_supabase`. */
27
+ readonly schema?: string;
28
+ readonly mappers?: readonly ErrorMapper[];
29
+ }
30
+ /** The `push` SQL module as typed calls. */
31
+ interface PushDevices {
32
+ /** Registers the caller's device, or refreshes it; resolves with the device id. */
33
+ readonly register: (device: PushDeviceInput) => AsyncResult<string>;
34
+ /** Removes the caller's device; `false` when the caller had none with `token`. */
35
+ readonly unregister: (token: string) => AsyncResult<boolean>;
36
+ /** Service role: every device of `userIds`, newest first per user. */
37
+ readonly tokensFor: (userIds: readonly string[]) => AsyncResult<readonly PushTarget[]>;
38
+ /** Service role: deletes the devices with `tokens`; resolves with how many. */
39
+ readonly prune: (tokens: readonly string[]) => AsyncResult<number>;
40
+ }
41
+ export declare function createPushDevices(options: PushDevicesOptions): PushDevices;
42
+ /** The part of `expo-notifications` `registerDevice` uses. */
43
+ interface ExpoNotificationsLike {
44
+ getPermissionsAsync(): Promise<{
45
+ readonly status: string;
46
+ }>;
47
+ requestPermissionsAsync(): Promise<{
48
+ readonly status: string;
49
+ }>;
50
+ getExpoPushTokenAsync(options?: {
51
+ readonly projectId?: string;
52
+ }): Promise<{
53
+ readonly data: string;
54
+ }>;
55
+ }
56
+ interface RegisterDeviceOptions {
57
+ readonly notifications: ExpoNotificationsLike;
58
+ readonly devices: PushDevices;
59
+ /** `Platform.OS` from `react-native`. */
60
+ readonly platform: string;
61
+ /** `Constants.easConfig?.projectId`; Expo needs it outside Expo Go. */
62
+ readonly projectId?: string | undefined;
63
+ readonly deviceName?: string | undefined;
64
+ readonly appVersion?: string | undefined;
65
+ /** Asks for permission when it isn't granted yet. Defaults to true. */
66
+ readonly request?: boolean;
67
+ }
68
+ interface RegisteredDevice {
69
+ readonly deviceId: string;
70
+ readonly token: string;
71
+ }
72
+ /**
73
+ * Gets the Expo push token, asking for permission first, and registers the
74
+ * device for the signed-in user. Resolves with `null` when the user denies
75
+ * permission or the platform has no push.
76
+ *
77
+ * ```ts
78
+ * const device = await registerDevice({
79
+ * notifications: Notifications,
80
+ * devices: createPushDevices({ transport: rpcTransport(supabase) }),
81
+ * platform: Platform.OS,
82
+ * projectId: Constants.easConfig?.projectId,
83
+ * }).orThrow();
84
+ * ```
85
+ */
86
+ export declare function registerDevice(options: RegisterDeviceOptions): AsyncResult<RegisteredDevice | null>;
87
+ /**
88
+ * Wraps `signOut` so it first removes this device's token, while the
89
+ * session can still call `unregister_push_device`. A failed unregister
90
+ * doesn't stop the sign-out.
91
+ *
92
+ * ```ts
93
+ * const signOut = unregisterOnSignOut({
94
+ * signOut: () => supabase.auth.signOut(),
95
+ * devices,
96
+ * token: () => device?.token,
97
+ * });
98
+ * ```
99
+ */
100
+ export declare function unregisterOnSignOut<R>(options: {
101
+ readonly signOut: () => Promise<R>;
102
+ readonly devices: PushDevices;
103
+ readonly token: () => string | null | undefined;
104
+ }): () => Promise<R>;
105
+ /** One message for the Expo Push API; `to` is set per device. */
106
+ interface ExpoPushMessage {
107
+ readonly title?: string;
108
+ readonly subtitle?: string;
109
+ readonly body?: string;
110
+ readonly data?: Readonly<Record<string, unknown>>;
111
+ readonly sound?: "default" | null;
112
+ readonly badge?: number;
113
+ readonly channelId?: string;
114
+ readonly categoryId?: string;
115
+ readonly priority?: "default" | "normal" | "high";
116
+ /** Seconds the push service keeps trying to deliver. */
117
+ readonly ttl?: number;
118
+ readonly mutableContent?: boolean;
119
+ }
120
+ /** What Expo answered for one message: an id for the receipt, or an error. */
121
+ interface ExpoPushTicket {
122
+ readonly token: string;
123
+ readonly id?: string;
124
+ /** Expo's error code, e.g. `DeviceNotRegistered` or `MessageRateExceeded`. */
125
+ readonly error?: string;
126
+ readonly message?: string;
127
+ }
128
+ interface ExpoReceiptResult {
129
+ readonly delivered: number;
130
+ readonly failed: readonly ExpoPushTicket[];
131
+ /** Tokens deleted because Expo reported `DeviceNotRegistered`. */
132
+ readonly pruned: number;
133
+ }
134
+ interface ExpoPushOptions {
135
+ /** The Expo access token, when the project turns on push security. */
136
+ readonly accessToken?: string;
137
+ /** Prunes tokens Expo reports as `DeviceNotRegistered`. */
138
+ readonly devices?: PushDevices;
139
+ readonly fetch?: typeof fetch;
140
+ /** Defaults to `https://exp.host/--/api/v2/push`. */
141
+ readonly endpoint?: string;
142
+ }
143
+ interface ExpoPush {
144
+ /** Sends `message` to each token, 100 per request; tickets come back in token order. */
145
+ readonly send: (tokens: readonly string[], message: ExpoPushMessage) => Promise<readonly ExpoPushTicket[]>;
146
+ /**
147
+ * Reads the receipts for tickets that have an id, about 15 minutes after
148
+ * sending, and prunes the devices Expo no longer reaches.
149
+ */
150
+ readonly checkReceipts: (tickets: readonly ExpoPushTicket[]) => Promise<ExpoReceiptResult>;
151
+ }
152
+ /**
153
+ * A sender for the Expo Push API that needs only `fetch`. Tokens Expo
154
+ * reports as `DeviceNotRegistered`, in a ticket or a receipt, are pruned
155
+ * from `push_devices` when `devices` is set.
156
+ */
157
+ export declare function expoPush(options?: ExpoPushOptions): ExpoPush;
158
+ interface ExpoPushChannelOptions {
159
+ /** Over the service role, so `tokensFor` can read every user's devices. */
160
+ readonly devices: PushDevices;
161
+ readonly push: ExpoPush;
162
+ /** The delivery channel name. Defaults to `push`. */
163
+ readonly name?: string;
164
+ /** Overrides the message built from the notification and its rendered text. */
165
+ readonly message?: (message: NotificationMessage) => ExpoPushMessage;
166
+ /** Receives the tickets, to check their receipts later. */
167
+ readonly onTickets?: (tickets: readonly ExpoPushTicket[], message: NotificationMessage) => void | Promise<void>;
168
+ }
169
+ /**
170
+ * A notifications channel that pushes each delivery to the recipient's Expo
171
+ * devices. A recipient without devices is `skipped`; when every ticket
172
+ * fails for a reason other than an unregistered device, it throws so the
173
+ * delivery is retried.
174
+ *
175
+ * ```ts
176
+ * createNotifications({
177
+ * transport,
178
+ * types,
179
+ * channels: [expoPushChannel({ devices, push: expoPush({ devices }) })],
180
+ * });
181
+ * ```
182
+ */
183
+ export declare function expoPushChannel(options: ExpoPushChannelOptions): NotificationChannel;
184
+ //#endregion
185
+ export { type BlockTransport, type ExpoNotificationsLike, type ExpoPush, type ExpoPushChannelOptions, type ExpoPushMessage, type ExpoPushOptions, type ExpoPushTicket, type ExpoReceiptResult, type PushDeviceInput, type PushDevices, type PushDevicesOptions, type PushPlatform, type PushProvider, type PushTarget, type RegisterDeviceOptions, type RegisteredDevice, rpcTransport, sqlTransport };
@@ -0,0 +1,258 @@
1
+ import { n as rpcTransport, r as sqlTransport } from "../../block-transport-BLr-ZgLc.js";
2
+ import { C as run, O as textOf, b as recordOrEmpty, i as blockCall, n as applyTemporal, x as recordsOf } from "../../block-helpers-DWHxHsEQ.js";
3
+ //#region src/blocks/push/push.ts
4
+ const PLATFORMS = /* @__PURE__ */ new Set([
5
+ "ios",
6
+ "android",
7
+ "web"
8
+ ]);
9
+ function isPlatform(value) {
10
+ return PLATFORMS.has(value);
11
+ }
12
+ const PROVIDERS = /* @__PURE__ */ new Set([
13
+ "expo",
14
+ "fcm",
15
+ "apns",
16
+ "webpush"
17
+ ]);
18
+ function isProvider(value) {
19
+ return PROVIDERS.has(value);
20
+ }
21
+ function targetsOf(value) {
22
+ return recordsOf(value, "push_tokens_for").flatMap((row) => {
23
+ const platform = textOf(row["platform"]);
24
+ const provider = textOf(row["provider"]);
25
+ return isPlatform(platform) && isProvider(provider) ? [{
26
+ userId: textOf(row["userId"]),
27
+ token: textOf(row["token"]),
28
+ platform,
29
+ provider
30
+ }] : [];
31
+ });
32
+ }
33
+ function createPushDevices(options) {
34
+ applyTemporal(options);
35
+ const call = blockCall(options.transport, options.schema, options.mappers);
36
+ return {
37
+ register: (device) => call("register_push_device", {
38
+ token: device.token,
39
+ platform: device.platform,
40
+ provider: device.provider ?? "expo",
41
+ device_name: device.deviceName,
42
+ app_version: device.appVersion
43
+ }, textOf),
44
+ unregister: (token) => call("unregister_push_device", { token }, (value) => value === true),
45
+ tokensFor: (userIds) => call("push_tokens_for", { users: [...userIds] }, targetsOf),
46
+ prune: (tokens) => call("prune_push_tokens", { tokens: [...tokens] }, (value) => typeof value === "number" ? value : Number(value ?? 0))
47
+ };
48
+ }
49
+ /**
50
+ * Gets the Expo push token, asking for permission first, and registers the
51
+ * device for the signed-in user. Resolves with `null` when the user denies
52
+ * permission or the platform has no push.
53
+ *
54
+ * ```ts
55
+ * const device = await registerDevice({
56
+ * notifications: Notifications,
57
+ * devices: createPushDevices({ transport: rpcTransport(supabase) }),
58
+ * platform: Platform.OS,
59
+ * projectId: Constants.easConfig?.projectId,
60
+ * }).orThrow();
61
+ * ```
62
+ */
63
+ function registerDevice(options) {
64
+ return run(async () => {
65
+ const { notifications, platform } = options;
66
+ if (!isPlatform(platform)) return null;
67
+ let { status } = await notifications.getPermissionsAsync();
68
+ if (status !== "granted" && (options.request ?? true)) ({status} = await notifications.requestPermissionsAsync());
69
+ if (status !== "granted") return null;
70
+ const { data: token } = await notifications.getExpoPushTokenAsync(options.projectId === void 0 ? {} : { projectId: options.projectId });
71
+ return {
72
+ deviceId: await options.devices.register({
73
+ token,
74
+ platform,
75
+ provider: "expo",
76
+ ...options.deviceName === void 0 ? {} : { deviceName: options.deviceName },
77
+ ...options.appVersion === void 0 ? {} : { appVersion: options.appVersion }
78
+ }).orThrow(),
79
+ token
80
+ };
81
+ });
82
+ }
83
+ /**
84
+ * Wraps `signOut` so it first removes this device's token, while the
85
+ * session can still call `unregister_push_device`. A failed unregister
86
+ * doesn't stop the sign-out.
87
+ *
88
+ * ```ts
89
+ * const signOut = unregisterOnSignOut({
90
+ * signOut: () => supabase.auth.signOut(),
91
+ * devices,
92
+ * token: () => device?.token,
93
+ * });
94
+ * ```
95
+ */
96
+ function unregisterOnSignOut(options) {
97
+ return async () => {
98
+ const token = options.token();
99
+ if (token) await options.devices.unregister(token);
100
+ return options.signOut();
101
+ };
102
+ }
103
+ const SEND_CHUNK = 100;
104
+ const RECEIPT_CHUNK = 1e3;
105
+ const NOT_REGISTERED = "DeviceNotRegistered";
106
+ function chunks(items, size) {
107
+ const out = [];
108
+ for (let at = 0; at < items.length; at += size) out.push(items.slice(at, at + size));
109
+ return out;
110
+ }
111
+ function errorCode(entry) {
112
+ const code = recordOrEmpty(entry["details"])["error"];
113
+ return typeof code === "string" ? code : "Unknown";
114
+ }
115
+ /**
116
+ * A sender for the Expo Push API that needs only `fetch`. Tokens Expo
117
+ * reports as `DeviceNotRegistered`, in a ticket or a receipt, are pruned
118
+ * from `push_devices` when `devices` is set.
119
+ */
120
+ function expoPush(options = {}) {
121
+ const endpoint = options.endpoint ?? "https://exp.host/--/api/v2/push";
122
+ const doFetch = options.fetch ?? globalThis.fetch;
123
+ const headers = {
124
+ accept: "application/json",
125
+ "content-type": "application/json",
126
+ ...options.accessToken ? { authorization: `Bearer ${options.accessToken}` } : {}
127
+ };
128
+ const post = async (path, body) => {
129
+ const response = await doFetch(`${endpoint}/${path}`, {
130
+ method: "POST",
131
+ headers,
132
+ body: JSON.stringify(body)
133
+ });
134
+ const text = await response.text();
135
+ if (!response.ok) throw new Error(`Expo Push API ${path} answered ${String(response.status)}: ${text.slice(0, 500)}`);
136
+ const parsed = text === "" ? {} : JSON.parse(text);
137
+ return recordOrEmpty(parsed)["data"];
138
+ };
139
+ const prune = async (tokens) => {
140
+ if (!options.devices || tokens.length === 0) return 0;
141
+ let pruned = 0;
142
+ for (const chunk of chunks([...new Set(tokens)], RECEIPT_CHUNK)) pruned += await options.devices.prune(chunk).orThrow();
143
+ return pruned;
144
+ };
145
+ return {
146
+ send: async (tokens, message) => {
147
+ const tickets = [];
148
+ for (const chunk of chunks(tokens, SEND_CHUNK)) {
149
+ const data = await post("send", chunk.map((to) => ({
150
+ ...message,
151
+ to
152
+ })));
153
+ const list = Array.isArray(data) ? data : [];
154
+ chunk.forEach((token, at) => {
155
+ const entry = recordOrEmpty(list[at]);
156
+ const message = typeof entry["message"] === "string" ? entry["message"] : void 0;
157
+ tickets.push(entry["status"] === "ok" && typeof entry["id"] === "string" ? {
158
+ token,
159
+ id: entry["id"]
160
+ } : {
161
+ token,
162
+ error: errorCode(entry),
163
+ ...message === void 0 ? {} : { message }
164
+ });
165
+ });
166
+ }
167
+ await prune(tickets.filter((ticket) => ticket.error === NOT_REGISTERED).map((ticket) => ticket.token));
168
+ return tickets;
169
+ },
170
+ checkReceipts: async (tickets) => {
171
+ const byId = /* @__PURE__ */ new Map();
172
+ for (const ticket of tickets) if (ticket.id !== void 0) byId.set(ticket.id, ticket.token);
173
+ let delivered = 0;
174
+ const failed = [];
175
+ for (const ids of chunks([...byId.keys()], RECEIPT_CHUNK)) {
176
+ const receipts = recordOrEmpty(await post("getReceipts", { ids }));
177
+ for (const id of ids) {
178
+ const receipt = receipts[id];
179
+ if (receipt === void 0) continue;
180
+ const entry = recordOrEmpty(receipt);
181
+ if (entry["status"] === "ok") {
182
+ delivered += 1;
183
+ continue;
184
+ }
185
+ const message = typeof entry["message"] === "string" ? entry["message"] : void 0;
186
+ failed.push({
187
+ token: byId.get(id) ?? "",
188
+ id,
189
+ error: errorCode(entry),
190
+ ...message === void 0 ? {} : { message }
191
+ });
192
+ }
193
+ }
194
+ const pruned = await prune(failed.filter((ticket) => ticket.error === NOT_REGISTERED).map((ticket) => ticket.token));
195
+ return {
196
+ delivered,
197
+ failed,
198
+ pruned
199
+ };
200
+ }
201
+ };
202
+ }
203
+ function defaultMessage(message) {
204
+ const { notification, text } = message;
205
+ return {
206
+ title: text?.title ?? notification.summary ?? notification.type,
207
+ ...text?.body === void 0 ? {} : { body: text.body },
208
+ sound: "default",
209
+ data: {
210
+ notificationId: notification.id,
211
+ type: notification.type,
212
+ ...notification.actionPath === null ? {} : { actionPath: notification.actionPath }
213
+ }
214
+ };
215
+ }
216
+ /**
217
+ * A notifications channel that pushes each delivery to the recipient's Expo
218
+ * devices. A recipient without devices is `skipped`; when every ticket
219
+ * fails for a reason other than an unregistered device, it throws so the
220
+ * delivery is retried.
221
+ *
222
+ * ```ts
223
+ * createNotifications({
224
+ * transport,
225
+ * types,
226
+ * channels: [expoPushChannel({ devices, push: expoPush({ devices }) })],
227
+ * });
228
+ * ```
229
+ */
230
+ function expoPushChannel(options) {
231
+ const build = options.message ?? defaultMessage;
232
+ return {
233
+ apiVersion: 1,
234
+ name: options.name ?? "push",
235
+ async send(message) {
236
+ const tokens = (await options.devices.tokensFor([message.userId]).orThrow()).filter((target) => target.provider === "expo").map((target) => target.token);
237
+ if (tokens.length === 0) return {
238
+ status: "skipped",
239
+ provider: "expo"
240
+ };
241
+ const tickets = await options.push.send(tokens, build(message));
242
+ await options.onTickets?.(tickets, message);
243
+ const sent = tickets.find((ticket) => ticket.id !== void 0);
244
+ if (sent?.id !== void 0) return {
245
+ provider: "expo",
246
+ providerMessageId: sent.id
247
+ };
248
+ const retryable = tickets.find((ticket) => ticket.error !== NOT_REGISTERED);
249
+ if (retryable) throw new Error(`Expo rejected the push: ${retryable.error ?? "Unknown"}${retryable.message ? ` (${retryable.message})` : ""}`);
250
+ return {
251
+ status: "skipped",
252
+ provider: "expo"
253
+ };
254
+ }
255
+ };
256
+ }
257
+ //#endregion
258
+ export { createPushDevices, expoPush, expoPushChannel, registerDevice, rpcTransport, sqlTransport, unregisterOnSignOut };
@@ -0,0 +1,89 @@
1
+ import { t as AsyncResult, w as ErrorMapper } from "../../result-D7y2fT87.js";
2
+ import { i as sqlTransport, r as rpcTransport, t as BlockTransport } from "../../block-transport-DvaoPuZ9.js";
3
+ import { r as BlockTemporalOptions } from "../../block-helpers-CKtbFcRv.js";
4
+ import { StandardSchemaV1 } from "@standard-schema/spec";
5
+ //#region src/blocks/settings/settings.d.ts
6
+ /** One setting: its Standard Schema and the value `get` returns when none is stored. */
7
+ interface SettingEntry<S extends StandardSchemaV1 = StandardSchemaV1> {
8
+ readonly schema: S;
9
+ readonly default?: StandardSchemaV1.InferOutput<S>;
10
+ /**
11
+ * Platform settings only: the platform permission (`is_platform`) that
12
+ * may change this key. Default `sql.modules.settings.options.platform.permission`,
13
+ * then `settings.manage`.
14
+ */
15
+ readonly permission?: string;
16
+ /**
17
+ * Platform settings only: who reads this key, `public` (anyone, also
18
+ * signed out), `authenticated` (default) or `staff` (holders of its
19
+ * permission).
20
+ */
21
+ readonly read?: "public" | "authenticated" | "staff";
22
+ }
23
+ type SettingEntries = Readonly<Record<string, SettingEntry>>;
24
+ /** The value type of each key: the schema output, or `undefined` without a default. */
25
+ type SettingValues<E extends SettingEntries> = { readonly [K in keyof E]: E[K] extends SettingEntry<infer S> ? E[K] extends {
26
+ readonly default: unknown;
27
+ } ? StandardSchemaV1.InferOutput<S> : StandardSchemaV1.InferOutput<S> | undefined : never; };
28
+ /** What a scope's `set` accepts per key: the schema input. */
29
+ type SettingInputs<E extends SettingEntries> = { readonly [K in keyof E]: E[K] extends SettingEntry<infer S> ? StandardSchemaV1.InferInput<S> : never; };
30
+ interface SettingsSpec<U extends SettingEntries = SettingEntries, O extends SettingEntries = SettingEntries, P extends SettingEntries = SettingEntries> {
31
+ readonly user?: U;
32
+ readonly organization?: O;
33
+ /** Settings for the whole product, such as an admin console edits. */
34
+ readonly platform?: P;
35
+ }
36
+ interface SettingsConnectOptions extends BlockTemporalOptions {
37
+ readonly transport: BlockTransport;
38
+ /** The module schema (`sql.modules.settings.schema`), default `better_supabase`. */
39
+ readonly schema?: string;
40
+ readonly mappers?: readonly ErrorMapper[];
41
+ }
42
+ /** The caller's own settings. */
43
+ interface UserSettings<E extends SettingEntries> {
44
+ /** Every key, stored values merged over the defaults. */
45
+ get(): AsyncResult<SettingValues<E>>;
46
+ get<K extends keyof E & string>(key: K): AsyncResult<SettingValues<E>[K]>;
47
+ /** Validates `value` with the key's schema, then stores the output. */
48
+ set<K extends keyof E & string>(key: K, value: SettingInputs<E>[K]): AsyncResult<SettingValues<E>[K]>;
49
+ /** Removes the stored value, so `get` returns the default again. */
50
+ reset(key: keyof E & string): AsyncResult<boolean>;
51
+ }
52
+ /** One organization's settings; reads need `settings.read`, writes `settings.update`. */
53
+ interface OrganizationSettings<E extends SettingEntries> {
54
+ get(organizationId: string): AsyncResult<SettingValues<E>>;
55
+ get<K extends keyof E & string>(organizationId: string, key: K): AsyncResult<SettingValues<E>[K]>;
56
+ set<K extends keyof E & string>(organizationId: string, key: K, value: SettingInputs<E>[K]): AsyncResult<SettingValues<E>[K]>;
57
+ reset(organizationId: string, key: keyof E & string): AsyncResult<boolean>;
58
+ }
59
+ /**
60
+ * The product-wide settings: reads follow each key's `read`, writes need
61
+ * its platform permission.
62
+ */
63
+ type PlatformSettings<E extends SettingEntries> = UserSettings<E>;
64
+ interface SettingsClient<U extends SettingEntries, O extends SettingEntries, P extends SettingEntries = Record<never, never>> {
65
+ readonly user: UserSettings<U>;
66
+ readonly organization: OrganizationSettings<O>;
67
+ readonly platform: PlatformSettings<P>;
68
+ }
69
+ interface SettingsDefinition<U extends SettingEntries, O extends SettingEntries, P extends SettingEntries = Record<never, never>> {
70
+ /**
71
+ * Pass as `sql.modules.settings.options.schemas` for the database checks,
72
+ * and the platform keys' permissions and read rules.
73
+ */
74
+ readonly schemas: {
75
+ readonly user: U;
76
+ readonly organization: O;
77
+ readonly platform: P;
78
+ };
79
+ /** Typed `get`, `set` and `reset` over the settings module's functions. */
80
+ connect(options: SettingsConnectOptions): SettingsClient<U, O, P>;
81
+ }
82
+ /**
83
+ * Declares the app's settings with a Standard Schema per key. Values are
84
+ * validated before they are written, and stored values that no longer match
85
+ * their schema read as the default.
86
+ */
87
+ export declare function defineSettings<const U extends SettingEntries = Record<never, never>, const O extends SettingEntries = Record<never, never>, const P extends SettingEntries = Record<never, never>>(spec: SettingsSpec<U, O, P>): SettingsDefinition<U, O, P>;
88
+ //#endregion
89
+ export { type BlockTransport, type OrganizationSettings, type PlatformSettings, type SettingEntries, type SettingEntry, type SettingInputs, type SettingValues, type SettingsClient, type SettingsConnectOptions, type SettingsDefinition, type SettingsSpec, type UserSettings, rpcTransport, sqlTransport };