better-supabase 0.15.0 → 0.16.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-B0b6MXYS.js → adapter-Dyks1lX1.js} +1 -1
- package/dist/{agents-5n8DWRfP.d.ts → agents-CMIB3802.d.ts} +1 -1
- package/dist/{ai-cache-DyHohbFP.d.ts → ai-cache-2LGgaT7F.d.ts} +1 -1
- package/dist/{ai-chat-D1GuRnke.d.ts → ai-chat-BCaKsvLW.d.ts} +1 -1
- package/dist/{ai-schedules-CAquecT_.d.ts → ai-schedules-BmkARmQ9.d.ts} +2 -2
- package/dist/ai-sdk/agents/index.d.ts +4 -4
- package/dist/ai-sdk/batches/index.d.ts +1 -1
- package/dist/ai-sdk/cache/index.d.ts +1 -1
- package/dist/ai-sdk/chat/index.d.ts +1 -1
- package/dist/ai-sdk/embeddings/index.d.ts +2 -2
- package/dist/ai-sdk/index.d.ts +4 -4
- package/dist/ai-sdk/memory/index.d.ts +3 -3
- package/dist/ai-sdk/workflow/index.d.ts +3 -3
- package/dist/{api-DxAPqMrE.d.ts → api-hHwieEfz.d.ts} +1 -1
- package/dist/{app-tables-CF2DD-Mu.d.ts → app-tables-yMQ4ubyY.d.ts} +1 -1
- package/dist/{approvals-Crutd4-o.d.ts → approvals-Dh9dUXrN.d.ts} +1 -1
- package/dist/{assistant-CD_h8Vxx.d.ts → assistant-ndGdOBax.d.ts} +2 -2
- package/dist/astro/index.d.ts +4 -4
- package/dist/astro/index.js +2 -2
- package/dist/{auth-module-BEFESDC4.js → auth-module-BbmX-N4L.js} +12 -4
- package/dist/{authorization-hooks-Cs1vP_ej.d.ts → authorization-hooks-D_pwXlBs.d.ts} +4 -0
- package/dist/better-result/index.d.ts +2 -2
- package/dist/{bind-CrMBwrPN.d.ts → bind-JGCPGUJh.d.ts} +4 -4
- package/dist/{block-env-B_uEM2xz.d.ts → block-env-y65GF_px.d.ts} +4 -4
- package/dist/blocks/access-requests/index.d.ts +1 -1
- package/dist/blocks/activities/index.d.ts +2 -2
- package/dist/blocks/agents/index.d.ts +2 -2
- package/dist/blocks/ai-cache/index.d.ts +2 -2
- package/dist/blocks/ai-chat/index.d.ts +5 -5
- package/dist/blocks/ai-files/index.d.ts +1 -1
- package/dist/blocks/ai-keys/index.d.ts +1 -1
- package/dist/blocks/ai-schedules/index.d.ts +2 -2
- package/dist/blocks/announcements/index.d.ts +4 -4
- package/dist/blocks/api-keys/index.d.ts +2 -2
- package/dist/blocks/approvals/index.d.ts +2 -2
- package/dist/blocks/assets/index.d.ts +1 -1
- package/dist/blocks/assignment/index.d.ts +1 -1
- package/dist/blocks/attachments/index.d.ts +2 -2
- package/dist/blocks/audit/index.d.ts +5 -5
- package/dist/blocks/automations/index.d.ts +4 -4
- package/dist/blocks/billable-time/index.d.ts +1 -1
- package/dist/blocks/billing/index.d.ts +3 -3
- package/dist/blocks/bookings/index.d.ts +3 -3
- package/dist/blocks/bulk/index.d.ts +1 -1
- package/dist/blocks/calendar/index.d.ts +2 -2
- package/dist/blocks/catalog/index.d.ts +1 -1
- package/dist/blocks/channels/index.d.ts +1 -1
- package/dist/blocks/collections/index.d.ts +1 -1
- package/dist/blocks/comments/index.d.ts +4 -4
- package/dist/blocks/compliance/index.d.ts +1 -1
- package/dist/blocks/connectors/index.d.ts +1 -1
- package/dist/blocks/contacts/index.d.ts +1 -1
- package/dist/blocks/content/index.d.ts +1 -1
- package/dist/blocks/contracts/index.d.ts +1 -1
- package/dist/blocks/courses/index.d.ts +1 -1
- package/dist/blocks/created-by/index.d.ts +1 -1
- 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/dispatch/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/donations/index.d.ts +1 -1
- package/dist/blocks/drive/index.d.ts +2 -2
- package/dist/blocks/employees/index.d.ts +2 -2
- package/dist/blocks/enrichment/index.d.ts +1 -1
- package/dist/blocks/enrollments/index.d.ts +1 -1
- package/dist/blocks/entitlements/index.d.ts +3 -3
- package/dist/blocks/expenses/index.d.ts +1 -1
- package/dist/blocks/field-history/index.d.ts +1 -1
- package/dist/blocks/flags/index.d.ts +1 -1
- package/dist/blocks/forecasts/index.d.ts +1 -1
- package/dist/blocks/forms/index.d.ts +2 -2
- package/dist/blocks/goals/index.d.ts +1 -1
- package/dist/blocks/guests/index.d.ts +1 -1
- 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 +5 -5
- package/dist/blocks/incidents/index.d.ts +1 -1
- package/dist/blocks/index.d.ts +2 -2
- package/dist/blocks/inventory/index.d.ts +2 -2
- package/dist/blocks/invoices/index.d.ts +1 -1
- package/dist/blocks/knowledge/index.d.ts +2 -2
- package/dist/blocks/lead-scoring/index.d.ts +1 -1
- package/dist/blocks/leases/index.d.ts +1 -1
- package/dist/blocks/leave/index.d.ts +1 -1
- package/dist/blocks/ledger/index.d.ts +1 -1
- package/dist/blocks/mail-sync/index.d.ts +1 -1
- package/dist/blocks/memberships/index.d.ts +1 -1
- package/dist/blocks/memory/index.d.ts +3 -3
- package/dist/blocks/messaging/index.d.ts +4 -4
- package/dist/blocks/metrics/index.d.ts +2 -2
- package/dist/blocks/mfa/index.d.ts +2 -2
- package/dist/blocks/moderation/index.d.ts +1 -1
- package/dist/blocks/notifications/index.d.ts +5 -5
- package/dist/blocks/numbering/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/orders/index.d.ts +3 -3
- package/dist/blocks/organizations/index.d.ts +2 -2
- package/dist/blocks/outbox/index.d.ts +2 -2
- package/dist/blocks/passes/index.d.ts +2 -2
- package/dist/blocks/permissions/index.d.ts +3 -3
- package/dist/blocks/pipelines/index.d.ts +1 -1
- package/dist/blocks/posts/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/queue/index.d.ts +30 -3
- package/dist/blocks/queue/index.js +2 -2
- package/dist/blocks/quotes/index.d.ts +1 -1
- package/dist/blocks/rank/index.d.ts +2 -2
- package/dist/blocks/reactions/index.d.ts +4 -4
- 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/saved-views/index.d.ts +3 -3
- package/dist/blocks/scores/index.d.ts +1 -1
- package/dist/blocks/search/index.d.ts +3 -3
- package/dist/blocks/security-events/index.d.ts +1 -1
- package/dist/blocks/segments/index.d.ts +1 -1
- package/dist/blocks/sequences/index.d.ts +1 -1
- package/dist/blocks/service-accounts/index.d.ts +1 -1
- package/dist/blocks/sessions/index.d.ts +2 -2
- package/dist/blocks/settings/index.d.ts +2 -2
- package/dist/blocks/share-links/index.d.ts +1 -1
- package/dist/blocks/shipments/index.d.ts +1 -1
- package/dist/blocks/signatures/index.d.ts +1 -1
- 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 +1 -1
- package/dist/blocks/state-machine/index.d.ts +1 -1
- package/dist/blocks/subjects/index.d.ts +2 -2
- package/dist/blocks/tags/index.d.ts +2 -2
- package/dist/blocks/tasks/index.d.ts +2 -2
- 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/timeline/index.d.ts +3 -3
- package/dist/blocks/trash/index.d.ts +1 -1
- package/dist/blocks/undo/index.d.ts +2 -2
- package/dist/blocks/updated-at/index.d.ts +1 -1
- package/dist/blocks/usage/index.d.ts +3 -3
- 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/webhooks/index.js +1 -1
- package/dist/blocks/workflow-editor/index.d.ts +6 -6
- package/dist/blocks/workflow-editor/index.js +12 -1
- package/dist/blocks/workflows/index.d.ts +4 -4
- package/dist/{bookings-D4dvGXiR.d.ts → bookings-Dox2rced.d.ts} +1 -1
- package/dist/{bucket-CiNi8sIw.d.ts → bucket-vc-QRrva.d.ts} +40 -1
- package/dist/chat-sdk/index.d.ts +1 -1
- package/dist/cli/add-Bfb_ISrO.js +1 -0
- package/dist/cli/{add-BgsUjCan.js → add-D7TkPdco.js} +17 -12
- package/dist/cli/{add-DCI5JKjA.js → add-I8OW-qJH.js} +2 -2
- package/dist/cli/{backfill-nxPbcsns.js → backfill-DIz5DnlQ.js} +1 -1
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{blocks-Cr4HGePW.js → blocks-Bp5RPoft.js} +1 -1
- package/dist/cli/{blocks-BZHI8mRC.js → blocks-xk-SE8gS.js} +1 -1
- package/dist/cli/{cache-CXgR_Ahi.js → cache-AznIssjI.js} +1 -1
- package/dist/cli/{codemod-DSN7iAdg.js → codemod-Aewxza6i.js} +95 -3
- package/dist/cli/{content-mapper-DNs7lTu7.js → content-mapper-DCrz6OIv.js} +2 -2
- package/dist/cli/{doctor-DDrEM6S1.js → doctor-DkOSLPEQ.js} +29 -14
- package/dist/cli/{gen-MtijJQ9r.js → gen-CFkYUnWq.js} +10 -10
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +6 -6
- package/dist/cli/{init-D-aDv9r5.js → init-CHj9ad4S.js} +5 -5
- package/dist/cli/legacy-prefix-DkTA3Rhx.js +141 -0
- package/dist/cli/{live-iEeH15ck.js → live-DGdLR41j.js} +2 -2
- package/dist/cli/{mcp-BAPyaQ62.js → mcp-BZno503V.js} +2 -2
- package/dist/cli/{metadata-DVx9Zgbj.js → metadata-BfgHMe4q.js} +3 -3
- package/dist/cli/{migration-safety-D7PhzFxm.js → migration-safety-BnnXPAro.js} +1 -1
- package/dist/cli/{module-migration-aPCckev6.js → module-migration-O_IxewFs.js} +5 -216
- package/dist/cli/{print-BeWO7OJY.js → print-DosQIFSy.js} +1 -1
- package/dist/cli/{remove-B46Dmd2M.js → remove-DK2G_KHm.js} +5 -4
- package/dist/cli/{render-ucJmUyuM.js → render-5y5a1QZr.js} +3 -3
- package/dist/cli/{run-CvYVAztY.js → run-Bs4OKdDI.js} +20 -7
- package/dist/cli/{run-DYhLBcFW.js → run-MRET30vh.js} +20 -20
- package/dist/cli/{shared-LZroULBe.js → shared-BLqbvY2x.js} +1 -1
- package/dist/cli/{snapshot-C8MVPyO8.js → snapshot-uTUlEzY2.js} +2 -2
- package/dist/cli/{source-DANaJJVc.js → source-D2gJHKwC.js} +1 -1
- package/dist/cli/{spec-DGVNMSSB.js → spec-Cm2einTO.js} +2 -2
- package/dist/cli/{spec-g8_G5K7o.js → spec-DUjOtciN.js} +1 -1
- package/dist/cli/sql-layout-lUWenjJw.js +247 -0
- package/dist/cli/{sync-btj01bcM.js → sync-CZMRB3aU.js} +2 -1
- package/dist/cli/{upgrade-B596d4t8.js → upgrade-BFEIMC7U.js} +4 -137
- package/dist/cli/{upgrade-Dw3TMQzn.js → upgrade-fVsJniXm.js} +2 -2
- package/dist/cli/{version-Du4CgONY.js → version-B2Dr6VmJ.js} +1 -1
- package/dist/client/index.d.ts +5 -5
- package/dist/client/index.js +1 -1
- package/dist/client/native/index.d.ts +5 -5
- package/dist/client/native/index.js +1 -1
- package/dist/{client-BAEbEA7t.js → client-C_mlji5R.js} +6 -5
- package/dist/{composite-BARuBEDE.js → composite-B3TIjId4.js} +1 -1
- package/dist/{composite-Dsxj7T5K.d.ts → composite-CfYyU3vs.d.ts} +4 -3
- package/dist/config/index.d.ts +1 -1
- package/dist/{context-CEuTKrkz.d.ts → context-8kb8m5uO.d.ts} +24 -2
- package/dist/{controller-BrP0gn47.d.ts → controller-BW-5Opig.d.ts} +1 -1
- package/dist/{conversion-BAbucuXq.d.ts → conversion-3iv2r7YC.d.ts} +1 -1
- package/dist/create/index.d.ts +2 -2
- package/dist/create/index.js +1 -1
- package/dist/{define-DFBnQyYg.d.ts → define-C5AcEkEJ.d.ts} +1 -1
- package/dist/{define-block-BVcLQ3DF.d.ts → define-block-C1RHXz7L.d.ts} +3 -3
- package/dist/delegation-C7eWP2r8.d.ts +14 -0
- package/dist/{delegation--93jRsVO.js → delegation-DGOIiT8k.js} +12 -5
- package/dist/edge/index.d.ts +5 -5
- package/dist/edge/index.js +3 -3
- package/dist/{embeddings-kFbRvuic.d.ts → embeddings-D_RsS6ow.d.ts} +1 -1
- package/dist/{entitlements-CJpYQXeE.d.ts → entitlements-sO977DO-.d.ts} +1 -1
- package/dist/{envelope-Bzu0JnY2.js → envelope-DEI2iX-d.js} +1 -1
- package/dist/eve/index.d.ts +2 -2
- package/dist/{eve-BFSwTu1z.d.ts → eve-B7jxYPCw.d.ts} +2 -2
- package/dist/{executor-CVIn6JHa.d.ts → executor-BcNWcD-4.d.ts} +2 -2
- package/dist/{executor-_2ekNofh.d.ts → executor-Bi056Cnj.d.ts} +1 -1
- package/dist/expo/index.d.ts +2 -2
- package/dist/expo/index.js +2 -2
- package/dist/{field-errors-fsbFktYF.d.ts → field-errors-Dt86dCKk.d.ts} +12 -12
- package/dist/{framework-BKyTeS-j.d.ts → framework-BGdZVyPL.d.ts} +3 -3
- package/dist/{framework-DDdkR7FX.js → framework-BozTXRzt.js} +1 -1
- package/dist/{gateway-TD1pRfTP.d.ts → gateway-DzI687yd.d.ts} +3 -3
- package/dist/hono/index.d.ts +4 -4
- package/dist/hono/index.js +2 -2
- package/dist/{index-C-qpk8EQ.d.ts → index-CENWq3zb.d.ts} +1 -1
- package/dist/{index-Do2ChN_y.d.ts → index-CQhPHHDF.d.ts} +20 -2
- package/dist/{index-B938YqY-.d.ts → index-CTu-3fJB.d.ts} +51 -3
- package/dist/{index-CguFm716.d.ts → index-Cc4mIQS8.d.ts} +32 -4
- package/dist/{index-DLq69k3F.d.ts → index-CcAmFNVi.d.ts} +2 -2
- package/dist/{index-BnH4Gomw.d.ts → index-Craf712U.d.ts} +44 -12
- package/dist/{index-BUuVq1co.d.ts → index-DZKCc2WM.d.ts} +3 -3
- package/dist/index.d.ts +2 -2
- package/dist/{knowledge-CtL-Vfgy.d.ts → knowledge-F1IhRI4Q.d.ts} +1 -1
- package/dist/list/index.d.ts +1 -1
- package/dist/{list-query-BDVutLFr.d.ts → list-query-DYhgRTd5.d.ts} +1 -1
- package/dist/mapper/bin.js +5 -5
- package/dist/mcp/index.d.ts +3 -3
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/sdk/index.d.ts +2 -2
- package/dist/mcp/sdk/index.js +1 -1
- package/dist/next/client/index.d.ts +81 -1
- package/dist/next/client/index.js +178 -2
- package/dist/next/index.d.ts +15 -14
- package/dist/next/index.js +2 -2
- package/dist/orpc/index.d.ts +4 -4
- package/dist/orpc/index.js +1 -1
- package/dist/otel/index.js +4 -4
- package/dist/{outbox-HvGAJuBe.d.ts → outbox-HxjZTfF6.d.ts} +1 -1
- package/dist/{ports-DOhtuw3c.js → ports-CaVRXjxq.js} +1 -1
- package/dist/{ports-sx226JUL.d.ts → ports-mObLgH1z.d.ts} +1 -1
- package/dist/powersync/index.d.ts +2 -2
- package/dist/preset/index.d.ts +3 -3
- package/dist/{push-token-D3Vcf0Pf.d.ts → push-token-BSSvsWXZ.d.ts} +1 -1
- package/dist/query/index.d.ts +1 -1
- package/dist/{rate-limit-o44SYkVY.js → rate-limit-Dt9vAY4E.js} +53 -0
- package/dist/react/index.d.ts +6 -6
- package/dist/react/index.js +3 -3
- package/dist/react/native/index.d.ts +1 -1
- package/dist/react/native/index.js +1 -1
- package/dist/react/server.d.ts +12 -7
- package/dist/react/server.js +8 -3
- package/dist/react/session.d.ts +5 -0
- package/dist/react/session.js +9 -1
- package/dist/{react-BuDYI62C.js → react-CZUZYn9E.js} +41 -4
- package/dist/react-router/index.d.ts +3 -3
- package/dist/react-router/index.js +2 -2
- package/dist/realtime/index.d.ts +6 -6
- package/dist/realtime/index.js +2 -1
- package/dist/{record-form-BYs9xv_N.d.ts → record-form-D9ILuVtA.d.ts} +1 -1
- package/dist/records/index.d.ts +7 -7
- package/dist/relay-gKvKJ3xf.js +208 -0
- package/dist/{resource-execute-CzHuDsil.d.ts → resource-execute-Cpnob1Vj.d.ts} +1 -1
- package/dist/{resource-types-DnKiH4G2.d.ts → resource-types-pMeLs68X.d.ts} +1 -1
- package/dist/{resources-B9cQxhjw.d.ts → resources-7iq2-5_A.d.ts} +1 -1
- package/dist/server/index.d.ts +150 -11
- package/dist/server/index.js +400 -4
- package/dist/{server-types-CFtehAsr.d.ts → server-types-CK8mUIUT.d.ts} +5 -354
- package/dist/{session-CH0SKgIz.d.ts → session-DWmFv3vB.d.ts} +2 -1
- package/dist/session-status-qQLm7jzh.d.ts +82 -0
- package/dist/{sign-in-DNCdrk05.js → sign-in-B64114O4.js} +1 -1
- package/dist/{sign-in-BsIaNx2C.js → sign-in-CmPK1AgM.js} +20 -10
- package/dist/solid/index.d.ts +7 -7
- package/dist/solid/index.js +1 -1
- package/dist/solid-start/index.d.ts +3 -3
- package/dist/solid-start/index.js +2 -2
- package/dist/spec/index.d.ts +1 -1
- package/dist/sql/index.d.ts +4 -4
- package/dist/sql/index.js +2 -2
- package/dist/{sql-ClHIdgKS.js → sql-Dl3Alk43.js} +402 -13
- package/dist/sqlite/index.d.ts +1 -1
- package/dist/ssr/index.d.ts +1 -1
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.js +54 -1
- package/dist/{subject-readers-BNSzkqw_.d.ts → subject-readers-8GySC9Z8.d.ts} +1 -1
- package/dist/support-B4ZBVxt3.d.ts +357 -0
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +1 -1
- package/dist/sveltekit/index.d.ts +4 -4
- package/dist/sveltekit/index.js +2 -2
- package/dist/{tags-BjHflcHF.d.ts → tags-qvVk79pp.d.ts} +1 -1
- package/dist/tanstack-db/index.d.ts +1 -1
- package/dist/tanstack-start/index.d.ts +3 -3
- package/dist/tanstack-start/index.js +2 -2
- package/dist/{tenant-yYg0E2-n.d.ts → tenant-DOKIJI62.d.ts} +1 -1
- package/dist/testing/index.d.ts +13 -12
- package/dist/{timeline-CtG0sehj.d.ts → timeline-CvTuXYvn.d.ts} +3 -3
- package/dist/{topic-CJrQZQaa.d.ts → topic-CZXHhZye.d.ts} +3 -3
- package/dist/{types-CAQBmpDx.d.ts → types-A4yyKEsg.d.ts} +1 -1
- package/dist/{types-SFRomQF7.d.ts → types-Czq9Xtpa.d.ts} +1 -7
- package/dist/{types-BBQLbui9.d.ts → types-DsRfiQ0v.d.ts} +1 -1
- package/dist/{usage-D7QkrwzV.d.ts → usage-Dp45V42p.d.ts} +1 -1
- package/dist/{verify-CMou8dWZ.d.ts → verify-CjvNLY7N.d.ts} +1 -1
- package/dist/vue/index.d.ts +7 -7
- package/dist/vue/index.js +1 -1
- package/dist/{watch-topic-BcGfvZOE.d.ts → watch-topic-BAxoPKZx.d.ts} +1 -1
- package/dist/workflow-sdk/builder/index.d.ts +3 -3
- package/dist/workflow-sdk/builder/index.js +1 -1
- package/dist/workflow-sdk/index.d.ts +1 -1
- package/dist/workflow-sdk/index.js +1 -1
- package/dist/{workflow-sdk-BFHu4sci.d.ts → workflow-sdk-B3Ss55Fy.d.ts} +1 -1
- package/dist/{workflow-sdk-BVlFEB5Q.js → workflow-sdk-Cf0LAOFF.js} +2 -2
- package/dist/yjs/index.d.ts +1 -1
- package/package.json +1 -1
- package/schemas/doctor-report-v1.json +1 -0
- package/skills/better-supabase-api/SKILL.md +3 -1
- package/skills/better-supabase-auth/SKILL.md +7 -0
- package/dist/cli/add-DWjlVwvP.js +0 -1
package/dist/react/session.d.ts
CHANGED
|
@@ -26,4 +26,9 @@ export declare function useSession<C = unknown, P = unknown>(): AuthSession<C, P
|
|
|
26
26
|
* `useSession`.
|
|
27
27
|
*/
|
|
28
28
|
export declare function useSupportSession(): SupportView | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* `useSupportSession()` that answers `undefined` outside a `<SessionProvider>`
|
|
31
|
+
* instead of throwing.
|
|
32
|
+
*/
|
|
33
|
+
export declare function useOptionalSupportSession(): SupportView | undefined;
|
|
29
34
|
//#endregion
|
package/dist/react/session.js
CHANGED
|
@@ -27,5 +27,13 @@ function useSession() {
|
|
|
27
27
|
function useSupportSession() {
|
|
28
28
|
return supportOf(useSession());
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* `useSupportSession()` that answers `undefined` outside a `<SessionProvider>`
|
|
32
|
+
* instead of throwing.
|
|
33
|
+
*/
|
|
34
|
+
function useOptionalSupportSession() {
|
|
35
|
+
const promise = useContext(SessionContext);
|
|
36
|
+
return promise ? supportOf(use(promise)) : void 0;
|
|
37
|
+
}
|
|
30
38
|
//#endregion
|
|
31
|
-
export { SessionProvider, useSession, useSupportSession };
|
|
39
|
+
export { SessionProvider, useOptionalSupportSession, useSession, useSupportSession };
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { n as dbError } from "./errors-BVFgt8BZ.js";
|
|
2
2
|
import { t as escapeLike } from "./escape-like-DHfx6jRr.js";
|
|
3
3
|
import { a as ok, r as err, s as toDbError } from "./result-ntFBW2p2.js";
|
|
4
|
-
import { c as useBroadcastAuth, f as ClientContext } from "./sign-in-
|
|
5
|
-
import "./react/session.js";
|
|
4
|
+
import { c as useBroadcastAuth, f as ClientContext } from "./sign-in-CmPK1AgM.js";
|
|
5
|
+
import { useOptionalSupportSession } from "./react/session.js";
|
|
6
6
|
import { a as blockArgsKey, c as listenToBlockEvents, d as fieldErrorsOf, i as dataTarget, l as blockEnv, n as createDataOne, o as createBlockMutation, r as dataArgsKey, s as createBlockQuery, t as createDataList } from "./data-hooks-tgF1Ct0F.js";
|
|
7
7
|
import { H as rpcTransport } from "./block-helpers-CtBdjgO4.js";
|
|
8
8
|
import { r as createBlocks } from "./create-blocks-Bu4H5TXw.js";
|
|
9
9
|
import { a as recordCan, i as plainData, l as runBindingWrite, s as recordSubject } from "./record-type-DRbnlj5q.js";
|
|
10
10
|
import { t as createRecordController } from "./controller-BNZKd6bJ.js";
|
|
11
|
+
import { t as relayRealtimeClient } from "./relay-gKvKJ3xf.js";
|
|
11
12
|
import { a as ttlSeconds, n as scaleTransform, r as transformFor } from "./variants-Cy--Ub-a.js";
|
|
12
13
|
import { createContext, createElement, use, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
|
|
13
14
|
//#region src/react/actions.ts
|
|
@@ -529,7 +530,7 @@ const notJoined = () => Promise.resolve(dbError("invalid_request", "better-supab
|
|
|
529
530
|
*/
|
|
530
531
|
function usePresence(topic, values, options = {}) {
|
|
531
532
|
const context = useContext(ClientContext);
|
|
532
|
-
const supabase = options.client ?? context?.client.supabase;
|
|
533
|
+
const supabase = options.client ?? context?.realtime ?? context?.client.supabase;
|
|
533
534
|
if (!supabase) throw new Error("better-supabase: usePresence needs <BetterSupabaseProvider client={bsb}> or { client: supabase }");
|
|
534
535
|
const auth = useBroadcastAuth(options.client === void 0 ? context?.client : void 0, supabase);
|
|
535
536
|
const [members, setMembers] = useState(NONE);
|
|
@@ -606,6 +607,42 @@ function syncState(joined, current, tracked) {
|
|
|
606
607
|
else joined.track(current.state);
|
|
607
608
|
}
|
|
608
609
|
//#endregion
|
|
610
|
+
//#region src/react/relay.ts
|
|
611
|
+
/**
|
|
612
|
+
* A `relayRealtimeClient(url)` while it is needed, else `undefined`. Pass it to
|
|
613
|
+
* `<BetterSupabaseProvider realtime={...}>`, and `useBroadcast`, `usePresence`,
|
|
614
|
+
* `useLiveQuery` and `useLiveCount` join through the server's `realtimeRelay`
|
|
615
|
+
* route, as the viewed user in a support session. The client is created once
|
|
616
|
+
* per `url` and options, so pass a stable `fetch` and `EventSource`.
|
|
617
|
+
*
|
|
618
|
+
* ```tsx
|
|
619
|
+
* const realtime = useRealtimeRelay("/api/realtime");
|
|
620
|
+
* return (
|
|
621
|
+
* <BetterSupabaseProvider client={bsb} realtime={realtime}>
|
|
622
|
+
* {children}
|
|
623
|
+
* </BetterSupabaseProvider>
|
|
624
|
+
* );
|
|
625
|
+
* ```
|
|
626
|
+
*/
|
|
627
|
+
function useRealtimeRelay(url, options = {}) {
|
|
628
|
+
const support = useOptionalSupportSession();
|
|
629
|
+
const active = options.when === "always" || support !== void 0;
|
|
630
|
+
const { EventSource: source, fetch: send, timeoutMs, maxBackoffMs } = options;
|
|
631
|
+
return useMemo(() => active ? relayRealtimeClient(url, {
|
|
632
|
+
...source === void 0 ? {} : { EventSource: source },
|
|
633
|
+
...send === void 0 ? {} : { fetch: send },
|
|
634
|
+
...timeoutMs === void 0 ? {} : { timeoutMs },
|
|
635
|
+
...maxBackoffMs === void 0 ? {} : { maxBackoffMs }
|
|
636
|
+
}) : void 0, [
|
|
637
|
+
active,
|
|
638
|
+
url,
|
|
639
|
+
source,
|
|
640
|
+
send,
|
|
641
|
+
timeoutMs,
|
|
642
|
+
maxBackoffMs
|
|
643
|
+
]);
|
|
644
|
+
}
|
|
645
|
+
//#endregion
|
|
609
646
|
//#region src/react/search.ts
|
|
610
647
|
/**
|
|
611
648
|
* A search box's value, debounced. Pass `term` to `contains` (which escapes it)
|
|
@@ -976,4 +1013,4 @@ function useUpload(bucket, options = {}) {
|
|
|
976
1013
|
};
|
|
977
1014
|
}
|
|
978
1015
|
//#endregion
|
|
979
|
-
export {
|
|
1016
|
+
export { useBlockTenant as _, useRealtimeRelay as a, useAction as b, useSyncStatus as c, useBlockMutation as d, useBlockQuery as f, useBlockEnv as g, createRecordProvider as h, useDebouncedSearch as i, defineDataHooks as l, useRecordListState as m, useSignedUrl as n, usePresence as o, useRecordForm as p, useUpload as r, useConflicts as s, useImage as t, useBlockEvent as u, useController as v, useActionForm as x, useLatest as y };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { O as AnyFunctions, k as AnyModels } from "../types-DFdg_4yN.js";
|
|
2
2
|
import { l as PermissionRef, t as AnyAuthorizer } from "../authorizer-B6X09otb.js";
|
|
3
|
-
import { t as BetterSupabase } from "../define-
|
|
4
|
-
import { n as BetterServer } from "../server-types-
|
|
3
|
+
import { t as BetterSupabase } from "../define-C5AcEkEJ.js";
|
|
4
|
+
import { n as BetterServer } from "../server-types-CK8mUIUT.js";
|
|
5
5
|
import { a as AuthorizedContext, c as ResourceLoaderContext, i as AuthorizeOptions, l as Unwrapped, n as ActionParsed, o as BlockActionOptions, r as ActionResult, s as BlockRequireOptions } from "../kit-DOwKpSkA.js";
|
|
6
6
|
import { t as RefusalRedirects } from "../refusal-CSntB_x8.js";
|
|
7
|
-
import { n as FrameworkOptions, r as LocalsResource, t as FrameworkLocals } from "../framework-
|
|
7
|
+
import { n as FrameworkOptions, r as LocalsResource, t as FrameworkLocals } from "../framework-BGdZVyPL.js";
|
|
8
8
|
import { t as Validated } from "../shared-CRRfQAKG.js";
|
|
9
9
|
import { AnyEntry, Contributions } from "@supabase/middleware";
|
|
10
10
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { o as problemResponse } from "../problem-Bf0cJ7tk.js";
|
|
2
|
-
import { c as extendServer, o as withFlush, s as createServer } from "../adapter-
|
|
2
|
+
import { c as extendServer, o as withFlush, s as createServer } from "../adapter-Dyks1lX1.js";
|
|
3
3
|
import { o as settle, t as defaultExpose } from "../respond-C3CcOZlA.js";
|
|
4
4
|
import { i as requireCaller, o as runAction } from "../kit-5l-o8RxL.js";
|
|
5
5
|
import { n as bufferInPlace, t as around } from "../shared-Bf-I13Ht.js";
|
|
6
|
-
import { i as localsOf, n as actionInput, r as frameworkEntry } from "../framework-
|
|
6
|
+
import { i as localsOf, n as actionInput, r as frameworkEntry } from "../framework-BozTXRzt.js";
|
|
7
7
|
import { r as refusalResponse } from "../refusal-ByBZcm0V.js";
|
|
8
8
|
//#region src/bridges/react-router.ts
|
|
9
9
|
/**
|
package/dist/realtime/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { D as AccessTopicPolicy, E as AccessPolicySql } from "../types-DFdg_4yN.js";
|
|
2
|
-
import {
|
|
2
|
+
import { et as TemplateParams, tt as TemplateValues } from "../bucket-vc-QRrva.js";
|
|
3
3
|
import { t as RealtimeStatus } from "../realtime-status-BhNkb-Ow.js";
|
|
4
|
-
import { A as TriggerTopic, C as TopicSubscription, D as TriggerLookup, E as TopicTriggerValue, F as FanOutResult, I as TopicFanOutOptions, M as defineTopic, N as rowChange, O as TriggerOptions, P as rowKeys, S as TopicSubscribeOptions, T as TopicTriggerOptions, _ as TopicMessage, a as PresenceOutput, b as TopicPermission, c as RealtimeClient, d as SubscribeOptions, f as Subscription, g as TopicHandlers, h as TopicEvent, i as PresenceOptions, j as TriggerValue, k as TriggerPayloadMode, l as RowChange, m as Topic, n as PresenceInput, o as PresenceSchema, p as SubscriptionStatus, r as PresenceMember, s as PresenceSubscription, t as EventSchemas, u as RowKeys, v as TopicOptions, w as TopicTriggerLookup, x as TopicSqlOptions, y as TopicPayload } from "../topic-
|
|
5
|
-
import { a as watchTopic, i as topicPort, n as TopicPort, r as TopicWatch, t as TopicHandle } from "../watch-topic-
|
|
6
|
-
import { _ as subjectPresenceValues, a as LiveSource, c as liveCount, d as realtimeChanges, f as SUBJECT_PRESENCE_TEMPLATE, g as subjectPresenceTopic, h as subjectPresence, i as LiveQueryOptions, l as liveQuery, m as SubjectPresenceValues, n as LiveCountOptions, o as LiveSubscription, p as SubjectPresenceTopic, r as LiveCountSeed, s as RealtimeChangesOptions, t as CountRunner, u as liveTopic } from "../index-
|
|
7
|
-
import { n as subjectReaders, t as SubjectReadersOptions } from "../subject-readers-
|
|
8
|
-
export { type AccessPolicySql, type AccessTopicPolicy, type CountRunner, type EventSchemas, type FanOutResult, type LiveCountOptions, type LiveCountSeed, type LiveQueryOptions, type LiveSource, type LiveSubscription, type PresenceInput, type PresenceMember, type PresenceOptions, type PresenceOutput, type PresenceSchema, type PresenceSubscription, type RealtimeChangesOptions, type RealtimeClient, type RealtimeStatus, type RowChange, type RowKeys, SUBJECT_PRESENCE_TEMPLATE, type SubjectPresenceTopic, type SubjectPresenceValues, type SubjectReadersOptions, type SubscribeOptions, type Subscription, type SubscriptionStatus, type TemplateParams, type TemplateValues, type Topic, type TopicEvent, type TopicFanOutOptions, type TopicHandle, type TopicHandlers, type TopicMessage, type TopicOptions, type TopicPayload, type TopicPermission, type TopicPort, type TopicSqlOptions, type TopicSubscribeOptions, type TopicSubscription, type TopicTriggerLookup, type TopicTriggerOptions, type TopicTriggerValue, type TopicWatch, type TriggerLookup, type TriggerOptions, type TriggerPayloadMode, type TriggerTopic, type TriggerValue, defineTopic, liveCount, liveQuery, liveTopic, realtimeChanges, rowChange, rowKeys, subjectPresence, subjectPresenceTopic, subjectPresenceValues, subjectReaders, topicPort, watchTopic };
|
|
4
|
+
import { A as TriggerTopic, C as TopicSubscription, D as TriggerLookup, E as TopicTriggerValue, F as FanOutResult, I as TopicFanOutOptions, M as defineTopic, N as rowChange, O as TriggerOptions, P as rowKeys, S as TopicSubscribeOptions, T as TopicTriggerOptions, _ as TopicMessage, a as PresenceOutput, b as TopicPermission, c as RealtimeClient, d as SubscribeOptions, f as Subscription, g as TopicHandlers, h as TopicEvent, i as PresenceOptions, j as TriggerValue, k as TriggerPayloadMode, l as RowChange, m as Topic, n as PresenceInput, o as PresenceSchema, p as SubscriptionStatus, r as PresenceMember, s as PresenceSubscription, t as EventSchemas, u as RowKeys, v as TopicOptions, w as TopicTriggerLookup, x as TopicSqlOptions, y as TopicPayload } from "../topic-CZXHhZye.js";
|
|
5
|
+
import { a as watchTopic, i as topicPort, n as TopicPort, r as TopicWatch, t as TopicHandle } from "../watch-topic-BAxoPKZx.js";
|
|
6
|
+
import { S as relayTopicPort, _ as subjectPresenceValues, a as LiveSource, b as RelayEventSourceConstructor, c as liveCount, d as realtimeChanges, f as SUBJECT_PRESENCE_TEMPLATE, g as subjectPresenceTopic, h as subjectPresence, i as LiveQueryOptions, l as liveQuery, m as SubjectPresenceValues, n as LiveCountOptions, o as LiveSubscription, p as SubjectPresenceTopic, r as LiveCountSeed, s as RealtimeChangesOptions, t as CountRunner, u as liveTopic, v as RelayClientOptions, x as relayRealtimeClient, y as RelayEventSource } from "../index-CTu-3fJB.js";
|
|
7
|
+
import { n as subjectReaders, t as SubjectReadersOptions } from "../subject-readers-8GySC9Z8.js";
|
|
8
|
+
export { type AccessPolicySql, type AccessTopicPolicy, type CountRunner, type EventSchemas, type FanOutResult, type LiveCountOptions, type LiveCountSeed, type LiveQueryOptions, type LiveSource, type LiveSubscription, type PresenceInput, type PresenceMember, type PresenceOptions, type PresenceOutput, type PresenceSchema, type PresenceSubscription, type RealtimeChangesOptions, type RealtimeClient, type RealtimeStatus, type RelayClientOptions, type RelayEventSource, type RelayEventSourceConstructor, type RowChange, type RowKeys, SUBJECT_PRESENCE_TEMPLATE, type SubjectPresenceTopic, type SubjectPresenceValues, type SubjectReadersOptions, type SubscribeOptions, type Subscription, type SubscriptionStatus, type TemplateParams, type TemplateValues, type Topic, type TopicEvent, type TopicFanOutOptions, type TopicHandle, type TopicHandlers, type TopicMessage, type TopicOptions, type TopicPayload, type TopicPermission, type TopicPort, type TopicSqlOptions, type TopicSubscribeOptions, type TopicSubscription, type TopicTriggerLookup, type TopicTriggerOptions, type TopicTriggerValue, type TopicWatch, type TriggerLookup, type TriggerOptions, type TriggerPayloadMode, type TriggerTopic, type TriggerValue, defineTopic, liveCount, liveQuery, liveTopic, realtimeChanges, relayRealtimeClient, relayTopicPort, rowChange, rowKeys, subjectPresence, subjectPresenceTopic, subjectPresenceValues, subjectReaders, topicPort, watchTopic };
|
package/dist/realtime/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { i as realtimeChanges, n as liveQuery, r as liveTopic, t as liveCount } from "../live-C21DgbsD.js";
|
|
2
2
|
import { n as watchTopic, t as topicPort } from "../watch-topic-CuaWfCuv.js";
|
|
3
|
+
import { n as relayTopicPort, t as relayRealtimeClient } from "../relay-gKvKJ3xf.js";
|
|
3
4
|
import { t as subjectReaders } from "../subject-readers-B-pQ9Mmo.js";
|
|
4
5
|
import { n as rowChange, r as rowKeys, t as defineTopic } from "../topic-ikV_pLTX.js";
|
|
5
6
|
//#region src/realtime/subject-presence.ts
|
|
@@ -34,4 +35,4 @@ function subjectPresenceValues(subject) {
|
|
|
34
35
|
} : null;
|
|
35
36
|
}
|
|
36
37
|
//#endregion
|
|
37
|
-
export { SUBJECT_PRESENCE_TEMPLATE, defineTopic, liveCount, liveQuery, liveTopic, realtimeChanges, rowChange, rowKeys, subjectPresence, subjectPresenceTopic, subjectPresenceValues, subjectReaders, topicPort, watchTopic };
|
|
38
|
+
export { SUBJECT_PRESENCE_TEMPLATE, defineTopic, liveCount, liveQuery, liveTopic, realtimeChanges, relayRealtimeClient, relayTopicPort, rowChange, rowKeys, subjectPresence, subjectPresenceTopic, subjectPresenceValues, subjectReaders, topicPort, watchTopic };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Sn as EntitySchema } from "./define-block-
|
|
1
|
+
import { Sn as EntitySchema } from "./define-block-C1RHXz7L.js";
|
|
2
2
|
import { s as FormFieldType } from "./form-definition-BjEtH8BT.js";
|
|
3
3
|
//#region src/records/record-form.d.ts
|
|
4
4
|
/** The input a field renders: a forms block field type, or a date and time. */
|
package/dist/records/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { b as DbError, t as AsyncResult } from "../result-DZeA5KS6.js";
|
|
2
2
|
import { $ as RecordRef } from "../types-DFdg_4yN.js";
|
|
3
|
-
import { _n as recordBindingWrite, an as RecordBindingDefinition, cn as RecordBindingResult, dn as RecordBindingWriteName, fn as RecordBindingWriteOutput, gn as defineRecordBinding, hn as TimelineItem, in as RecordBindingData, ln as RecordBindingWrite, mn as RecordRowInput, nn as AnyRecordBindingWrite, on as RecordBindingOptions, pn as RecordBindingWrites, rn as RecordBinding, sn as RecordBindingPermissions, tn as AnyRecordBinding, un as RecordBindingWriteInput, vn as recordEventMatches, yn as recordRowInput } from "../define-block-
|
|
4
|
-
import { A as BindingBlocks, B as PermissionFlags, C as defineRecordType, D as recordPermissionKeys, E as recordCan, F as LoadBindingsOptions, H as can, I as LoadedBindings, L as bindingCan, M as BindingName, N as BindingOf, O as recordSubject, P as BindingSource, R as countBinding, S as RecordWriteInput, T as plainData, U as permissionFlags, V as PermissionSet, _ as RecordTypeBlocks, b as RecordTypeWriteInput, d as BindingWritesOf, f as Plain, g as RecordType, h as RecordCan, j as BindingCheck, k as recordWriteInput, m as PlainBindings, p as PlainBinding, v as RecordTypePermissions, w as findBindingWrite, x as RecordTypeWriteOutput, y as RecordTypeSpec, z as loadBindings } from "../index-
|
|
5
|
-
import { p as SubscriptionStatus } from "../topic-
|
|
6
|
-
import { n as TopicPort } from "../watch-topic-
|
|
7
|
-
import { n as Controller, t as AuthPort } from "../controller-
|
|
3
|
+
import { _n as recordBindingWrite, an as RecordBindingDefinition, cn as RecordBindingResult, dn as RecordBindingWriteName, fn as RecordBindingWriteOutput, gn as defineRecordBinding, hn as TimelineItem, in as RecordBindingData, ln as RecordBindingWrite, mn as RecordRowInput, nn as AnyRecordBindingWrite, on as RecordBindingOptions, pn as RecordBindingWrites, rn as RecordBinding, sn as RecordBindingPermissions, tn as AnyRecordBinding, un as RecordBindingWriteInput, vn as recordEventMatches, yn as recordRowInput } from "../define-block-C1RHXz7L.js";
|
|
4
|
+
import { A as BindingBlocks, B as PermissionFlags, C as defineRecordType, D as recordPermissionKeys, E as recordCan, F as LoadBindingsOptions, H as can, I as LoadedBindings, L as bindingCan, M as BindingName, N as BindingOf, O as recordSubject, P as BindingSource, R as countBinding, S as RecordWriteInput, T as plainData, U as permissionFlags, V as PermissionSet, _ as RecordTypeBlocks, b as RecordTypeWriteInput, d as BindingWritesOf, f as Plain, g as RecordType, h as RecordCan, j as BindingCheck, k as recordWriteInput, m as PlainBindings, p as PlainBinding, v as RecordTypePermissions, w as findBindingWrite, x as RecordTypeWriteOutput, y as RecordTypeSpec, z as loadBindings } from "../index-CcAmFNVi.js";
|
|
5
|
+
import { p as SubscriptionStatus } from "../topic-CZXHhZye.js";
|
|
6
|
+
import { n as TopicPort } from "../watch-topic-BAxoPKZx.js";
|
|
7
|
+
import { n as Controller, t as AuthPort } from "../controller-BW-5Opig.js";
|
|
8
8
|
import { a as RecordSummaryOptions, c as Subjects, f as MyWorkKind, i as RecordSummary, n as MyWorkItem, r as MyWorkOptions } from "../subjects-BpIEN1MS.js";
|
|
9
|
-
import { a as timelineBindings, c as RecordListCells, d as RecordListQuery, f as RecordListRow, h as defineRecordList, i as loadTimeline, l as RecordListColumn, m as RecordListSpec, n as Timeline, o as RecordList, p as RecordListSource, r as TimelineEntry, s as RecordListCell, t as LoadTimelineOptions, u as RecordListPage } from "../timeline-
|
|
10
|
-
import { a as RecordFormOptions, c as recordForm, i as RecordFormInput, n as RecordFormCustomField, o as RecordFormResult, r as RecordFormField, s as RecordFormValues, t as RecordForm } from "../record-form-
|
|
9
|
+
import { a as timelineBindings, c as RecordListCells, d as RecordListQuery, f as RecordListRow, h as defineRecordList, i as loadTimeline, l as RecordListColumn, m as RecordListSpec, n as Timeline, o as RecordList, p as RecordListSource, r as TimelineEntry, s as RecordListCell, t as LoadTimelineOptions, u as RecordListPage } from "../timeline-CvTuXYvn.js";
|
|
10
|
+
import { a as RecordFormOptions, c as recordForm, i as RecordFormInput, n as RecordFormCustomField, o as RecordFormResult, r as RecordFormField, s as RecordFormValues, t as RecordForm } from "../record-form-D9ILuVtA.js";
|
|
11
11
|
//#region src/records/controller.d.ts
|
|
12
12
|
interface RecordControllerOptions<B extends BindingBlocks, N extends BindingName<B>> extends LoadBindingsOptions<B, N> {
|
|
13
13
|
readonly source: BindingSource<B>;
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { t as topicPort } from "./watch-topic-CuaWfCuv.js";
|
|
2
|
+
//#region src/realtime/relay.ts
|
|
3
|
+
const CLOSED_STATE = 2;
|
|
4
|
+
function parse(event) {
|
|
5
|
+
if (typeof event.data !== "string") return;
|
|
6
|
+
try {
|
|
7
|
+
return JSON.parse(event.data);
|
|
8
|
+
} catch {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/** The runtime's `EventSource`, read without assuming DOM types. */
|
|
13
|
+
function globalEventSource() {
|
|
14
|
+
const value = "EventSource" in globalThis ? globalThis.EventSource : void 0;
|
|
15
|
+
return typeof value === "function" ? value : void 0;
|
|
16
|
+
}
|
|
17
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
18
|
+
/**
|
|
19
|
+
* A Realtime client that joins topics through `realtimeRelay` on the server
|
|
20
|
+
* instead of a browser connection with the user's token: for support sessions
|
|
21
|
+
* ("view as user") and apps that keep sessions in httpOnly cookies. It has the
|
|
22
|
+
* `RealtimeClient` surface, so `defineTopic(...).subscribe`, `send`,
|
|
23
|
+
* `liveQuery`, `watchTopic` and the React hooks take it unchanged. Each topic
|
|
24
|
+
* is one server-sent event stream that reconnects on its own and reports a
|
|
25
|
+
* rejoin after a gap, so live queries refetch. Presence states arrive, but
|
|
26
|
+
* `track` answers `error`: presence is not relayed upstream.
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* const realtime = relayRealtimeClient("/api/realtime");
|
|
30
|
+
* using sub = notifications.subscribe(realtime, { userId }, handlers);
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
function relayRealtimeClient(url, options = {}) {
|
|
34
|
+
const channels = [];
|
|
35
|
+
const timeoutMs = options.timeoutMs ?? 15e3;
|
|
36
|
+
const maxBackoffMs = options.maxBackoffMs ?? 3e4;
|
|
37
|
+
const channelClose = /* @__PURE__ */ new WeakMap();
|
|
38
|
+
const post = async (topic, event, payload) => {
|
|
39
|
+
const doFetch = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
40
|
+
try {
|
|
41
|
+
const response = await doFetch(url, {
|
|
42
|
+
method: "POST",
|
|
43
|
+
credentials: "same-origin",
|
|
44
|
+
headers: { "content-type": "application/json" },
|
|
45
|
+
body: JSON.stringify({
|
|
46
|
+
topic,
|
|
47
|
+
event,
|
|
48
|
+
payload
|
|
49
|
+
})
|
|
50
|
+
});
|
|
51
|
+
if (response.ok) {
|
|
52
|
+
await response.body?.cancel();
|
|
53
|
+
return { success: true };
|
|
54
|
+
}
|
|
55
|
+
const problem = await response.json().catch(() => void 0);
|
|
56
|
+
const detail = isRecord(problem) && typeof problem["detail"] === "string" ? problem["detail"] : isRecord(problem) && typeof problem["title"] === "string" ? problem["title"] : response.statusText;
|
|
57
|
+
return {
|
|
58
|
+
success: false,
|
|
59
|
+
status: response.status,
|
|
60
|
+
error: detail
|
|
61
|
+
};
|
|
62
|
+
} catch (cause) {
|
|
63
|
+
return {
|
|
64
|
+
success: false,
|
|
65
|
+
status: 0,
|
|
66
|
+
error: cause instanceof Error ? cause.message : String(cause)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const create = (name) => {
|
|
71
|
+
const topic = `realtime:${name}`;
|
|
72
|
+
const listeners = [];
|
|
73
|
+
let presence = {};
|
|
74
|
+
let source;
|
|
75
|
+
let status;
|
|
76
|
+
let subscribed = false;
|
|
77
|
+
let ending = false;
|
|
78
|
+
let removed = false;
|
|
79
|
+
let backoff = 1e3;
|
|
80
|
+
let joinTimer;
|
|
81
|
+
let retryTimer;
|
|
82
|
+
const dispatch = (type, event, message) => {
|
|
83
|
+
for (const listener of listeners) if (listener.event === `${type}:*` || listener.event === `${type}:${event}`) listener.callback(message);
|
|
84
|
+
};
|
|
85
|
+
const open = () => {
|
|
86
|
+
if (removed) return;
|
|
87
|
+
const Source = options.EventSource ?? globalEventSource();
|
|
88
|
+
if (Source === void 0) {
|
|
89
|
+
status?.("CHANNEL_ERROR", /* @__PURE__ */ new Error("relayRealtimeClient needs EventSource"));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const next = new Source(`${url}${url.includes("?") ? "&" : "?"}topic=${encodeURIComponent(name)}`, { withCredentials: true });
|
|
93
|
+
source = next;
|
|
94
|
+
clearTimeout(joinTimer);
|
|
95
|
+
joinTimer = setTimeout(() => {
|
|
96
|
+
if (!subscribed && source === next) status?.("TIMED_OUT");
|
|
97
|
+
}, timeoutMs);
|
|
98
|
+
next.addEventListener("status", (event) => {
|
|
99
|
+
const data = parse(event);
|
|
100
|
+
if (!isRecord(data) || source !== next) return;
|
|
101
|
+
if (data["status"] === "subscribed") {
|
|
102
|
+
clearTimeout(joinTimer);
|
|
103
|
+
subscribed = true;
|
|
104
|
+
ending = false;
|
|
105
|
+
backoff = 1e3;
|
|
106
|
+
status?.("SUBSCRIBED");
|
|
107
|
+
} else if (data["status"] === "error") status?.("CHANNEL_ERROR", /* @__PURE__ */ new Error(`Realtime error on ${name}`));
|
|
108
|
+
});
|
|
109
|
+
next.addEventListener("broadcast", (event) => {
|
|
110
|
+
const data = parse(event);
|
|
111
|
+
if (!isRecord(data) || typeof data["event"] !== "string") return;
|
|
112
|
+
dispatch("broadcast", data["event"], {
|
|
113
|
+
type: "broadcast",
|
|
114
|
+
event: data["event"],
|
|
115
|
+
payload: data["payload"]
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
next.addEventListener("presence", (event) => {
|
|
119
|
+
const data = parse(event);
|
|
120
|
+
if (!isRecord(data)) return;
|
|
121
|
+
presence = Object.fromEntries(Object.entries(data).filter((entry) => Array.isArray(entry[1])));
|
|
122
|
+
dispatch("presence", "sync", {});
|
|
123
|
+
});
|
|
124
|
+
next.addEventListener("end", () => {
|
|
125
|
+
ending = true;
|
|
126
|
+
});
|
|
127
|
+
next.addEventListener("error", () => {
|
|
128
|
+
if (removed || source !== next) return;
|
|
129
|
+
if (next.readyState !== CLOSED_STATE) {
|
|
130
|
+
if (subscribed && !ending) status?.("CHANNEL_ERROR", /* @__PURE__ */ new Error(`The relay connection for ${name} dropped`));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
next.close();
|
|
134
|
+
source = void 0;
|
|
135
|
+
if (!subscribed) {
|
|
136
|
+
clearTimeout(joinTimer);
|
|
137
|
+
status?.("CHANNEL_ERROR", /* @__PURE__ */ new Error(`The relay refused ${name}`));
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
status?.("CHANNEL_ERROR", /* @__PURE__ */ new Error(`The relay closed ${name}; reconnecting`));
|
|
141
|
+
retryTimer = setTimeout(open, backoff);
|
|
142
|
+
backoff = Math.min(backoff * 2, maxBackoffMs);
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
const close = () => {
|
|
146
|
+
removed = true;
|
|
147
|
+
clearTimeout(joinTimer);
|
|
148
|
+
clearTimeout(retryTimer);
|
|
149
|
+
source?.close();
|
|
150
|
+
source = void 0;
|
|
151
|
+
};
|
|
152
|
+
const channel = {
|
|
153
|
+
topic,
|
|
154
|
+
on(type, filter, callback) {
|
|
155
|
+
listeners.push({
|
|
156
|
+
event: `${type}:${filter.event ?? "*"}`,
|
|
157
|
+
callback
|
|
158
|
+
});
|
|
159
|
+
return channel;
|
|
160
|
+
},
|
|
161
|
+
subscribe(callback) {
|
|
162
|
+
if (status !== void 0 || removed) throw new Error(`tried to subscribe multiple times to ${name} on the relay`);
|
|
163
|
+
status = callback ?? (() => void 0);
|
|
164
|
+
open();
|
|
165
|
+
return channel;
|
|
166
|
+
},
|
|
167
|
+
unsubscribe: () => {
|
|
168
|
+
close();
|
|
169
|
+
status?.("CLOSED");
|
|
170
|
+
return Promise.resolve("ok");
|
|
171
|
+
},
|
|
172
|
+
presenceState: () => presence,
|
|
173
|
+
track: () => Promise.resolve("error"),
|
|
174
|
+
untrack: () => Promise.resolve("error"),
|
|
175
|
+
send: async (message) => (await post(name, message.event, message.payload)).success ? "ok" : "error",
|
|
176
|
+
httpSend: (event, payload) => post(name, event, payload)
|
|
177
|
+
};
|
|
178
|
+
channelClose.set(channel, close);
|
|
179
|
+
return channel;
|
|
180
|
+
};
|
|
181
|
+
return {
|
|
182
|
+
channel: (name) => {
|
|
183
|
+
const topic = `realtime:${name}`;
|
|
184
|
+
const open = channels.find((each) => each.topic === topic);
|
|
185
|
+
if (open) return open;
|
|
186
|
+
const channel = create(name);
|
|
187
|
+
channels.push(channel);
|
|
188
|
+
return channel;
|
|
189
|
+
},
|
|
190
|
+
getChannels: () => [...channels],
|
|
191
|
+
removeChannel: (channel) => {
|
|
192
|
+
const index = channels.indexOf(channel);
|
|
193
|
+
if (index !== -1) channels.splice(index, 1);
|
|
194
|
+
channelClose.get(channel)?.();
|
|
195
|
+
return Promise.resolve("ok");
|
|
196
|
+
},
|
|
197
|
+
realtime: { setAuth: () => Promise.resolve() }
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* The block controllers' realtime port over `realtimeRelay`:
|
|
202
|
+
* `topicPort(relayRealtimeClient(url, options))`.
|
|
203
|
+
*/
|
|
204
|
+
function relayTopicPort(url, options = {}) {
|
|
205
|
+
return topicPort(relayRealtimeClient(url, options));
|
|
206
|
+
}
|
|
207
|
+
//#endregion
|
|
208
|
+
export { relayTopicPort as n, relayRealtimeClient as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as ResourceActionSpec } from "./resource-D8pzB5Qf.js";
|
|
2
|
-
import { i as ResourceContext, n as Parsed, r as ResourceAction, t as ActionArgs } from "./resource-types-
|
|
2
|
+
import { i as ResourceContext, n as Parsed, r as ResourceAction, t as ActionArgs } from "./resource-types-pMeLs68X.js";
|
|
3
3
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
4
|
//#region src/server/resource-execute.d.ts
|
|
5
5
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { D as ValidationIssue, f as Result } from "./result-DZeA5KS6.js";
|
|
2
2
|
import { Ft as RequestContext, K as Insert, dt as TableMeta, ht as Update, it as Row, k as AnyModels, ut as TableKey } from "./types-DFdg_4yN.js";
|
|
3
|
-
import { Wt as SelectArg } from "./define-
|
|
3
|
+
import { Wt as SelectArg } from "./define-C5AcEkEJ.js";
|
|
4
4
|
import { a as RespondOptions } from "./respond-Dn1_YhC1.js";
|
|
5
5
|
import { D as ResourceOperation, k as TableVerb } from "./model-hwpvole9.js";
|
|
6
6
|
import { a as ResourcePlan, i as ResourcePagination, n as ResourceActionSpec, r as ResourceDescription } from "./resource-D8pzB5Qf.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { k as AnyModels, ut as TableKey } from "./types-DFdg_4yN.js";
|
|
2
|
-
import { l as ResourceRouteOptions } from "./resource-types-
|
|
2
|
+
import { l as ResourceRouteOptions } from "./resource-types-pMeLs68X.js";
|
|
3
3
|
//#region src/server/resources.d.ts
|
|
4
4
|
/** Resources by table name; `true` serves a table with the defaults. */
|
|
5
5
|
type ResourceMap<M extends AnyModels, Ref = string, DbT = unknown> = { readonly [T in TableKey<M>]?: ResourceRouteOptions<M, T, Ref, DbT> | true; };
|