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.
- package/README.md +299 -41
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/actor-CQTlc1Hh.d.ts +43 -0
- package/dist/adapter-Bc1o3zyy.js +1106 -0
- package/dist/agents-CVHGd7It.d.ts +94 -0
- package/dist/ai-cache-CBWs1W0k.js +80 -0
- package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
- package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
- package/dist/ai-chat-B24UI962.js +743 -0
- package/dist/ai-files-CSPNswUY.js +319 -0
- package/dist/ai-sdk/agents/index.d.ts +74 -0
- package/dist/ai-sdk/agents/index.js +159 -0
- package/dist/ai-sdk/batches/index.d.ts +74 -0
- package/dist/ai-sdk/batches/index.js +180 -0
- package/dist/ai-sdk/cache/index.d.ts +38 -0
- package/dist/ai-sdk/cache/index.js +127 -0
- package/dist/ai-sdk/chat/index.d.ts +2 -0
- package/dist/ai-sdk/chat/index.js +246 -0
- package/dist/ai-sdk/embeddings/index.d.ts +3 -0
- package/dist/ai-sdk/embeddings/index.js +2 -0
- package/dist/ai-sdk/files/index.d.ts +61 -0
- package/dist/ai-sdk/files/index.js +111 -0
- package/dist/ai-sdk/index.d.ts +145 -0
- package/dist/ai-sdk/index.js +174 -0
- package/dist/ai-sdk/mcp/index.d.ts +102 -0
- package/dist/ai-sdk/mcp/index.js +362 -0
- package/dist/ai-sdk/memory/index.d.ts +67 -0
- package/dist/ai-sdk/memory/index.js +175 -0
- package/dist/ai-sdk/react/index.d.ts +2 -0
- package/dist/ai-sdk/react/index.js +3 -0
- package/dist/ai-sdk/react/server.d.ts +6 -0
- package/dist/ai-sdk/react/server.js +7 -0
- package/dist/ai-sdk/workflow/index.d.ts +249 -0
- package/dist/ai-sdk/workflow/index.js +575 -0
- package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
- package/dist/ai-sdk/workflow/react/index.js +66 -0
- package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
- package/dist/ai-sdk/workflow/react/server.js +12 -0
- package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
- package/dist/announcements-CiyOs-xP.js +107 -0
- package/dist/announcements-ZRGnScWI.d.ts +72 -0
- package/dist/api-keys-rCGtKaZA.d.ts +156 -0
- package/dist/assistant-DwdpDH1q.d.ts +147 -0
- package/dist/astro/index.d.ts +86 -0
- package/dist/astro/index.js +93 -0
- package/dist/attributes-5dYul0u0.js +13 -0
- package/dist/auth-link-BjFPqwLz.d.ts +97 -0
- package/dist/auth-link-DrDX9KOT.js +114 -0
- package/dist/authorization-BFCqamMs.d.ts +172 -0
- package/dist/before-route-CnR0C0Jr.js +30 -0
- package/dist/bind-Bu_ZNa3W.d.ts +62 -0
- package/dist/bind-l4kAvYSv.js +97 -0
- package/dist/block-events-CrT8r7Fe.js +76 -0
- package/dist/block-fields-GFkxl4dP.js +49 -0
- package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
- package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
- package/dist/block-helpers-DWHxHsEQ.js +190 -0
- package/dist/block-hooks-BmjMyXTa.js +114 -0
- package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
- package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
- package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
- package/dist/blocks/agents/index.d.ts +3 -0
- package/dist/blocks/agents/index.js +123 -0
- package/dist/blocks/ai-cache/index.d.ts +3 -0
- package/dist/blocks/ai-cache/index.js +3 -0
- package/dist/blocks/ai-chat/index.d.ts +31 -0
- package/dist/blocks/ai-chat/index.js +5 -0
- package/dist/blocks/ai-chat/react/index.d.ts +77 -0
- package/dist/blocks/ai-chat/react/index.js +387 -0
- package/dist/blocks/ai-chat/react/server.d.ts +16 -0
- package/dist/blocks/ai-chat/react/server.js +14 -0
- package/dist/blocks/ai-files/index.d.ts +14 -0
- package/dist/blocks/ai-files/index.js +3 -0
- package/dist/blocks/ai-providers/index.d.ts +7 -0
- package/dist/blocks/ai-providers/index.js +211 -0
- package/dist/blocks/ai-tasks/index.d.ts +3 -0
- package/dist/blocks/ai-tasks/index.js +203 -0
- package/dist/blocks/announcements/index.d.ts +3 -0
- package/dist/blocks/announcements/index.js +3 -0
- package/dist/blocks/announcements/react/index.d.ts +31 -0
- package/dist/blocks/announcements/react/index.js +86 -0
- package/dist/blocks/announcements/react/server.d.ts +6 -0
- package/dist/blocks/announcements/react/server.js +7 -0
- package/dist/blocks/api-keys/index.d.ts +35 -0
- package/dist/blocks/api-keys/index.js +334 -0
- package/dist/blocks/attachments/index.d.ts +210 -0
- package/dist/blocks/attachments/index.js +222 -0
- package/dist/blocks/audit/index.d.ts +366 -0
- package/dist/blocks/audit/index.js +714 -0
- package/dist/blocks/billing/index.d.ts +265 -0
- package/dist/blocks/billing/index.js +400 -0
- package/dist/blocks/comments/index.d.ts +200 -0
- package/dist/blocks/comments/index.js +207 -0
- package/dist/blocks/connectors/index.d.ts +3 -0
- package/dist/blocks/connectors/index.js +164 -0
- package/dist/blocks/data-lifecycle/index.d.ts +251 -0
- package/dist/blocks/data-lifecycle/index.js +353 -0
- package/dist/blocks/entitlements/index.d.ts +14 -0
- package/dist/blocks/entitlements/index.js +25 -0
- package/dist/blocks/flags/index.d.ts +226 -0
- package/dist/blocks/flags/index.js +282 -0
- package/dist/blocks/inbox/index.d.ts +6 -0
- package/dist/blocks/inbox/index.js +499 -0
- package/dist/blocks/inbox/react/index.d.ts +2 -0
- package/dist/blocks/inbox/react/index.js +225 -0
- package/dist/blocks/inbox/react/server.d.ts +10 -0
- package/dist/blocks/inbox/react/server.js +12 -0
- package/dist/blocks/index.d.ts +65 -0
- package/dist/blocks/index.js +77 -0
- package/dist/blocks/jobs/index.d.ts +297 -0
- package/dist/blocks/jobs/index.js +1051 -0
- package/dist/blocks/knowledge/index.d.ts +3 -0
- package/dist/blocks/knowledge/index.js +3 -0
- package/dist/blocks/memory/index.d.ts +8 -0
- package/dist/blocks/memory/index.js +289 -0
- package/dist/blocks/notifications/index.d.ts +297 -0
- package/dist/blocks/notifications/index.js +425 -0
- package/dist/blocks/notifications/react/index.d.ts +44 -0
- package/dist/blocks/notifications/react/index.js +67 -0
- package/dist/blocks/notifications/react/server.d.ts +6 -0
- package/dist/blocks/notifications/react/server.js +7 -0
- package/dist/blocks/onboarding/index.d.ts +3 -0
- package/dist/blocks/onboarding/index.js +64 -0
- package/dist/blocks/onboarding/react/index.d.ts +28 -0
- package/dist/blocks/onboarding/react/index.js +78 -0
- package/dist/blocks/onboarding/react/server.d.ts +7 -0
- package/dist/blocks/onboarding/react/server.js +7 -0
- package/dist/blocks/organizations/index.d.ts +241 -0
- package/dist/blocks/organizations/index.js +400 -0
- package/dist/blocks/outbox/index.d.ts +3 -0
- package/dist/blocks/outbox/index.js +266 -0
- package/dist/blocks/profiles/index.d.ts +40 -0
- package/dist/blocks/profiles/index.js +28 -0
- package/dist/blocks/push/index.d.ts +185 -0
- package/dist/blocks/push/index.js +258 -0
- package/dist/blocks/settings/index.d.ts +89 -0
- package/dist/blocks/settings/index.js +104 -0
- package/dist/blocks/sso/index.d.ts +198 -0
- package/dist/blocks/sso/index.js +1297 -0
- package/dist/blocks/usage/index.d.ts +4 -0
- package/dist/blocks/usage/index.js +233 -0
- package/dist/blocks/waitlist/index.d.ts +117 -0
- package/dist/blocks/waitlist/index.js +132 -0
- package/dist/blocks/webhooks/index.d.ts +304 -0
- package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
- package/dist/blocks/workflow-builder/index.d.ts +21 -0
- package/dist/blocks/workflow-builder/index.js +5 -0
- package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
- package/dist/blocks/workflow-builder/react/index.js +119 -0
- package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
- package/dist/blocks/workflow-builder/react/server.js +11 -0
- package/dist/blocks/workflows/index.d.ts +3 -0
- package/dist/blocks/workflows/index.js +3 -0
- package/dist/blocks/workflows/react/index.d.ts +47 -0
- package/dist/blocks/workflows/react/index.js +137 -0
- package/dist/blocks/workflows/react/server.d.ts +8 -0
- package/dist/blocks/workflows/react/server.js +11 -0
- package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
- package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
- package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
- package/dist/channels-CkgQ_X60.js +114 -0
- package/dist/chat-sdk/index.d.ts +303 -0
- package/dist/chat-sdk/index.js +733 -0
- package/dist/chat-sdk/react/index.d.ts +2 -0
- package/dist/chat-sdk/react/index.js +3 -0
- package/dist/chat-sdk/react/server.d.ts +3 -0
- package/dist/chat-sdk/react/server.js +2 -0
- package/dist/claims-DDBQT6BK.js +61 -0
- package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
- package/dist/cli/config-B9HkL8nF.js +2 -0
- package/dist/cli/config-DU7EJImt.js +49 -0
- package/dist/cli/config-NiPxAmUF.js +1077 -0
- package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
- package/dist/cli/{doctor-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
- package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
- package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
- package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
- package/dist/cli/gen-BGLb_zou.js +3100 -0
- package/dist/cli/gen-DAH8FM2W.js +2 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
- package/dist/cli/{introspect--H7oGmcd.js → introspect-DNUTuNvb.js} +5 -5
- package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
- package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
- package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
- package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
- package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
- package/dist/cli/read-sets-CETOSFx4.js +223 -0
- package/dist/cli/{run-BKR2W_79.js → run-DNWxHynX.js} +33 -23
- package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
- package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
- package/dist/cli/sql-D0GUtUPp.js +536 -0
- package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
- package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
- package/dist/cli/{version-BDJuO0UR.js → version-hr88OZG0.js} +1 -1
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.js +11 -71
- package/dist/client/native/index.d.ts +228 -0
- package/dist/client/native/index.js +361 -0
- package/dist/client-CI0Z2zWX.js +277 -0
- package/dist/cloud-event-BnmD5fb9.js +46 -0
- package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
- package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
- package/dist/compose-BIBNgAnq.js +53 -0
- package/dist/composite-Bt1YK3Ke.d.ts +146 -0
- package/dist/composite-DhE66P5u.js +130 -0
- package/dist/config/index.d.ts +6 -4
- package/dist/config/index.js +5 -5
- package/dist/{config-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
- package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
- package/dist/connector-Dv8kK0MO.d.ts +107 -0
- package/dist/connectors-hkLCwyEz.d.ts +120 -0
- package/dist/context-BCrWe7ow.d.ts +237 -0
- package/dist/credentials/index.d.ts +31 -0
- package/dist/credentials/index.js +168 -0
- package/dist/cron-DVPUg5k3.js +145 -0
- package/dist/csv-CPAzEmB6.js +25 -0
- package/dist/db-exception-CnWcYPxL.js +15 -0
- package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
- package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
- package/dist/edge/index.d.ts +69 -11
- package/dist/edge/index.js +191 -75
- package/dist/elysia/index.d.ts +59 -0
- package/dist/elysia/index.js +62 -0
- package/dist/embeddings-4ZvFzjsU.js +127 -0
- package/dist/embeddings-C9KGQnXt.d.ts +68 -0
- package/dist/{refresh-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-DUxU4oHe.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
- package/dist/entitlements-DRl6ZJUm.js +24 -0
- package/dist/envelope-DqnYGRw7.js +47 -0
- package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
- package/dist/errors-DLjJHPLK.js +44 -0
- package/dist/escape-like-DHfx6jRr.js +7 -0
- package/dist/escape-like-ImTK0ps_.d.ts +15 -0
- package/dist/eve/index.d.ts +220 -0
- package/dist/eve/index.js +504 -0
- package/dist/eve-gT2Fpjut.d.ts +151 -0
- package/dist/events/index.d.ts +4 -3
- package/dist/events/index.js +9 -50
- package/dist/events-DWDhx77e.d.ts +549 -0
- package/dist/executor-Bq28caBo.js +718 -0
- package/dist/executor-C-R4pucm.js +83 -0
- package/dist/executor-CaWigTyR.d.ts +148 -0
- package/dist/executor-D14tGopJ.d.ts +36 -0
- package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
- package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
- package/dist/executor-DvsBbNBS.d.ts +261 -0
- package/dist/expo/index.d.ts +79 -0
- package/dist/expo/index.js +129 -0
- package/dist/expo-sqlite/index.d.ts +58 -0
- package/dist/expo-sqlite/index.js +104 -0
- package/dist/field-errors-BFOa7WhB.d.ts +99 -0
- package/dist/field-errors-VF1yb8yI.js +13 -0
- package/dist/framework-CONDyPYx.js +51 -0
- package/dist/framework-DuVb4Xa8.d.ts +25 -0
- package/dist/gateway-C1ssRHnf.d.ts +130 -0
- package/dist/graph-BGyLLFLX.js +265 -0
- package/dist/h3/index.d.ts +59 -0
- package/dist/h3/index.js +55 -0
- package/dist/h3/v1/index.d.ts +63 -0
- package/dist/h3/v1/index.js +49 -0
- package/dist/history-BZih6SFP.js +64 -0
- package/dist/hono/index.d.ts +56 -7
- package/dist/hono/index.js +97 -45
- package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
- package/dist/http-Cv4T29xh.js +40 -0
- package/dist/http-DdYadv-o.js +126 -0
- package/dist/image-url-pIVlO6R1.js +41 -0
- package/dist/impersonation-DcqaTBHx.js +148 -0
- package/dist/inbox-i7E1ppo6.d.ts +384 -0
- package/dist/index-ACiNPN4Z.d.ts +74 -0
- package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
- package/dist/index-BkWT_uBO.d.ts +51 -0
- package/dist/index-BpFYMsi0.d.ts +53 -0
- package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-ClmjK_o-.d.ts +55 -0
- package/dist/index-CtuakVRc.d.ts +267 -0
- package/dist/index-D48jVS-N.d.ts +246 -0
- package/dist/index-DDrYaUcq.d.ts +138 -0
- package/dist/index-DQh4VCc9.d.ts +98 -0
- package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
- package/dist/index.d.ts +65 -18
- package/dist/index.js +42 -14
- package/dist/invalidate-BBqhpxyB.d.ts +19 -0
- package/dist/json-CEnpTHlZ.js +16 -0
- package/dist/json-schema-CvER4kgT.js +502 -0
- package/dist/keys-4MnkWTTh.js +35 -0
- package/dist/kit-B5tid-q5.d.ts +60 -0
- package/dist/kit-Fm-Fv7q5.js +78 -0
- package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
- package/dist/knowledge-CDmiMLew.js +255 -0
- package/dist/lint/index.d.ts +1 -1
- package/dist/lint/index.js +37 -0
- package/dist/list/index.d.ts +3 -2
- package/dist/list/index.js +1 -444
- package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
- package/dist/list-query-gl808ac1.js +459 -0
- package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
- package/dist/logger-DWVYUmwi.d.ts +18 -0
- package/dist/mcp/index.d.ts +38 -11
- package/dist/mcp/index.js +82 -46
- package/dist/mcp/sdk/index.d.ts +105 -0
- package/dist/mcp/sdk/index.js +126 -0
- package/dist/message-CaKlqdsX.js +219 -0
- package/dist/message-CfDoR0Y6.d.ts +94 -0
- package/dist/messages-B9-5887d.js +715 -0
- package/dist/messages-DYP0sUTe.d.ts +59 -0
- package/dist/{mfa-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
- package/dist/modules-DpPwzC7E.d.ts +192 -0
- package/dist/modules-dxrVK3ID.js +228 -0
- package/dist/nestjs/index.d.ts +68 -0
- package/dist/nestjs/index.js +164 -0
- package/dist/next/client/index.d.ts +35 -0
- package/dist/next/client/index.js +36 -0
- package/dist/next/image/index.js +3 -24
- package/dist/next/index.d.ts +150 -51
- package/dist/next/index.js +261 -107
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.js +210 -0
- package/dist/node-headers-AO06VhqH.d.ts +24 -0
- package/dist/node-headers-C71zNQHe.js +55 -0
- package/dist/nuxt/index.d.ts +60 -0
- package/dist/nuxt/index.js +64 -0
- package/dist/onboarding-BZGHYJks.d.ts +62 -0
- package/dist/openapi/index.d.ts +1 -1
- package/dist/openapi/index.js +3 -3
- package/dist/orpc/index.d.ts +70 -11
- package/dist/orpc/index.js +73 -24
- package/dist/otel/index.d.ts +7 -7
- package/dist/otel/index.js +87 -57
- package/dist/outbox-Cq7pPYvl.d.ts +161 -0
- package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
- package/dist/plugin-tfXW1-qO.js +45 -0
- package/dist/plugins/actor/index.d.ts +2 -2
- package/dist/plugins/actor/index.js +3 -3
- package/dist/plugins/rules/index.d.ts +11 -4
- package/dist/plugins/rules/index.js +40 -13
- package/dist/plugins/soft-delete/index.d.ts +5 -4
- package/dist/plugins/soft-delete/index.js +10 -5
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/tenant/index.js +18 -11
- package/dist/plugins/timestamps/index.d.ts +5 -3
- package/dist/plugins/timestamps/index.js +6 -4
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +10 -6
- package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +1 -2
- package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
- package/dist/powersync/index.d.ts +43 -0
- package/dist/powersync/index.js +199 -0
- package/dist/powersync/react/index.d.ts +87 -0
- package/dist/powersync/react/index.js +108 -0
- package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
- package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
- package/dist/provider-BH5UWZJ6.d.ts +113 -0
- package/dist/provider-Di3sRutW.js +57 -0
- package/dist/query/index.d.ts +4 -2
- package/dist/query/index.js +4 -3
- package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
- package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
- package/dist/react/index.d.ts +11 -7
- package/dist/react/index.js +7 -3
- package/dist/react/native/index.d.ts +116 -0
- package/dist/react/native/index.js +130 -0
- package/dist/react/server.d.ts +28 -10
- package/dist/react/server.js +22 -5
- package/dist/react/session.d.ts +2 -2
- package/dist/react-4ZqkP8da.js +79 -0
- package/dist/react-F80mF4-t.js +409 -0
- package/dist/react-router/index.d.ts +83 -0
- package/dist/react-router/index.js +89 -0
- package/dist/react-topic-seAWjL3_.js +38 -0
- package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
- package/dist/realtime/index.d.ts +4 -5
- package/dist/realtime/index.js +144 -82
- package/dist/refusal-CeJWxmkH.js +61 -0
- package/dist/refusal-D1rgbzNq.d.ts +15 -0
- package/dist/replicas-CwrYp5Zj.js +94 -0
- package/dist/{view-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
- package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
- package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-D8iqWMr-.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
- package/dist/respond-BUgsXNgk.js +91 -0
- package/dist/respond-DoBijysA.d.ts +93 -0
- package/dist/result-D7y2fT87.d.ts +282 -0
- package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
- package/dist/run-state-CPo-1X2B.d.ts +12 -0
- package/dist/run-state-CgBKzYMW.js +13 -0
- package/dist/search-CUWCRYKL.js +9 -0
- package/dist/server/index.d.ts +143 -21
- package/dist/server/index.js +46 -14
- package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
- package/dist/session-ChiXDZdZ.d.ts +72 -0
- package/dist/shared-CBxosKK3.js +75 -0
- package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
- package/dist/shared-DDSjEGDR.d.ts +11 -0
- package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
- package/dist/sign-in-Cb1mwv6X.js +86 -0
- package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
- package/dist/simplify-DDO0j0LI.js +83 -0
- package/dist/solid/index.d.ts +131 -0
- package/dist/solid/index.js +344 -0
- package/dist/solid-start/index.d.ts +75 -0
- package/dist/solid-start/index.js +58 -0
- package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
- package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
- package/dist/sql/index.d.ts +330 -194
- package/dist/sql/index.js +34901 -6489
- package/dist/ssr/index.d.ts +6 -5
- package/dist/ssr/index.js +3 -3
- package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
- package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
- package/dist/stats-D_AD9GGu.js +1123 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.js +1027 -368
- package/dist/store-BdH5ruDx.js +66 -0
- package/dist/store-CGjgWu5n.d.ts +68 -0
- package/dist/streams/index.d.ts +76 -0
- package/dist/streams/index.js +77 -0
- package/dist/streams/redis/index.d.ts +52 -0
- package/dist/streams/redis/index.js +185 -0
- package/dist/stripe-BMj5LtsT.js +38 -0
- package/dist/stripe-D04h-QBT.d.ts +136 -0
- package/dist/{support-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
- package/dist/{support-view-Da5peKFg.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/svelte/index.d.ts +114 -0
- package/dist/svelte/index.js +344 -0
- package/dist/sveltekit/index.d.ts +116 -0
- package/dist/sveltekit/index.js +106 -0
- package/dist/tags-B99_U9Pp.js +39 -0
- package/dist/tags-Cx-LnIQP.d.ts +30 -0
- package/dist/tanstack-db/index.d.ts +71 -0
- package/dist/tanstack-db/index.js +72 -0
- package/dist/tanstack-start/index.d.ts +75 -0
- package/dist/tanstack-start/index.js +95 -0
- package/dist/tee-CoEppCER.js +101 -0
- package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
- package/dist/template-CwO38Do8.d.ts +6 -0
- package/dist/temporal-BJGitm-h.js +79 -0
- package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
- package/dist/tenant-I1TEZ_BX.js +27 -0
- package/dist/tenant-icPeuUBN.d.ts +17 -0
- package/dist/testing/index.d.ts +343 -37
- package/dist/testing/index.js +1186 -79
- package/dist/timing-CyTQPubY.js +92 -0
- package/dist/ttl-Hr34gRu8.js +12 -0
- package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
- package/dist/types-BI-0Sl2v.d.ts +359 -0
- package/dist/types-C05bxW-W.d.ts +220 -0
- package/dist/types-DGs5L0VN.d.ts +192 -0
- package/dist/types-TaiEeBGA.d.ts +156 -0
- package/dist/usage-CrvrL2vw.d.ts +177 -0
- package/dist/user-change-XzvgafU4.js +130 -0
- package/dist/vault-CSO7ss5C.d.ts +50 -0
- package/dist/vercel-connect/index.d.ts +47 -0
- package/dist/vercel-connect/index.js +119 -0
- package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
- package/dist/verify-DPuWngD4.d.ts +172 -0
- package/dist/{version-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
- package/dist/vue/index.d.ts +141 -0
- package/dist/vue/index.js +362 -0
- package/dist/watch-DI34G86j.d.ts +60 -0
- package/dist/watch-Xuxrvxq-.js +122 -0
- package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
- package/dist/workflow-builder-DJ1oHn8g.js +398 -0
- package/dist/workflow-sdk/builder/index.d.ts +85 -0
- package/dist/workflow-sdk/builder/index.js +250 -0
- package/dist/workflow-sdk/index.d.ts +14 -0
- package/dist/workflow-sdk/index.js +3 -0
- package/dist/workflow-sdk/world/index.d.ts +107 -0
- package/dist/workflow-sdk/world/index.js +702 -0
- package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
- package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
- package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
- package/dist/workflows-B0j9WKPu.d.ts +185 -0
- package/dist/workflows-wu1WWBn7.js +216 -0
- package/package.json +470 -29
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +21 -1
- package/schemas/snapshot-v2.json +8 -0
- package/skills/better-supabase/SKILL.md +41 -12
- package/skills/better-supabase/references/frontend.md +96 -0
- package/skills/better-supabase/references/plugins.md +10 -6
- package/skills/better-supabase/references/troubleshooting.md +2 -1
- package/skills/better-supabase-api/SKILL.md +76 -22
- package/skills/better-supabase-api/references/adapters.md +207 -0
- package/skills/better-supabase-api/references/ai.md +125 -0
- package/skills/better-supabase-api/references/expo.md +65 -0
- package/skills/better-supabase-api/references/powersync.md +35 -0
- package/skills/better-supabase-api/references/streams-credentials.md +105 -0
- package/skills/better-supabase-auth/SKILL.md +62 -18
- package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
- package/skills/better-supabase-testing/SKILL.md +3 -1
- package/dist/cli/config-dtoekM0v.js +0 -2
- package/dist/cli/gen-BJc9vdyu.js +0 -2
- package/dist/cli/gen-C2osRcr5.js +0 -2204
- package/dist/cli/read-sets-BfMQcKy8.js +0 -289
- package/dist/cli/sql-DzPbfngx.js +0 -348
- package/dist/entitlements-CTEBm7IB.js +0 -20
- package/dist/events-aIO7vsIk.d.ts +0 -230
- package/dist/executor-BunPOO-k.d.ts +0 -402
- package/dist/executor-XycESQPH.js +0 -94
- package/dist/impersonation-VfaGc4Q_.js +0 -41
- package/dist/index-BGdgBPdf.d.ts +0 -161
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dxn2a5cw.d.ts +0 -50
- package/dist/jobs/index.d.ts +0 -226
- package/dist/jobs/index.js +0 -1007
- package/dist/json-schema-m1fiwKgN.js +0 -208
- package/dist/kit-events-CTFDfSwb.js +0 -60
- package/dist/kit-transport-B82k1djG.d.ts +0 -33
- package/dist/kits-CGLLrNPd.js +0 -157
- package/dist/notifications/index.d.ts +0 -162
- package/dist/notifications/index.js +0 -264
- package/dist/orgs/index.d.ts +0 -132
- package/dist/orgs/index.js +0 -245
- package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
- package/dist/permdock-sql-DgOfeixi.js +0 -51
- package/dist/plugin-DwARMuQp.js +0 -59
- package/dist/server-Csx2sRjg.js +0 -655
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-DT-OhSxD.d.ts +0 -88
- package/dist/template-mbvlysOo.d.ts +0 -6
- package/dist/temporal-CVlIV2DZ.js +0 -40
- package/dist/user-change-CHFEUro1.js +0 -49
- package/dist/webhooks/index.d.ts +0 -285
- package/skills/better-supabase-auth/references/permdock.md +0 -100
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
import { n as dbError } from "../../errors-B11Duf73.js";
|
|
2
|
+
import { r as err, s as toDbError, t as AsyncResult } from "../../result-DzUbqgdW.js";
|
|
3
|
+
import { i as toBase64, r as fromBase64 } from "../../base64-D2gsioCY.js";
|
|
4
|
+
import { t as bindClient } from "../../bind-l4kAvYSv.js";
|
|
5
|
+
import { n as linkParams, r as signInWithOAuthBrowser, t as handleAuthDeepLink } from "../../auth-link-DrDX9KOT.js";
|
|
6
|
+
//#region src/client/native/auto-refresh.ts
|
|
7
|
+
/**
|
|
8
|
+
* Refreshes the Supabase session only while the app is in the foreground,
|
|
9
|
+
* as supabase-js requires on React Native. Returns a function that removes
|
|
10
|
+
* the listener and stops refreshing.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { AppState } from 'react-native';
|
|
14
|
+
* autoRefreshOnForeground(supabase, AppState);
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
function autoRefreshOnForeground(supabase, appState) {
|
|
18
|
+
const apply = (state) => {
|
|
19
|
+
if (state === "active") supabase.auth.startAutoRefresh();
|
|
20
|
+
else supabase.auth.stopAutoRefresh();
|
|
21
|
+
};
|
|
22
|
+
if (appState.currentState === "active") apply("active");
|
|
23
|
+
const subscription = appState.addEventListener("change", apply);
|
|
24
|
+
return () => {
|
|
25
|
+
subscription.remove();
|
|
26
|
+
supabase.auth.stopAutoRefresh();
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/client/native/key-value.ts
|
|
31
|
+
function isMmkv(store) {
|
|
32
|
+
return "getString" in store;
|
|
33
|
+
}
|
|
34
|
+
function keyValue(store) {
|
|
35
|
+
if (!isMmkv(store)) return {
|
|
36
|
+
get: (key) => store.getItem(key),
|
|
37
|
+
set: (key, value) => store.setItem(key, value),
|
|
38
|
+
remove: (key) => store.removeItem(key)
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
get: (key) => Promise.resolve(store.getString(key) ?? null),
|
|
42
|
+
set: (key, value) => {
|
|
43
|
+
store.set(key, value);
|
|
44
|
+
return Promise.resolve();
|
|
45
|
+
},
|
|
46
|
+
remove: (key) => {
|
|
47
|
+
if (store.remove) store.remove(key);
|
|
48
|
+
else store.delete?.(key);
|
|
49
|
+
return Promise.resolve();
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
//#region src/client/native/storage.ts
|
|
55
|
+
const UNSAFE = /[^\w.-]/g;
|
|
56
|
+
/** FNV-1a, enough to tell apart keys that map to the same safe name. */
|
|
57
|
+
function hashOf(text) {
|
|
58
|
+
let hash = 2166136261;
|
|
59
|
+
for (const char of text) {
|
|
60
|
+
hash ^= char.codePointAt(0) ?? 0;
|
|
61
|
+
hash = Math.imul(hash, 16777619);
|
|
62
|
+
}
|
|
63
|
+
return (hash >>> 0).toString(36);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* expo-secure-store keys allow letters, digits, `.`, `-` and `_` only. A key
|
|
67
|
+
* that needs no change keeps its name (sessions stored before stay
|
|
68
|
+
* readable); one that does gets a hash suffix, so `a:b` and `a/b` differ.
|
|
69
|
+
*/
|
|
70
|
+
function safeKey(key) {
|
|
71
|
+
const safe = key.replaceAll(UNSAFE, "_");
|
|
72
|
+
return safe === key ? key : `${safe}-${hashOf(key)}`;
|
|
73
|
+
}
|
|
74
|
+
/** `<count>` or `<count>b` in `<key>.chunks`. */
|
|
75
|
+
const POINTER = /^([1-9]\d*)(b?)$/;
|
|
76
|
+
/**
|
|
77
|
+
* Supabase Auth storage on the device keychain (`expo-secure-store`),
|
|
78
|
+
* split into chunks so sessions above the platform's value size fit.
|
|
79
|
+
* Operations on one key run one at a time, and a write moves the pointer
|
|
80
|
+
* only after every chunk is stored, so a reader never joins chunks of two
|
|
81
|
+
* values and a write that fails part way keeps the previous value.
|
|
82
|
+
*
|
|
83
|
+
* ```ts
|
|
84
|
+
* import * as SecureStore from 'expo-secure-store';
|
|
85
|
+
* createClient(url, key, { auth: { storage: secureStorage(SecureStore) } });
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
function secureStorage(store, options = {}) {
|
|
89
|
+
const size = options.chunkSize ?? 1800;
|
|
90
|
+
const extra = options.storeOptions;
|
|
91
|
+
const get = (key) => extra ? store.getItemAsync(key, extra) : store.getItemAsync(key);
|
|
92
|
+
const set = (key, value) => extra ? store.setItemAsync(key, value, extra) : store.setItemAsync(key, value);
|
|
93
|
+
const remove = (key) => extra ? store.deleteItemAsync(key, extra) : store.deleteItemAsync(key);
|
|
94
|
+
if (!Number.isInteger(size) || size < 1) throw new TypeError("better-supabase: chunkSize must be a positive integer");
|
|
95
|
+
const countKey = (key) => `${safeKey(key)}.chunks`;
|
|
96
|
+
const chunkKey = (key, slot, index) => `${safeKey(key)}.${index}${slot}`;
|
|
97
|
+
const pointerOf = async (key) => {
|
|
98
|
+
const raw = await get(countKey(key));
|
|
99
|
+
const match = raw === null ? null : POINTER.exec(raw);
|
|
100
|
+
return match ? {
|
|
101
|
+
count: Number(match[1]),
|
|
102
|
+
slot: match[2] === "b" ? "b" : ""
|
|
103
|
+
} : {
|
|
104
|
+
count: 0,
|
|
105
|
+
slot: "b"
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
const removeChunks = async (key, slot, count) => {
|
|
109
|
+
await Promise.all(Array.from({ length: count }, (_, index) => remove(chunkKey(key, slot, index))));
|
|
110
|
+
};
|
|
111
|
+
const queues = /* @__PURE__ */ new Map();
|
|
112
|
+
/** Runs `task` after every earlier operation on `key` settled. */
|
|
113
|
+
const serial = (key, task) => {
|
|
114
|
+
const run = (queues.get(key) ?? Promise.resolve()).then(task);
|
|
115
|
+
const settled = run.then(() => void 0, () => void 0);
|
|
116
|
+
queues.set(key, settled);
|
|
117
|
+
settled.then(() => {
|
|
118
|
+
if (queues.get(key) === settled) queues.delete(key);
|
|
119
|
+
});
|
|
120
|
+
return run;
|
|
121
|
+
};
|
|
122
|
+
return {
|
|
123
|
+
getItem: (key) => serial(key, async () => {
|
|
124
|
+
const { count, slot } = await pointerOf(key);
|
|
125
|
+
if (count === 0) return null;
|
|
126
|
+
const chunks = await Promise.all(Array.from({ length: count }, (_, index) => get(chunkKey(key, slot, index))));
|
|
127
|
+
if (chunks.some((chunk) => chunk === null)) return null;
|
|
128
|
+
return chunks.join("");
|
|
129
|
+
}),
|
|
130
|
+
setItem: (key, value) => serial(key, async () => {
|
|
131
|
+
const chunks = [];
|
|
132
|
+
for (let start = 0; start < value.length; start += size) chunks.push(value.slice(start, start + size));
|
|
133
|
+
if (chunks.length === 0) chunks.push("");
|
|
134
|
+
const previous = await pointerOf(key);
|
|
135
|
+
const slot = previous.slot === "b" ? "" : "b";
|
|
136
|
+
await Promise.all(chunks.map((chunk, index) => set(chunkKey(key, slot, index), chunk)));
|
|
137
|
+
await set(countKey(key), `${chunks.length}${slot}`);
|
|
138
|
+
await removeChunks(key, previous.slot, previous.count);
|
|
139
|
+
}),
|
|
140
|
+
removeItem: (key) => serial(key, async () => {
|
|
141
|
+
const previous = await pointerOf(key);
|
|
142
|
+
await remove(countKey(key));
|
|
143
|
+
await removeChunks(key, previous.slot, previous.count);
|
|
144
|
+
})
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//#endregion
|
|
148
|
+
//#region src/client/native/large-storage.ts
|
|
149
|
+
const VERSION = "v1";
|
|
150
|
+
const IV_BYTES = 12;
|
|
151
|
+
function globalCrypto() {
|
|
152
|
+
const { crypto } = globalThis;
|
|
153
|
+
return crypto?.subtle && crypto.getRandomValues ? crypto : void 0;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Supabase Auth storage for sessions of any size: the session is encrypted
|
|
157
|
+
* with AES-GCM and kept in MMKV or AsyncStorage, and only its key lives in
|
|
158
|
+
* the keychain. A key that no longer decrypts (the app was reinstalled and
|
|
159
|
+
* one store kept its data) reads as signed out and is replaced on the next
|
|
160
|
+
* sign-in.
|
|
161
|
+
*
|
|
162
|
+
* ```ts
|
|
163
|
+
* import * as SecureStore from 'expo-secure-store';
|
|
164
|
+
* import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
165
|
+
* createClient(url, key, { auth: { storage: largeSecureStorage({ secureStore: SecureStore, storage: AsyncStorage }) } });
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
function largeSecureStorage(options) {
|
|
169
|
+
const store = keyValue(options.storage);
|
|
170
|
+
const secure = options.secureStore;
|
|
171
|
+
const extra = options.storeOptions;
|
|
172
|
+
const keyName = (key) => `${safeKey(key)}.aes`;
|
|
173
|
+
const getSecret = (key) => extra ? secure.getItemAsync(keyName(key), extra) : secure.getItemAsync(keyName(key));
|
|
174
|
+
const setSecret = (key, value) => extra ? secure.setItemAsync(keyName(key), value, extra) : secure.setItemAsync(keyName(key), value);
|
|
175
|
+
const removeSecret = (key) => extra ? secure.deleteItemAsync(keyName(key), extra) : secure.deleteItemAsync(keyName(key));
|
|
176
|
+
const cryptoOf = () => {
|
|
177
|
+
const found = options.crypto ?? globalCrypto();
|
|
178
|
+
if (!found) throw new Error("better-supabase: largeSecureStorage needs WebCrypto; pass { crypto } from react-native-quick-crypto");
|
|
179
|
+
return found;
|
|
180
|
+
};
|
|
181
|
+
const importKey = (raw) => cryptoOf().subtle.importKey("raw", raw, "AES-GCM", false, ["encrypt", "decrypt"]);
|
|
182
|
+
return {
|
|
183
|
+
async getItem(key) {
|
|
184
|
+
const [secret, sealed] = await Promise.all([getSecret(key), store.get(key)]);
|
|
185
|
+
if (secret === null || sealed === null) return null;
|
|
186
|
+
const [version, iv, data] = sealed.split(".");
|
|
187
|
+
if (version !== VERSION || iv === void 0 || data === void 0) return null;
|
|
188
|
+
try {
|
|
189
|
+
const plain = await cryptoOf().subtle.decrypt({
|
|
190
|
+
name: "AES-GCM",
|
|
191
|
+
iv: fromBase64(iv)
|
|
192
|
+
}, await importKey(fromBase64(secret)), fromBase64(data));
|
|
193
|
+
return new TextDecoder().decode(plain);
|
|
194
|
+
} catch {
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
async setItem(key, value) {
|
|
199
|
+
const crypto = cryptoOf();
|
|
200
|
+
const raw = crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(32));
|
|
201
|
+
const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));
|
|
202
|
+
const sealed = await crypto.subtle.encrypt({
|
|
203
|
+
name: "AES-GCM",
|
|
204
|
+
iv
|
|
205
|
+
}, await importKey(raw), new TextEncoder().encode(value));
|
|
206
|
+
await setSecret(key, toBase64(raw));
|
|
207
|
+
await store.set(key, `${VERSION}.${toBase64(iv)}.${toBase64(new Uint8Array(sealed))}`);
|
|
208
|
+
},
|
|
209
|
+
async removeItem(key) {
|
|
210
|
+
await Promise.all([store.remove(key), removeSecret(key)]);
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
//#endregion
|
|
215
|
+
//#region src/client/native/persist.ts
|
|
216
|
+
/**
|
|
217
|
+
* Persists the query cache to MMKV or AsyncStorage, so a cold start shows
|
|
218
|
+
* the last rows before the first fetch. The provider's `clearOnUserChange`
|
|
219
|
+
* drops them when another user signs in.
|
|
220
|
+
*
|
|
221
|
+
* ```tsx
|
|
222
|
+
* <PersistQueryClientProvider client={queryClient} persistOptions={{ persister: persistQueryCache(storage) }}>
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
function persistQueryCache(storage, options = {}) {
|
|
226
|
+
const store = keyValue(storage);
|
|
227
|
+
const key = options.key ?? "better-supabase.query-cache";
|
|
228
|
+
const throttleMs = options.throttleMs ?? 1e3;
|
|
229
|
+
let pending;
|
|
230
|
+
let timer;
|
|
231
|
+
let writing = Promise.resolve();
|
|
232
|
+
const flush = () => {
|
|
233
|
+
timer = void 0;
|
|
234
|
+
const next = pending;
|
|
235
|
+
pending = void 0;
|
|
236
|
+
if (!next) return writing;
|
|
237
|
+
writing = writing.then(() => store.set(key, next.value));
|
|
238
|
+
return writing;
|
|
239
|
+
};
|
|
240
|
+
return {
|
|
241
|
+
persistClient(client) {
|
|
242
|
+
pending = { value: JSON.stringify(client) };
|
|
243
|
+
timer ??= setTimeout(() => void flush(), throttleMs);
|
|
244
|
+
return Promise.resolve();
|
|
245
|
+
},
|
|
246
|
+
async restoreClient() {
|
|
247
|
+
const raw = await store.get(key);
|
|
248
|
+
let restored;
|
|
249
|
+
if (raw !== null) try {
|
|
250
|
+
restored = JSON.parse(raw);
|
|
251
|
+
} catch {}
|
|
252
|
+
return restored;
|
|
253
|
+
},
|
|
254
|
+
async removeClient() {
|
|
255
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
256
|
+
timer = void 0;
|
|
257
|
+
pending = void 0;
|
|
258
|
+
await writing;
|
|
259
|
+
await store.remove(key);
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
//#endregion
|
|
264
|
+
//#region src/client/native/query.ts
|
|
265
|
+
const NOOP = () => void 0;
|
|
266
|
+
/**
|
|
267
|
+
* Wires TanStack Query to the app lifecycle on React Native: queries count
|
|
268
|
+
* as focused while the app is active, and as online while NetInfo reports
|
|
269
|
+
* a connection (an unreachable internet counts as offline). Returns a
|
|
270
|
+
* function that removes every listener.
|
|
271
|
+
*
|
|
272
|
+
* ```ts
|
|
273
|
+
* import { focusManager, onlineManager } from '@tanstack/react-query';
|
|
274
|
+
* import NetInfo from '@react-native-community/netinfo';
|
|
275
|
+
* import { AppState } from 'react-native';
|
|
276
|
+
* syncQueryWithApp({ focusManager, onlineManager, appState: AppState, netInfo: NetInfo, supabase });
|
|
277
|
+
* ```
|
|
278
|
+
*/
|
|
279
|
+
function syncQueryWithApp(options) {
|
|
280
|
+
const { focusManager, onlineManager, appState, netInfo, supabase } = options;
|
|
281
|
+
focusManager.setEventListener((setFocused) => {
|
|
282
|
+
setFocused(appState.currentState === "active");
|
|
283
|
+
const subscription = appState.addEventListener("change", (state) => {
|
|
284
|
+
setFocused(state === "active");
|
|
285
|
+
});
|
|
286
|
+
return () => {
|
|
287
|
+
subscription.remove();
|
|
288
|
+
};
|
|
289
|
+
});
|
|
290
|
+
if (onlineManager && netInfo) onlineManager.setEventListener((setOnline) => netInfo.addEventListener((state) => {
|
|
291
|
+
setOnline(state.isConnected === true && state.isInternetReachable !== false);
|
|
292
|
+
}));
|
|
293
|
+
const stopRefresh = supabase ? autoRefreshOnForeground(supabase, appState) : void 0;
|
|
294
|
+
return () => {
|
|
295
|
+
focusManager.setEventListener(NOOP);
|
|
296
|
+
if (onlineManager && netInfo) onlineManager.setEventListener(NOOP);
|
|
297
|
+
stopRefresh?.();
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
//#endregion
|
|
301
|
+
//#region src/client/native/upload.ts
|
|
302
|
+
const TYPES = {
|
|
303
|
+
jpg: "image/jpeg",
|
|
304
|
+
jpeg: "image/jpeg",
|
|
305
|
+
png: "image/png",
|
|
306
|
+
gif: "image/gif",
|
|
307
|
+
webp: "image/webp",
|
|
308
|
+
heic: "image/heic",
|
|
309
|
+
heif: "image/heif",
|
|
310
|
+
mp4: "video/mp4",
|
|
311
|
+
mov: "video/quicktime",
|
|
312
|
+
m4a: "audio/mp4",
|
|
313
|
+
mp3: "audio/mpeg",
|
|
314
|
+
pdf: "application/pdf",
|
|
315
|
+
json: "application/json",
|
|
316
|
+
txt: "text/plain",
|
|
317
|
+
csv: "text/csv"
|
|
318
|
+
};
|
|
319
|
+
/** The content type for a file URI's extension, ignoring a query or fragment. */
|
|
320
|
+
function contentTypeOf(uri) {
|
|
321
|
+
const path = uri.split(/[?#]/, 1)[0] ?? uri;
|
|
322
|
+
const dot = path.lastIndexOf(".");
|
|
323
|
+
if (dot === -1 || dot < path.lastIndexOf("/")) return void 0;
|
|
324
|
+
return TYPES[path.slice(dot + 1).toLowerCase()];
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Uploads a local file (an `expo-image-picker` or `expo-document-picker`
|
|
328
|
+
* URI) to a connected bucket. The file is read into an `ArrayBuffer`, as
|
|
329
|
+
* React Native's `Blob` can't be uploaded; the content type comes from the
|
|
330
|
+
* option, the response or the extension.
|
|
331
|
+
*
|
|
332
|
+
* ```ts
|
|
333
|
+
* const picked = await ImagePicker.launchImageLibraryAsync();
|
|
334
|
+
* await uploadFromUri(avatars, { userId }, picked.assets[0].uri, { upsert: true });
|
|
335
|
+
* ```
|
|
336
|
+
*/
|
|
337
|
+
function uploadFromUri(bucket, target, uri, options = {}) {
|
|
338
|
+
const { fetch: read = (value) => fetch(value), ...upload } = options;
|
|
339
|
+
return AsyncResult.from(async () => {
|
|
340
|
+
let body;
|
|
341
|
+
let type;
|
|
342
|
+
try {
|
|
343
|
+
const response = await read(uri);
|
|
344
|
+
if (!response.ok) return err(unreadable(uri, response.status));
|
|
345
|
+
type = response.headers.get("content-type") ?? void 0;
|
|
346
|
+
body = await response.arrayBuffer();
|
|
347
|
+
} catch (cause) {
|
|
348
|
+
return err(toDbError(cause));
|
|
349
|
+
}
|
|
350
|
+
const contentType = upload.contentType ?? contentTypeOf(uri) ?? type;
|
|
351
|
+
return bucket.upload(target, body, {
|
|
352
|
+
...upload,
|
|
353
|
+
...contentType ? { contentType } : {}
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
function unreadable(uri, status) {
|
|
358
|
+
return dbError("invalid_input", `better-supabase: could not read ${uri} (status ${String(status)})`);
|
|
359
|
+
}
|
|
360
|
+
//#endregion
|
|
361
|
+
export { autoRefreshOnForeground, contentTypeOf, bindClient as createNativeClient, handleAuthDeepLink, keyValue, largeSecureStorage, linkParams, persistQueryCache, secureStorage, signInWithOAuthBrowser, syncQueryWithApp, uploadFromUri };
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { n as dbError } from "./errors-B11Duf73.js";
|
|
2
|
+
import { r as invalidateTables } from "./user-change-XzvgafU4.js";
|
|
3
|
+
import { n as sessionUserId, r as specKey, t as claimedTenant } from "./keys-4MnkWTTh.js";
|
|
4
|
+
import { n as liveQuery, t as liveCount } from "./live-CTAZQkwl.js";
|
|
5
|
+
//#region src/bindings/client.ts
|
|
6
|
+
/** The caller of the client's auth store. */
|
|
7
|
+
function callerOf(auth) {
|
|
8
|
+
return {
|
|
9
|
+
status: auth.status,
|
|
10
|
+
userId: auth.user?.id ?? null
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The caller of a plain supabase-js client, for subscriptions made without
|
|
15
|
+
* the provider. `loading` until auth-js reports the first state.
|
|
16
|
+
*/
|
|
17
|
+
function plainCaller(supabase) {
|
|
18
|
+
let caller = {
|
|
19
|
+
status: "loading",
|
|
20
|
+
userId: null
|
|
21
|
+
};
|
|
22
|
+
return {
|
|
23
|
+
current: () => caller,
|
|
24
|
+
subscribe: (listener) => {
|
|
25
|
+
const { data } = supabase.auth.onAuthStateChange((_event, session) => {
|
|
26
|
+
caller = {
|
|
27
|
+
status: session ? "signed-in" : "signed-out",
|
|
28
|
+
userId: session ? sessionUserId(session) : null
|
|
29
|
+
};
|
|
30
|
+
listener();
|
|
31
|
+
});
|
|
32
|
+
return () => {
|
|
33
|
+
data.subscription.unsubscribe();
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** Throws when `invalidate` has no query client to refetch with. */
|
|
39
|
+
function assertInvalidateClient(hook, options, queryClient) {
|
|
40
|
+
if (options?.invalidate && !queryClient) throw new Error(`better-supabase: ${hook}({ invalidate }) needs a queryClient on the provider or in the options`);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Subscribes to a topic by its rendered name. Returns the function that
|
|
44
|
+
* leaves, or `undefined` when the name does not match the topic.
|
|
45
|
+
*/
|
|
46
|
+
function startBroadcast(run) {
|
|
47
|
+
const matched = run.topic.match(run.name);
|
|
48
|
+
if (!matched) return void 0;
|
|
49
|
+
const { queryClient } = run;
|
|
50
|
+
const forward = (payload, message) => {
|
|
51
|
+
const current = run.latest();
|
|
52
|
+
const table = current.handlers;
|
|
53
|
+
(table?.[message.event] ?? table?.["*"])?.(payload, message);
|
|
54
|
+
const invalidate = current.options?.invalidate;
|
|
55
|
+
if (!invalidate || !queryClient) return;
|
|
56
|
+
if (typeof invalidate !== "function") {
|
|
57
|
+
invalidateTables(queryClient, invalidate);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
for (const queryKey of invalidate(message)) queryClient.invalidateQueries({ queryKey });
|
|
61
|
+
};
|
|
62
|
+
const self = run.latest().options?.self;
|
|
63
|
+
const subscription = run.topic.subscribe(run.supabase, matched, { "*": forward }, {
|
|
64
|
+
...self === void 0 ? {} : { self },
|
|
65
|
+
onStatus: run.onStatus,
|
|
66
|
+
onInvalid: (message, issues) => run.latest().options?.onInvalid?.(message, issues)
|
|
67
|
+
});
|
|
68
|
+
return () => {
|
|
69
|
+
subscription.unsubscribe();
|
|
70
|
+
run.onStatus("closed");
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** The key a live subscription restarts on: spec, tenant and caller. */
|
|
74
|
+
function liveKey(client, spec, auth, options) {
|
|
75
|
+
if (!spec || auth.status === "loading") return null;
|
|
76
|
+
const tenant = options.tenant ?? claimedTenant(auth, client.betterSupabase.meta);
|
|
77
|
+
return JSON.stringify([
|
|
78
|
+
specKey(spec),
|
|
79
|
+
tenant ?? null,
|
|
80
|
+
auth.user?.id ?? null,
|
|
81
|
+
options.debounceMs ?? null
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
/** Invalidates the cached queries that read a table whenever one changes. */
|
|
85
|
+
function startLiveQuery(run) {
|
|
86
|
+
const { client, queryClient, options } = run;
|
|
87
|
+
const tenant = options.tenant ?? claimedTenant(run.auth, client.betterSupabase.meta);
|
|
88
|
+
const userId = run.auth.user?.id ?? null;
|
|
89
|
+
const live = liveQuery(client.betterSupabase, client.supabase, run.spec, {
|
|
90
|
+
onChange: (tables) => void invalidateTables(queryClient, tables),
|
|
91
|
+
onStatus: run.onStatus,
|
|
92
|
+
...tenant === void 0 ? {} : { tenant },
|
|
93
|
+
...userId === null ? {} : { user: userId },
|
|
94
|
+
...options.debounceMs === void 0 ? {} : { debounceMs: options.debounceMs }
|
|
95
|
+
});
|
|
96
|
+
if (run.resumed) live.ready.then(() => void invalidateTables(queryClient, live.tables), () => void 0);
|
|
97
|
+
return () => {
|
|
98
|
+
live.unsubscribe();
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/** Splits a count source into its spec and the seed's count and time. */
|
|
102
|
+
function countSource(source, options) {
|
|
103
|
+
const seed = source && "spec" in source ? source : void 0;
|
|
104
|
+
return {
|
|
105
|
+
spec: (seed ? seed.spec : source) ?? null,
|
|
106
|
+
initial: seed?.count ?? options.initial,
|
|
107
|
+
seedAt: seed?.at,
|
|
108
|
+
seeded: seed !== void 0 && seed.count !== null
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const NO_COUNT = {
|
|
112
|
+
key: null,
|
|
113
|
+
count: void 0,
|
|
114
|
+
at: 0,
|
|
115
|
+
error: void 0
|
|
116
|
+
};
|
|
117
|
+
/** Refetches the count after each debounced change to a table it reads. */
|
|
118
|
+
function startLiveCount(run) {
|
|
119
|
+
const { client, key, options } = run;
|
|
120
|
+
const tenant = options.tenant ?? claimedTenant(run.auth, client.betterSupabase.meta);
|
|
121
|
+
const userId = run.auth.user?.id ?? null;
|
|
122
|
+
const live = liveCount(client.betterSupabase, client.supabase, client.db, run.spec, {
|
|
123
|
+
immediate: run.immediate,
|
|
124
|
+
...run.since === void 0 ? {} : { since: run.since },
|
|
125
|
+
onCount: (count) => {
|
|
126
|
+
const at = Date.now();
|
|
127
|
+
run.onState(() => ({
|
|
128
|
+
key,
|
|
129
|
+
count,
|
|
130
|
+
at,
|
|
131
|
+
error: void 0
|
|
132
|
+
}));
|
|
133
|
+
},
|
|
134
|
+
onError: (error) => {
|
|
135
|
+
run.onState((last) => ({
|
|
136
|
+
key,
|
|
137
|
+
count: last.key === key ? last.count : void 0,
|
|
138
|
+
at: last.key === key ? last.at : 0,
|
|
139
|
+
error
|
|
140
|
+
}));
|
|
141
|
+
},
|
|
142
|
+
onStatus: run.onStatus,
|
|
143
|
+
...tenant === void 0 ? {} : { tenant },
|
|
144
|
+
...userId === null ? {} : { user: userId },
|
|
145
|
+
...options.debounceMs === void 0 ? {} : { debounceMs: options.debounceMs }
|
|
146
|
+
});
|
|
147
|
+
return () => {
|
|
148
|
+
live.unsubscribe();
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** The count to show: the client's, unless a newer server seed arrived. */
|
|
152
|
+
function shownCount(state, key, source) {
|
|
153
|
+
const fresh = state.key === key;
|
|
154
|
+
const seedNewer = source.seedAt !== void 0 && source.seeded && source.seedAt > state.at;
|
|
155
|
+
return {
|
|
156
|
+
count: fresh && state.count !== void 0 && !seedNewer ? state.count : source.initial,
|
|
157
|
+
error: fresh ? state.error : void 0
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const NO_HANDLERS = {};
|
|
161
|
+
/** Joins a presence topic by its rendered name, or `undefined` when it does not match. */
|
|
162
|
+
function joinPresence(supabase, topic, name, handlers) {
|
|
163
|
+
const matched = topic.match(name);
|
|
164
|
+
if (!matched) return void 0;
|
|
165
|
+
const joined = topic.subscribe(supabase, matched, NO_HANDLERS, handlers);
|
|
166
|
+
let tracked;
|
|
167
|
+
return {
|
|
168
|
+
track: async (state) => {
|
|
169
|
+
const result = await joined.track(state);
|
|
170
|
+
return result.ok ? void 0 : result.error;
|
|
171
|
+
},
|
|
172
|
+
untrack: async () => {
|
|
173
|
+
const result = await joined.untrack();
|
|
174
|
+
return result.ok ? void 0 : result.error;
|
|
175
|
+
},
|
|
176
|
+
sync(state) {
|
|
177
|
+
const key = state === void 0 ? void 0 : JSON.stringify(state);
|
|
178
|
+
if (key === void 0 || key === tracked) return;
|
|
179
|
+
tracked = key;
|
|
180
|
+
if (state === null || state === void 0) joined.untrack();
|
|
181
|
+
else joined.track(state);
|
|
182
|
+
},
|
|
183
|
+
leave() {
|
|
184
|
+
joined.unsubscribe();
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/** The error `track` and `untrack` return before the join. */
|
|
189
|
+
const notJoined = () => Promise.resolve(dbError("invalid_request", "better-supabase: the presence topic is not joined"));
|
|
190
|
+
/**
|
|
191
|
+
* Tracks the runs of an action outside React: the inputs in flight, the
|
|
192
|
+
* last data and the last error. `latest` is read on each run, so the action
|
|
193
|
+
* and the callbacks can change between runs.
|
|
194
|
+
*/
|
|
195
|
+
function createActionRunner(latest) {
|
|
196
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
197
|
+
let inFlight = [];
|
|
198
|
+
let data;
|
|
199
|
+
let error;
|
|
200
|
+
let state = snapshot();
|
|
201
|
+
function snapshot() {
|
|
202
|
+
const pendingInputs = inFlight.map((item) => item.input);
|
|
203
|
+
return {
|
|
204
|
+
pending: inFlight.length > 0,
|
|
205
|
+
pendingInputs,
|
|
206
|
+
pendingInput: pendingInputs.at(-1),
|
|
207
|
+
data,
|
|
208
|
+
error
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
const emit = () => {
|
|
212
|
+
state = snapshot();
|
|
213
|
+
for (const listener of listeners) listener();
|
|
214
|
+
};
|
|
215
|
+
return {
|
|
216
|
+
current: () => state,
|
|
217
|
+
subscribe: (listener) => {
|
|
218
|
+
listeners.add(listener);
|
|
219
|
+
return () => {
|
|
220
|
+
listeners.delete(listener);
|
|
221
|
+
};
|
|
222
|
+
},
|
|
223
|
+
run: async (input) => {
|
|
224
|
+
const entry = { input };
|
|
225
|
+
inFlight = [...inFlight, entry];
|
|
226
|
+
error = void 0;
|
|
227
|
+
emit();
|
|
228
|
+
const done = () => {
|
|
229
|
+
inFlight = inFlight.filter((item) => item !== entry);
|
|
230
|
+
};
|
|
231
|
+
const { action, options } = latest();
|
|
232
|
+
let result;
|
|
233
|
+
try {
|
|
234
|
+
result = await action(input);
|
|
235
|
+
} catch (cause) {
|
|
236
|
+
done();
|
|
237
|
+
emit();
|
|
238
|
+
throw cause;
|
|
239
|
+
}
|
|
240
|
+
done();
|
|
241
|
+
if (result.ok) data = result.data;
|
|
242
|
+
else error = result.error;
|
|
243
|
+
emit();
|
|
244
|
+
if (result.ok) options.onSuccess?.(result.data, input);
|
|
245
|
+
else options.onError?.(result.error, input);
|
|
246
|
+
return result;
|
|
247
|
+
},
|
|
248
|
+
reset: () => {
|
|
249
|
+
data = void 0;
|
|
250
|
+
error = void 0;
|
|
251
|
+
emit();
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* One run per key: `update` restarts `start` when the key changes and stops
|
|
257
|
+
* the run when the key is `null`.
|
|
258
|
+
*/
|
|
259
|
+
function keyed() {
|
|
260
|
+
let current;
|
|
261
|
+
return {
|
|
262
|
+
update: (key, start) => {
|
|
263
|
+
if (current?.key === key) return;
|
|
264
|
+
current?.stop?.();
|
|
265
|
+
current = key === null ? void 0 : {
|
|
266
|
+
key,
|
|
267
|
+
stop: start()
|
|
268
|
+
};
|
|
269
|
+
},
|
|
270
|
+
stop: () => {
|
|
271
|
+
current?.stop?.();
|
|
272
|
+
current = void 0;
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
//#endregion
|
|
277
|
+
export { createActionRunner as a, liveKey as c, shownCount as d, startBroadcast as f, countSource as i, notJoined as l, startLiveQuery as m, assertInvalidateClient as n, joinPresence as o, startLiveCount as p, callerOf as r, keyed as s, NO_COUNT as t, plainCaller as u };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region src/events/cloud-event.ts
|
|
2
|
+
/**
|
|
3
|
+
* A block event as a CloudEvent: `dev.better-supabase.support.started` with
|
|
4
|
+
* the event data and the actor (`actorId`) as `data` and the tenant as
|
|
5
|
+
* `partitionkey`.
|
|
6
|
+
*/
|
|
7
|
+
function blockCloudEvent(event, options) {
|
|
8
|
+
return {
|
|
9
|
+
specversion: "1.0",
|
|
10
|
+
id: options.id?.() ?? crypto.randomUUID(),
|
|
11
|
+
source: options.source,
|
|
12
|
+
type: `${options.typePrefix ?? "dev.better-supabase"}.${event.type}`,
|
|
13
|
+
...event.subject ? { subject: event.subject } : {},
|
|
14
|
+
time: (options.now?.() ?? event.time).toString(),
|
|
15
|
+
datacontenttype: "application/json",
|
|
16
|
+
data: event.actorId ? {
|
|
17
|
+
...event.data,
|
|
18
|
+
actorId: event.actorId
|
|
19
|
+
} : event.data,
|
|
20
|
+
...event.tenant ? { partitionkey: event.tenant } : {}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Sends a CloudEvent for every block event (`support.*`, `organization.*`, ...) to
|
|
25
|
+
* `sink`. Returns a function that stops forwarding. Like
|
|
26
|
+
* `forwardMutations`, sends are tracked on `betterSupabase.events`.
|
|
27
|
+
*/
|
|
28
|
+
function forwardBlockEvents(betterSupabase, sink, options) {
|
|
29
|
+
const types = options.types;
|
|
30
|
+
return betterSupabase.events.on("block", (event) => {
|
|
31
|
+
if (types && !types.some((pattern) => pattern.endsWith(".*") ? event.type.startsWith(pattern.slice(0, -1)) : pattern === event.type)) return;
|
|
32
|
+
const events = [blockCloudEvent(event, options)];
|
|
33
|
+
const report = (error) => {
|
|
34
|
+
(options.onError ?? ((cause) => {
|
|
35
|
+
betterSupabase.events.logger.error("event sink failed", { cause });
|
|
36
|
+
}))(error, events);
|
|
37
|
+
};
|
|
38
|
+
try {
|
|
39
|
+
betterSupabase.events.track(Promise.resolve(sink.send(events)).catch(report));
|
|
40
|
+
} catch (error) {
|
|
41
|
+
report(error);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
export { forwardBlockEvents as n, blockCloudEvent as t };
|