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