better-supabase 0.11.0 → 0.12.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/dist/{adapter-B2WRsRIg.js → adapter-CRNH2aX_.js} +362 -253
- package/dist/{agents-CbUIrH-w.d.ts → agents-CGP2AQge.d.ts} +1 -1
- package/dist/{ai-files-DXbgWA5M.js → ai-files-ChFDkMLN.js} +12 -4
- package/dist/ai-sdk/agents/index.d.ts +3 -3
- package/dist/ai-sdk/batches/index.d.ts +1 -1
- package/dist/ai-sdk/embeddings/index.d.ts +2 -2
- package/dist/ai-sdk/files/index.d.ts +1 -1
- package/dist/ai-sdk/files/index.js +1 -1
- package/dist/ai-sdk/index.d.ts +1 -1
- package/dist/ai-sdk/mcp/index.d.ts +3 -3
- package/dist/ai-sdk/memory/index.d.ts +2 -2
- package/dist/{ai-tasks-BJJChl-D.d.ts → ai-tasks-ZvPnNudQ.d.ts} +1 -1
- package/dist/{api-keys-qnM63qjS.d.ts → api-keys-AgDXbcql.d.ts} +1 -1
- package/dist/{approvals-CRZtzxNt.d.ts → approvals-CyX709B-.d.ts} +1 -1
- package/dist/astro/index.d.ts +6 -6
- package/dist/astro/index.js +2 -2
- package/dist/{attachments-Bk3tyeUF.js → attachments-CK8D8bIV.js} +8 -2
- package/dist/{authorization-hooks-mLi894KH.d.ts → authorization-hooks-WDQMKIsc.d.ts} +1 -1
- package/dist/better-result/index.d.ts +2 -2
- package/dist/{bind-CTNKpBM6.d.ts → bind-Bfo40o63.d.ts} +3 -3
- package/dist/blocks/access-requests/index.d.ts +1 -1
- package/dist/blocks/agents/index.d.ts +2 -2
- package/dist/blocks/ai-cache/index.d.ts +1 -1
- package/dist/blocks/ai-chat/index.d.ts +2 -2
- package/dist/blocks/ai-chat/react/index.d.ts +1 -1
- package/dist/blocks/ai-chat/solid/index.d.ts +2 -2
- package/dist/blocks/ai-chat/svelte/index.d.ts +2 -2
- package/dist/blocks/ai-chat/vue/index.d.ts +2 -2
- package/dist/blocks/ai-files/index.d.ts +2 -2
- package/dist/blocks/ai-files/index.js +1 -1
- package/dist/blocks/ai-providers/index.d.ts +2 -2
- package/dist/blocks/ai-tasks/index.d.ts +2 -2
- package/dist/blocks/announcements/index.d.ts +2 -2
- package/dist/blocks/announcements/react/index.d.ts +1 -1
- package/dist/blocks/announcements/solid/index.d.ts +2 -2
- package/dist/blocks/announcements/svelte/index.d.ts +2 -2
- package/dist/blocks/announcements/vue/index.d.ts +2 -2
- package/dist/blocks/api-keys/index.d.ts +4 -4
- package/dist/blocks/api-keys/react/index.d.ts +1 -1
- package/dist/blocks/api-keys/react/server.d.ts +1 -1
- package/dist/blocks/api-keys/solid/index.d.ts +2 -2
- package/dist/blocks/api-keys/svelte/index.d.ts +2 -2
- package/dist/blocks/api-keys/vue/index.d.ts +2 -2
- package/dist/blocks/approvals/index.d.ts +2 -2
- package/dist/blocks/attachments/index.d.ts +2 -2
- package/dist/blocks/attachments/index.js +1 -1
- package/dist/blocks/audit/index.d.ts +2 -2
- package/dist/blocks/audit/react/index.d.ts +1 -1
- package/dist/blocks/audit/react/server.d.ts +1 -1
- package/dist/blocks/audit/solid/index.d.ts +2 -2
- package/dist/blocks/audit/svelte/index.d.ts +2 -2
- package/dist/blocks/audit/vue/index.d.ts +2 -2
- package/dist/blocks/billing/index.d.ts +3 -3
- package/dist/blocks/billing/react/index.d.ts +1 -1
- package/dist/blocks/billing/react/server.d.ts +1 -1
- package/dist/blocks/billing/solid/index.d.ts +2 -2
- package/dist/blocks/billing/svelte/index.d.ts +2 -2
- package/dist/blocks/billing/vue/index.d.ts +2 -2
- package/dist/blocks/bookings/index.d.ts +2 -2
- package/dist/blocks/bookings/react/index.d.ts +1 -1
- package/dist/blocks/bookings/solid/index.d.ts +2 -2
- package/dist/blocks/bookings/svelte/index.d.ts +2 -2
- package/dist/blocks/bookings/vue/index.d.ts +2 -2
- package/dist/blocks/bulk/index.d.ts +1 -1
- package/dist/blocks/calendar/index.d.ts +2 -2
- package/dist/blocks/calendar/react/index.d.ts +1 -1
- package/dist/blocks/calendar/solid/index.d.ts +2 -2
- package/dist/blocks/calendar/svelte/index.d.ts +2 -2
- package/dist/blocks/calendar/vue/index.d.ts +2 -2
- package/dist/blocks/catalog/index.d.ts +1 -1
- package/dist/blocks/collections/index.d.ts +1 -1
- package/dist/blocks/comments/index.d.ts +2 -2
- package/dist/blocks/comments/react/index.d.ts +1 -1
- package/dist/blocks/comments/react/server.d.ts +1 -1
- package/dist/blocks/comments/solid/index.d.ts +2 -2
- package/dist/blocks/comments/svelte/index.d.ts +2 -2
- package/dist/blocks/comments/vue/index.d.ts +2 -2
- package/dist/blocks/connectors/index.d.ts +2 -2
- package/dist/blocks/custom-fields/index.d.ts +1 -1
- package/dist/blocks/data-lifecycle/index.d.ts +2 -2
- package/dist/blocks/deals/index.d.ts +1 -1
- package/dist/blocks/documents/index.d.ts +1 -1
- package/dist/blocks/domains/index.d.ts +1 -1
- package/dist/blocks/drive/index.d.ts +2 -3
- package/dist/blocks/drive/index.js +14 -5
- package/dist/blocks/employees/index.d.ts +1 -1
- package/dist/blocks/engagements/index.d.ts +1 -1
- package/dist/blocks/entitlements/index.d.ts +3 -3
- package/dist/blocks/entitlements/react/index.d.ts +2 -2
- package/dist/blocks/entitlements/solid/index.d.ts +2 -2
- package/dist/blocks/entitlements/svelte/index.d.ts +2 -2
- package/dist/blocks/entitlements/vue/index.d.ts +2 -2
- package/dist/blocks/flags/index.d.ts +1 -1
- package/dist/blocks/forms/index.d.ts +2 -2
- package/dist/blocks/forms/react/index.d.ts +1 -1
- package/dist/blocks/forms/solid/index.d.ts +2 -2
- package/dist/blocks/forms/svelte/index.d.ts +2 -2
- package/dist/blocks/forms/vue/index.d.ts +2 -2
- package/dist/blocks/hiring/index.d.ts +1 -1
- package/dist/blocks/identities/index.d.ts +2 -2
- package/dist/blocks/imports/index.d.ts +1 -1
- package/dist/blocks/inbox/index.d.ts +2 -2
- package/dist/blocks/inbox/react/index.d.ts +2 -2
- package/dist/blocks/inbox/react/server.d.ts +2 -2
- package/dist/blocks/inbox/solid/index.d.ts +2 -2
- package/dist/blocks/inbox/svelte/index.d.ts +2 -2
- package/dist/blocks/inbox/vue/index.d.ts +2 -2
- package/dist/blocks/index.d.ts +2 -2
- package/dist/blocks/inventory/index.d.ts +1 -1
- package/dist/blocks/invoices/index.d.ts +1 -1
- package/dist/blocks/jobs/index.d.ts +1 -1
- package/dist/blocks/knowledge/index.d.ts +2 -2
- package/dist/blocks/leave/index.d.ts +1 -1
- package/dist/blocks/memory/index.d.ts +3 -3
- package/dist/blocks/metrics/index.d.ts +1 -1
- package/dist/blocks/mfa/index.d.ts +2 -2
- package/dist/blocks/mfa/react/index.d.ts +1 -1
- package/dist/blocks/mfa/react/server.d.ts +1 -1
- package/dist/blocks/mfa/solid/index.d.ts +2 -2
- package/dist/blocks/mfa/svelte/index.d.ts +2 -2
- package/dist/blocks/mfa/vue/index.d.ts +2 -2
- package/dist/blocks/notifications/index.d.ts +3 -3
- package/dist/blocks/notifications/react/index.d.ts +1 -1
- package/dist/blocks/notifications/react/server.d.ts +1 -1
- package/dist/blocks/notifications/solid/index.d.ts +2 -2
- package/dist/blocks/notifications/svelte/index.d.ts +2 -2
- package/dist/blocks/notifications/vue/index.d.ts +2 -2
- package/dist/blocks/number-sequences/index.d.ts +1 -1
- package/dist/blocks/oauth-server/index.d.ts +1 -1
- package/dist/blocks/onboarding/index.d.ts +2 -2
- package/dist/blocks/onboarding/react/index.d.ts +1 -1
- package/dist/blocks/onboarding/react/server.d.ts +1 -1
- package/dist/blocks/onboarding/solid/index.d.ts +2 -2
- package/dist/blocks/onboarding/svelte/index.d.ts +2 -2
- package/dist/blocks/onboarding/vue/index.d.ts +2 -2
- package/dist/blocks/orders/index.d.ts +1 -1
- package/dist/blocks/organizations/index.d.ts +2 -2
- package/dist/blocks/organizations/react/index.d.ts +1 -1
- package/dist/blocks/organizations/react/server.d.ts +1 -1
- package/dist/blocks/organizations/solid/index.d.ts +2 -2
- package/dist/blocks/organizations/svelte/index.d.ts +2 -2
- package/dist/blocks/organizations/vue/index.d.ts +2 -2
- package/dist/blocks/outbox/index.d.ts +2 -2
- package/dist/blocks/parties/index.d.ts +1 -1
- package/dist/blocks/pipelines/index.d.ts +1 -1
- package/dist/blocks/profiles/index.d.ts +1 -1
- package/dist/blocks/promotions/index.d.ts +1 -1
- package/dist/blocks/push/index.d.ts +2 -2
- package/dist/blocks/quotes/index.d.ts +1 -1
- package/dist/blocks/rank/index.d.ts +1 -1
- package/dist/blocks/reactions/index.d.ts +2 -2
- package/dist/blocks/reactions/react/index.d.ts +1 -1
- package/dist/blocks/reactions/solid/index.d.ts +2 -2
- package/dist/blocks/reactions/svelte/index.d.ts +2 -2
- package/dist/blocks/reactions/vue/index.d.ts +2 -2
- package/dist/blocks/relations/index.d.ts +1 -1
- package/dist/blocks/reminders/index.d.ts +3 -3
- package/dist/blocks/reviews/index.d.ts +1 -1
- package/dist/blocks/rules/index.d.ts +4 -4
- package/dist/blocks/rules/react/index.d.ts +1 -1
- package/dist/blocks/rules/solid/index.d.ts +2 -2
- package/dist/blocks/rules/svelte/index.d.ts +2 -2
- package/dist/blocks/rules/vue/index.d.ts +2 -2
- package/dist/blocks/saved-views/index.d.ts +2 -2
- package/dist/blocks/saved-views/react/index.d.ts +1 -1
- package/dist/blocks/saved-views/react/server.d.ts +1 -1
- package/dist/blocks/saved-views/solid/index.d.ts +2 -2
- package/dist/blocks/saved-views/svelte/index.d.ts +2 -2
- package/dist/blocks/saved-views/vue/index.d.ts +2 -2
- package/dist/blocks/search/index.d.ts +2 -2
- package/dist/blocks/search/react/index.d.ts +1 -1
- package/dist/blocks/search/react/server.d.ts +1 -1
- package/dist/blocks/search/solid/index.d.ts +2 -2
- package/dist/blocks/search/svelte/index.d.ts +2 -2
- package/dist/blocks/search/vue/index.d.ts +2 -2
- package/dist/blocks/service-principals/index.d.ts +1 -1
- package/dist/blocks/sessions/index.d.ts +2 -2
- package/dist/blocks/sessions/react/index.d.ts +1 -1
- package/dist/blocks/sessions/react/server.d.ts +1 -1
- package/dist/blocks/sessions/solid/index.d.ts +2 -2
- package/dist/blocks/sessions/svelte/index.d.ts +2 -2
- package/dist/blocks/sessions/vue/index.d.ts +2 -2
- package/dist/blocks/settings/index.d.ts +2 -2
- package/dist/blocks/settings/react/index.d.ts +1 -1
- package/dist/blocks/settings/react/server.d.ts +1 -1
- package/dist/blocks/settings/solid/index.d.ts +2 -2
- package/dist/blocks/settings/svelte/index.d.ts +2 -2
- package/dist/blocks/settings/vue/index.d.ts +2 -2
- package/dist/blocks/share-links/index.d.ts +1 -1
- package/dist/blocks/shared-signals/index.d.ts +2 -2
- package/dist/blocks/signing-keys/index.d.ts +1 -1
- package/dist/blocks/sla/index.d.ts +1 -1
- package/dist/blocks/sso/index.d.ts +2 -2
- package/dist/blocks/state-machine/index.d.ts +1 -1
- package/dist/blocks/tags/index.d.ts +2 -2
- package/dist/blocks/tags/react/index.d.ts +1 -1
- package/dist/blocks/tags/react/server.d.ts +1 -1
- package/dist/blocks/tags/solid/index.d.ts +2 -2
- package/dist/blocks/tags/svelte/index.d.ts +2 -2
- package/dist/blocks/tags/vue/index.d.ts +2 -2
- package/dist/blocks/targets/index.d.ts +1 -1
- package/dist/blocks/teams/index.d.ts +1 -1
- package/dist/blocks/templates/index.d.ts +3 -3
- package/dist/blocks/time-tracking/index.d.ts +1 -1
- package/dist/blocks/trash/index.d.ts +1 -1
- package/dist/blocks/undo/index.d.ts +2 -2
- package/dist/blocks/undo/react/index.d.ts +1 -1
- package/dist/blocks/undo/react/server.d.ts +1 -1
- package/dist/blocks/undo/solid/index.d.ts +2 -2
- package/dist/blocks/undo/svelte/index.d.ts +2 -2
- package/dist/blocks/undo/vue/index.d.ts +2 -2
- package/dist/blocks/usage/index.d.ts +2 -2
- package/dist/blocks/usage/react/index.d.ts +1 -1
- package/dist/blocks/usage/react/server.d.ts +1 -1
- package/dist/blocks/usage/solid/index.d.ts +2 -2
- package/dist/blocks/usage/svelte/index.d.ts +2 -2
- package/dist/blocks/usage/vue/index.d.ts +2 -2
- package/dist/blocks/vercel-marketplace/index.d.ts +1 -1
- package/dist/blocks/versions/index.d.ts +1 -1
- package/dist/blocks/waitlist/index.d.ts +1 -1
- package/dist/blocks/webhooks/index.d.ts +4 -4
- package/dist/blocks/work-items/index.d.ts +1 -1
- package/dist/blocks/workflow-builder/index.d.ts +4 -4
- package/dist/blocks/workflow-builder/react/index.d.ts +2 -2
- package/dist/blocks/workflow-builder/solid/index.d.ts +2 -2
- package/dist/blocks/workflow-builder/svelte/index.d.ts +2 -2
- package/dist/blocks/workflow-builder/vue/index.d.ts +2 -2
- package/dist/blocks/workflows/index.d.ts +2 -2
- package/dist/blocks/workflows/react/index.d.ts +1 -1
- package/dist/blocks/workflows/solid/index.d.ts +2 -2
- package/dist/blocks/workflows/svelte/index.d.ts +2 -2
- package/dist/blocks/workflows/vue/index.d.ts +2 -2
- package/dist/{bucket-BBSNDFNH.d.ts → bucket-BbePDVwc.d.ts} +16 -0
- package/dist/chat-sdk/index.d.ts +2 -2
- package/dist/chat-sdk/react/index.d.ts +2 -2
- package/dist/chat-sdk/react/server.d.ts +2 -2
- package/dist/cli/add-DnAyR9w_.js +1 -0
- package/dist/cli/{add-B5V6uokQ.js → add-TT72pQk6.js} +3 -3
- package/dist/cli/adopt-BuS-DC7_.js +1 -0
- package/dist/cli/{adopt-Ht34C3QD.js → adopt-mbB1bcIG.js} +4 -4
- package/dist/cli/{apply-4BmTvj2A.js → apply-CiBFOFGw.js} +15 -21
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{blocks-jIvPqPtw.js → blocks-5-JGzwXX.js} +1 -1
- package/dist/cli/{blocks-bBI050w6.js → blocks-DeLQOlUK.js} +1 -1
- package/dist/cli/{cache-CVJmPGpd.js → cache-DQwgb3rg.js} +1 -1
- package/dist/cli/{codemod-vsknM1Ue.js → codemod-BzAMX4el.js} +2 -2
- package/dist/cli/{command-DLCZeHdo.js → command-dfdVhU_2.js} +16 -1
- package/dist/cli/{completion-CEZ-c3ja.js → completion-4lLjtI49.js} +1 -1
- package/dist/cli/{completion-D2BObVth.js → completion-D4InNrxw.js} +2 -2
- package/dist/cli/{completion-BAm8SwGQ.js → completion-zsp5s0zI.js} +2 -2
- package/dist/cli/{config-CynctXbc.js → config-CCyweX7Y.js} +1 -1
- package/dist/cli/{config-CC5DXgKX.js → config-DI6ielsx.js} +1 -1
- package/dist/cli/{config-C4e_RrmL.js → config-yZ55rsKZ.js} +1 -1
- package/dist/cli/{db-BxMRcHrY.js → db-TRymMyAW.js} +3 -3
- package/dist/cli/{design-edit-B-WsnhUF.js → design-edit-0U9iCTiS.js} +29 -2
- package/dist/cli/{doctor-D47sFjh9.js → doctor-DOfy6kjt.js} +119 -70
- package/dist/cli/env-Cmu99uKR.js +1 -0
- package/dist/cli/{env--JFvv45k.js → env-Dh5K5t2U.js} +32 -31
- package/dist/cli/{gen-D2E8osBE.js → gen-D3sC5jDn.js} +11 -11
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +6 -6
- package/dist/cli/{init-Cx7DDAdQ.js → init-DNomoycJ.js} +12 -18
- package/dist/cli/{introspect-Ck7aa6v0.js → introspect-kYX06Q2g.js} +3 -3
- package/dist/cli/{keys-6ufnWeZl.js → keys-B8dIJwwi.js} +1 -1
- package/dist/cli/{live-CLxJNC0r.js → live-CkV3d3yp.js} +1 -1
- package/dist/cli/{mcp-BVWvEoKo.js → mcp-DrxB2Wuw.js} +3 -3
- package/dist/cli/{metadata-BRywyPvv.js → metadata-BGkle6WM.js} +1 -1
- package/dist/cli/{moved-BmtFuMK3.js → moved-BMQu1YNY.js} +1 -1
- package/dist/cli/{parse-ksnw4phM.js → parse-QzDvMpXH.js} +1 -1
- package/dist/cli/{preset-B1o6KbFp.js → preset-CfIs24cc.js} +1 -1
- package/dist/cli/run-Bck-p0MI.js +63 -0
- package/dist/cli/{run-Bb8Nn8Ax.js → run-BhJKAanr.js} +2 -2
- package/dist/cli/{run-nX5ffQM_.js → run-DRZ10srj.js} +51 -43
- package/dist/cli/{scaffold-DcXr4z7M.js → scaffold-DoURlDEI.js} +1 -1
- package/dist/cli/{scaffold-fO-FJGoO.js → scaffold-mzy3OsN5.js} +1 -1
- package/dist/cli/seed-C5q4UUIL.js +1 -0
- package/dist/cli/{seed-BmOC6_iz.js → seed-CIdg6s7m.js} +3 -3
- package/dist/cli/{skills-CUx7S0bk.js → skills-D3zwIlGA.js} +1 -1
- package/dist/cli/{snapshot-ClgWGd-b.js → snapshot-BBKFojqM.js} +3 -3
- package/dist/cli/{source-args-BDiUhsH8.js → source-args-Cwo7zwvq.js} +1 -1
- package/dist/cli/{spec-DjHpWZJM.js → spec-DOgQUZwM.js} +1 -1
- package/dist/cli/{spec-CM7iyRnE.js → spec-DZeIP9ta.js} +3 -3
- package/dist/cli/{sql-C4ymac2h.js → sql-CL_Lbhwl.js} +1 -1
- package/dist/cli/{sql-ybcjbz20.js → sql-DLOvvnBV.js} +1 -1
- package/dist/cli/stack-env-_uWWNHWq.js +87 -0
- package/dist/cli/{stack-status-Cb_D79ZR.js → stack-status-_NUgd-g5.js} +41 -1
- package/dist/cli/{version-CUKjFbNd.js → version-B7akdvDv.js} +1 -1
- package/dist/client/index.d.ts +5 -5
- package/dist/client/native/index.d.ts +5 -5
- package/dist/{client-GdJH4XJM.d.ts → client-BAOZuBhz.d.ts} +1 -1
- package/dist/{client-B9_8yzct.d.ts → client-BJN0IMEp.d.ts} +2 -2
- package/dist/{client-QvuCfO4b.d.ts → client-BMcjLG0V.d.ts} +5 -5
- package/dist/{client-CeH7vd-g.d.ts → client-BN_fXOs7.d.ts} +1 -1
- package/dist/{client-CCGSn7m5.d.ts → client-BONsuFYf.d.ts} +4 -4
- package/dist/{client-CBQ2TV0r.d.ts → client-BPn9XhAM.d.ts} +1 -1
- package/dist/{client-ehjQ2tIT.d.ts → client-BtC-r4hE.d.ts} +3 -3
- package/dist/{client-DarDYaQj.d.ts → client-BuneNd-C.d.ts} +1 -1
- package/dist/{client-B_vHBwB6.d.ts → client-CHwNV8Kz.d.ts} +3 -3
- package/dist/{client-DbxvLC9Y.d.ts → client-CLQHsa-2.d.ts} +1 -1
- package/dist/{client-9ZOirdtr.d.ts → client-CMxxwT3N.d.ts} +3 -3
- package/dist/{client-B4a7f5ma.d.ts → client-CU7aNN_B.d.ts} +2 -2
- package/dist/{client-cWUWrgis.d.ts → client-CYEdJKjk.d.ts} +1 -1
- package/dist/{client-CNh-pjkT.d.ts → client-CYhSGlCN.d.ts} +3 -3
- package/dist/{client-5YAtJjyT.d.ts → client-D3gRTNSi.d.ts} +1 -1
- package/dist/{client-BqoYuTK3.d.ts → client-DB34f_7i.d.ts} +2 -2
- package/dist/{client-eCtwzCbQ.d.ts → client-DCawyopp.d.ts} +3 -3
- package/dist/{client-Bovn6-M9.d.ts → client-Dqa4XyJ5.d.ts} +1 -1
- package/dist/{client-CXTDJCIs.d.ts → client-Dr5h2r9r.d.ts} +1 -1
- package/dist/{client-CrZKZVbb.d.ts → client-DrTqKgvy.d.ts} +1 -1
- package/dist/{client-BNy-K6XT.d.ts → client-GCCRI9ge.d.ts} +1 -1
- package/dist/{client-DLz68Qga.d.ts → client-P6v3h7vh.d.ts} +1 -1
- package/dist/{client-CJT3xiuI.d.ts → client-P8l8ncxV.d.ts} +3 -3
- package/dist/{client-BXv09wO1.d.ts → client-kWg4OqIr.d.ts} +2 -2
- package/dist/{client-C3rmP3b0.d.ts → client-tvG258_1.d.ts} +4 -4
- package/dist/{client-Dft5Vq6m.d.ts → client-wKmX-f3r.d.ts} +1 -1
- package/dist/{composite-BFatHqOU.js → composite-1kPAxXto.js} +1 -1
- package/dist/{composite-B1Mmo4TU.d.ts → composite-DzvBL5nb.d.ts} +5 -5
- package/dist/{connectors-CR9FJGzV.d.ts → connectors-BwPNt-ZG.d.ts} +1 -1
- package/dist/{controller-BBXX1RMw.d.ts → controller-BZhiIb-N.d.ts} +1 -1
- package/dist/create/index.d.ts +24 -2
- package/dist/create/index.js +1001 -914
- package/dist/credentials/index.d.ts +2 -2
- package/dist/{define-M_r1d2AT.d.ts → define-DYZnvAbs.d.ts} +1 -1
- package/dist/{define-block-CPyJ95rq.d.ts → define-block-BHxLHLys.d.ts} +2 -2
- package/dist/edge/index.d.ts +8 -8
- package/dist/edge/index.js +3 -3
- package/dist/elysia/index.d.ts +1 -1
- package/dist/{embeddings-lTUwzvW4.d.ts → embeddings-CKhygw4C.d.ts} +1 -1
- package/dist/{ended-DQmwYosO.d.ts → ended-De6H52nX.d.ts} +1 -1
- package/dist/{entitlements-DgkeStXd.d.ts → entitlements-CtBGXb3B.d.ts} +2 -2
- package/dist/eve/index.d.ts +3 -3
- package/dist/eve/index.js +1 -1
- package/dist/{eve-C_Onyk_j.d.ts → eve-B6ru2Bt4.d.ts} +2 -2
- package/dist/{executor-DfdC00xr.d.ts → executor-BWgJNbGh.d.ts} +1 -1
- package/dist/expo/index.d.ts +3 -3
- package/dist/expo/index.js +3 -3
- package/dist/expo-sqlite/index.d.ts +1 -1
- package/dist/{field-errors-DmJICh93.d.ts → field-errors-Z-sgsdoN.d.ts} +6 -6
- package/dist/{framework-D6IFkuAg.d.ts → framework-BQhTsLX-.d.ts} +5 -5
- package/dist/{framework-Ch8bMmQY.js → framework-C6PKBgme.js} +1 -1
- package/dist/h3/index.d.ts +1 -1
- package/dist/h3/v1/index.d.ts +1 -1
- package/dist/hono/index.d.ts +8 -8
- package/dist/hono/index.js +2 -2
- package/dist/{index-DgobXyil.d.ts → index-1Vsg-7YV.d.ts} +1 -1
- package/dist/{index-D8yhOz_4.d.ts → index-BJLPQr2s.d.ts} +36 -3
- package/dist/{index-CK0Sxx57.d.ts → index-C-_fs7EI.d.ts} +7 -7
- package/dist/{index-F6XTTkC9.d.ts → index-CXFf-c-j.d.ts} +4 -4
- package/dist/{index-CEcDqDhc.d.ts → index-Cm2-g_4H.d.ts} +1 -1
- package/dist/{index-qCG78-Rf.d.ts → index-DTQSeHx2.d.ts} +2 -2
- package/dist/{index-DHReeV74.d.ts → index-Hc4tetmB.d.ts} +1 -1
- package/dist/{index-Bq409YZn.d.ts → index-QWTq2o31.d.ts} +1 -1
- package/dist/{index-Csi8jD-m.d.ts → index-XcTBR4Gb.d.ts} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/{kit-BeZX2pR_.d.ts → kit-De-EVRhw.d.ts} +3 -3
- package/dist/{knowledge-CRk1jOAJ.d.ts → knowledge-B5zdpDD-.d.ts} +1 -1
- package/dist/list/index.d.ts +1 -1
- package/dist/{list-query-FhFXzObg.d.ts → list-query-aXr2WkGA.d.ts} +1 -1
- package/dist/mcp/index.d.ts +4 -4
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/sdk/index.d.ts +5 -5
- package/dist/mcp/sdk/index.js +1 -1
- package/dist/nestjs/index.d.ts +2 -2
- package/dist/next/index.d.ts +15 -15
- package/dist/next/index.js +2 -2
- package/dist/node/index.d.ts +2 -2
- package/dist/orpc/index.d.ts +5 -5
- package/dist/orpc/index.js +1 -1
- package/dist/otel/index.js +5 -5
- package/dist/{outbox-njgoVzFA.d.ts → outbox-B1hZ7PPY.d.ts} +1 -1
- package/dist/{ports-DCAcG26M.d.ts → ports-BCDIbC_U.d.ts} +1 -1
- package/dist/{ports-DGe1vzF2.d.ts → ports-P0A5wo_-.d.ts} +2 -2
- package/dist/powersync/index.d.ts +2 -2
- package/dist/preset/index.d.ts +2 -2
- package/dist/preset/index.js +2 -2
- package/dist/{preset-Cqwlwx6G.js → preset-Cf0T9GRt.js} +49 -6
- package/dist/{provider-CNs0Jx0I.d.ts → provider-DXgx5oSA.d.ts} +1 -1
- package/dist/{push-token-D2sDxSNN.d.ts → push-token-y1Gnz5bQ.d.ts} +1 -1
- package/dist/query/index.d.ts +1 -1
- package/dist/react/index.d.ts +7 -7
- package/dist/react/native/index.d.ts +1 -1
- package/dist/react/server.d.ts +8 -8
- package/dist/react/session.d.ts +2 -2
- package/dist/react-router/index.d.ts +5 -5
- package/dist/react-router/index.js +2 -2
- package/dist/realtime/index.d.ts +5 -5
- package/dist/{refusal-CufncwaN.d.ts → refusal-C7geIBRl.d.ts} +1 -1
- package/dist/{resolve-f8QNuYI3.js → resolve-AtncaPTU.js} +12 -5
- package/dist/{resolve-Bqb8TMTt.d.ts → resolve-Ceft-18-.d.ts} +6 -2
- package/dist/{resource-execute-ruP2L1op.d.ts → resource-execute-Bxvgmx-n.d.ts} +1 -1
- package/dist/{resource-types-CGr0BbL-.d.ts → resource-types-LW1i5-h3.d.ts} +2 -2
- package/dist/{resources-BiQpsM6O.d.ts → resources-D3_FAz_H.d.ts} +1 -1
- package/dist/{respond-CEBC6KUX.d.ts → respond-BSL36dQp.d.ts} +1 -1
- package/dist/server/index.d.ts +27 -19
- package/dist/server/index.js +4 -4
- package/dist/{server-types-BKN_R4Ws.d.ts → server-types-fLdep4gb.d.ts} +11 -9
- package/dist/{session-CwpfitmI.d.ts → session-DObioXpX.d.ts} +3 -3
- package/dist/solid/index.d.ts +7 -7
- package/dist/{solid-controller-Uqi5ef6z.d.ts → solid-controller-CWotGxcG.d.ts} +1 -1
- package/dist/solid-start/index.d.ts +5 -5
- package/dist/solid-start/index.js +2 -2
- package/dist/sql/index.d.ts +1 -1
- package/dist/sql/index.js +1 -1
- package/dist/{sql-DCfCbS2j.js → sql-CT1Jnwp8.js} +1 -1
- package/dist/ssr/index.d.ts +4 -4
- package/dist/ssr/index.js +1 -1
- package/dist/storage/index.d.ts +2 -2
- package/dist/storage/index.js +11 -0
- package/dist/{subject-readers-BNQzBDN9.d.ts → subject-readers-BUChuOxL.d.ts} +1 -1
- package/dist/{support-BAhTqI7y.js → support-C2wPYwD7.js} +1 -1
- package/dist/{support-view-IRnDLuGN.d.ts → support-view-Bj_lZ8Wr.d.ts} +1 -1
- package/dist/svelte/index.d.ts +6 -6
- package/dist/{svelte-controller-BQOIXWEw.d.ts → svelte-controller-sS4X66yL.d.ts} +1 -1
- package/dist/sveltekit/index.d.ts +6 -6
- package/dist/sveltekit/index.js +2 -2
- package/dist/{tags-AUpl4Ob9.d.ts → tags-BrGopDVG.d.ts} +1 -1
- package/dist/tanstack-db/index.d.ts +1 -1
- package/dist/tanstack-db/supabase/index.d.ts +1 -1
- package/dist/tanstack-start/index.d.ts +5 -5
- package/dist/tanstack-start/index.js +2 -2
- package/dist/{tenant-BNp3kBAG.d.ts → tenant-DZMLVuyQ.d.ts} +2 -2
- package/dist/testing/index.d.ts +13 -15
- package/dist/{topic-1WTkDnPd.d.ts → topic-DAY_HOX2.d.ts} +3 -3
- package/dist/{types-DDQ-Rsep.d.ts → types-BA1eTvy4.d.ts} +1 -1
- package/dist/{types-Bq64h5nY.d.ts → types-Bels39_u.d.ts} +2 -2
- package/dist/{types-DO9xWsGC.d.ts → types-DOC7wnh6.d.ts} +11 -2
- package/dist/{types-B4zhT6dq.d.ts → types-D_2rClz-.d.ts} +1 -1
- package/dist/upload-claim-BBFCZbBF.js +33 -0
- package/dist/{vault-DR2-zOjz.d.ts → vault-ClkzMGTP.d.ts} +1 -1
- package/dist/vercel-connect/index.d.ts +1 -1
- package/dist/{verify-BucYsoKq.d.ts → verify-DU4p9-Ve.d.ts} +1 -1
- package/dist/{version-TXpQEfh1.js → version-DSWxci83.js} +1 -1
- package/dist/{view-Bf7e07rQ.d.ts → view-KQhe6eNc.d.ts} +1 -1
- package/dist/vue/index.d.ts +7 -7
- package/dist/{vue-controller-Cav6Wt_r.d.ts → vue-controller-BUo1oove.d.ts} +1 -1
- package/dist/{watch-ry70AEm6.d.ts → watch-5btote1y.d.ts} +2 -2
- package/dist/{watch-topic-DWHy63ZJ.d.ts → watch-topic-C79ZW5-R.d.ts} +1 -1
- package/dist/workflow-sdk/builder/index.d.ts +3 -3
- package/dist/workflow-sdk/index.d.ts +1 -1
- package/dist/{workflow-sdk-DM7T3sF4.d.ts → workflow-sdk-CWdCWj7M.d.ts} +1 -1
- package/dist/yjs/index.d.ts +1 -1
- package/package.json +1 -1
- package/schemas/cli-commands-v1.json +15 -0
- package/schemas/config-v1.json +1 -1
- package/schemas/doctor-report-v1.json +1 -0
- package/dist/cli/add-DzRJEHzD.js +0 -1
- package/dist/cli/adopt-DDy50yz9.js +0 -1
- package/dist/cli/env-D-O91RK1.js +0 -1
- package/dist/cli/seed-C_BmN498.js +0 -1
|
@@ -11,7 +11,7 @@ import { i as forwardBlockEvents, t as DEFAULT_TYPE_PREFIX } from "./cloud-event
|
|
|
11
11
|
import { a as replicaState, i as primaryCookieWrite, o as routedExecutor, r as pinnedUntil, s as withPrimaryPin } from "./replicas-BvIL4_jL.js";
|
|
12
12
|
import { t as authContext } from "./context-BiwgsycK.js";
|
|
13
13
|
import { a as narrowCap, i as delegatedClaims, r as contextClaims } from "./delegation-B7uNnz6z.js";
|
|
14
|
-
import { d as parseCookies, h as sessionCookieName, m as serializeCookie, n as prefetchJwks, r as resolveAuth, s as AUTH_CACHE_HEADERS, u as clearSessionAtScopes } from "./resolve-
|
|
14
|
+
import { d as parseCookies, h as sessionCookieName, m as serializeCookie, n as prefetchJwks, r as resolveAuth, s as AUTH_CACHE_HEADERS, u as clearSessionAtScopes } from "./resolve-AtncaPTU.js";
|
|
15
15
|
import { t as credentialProviderOf } from "./provider-C-Ti38J6.js";
|
|
16
16
|
import { a as respond, n as defaultPrefetchJwks, r as guard, t as defaultExpose } from "./respond-Bhp3G__q.js";
|
|
17
17
|
import { createClient } from "@supabase/supabase-js";
|
|
@@ -835,10 +835,19 @@ where bucket_id = $1 and name = $2 and user_metadata ->> 'supportSessionId' = $5
|
|
|
835
835
|
const OWN_COPY = `update storage.objects
|
|
836
836
|
set owner = $3::uuid, owner_id = $4, user_metadata = coalesce(user_metadata, '{}'::jsonb) || $5::jsonb
|
|
837
837
|
where bucket_id = $1 and name = $2 and owner_id is null`;
|
|
838
|
+
const OWN_SIGNED_UPLOAD = `${OWN_COPY}
|
|
839
|
+
returning name`;
|
|
838
840
|
const OWN_MOVE = `update storage.objects
|
|
839
841
|
set owner = $3::uuid, owner_id = $4, user_metadata = coalesce(user_metadata, '{}'::jsonb) || $5::jsonb
|
|
840
842
|
where bucket_id = $1 and name = $2 and owner_id is not distinct from $6`;
|
|
841
843
|
const UUID = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/i;
|
|
844
|
+
const OWNED = {
|
|
845
|
+
name: "StorageApiError",
|
|
846
|
+
message: "The object belongs to another user",
|
|
847
|
+
status: 403,
|
|
848
|
+
statusCode: "403",
|
|
849
|
+
code: "AccessDenied"
|
|
850
|
+
};
|
|
842
851
|
const HIDDEN_URL = "Either the object does not exist or you do not have access to it";
|
|
843
852
|
const LIST_SORT_COLUMNS = /* @__PURE__ */ new Set([
|
|
844
853
|
"name",
|
|
@@ -1094,9 +1103,17 @@ function infoOf(row) {
|
|
|
1094
1103
|
* decide as for the target's own request. Then the service client writes,
|
|
1095
1104
|
* the admin connection makes the target the owner of the stored object,
|
|
1096
1105
|
* and its `user_metadata` records the session id and the admin's id. A
|
|
1097
|
-
* refused dry run resolves to Storage's `403`.
|
|
1098
|
-
*
|
|
1099
|
-
*
|
|
1106
|
+
* refused dry run resolves to Storage's `403`.
|
|
1107
|
+
*
|
|
1108
|
+
* `createSignedUploadUrl` runs the same dry run as `upload` before the
|
|
1109
|
+
* service client signs the URL. The object a browser uploads there has no
|
|
1110
|
+
* owner, so `claimSignedUpload(bucket, path)` finishes the upload: it checks again
|
|
1111
|
+
* that the target may insert at the path, then makes the target the owner
|
|
1112
|
+
* of an object without one and stamps the session on its `user_metadata`.
|
|
1113
|
+
* An object another user owns is refused with a `403`. `uploadToSignedUrl`
|
|
1114
|
+
* claims what it stores. Every write in a read-only session resolves to a
|
|
1115
|
+
* `403` `SUPPORT_READ_ONLY` error, and without `adminSql`, `session` or a
|
|
1116
|
+
* `sql` client with `transaction` to a `403` `SUPPORT_STORAGE_WRITES` error.
|
|
1100
1117
|
*/
|
|
1101
1118
|
function supportStorage(options) {
|
|
1102
1119
|
const readOnly = options.readOnly ?? true;
|
|
@@ -1106,9 +1123,7 @@ function supportStorage(options) {
|
|
|
1106
1123
|
session
|
|
1107
1124
|
} : void 0;
|
|
1108
1125
|
const refusal = readOnly ? apiError(403, "The support session is read-only", "SUPPORT_READ_ONLY") : apiError(403, "Storage writes in a support session need adminSql, session and a sql client with transaction", "SUPPORT_STORAGE_WRITES");
|
|
1109
|
-
const signedRefusal = readOnly ? refusal : apiError(403, "Signed uploads are not available in a support session", "SUPPORT_STORAGE_WRITES");
|
|
1110
1126
|
const refuse = () => Promise.resolve(failed(refusal));
|
|
1111
|
-
const refuseSigned = () => Promise.resolve(failed(signedRefusal));
|
|
1112
1127
|
const rows = (query, values) => sql.queryRaw(query, values);
|
|
1113
1128
|
let versioned;
|
|
1114
1129
|
const upsertStatement = () => (versioned ??= rows(CURRENT_VERSION_INDEX, []).then(([row]) => row?.["versioned"] === true).catch((cause) => {
|
|
@@ -1132,272 +1147,354 @@ function supportStorage(options) {
|
|
|
1132
1147
|
throw cause;
|
|
1133
1148
|
}
|
|
1134
1149
|
};
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1150
|
+
const rehearseStore = (bucket, active, name, statement, metadata) => rehearse(async (client) => {
|
|
1151
|
+
await client.queryRaw(statement, [
|
|
1152
|
+
bucket,
|
|
1153
|
+
name,
|
|
1154
|
+
ownerOf(active.targetUserId),
|
|
1155
|
+
active.targetUserId,
|
|
1156
|
+
JSON.stringify(metadata)
|
|
1157
|
+
]);
|
|
1158
|
+
return null;
|
|
1159
|
+
});
|
|
1160
|
+
const claimFor = async (bucket, { adminSql: ownerSql, session: active }, name) => {
|
|
1161
|
+
const [claimed] = await ownerSql.queryRaw(OWN_SIGNED_UPLOAD, [
|
|
1162
|
+
bucket,
|
|
1163
|
+
name,
|
|
1164
|
+
ownerOf(active.targetUserId),
|
|
1165
|
+
active.targetUserId,
|
|
1166
|
+
JSON.stringify(stampOf(active))
|
|
1167
|
+
]);
|
|
1168
|
+
if (claimed) return {
|
|
1169
|
+
data: { path: name },
|
|
1170
|
+
error: null
|
|
1140
1171
|
};
|
|
1141
|
-
const
|
|
1172
|
+
const [found] = await ownerSql.queryRaw(SOURCE_OBJECT, [bucket, name]);
|
|
1173
|
+
if (!found) return failed(NOT_FOUND);
|
|
1174
|
+
return found["owner_id"] === active.targetUserId ? {
|
|
1175
|
+
data: { path: name },
|
|
1176
|
+
error: null
|
|
1177
|
+
} : failed(OWNED);
|
|
1178
|
+
};
|
|
1179
|
+
const claimSignedUpload = (bucket, path) => {
|
|
1180
|
+
if (!writer) return refuse();
|
|
1181
|
+
return settled(async () => {
|
|
1142
1182
|
const name = normalizePath(path);
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
});
|
|
1146
|
-
const list = (path, listOptions = {}) => settled(async () => {
|
|
1147
|
-
const problem = listProblem(listOptions);
|
|
1148
|
-
if (problem) return failed(invalid(problem));
|
|
1149
|
-
let prefix = path ?? "";
|
|
1150
|
-
if (prefix.length > 0 && !prefix.endsWith("/")) prefix = `${prefix}/`;
|
|
1151
|
-
const column = listOptions.sortBy?.column ?? "name";
|
|
1152
|
-
const escape = column !== "name";
|
|
1153
|
-
const safePrefix = escape ? escapeLike(prefix) : prefix;
|
|
1154
|
-
const search = listOptions.search ?? "";
|
|
1155
|
-
const safeSearch = escape ? escapeLike(search) : search;
|
|
1156
|
-
return {
|
|
1157
|
-
data: (await rows(SEARCH, [
|
|
1158
|
-
safePrefix,
|
|
1159
|
-
bucket,
|
|
1160
|
-
listOptions.limit ?? 100,
|
|
1161
|
-
(safePrefix + safeSearch).split("/").length,
|
|
1162
|
-
listOptions.offset ?? 0,
|
|
1163
|
-
safeSearch,
|
|
1164
|
-
column,
|
|
1165
|
-
listOptions.sortBy?.order ?? "asc"
|
|
1166
|
-
])).map(listEntryOf),
|
|
1167
|
-
error: null
|
|
1168
|
-
};
|
|
1169
|
-
});
|
|
1170
|
-
const listV2 = (listOptions = {}) => settled(async () => {
|
|
1171
|
-
const problem = listV2Problem(listOptions);
|
|
1172
|
-
if (problem) return failed(invalid(problem));
|
|
1173
|
-
const limit = Math.min(listOptions.limit ?? 1e3, 1e3);
|
|
1174
|
-
const prefix = listOptions.prefix ?? "";
|
|
1175
|
-
const cursor = listOptions.cursor ? decodeCursor(listOptions.cursor) : void 0;
|
|
1176
|
-
if (listOptions.cursor && !cursor) return failed(apiError(400, "Invalid continuation token", "InvalidParameter"));
|
|
1177
|
-
const sortOrder = filled(cursor?.sortOrder) ?? listOptions.sortBy?.order;
|
|
1178
|
-
const sortColumn = filled(cursor?.sortColumn) ?? listOptions.sortBy?.column;
|
|
1179
|
-
let found;
|
|
1180
|
-
if (listOptions.with_delimiter) found = await rows(SEARCH_V2, [
|
|
1181
|
-
prefix,
|
|
1182
|
-
bucket,
|
|
1183
|
-
limit + 1,
|
|
1184
|
-
prefix ? prefix.split("/").length : 1,
|
|
1185
|
-
cursor?.startAfter ?? "",
|
|
1186
|
-
sortOrder ?? "asc",
|
|
1187
|
-
sortColumn ?? "name",
|
|
1188
|
-
filled(cursor?.sortColumnAfter) ?? null
|
|
1189
|
-
]);
|
|
1190
|
-
else {
|
|
1191
|
-
const page = flatPage(bucket, listOptions.prefix, limit + 1, cursor, sortColumn, sortOrder);
|
|
1192
|
-
found = await rows(page.text, page.values);
|
|
1193
|
-
}
|
|
1194
|
-
const entries = listOptions.with_delimiter ? delimited(found, prefix) : found;
|
|
1195
|
-
const hasNext = entries.length > limit;
|
|
1196
|
-
const count = hasNext ? limit : entries.length;
|
|
1197
|
-
const folders = [];
|
|
1198
|
-
const objects = [];
|
|
1199
|
-
for (const entry of entries.slice(0, count)) if (entry["id"] === null || entry["id"] === void 0) folders.push(folderOf(entry));
|
|
1200
|
-
else objects.push(objectOf(entry));
|
|
1201
|
-
const last = entries[count - 1];
|
|
1202
|
-
const after = last && sortColumn && sortColumn !== "name" ? iso(last[sortColumn]) : void 0;
|
|
1203
|
-
const nextCursor = hasNext && last ? encodeCursor({
|
|
1204
|
-
startAfter: String(last["name"]),
|
|
1205
|
-
...sortOrder ? { sortOrder } : {},
|
|
1206
|
-
...sortColumn ? { sortColumn } : {},
|
|
1207
|
-
...typeof after === "string" ? { sortColumnAfter: new Date(after).toISOString() } : {}
|
|
1208
|
-
}) : void 0;
|
|
1209
|
-
return {
|
|
1210
|
-
data: {
|
|
1211
|
-
hasNext,
|
|
1212
|
-
...nextCursor === void 0 ? {} : { nextCursor },
|
|
1213
|
-
folders,
|
|
1214
|
-
objects
|
|
1215
|
-
},
|
|
1216
|
-
error: null
|
|
1217
|
-
};
|
|
1218
|
-
});
|
|
1219
|
-
const store = (method) => (path, body, fileOptions = {}) => {
|
|
1220
|
-
if (!writer) return refuse();
|
|
1221
|
-
const { adminSql: ownerSql, session: active } = writer;
|
|
1222
|
-
return settled(async () => {
|
|
1223
|
-
const name = normalizePath(path);
|
|
1224
|
-
const owner = ownerOf(active.targetUserId);
|
|
1225
|
-
const metadata = {
|
|
1226
|
-
...fileOptions.metadata,
|
|
1227
|
-
...stampOf(active)
|
|
1228
|
-
};
|
|
1229
|
-
const statement = method === "update" || fileOptions.upsert === true ? await upsertStatement() : INSERT_OBJECT;
|
|
1230
|
-
const refused = await rehearse(async (client) => {
|
|
1231
|
-
await client.queryRaw(statement, [
|
|
1232
|
-
bucket,
|
|
1233
|
-
name,
|
|
1234
|
-
owner,
|
|
1235
|
-
active.targetUserId,
|
|
1236
|
-
JSON.stringify(metadata)
|
|
1237
|
-
]);
|
|
1238
|
-
return null;
|
|
1239
|
-
});
|
|
1240
|
-
if (refused) return failed(refused);
|
|
1241
|
-
const reply = await admin()[method](name, body, {
|
|
1242
|
-
...fileOptions,
|
|
1243
|
-
metadata
|
|
1244
|
-
});
|
|
1245
|
-
if (reply.error) return reply;
|
|
1183
|
+
const active = writer.session;
|
|
1184
|
+
const refused = await rehearse(async (client) => {
|
|
1246
1185
|
try {
|
|
1247
|
-
await
|
|
1186
|
+
await client.queryRaw(INSERT_OBJECT, [
|
|
1248
1187
|
bucket,
|
|
1249
1188
|
name,
|
|
1250
|
-
|
|
1189
|
+
ownerOf(active.targetUserId),
|
|
1251
1190
|
active.targetUserId,
|
|
1252
|
-
active
|
|
1191
|
+
JSON.stringify(stampOf(active))
|
|
1253
1192
|
]);
|
|
1254
1193
|
} catch (cause) {
|
|
1255
|
-
|
|
1256
|
-
|
|
1194
|
+
if (fromPgError(cause)?.code === "23505") return null;
|
|
1195
|
+
throw cause;
|
|
1257
1196
|
}
|
|
1258
|
-
return
|
|
1197
|
+
return NOT_FOUND;
|
|
1259
1198
|
});
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
const
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
await client.queryRaw(INSERT_OBJECT, [
|
|
1277
|
-
target,
|
|
1278
|
-
name,
|
|
1279
|
-
owner,
|
|
1280
|
-
active.targetUserId,
|
|
1281
|
-
stamp
|
|
1282
|
-
]);
|
|
1283
|
-
return null;
|
|
1284
|
-
}
|
|
1285
|
-
const [moved] = await client.queryRaw(MOVE_OBJECT, [
|
|
1286
|
-
bucket,
|
|
1287
|
-
source,
|
|
1288
|
-
target,
|
|
1289
|
-
name,
|
|
1290
|
-
owner,
|
|
1291
|
-
active.targetUserId
|
|
1292
|
-
]);
|
|
1293
|
-
return moved ? null : NOT_FOUND;
|
|
1294
|
-
});
|
|
1295
|
-
if (refused) return failed(refused);
|
|
1296
|
-
const reply = await admin()[method](source, name, destination);
|
|
1297
|
-
if (reply.error) return reply;
|
|
1298
|
-
try {
|
|
1299
|
-
await (method === "copy" ? ownerSql.queryRaw(OWN_COPY, [
|
|
1300
|
-
target,
|
|
1301
|
-
name,
|
|
1302
|
-
owner,
|
|
1303
|
-
active.targetUserId,
|
|
1304
|
-
stamp
|
|
1305
|
-
]) : ownerSql.queryRaw(OWN_MOVE, [
|
|
1306
|
-
target,
|
|
1307
|
-
name,
|
|
1308
|
-
owner,
|
|
1309
|
-
active.targetUserId,
|
|
1310
|
-
stamp,
|
|
1311
|
-
previousOwner
|
|
1312
|
-
]));
|
|
1313
|
-
} catch (cause) {
|
|
1314
|
-
const written = options.admin.from(target);
|
|
1315
|
-
await (method === "copy" ? written.remove([name]) : written.move(name, source, { destinationBucket: bucket }));
|
|
1316
|
-
return failed(sqlFailure(cause));
|
|
1317
|
-
}
|
|
1318
|
-
return reply;
|
|
1199
|
+
if (refused) return failed(refused);
|
|
1200
|
+
return claimFor(bucket, writer, name);
|
|
1201
|
+
});
|
|
1202
|
+
};
|
|
1203
|
+
return {
|
|
1204
|
+
claimSignedUpload,
|
|
1205
|
+
from(bucket) {
|
|
1206
|
+
const admin = () => options.admin.from(bucket);
|
|
1207
|
+
const visible = async (path) => {
|
|
1208
|
+
const [row] = await rows(VISIBLE_OBJECT, [bucket, path]);
|
|
1209
|
+
return row?.["visible"] === true;
|
|
1210
|
+
};
|
|
1211
|
+
const checked = (path, read) => settled(async () => {
|
|
1212
|
+
const name = normalizePath(path);
|
|
1213
|
+
if (!await visible(name)) return failed(NOT_FOUND);
|
|
1214
|
+
return read(name);
|
|
1319
1215
|
});
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
const
|
|
1329
|
-
const
|
|
1330
|
-
|
|
1331
|
-
await
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1216
|
+
const list = (path, listOptions = {}) => settled(async () => {
|
|
1217
|
+
const problem = listProblem(listOptions);
|
|
1218
|
+
if (problem) return failed(invalid(problem));
|
|
1219
|
+
let prefix = path ?? "";
|
|
1220
|
+
if (prefix.length > 0 && !prefix.endsWith("/")) prefix = `${prefix}/`;
|
|
1221
|
+
const column = listOptions.sortBy?.column ?? "name";
|
|
1222
|
+
const escape = column !== "name";
|
|
1223
|
+
const safePrefix = escape ? escapeLike(prefix) : prefix;
|
|
1224
|
+
const search = listOptions.search ?? "";
|
|
1225
|
+
const safeSearch = escape ? escapeLike(search) : search;
|
|
1226
|
+
return {
|
|
1227
|
+
data: (await rows(SEARCH, [
|
|
1228
|
+
safePrefix,
|
|
1229
|
+
bucket,
|
|
1230
|
+
listOptions.limit ?? 100,
|
|
1231
|
+
(safePrefix + safeSearch).split("/").length,
|
|
1232
|
+
listOptions.offset ?? 0,
|
|
1233
|
+
safeSearch,
|
|
1234
|
+
column,
|
|
1235
|
+
listOptions.sortBy?.order ?? "asc"
|
|
1236
|
+
])).map(listEntryOf),
|
|
1340
1237
|
error: null
|
|
1341
1238
|
};
|
|
1342
|
-
return admin().remove(permitted);
|
|
1343
1239
|
});
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
const [row] = await rows(versionId === void 0 ? OBJECT_INFO : `${OBJECT_INFO} and o.version = $3`, versionId === void 0 ? [bucket, name] : [
|
|
1240
|
+
const listV2 = (listOptions = {}) => settled(async () => {
|
|
1241
|
+
const problem = listV2Problem(listOptions);
|
|
1242
|
+
if (problem) return failed(invalid(problem));
|
|
1243
|
+
const limit = Math.min(listOptions.limit ?? 1e3, 1e3);
|
|
1244
|
+
const prefix = listOptions.prefix ?? "";
|
|
1245
|
+
const cursor = listOptions.cursor ? decodeCursor(listOptions.cursor) : void 0;
|
|
1246
|
+
if (listOptions.cursor && !cursor) return failed(apiError(400, "Invalid continuation token", "InvalidParameter"));
|
|
1247
|
+
const sortOrder = filled(cursor?.sortOrder) ?? listOptions.sortBy?.order;
|
|
1248
|
+
const sortColumn = filled(cursor?.sortColumn) ?? listOptions.sortBy?.column;
|
|
1249
|
+
let found;
|
|
1250
|
+
if (listOptions.with_delimiter) found = await rows(SEARCH_V2, [
|
|
1251
|
+
prefix,
|
|
1357
1252
|
bucket,
|
|
1358
|
-
|
|
1359
|
-
|
|
1253
|
+
limit + 1,
|
|
1254
|
+
prefix ? prefix.split("/").length : 1,
|
|
1255
|
+
cursor?.startAfter ?? "",
|
|
1256
|
+
sortOrder ?? "asc",
|
|
1257
|
+
sortColumn ?? "name",
|
|
1258
|
+
filled(cursor?.sortColumnAfter) ?? null
|
|
1360
1259
|
]);
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
error: null
|
|
1365
|
-
} : failed(NOT_FOUND);
|
|
1366
|
-
}),
|
|
1367
|
-
download: (path, downloadOptions, parameters) => checked(path, (name) => admin().download(name, downloadOptions, parameters)),
|
|
1368
|
-
createSignedUrl: (path, expiresIn, urlOptions) => checked(path, (name) => admin().createSignedUrl(name, expiresIn, urlOptions)),
|
|
1369
|
-
createSignedUrls: (paths, expiresIn, urlOptions) => settled(async () => {
|
|
1370
|
-
const names = paths.map(normalizePath);
|
|
1371
|
-
const seen = new Set((await rows(VISIBLE_OBJECTS, [bucket, names])).map((row) => String(row["path"])));
|
|
1372
|
-
const shown = [...new Set(names.filter((name) => seen.has(name)))];
|
|
1373
|
-
const signed = /* @__PURE__ */ new Map();
|
|
1374
|
-
if (shown.length > 0) {
|
|
1375
|
-
const reply = await admin().createSignedUrls(shown, expiresIn, urlOptions);
|
|
1376
|
-
if (reply.error) return failed(reply.error);
|
|
1377
|
-
for (const entry of reply.data) if (entry.path !== null) signed.set(entry.path, entry);
|
|
1260
|
+
else {
|
|
1261
|
+
const page = flatPage(bucket, listOptions.prefix, limit + 1, cursor, sortColumn, sortOrder);
|
|
1262
|
+
found = await rows(page.text, page.values);
|
|
1378
1263
|
}
|
|
1264
|
+
const entries = listOptions.with_delimiter ? delimited(found, prefix) : found;
|
|
1265
|
+
const hasNext = entries.length > limit;
|
|
1266
|
+
const count = hasNext ? limit : entries.length;
|
|
1267
|
+
const folders = [];
|
|
1268
|
+
const objects = [];
|
|
1269
|
+
for (const entry of entries.slice(0, count)) if (entry["id"] === null || entry["id"] === void 0) folders.push(folderOf(entry));
|
|
1270
|
+
else objects.push(objectOf(entry));
|
|
1271
|
+
const last = entries[count - 1];
|
|
1272
|
+
const after = last && sortColumn && sortColumn !== "name" ? iso(last[sortColumn]) : void 0;
|
|
1273
|
+
const nextCursor = hasNext && last ? encodeCursor({
|
|
1274
|
+
startAfter: String(last["name"]),
|
|
1275
|
+
...sortOrder ? { sortOrder } : {},
|
|
1276
|
+
...sortColumn ? { sortColumn } : {},
|
|
1277
|
+
...typeof after === "string" ? { sortColumnAfter: new Date(after).toISOString() } : {}
|
|
1278
|
+
}) : void 0;
|
|
1379
1279
|
return {
|
|
1380
|
-
data:
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1280
|
+
data: {
|
|
1281
|
+
hasNext,
|
|
1282
|
+
...nextCursor === void 0 ? {} : { nextCursor },
|
|
1283
|
+
folders,
|
|
1284
|
+
objects
|
|
1285
|
+
},
|
|
1385
1286
|
error: null
|
|
1386
1287
|
};
|
|
1387
|
-
})
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1288
|
+
});
|
|
1289
|
+
const createSignedUploadUrl = (path, uploadOptions) => {
|
|
1290
|
+
if (!writer) return refuse();
|
|
1291
|
+
return settled(async () => {
|
|
1292
|
+
const name = normalizePath(path);
|
|
1293
|
+
const statement = uploadOptions?.upsert === true ? await upsertStatement() : INSERT_OBJECT;
|
|
1294
|
+
const refused = await rehearseStore(bucket, writer.session, name, statement, stampOf(writer.session));
|
|
1295
|
+
if (refused) return failed(refused);
|
|
1296
|
+
return admin().createSignedUploadUrl(name, uploadOptions);
|
|
1297
|
+
});
|
|
1298
|
+
};
|
|
1299
|
+
const uploadToSignedUrl = (path, token, body, fileOptions = {}) => {
|
|
1300
|
+
if (!writer) return refuse();
|
|
1301
|
+
return settled(async () => {
|
|
1302
|
+
const name = normalizePath(path);
|
|
1303
|
+
const metadata = {
|
|
1304
|
+
...fileOptions.metadata,
|
|
1305
|
+
...stampOf(writer.session)
|
|
1306
|
+
};
|
|
1307
|
+
const statement = fileOptions.upsert === true ? await upsertStatement() : INSERT_OBJECT;
|
|
1308
|
+
const refused = await rehearseStore(bucket, writer.session, name, statement, metadata);
|
|
1309
|
+
if (refused) return failed(refused);
|
|
1310
|
+
const reply = await admin().uploadToSignedUrl(name, token, body, {
|
|
1311
|
+
...fileOptions,
|
|
1312
|
+
metadata
|
|
1313
|
+
});
|
|
1314
|
+
if (reply.error) return reply;
|
|
1315
|
+
try {
|
|
1316
|
+
const claimed = await claimFor(bucket, writer, name);
|
|
1317
|
+
return claimed.error ? claimed : reply;
|
|
1318
|
+
} catch (cause) {
|
|
1319
|
+
await admin().remove([name]);
|
|
1320
|
+
return failed(sqlFailure(cause));
|
|
1321
|
+
}
|
|
1322
|
+
});
|
|
1323
|
+
};
|
|
1324
|
+
const store = (method) => (path, body, fileOptions = {}) => {
|
|
1325
|
+
if (!writer) return refuse();
|
|
1326
|
+
const { adminSql: ownerSql, session: active } = writer;
|
|
1327
|
+
return settled(async () => {
|
|
1328
|
+
const name = normalizePath(path);
|
|
1329
|
+
const owner = ownerOf(active.targetUserId);
|
|
1330
|
+
const metadata = {
|
|
1331
|
+
...fileOptions.metadata,
|
|
1332
|
+
...stampOf(active)
|
|
1333
|
+
};
|
|
1334
|
+
const statement = method === "update" || fileOptions.upsert === true ? await upsertStatement() : INSERT_OBJECT;
|
|
1335
|
+
const refused = await rehearseStore(bucket, active, name, statement, metadata);
|
|
1336
|
+
if (refused) return failed(refused);
|
|
1337
|
+
const reply = await admin()[method](name, body, {
|
|
1338
|
+
...fileOptions,
|
|
1339
|
+
metadata
|
|
1340
|
+
});
|
|
1341
|
+
if (reply.error) return reply;
|
|
1342
|
+
try {
|
|
1343
|
+
await ownerSql.queryRaw(OWN_UPLOAD, [
|
|
1344
|
+
bucket,
|
|
1345
|
+
name,
|
|
1346
|
+
owner,
|
|
1347
|
+
active.targetUserId,
|
|
1348
|
+
active.id
|
|
1349
|
+
]);
|
|
1350
|
+
} catch (cause) {
|
|
1351
|
+
await admin().remove([name]);
|
|
1352
|
+
return failed(sqlFailure(cause));
|
|
1353
|
+
}
|
|
1354
|
+
return reply;
|
|
1355
|
+
});
|
|
1356
|
+
};
|
|
1357
|
+
const relocate = (method) => (from, to, destination = {}) => {
|
|
1358
|
+
if (!writer) return refuse();
|
|
1359
|
+
const { adminSql: ownerSql, session: active } = writer;
|
|
1360
|
+
return settled(async () => {
|
|
1361
|
+
const source = normalizePath(from);
|
|
1362
|
+
const name = normalizePath(to);
|
|
1363
|
+
const target = destination.destinationBucket ?? bucket;
|
|
1364
|
+
const owner = ownerOf(active.targetUserId);
|
|
1365
|
+
const stamp = JSON.stringify(stampOf(active));
|
|
1366
|
+
let previousOwner = null;
|
|
1367
|
+
const refused = await rehearse(async (client) => {
|
|
1368
|
+
const [found] = await client.queryRaw(SOURCE_OBJECT, [bucket, source]);
|
|
1369
|
+
if (!found) return NOT_FOUND;
|
|
1370
|
+
previousOwner = text(found["owner_id"]) ?? null;
|
|
1371
|
+
if (method === "copy") {
|
|
1372
|
+
await client.queryRaw(INSERT_OBJECT, [
|
|
1373
|
+
target,
|
|
1374
|
+
name,
|
|
1375
|
+
owner,
|
|
1376
|
+
active.targetUserId,
|
|
1377
|
+
stamp
|
|
1378
|
+
]);
|
|
1379
|
+
return null;
|
|
1380
|
+
}
|
|
1381
|
+
const [moved] = await client.queryRaw(MOVE_OBJECT, [
|
|
1382
|
+
bucket,
|
|
1383
|
+
source,
|
|
1384
|
+
target,
|
|
1385
|
+
name,
|
|
1386
|
+
owner,
|
|
1387
|
+
active.targetUserId
|
|
1388
|
+
]);
|
|
1389
|
+
return moved ? null : NOT_FOUND;
|
|
1390
|
+
});
|
|
1391
|
+
if (refused) return failed(refused);
|
|
1392
|
+
const reply = await admin()[method](source, name, destination);
|
|
1393
|
+
if (reply.error) return reply;
|
|
1394
|
+
try {
|
|
1395
|
+
await (method === "copy" ? ownerSql.queryRaw(OWN_COPY, [
|
|
1396
|
+
target,
|
|
1397
|
+
name,
|
|
1398
|
+
owner,
|
|
1399
|
+
active.targetUserId,
|
|
1400
|
+
stamp
|
|
1401
|
+
]) : ownerSql.queryRaw(OWN_MOVE, [
|
|
1402
|
+
target,
|
|
1403
|
+
name,
|
|
1404
|
+
owner,
|
|
1405
|
+
active.targetUserId,
|
|
1406
|
+
stamp,
|
|
1407
|
+
previousOwner
|
|
1408
|
+
]));
|
|
1409
|
+
} catch (cause) {
|
|
1410
|
+
const written = options.admin.from(target);
|
|
1411
|
+
await (method === "copy" ? written.remove([name]) : written.move(name, source, { destinationBucket: bucket }));
|
|
1412
|
+
return failed(sqlFailure(cause));
|
|
1413
|
+
}
|
|
1414
|
+
return reply;
|
|
1415
|
+
});
|
|
1416
|
+
};
|
|
1417
|
+
const remove = (paths) => {
|
|
1418
|
+
if (!writer) return refuse();
|
|
1419
|
+
return settled(async () => {
|
|
1420
|
+
const entries = paths.map((entry) => typeof entry === "string" ? normalizePath(entry) : {
|
|
1421
|
+
...entry,
|
|
1422
|
+
path: normalizePath(entry.path)
|
|
1423
|
+
});
|
|
1424
|
+
const names = entries.map((entry) => typeof entry === "string" ? entry : entry.path);
|
|
1425
|
+
const removable = /* @__PURE__ */ new Set();
|
|
1426
|
+
const refused = await rehearse(async (client) => {
|
|
1427
|
+
await client.queryRaw(ALLOW_DELETE);
|
|
1428
|
+
const deleted = await client.queryRaw(DELETE_OBJECTS, [bucket, [...new Set(names)]]);
|
|
1429
|
+
for (const row of deleted) removable.add(String(row["name"]));
|
|
1430
|
+
return null;
|
|
1431
|
+
});
|
|
1432
|
+
if (refused) return failed(refused);
|
|
1433
|
+
const permitted = entries.filter((_, index) => removable.has(names[index] ?? ""));
|
|
1434
|
+
if (permitted.length === 0) return {
|
|
1435
|
+
data: [],
|
|
1436
|
+
error: null
|
|
1437
|
+
};
|
|
1438
|
+
return admin().remove(permitted);
|
|
1439
|
+
});
|
|
1440
|
+
};
|
|
1441
|
+
return {
|
|
1442
|
+
exists: (path) => settled(async () => ({
|
|
1443
|
+
data: await visible(normalizePath(path)),
|
|
1444
|
+
error: null
|
|
1445
|
+
})).then((reply) => reply.error === null ? reply : {
|
|
1446
|
+
data: false,
|
|
1447
|
+
error: reply.error
|
|
1448
|
+
}),
|
|
1449
|
+
info: (path, infoOptions) => settled(async () => {
|
|
1450
|
+
const versionId = infoOptions?.versionId;
|
|
1451
|
+
const name = normalizePath(path);
|
|
1452
|
+
const [row] = await rows(versionId === void 0 ? OBJECT_INFO : `${OBJECT_INFO} and o.version = $3`, versionId === void 0 ? [bucket, name] : [
|
|
1453
|
+
bucket,
|
|
1454
|
+
name,
|
|
1455
|
+
versionId
|
|
1456
|
+
]);
|
|
1457
|
+
const object = row?.["object"];
|
|
1458
|
+
return isRecord(object) ? {
|
|
1459
|
+
data: infoOf(object),
|
|
1460
|
+
error: null
|
|
1461
|
+
} : failed(NOT_FOUND);
|
|
1462
|
+
}),
|
|
1463
|
+
download: (path, downloadOptions, parameters) => checked(path, (name) => admin().download(name, downloadOptions, parameters)),
|
|
1464
|
+
createSignedUrl: (path, expiresIn, urlOptions) => checked(path, (name) => admin().createSignedUrl(name, expiresIn, urlOptions)),
|
|
1465
|
+
createSignedUrls: (paths, expiresIn, urlOptions) => settled(async () => {
|
|
1466
|
+
const names = paths.map(normalizePath);
|
|
1467
|
+
const seen = new Set((await rows(VISIBLE_OBJECTS, [bucket, names])).map((row) => String(row["path"])));
|
|
1468
|
+
const shown = [...new Set(names.filter((name) => seen.has(name)))];
|
|
1469
|
+
const signed = /* @__PURE__ */ new Map();
|
|
1470
|
+
if (shown.length > 0) {
|
|
1471
|
+
const reply = await admin().createSignedUrls(shown, expiresIn, urlOptions);
|
|
1472
|
+
if (reply.error) return failed(reply.error);
|
|
1473
|
+
for (const entry of reply.data) if (entry.path !== null) signed.set(entry.path, entry);
|
|
1474
|
+
}
|
|
1475
|
+
return {
|
|
1476
|
+
data: names.map((name) => signed.get(name) ?? {
|
|
1477
|
+
error: HIDDEN_URL,
|
|
1478
|
+
path: name,
|
|
1479
|
+
signedUrl: null
|
|
1480
|
+
}),
|
|
1481
|
+
error: null
|
|
1482
|
+
};
|
|
1483
|
+
}),
|
|
1484
|
+
getPublicUrl: (path, urlOptions) => admin().getPublicUrl(path, urlOptions),
|
|
1485
|
+
list,
|
|
1486
|
+
listV2,
|
|
1487
|
+
upload: store("upload"),
|
|
1488
|
+
update: store("update"),
|
|
1489
|
+
createSignedUploadUrl,
|
|
1490
|
+
uploadToSignedUrl,
|
|
1491
|
+
remove,
|
|
1492
|
+
copy: relocate("copy"),
|
|
1493
|
+
move: relocate("move"),
|
|
1494
|
+
purgeCache: (path, cacheOptions, parameters) => writer ? checked(path, (name) => admin().purgeCache(name, cacheOptions, parameters)) : refuse()
|
|
1495
|
+
};
|
|
1496
|
+
}
|
|
1497
|
+
};
|
|
1401
1498
|
}
|
|
1402
1499
|
//#endregion
|
|
1403
1500
|
//#region src/server/server.ts
|
|
@@ -1405,6 +1502,18 @@ function supportStorage(options) {
|
|
|
1405
1502
|
const ACTOR_HEADER = "x-bs-actor";
|
|
1406
1503
|
/** The environment as `getEnv` resolves it, one variable at a time. */
|
|
1407
1504
|
const RUNTIME_ENV = new Proxy({}, { get: (_target, key) => typeof key === "string" ? getEnv(key) : void 0 });
|
|
1505
|
+
/**
|
|
1506
|
+
* `options.env` as given when it is loaded already, parsed when it is a
|
|
1507
|
+
* variable map (never merged with the runtime's), else the runtime's.
|
|
1508
|
+
*/
|
|
1509
|
+
function envOf(env) {
|
|
1510
|
+
if (env === void 0) return loadEnv(RUNTIME_ENV);
|
|
1511
|
+
return isLoadedEnv(env) ? env : loadEnv(env);
|
|
1512
|
+
}
|
|
1513
|
+
/** An `EnvSource` holds only strings, so a `URL` in `jwksUrl` means a loaded env. */
|
|
1514
|
+
function isLoadedEnv(env) {
|
|
1515
|
+
return env.jwksUrl instanceof URL;
|
|
1516
|
+
}
|
|
1408
1517
|
const needsPostgres = (method) => dbError("invalid_request", `${method} needs createServer(betterSupabase, { postgres: createPostgres() })`);
|
|
1409
1518
|
/**
|
|
1410
1519
|
* A framework adapter's server: `server` plus the adapter's own methods,
|
|
@@ -1426,7 +1535,7 @@ function extendServer(server, extra) {
|
|
|
1426
1535
|
function createServer(betterSupabase, options = {}) {
|
|
1427
1536
|
const credentials = options.credentials === void 0 ? {} : { credentials: credentialProviderOf(options.credentials) };
|
|
1428
1537
|
let loaded;
|
|
1429
|
-
const env = () => loaded ??= options.env
|
|
1538
|
+
const env = () => loaded ??= envOf(options.env);
|
|
1430
1539
|
const lite = liteBackend(options, env);
|
|
1431
1540
|
if (lite === void 0 && (options.prefetchJwks ?? defaultPrefetchJwks()) && options.auth?.jwks === void 0) try {
|
|
1432
1541
|
prefetchJwks({
|