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,148 @@
|
|
|
1
|
+
//#region src/auth/actor.ts
|
|
2
|
+
function isRecord(value) {
|
|
3
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function copyAct(level) {
|
|
6
|
+
const entries = Object.entries(level).map(([key, value]) => [key, key === "act" && isRecord(value) ? copyAct(value) : value]);
|
|
7
|
+
return Object.fromEntries(entries);
|
|
8
|
+
}
|
|
9
|
+
const INVALID = {
|
|
10
|
+
ok: false,
|
|
11
|
+
reason: "invalid-chain"
|
|
12
|
+
};
|
|
13
|
+
function actorAt(outer, id) {
|
|
14
|
+
const kind = outer["kind"];
|
|
15
|
+
const sessionId = outer["session_id"];
|
|
16
|
+
const readOnly = outer["read_only"];
|
|
17
|
+
const reason = outer["reason"];
|
|
18
|
+
if (kind === "support") {
|
|
19
|
+
if (typeof sessionId !== "string" || sessionId === "") return INVALID;
|
|
20
|
+
if (readOnly !== void 0 && typeof readOnly !== "boolean") return INVALID;
|
|
21
|
+
return {
|
|
22
|
+
ok: true,
|
|
23
|
+
actor: {
|
|
24
|
+
kind: "support",
|
|
25
|
+
id,
|
|
26
|
+
sessionId,
|
|
27
|
+
readOnly: readOnly ?? true,
|
|
28
|
+
...typeof reason === "string" ? { reason } : {}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (kind === "impersonation") return {
|
|
33
|
+
ok: true,
|
|
34
|
+
actor: {
|
|
35
|
+
kind: "impersonation",
|
|
36
|
+
id,
|
|
37
|
+
...typeof reason === "string" ? { reason } : {}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
if (kind !== void 0 || sessionId !== void 0) return INVALID;
|
|
41
|
+
return {
|
|
42
|
+
ok: true,
|
|
43
|
+
actor: {
|
|
44
|
+
kind: "oauth-client",
|
|
45
|
+
id,
|
|
46
|
+
chain: copyAct(outer)
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Reads only `act` and `client_id`. An
|
|
52
|
+
* `act` that is not a chain of objects each with a non-empty `sub`, a
|
|
53
|
+
* `kind` other than `support` or `impersonation`, a support level without
|
|
54
|
+
* a `session_id`, or a `session_id` without `kind` is `{ ok: false }`: the session must not pass as the user
|
|
55
|
+
* alone.
|
|
56
|
+
*/
|
|
57
|
+
function actorOf(claims) {
|
|
58
|
+
const outer = claims["act"];
|
|
59
|
+
if (outer !== void 0) {
|
|
60
|
+
if (!isRecord(outer)) return INVALID;
|
|
61
|
+
const id = outer["sub"];
|
|
62
|
+
if (typeof id !== "string" || id === "") return INVALID;
|
|
63
|
+
let level = outer["act"];
|
|
64
|
+
while (level !== void 0) {
|
|
65
|
+
if (!isRecord(level)) return INVALID;
|
|
66
|
+
const sub = level["sub"];
|
|
67
|
+
if (typeof sub !== "string" || sub === "") return INVALID;
|
|
68
|
+
level = level["act"];
|
|
69
|
+
}
|
|
70
|
+
return actorAt(outer, id);
|
|
71
|
+
}
|
|
72
|
+
const client = claims["client_id"];
|
|
73
|
+
if (typeof client === "string" && client !== "") return {
|
|
74
|
+
ok: true,
|
|
75
|
+
actor: {
|
|
76
|
+
id: client,
|
|
77
|
+
kind: "oauth-client"
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
return { ok: true };
|
|
81
|
+
}
|
|
82
|
+
/** The OAuth `scope` claim (a space-separated string or a list); `undefined` when empty. */
|
|
83
|
+
function delegationOf(claims) {
|
|
84
|
+
const scope = claims["scope"];
|
|
85
|
+
const scopes = typeof scope === "string" ? scope.split(/\s+/u).filter(Boolean) : Array.isArray(scope) ? scope.filter((item) => typeof item === "string") : [];
|
|
86
|
+
return scopes.length > 0 ? { scopes } : void 0;
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
//#region src/auth/impersonation.ts
|
|
90
|
+
/** The `act` claim for an impersonated session. */
|
|
91
|
+
function actClaim(options) {
|
|
92
|
+
return {
|
|
93
|
+
kind: "impersonation",
|
|
94
|
+
sub: options.actor,
|
|
95
|
+
reason: options.reason
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** The `act` claim that `impersonatorOf` reads back as `impersonator`. */
|
|
99
|
+
function impersonatorClaim(impersonator) {
|
|
100
|
+
const reason = impersonator.reason === void 0 ? {} : { reason: impersonator.reason };
|
|
101
|
+
return impersonator.kind === "support" ? {
|
|
102
|
+
kind: "support",
|
|
103
|
+
sub: impersonator.id,
|
|
104
|
+
session_id: impersonator.sessionId,
|
|
105
|
+
read_only: impersonator.readOnly ?? true,
|
|
106
|
+
...reason
|
|
107
|
+
} : {
|
|
108
|
+
kind: "impersonation",
|
|
109
|
+
sub: impersonator.id,
|
|
110
|
+
...reason
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The admin in `claims.act`: a support session or an impersonated session
|
|
115
|
+
* (`actorOf` reads the same level, so the two always agree). `undefined`
|
|
116
|
+
* for a normal session, an OAuth client or agent chain, and an invalid `act`.
|
|
117
|
+
*/
|
|
118
|
+
function impersonatorOf(claims) {
|
|
119
|
+
const outcome = actorOf(claims);
|
|
120
|
+
const actor = outcome.ok ? outcome.actor : void 0;
|
|
121
|
+
if (actor === void 0) return void 0;
|
|
122
|
+
switch (actor.kind) {
|
|
123
|
+
case "oauth-client": return;
|
|
124
|
+
case "support":
|
|
125
|
+
case "impersonation": return { ...actor };
|
|
126
|
+
default: return actor;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* The repository context of a signed-in user: the actor, with the
|
|
131
|
+
* impersonator from `act`, and the claims. Every adapter builds it here, so
|
|
132
|
+
* plugins see the same actor on the server, in middleware and in the browser.
|
|
133
|
+
*/
|
|
134
|
+
function userContext(user, claims) {
|
|
135
|
+
const impersonator = impersonatorOf(claims);
|
|
136
|
+
return {
|
|
137
|
+
actor: {
|
|
138
|
+
id: user.id,
|
|
139
|
+
kind: "user",
|
|
140
|
+
...user.role ? { role: user.role } : {},
|
|
141
|
+
...user.email ? { email: user.email } : {},
|
|
142
|
+
...impersonator ? { impersonator: impersonator.id } : {}
|
|
143
|
+
},
|
|
144
|
+
claims
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//#endregion
|
|
148
|
+
export { actorOf as a, userContext as i, impersonatorClaim as n, delegationOf as o, impersonatorOf as r, actClaim as t };
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/// <reference lib="esnext.temporal" />
|
|
2
|
+
import { t as AsyncResult, w as ErrorMapper } from "./result-D7y2fT87.js";
|
|
3
|
+
import { t as BlockTransport } from "./block-transport-DvaoPuZ9.js";
|
|
4
|
+
import { i as CursorPageOptions, r as BlockTemporalOptions } from "./block-helpers-CKtbFcRv.js";
|
|
5
|
+
//#region src/blocks/inbox/types.d.ts
|
|
6
|
+
/** The channels an inbox can sit on. */
|
|
7
|
+
type InboxChannel = "in_app" | "email" | "slack" | "teams" | "discord" | "telegram" | "whatsapp" | "messenger" | "instagram" | "sms" | "github" | "linear" | "other";
|
|
8
|
+
/** `bot`: the bot answers; `human`: staff answer; `paused`: nobody answers. */
|
|
9
|
+
type BotMode = "bot" | "human" | "paused";
|
|
10
|
+
type ConversationStatus = "open" | "pending" | "snoozed" | "resolved";
|
|
11
|
+
type ConversationPriority = "low" | "normal" | "high" | "urgent";
|
|
12
|
+
type MessageDirection = "inbound" | "outbound";
|
|
13
|
+
type MessageKind = "message" | "note";
|
|
14
|
+
type AuthorType = "contact" | "agent" | "bot" | "system";
|
|
15
|
+
type DeliveryStatus = "queued" | "sent" | "delivered" | "read" | "failed";
|
|
16
|
+
interface InboxRow {
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly tenant: string;
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly channel: InboxChannel;
|
|
21
|
+
readonly address: string | null;
|
|
22
|
+
readonly installationId: string | null;
|
|
23
|
+
readonly botMode: BotMode;
|
|
24
|
+
readonly settings: Readonly<Record<string, unknown>>;
|
|
25
|
+
readonly createdAt: Temporal.Instant;
|
|
26
|
+
readonly archivedAt: Temporal.Instant | null;
|
|
27
|
+
}
|
|
28
|
+
interface Contact {
|
|
29
|
+
readonly id: string;
|
|
30
|
+
readonly tenant?: string;
|
|
31
|
+
readonly userId: string | null;
|
|
32
|
+
readonly name: string | null;
|
|
33
|
+
readonly email: string | null;
|
|
34
|
+
readonly phone: string | null;
|
|
35
|
+
readonly avatarUrl: string | null;
|
|
36
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
37
|
+
}
|
|
38
|
+
interface Conversation {
|
|
39
|
+
readonly id: string;
|
|
40
|
+
readonly tenant: string;
|
|
41
|
+
readonly inboxId: string;
|
|
42
|
+
readonly contactId: string;
|
|
43
|
+
readonly subject: string | null;
|
|
44
|
+
readonly status: ConversationStatus;
|
|
45
|
+
readonly priority: ConversationPriority;
|
|
46
|
+
readonly assigneeId: string | null;
|
|
47
|
+
readonly teamId: string | null;
|
|
48
|
+
readonly botMode: BotMode;
|
|
49
|
+
/** The Chat SDK thread id, or `inbox:<id>` for the in-app widget. */
|
|
50
|
+
readonly threadId: string;
|
|
51
|
+
readonly snoozedUntil: Temporal.Instant | null;
|
|
52
|
+
readonly lastMessageAt: Temporal.Instant | null;
|
|
53
|
+
readonly preview: string | null;
|
|
54
|
+
readonly firstResponseAt: Temporal.Instant | null;
|
|
55
|
+
readonly resolvedAt: Temporal.Instant | null;
|
|
56
|
+
readonly metadata: Readonly<Record<string, unknown>>;
|
|
57
|
+
readonly createdAt: Temporal.Instant;
|
|
58
|
+
readonly contact: Contact | null;
|
|
59
|
+
readonly inbox: {
|
|
60
|
+
readonly id: string;
|
|
61
|
+
readonly name: string;
|
|
62
|
+
readonly channel: InboxChannel;
|
|
63
|
+
} | null;
|
|
64
|
+
/** When the caller last read it. */
|
|
65
|
+
readonly lastReadAt: Temporal.Instant | null;
|
|
66
|
+
/** When the contact last read it; `null` for contacts and before they read. */
|
|
67
|
+
readonly contactReadAt: Temporal.Instant | null;
|
|
68
|
+
/** In lists: whether a message arrived after `lastReadAt`. */
|
|
69
|
+
readonly unread?: boolean;
|
|
70
|
+
}
|
|
71
|
+
interface MessageAttachment {
|
|
72
|
+
readonly path?: string;
|
|
73
|
+
readonly url?: string;
|
|
74
|
+
readonly name?: string;
|
|
75
|
+
readonly contentType?: string;
|
|
76
|
+
readonly size?: number;
|
|
77
|
+
}
|
|
78
|
+
interface MessageDelivery {
|
|
79
|
+
readonly channel: string;
|
|
80
|
+
readonly status: DeliveryStatus;
|
|
81
|
+
readonly error: string | null;
|
|
82
|
+
}
|
|
83
|
+
interface InboxMessage {
|
|
84
|
+
readonly id: string;
|
|
85
|
+
readonly conversationId: string;
|
|
86
|
+
readonly direction: MessageDirection;
|
|
87
|
+
readonly kind: MessageKind;
|
|
88
|
+
readonly authorType: AuthorType;
|
|
89
|
+
readonly authorId: string | null;
|
|
90
|
+
readonly body: string;
|
|
91
|
+
readonly format: "text" | "markdown";
|
|
92
|
+
readonly attachments: readonly MessageAttachment[];
|
|
93
|
+
/** Emoji to the actors (user ids or channel ids) who reacted. */
|
|
94
|
+
readonly reactions: Readonly<Record<string, readonly string[]>>;
|
|
95
|
+
readonly mentions: readonly string[];
|
|
96
|
+
readonly externalId: string | null;
|
|
97
|
+
readonly replyTo: string | null;
|
|
98
|
+
readonly metadata: Readonly<Record<string, unknown>>;
|
|
99
|
+
readonly createdAt: Temporal.Instant;
|
|
100
|
+
readonly editedAt: Temporal.Instant | null;
|
|
101
|
+
readonly deletedAt: Temporal.Instant | null;
|
|
102
|
+
readonly delivery?: MessageDelivery | null;
|
|
103
|
+
}
|
|
104
|
+
interface ConversationEvent {
|
|
105
|
+
readonly id: string;
|
|
106
|
+
readonly type: string;
|
|
107
|
+
readonly actorId: string | null;
|
|
108
|
+
readonly data: Readonly<Record<string, unknown>>;
|
|
109
|
+
readonly createdAt: Temporal.Instant;
|
|
110
|
+
}
|
|
111
|
+
interface InboxCounts {
|
|
112
|
+
readonly open: number;
|
|
113
|
+
readonly mine: number;
|
|
114
|
+
readonly unassigned: number;
|
|
115
|
+
readonly unread: number;
|
|
116
|
+
}
|
|
117
|
+
/** What `purgeContact` erased. */
|
|
118
|
+
interface PurgedContact {
|
|
119
|
+
readonly conversations: number;
|
|
120
|
+
readonly messages: number;
|
|
121
|
+
/** Storage paths of the erased messages' attachments, for the caller to remove. */
|
|
122
|
+
readonly attachments: readonly string[];
|
|
123
|
+
}
|
|
124
|
+
interface InboundResult {
|
|
125
|
+
readonly conversationId: string;
|
|
126
|
+
readonly messageId: string;
|
|
127
|
+
readonly contactId: string;
|
|
128
|
+
readonly tenant: string;
|
|
129
|
+
/** A new conversation was opened for the thread. */
|
|
130
|
+
readonly created: boolean;
|
|
131
|
+
/** The message's `externalId` was already stored. */
|
|
132
|
+
readonly duplicate: boolean;
|
|
133
|
+
}
|
|
134
|
+
interface MessageTemplate {
|
|
135
|
+
readonly id: string;
|
|
136
|
+
readonly tenant: string;
|
|
137
|
+
readonly inboxId: string | null;
|
|
138
|
+
readonly name: string;
|
|
139
|
+
readonly channel: string;
|
|
140
|
+
readonly language: string;
|
|
141
|
+
readonly body: string;
|
|
142
|
+
readonly variables: readonly string[];
|
|
143
|
+
/** The provider's approved template name (WhatsApp). */
|
|
144
|
+
readonly externalId: string | null;
|
|
145
|
+
}
|
|
146
|
+
interface StoredInboundEvent {
|
|
147
|
+
readonly id: string;
|
|
148
|
+
readonly adapter: string;
|
|
149
|
+
readonly externalId: string | null;
|
|
150
|
+
readonly inboxId: string | null;
|
|
151
|
+
readonly tenant: string | null;
|
|
152
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
153
|
+
readonly body: string;
|
|
154
|
+
readonly attempts: number;
|
|
155
|
+
readonly receivedAt: Temporal.Instant;
|
|
156
|
+
}
|
|
157
|
+
//#endregion
|
|
158
|
+
//#region src/blocks/inbox/inbox.d.ts
|
|
159
|
+
interface InboxOptions extends BlockTemporalOptions {
|
|
160
|
+
/**
|
|
161
|
+
* `sqlTransport(postgres.asUser(claims))` or `rpcTransport(supabase)` for a
|
|
162
|
+
* member or a contact; over the service role for webhooks and workers.
|
|
163
|
+
*/
|
|
164
|
+
readonly transport: BlockTransport;
|
|
165
|
+
/** `sql.modules.inbox.schema`. Defaults to `better_supabase`. */
|
|
166
|
+
readonly schema?: string;
|
|
167
|
+
readonly mappers?: readonly ErrorMapper[];
|
|
168
|
+
}
|
|
169
|
+
interface CreateInboxInput {
|
|
170
|
+
readonly tenant: string;
|
|
171
|
+
readonly name: string;
|
|
172
|
+
readonly channel?: InboxChannel;
|
|
173
|
+
/** The channel's address: a phone number, a Slack team id, an email. */
|
|
174
|
+
readonly address?: string;
|
|
175
|
+
readonly botMode?: BotMode;
|
|
176
|
+
/** `widget: true` lets signed-in visitors open conversations in an in-app inbox. */
|
|
177
|
+
readonly settings?: Readonly<Record<string, unknown>>;
|
|
178
|
+
}
|
|
179
|
+
interface InboxPatch {
|
|
180
|
+
readonly name?: string;
|
|
181
|
+
readonly botMode?: BotMode;
|
|
182
|
+
readonly settings?: Readonly<Record<string, unknown>>;
|
|
183
|
+
readonly address?: string | null;
|
|
184
|
+
readonly installationId?: string | null;
|
|
185
|
+
readonly archived?: boolean;
|
|
186
|
+
}
|
|
187
|
+
interface ContactInput {
|
|
188
|
+
readonly id?: string;
|
|
189
|
+
readonly userId?: string;
|
|
190
|
+
readonly name?: string;
|
|
191
|
+
readonly email?: string;
|
|
192
|
+
readonly phone?: string;
|
|
193
|
+
readonly avatarUrl?: string;
|
|
194
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
195
|
+
/** The contact's id on a channel, such as a WhatsApp number. */
|
|
196
|
+
readonly identity?: {
|
|
197
|
+
readonly channel: string;
|
|
198
|
+
readonly externalId: string;
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
interface MessageInput {
|
|
202
|
+
readonly body: string;
|
|
203
|
+
/** `note` is an internal note only staff see. */
|
|
204
|
+
readonly kind?: "message" | "note";
|
|
205
|
+
readonly format?: "text" | "markdown";
|
|
206
|
+
readonly attachments?: readonly MessageAttachment[];
|
|
207
|
+
/** User ids; those who cannot read the inbox are dropped. */
|
|
208
|
+
readonly mentions?: readonly string[];
|
|
209
|
+
readonly replyTo?: string;
|
|
210
|
+
readonly externalId?: string;
|
|
211
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
212
|
+
/** For the service: who writes. Defaults to `bot`. */
|
|
213
|
+
readonly authorType?: "contact" | "bot" | "system";
|
|
214
|
+
/** For the service: the caller posts to the channel itself, so no outbound job is queued. */
|
|
215
|
+
readonly deliveredByCaller?: boolean;
|
|
216
|
+
}
|
|
217
|
+
interface StartConversationInput {
|
|
218
|
+
/**
|
|
219
|
+
* A contact id or the fields to find or create one. Leave it out on a
|
|
220
|
+
* widget inbox to open the conversation as the signed-in visitor, staff
|
|
221
|
+
* included.
|
|
222
|
+
*/
|
|
223
|
+
readonly contact?: string | ContactInput;
|
|
224
|
+
readonly subject?: string;
|
|
225
|
+
readonly priority?: ConversationPriority;
|
|
226
|
+
readonly botMode?: BotMode;
|
|
227
|
+
/** The Chat SDK thread id. Defaults to `inbox:<conversation id>`. */
|
|
228
|
+
readonly threadId?: string;
|
|
229
|
+
readonly assigneeId?: string;
|
|
230
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
231
|
+
readonly message?: string | MessageInput;
|
|
232
|
+
}
|
|
233
|
+
interface InboundInput {
|
|
234
|
+
readonly inboxId: string;
|
|
235
|
+
readonly threadId: string;
|
|
236
|
+
readonly contact: ContactInput & {
|
|
237
|
+
/** Shorthand for `identity` on the inbox's channel. */
|
|
238
|
+
readonly externalId?: string;
|
|
239
|
+
};
|
|
240
|
+
readonly message: Omit<MessageInput, "kind" | "authorType">;
|
|
241
|
+
readonly subject?: string;
|
|
242
|
+
/** `outbound` records a message sent from the platform by someone else. */
|
|
243
|
+
readonly direction?: "inbound" | "outbound";
|
|
244
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
245
|
+
}
|
|
246
|
+
interface ConversationFilter extends CursorPageOptions<Pick<Conversation, "id" | "lastMessageAt">> {
|
|
247
|
+
readonly inboxId?: string;
|
|
248
|
+
/** Defaults to `open`. */
|
|
249
|
+
readonly status?: ConversationStatus | "all";
|
|
250
|
+
readonly assignee?: "me" | "unassigned" | (string & {});
|
|
251
|
+
readonly teamId?: string;
|
|
252
|
+
readonly contactId?: string;
|
|
253
|
+
readonly search?: string;
|
|
254
|
+
/** The last item of the previous page. */
|
|
255
|
+
readonly cursor?: Pick<Conversation, "id" | "lastMessageAt">;
|
|
256
|
+
/** Up to 200. Defaults to 50. */
|
|
257
|
+
readonly limit?: number;
|
|
258
|
+
}
|
|
259
|
+
interface TemplateInput {
|
|
260
|
+
readonly name: string;
|
|
261
|
+
readonly channel: string;
|
|
262
|
+
readonly body: string;
|
|
263
|
+
readonly language?: string;
|
|
264
|
+
readonly inboxId?: string;
|
|
265
|
+
readonly variables?: readonly string[];
|
|
266
|
+
readonly externalId?: string;
|
|
267
|
+
}
|
|
268
|
+
/** The `inbox` SQL module as typed calls. */
|
|
269
|
+
interface Inbox {
|
|
270
|
+
readonly inboxes: {
|
|
271
|
+
create(input: CreateInboxInput): AsyncResult<InboxRow>;
|
|
272
|
+
update(id: string, patch: InboxPatch): AsyncResult<InboxRow>;
|
|
273
|
+
/** `null` removes the member. */
|
|
274
|
+
setMember(inboxId: string, userId: string, role: "agent" | "lead" | null): AsyncResult<boolean>;
|
|
275
|
+
createTeam(tenant: string, name: string): AsyncResult<{
|
|
276
|
+
readonly id: string;
|
|
277
|
+
readonly name: string;
|
|
278
|
+
}>;
|
|
279
|
+
setTeamMember(teamId: string, userId: string, present?: boolean): AsyncResult<boolean>;
|
|
280
|
+
};
|
|
281
|
+
readonly contacts: {
|
|
282
|
+
/** Finds the contact by id, identity, user or email, filling in what is missing. */
|
|
283
|
+
upsert(tenant: string, input: ContactInput): AsyncResult<Contact>;
|
|
284
|
+
};
|
|
285
|
+
readonly conversations: {
|
|
286
|
+
open(inboxId: string, input?: StartConversationInput): AsyncResult<Conversation>;
|
|
287
|
+
list(tenant: string | null, filter?: ConversationFilter): AsyncResult<readonly Conversation[]>;
|
|
288
|
+
get(conversationId: string): AsyncResult<Conversation | null>;
|
|
289
|
+
assign(conversationId: string, to: {
|
|
290
|
+
readonly assigneeId: string | null;
|
|
291
|
+
readonly teamId?: string | null;
|
|
292
|
+
}): AsyncResult<Conversation>;
|
|
293
|
+
setStatus(conversationId: string, status: ConversationStatus, options?: {
|
|
294
|
+
readonly snoozedUntil?: Temporal.Instant;
|
|
295
|
+
}): AsyncResult<Conversation>;
|
|
296
|
+
snooze(conversationId: string, until: Temporal.Instant): AsyncResult<Conversation>;
|
|
297
|
+
resolve(conversationId: string): AsyncResult<Conversation>;
|
|
298
|
+
reopen(conversationId: string): AsyncResult<Conversation>;
|
|
299
|
+
/** Hands a bot conversation to staff (`bot_mode = 'human'`) and tells them. */
|
|
300
|
+
handoff(conversationId: string, reason?: string): AsyncResult<Conversation>;
|
|
301
|
+
setBotMode(conversationId: string, mode: BotMode, reason?: string): AsyncResult<Conversation>;
|
|
302
|
+
markRead(conversationId: string): AsyncResult<Temporal.Instant>;
|
|
303
|
+
/** A typing ping on `inbox:<id>`; the service names the bot in `actor`. */
|
|
304
|
+
typing(conversationId: string, typing?: boolean, actor?: string): AsyncResult<boolean>;
|
|
305
|
+
events(conversationId: string): AsyncResult<readonly ConversationEvent[]>;
|
|
306
|
+
counts(tenant: string): AsyncResult<InboxCounts>;
|
|
307
|
+
};
|
|
308
|
+
readonly messages: {
|
|
309
|
+
send(conversationId: string, input: MessageInput): AsyncResult<InboxMessage>;
|
|
310
|
+
/** An internal note only staff see. */
|
|
311
|
+
note(conversationId: string, body: string, input?: Pick<MessageInput, "mentions" | "attachments" | "format">): AsyncResult<InboxMessage>;
|
|
312
|
+
list(conversationId: string, options?: CursorPageOptions<Temporal.Instant>): AsyncResult<readonly InboxMessage[]>;
|
|
313
|
+
get(messageId: string): AsyncResult<InboxMessage | null>;
|
|
314
|
+
edit(messageId: string, body: string): AsyncResult<InboxMessage>;
|
|
315
|
+
/** Leaves a tombstone with an empty body. */
|
|
316
|
+
remove(messageId: string): AsyncResult<InboxMessage>;
|
|
317
|
+
react(messageId: string, emoji: string, options?: {
|
|
318
|
+
readonly present?: boolean;
|
|
319
|
+
readonly actor?: string;
|
|
320
|
+
}): AsyncResult<Readonly<Record<string, readonly string[]>>>;
|
|
321
|
+
};
|
|
322
|
+
readonly deliveries: {
|
|
323
|
+
/** Service only: after posting a message on its channel. */
|
|
324
|
+
record(input: {
|
|
325
|
+
readonly messageId: string;
|
|
326
|
+
readonly channel: string;
|
|
327
|
+
readonly externalId?: string;
|
|
328
|
+
readonly status?: DeliveryStatus;
|
|
329
|
+
readonly error?: string;
|
|
330
|
+
}): AsyncResult<void>;
|
|
331
|
+
/** Service only: a status callback; returns how many deliveries moved. */
|
|
332
|
+
setStatus(input: {
|
|
333
|
+
readonly channel: string;
|
|
334
|
+
readonly externalId: string;
|
|
335
|
+
readonly status: DeliveryStatus;
|
|
336
|
+
readonly error?: string;
|
|
337
|
+
}): AsyncResult<number>;
|
|
338
|
+
};
|
|
339
|
+
readonly templates: {
|
|
340
|
+
upsert(tenant: string, input: TemplateInput): AsyncResult<MessageTemplate>;
|
|
341
|
+
delete(id: string): AsyncResult<boolean>;
|
|
342
|
+
};
|
|
343
|
+
/** Service only: channel messages, the webhook store and its sweeps. */
|
|
344
|
+
readonly inbound: {
|
|
345
|
+
/** A message that arrived on a channel: finds or opens the thread's conversation. */
|
|
346
|
+
record(input: InboundInput): AsyncResult<InboundResult>;
|
|
347
|
+
store(input: {
|
|
348
|
+
readonly adapter: string;
|
|
349
|
+
readonly body: string;
|
|
350
|
+
readonly externalId?: string;
|
|
351
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
352
|
+
readonly inboxId?: string;
|
|
353
|
+
readonly tenant?: string;
|
|
354
|
+
}): AsyncResult<{
|
|
355
|
+
readonly id: string;
|
|
356
|
+
readonly duplicate: boolean;
|
|
357
|
+
}>;
|
|
358
|
+
setStatus(id: string, status: "processing" | "processed" | "ignored" | "failed", error?: string): AsyncResult<boolean>;
|
|
359
|
+
pending(options?: {
|
|
360
|
+
readonly limit?: number;
|
|
361
|
+
readonly maxAttempts?: number;
|
|
362
|
+
}): AsyncResult<readonly StoredInboundEvent[]>;
|
|
363
|
+
purge(options?: {
|
|
364
|
+
readonly olderThan?: number | string;
|
|
365
|
+
readonly batch?: number;
|
|
366
|
+
}): AsyncResult<number>;
|
|
367
|
+
};
|
|
368
|
+
/** Service only: reopens snoozed conversations whose time came. */
|
|
369
|
+
wakeSnoozed(): AsyncResult<number>;
|
|
370
|
+
/**
|
|
371
|
+
* Erases a contact and its conversations for a data subject request
|
|
372
|
+
* (`inbox.manage` or the service). Remove the returned attachment paths
|
|
373
|
+
* from Storage afterwards.
|
|
374
|
+
*/
|
|
375
|
+
purgeContact(contactId: string): AsyncResult<PurgedContact>;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* The `inbox` SQL module as typed calls: inboxes, contacts, conversations,
|
|
379
|
+
* messages and notes, assignment, bot hand-off, read state, deliveries and
|
|
380
|
+
* the stored webhook events. The database checks every permission.
|
|
381
|
+
*/
|
|
382
|
+
declare function createInbox(options: InboxOptions): Inbox;
|
|
383
|
+
//#endregion
|
|
384
|
+
export { PurgedContact as A, InboxMessage as C, MessageDirection as D, MessageDelivery as E, MessageKind as O, InboxCounts as S, MessageAttachment as T, ConversationPriority as _, Inbox as a, InboundResult as b, MessageInput as c, createInbox as d, AuthorType as f, ConversationEvent as g, Conversation as h, InboundInput as i, StoredInboundEvent as j, MessageTemplate as k, StartConversationInput as l, Contact as m, ConversationFilter as n, InboxOptions as o, BotMode as p, CreateInboxInput as r, InboxPatch as s, ContactInput as t, TemplateInput as u, ConversationStatus as v, InboxRow as w, InboxChannel as x, DeliveryStatus as y };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { x as SubscriptionStatus } from "./index-DunNRdnT.js";
|
|
2
|
+
//#region src/blocks/inbox/react/index.d.ts
|
|
3
|
+
/** Loads one list, e.g. a server action that calls `inbox.conversations.list()`. */
|
|
4
|
+
type InboxSource<T> = () => Promise<readonly T[]>;
|
|
5
|
+
interface UseInboxOptions<T> {
|
|
6
|
+
/** The organization; the hook joins `inbox:org:<id>`. `null` waits. */
|
|
7
|
+
readonly organizationId: string | null;
|
|
8
|
+
readonly load: InboxSource<T>;
|
|
9
|
+
/** `sql.modules.inbox.options.topic`. Defaults to `inbox`. */
|
|
10
|
+
readonly topic?: string;
|
|
11
|
+
/** Runs for each broadcast, e.g. to show a toast for `message`. */
|
|
12
|
+
readonly onMessage?: (event: string, payload: unknown) => void;
|
|
13
|
+
}
|
|
14
|
+
interface InboxListState<T> {
|
|
15
|
+
/** `undefined` until the first load. */
|
|
16
|
+
readonly items: readonly T[] | undefined;
|
|
17
|
+
readonly status: SubscriptionStatus;
|
|
18
|
+
readonly error: unknown;
|
|
19
|
+
readonly refresh: () => Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The staff view of an organization's conversations, kept current: loads,
|
|
23
|
+
* then loads again after each ping on `inbox:org:<id>` and on rejoin.
|
|
24
|
+
*/
|
|
25
|
+
declare function useInbox<T>(options: UseInboxOptions<T>): InboxListState<T>;
|
|
26
|
+
interface UseConversationOptions<T> {
|
|
27
|
+
/** `null` waits, e.g. before the widget opens a conversation. */
|
|
28
|
+
readonly conversationId: string | null;
|
|
29
|
+
/** The messages, oldest first. */
|
|
30
|
+
readonly load: InboxSource<T>;
|
|
31
|
+
readonly topic?: string;
|
|
32
|
+
/** How long a typing ping counts. Defaults to 5000 ms. */
|
|
33
|
+
readonly typingMs?: number;
|
|
34
|
+
}
|
|
35
|
+
interface ConversationState<T> extends InboxListState<T> {
|
|
36
|
+
/** User ids typing now, the caller left out. */
|
|
37
|
+
readonly typing: readonly string[];
|
|
38
|
+
/** Tells the others the caller is typing; call it on input, throttled. */
|
|
39
|
+
readonly setTyping: (typing: boolean) => void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* One conversation's messages, kept current over `inbox:<id>`, with typing
|
|
43
|
+
* pings between staff and the contact. Notes never reach this topic.
|
|
44
|
+
*/
|
|
45
|
+
declare function useConversation<T>(options: UseConversationOptions<T>): ConversationState<T>;
|
|
46
|
+
interface UseInboxWidgetOptions<T> {
|
|
47
|
+
/**
|
|
48
|
+
* Opens the visitor's conversation, e.g. a server action that calls
|
|
49
|
+
* `inbox.conversations.open(inboxId, { message })` with the visitor's
|
|
50
|
+
* transport. Returns its id.
|
|
51
|
+
*/
|
|
52
|
+
readonly open: (message: string) => Promise<string>;
|
|
53
|
+
/** Sends into the open conversation. */
|
|
54
|
+
readonly send: (conversationId: string, message: string) => Promise<void>;
|
|
55
|
+
readonly load: (conversationId: string) => Promise<readonly T[]>;
|
|
56
|
+
/** Remembers the conversation across reloads. Defaults to `better-supabase:inbox-widget`. */
|
|
57
|
+
readonly storageKey?: string | null;
|
|
58
|
+
readonly topic?: string;
|
|
59
|
+
}
|
|
60
|
+
interface InboxWidgetState<T> extends ConversationState<T> {
|
|
61
|
+
readonly conversationId: string | null;
|
|
62
|
+
/** Opens the conversation with the first message, or sends into it. */
|
|
63
|
+
readonly submit: (message: string) => Promise<void>;
|
|
64
|
+
/** Forgets the conversation, so the next message opens a new one. */
|
|
65
|
+
readonly reset: () => void;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The visitor side of an in-app inbox: the first message opens the
|
|
69
|
+
* conversation, later ones go into it, and the messages and typing pings
|
|
70
|
+
* stay current. Visitors without an account sign in anonymously first.
|
|
71
|
+
*/
|
|
72
|
+
declare function useInboxWidget<T>(options: UseInboxWidgetOptions<T>): InboxWidgetState<T>;
|
|
73
|
+
//#endregion
|
|
74
|
+
export { UseConversationOptions as a, useConversation as c, InboxWidgetState as i, useInbox as l, InboxListState as n, UseInboxOptions as o, InboxSource as r, UseInboxWidgetOptions as s, ConversationState as t, useInboxWidget as u };
|