better-supabase 0.5.1 → 0.6.1
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-CHnPkCPd.js +1160 -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 +224 -0
- package/dist/blocks/attachments/index.js +234 -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 +259 -0
- package/dist/blocks/data-lifecycle/index.js +358 -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-BMqBgM3X.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-4JlOwgWG.js +2 -0
- package/dist/cli/gen-DeuDgPxN.js +3100 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-DMa6M7hV.js → init-C7Xd0Kda.js} +242 -27
- package/dist/cli/{introspect-BKlaIu_M.js → introspect-CSnMJ94U.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-C8tnlHSb.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-C_4JwyiM.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-CLqs9-OA.js +130 -0
- package/dist/composite-pSfeJNce.d.ts +146 -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-CdPDPpFs.d.ts +25 -0
- package/dist/framework-xjTBoyBB.js +51 -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-C6DWVEVG.d.ts} +237 -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 +34924 -6609
- 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-view-B8SlToQX.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/{support-wHnK6zp-.js → support-zIa1URaN.js} +32 -11
- 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-CQt77F3T.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
package/dist/edge/index.d.ts
CHANGED
|
@@ -1,7 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as BetterSupabase } from "../define-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { L as TableKey, a as AnyModels, i as AnyFunctions } from "../types-6BdhkmZe.js";
|
|
2
|
+
import { t as BetterSupabase } from "../define-CJJkkr1-.js";
|
|
3
|
+
import { i as ServerContext, o as ServerOptions, t as BetterServer } from "../server-C6DWVEVG.js";
|
|
4
|
+
import { t as AuthSession } from "../view-DbxLNu8L.js";
|
|
5
|
+
import { i as MiddlewareOptions, r as GuardOptions } from "../respond-DoBijysA.js";
|
|
6
|
+
import { s as BlockRequireOptions } from "../kit-B5tid-q5.js";
|
|
7
|
+
import { t as Validated } from "../shared-DDSjEGDR.js";
|
|
8
|
+
import { a as ResourceRouteOptions } from "../resource-D6Uc7Sk7.js";
|
|
9
|
+
import { AnyEntry, Contributions } from "@supabase/middleware";
|
|
10
|
+
import { WithCorsConfig } from "@supabase/middleware/cors";
|
|
11
|
+
//#region src/bridges/edge.d.ts
|
|
12
|
+
/** The platform context Workers pass as the third `fetch` argument. */
|
|
13
|
+
interface EdgeExecutionContext {
|
|
14
|
+
waitUntil(promise: Promise<unknown>): void;
|
|
15
|
+
}
|
|
16
|
+
/** `Deno.serve` passes `(request, info)`, Workers `fetch` passes `(request, env, ctx)`. */
|
|
17
|
+
type EdgeHandler = (request: Request, env?: unknown, executionContext?: EdgeExecutionContext) => Promise<Response>;
|
|
18
|
+
/**
|
|
19
|
+
* Runs an entry array around `handler` as a fetch handler for Supabase Edge
|
|
20
|
+
* Functions, Deno, Bun and Workers. The host's second argument seeds the
|
|
21
|
+
* context, so on Workers `getEnv` inside the entries reads the bindings.
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* Deno.serve(toEdge([withBetterSupabase(server)], async (req, ctx) =>
|
|
25
|
+
* Response.json(await ctx.db.notes.findMany().orThrow())))
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function toEdge<const Entries extends readonly AnyEntry[]>(entries: Entries & Validated<Entries>, handler: (request: Request, ctx: Contributions<Entries>, executionContext: EdgeExecutionContext | undefined, env: unknown) => Response | Promise<Response>): EdgeHandler;
|
|
29
|
+
//#endregion
|
|
5
30
|
//#region src/edge/index.d.ts
|
|
6
31
|
export interface CorsOptions {
|
|
7
32
|
/** Allowed origins, or `*`. Defaults to `*`. */
|
|
@@ -23,28 +48,61 @@ export interface EdgeOptions extends ServerOptions {
|
|
|
23
48
|
*/
|
|
24
49
|
readonly waitUntil?: (promise: Promise<unknown>) => void;
|
|
25
50
|
}
|
|
26
|
-
/** The platform context Workers pass as the third `fetch` argument. */
|
|
27
|
-
export interface EdgeExecutionContext {
|
|
28
|
-
waitUntil(promise: Promise<unknown>): void;
|
|
29
|
-
}
|
|
30
|
-
/** `Deno.serve` passes `(request, info)`, Workers `fetch` passes `(request, env, ctx)`. */
|
|
31
|
-
export type EdgeHandler = (request: Request, env?: unknown, executionContext?: EdgeExecutionContext) => Promise<Response>;
|
|
32
51
|
export type ResourceMap<M extends AnyModels> = { readonly [T in TableKey<M>]?: ResourceRouteOptions<M, T> | true; };
|
|
33
52
|
export interface ResourcesOptions extends MiddlewareOptions {
|
|
34
53
|
/** Path before the resources, e.g. `/api` (Supabase: `/<function-name>`). */
|
|
35
54
|
readonly basePath?: string;
|
|
36
55
|
}
|
|
56
|
+
type ParamNames<K extends string> = K extends `${string}:${infer Name}/${infer Rest}` ? Name | ParamNames<Rest> : K extends `${string}:${infer Name}` ? Name : never;
|
|
57
|
+
/**
|
|
58
|
+
* The params a route key declares: one per `:name` segment, and `*` for a
|
|
59
|
+
* final wildcard. `RouteParams<"GET /orgs/:org/files/*">` is
|
|
60
|
+
* `{ org: string; "*": string }`.
|
|
61
|
+
*/
|
|
62
|
+
export type RouteParams<K extends string> = { readonly [N in ParamNames<K> | (K extends `${string}/*` ? "*" : never)]: string; };
|
|
63
|
+
/** A route handler: the request, the caller's context and the path params. */
|
|
64
|
+
export type EdgeRouteHandler<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown, Params = Readonly<Record<string, string>>> = (request: Request, ctx: ServerContext<M, F, E, C, P> & {
|
|
65
|
+
readonly params: Params;
|
|
66
|
+
readonly session: AuthSession<C, P>;
|
|
67
|
+
readonly tenant: string | undefined;
|
|
68
|
+
}) => unknown;
|
|
69
|
+
/** A route with its own guard: `allow`, `aal`, `scopes`, `requireTenant`, `authorize`. */
|
|
70
|
+
export interface EdgeRoute<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown, Params = Readonly<Record<string, string>>> extends BlockRequireOptions<C, P> {
|
|
71
|
+
readonly handler: EdgeRouteHandler<M, F, E, C, P, Params>;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Routes by `"METHOD /path"` (or `"/path"` for every method). `:name`
|
|
75
|
+
* segments are params, a final `*` matches the rest of the path.
|
|
76
|
+
*/
|
|
77
|
+
export type EdgeRoutes<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> = Readonly<Record<string, EdgeRouteHandler<M, F, E, C, P> | EdgeRoute<M, F, E, C, P>>>;
|
|
37
78
|
export interface BetterEdge<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> extends BetterServer<M, F, E, C, P> {
|
|
38
79
|
/**
|
|
39
80
|
* A fetch handler (`Deno.serve`, Workers `fetch`) running as the caller.
|
|
40
81
|
* `Result`s become JSON or Problem Details; `undefined` becomes 204.
|
|
41
82
|
*/
|
|
42
83
|
handler(fn: (request: Request, ctx: ServerContext<M, F, E, C, P>) => unknown, options?: MiddlewareOptions): EdgeHandler;
|
|
84
|
+
/**
|
|
85
|
+
* A router: each route runs as the caller, behind the shared guard in
|
|
86
|
+
* `options` and its own. An unknown path answers 404 and a known path
|
|
87
|
+
* with another method 405, both before auth resolves. `ctx.params` is
|
|
88
|
+
* typed from the key: `"GET /customers/:id"` gets `params.id`.
|
|
89
|
+
*
|
|
90
|
+
* ```ts
|
|
91
|
+
* Deno.serve(bs.routes({
|
|
92
|
+
* 'GET /customers': (req, ctx) => ctx.db.customers.findMany(),
|
|
93
|
+
* 'GET /customers/:id': (req, ctx) => ctx.db.customers.find(ctx.params.id),
|
|
94
|
+
* 'POST /invites': { requireTenant: true, handler: (req, ctx) => invite(req, ctx) },
|
|
95
|
+
* }, { basePath: '/api' }))
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
routes<K extends string>(routes: { readonly [Key in K]: EdgeRouteHandler<M, F, E, C, P, RouteParams<Key>> | EdgeRoute<M, F, E, C, P, RouteParams<Key>>; }, options?: ResourcesOptions): EdgeHandler;
|
|
43
99
|
/** REST resources matching `createOpenApi`, e.g. `Deno.serve(bs.resources({ customers: true }))`. */
|
|
44
100
|
resources(map: ResourceMap<M>, options?: ResourcesOptions): EdgeHandler;
|
|
45
101
|
}
|
|
46
102
|
export declare const SUPABASE_CORS_HEADERS: readonly string[];
|
|
103
|
+
/** `CorsOptions` as `withCors` from `@supabase/middleware/cors` takes them. */
|
|
104
|
+
export declare function corsConfig(cors: CorsOptions): WithCorsConfig;
|
|
47
105
|
/** Fetch-handler integration for Supabase Edge Functions, Deno, Bun and Workers. */
|
|
48
106
|
export declare function createEdge<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options?: EdgeOptions): BetterEdge<M, F, E, C, P>;
|
|
49
107
|
//#endregion
|
|
50
|
-
export type { GuardOptions, MiddlewareOptions, ResourceRouteOptions };
|
|
108
|
+
export type { BlockRequireOptions, EdgeExecutionContext, EdgeHandler, GuardOptions, MiddlewareOptions, ResourceRouteOptions };
|
package/dist/edge/index.js
CHANGED
|
@@ -1,7 +1,104 @@
|
|
|
1
|
-
import { n as dbError } from "../errors-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { n as dbError } from "../errors-B11Duf73.js";
|
|
2
|
+
import { r as err } from "../result-DzUbqgdW.js";
|
|
3
|
+
import { a as problemResponse } from "../problem-BreOl8b8.js";
|
|
4
|
+
import { a as unexpectedResponse, c as extendServer, l as withExtra, n as flushEvents, s as createServer } from "../adapter-CHnPkCPd.js";
|
|
5
|
+
import { a as respond, t as defaultExpose } from "../respond-BUgsXNgk.js";
|
|
6
|
+
import { t as withBetterSupabase } from "../composite-CLqs9-OA.js";
|
|
7
|
+
import { t as defineResource } from "../resource-BsvzCMlX.js";
|
|
8
|
+
import { i as requireCaller } from "../kit-Fm-Fv7q5.js";
|
|
9
|
+
import { t as EVERY_CALLER } from "../framework-xjTBoyBB.js";
|
|
10
|
+
import { bufferRequest, pipeline, seedContext } from "@supabase/middleware";
|
|
11
|
+
import { withCors } from "@supabase/middleware/cors";
|
|
12
|
+
//#region src/bridges/edge.ts
|
|
13
|
+
/**
|
|
14
|
+
* Runs an entry array around `handler` as a fetch handler for Supabase Edge
|
|
15
|
+
* Functions, Deno, Bun and Workers. The host's second argument seeds the
|
|
16
|
+
* context, so on Workers `getEnv` inside the entries reads the bindings.
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* Deno.serve(toEdge([withBetterSupabase(server)], async (req, ctx) =>
|
|
20
|
+
* Response.json(await ctx.db.notes.findMany().orThrow())))
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
function toEdge(entries, handler) {
|
|
24
|
+
const EXECUTION = Symbol("toEdge.execution");
|
|
25
|
+
const ENV = Symbol("toEdge.env");
|
|
26
|
+
const run = pipeline(entries, (request, ctx) => Promise.resolve(handler(request, ctx, ctx[EXECUTION], ctx[ENV])));
|
|
27
|
+
return (request, env, executionContext) => run(request.body ? bufferRequest(request) : request, {
|
|
28
|
+
...seedContext(env),
|
|
29
|
+
[EXECUTION]: executionContext,
|
|
30
|
+
[ENV]: env
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region src/edge/routes.ts
|
|
35
|
+
const METHOD = /^([A-Z]+)\s+(\/.*)$/;
|
|
36
|
+
function split(path) {
|
|
37
|
+
return path.split("/").filter((segment) => segment !== "");
|
|
38
|
+
}
|
|
39
|
+
/** Parses `"METHOD /path"` keys once; static routes sort before params. */
|
|
40
|
+
function compileRoutes(routes) {
|
|
41
|
+
const compiled = [];
|
|
42
|
+
for (const [key, value] of Object.entries(routes)) {
|
|
43
|
+
const matched = METHOD.exec(key.trim());
|
|
44
|
+
const method = matched?.[1];
|
|
45
|
+
const path = matched?.[2] ?? key.trim();
|
|
46
|
+
if (!path.startsWith("/")) throw new TypeError(`better-supabase: route "${key}" must be "/path" or "METHOD /path"`);
|
|
47
|
+
const segments = split(path);
|
|
48
|
+
const rest = segments.at(-1) === "*";
|
|
49
|
+
if (rest) segments.pop();
|
|
50
|
+
const { handler, ...options } = typeof value === "function" ? { handler: value } : value;
|
|
51
|
+
compiled.push({
|
|
52
|
+
method,
|
|
53
|
+
segments,
|
|
54
|
+
rest,
|
|
55
|
+
handler,
|
|
56
|
+
options
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const weight = (route) => route.segments.filter((segment) => segment.startsWith(":")).length + (route.rest ? 100 : 0);
|
|
60
|
+
return compiled.toSorted((a, b) => weight(a) - weight(b));
|
|
61
|
+
}
|
|
62
|
+
function paramsOf(segments, rest, parts) {
|
|
63
|
+
if (rest ? parts.length < segments.length : parts.length !== segments.length) return void 0;
|
|
64
|
+
const params = {};
|
|
65
|
+
for (const [index, segment] of segments.entries()) {
|
|
66
|
+
const part = parts[index] ?? "";
|
|
67
|
+
if (segment.startsWith(":")) try {
|
|
68
|
+
params[segment.slice(1)] = decodeURIComponent(part);
|
|
69
|
+
} catch {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
else if (segment !== part) return void 0;
|
|
73
|
+
}
|
|
74
|
+
if (rest) params["*"] = parts.slice(segments.length).join("/");
|
|
75
|
+
return params;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The route for `method` and `path`: a match, the allowed methods when the
|
|
79
|
+
* path matches under another method (`HEAD` falls back to `GET`), or `"none"`.
|
|
80
|
+
*/
|
|
81
|
+
function matchRoute(routes, method, path) {
|
|
82
|
+
const parts = split(path);
|
|
83
|
+
const allowed = /* @__PURE__ */ new Set();
|
|
84
|
+
let fallback;
|
|
85
|
+
for (const route of routes) {
|
|
86
|
+
const params = paramsOf(route.segments, route.rest, parts);
|
|
87
|
+
if (!params) continue;
|
|
88
|
+
if (route.method === void 0 || route.method === method) return {
|
|
89
|
+
route,
|
|
90
|
+
params
|
|
91
|
+
};
|
|
92
|
+
if (method === "HEAD" && route.method === "GET") fallback ??= {
|
|
93
|
+
route,
|
|
94
|
+
params
|
|
95
|
+
};
|
|
96
|
+
allowed.add(route.method);
|
|
97
|
+
}
|
|
98
|
+
if (fallback) return fallback;
|
|
99
|
+
return allowed.size > 0 ? [...allowed] : "none";
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
5
102
|
//#region src/edge/index.ts
|
|
6
103
|
const SUPABASE_CORS_HEADERS = [
|
|
7
104
|
"authorization",
|
|
@@ -9,89 +106,107 @@ const SUPABASE_CORS_HEADERS = [
|
|
|
9
106
|
"apikey",
|
|
10
107
|
"content-type"
|
|
11
108
|
];
|
|
12
|
-
/**
|
|
13
|
-
function
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"access-control-allow-methods": (cors.methods ?? [
|
|
109
|
+
/** `CorsOptions` as `withCors` from `@supabase/middleware/cors` takes them. */
|
|
110
|
+
function corsConfig(cors) {
|
|
111
|
+
return {
|
|
112
|
+
origin: cors.origin === void 0 || typeof cors.origin === "string" ? cors.origin ?? "*" : [...cors.origin],
|
|
113
|
+
allowedHeaders: [...cors.headers ?? SUPABASE_CORS_HEADERS],
|
|
114
|
+
methods: [...cors.methods ?? [
|
|
19
115
|
"GET",
|
|
20
116
|
"POST",
|
|
21
117
|
"PATCH",
|
|
22
118
|
"DELETE",
|
|
23
119
|
"OPTIONS"
|
|
24
|
-
]
|
|
25
|
-
...cors.maxAge === void 0 ? {} : {
|
|
26
|
-
};
|
|
27
|
-
const any = {
|
|
28
|
-
"access-control-allow-origin": "*",
|
|
29
|
-
...fixed
|
|
30
|
-
};
|
|
31
|
-
return (request) => {
|
|
32
|
-
if (allowed === "*") return any;
|
|
33
|
-
const origin = request.headers.get("origin");
|
|
34
|
-
if (!origin || !origins.has(origin)) return;
|
|
35
|
-
return {
|
|
36
|
-
"access-control-allow-origin": origin,
|
|
37
|
-
...fixed,
|
|
38
|
-
vary: "origin"
|
|
39
|
-
};
|
|
120
|
+
]],
|
|
121
|
+
...cors.maxAge === void 0 ? {} : { maxAge: cors.maxAge }
|
|
40
122
|
};
|
|
41
123
|
}
|
|
42
|
-
function withHeaders(response, headers) {
|
|
43
|
-
let target = response;
|
|
44
|
-
try {
|
|
45
|
-
for (const [name, value] of Object.entries(headers)) target.headers.set(name, value);
|
|
46
|
-
} catch {
|
|
47
|
-
target = new Response(response.body, response);
|
|
48
|
-
for (const [name, value] of Object.entries(headers)) target.headers.set(name, value);
|
|
49
|
-
}
|
|
50
|
-
return target;
|
|
51
|
-
}
|
|
52
124
|
/** Fetch-handler integration for Supabase Edge Functions, Deno, Bun and Workers. */
|
|
53
125
|
function createEdge(betterSupabase, options = {}) {
|
|
54
126
|
const server = createServer(betterSupabase, options);
|
|
55
127
|
const expose = options.exposeErrors ?? defaultExpose();
|
|
56
128
|
const cors = options.cors === true ? {} : options.cors === false ? void 0 : options.cors;
|
|
57
|
-
const
|
|
129
|
+
const withCorsConfig = cors ? corsConfig(cors) : void 0;
|
|
58
130
|
const serve = (run, handlerOptions, early) => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
headers: extra ?? {}
|
|
64
|
-
});
|
|
65
|
-
const answered = early?.(request);
|
|
66
|
-
if (answered) return extra ? withHeaders(answered, extra) : answered;
|
|
67
|
-
const ctx = await server.context(request, { refresh: handlerOptions.refresh ?? false });
|
|
131
|
+
const authorized = toEdge([withBetterSupabase(server, {
|
|
132
|
+
...handlerOptions,
|
|
133
|
+
expose
|
|
134
|
+
})], async (request, ctx) => {
|
|
68
135
|
const instance = new URL(request.url).pathname;
|
|
69
|
-
const denied = guard(ctx.auth, handlerOptions.allow, handlerOptions.aal, handlerOptions.scopes);
|
|
70
|
-
let response;
|
|
71
136
|
try {
|
|
72
|
-
|
|
137
|
+
return await respond(() => run(request, ctx.bs, ctx.tenant), {
|
|
73
138
|
instance,
|
|
74
139
|
expose
|
|
75
|
-
})
|
|
140
|
+
});
|
|
76
141
|
} catch (cause) {
|
|
77
|
-
|
|
142
|
+
return unexpectedResponse(cause, {
|
|
78
143
|
instance,
|
|
79
144
|
expose
|
|
80
145
|
});
|
|
81
146
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
147
|
+
});
|
|
148
|
+
const routed = (request, env, executionContext) => Promise.resolve(early?.(request) ?? authorized(request, env, executionContext));
|
|
149
|
+
const answer = withCorsConfig ? toEdge([withCors(withCorsConfig)], (request, _ctx, executionContext, env) => routed(request, env, executionContext)) : routed;
|
|
150
|
+
return async (request, env, executionContext) => {
|
|
151
|
+
const response = await answer(request, env, executionContext);
|
|
152
|
+
flushEvents(server, options.waitUntil ?? executionContext?.waitUntil.bind(executionContext));
|
|
153
|
+
return response;
|
|
87
154
|
};
|
|
88
155
|
};
|
|
89
156
|
return extendServer(server, {
|
|
90
157
|
handler(fn, handlerOptions = {}) {
|
|
91
|
-
return serve(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
158
|
+
return serve(fn, handlerOptions);
|
|
159
|
+
},
|
|
160
|
+
routes(routes, routesOptions = {}) {
|
|
161
|
+
const base = (routesOptions.basePath ?? "").replace(/\/$/, "");
|
|
162
|
+
const compiled = compileRoutes(routes);
|
|
163
|
+
const { allow, aal, scopes, ...middlewareOptions } = routesOptions;
|
|
164
|
+
const shared = {
|
|
165
|
+
...allow === void 0 ? {} : { allow },
|
|
166
|
+
...aal === void 0 ? {} : { aal },
|
|
167
|
+
...scopes === void 0 ? {} : { scopes }
|
|
168
|
+
};
|
|
169
|
+
const find = (request) => {
|
|
170
|
+
const { pathname } = new URL(request.url);
|
|
171
|
+
const path = base === "" ? pathname : pathname === base || pathname.startsWith(`${base}/`) ? pathname.slice(base.length) || "/" : void 0;
|
|
172
|
+
const found = path === void 0 ? void 0 : matchRoute(compiled, request.method, path);
|
|
173
|
+
if (found === void 0 || found === "none") return problemResponse(dbError("not_found", `No route for ${pathname}`), { instance: pathname });
|
|
174
|
+
if (!("route" in found)) return Response.json({
|
|
175
|
+
type: "about:blank",
|
|
176
|
+
title: "Method Not Allowed",
|
|
177
|
+
status: 405,
|
|
178
|
+
detail: `${request.method} is not allowed on ${pathname}`,
|
|
179
|
+
instance: pathname
|
|
180
|
+
}, {
|
|
181
|
+
status: 405,
|
|
182
|
+
headers: {
|
|
183
|
+
allow: found.join(", "),
|
|
184
|
+
"content-type": "application/problem+json"
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
return found;
|
|
188
|
+
};
|
|
189
|
+
return serve(async (request, ctx, tenant) => {
|
|
190
|
+
const found = find(request);
|
|
191
|
+
if (found instanceof Response) return found;
|
|
192
|
+
const { route, params } = found;
|
|
193
|
+
const caller = await requireCaller(ctx.auth, {
|
|
194
|
+
...shared,
|
|
195
|
+
...route.options
|
|
196
|
+
}, tenant);
|
|
197
|
+
if ("kind" in caller) return err(caller);
|
|
198
|
+
return route.handler(request, withExtra(ctx, {
|
|
199
|
+
params,
|
|
200
|
+
session: caller.session,
|
|
201
|
+
tenant
|
|
202
|
+
}));
|
|
203
|
+
}, {
|
|
204
|
+
...middlewareOptions,
|
|
205
|
+
allow: EVERY_CALLER
|
|
206
|
+
}, (request) => {
|
|
207
|
+
const found = find(request);
|
|
208
|
+
return found instanceof Response ? found : void 0;
|
|
209
|
+
});
|
|
95
210
|
},
|
|
96
211
|
resources(map, resourcesOptions = {}) {
|
|
97
212
|
const base = (resourcesOptions.basePath ?? "").replace(/\/$/, "");
|
|
@@ -100,33 +215,34 @@ function createEdge(betterSupabase, options = {}) {
|
|
|
100
215
|
if (!resource) continue;
|
|
101
216
|
handlers.set(table, defineResource(betterSupabase, table, resource === true ? {} : resource));
|
|
102
217
|
}
|
|
103
|
-
const
|
|
104
|
-
const notFound = (request) => {
|
|
218
|
+
const match = (request) => {
|
|
105
219
|
const { pathname } = new URL(request.url);
|
|
106
220
|
const [table, id, extra] = (pathname.startsWith(`${base}/`) ? pathname.slice(base.length + 1) : void 0)?.split("/") ?? [];
|
|
107
221
|
const handler = table ? handlers.get(table) : void 0;
|
|
108
222
|
if (!handler || extra !== void 0 || id !== void 0 && !handler.keyParam) return problemResponse(dbError("not_found", `No route for ${pathname}`), { instance: pathname });
|
|
109
|
-
let key;
|
|
110
223
|
try {
|
|
111
|
-
|
|
224
|
+
return {
|
|
225
|
+
handler,
|
|
226
|
+
id: id === void 0 || id === "" ? void 0 : decodeURIComponent(id),
|
|
227
|
+
instance: pathname
|
|
228
|
+
};
|
|
112
229
|
} catch {
|
|
113
230
|
return problemResponse(dbError("invalid_input", `Malformed id in ${pathname}`), { instance: pathname });
|
|
114
231
|
}
|
|
115
|
-
routes.set(request, {
|
|
116
|
-
handler,
|
|
117
|
-
id: key,
|
|
118
|
-
instance: pathname
|
|
119
|
-
});
|
|
120
232
|
};
|
|
121
233
|
return serve((request, ctx) => {
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
234
|
+
const route = match(request);
|
|
235
|
+
if (route instanceof Response) return route;
|
|
236
|
+
return route.handler.handle(request, ctx.db, route.id, {
|
|
237
|
+
instance: route.instance,
|
|
125
238
|
expose
|
|
126
239
|
});
|
|
127
|
-
}, resourcesOptions,
|
|
240
|
+
}, resourcesOptions, (request) => {
|
|
241
|
+
const route = match(request);
|
|
242
|
+
return route instanceof Response ? route : void 0;
|
|
243
|
+
});
|
|
128
244
|
}
|
|
129
245
|
});
|
|
130
246
|
}
|
|
131
247
|
//#endregion
|
|
132
|
-
export { SUPABASE_CORS_HEADERS, createEdge };
|
|
248
|
+
export { SUPABASE_CORS_HEADERS, corsConfig, createEdge, toEdge };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { n as RouteGuardOptions } from "../refusal-D1rgbzNq.js";
|
|
2
|
+
import { t as Validated } from "../shared-DDSjEGDR.js";
|
|
3
|
+
import { AnyEntry, Contributions } from "@supabase/middleware";
|
|
4
|
+
//#region src/bridges/elysia.d.ts
|
|
5
|
+
interface ElysiaBridge<Entries extends readonly AnyEntry[]> {
|
|
6
|
+
/**
|
|
7
|
+
* Runs the entries around the app's fetch (`app.handle`), so short
|
|
8
|
+
* circuits answer before Elysia routes and the route's response passes
|
|
9
|
+
* back through the entries.
|
|
10
|
+
*/
|
|
11
|
+
wrap(handle: (request: Request) => Promise<Response>): (request: Request, env?: unknown) => Promise<Response>;
|
|
12
|
+
/**
|
|
13
|
+
* The contributions for a request `wrap` is serving. Throws for any other
|
|
14
|
+
* request, so a route reached without the entries fails closed.
|
|
15
|
+
* Expose it with `.derive(({ request }) => bridge.context(request))`.
|
|
16
|
+
*/
|
|
17
|
+
context(request: Request): Contributions<Entries>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Runs an entry array around an Elysia app. Elysia has no middleware slot
|
|
21
|
+
* that sees the response it produces, so the bridge wraps the app's fetch
|
|
22
|
+
* and hands the contributions to routes through `context(request)`.
|
|
23
|
+
*
|
|
24
|
+
* ```ts
|
|
25
|
+
* const bridge = toElysia([withBetterSupabase(server)])
|
|
26
|
+
* const app = new Elysia().derive(({ request }) => bridge.context(request)).get('/notes', ({ db }) => ...)
|
|
27
|
+
* export default { fetch: bridge.wrap((request) => app.handle(request)) }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function toElysia<const Entries extends readonly AnyEntry[]>(entries: Entries & Validated<Entries>): ElysiaBridge<Entries>;
|
|
31
|
+
//#endregion
|
|
32
|
+
//#region src/elysia/guard.d.ts
|
|
33
|
+
/**
|
|
34
|
+
* A `beforeHandle` hook that refuses callers outside `options`: Problem
|
|
35
|
+
* Details, or a redirect to `signIn` or `mfa`.
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* app.get('/admin', handler, { beforeHandle: guard(bridge, { roles: ['admin'] }) })
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function guard<Entries extends readonly AnyEntry[]>(bridge: ElysiaBridge<Entries>, options?: RouteGuardOptions): (context: {
|
|
42
|
+
readonly request: Request;
|
|
43
|
+
}) => Promise<Response | undefined>;
|
|
44
|
+
/**
|
|
45
|
+
* An `onError` hook that answers thrown `DbException`s (from `.orThrow()`)
|
|
46
|
+
* with Problem Details and leaves every other error to Elysia.
|
|
47
|
+
*
|
|
48
|
+
* ```ts
|
|
49
|
+
* new Elysia().onError(problemOnError())
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function problemOnError(options?: {
|
|
53
|
+
readonly expose?: boolean;
|
|
54
|
+
}): (context: {
|
|
55
|
+
readonly error: unknown;
|
|
56
|
+
readonly request: Request;
|
|
57
|
+
}) => Response | undefined;
|
|
58
|
+
//#endregion
|
|
59
|
+
export type { ElysiaBridge, RouteGuardOptions };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { t as around } from "../shared-CBxosKK3.js";
|
|
2
|
+
import { a as routeRefusal, n as guardedLocals, t as errorResponse } from "../refusal-CeJWxmkH.js";
|
|
3
|
+
import { bufferRequest } from "@supabase/middleware";
|
|
4
|
+
//#region src/bridges/elysia.ts
|
|
5
|
+
/**
|
|
6
|
+
* Runs an entry array around an Elysia app. Elysia has no middleware slot
|
|
7
|
+
* that sees the response it produces, so the bridge wraps the app's fetch
|
|
8
|
+
* and hands the contributions to routes through `context(request)`.
|
|
9
|
+
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* const bridge = toElysia([withBetterSupabase(server)])
|
|
12
|
+
* const app = new Elysia().derive(({ request }) => bridge.context(request)).get('/notes', ({ db }) => ...)
|
|
13
|
+
* export default { fetch: bridge.wrap((request) => app.handle(request)) }
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
function toElysia(entries) {
|
|
17
|
+
const run = around(entries);
|
|
18
|
+
const contexts = /* @__PURE__ */ new WeakMap();
|
|
19
|
+
return {
|
|
20
|
+
wrap: (handle) => (incoming, env) => {
|
|
21
|
+
const request = incoming.body ? bufferRequest(incoming) : incoming;
|
|
22
|
+
return run(request, env, (contributions) => {
|
|
23
|
+
contexts.set(request, contributions);
|
|
24
|
+
return handle(request);
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
context(request) {
|
|
28
|
+
const contributions = contexts.get(request);
|
|
29
|
+
if (!contributions) throw new Error("better-supabase: this request did not pass through toElysia().wrap(); serve the app with the wrapped fetch");
|
|
30
|
+
return contributions;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/elysia/guard.ts
|
|
36
|
+
/**
|
|
37
|
+
* A `beforeHandle` hook that refuses callers outside `options`: Problem
|
|
38
|
+
* Details, or a redirect to `signIn` or `mfa`.
|
|
39
|
+
*
|
|
40
|
+
* ```ts
|
|
41
|
+
* app.get('/admin', handler, { beforeHandle: guard(bridge, { roles: ['admin'] }) })
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
function guard(bridge, options = {}) {
|
|
45
|
+
return ({ request }) => {
|
|
46
|
+
const locals = guardedLocals(bridge.context(request));
|
|
47
|
+
return routeRefusal(locals, request, options);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* An `onError` hook that answers thrown `DbException`s (from `.orThrow()`)
|
|
52
|
+
* with Problem Details and leaves every other error to Elysia.
|
|
53
|
+
*
|
|
54
|
+
* ```ts
|
|
55
|
+
* new Elysia().onError(problemOnError())
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
function problemOnError(options = {}) {
|
|
59
|
+
return ({ error, request }) => errorResponse(error, request, options);
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { guard, problemOnError, toElysia };
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { t as DbException } from "./db-exception-CnWcYPxL.js";
|
|
2
|
+
import { embedMany, jsonSchema, rerank, tool } from "ai";
|
|
3
|
+
//#region src/ai-sdk/embeddings/embeddings.ts
|
|
4
|
+
/** The name of an SDK model: the string itself, or `provider/modelId`. */
|
|
5
|
+
function modelName(model) {
|
|
6
|
+
return typeof model === "string" ? model : `${model.provider}/${model.modelId}`;
|
|
7
|
+
}
|
|
8
|
+
/** An `Embedder` for the knowledge and memory blocks over `embedMany`. */
|
|
9
|
+
function embedWith(model, options = {}) {
|
|
10
|
+
return {
|
|
11
|
+
apiVersion: 1,
|
|
12
|
+
model: options.name ?? modelName(model),
|
|
13
|
+
embed: async (values, embedOptions) => {
|
|
14
|
+
if (values.length === 0) return [];
|
|
15
|
+
const { embeddings } = await embedMany({
|
|
16
|
+
model,
|
|
17
|
+
values: [...values],
|
|
18
|
+
maxParallelCalls: options.maxParallelCalls ?? 4,
|
|
19
|
+
...options.providerOptions === void 0 ? {} : { providerOptions: options.providerOptions },
|
|
20
|
+
...embedOptions?.signal === void 0 ? {} : { abortSignal: embedOptions.signal }
|
|
21
|
+
});
|
|
22
|
+
return embeddings;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** Reorders search hits with a reranking model, keeping the best `topN`. */
|
|
27
|
+
function rerankWith(model, options = {}) {
|
|
28
|
+
return async (query, hits, rerankOptions) => {
|
|
29
|
+
if (hits.length <= 1) return hits;
|
|
30
|
+
const { ranking } = await rerank({
|
|
31
|
+
model,
|
|
32
|
+
query,
|
|
33
|
+
documents: hits.map((hit) => hit.content),
|
|
34
|
+
...options.topN === void 0 ? {} : { topN: options.topN },
|
|
35
|
+
...rerankOptions?.signal === void 0 ? {} : { abortSignal: rerankOptions.signal }
|
|
36
|
+
});
|
|
37
|
+
return ranking.flatMap((entry) => {
|
|
38
|
+
const hit = hits[entry.originalIndex];
|
|
39
|
+
return hit === void 0 ? [] : [{
|
|
40
|
+
...hit,
|
|
41
|
+
score: entry.score
|
|
42
|
+
}];
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A tool that searches the knowledge base as the caller. Each result id
|
|
48
|
+
* is `documentId#index`, the `sourceId` that `toSourceParts` gives it.
|
|
49
|
+
*/
|
|
50
|
+
function searchTool(knowledge, organizationId, options = {}) {
|
|
51
|
+
const { description, rerank: reorder, onHits, ...search } = options;
|
|
52
|
+
return tool({
|
|
53
|
+
description: description ?? "Search the knowledge base for passages relevant to a query. Cite results by their id.",
|
|
54
|
+
inputSchema: jsonSchema({
|
|
55
|
+
type: "object",
|
|
56
|
+
properties: { query: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "What to look for"
|
|
59
|
+
} },
|
|
60
|
+
required: ["query"],
|
|
61
|
+
additionalProperties: false
|
|
62
|
+
}),
|
|
63
|
+
execute: async ({ query }, { abortSignal }) => {
|
|
64
|
+
const found = await knowledge.search(organizationId, query, {
|
|
65
|
+
...search,
|
|
66
|
+
...abortSignal === void 0 ? {} : { signal: abortSignal }
|
|
67
|
+
});
|
|
68
|
+
if (!found.ok) throw new DbException(found.error);
|
|
69
|
+
const hits = reorder ? await reorder(query, found.data, abortSignal === void 0 ? void 0 : { signal: abortSignal }) : found.data;
|
|
70
|
+
onHits?.(hits);
|
|
71
|
+
return { results: hits.map((hit) => ({
|
|
72
|
+
id: sourceId(hit),
|
|
73
|
+
title: hit.title,
|
|
74
|
+
content: hit.content
|
|
75
|
+
})) };
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const sourceId = (hit) => `${hit.documentId}#${String(hit.index)}`;
|
|
80
|
+
/** One `source-document` part per document among the hits, in hit order. */
|
|
81
|
+
function toSourceParts(hits) {
|
|
82
|
+
const seen = /* @__PURE__ */ new Set();
|
|
83
|
+
const parts = [];
|
|
84
|
+
for (const hit of hits) {
|
|
85
|
+
if (seen.has(hit.documentId)) continue;
|
|
86
|
+
seen.add(hit.documentId);
|
|
87
|
+
parts.push({
|
|
88
|
+
type: "source-document",
|
|
89
|
+
sourceId: sourceId(hit),
|
|
90
|
+
mediaType: "text/plain",
|
|
91
|
+
title: hit.title
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return parts;
|
|
95
|
+
}
|
|
96
|
+
function supabaseSession(model) {
|
|
97
|
+
const Session = globalThis.Supabase?.ai?.Session;
|
|
98
|
+
if (typeof Session !== "function") throw new TypeError("supabaseEmbed runs in Supabase Edge Functions, where Supabase.ai.Session exists; pass session elsewhere");
|
|
99
|
+
return new Session(model);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* An `Embedder` over the model built into Supabase Edge Functions. Set the
|
|
103
|
+
* module's `dimensions` option to the model's size (384 for `gte-small`).
|
|
104
|
+
*/
|
|
105
|
+
function supabaseEmbed(options = {}) {
|
|
106
|
+
const name = options.model ?? "gte-small";
|
|
107
|
+
let session = options.session;
|
|
108
|
+
return {
|
|
109
|
+
apiVersion: 1,
|
|
110
|
+
model: `supabase/${name}`,
|
|
111
|
+
embed: async (values) => {
|
|
112
|
+
session ??= supabaseSession(name);
|
|
113
|
+
const vectors = [];
|
|
114
|
+
for (const value of values) {
|
|
115
|
+
const output = await session.run(value, {
|
|
116
|
+
mean_pool: true,
|
|
117
|
+
normalize: true
|
|
118
|
+
});
|
|
119
|
+
if (!Array.isArray(output) || !output.every((x) => typeof x === "number")) throw new TypeError(`Supabase.ai.Session returned no vector for ${name}`);
|
|
120
|
+
vectors.push(output);
|
|
121
|
+
}
|
|
122
|
+
return vectors;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
export { supabaseEmbed as a, searchTool as i, modelName as n, toSourceParts as o, rerankWith as r, embedWith as t };
|