@agent-native/core 0.131.7 → 0.132.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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +123 -0
- package/corpus/core/docs/content/durable-background-runs.mdx +15 -6
- package/corpus/core/docs/design/durable-agent-runs.md +15 -11
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/activity.ts +127 -10
- package/corpus/core/src/a2a/index.ts +3 -0
- package/corpus/core/src/agent/durable-background.ts +38 -28
- package/corpus/core/src/agent/harness/background.ts +12 -2
- package/corpus/core/src/agent/production-agent.ts +18 -15
- package/corpus/core/src/agent/run-store.ts +45 -3
- package/corpus/core/src/application-state/handlers.ts +45 -0
- package/corpus/core/src/application-state/index.ts +3 -0
- package/corpus/core/src/application-state/store.ts +38 -34
- package/corpus/core/src/audit/redact.ts +104 -18
- package/corpus/core/src/cli/create.ts +115 -16
- package/corpus/core/src/client/AgentPanel.tsx +2 -7
- package/corpus/core/src/client/AssistantChat.tsx +10 -2
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +3 -0
- package/corpus/core/src/client/RunStuckBanner.tsx +29 -6
- package/corpus/core/src/client/agent-chat.ts +4 -9
- package/corpus/core/src/client/application-state.ts +115 -12
- package/corpus/core/src/client/dynamic-suggestions.ts +4 -12
- package/corpus/core/src/client/frame-protocol.ts +5 -1
- package/corpus/core/src/client/guided-questions.tsx +12 -23
- package/corpus/core/src/db/client.ts +148 -28
- package/corpus/core/src/db/create-get-db.ts +39 -6
- package/corpus/core/src/db/runtime-diagnostics.ts +41 -6
- package/corpus/core/src/deploy/build.ts +26 -33
- package/corpus/core/src/feature-flags/store.ts +10 -5
- package/corpus/core/src/integrations/a2a-continuations-store.ts +11 -0
- package/corpus/core/src/integrations/config-store.ts +13 -0
- package/corpus/core/src/integrations/google-docs-poller.ts +26 -2
- package/corpus/core/src/mcp-client/routes.ts +33 -2
- package/corpus/core/src/onboarding/plugin.ts +31 -25
- package/corpus/core/src/org/accept-pending.ts +2 -0
- package/corpus/core/src/org/auto-join-domain.ts +2 -0
- package/corpus/core/src/org/context.ts +35 -10
- package/corpus/core/src/org/handlers.ts +6 -0
- package/corpus/core/src/org/request-org-cache.ts +71 -0
- package/corpus/core/src/resources/store.ts +10 -9
- package/corpus/core/src/scripts/runner.ts +6 -3
- package/corpus/core/src/secrets/storage.ts +97 -5
- package/corpus/core/src/server/action-change.ts +33 -0
- package/corpus/core/src/server/action-routes.ts +11 -9
- package/corpus/core/src/server/agent-teams.ts +10 -2
- package/corpus/core/src/server/better-auth-instance.ts +39 -12
- package/corpus/core/src/server/core-routes-plugin.ts +19 -2
- package/corpus/core/src/server/credential-provider.ts +57 -14
- package/corpus/core/src/server/http-response-telemetry.ts +1 -0
- package/corpus/core/src/server/poll.ts +95 -57
- package/corpus/core/src/server/voice-providers-status.ts +19 -4
- package/corpus/core/src/workspace-files/tool.ts +18 -11
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +38 -0
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +1 -1
- package/corpus/templates/analytics/actions/ensure-native-v2-dashboards.ts +299 -0
- package/corpus/templates/analytics/actions/list-native-v2-dashboard-templates.ts +34 -0
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +82 -0
- package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +2 -2
- package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +40 -34
- package/corpus/templates/analytics/app/hooks/use-user-pref.ts +3 -3
- package/corpus/templates/analytics/app/i18n-data.ts +40 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +18 -10
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +14 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +1 -0
- package/corpus/templates/analytics/app/routes/chart.tsx +3 -0
- package/corpus/templates/analytics/changelog/2026-07-30-analytics-dashboards-now-expose-native-funnel-heatmap-callou.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-30-analytics-now-ships-reusable-native-v2-dashboard-manifests-w.md +6 -0
- package/corpus/templates/analytics/server/lib/dashboard-report-render.ts +81 -1
- package/corpus/templates/analytics/server/lib/native-v2-dashboards.ts +457 -0
- package/corpus/templates/analytics/server/lib/report-chart-svg.ts +73 -2
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/analytics/shared/dashboard-funnel.ts +83 -0
- package/corpus/templates/clips/actions/generate-workflow.ts +6 -4
- package/corpus/templates/clips/actions/reconcile-workflow-generation.ts +257 -0
- package/corpus/templates/clips/app/hooks/use-auto-title.ts +166 -4
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +1 -1
- package/corpus/templates/clips/changelog/2026-07-27-stopped-agent-runs-no-longer-leave-generated-workflow-cards-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-30-workflow-generation-now-stops-retrying-after-repeated-failur.md +6 -0
- package/corpus/templates/clips/shared/workflow.ts +5 -0
- package/corpus/templates/content/changelog/2026-07-30-long-running-delegated-requests-now-continue-reliably.md +6 -0
- package/corpus/templates/content/netlify.toml +3 -0
- package/corpus/templates/content/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +2 -1
- package/corpus/templates/slides/actions/patch-deck.ts +25 -1
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +17 -4
- package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +9 -1
- package/corpus/templates/slides/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/slides/app/context/DeckContext.tsx +11 -3
- package/corpus/templates/slides/app/lib/sanitize-slide-html.ts +39 -11
- package/corpus/templates/slides/app/pages/Index.tsx +2 -2
- package/corpus/templates/slides/changelog/2026-07-30-slide-previews-keep-their-aspect-ratio-isolate-embedded-styl.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-30-slides-no-longer-lose-decks-while-organization-access-is-loa.md +6 -0
- package/corpus/toolkit/CHANGELOG.md +8 -0
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/composer/runtime-adapters.tsx +16 -11
- package/dist/a2a/activity.d.ts +22 -4
- package/dist/a2a/activity.d.ts.map +1 -1
- package/dist/a2a/activity.js +97 -11
- package/dist/a2a/activity.js.map +1 -1
- package/dist/a2a/index.d.ts +1 -1
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +1 -1
- package/dist/a2a/index.js.map +1 -1
- package/dist/agent/durable-background.d.ts +13 -8
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +36 -28
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/harness/background.d.ts.map +1 -1
- package/dist/agent/harness/background.js +12 -2
- package/dist/agent/harness/background.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +18 -15
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-store.d.ts +2 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +44 -3
- package/dist/agent/run-store.js.map +1 -1
- package/dist/application-state/handlers.d.ts +15 -0
- package/dist/application-state/handlers.d.ts.map +1 -1
- package/dist/application-state/handlers.js +42 -2
- package/dist/application-state/handlers.js.map +1 -1
- package/dist/application-state/index.d.ts +2 -2
- package/dist/application-state/index.d.ts.map +1 -1
- package/dist/application-state/index.js +2 -2
- package/dist/application-state/index.js.map +1 -1
- package/dist/application-state/store.d.ts +11 -0
- package/dist/application-state/store.d.ts.map +1 -1
- package/dist/application-state/store.js +37 -40
- package/dist/application-state/store.js.map +1 -1
- package/dist/audit/redact.d.ts +25 -2
- package/dist/audit/redact.d.ts.map +1 -1
- package/dist/audit/redact.js +85 -21
- package/dist/audit/redact.js.map +1 -1
- package/dist/cli/create.d.ts +8 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +98 -16
- package/dist/cli/create.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +2 -7
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +10 -2
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +1 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/RunStuckBanner.d.ts +11 -1
- package/dist/client/RunStuckBanner.d.ts.map +1 -1
- package/dist/client/RunStuckBanner.js +20 -7
- package/dist/client/RunStuckBanner.js.map +1 -1
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +4 -6
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/application-state.d.ts +11 -0
- package/dist/client/application-state.d.ts.map +1 -1
- package/dist/client/application-state.js +87 -9
- package/dist/client/application-state.js.map +1 -1
- package/dist/client/dynamic-suggestions.d.ts.map +1 -1
- package/dist/client/dynamic-suggestions.js +4 -13
- package/dist/client/dynamic-suggestions.js.map +1 -1
- package/dist/client/frame-protocol.d.ts +1 -0
- package/dist/client/frame-protocol.d.ts.map +1 -1
- package/dist/client/frame-protocol.js.map +1 -1
- package/dist/client/guided-questions.d.ts.map +1 -1
- package/dist/client/guided-questions.js +6 -22
- package/dist/client/guided-questions.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/db/client.d.ts +57 -10
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +122 -31
- package/dist/db/client.js.map +1 -1
- package/dist/db/create-get-db.d.ts.map +1 -1
- package/dist/db/create-get-db.js +31 -7
- package/dist/db/create-get-db.js.map +1 -1
- package/dist/db/runtime-diagnostics.d.ts +1 -0
- package/dist/db/runtime-diagnostics.d.ts.map +1 -1
- package/dist/db/runtime-diagnostics.js +31 -6
- package/dist/db/runtime-diagnostics.js.map +1 -1
- package/dist/deploy/build.d.ts +5 -20
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +18 -30
- package/dist/deploy/build.js.map +1 -1
- package/dist/feature-flags/store.d.ts.map +1 -1
- package/dist/feature-flags/store.js +10 -5
- package/dist/feature-flags/store.js.map +1 -1
- package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
- package/dist/integrations/a2a-continuations-store.js +12 -0
- package/dist/integrations/a2a-continuations-store.js.map +1 -1
- package/dist/integrations/config-store.d.ts +1 -0
- package/dist/integrations/config-store.d.ts.map +1 -1
- package/dist/integrations/config-store.js +11 -0
- package/dist/integrations/config-store.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +19 -2
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/mcp/screen-memory-stdio.d.ts +7 -7
- package/dist/mcp/screen-memory-stdio.d.ts.map +1 -1
- package/dist/mcp-client/routes.d.ts.map +1 -1
- package/dist/mcp-client/routes.js +30 -2
- package/dist/mcp-client/routes.js.map +1 -1
- package/dist/notifications/routes.d.ts +6 -6
- package/dist/onboarding/plugin.d.ts.map +1 -1
- package/dist/onboarding/plugin.js +12 -8
- package/dist/onboarding/plugin.js.map +1 -1
- package/dist/org/accept-pending.d.ts.map +1 -1
- package/dist/org/accept-pending.js +2 -0
- package/dist/org/accept-pending.js.map +1 -1
- package/dist/org/auto-join-domain.d.ts.map +1 -1
- package/dist/org/auto-join-domain.js +2 -0
- package/dist/org/auto-join-domain.js.map +1 -1
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +29 -9
- package/dist/org/context.js.map +1 -1
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +5 -0
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/request-org-cache.d.ts +16 -0
- package/dist/org/request-org-cache.d.ts.map +1 -0
- package/dist/org/request-org-cache.js +62 -0
- package/dist/org/request-org-cache.js.map +1 -0
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +11 -9
- package/dist/resources/store.js.map +1 -1
- package/dist/scripts/runner.d.ts.map +1 -1
- package/dist/scripts/runner.js +3 -3
- package/dist/scripts/runner.js.map +1 -1
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +82 -5
- package/dist/secrets/storage.js.map +1 -1
- package/dist/server/action-change.d.ts +20 -0
- package/dist/server/action-change.d.ts.map +1 -1
- package/dist/server/action-change.js +29 -0
- package/dist/server/action-change.js.map +1 -1
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +7 -8
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +10 -2
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +31 -14
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +1 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +18 -4
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +16 -0
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +49 -13
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/http-response-telemetry.d.ts.map +1 -1
- package/dist/server/http-response-telemetry.js +1 -0
- package/dist/server/http-response-telemetry.js.map +1 -1
- package/dist/server/poll.d.ts +6 -0
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +84 -47
- package/dist/server/poll.js.map +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/voice-providers-status.d.ts.map +1 -1
- package/dist/server/voice-providers-status.js +12 -3
- package/dist/server/voice-providers-status.js.map +1 -1
- package/dist/workspace-files/tool.d.ts.map +1 -1
- package/dist/workspace-files/tool.js +18 -11
- package/dist/workspace-files/tool.js.map +1 -1
- package/docs/content/durable-background-runs.mdx +15 -6
- package/docs/design/durable-agent-runs.md +15 -11
- package/package.json +3 -3
- package/src/a2a/activity.ts +127 -10
- package/src/a2a/index.ts +3 -0
- package/src/agent/durable-background.ts +38 -28
- package/src/agent/harness/background.ts +12 -2
- package/src/agent/production-agent.ts +18 -15
- package/src/agent/run-store.ts +45 -3
- package/src/application-state/handlers.ts +45 -0
- package/src/application-state/index.ts +3 -0
- package/src/application-state/store.ts +38 -34
- package/src/audit/redact.ts +104 -18
- package/src/cli/create.ts +115 -16
- package/src/client/AgentPanel.tsx +2 -7
- package/src/client/AssistantChat.tsx +10 -2
- package/src/client/MultiTabAssistantChat.tsx +3 -0
- package/src/client/RunStuckBanner.tsx +29 -6
- package/src/client/agent-chat.ts +4 -9
- package/src/client/application-state.ts +115 -12
- package/src/client/dynamic-suggestions.ts +4 -12
- package/src/client/frame-protocol.ts +5 -1
- package/src/client/guided-questions.tsx +12 -23
- package/src/db/client.ts +148 -28
- package/src/db/create-get-db.ts +39 -6
- package/src/db/runtime-diagnostics.ts +41 -6
- package/src/deploy/build.ts +26 -33
- package/src/feature-flags/store.ts +10 -5
- package/src/integrations/a2a-continuations-store.ts +11 -0
- package/src/integrations/config-store.ts +13 -0
- package/src/integrations/google-docs-poller.ts +26 -2
- package/src/mcp-client/routes.ts +33 -2
- package/src/onboarding/plugin.ts +31 -25
- package/src/org/accept-pending.ts +2 -0
- package/src/org/auto-join-domain.ts +2 -0
- package/src/org/context.ts +35 -10
- package/src/org/handlers.ts +6 -0
- package/src/org/request-org-cache.ts +71 -0
- package/src/resources/store.ts +10 -9
- package/src/scripts/runner.ts +6 -3
- package/src/secrets/storage.ts +97 -5
- package/src/server/action-change.ts +33 -0
- package/src/server/action-routes.ts +11 -9
- package/src/server/agent-teams.ts +10 -2
- package/src/server/better-auth-instance.ts +39 -12
- package/src/server/core-routes-plugin.ts +19 -2
- package/src/server/credential-provider.ts +57 -14
- package/src/server/http-response-telemetry.ts +1 -0
- package/src/server/poll.ts +95 -57
- package/src/server/voice-providers-status.ts +19 -4
- package/src/workspace-files/tool.ts +18 -11
|
@@ -62,11 +62,11 @@ export declare const postAwareness: import("h3").EventHandlerWithFetch<import("h
|
|
|
62
62
|
error: string;
|
|
63
63
|
states?: undefined;
|
|
64
64
|
} | {
|
|
65
|
+
error?: undefined;
|
|
65
66
|
states: {
|
|
66
67
|
clientId: number;
|
|
67
68
|
state: string;
|
|
68
69
|
}[];
|
|
69
|
-
error?: undefined;
|
|
70
70
|
}>>;
|
|
71
71
|
/**
|
|
72
72
|
* GET /_agent-native/collab/:docId/users
|
|
@@ -77,10 +77,10 @@ export declare const getActiveUsers: import("h3").EventHandlerWithFetch<import("
|
|
|
77
77
|
error: string;
|
|
78
78
|
users?: undefined;
|
|
79
79
|
} | {
|
|
80
|
+
error?: undefined;
|
|
80
81
|
users: {
|
|
81
82
|
clientId: number;
|
|
82
83
|
lastSeen: number;
|
|
83
84
|
}[];
|
|
84
|
-
error?: undefined;
|
|
85
85
|
}>>;
|
|
86
86
|
//# sourceMappingURL=awareness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awareness.d.ts","sourceRoot":"","sources":["../../src/collab/awareness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD,eAAO,MAAM,sBAAsB,EAAG,kBAA2B,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,wBAAgB,mBAAmB,IAAI,YAAY,CAElD;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,GAAG,SAAS,GAChC,IAAI,CAON;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,KAAK,CAAC,EAAE,cAAc,GACrB,IAAI,CAgBN;AAoBD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAmB,GAC7B,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE1E;AAiBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAO1E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI,CAOnE;AAkCD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"awareness.d.ts","sourceRoot":"","sources":["../../src/collab/awareness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD,eAAO,MAAM,sBAAsB,EAAG,kBAA2B,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,wBAAgB,mBAAmB,IAAI,YAAY,CAElD;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,GAAG,SAAS,GAChC,IAAI,CAON;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,KAAK,CAAC,EAAE,cAAc,GACrB,IAAI,CAgBN;AAoBD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAmB,GAC7B,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE1E;AAiBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAO1E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI,CAOnE;AAkCD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;;kBAwDa,MAAM;eAAS,MAAM;;GAoB1D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;kBAYM,MAAM;kBAAY,MAAM;;GAMvD,CAAC"}
|
package/dist/collab/routes.d.ts
CHANGED
|
@@ -26,8 +26,8 @@ export declare const getCollabState: import("h3").EventHandlerWithFetch<import("
|
|
|
26
26
|
* Body: { update: string (base64), requestSource?: string }
|
|
27
27
|
*/
|
|
28
28
|
export declare const postCollabUpdate: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
29
|
-
error: string;
|
|
30
29
|
ok?: undefined;
|
|
30
|
+
error: string;
|
|
31
31
|
} | {
|
|
32
32
|
error?: undefined;
|
|
33
33
|
ok: boolean;
|
package/dist/db/client.d.ts
CHANGED
|
@@ -174,20 +174,28 @@ export declare function withDbTimeout<T>(op: string, run: () => Promise<T>, ms?:
|
|
|
174
174
|
*/
|
|
175
175
|
export declare function isServerlessRuntime(): boolean;
|
|
176
176
|
/**
|
|
177
|
-
* postgres.js pool options tuned per runtime.
|
|
178
|
-
* one request at a time, so a single connection is enough. Keeping the
|
|
179
|
-
* foreground pool at 1 is important because each instance can also open an
|
|
180
|
-
* app and Better Auth pool; a max of 2 on each pool still exhausted Neon
|
|
181
|
-
* under a burst of warm instances. idle_timeout is shortened on
|
|
177
|
+
* postgres.js pool options tuned per runtime. idle_timeout is shortened on
|
|
182
178
|
* serverless so a thawed-but-idle instance releases its connections quickly.
|
|
183
|
-
* Long-lived Node servers keep the
|
|
179
|
+
* Long-lived Node servers keep the larger pool for throughput.
|
|
180
|
+
*
|
|
181
|
+
* The cap assumes {@link sharedDbPool}: one pool per URL for the whole
|
|
182
|
+
* process, not one per consumer. See {@link neonPoolMax} for why the cap must
|
|
183
|
+
* leave room for concurrency.
|
|
184
184
|
*/
|
|
185
185
|
export declare function pgPoolOptions(url: string): Record<string, unknown>;
|
|
186
186
|
/**
|
|
187
|
-
* Connection cap for the @neondatabase/serverless `Pool`.
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
187
|
+
* Connection cap for the @neondatabase/serverless `Pool`.
|
|
188
|
+
*
|
|
189
|
+
* TRAP: this number is the ceiling on how many statements one request can have
|
|
190
|
+
* in flight at once. It used to be 1 on serverless, which made every
|
|
191
|
+
* `Promise.all([...reads])` in a request serialize behind the single slot —
|
|
192
|
+
* against a remote endpoint that is ~83ms of pure wait per query, so ten
|
|
193
|
+
* "concurrent" reads took ~880ms instead of ~86ms. The cap was 1 only because
|
|
194
|
+
* every consumer built its OWN pool (the DbExec singleton, Better Auth, and one
|
|
195
|
+
* per `createGetDb()` schema module), so the real per-instance connection count
|
|
196
|
+
* was that number multiplied by ~6. {@link sharedDbPool} collapses those into
|
|
197
|
+
* one pool per URL, so the same aggregate budget buys in-request concurrency.
|
|
198
|
+
* Keep pools shared if you raise this.
|
|
191
199
|
*/
|
|
192
200
|
export declare function neonPoolMax(): number;
|
|
193
201
|
/**
|
|
@@ -205,6 +213,44 @@ export declare function isBackgroundFunctionPoolContext(): boolean;
|
|
|
205
213
|
*/
|
|
206
214
|
export declare function describeDbError(err: unknown): string;
|
|
207
215
|
export declare function attachNeonPoolErrorLogger(pool: unknown, label?: string): void;
|
|
216
|
+
interface ClosablePool {
|
|
217
|
+
end(): Promise<unknown>;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* One connection pool per (driver, URL) for the whole process.
|
|
221
|
+
*
|
|
222
|
+
* Opening a connection to a remote database costs a full TCP + TLS + auth
|
|
223
|
+
* round-trip chain (~300-800ms measured against Neon in-region), and it used
|
|
224
|
+
* to be paid once per CONSUMER: the `getDbExec` singleton, Better Auth, and one
|
|
225
|
+
* more for every `createGetDb()` schema module (four in core alone, plus each
|
|
226
|
+
* app's). Their `max` values also multiplied against the provider's connection
|
|
227
|
+
* cap, which forced each pool down to a size too small to run a request's reads
|
|
228
|
+
* concurrently.
|
|
229
|
+
*
|
|
230
|
+
* TRAP: only consumers that live as long as the process may share. Anything
|
|
231
|
+
* handed a `close()` — `createDbExec()`, the migration exec on the direct
|
|
232
|
+
* endpoint — must keep a private pool, or closing it takes the whole process's
|
|
233
|
+
* database access down with it.
|
|
234
|
+
*/
|
|
235
|
+
export declare function sharedDbPool<T extends ClosablePool>(driver: string, url: string, create: () => T): T;
|
|
236
|
+
/**
|
|
237
|
+
* Swap the pool registered for a key, for the postgres.js recycle path that
|
|
238
|
+
* replaces a pool whose query timed out. Without this the registry would keep
|
|
239
|
+
* handing out the discarded pool.
|
|
240
|
+
*/
|
|
241
|
+
export declare function replaceSharedDbPool<T extends ClosablePool>(driver: string, url: string, previous: T, next: T): void;
|
|
242
|
+
/**
|
|
243
|
+
* Run `hook` when one shared pool is replaced, so derived consumers rebuild
|
|
244
|
+
* their handles instead of continuing to use the timed-out pool.
|
|
245
|
+
*/
|
|
246
|
+
export declare function onSharedDbPoolReplaced(driver: string, url: string, hook: () => void): void;
|
|
247
|
+
/**
|
|
248
|
+
* Run `hook` when the shared pools are closed, so consumers holding a derived
|
|
249
|
+
* handle (a Drizzle instance bound to the pool, the Better Auth adapter) drop
|
|
250
|
+
* it instead of issuing queries on a closed pool.
|
|
251
|
+
*/
|
|
252
|
+
export declare function onSharedDbPoolsClosed(hook: () => void): void;
|
|
253
|
+
export declare function closeSharedDbPools(): Promise<void>;
|
|
208
254
|
export declare function createDbExec(config?: DbExecConfig): Promise<DbExec>;
|
|
209
255
|
/**
|
|
210
256
|
* Get the singleton database client. Returns a `DbExec` whose first
|
|
@@ -225,4 +271,5 @@ export declare function annotateMissingTable(err: unknown, sql: unknown): unknow
|
|
|
225
271
|
export declare function getDbExec(): DbExec;
|
|
226
272
|
/** Close the database connection (for scripts that need cleanup). */
|
|
227
273
|
export declare function closeDbExec(): Promise<void>;
|
|
274
|
+
export {};
|
|
228
275
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/db/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"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"}
|
package/dist/db/client.js
CHANGED
|
@@ -766,19 +766,19 @@ export function isServerlessRuntime() {
|
|
|
766
766
|
!!process.env.CF_PAGES);
|
|
767
767
|
}
|
|
768
768
|
/**
|
|
769
|
-
* postgres.js pool options tuned per runtime.
|
|
770
|
-
* one request at a time, so a single connection is enough. Keeping the
|
|
771
|
-
* foreground pool at 1 is important because each instance can also open an
|
|
772
|
-
* app and Better Auth pool; a max of 2 on each pool still exhausted Neon
|
|
773
|
-
* under a burst of warm instances. idle_timeout is shortened on
|
|
769
|
+
* postgres.js pool options tuned per runtime. idle_timeout is shortened on
|
|
774
770
|
* serverless so a thawed-but-idle instance releases its connections quickly.
|
|
775
|
-
* Long-lived Node servers keep the
|
|
771
|
+
* Long-lived Node servers keep the larger pool for throughput.
|
|
772
|
+
*
|
|
773
|
+
* The cap assumes {@link sharedDbPool}: one pool per URL for the whole
|
|
774
|
+
* process, not one per consumer. See {@link neonPoolMax} for why the cap must
|
|
775
|
+
* leave room for concurrency.
|
|
776
776
|
*/
|
|
777
777
|
export function pgPoolOptions(url) {
|
|
778
778
|
const serverless = isServerlessRuntime();
|
|
779
779
|
return {
|
|
780
780
|
onnotice: () => { },
|
|
781
|
-
max: serverless ?
|
|
781
|
+
max: serverless ? 4 : 20,
|
|
782
782
|
idle_timeout: serverless ? 20 : 240,
|
|
783
783
|
max_lifetime: 60 * 30,
|
|
784
784
|
connect_timeout: 10,
|
|
@@ -788,14 +788,22 @@ export function pgPoolOptions(url) {
|
|
|
788
788
|
};
|
|
789
789
|
}
|
|
790
790
|
/**
|
|
791
|
-
* Connection cap for the @neondatabase/serverless `Pool`.
|
|
792
|
-
*
|
|
793
|
-
*
|
|
794
|
-
*
|
|
791
|
+
* Connection cap for the @neondatabase/serverless `Pool`.
|
|
792
|
+
*
|
|
793
|
+
* TRAP: this number is the ceiling on how many statements one request can have
|
|
794
|
+
* in flight at once. It used to be 1 on serverless, which made every
|
|
795
|
+
* `Promise.all([...reads])` in a request serialize behind the single slot —
|
|
796
|
+
* against a remote endpoint that is ~83ms of pure wait per query, so ten
|
|
797
|
+
* "concurrent" reads took ~880ms instead of ~86ms. The cap was 1 only because
|
|
798
|
+
* every consumer built its OWN pool (the DbExec singleton, Better Auth, and one
|
|
799
|
+
* per `createGetDb()` schema module), so the real per-instance connection count
|
|
800
|
+
* was that number multiplied by ~6. {@link sharedDbPool} collapses those into
|
|
801
|
+
* one pool per URL, so the same aggregate budget buys in-request concurrency.
|
|
802
|
+
* Keep pools shared if you raise this.
|
|
795
803
|
*/
|
|
796
804
|
export function neonPoolMax() {
|
|
797
805
|
if (!isServerlessRuntime())
|
|
798
|
-
return
|
|
806
|
+
return 20;
|
|
799
807
|
// The durable background-function worker is a SINGLE process per run (unlike
|
|
800
808
|
// the many warm request-instances the foreground serverless has), so it can
|
|
801
809
|
// safely hold a larger pool without risking Neon's connection cap. The agent's
|
|
@@ -809,7 +817,7 @@ export function neonPoolMax() {
|
|
|
809
817
|
// connections reached" across many warm instances.
|
|
810
818
|
if (isBackgroundFunctionPoolContext())
|
|
811
819
|
return 8;
|
|
812
|
-
return
|
|
820
|
+
return 4;
|
|
813
821
|
}
|
|
814
822
|
/**
|
|
815
823
|
* Inline mirror of `isInBackgroundFunctionRuntime()`
|
|
@@ -903,6 +911,86 @@ export function attachNeonPoolErrorLogger(pool, label = "db/neon") {
|
|
|
903
911
|
});
|
|
904
912
|
});
|
|
905
913
|
}
|
|
914
|
+
const _sharedDbPools = new Map();
|
|
915
|
+
const _sharedDbPoolCloseHooks = new Set();
|
|
916
|
+
const _sharedDbPoolReplacementHooks = new Map();
|
|
917
|
+
/**
|
|
918
|
+
* One connection pool per (driver, URL) for the whole process.
|
|
919
|
+
*
|
|
920
|
+
* Opening a connection to a remote database costs a full TCP + TLS + auth
|
|
921
|
+
* round-trip chain (~300-800ms measured against Neon in-region), and it used
|
|
922
|
+
* to be paid once per CONSUMER: the `getDbExec` singleton, Better Auth, and one
|
|
923
|
+
* more for every `createGetDb()` schema module (four in core alone, plus each
|
|
924
|
+
* app's). Their `max` values also multiplied against the provider's connection
|
|
925
|
+
* cap, which forced each pool down to a size too small to run a request's reads
|
|
926
|
+
* concurrently.
|
|
927
|
+
*
|
|
928
|
+
* TRAP: only consumers that live as long as the process may share. Anything
|
|
929
|
+
* handed a `close()` — `createDbExec()`, the migration exec on the direct
|
|
930
|
+
* endpoint — must keep a private pool, or closing it takes the whole process's
|
|
931
|
+
* database access down with it.
|
|
932
|
+
*/
|
|
933
|
+
export function sharedDbPool(driver, url, create) {
|
|
934
|
+
const key = `${driver}${url}`;
|
|
935
|
+
const existing = _sharedDbPools.get(key);
|
|
936
|
+
if (existing)
|
|
937
|
+
return existing;
|
|
938
|
+
const created = create();
|
|
939
|
+
_sharedDbPools.set(key, created);
|
|
940
|
+
return created;
|
|
941
|
+
}
|
|
942
|
+
/**
|
|
943
|
+
* Swap the pool registered for a key, for the postgres.js recycle path that
|
|
944
|
+
* replaces a pool whose query timed out. Without this the registry would keep
|
|
945
|
+
* handing out the discarded pool.
|
|
946
|
+
*/
|
|
947
|
+
export function replaceSharedDbPool(driver, url, previous, next) {
|
|
948
|
+
const key = `${driver}${url}`;
|
|
949
|
+
if (_sharedDbPools.get(key) !== previous)
|
|
950
|
+
return;
|
|
951
|
+
_sharedDbPools.set(key, next);
|
|
952
|
+
for (const hook of _sharedDbPoolReplacementHooks.get(key) ?? []) {
|
|
953
|
+
try {
|
|
954
|
+
hook();
|
|
955
|
+
}
|
|
956
|
+
catch {
|
|
957
|
+
// A consumer's reset must not block the replacement from being used.
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
/**
|
|
962
|
+
* Run `hook` when one shared pool is replaced, so derived consumers rebuild
|
|
963
|
+
* their handles instead of continuing to use the timed-out pool.
|
|
964
|
+
*/
|
|
965
|
+
export function onSharedDbPoolReplaced(driver, url, hook) {
|
|
966
|
+
const key = `${driver}${String.fromCharCode(0)}${url}`;
|
|
967
|
+
const hooks = _sharedDbPoolReplacementHooks.get(key) ?? new Set();
|
|
968
|
+
hooks.add(hook);
|
|
969
|
+
_sharedDbPoolReplacementHooks.set(key, hooks);
|
|
970
|
+
}
|
|
971
|
+
/**
|
|
972
|
+
* Run `hook` when the shared pools are closed, so consumers holding a derived
|
|
973
|
+
* handle (a Drizzle instance bound to the pool, the Better Auth adapter) drop
|
|
974
|
+
* it instead of issuing queries on a closed pool.
|
|
975
|
+
*/
|
|
976
|
+
export function onSharedDbPoolsClosed(hook) {
|
|
977
|
+
_sharedDbPoolCloseHooks.add(hook);
|
|
978
|
+
}
|
|
979
|
+
export async function closeSharedDbPools() {
|
|
980
|
+
const pools = [..._sharedDbPools.values()];
|
|
981
|
+
_sharedDbPools.clear();
|
|
982
|
+
for (const hook of _sharedDbPoolCloseHooks) {
|
|
983
|
+
try {
|
|
984
|
+
hook();
|
|
985
|
+
}
|
|
986
|
+
catch {
|
|
987
|
+
// A consumer's reset must not block the rest from being released.
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
await Promise.all(pools.map((pool) => Promise.resolve(pool.end()).catch(() => {
|
|
991
|
+
// Already closed (process exiting, provider hung up) — nothing to do.
|
|
992
|
+
})));
|
|
993
|
+
}
|
|
906
994
|
function disposePostgresPoolEventually(pool, label) {
|
|
907
995
|
if (!pool || typeof pool !== "object")
|
|
908
996
|
return;
|
|
@@ -917,8 +1005,6 @@ function disposePostgresPoolEventually(pool, label) {
|
|
|
917
1005
|
// Singleton client — lazy-initialized on first execute() call
|
|
918
1006
|
// ---------------------------------------------------------------------------
|
|
919
1007
|
let _exec;
|
|
920
|
-
let _pgPool;
|
|
921
|
-
let _neonPool;
|
|
922
1008
|
let _sqlite;
|
|
923
1009
|
let _initPromise;
|
|
924
1010
|
async function executePglite(client, sql) {
|
|
@@ -999,10 +1085,13 @@ async function createDbExecInternal(config = {}, trackSingletonResources = false
|
|
|
999
1085
|
// connections, so its direct executions use stateless Neon HTTP instead.
|
|
1000
1086
|
// The foreground and transaction surface keep the WebSocket pool.
|
|
1001
1087
|
const bgHttp = isBackgroundFunctionPoolContext();
|
|
1002
|
-
const
|
|
1088
|
+
const makePool = () => new Pool({ connectionString: url, max: neonPoolMax() });
|
|
1089
|
+
// The singleton exec shares the process pool; `createDbExec()` callers own
|
|
1090
|
+
// a `close()` and so must not be handed it.
|
|
1091
|
+
const pool = trackSingletonResources
|
|
1092
|
+
? sharedDbPool("neon", url, makePool)
|
|
1093
|
+
: makePool();
|
|
1003
1094
|
attachNeonPoolErrorLogger(pool);
|
|
1004
|
-
if (trackSingletonResources)
|
|
1005
|
-
_neonPool = pool;
|
|
1006
1095
|
const httpSql = bgHttp ? neon(url, { fullResults: true }) : null;
|
|
1007
1096
|
async function queryNeonClient(client, sql, timeoutOverrideMs) {
|
|
1008
1097
|
const { rawSql, args } = sqlAndArgs(sql);
|
|
@@ -1168,6 +1257,8 @@ async function createDbExecInternal(config = {}, trackSingletonResources = false
|
|
|
1168
1257
|
}, 1);
|
|
1169
1258
|
},
|
|
1170
1259
|
async close() {
|
|
1260
|
+
if (trackSingletonResources)
|
|
1261
|
+
return closeSharedDbPools();
|
|
1171
1262
|
await pool.end();
|
|
1172
1263
|
},
|
|
1173
1264
|
};
|
|
@@ -1247,14 +1338,17 @@ async function createDbExecInternal(config = {}, trackSingletonResources = false
|
|
|
1247
1338
|
// idle_timeout also closes idle connections before Neon's ~5min
|
|
1248
1339
|
// server-side timeout, avoiding ECONNRESET when the server hangs up.
|
|
1249
1340
|
const createPool = () => postgres(url, pgPoolOptions(url));
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1341
|
+
// Same rule as the Neon path: the singleton exec shares the process pool,
|
|
1342
|
+
// `createDbExec()` callers own a `close()` and get a private one.
|
|
1343
|
+
let pool = trackSingletonResources
|
|
1344
|
+
? sharedDbPool("postgres-js", url, createPool)
|
|
1345
|
+
: createPool();
|
|
1253
1346
|
const recyclePool = (timedOutPool) => {
|
|
1254
1347
|
if (pool === timedOutPool) {
|
|
1255
1348
|
pool = createPool();
|
|
1256
|
-
if (trackSingletonResources)
|
|
1257
|
-
|
|
1349
|
+
if (trackSingletonResources) {
|
|
1350
|
+
replaceSharedDbPool("postgres-js", url, timedOutPool, pool);
|
|
1351
|
+
}
|
|
1258
1352
|
}
|
|
1259
1353
|
disposePostgresPoolEventually(timedOutPool, "timed-out pooled query");
|
|
1260
1354
|
};
|
|
@@ -1292,6 +1386,8 @@ async function createDbExecInternal(config = {}, trackSingletonResources = false
|
|
|
1292
1386
|
return result;
|
|
1293
1387
|
},
|
|
1294
1388
|
async close() {
|
|
1389
|
+
if (trackSingletonResources)
|
|
1390
|
+
return closeSharedDbPools();
|
|
1295
1391
|
await pool.end();
|
|
1296
1392
|
},
|
|
1297
1393
|
};
|
|
@@ -1527,14 +1623,9 @@ export function getDbExec() {
|
|
|
1527
1623
|
}
|
|
1528
1624
|
/** Close the database connection (for scripts that need cleanup). */
|
|
1529
1625
|
export async function closeDbExec() {
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
}
|
|
1534
|
-
if (_neonPool) {
|
|
1535
|
-
await _neonPool.end();
|
|
1536
|
-
_neonPool = undefined;
|
|
1537
|
-
}
|
|
1626
|
+
// Both Postgres pools live in the shared registry, which also notifies the
|
|
1627
|
+
// Drizzle / Better Auth consumers bound to them.
|
|
1628
|
+
await closeSharedDbPools();
|
|
1538
1629
|
if (_sqlite) {
|
|
1539
1630
|
_sqlite.close();
|
|
1540
1631
|
_sqlite = undefined;
|