@opengeni/api-router 3.0.1 → 3.1.2
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/access-grant-rls.d.ts +8 -1
- package/dist/admission-trace.d.ts +8 -0
- package/dist/app.d.ts +50 -3
- package/dist/app.js +10 -1
- package/dist/artifact-catalog-cursor.d.ts +1 -0
- package/dist/attached-browser-viewer.d.ts +11 -0
- package/dist/auth/managed-auth-attempt-context.d.ts +2 -0
- package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
- package/dist/auth/managed-auth-session-adapter.d.ts +9 -1
- package/dist/auth/managed-auth.d.ts +72 -5
- package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
- package/dist/auth/new-signups-gate.d.ts +23 -0
- package/dist/auth/signup-funnel-metrics.d.ts +44 -0
- package/dist/azure-live.d.ts +28 -0
- package/dist/browser-action-fences.d.ts +13 -0
- package/dist/browser-controller-authority.d.ts +1 -61
- package/dist/browser-ephemeral.d.ts +5 -0
- package/dist/browser-lost-runtime-end.d.ts +24 -0
- package/dist/browser-state-authority.d.ts +1 -27
- package/dist/chunk-OGQDXVXY.js +18 -0
- package/dist/chunk-OGQDXVXY.js.map +1 -0
- package/dist/{chunk-AJ62T5QN.js → chunk-OT56OY4V.js} +80503 -39869
- package/dist/chunk-OT56OY4V.js.map +1 -0
- package/dist/claude-default-models.d.ts +19 -0
- package/dist/claude-subscription-core.d.ts +50 -0
- package/dist/claude-subscription-oauth.d.ts +36 -0
- package/dist/claude-subscription-profile.d.ts +9 -0
- package/dist/claude-subscription-usage.d.ts +6 -0
- package/dist/claude-workspace-connection.d.ts +15 -0
- package/dist/codemode.d.ts +40 -5
- package/dist/codex-realtime.d.ts +29 -3
- package/dist/codex-session-pointers.d.ts +19 -0
- package/dist/connection-ownership.d.ts +6 -3
- package/dist/controller-data-plane.d.ts +16 -0
- package/dist/credit-promotion-snapshot.d.ts +6 -0
- package/dist/editable-artifact-source-session.d.ts +3 -0
- package/dist/editable-artifact-websocket.d.ts +5 -3
- package/dist/fatal-process-boundary.d.ts +9 -1
- package/dist/github-access.d.ts +7 -1
- package/dist/github-browser-flow.d.ts +1 -1
- package/dist/http/acting-person.d.ts +36 -0
- package/dist/http/api-contract-compat.d.ts +19 -0
- package/dist/http/api-error.d.ts +50 -1
- package/dist/http/auth.d.ts +8 -1
- package/dist/http/cors.d.ts +12 -0
- package/dist/http/deprecation.d.ts +42 -0
- package/dist/http/keyed-admission.d.ts +12 -0
- package/dist/http/local-browser-boundary.d.ts +72 -0
- package/dist/http/metrics-listener.d.ts +22 -0
- package/dist/http/path-identifier.d.ts +17 -0
- package/dist/http/registered-route-label.d.ts +16 -0
- package/dist/http/rejection-telemetry.d.ts +34 -0
- package/dist/http/request-body.d.ts +27 -0
- package/dist/http/request-source.d.ts +41 -3
- package/dist/http/sse.d.ts +12 -1
- package/dist/http/unmatched-route.d.ts +18 -0
- package/dist/http/user-content.d.ts +36 -0
- package/dist/http/variable-sets-removed.d.ts +41 -0
- package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
- package/dist/index.js +1279 -108
- package/dist/index.js.map +1 -1
- package/dist/integration-connect-metrics.d.ts +35 -0
- package/dist/integration-endpoint-test.d.ts +20 -0
- package/dist/integrations/api-integrations.d.ts +2 -2
- package/dist/integrations/atlassian.d.ts +8 -3
- package/dist/integrations/fiken.d.ts +3 -1
- package/dist/integrations/github-lens-connect.d.ts +37 -66
- package/dist/integrations/google-drive.d.ts +2 -0
- package/dist/integrations/integration-commit-authority.d.ts +13 -0
- package/dist/integrations/marketplace-plugin.d.ts +43 -43
- package/dist/integrations/oauth-client.d.ts +171 -12
- package/dist/integrations/oauth-profiles.d.ts +42 -13
- package/dist/integrations/onepassword-vault-provider.d.ts +9 -0
- package/dist/integrations/slack-bot.d.ts +285 -7
- package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
- package/dist/integrations/slack-interactions.d.ts +89 -10
- package/dist/integrations/slack-mrkdwn.d.ts +41 -0
- package/dist/integrations/slack-routing.d.ts +1 -1
- package/dist/integrations/slack-session-defaults.d.ts +58 -0
- package/dist/integrations/slack-task-file-upload.d.ts +36 -0
- package/dist/integrations/slack-tool-review.d.ts +5 -0
- package/dist/interaction-agent-access.d.ts +13 -8
- package/dist/interaction-agent-version.d.ts +21 -0
- package/dist/interaction-holder-heartbeat.d.ts +5 -0
- package/dist/interaction-metrics.d.ts +27 -2
- package/dist/interaction-route-stages.d.ts +25 -0
- package/dist/interaction-secrets-vault.d.ts +20 -0
- package/dist/interaction-secrets.d.ts +103 -0
- package/dist/mcp/action-catalog-types.d.ts +14 -0
- package/dist/mcp/action-catalog.gen.d.ts +2 -0
- package/dist/mcp/action-descriptions.d.ts +4 -0
- package/dist/mcp/action-schema-imports.gen.d.ts +1 -0
- package/dist/mcp/capability-account-readiness.d.ts +7 -0
- package/dist/mcp/child-read-evidence.d.ts +9 -0
- package/dist/mcp/company-profile-agent-admin.d.ts +12 -0
- package/dist/mcp/contract-input.d.ts +13 -0
- package/dist/mcp/documents.d.ts +2 -0
- package/dist/mcp/first-party-tool-permissions.d.ts +3 -606
- package/dist/mcp/notification-tools.d.ts +26 -0
- package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
- package/dist/mcp/scheduled-task-input.d.ts +1309 -0
- package/dist/mcp/scheduled-task-view.d.ts +217 -3
- package/dist/mcp/secret-tools.d.ts +14 -0
- package/dist/mcp/server.d.ts +108 -5
- package/dist/mcp/session-admin-access-tools.d.ts +33 -0
- package/dist/mcp/session-event-errors.d.ts +28 -0
- package/dist/mcp/session-event-view.d.ts +62 -0
- package/dist/mcp/session-view.d.ts +15 -0
- package/dist/mcp/session-wait.d.ts +18 -0
- package/dist/mcp/site-agent-clamp-tools.d.ts +38 -0
- package/dist/mcp/site-data-tools.d.ts +22 -0
- package/dist/mcp/site-publication-tools.d.ts +19 -0
- package/dist/mcp/site-sql-tools.d.ts +27 -0
- package/dist/mcp-oauth.d.ts +37 -4
- package/dist/model-calls/chat-completions.d.ts +87 -0
- package/dist/model-calls/pending-usage-settlements.d.ts +57 -0
- package/dist/model-calls/service.d.ts +36 -0
- package/dist/model-catalog.d.ts +9 -3
- package/dist/native-push-dispatch.d.ts +69 -0
- package/dist/observability.d.ts +3 -1
- package/dist/organization-mcp.d.ts +82 -0
- package/dist/prepared-mcp-actor.d.ts +77 -0
- package/dist/prepared-mcp-permissions.d.ts +8 -0
- package/dist/routes/analytics-consent.d.ts +26 -0
- package/dist/routes/api-integrations.d.ts +11 -0
- package/dist/routes/api-keys.d.ts +7 -7
- package/dist/routes/automations.d.ts +2 -0
- package/dist/routes/billing.d.ts +59 -0
- package/dist/routes/browser-sessions.d.ts +65 -2
- package/dist/routes/chat-completions.d.ts +11 -0
- package/dist/routes/claude-core-usage.d.ts +20 -0
- package/dist/routes/claude-subscription-accounts.d.ts +3 -0
- package/dist/routes/claude-subscription-oauth.d.ts +3 -0
- package/dist/routes/client-errors.d.ts +182 -0
- package/dist/routes/codex-core.d.ts +401 -0
- package/dist/routes/codex.d.ts +64 -2
- package/dist/routes/computer-sessions.d.ts +6 -1
- package/dist/routes/desktop-distribution.d.ts +32 -0
- package/dist/routes/github-browser-fonts.gen.d.ts +2 -0
- package/dist/routes/github-browser-pages.d.ts +27 -0
- package/dist/routes/inbox.d.ts +13 -0
- package/dist/routes/insights-response-cache.d.ts +10 -0
- package/dist/routes/insights-usage.d.ts +12 -0
- package/dist/routes/insights.d.ts +28 -0
- package/dist/routes/interaction-placement-message.d.ts +7 -0
- package/dist/routes/managed-sign-in-methods.d.ts +6 -0
- package/dist/routes/model-account-choice.d.ts +13 -0
- package/dist/routes/model-account-settings.d.ts +19 -0
- package/dist/routes/native-app-auth.d.ts +12 -0
- package/dist/routes/organization-integration-policy.d.ts +8 -0
- package/dist/routes/organization-integrations.d.ts +6 -0
- package/dist/routes/organization-mcp-connections.d.ts +3 -0
- package/dist/routes/organization-model-defaults.d.ts +9 -0
- package/dist/routes/organization-service-accounts.d.ts +3 -0
- package/dist/routes/personal-api-keys.d.ts +3 -0
- package/dist/routes/session-admin-access.d.ts +3 -0
- package/dist/routes/session-artifact-associations.d.ts +4 -0
- package/dist/routes/session-history-imports.d.ts +20 -0
- package/dist/routes/sessions.d.ts +38 -2
- package/dist/routes/site-data.d.ts +18 -0
- package/dist/routes/site-publishing.d.ts +5 -0
- package/dist/routes/site-runtime.d.ts +31 -0
- package/dist/routes/site-sql.d.ts +16 -0
- package/dist/routes/slack-bot-access.d.ts +3 -0
- package/dist/routes/subscription-account-pools.d.ts +21 -0
- package/dist/routes/subscription-core-http.d.ts +5 -0
- package/dist/routes/subscription-pool-access.d.ts +37 -0
- package/dist/routes/subscription-pool-core.d.ts +153 -0
- package/dist/routes/supergrok.d.ts +6 -6
- package/dist/routes/usage-allowances.d.ts +12 -0
- package/dist/routes/variable-sets-removed.d.ts +2 -0
- package/dist/routes/vault-providers.d.ts +34 -0
- package/dist/routes/vaults.d.ts +3 -0
- package/dist/routes/workspace-integrations.d.ts +35 -0
- package/dist/routes/workspace-model-providers.d.ts +4 -0
- package/dist/routes/workspaces.d.ts +11 -2
- package/dist/sandbox/agent-update.d.ts +64 -0
- package/dist/sandbox/auth-callout.d.ts +8 -0
- package/dist/sandbox/channel-a.d.ts +15 -1
- package/dist/sandbox/enrollment.d.ts +26 -4
- package/dist/sandbox/machine-audience.d.ts +29 -0
- package/dist/sandbox/machines.d.ts +15 -2
- package/dist/sandbox/metrics-ingestion.d.ts +6 -2
- package/dist/sandbox/screen-control.d.ts +85 -0
- package/dist/sandbox/viewer.d.ts +5 -1
- package/dist/sandbox-file-artifacts.d.ts +17 -1
- package/dist/scheduled-task-blockers.d.ts +39 -0
- package/dist/scheduled-task-deletion.d.ts +3 -4
- package/dist/scheduled-task-lifecycle.d.ts +14 -0
- package/dist/secret-answers.d.ts +40 -0
- package/dist/session-create-observability.d.ts +5 -0
- package/dist/session-event-view-36GO3IL7.js +528 -0
- package/dist/session-event-view-36GO3IL7.js.map +1 -0
- package/dist/signed-state-secret.d.ts +18 -0
- package/dist/site-agent-guard.d.ts +53 -0
- package/dist/site-data/operations.d.ts +103 -0
- package/dist/site-data/service.d.ts +203 -0
- package/dist/site-frame-guard.d.ts +32 -0
- package/dist/site-publishing/agent-data-tools.d.ts +84 -0
- package/dist/site-publishing/agent-model.d.ts +58 -0
- package/dist/site-publishing/agent-session.d.ts +16 -0
- package/dist/site-publishing/content-scanner.d.ts +31 -0
- package/dist/site-publishing/edge-sync.d.ts +48 -0
- package/dist/site-publishing/gateway-signature.d.ts +56 -0
- package/dist/site-publishing/limits.d.ts +63 -0
- package/dist/site-publishing/page-tool-authority.d.ts +30 -0
- package/dist/site-publishing/platform-usage.d.ts +113 -0
- package/dist/site-publishing/platform.d.ts +21 -0
- package/dist/site-publishing/readiness.d.ts +62 -0
- package/dist/site-publishing/runtime.d.ts +179 -0
- package/dist/site-publishing/service.d.ts +264 -0
- package/dist/site-publishing/session-events.d.ts +22 -0
- package/dist/site-publishing/session-views.d.ts +36 -0
- package/dist/site-publishing/viewer.d.ts +40 -0
- package/dist/site-session-origin.d.ts +31 -6
- package/dist/site-sql/format.d.ts +47 -0
- package/dist/site-sql/gateway.d.ts +50 -0
- package/dist/site-sql/service.d.ts +213 -0
- package/dist/temporal-schedule-sync.d.ts +26 -0
- package/dist/transcription/billing-refusal.d.ts +8 -0
- package/dist/transcription/normalize.d.ts +23 -0
- package/dist/transcription/providers/azure-mai.d.ts +12 -0
- package/dist/transcription/providers/azure-openai.d.ts +4 -0
- package/dist/transcription/providers/openai.d.ts +16 -0
- package/dist/transcription/providers/subscription-core.d.ts +39 -0
- package/dist/transcription/service.d.ts +10 -1
- package/dist/transcription/wav-duration.d.ts +8 -0
- package/dist/workspace-tool-gateway-attestations.d.ts +37 -0
- package/dist/workspace-tool-gateway-observability.d.ts +16 -0
- package/dist/workspace-tool-gateway-secrets.d.ts +27 -0
- package/dist/workspace-tool-gateway.d.ts +102 -6
- package/dist/workspace-tool-target-fence.d.ts +116 -0
- package/dist/workspace-tool-target.d.ts +225 -0
- package/dist/workspace-webhook-dispatch.d.ts +26 -0
- package/dist/xai-subscription-core.d.ts +60 -0
- package/package.json +25 -20
- package/src/access-grant-rls.ts +64 -14
- package/src/admission-trace.ts +14 -0
- package/src/app.ts +1684 -252
- package/src/artifact-catalog-cursor.ts +1 -0
- package/src/attached-browser-viewer.ts +26 -0
- package/src/auth/managed-auth-attempt-context.ts +9 -0
- package/src/auth/managed-auth-rate-limits.ts +252 -0
- package/src/auth/managed-auth-session-adapter.ts +64 -29
- package/src/auth/managed-auth.ts +303 -35
- package/src/auth/managed-email.ts +18 -1
- package/src/auth/managed-sign-in-notifications.ts +81 -0
- package/src/auth/new-signups-gate.ts +49 -0
- package/src/auth/organization-user-setup.ts +3 -3
- package/src/auth/signup-funnel-metrics.ts +164 -0
- package/src/azure-live.ts +103 -0
- package/src/browser-action-fences.ts +45 -0
- package/src/browser-controller-authority.ts +1 -186
- package/src/browser-ephemeral.ts +39 -0
- package/src/browser-lost-runtime-end.ts +71 -0
- package/src/browser-state-authority.ts +1 -236
- package/src/claude-default-models.ts +37 -0
- package/src/claude-subscription-core.ts +154 -0
- package/src/claude-subscription-oauth.ts +352 -0
- package/src/claude-subscription-profile.ts +73 -0
- package/src/claude-subscription-usage.ts +51 -0
- package/src/claude-workspace-connection.ts +82 -0
- package/src/codemode.ts +236 -39
- package/src/codex-realtime.ts +181 -53
- package/src/codex-session-pointers.ts +80 -0
- package/src/company-brain-okf.ts +1 -1
- package/src/connected-machine-computer-access.ts +2 -1
- package/src/connection-ownership.ts +19 -13
- package/src/controller-data-plane.ts +34 -0
- package/src/credit-promotion-snapshot.ts +36 -0
- package/src/editable-artifact-production.ts +10 -0
- package/src/editable-artifact-source-session.ts +123 -0
- package/src/editable-artifact-websocket.ts +16 -3
- package/src/fatal-process-boundary.ts +67 -3
- package/src/gateway-realtime.ts +12 -8
- package/src/github-access.ts +31 -5
- package/src/github-browser-flow.ts +1 -1
- package/src/http/acting-person.ts +105 -0
- package/src/http/api-contract-compat.ts +49 -0
- package/src/http/api-error.ts +210 -2
- package/src/http/auth.ts +68 -4
- package/src/http/cors.ts +37 -5
- package/src/http/deprecation.ts +118 -0
- package/src/http/keyed-admission.ts +29 -0
- package/src/http/local-browser-boundary.ts +343 -0
- package/src/http/metrics-listener.ts +57 -0
- package/src/http/path-identifier.ts +54 -0
- package/src/http/registered-route-label.ts +34 -0
- package/src/http/rejection-telemetry.ts +120 -0
- package/src/http/request-body.ts +127 -0
- package/src/http/request-source.ts +154 -13
- package/src/http/sse.ts +88 -28
- package/src/http/unmatched-route.ts +60 -0
- package/src/http/user-content.ts +158 -0
- package/src/http/variable-sets-removed.ts +122 -0
- package/src/http/websocket-upgrade-dispatch.ts +29 -0
- package/src/index.ts +107 -57
- package/src/integration-connect-metrics.ts +228 -0
- package/src/integration-endpoint-test.ts +291 -0
- package/src/integrations/api-integrations.ts +81 -7
- package/src/integrations/atlassian.ts +202 -83
- package/src/integrations/fiken.ts +66 -38
- package/src/integrations/github-app-connect.ts +64 -18
- package/src/integrations/github-lens-connect.ts +8 -29
- package/src/integrations/google-drive.ts +448 -152
- package/src/integrations/integration-commit-authority.ts +69 -0
- package/src/integrations/marketplace-plugin.ts +1 -1
- package/src/integrations/oauth-client.ts +733 -193
- package/src/integrations/oauth-profiles.ts +116 -45
- package/src/integrations/onepassword-vault-provider.ts +16 -0
- package/src/integrations/personal-github-repositories.ts +1 -1
- package/src/integrations/personal-github.ts +61 -35
- package/src/integrations/provider-oauth.ts +67 -85
- package/src/integrations/slack-app-home.ts +5 -5
- package/src/integrations/slack-bot.ts +893 -201
- package/src/integrations/slack-file-upload-flow.ts +147 -0
- package/src/integrations/slack-install.ts +7 -7
- package/src/integrations/slack-interactions.ts +1589 -299
- package/src/integrations/slack-mrkdwn.ts +193 -0
- package/src/integrations/slack-routing.ts +2 -2
- package/src/integrations/slack-session-defaults.ts +224 -0
- package/src/integrations/slack-task-file-upload.ts +323 -0
- package/src/integrations/slack-tool-review.ts +65 -0
- package/src/integrations/social-oauth.ts +90 -58
- package/src/interaction-agent-access.ts +40 -20
- package/src/interaction-agent-version.ts +85 -0
- package/src/interaction-holder-heartbeat.ts +24 -8
- package/src/interaction-metrics.ts +164 -2
- package/src/interaction-route-stages.ts +94 -0
- package/src/interaction-secrets-vault.ts +213 -0
- package/src/interaction-secrets.ts +426 -0
- package/src/mcp/action-catalog-types.ts +14 -0
- package/src/mcp/action-catalog.gen.ts +8014 -0
- package/src/mcp/action-descriptions.ts +299 -0
- package/src/mcp/action-schema-imports.gen.ts +304 -0
- package/src/mcp/capability-account-readiness.ts +17 -0
- package/src/mcp/child-read-evidence.ts +19 -0
- package/src/mcp/company-profile-agent-admin.ts +13 -0
- package/src/mcp/contract-input.ts +165 -0
- package/src/mcp/documents.ts +9 -2
- package/src/mcp/editable-artifacts.ts +29 -11
- package/src/mcp/files.ts +5 -1
- package/src/mcp/first-party-tool-permissions.ts +7 -285
- package/src/mcp/knowledge-entries.ts +108 -34
- package/src/mcp/notification-tools.ts +480 -0
- package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
- package/src/mcp/scheduled-task-input.ts +89 -0
- package/src/mcp/scheduled-task-view.ts +63 -3
- package/src/mcp/secret-tools.ts +185 -0
- package/src/mcp/server.ts +2213 -1116
- package/src/mcp/session-admin-access-tools.ts +163 -0
- package/src/mcp/session-event-errors.ts +123 -0
- package/src/mcp/session-event-view.ts +395 -13
- package/src/mcp/session-view.ts +3 -0
- package/src/mcp/session-wait.ts +67 -7
- package/src/mcp/site-agent-clamp-tools.ts +140 -0
- package/src/mcp/site-data-tools.ts +339 -0
- package/src/mcp/site-publication-tools.ts +201 -0
- package/src/mcp/site-sql-tools.ts +427 -0
- package/src/mcp-oauth.ts +635 -45
- package/src/model-calls/chat-completions.ts +352 -0
- package/src/model-calls/pending-usage-settlements.ts +125 -0
- package/src/model-calls/service.ts +694 -0
- package/src/model-catalog.ts +68 -17
- package/src/native-push-dispatch.ts +457 -0
- package/src/observability.ts +15 -1
- package/src/organization-mcp.ts +485 -0
- package/src/prepared-mcp-actor.ts +154 -0
- package/src/prepared-mcp-permissions.ts +38 -0
- package/src/routes/analytics-consent.ts +123 -0
- package/src/routes/api-integrations.ts +268 -9
- package/src/routes/api-keys.ts +164 -25
- package/src/routes/artifact-catalog.ts +111 -0
- package/src/routes/automations.ts +163 -90
- package/src/routes/billing.ts +535 -59
- package/src/routes/browser-sessions.ts +966 -342
- package/src/routes/canonical-human-identities.ts +61 -0
- package/src/routes/capabilities.ts +112 -5
- package/src/routes/channels.ts +4 -3
- package/src/routes/chat-completions.ts +235 -0
- package/src/routes/claude-core-usage.ts +147 -0
- package/src/routes/claude-subscription-accounts.ts +233 -0
- package/src/routes/claude-subscription-oauth.ts +175 -0
- package/src/routes/client-errors.ts +394 -0
- package/src/routes/codex-core.ts +687 -0
- package/src/routes/codex.ts +1277 -1119
- package/src/routes/company-brain.ts +4 -0
- package/src/routes/computer-sessions.ts +319 -85
- package/src/routes/connect.ts +277 -175
- package/src/routes/connections.ts +690 -363
- package/src/routes/desktop-distribution.ts +217 -0
- package/src/routes/documents.ts +13 -7
- package/src/routes/editable-artifacts.ts +74 -4
- package/src/routes/enrollments.ts +110 -16
- package/src/routes/external-identity-links.ts +13 -12
- package/src/routes/files.ts +41 -16
- package/src/routes/github-browser-fonts.gen.ts +12 -0
- package/src/routes/github-browser-pages.ts +258 -0
- package/src/routes/github.ts +200 -75
- package/src/routes/inbox.ts +353 -0
- package/src/routes/insights-response-cache.ts +83 -0
- package/src/routes/insights-usage.ts +345 -0
- package/src/routes/insights.ts +103 -8
- package/src/routes/install.ts +51 -10
- package/src/routes/integration-facets.ts +70 -28
- package/src/routes/interaction-placement-message.ts +12 -0
- package/src/routes/knowledge.ts +136 -27
- package/src/routes/machines.ts +189 -135
- package/src/routes/managed-auth-session-sets.ts +43 -10
- package/src/routes/managed-onboarding.ts +39 -19
- package/src/routes/managed-sign-in-methods.ts +433 -0
- package/src/routes/memory-slack-publications.ts +3 -2
- package/src/routes/model-account-choice.ts +194 -0
- package/src/routes/model-account-settings.ts +235 -0
- package/src/routes/model-connection-access.ts +210 -48
- package/src/routes/native-app-auth.ts +296 -0
- package/src/routes/organization-integration-policy.ts +116 -0
- package/src/routes/organization-integrations.ts +326 -0
- package/src/routes/organization-mcp-connections.ts +183 -0
- package/src/routes/organization-memberships.ts +205 -19
- package/src/routes/organization-model-defaults.ts +110 -0
- package/src/routes/organization-model-providers.ts +74 -3
- package/src/routes/organization-service-accounts.ts +128 -0
- package/src/routes/organization-sessions.ts +21 -5
- package/src/routes/personal-api-keys.ts +184 -0
- package/src/routes/personal-github-git-broker.ts +2 -2
- package/src/routes/personal-github.ts +9 -4
- package/src/routes/plugins.ts +46 -7
- package/src/routes/pr-review-github.ts +105 -118
- package/src/routes/pr-review.ts +88 -82
- package/src/routes/preference-registry.ts +18 -0
- package/src/routes/rigs.ts +48 -13
- package/src/routes/scheduled-tasks.ts +347 -27
- package/src/routes/session-admin-access.ts +271 -0
- package/src/routes/session-artifact-associations.ts +164 -0
- package/src/routes/session-history-imports.ts +305 -0
- package/src/routes/sessions.ts +1682 -363
- package/src/routes/site-data.ts +340 -0
- package/src/routes/site-publishing.ts +584 -0
- package/src/routes/site-runtime.ts +1944 -0
- package/src/routes/site-sql.ts +263 -0
- package/src/routes/skill-content.ts +72 -7
- package/src/routes/skills.ts +5 -4
- package/src/routes/slack-bot-access.ts +108 -0
- package/src/routes/social.ts +27 -15
- package/src/routes/subscription-account-pools.ts +209 -0
- package/src/routes/subscription-core-http.ts +18 -0
- package/src/routes/subscription-pool-access.ts +180 -0
- package/src/routes/subscription-pool-core.ts +552 -0
- package/src/routes/supergrok.ts +174 -655
- package/src/routes/transcription-recordings.ts +71 -4
- package/src/routes/transcriptions.ts +26 -2
- package/src/routes/usage-allowances.ts +381 -0
- package/src/routes/variable-sets-removed.ts +19 -0
- package/src/routes/vault-providers.ts +782 -0
- package/src/routes/vaults.ts +421 -0
- package/src/routes/video-generation.ts +30 -12
- package/src/routes/workspace-artifacts.ts +165 -53
- package/src/routes/workspace-integrations.ts +576 -0
- package/src/routes/workspace-model-providers.ts +148 -0
- package/src/routes/workspace-state.ts +4 -0
- package/src/routes/workspaces.ts +625 -117
- package/src/sandbox/agent-update.ts +315 -0
- package/src/sandbox/auth-callout.ts +104 -21
- package/src/sandbox/channel-a.ts +165 -55
- package/src/sandbox/enrollment.ts +131 -22
- package/src/sandbox/machine-audience.ts +192 -0
- package/src/sandbox/machines.ts +75 -31
- package/src/sandbox/metrics-ingestion.ts +133 -2
- package/src/sandbox/rematerialize.ts +51 -21
- package/src/sandbox/screen-control.ts +289 -0
- package/src/sandbox/viewer.ts +33 -58
- package/src/sandbox-file-artifacts.ts +53 -27
- package/src/scheduled-task-blockers.ts +293 -0
- package/src/scheduled-task-deletion.ts +13 -3
- package/src/scheduled-task-lifecycle.ts +84 -0
- package/src/secret-answers.ts +119 -0
- package/src/session-create-observability.ts +46 -0
- package/src/session-realtime-context.ts +26 -4
- package/src/signed-state-secret.ts +58 -0
- package/src/site-agent-guard.ts +261 -0
- package/src/site-data/operations.ts +777 -0
- package/src/site-data/service.ts +1043 -0
- package/src/site-frame-guard.ts +107 -0
- package/src/site-publishing/agent-data-tools.ts +250 -0
- package/src/site-publishing/agent-model.ts +127 -0
- package/src/site-publishing/agent-session.ts +148 -0
- package/src/site-publishing/content-scanner.ts +93 -0
- package/src/site-publishing/edge-sync.ts +148 -0
- package/src/site-publishing/gateway-signature.ts +198 -0
- package/src/site-publishing/limits.ts +315 -0
- package/src/site-publishing/page-tool-authority.ts +111 -0
- package/src/site-publishing/platform-usage.ts +479 -0
- package/src/site-publishing/platform.ts +98 -0
- package/src/site-publishing/readiness.ts +330 -0
- package/src/site-publishing/runtime.ts +831 -0
- package/src/site-publishing/service.ts +1282 -0
- package/src/site-publishing/session-events.ts +262 -0
- package/src/site-publishing/session-views.ts +262 -0
- package/src/site-publishing/viewer.ts +75 -0
- package/src/site-session-origin.ts +91 -6
- package/src/site-sql/format.ts +134 -0
- package/src/site-sql/gateway.ts +168 -0
- package/src/site-sql/service.ts +1636 -0
- package/src/site-uploads.ts +27 -5
- package/src/temporal-schedule-sync.ts +74 -0
- package/src/transcription/billing-refusal.ts +14 -0
- package/src/transcription/normalize.ts +77 -0
- package/src/transcription/providers/azure-mai.ts +98 -0
- package/src/transcription/providers/azure-openai.ts +16 -7
- package/src/transcription/providers/codex-subscription.ts +190 -67
- package/src/transcription/providers/openai.ts +79 -5
- package/src/transcription/providers/subscription-core.ts +125 -0
- package/src/transcription/providers/xai-subscription.ts +81 -83
- package/src/transcription/segmenter.ts +7 -1
- package/src/transcription/service.ts +239 -10
- package/src/transcription/wav-duration.ts +39 -0
- package/src/workspace-deletion.ts +25 -1
- package/src/workspace-tool-gateway-attestations.ts +133 -0
- package/src/workspace-tool-gateway-observability.ts +64 -0
- package/src/workspace-tool-gateway-secrets.ts +104 -0
- package/src/workspace-tool-gateway.ts +921 -103
- package/src/workspace-tool-target-fence.ts +380 -0
- package/src/workspace-tool-target.ts +554 -0
- package/src/workspace-webhook-dispatch.ts +225 -0
- package/src/xai-realtime.ts +85 -81
- package/src/xai-subscription-core.ts +172 -0
- package/dist/browser-auth-broker.d.ts +0 -20
- package/dist/chunk-AJ62T5QN.js.map +0 -1
- package/dist/connection-authority-owner.d.ts +0 -59
- package/dist/routes/connection-authorities.d.ts +0 -3
- package/dist/routes/environments.d.ts +0 -5
- package/dist/routes/host-mcp-bindings.d.ts +0 -5
- package/dist/routes/host-mcp-resolvers.d.ts +0 -3
- package/dist/routes/packs.d.ts +0 -3
- package/dist/session-event-view-MU3HMNV3.js +0 -264
- package/dist/session-event-view-MU3HMNV3.js.map +0 -1
- package/dist/xai-subscription-auth.d.ts +0 -23
- package/src/browser-auth-broker.ts +0 -155
- package/src/connection-authority-owner.ts +0 -61
- package/src/routes/connection-authorities.ts +0 -139
- package/src/routes/environments.ts +0 -388
- package/src/routes/host-mcp-bindings.ts +0 -122
- package/src/routes/host-mcp-resolvers.ts +0 -41
- package/src/routes/packs.ts +0 -784
- package/src/xai-subscription-auth.ts +0 -139
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from "hono";
|
|
2
|
+
/**
|
|
3
|
+
* A public `/v1` route whose current behaviour is scheduled for removal.
|
|
4
|
+
*
|
|
5
|
+
* See docs/design/api-compatibility-policy.md: a breaking change to the public
|
|
6
|
+
* surface is announced, advertised on every affected response with the
|
|
7
|
+
* standard `Deprecation` (RFC 9745) and `Sunset` (RFC 8594) headers plus a
|
|
8
|
+
* `Link: rel="deprecation"` to the migration notes, and the old behaviour is
|
|
9
|
+
* kept for at least 90 days on the managed service or until the next major,
|
|
10
|
+
* whichever is later. Published SDKs surface these headers to the integrator.
|
|
11
|
+
*/
|
|
12
|
+
export type RouteDeprecation = {
|
|
13
|
+
/** Upper-case HTTP method. */
|
|
14
|
+
method: string;
|
|
15
|
+
/** The exact registered Hono template, e.g. `/v1/workspaces/:workspaceId/packs`. */
|
|
16
|
+
path: string;
|
|
17
|
+
/** When the deprecation was announced (ISO 8601). */
|
|
18
|
+
deprecatedAt: string;
|
|
19
|
+
/** Earliest removal on the managed service (ISO 8601). */
|
|
20
|
+
sunset: string;
|
|
21
|
+
/** Public migration notes (changelog/docs URL). */
|
|
22
|
+
link: string;
|
|
23
|
+
/** Optional successor route or document. */
|
|
24
|
+
successor?: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Every currently deprecated public route. Adding an entry here is the
|
|
28
|
+
* server-side half of a deprecation; the breaking change itself still needs an
|
|
29
|
+
* entry in scripts/public-api-breaking-changes.json and a new major.
|
|
30
|
+
*/
|
|
31
|
+
export declare const DEPRECATED_ROUTES: readonly RouteDeprecation[];
|
|
32
|
+
/** Validate one registry entry; the policy's 90-day minimum is enforced here. */
|
|
33
|
+
export declare function assertValidRouteDeprecation(deprecation: RouteDeprecation): void;
|
|
34
|
+
/** The response headers that advertise one deprecation. */
|
|
35
|
+
export declare function deprecationHeaders(deprecation: RouteDeprecation): Record<string, string>;
|
|
36
|
+
/**
|
|
37
|
+
* Stamp deprecation headers on every response from a registered deprecated
|
|
38
|
+
* route, including error responses, so an integrator sees the notice whatever
|
|
39
|
+
* the call's outcome. Matching uses the registered route template, never
|
|
40
|
+
* request data.
|
|
41
|
+
*/
|
|
42
|
+
export declare function deprecationHeadersMiddleware(registry?: readonly RouteDeprecation[]): MiddlewareHandler;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One token bucket per closed key, for anonymous beacon routes. It bounds
|
|
3
|
+
* counter inflation and log volume from any caller without per-client state.
|
|
4
|
+
*/
|
|
5
|
+
export type KeyedAdmission<Key extends string> = {
|
|
6
|
+
admit(key: Key): boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function createKeyedAdmission<Key extends string>(options?: {
|
|
9
|
+
capacity?: number;
|
|
10
|
+
refillPerSecond?: number;
|
|
11
|
+
now?: () => number;
|
|
12
|
+
}): KeyedAdmission<Key>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type Settings } from "@opengeni/config";
|
|
2
|
+
/**
|
|
3
|
+
* Browser boundary for the unauthenticated local product mode.
|
|
4
|
+
*
|
|
5
|
+
* In `local` access mode every request without credentials acts as the local
|
|
6
|
+
* `dev` user, and the default local sandbox runs agent commands on the host.
|
|
7
|
+
* Binding the API to loopback keeps other devices out, but a web page open in
|
|
8
|
+
* the developer's browser can still reach `http://127.0.0.1:<port>`:
|
|
9
|
+
*
|
|
10
|
+
* - any site can send cross-origin requests to it (CORS only hides the
|
|
11
|
+
* response; a simple POST still runs), and
|
|
12
|
+
* - a DNS-rebinding site can make its own hostname resolve to 127.0.0.1 and
|
|
13
|
+
* read responses as a same-origin page.
|
|
14
|
+
*
|
|
15
|
+
* The boundary therefore sorts the `Host` a request is addressed to into two
|
|
16
|
+
* classes:
|
|
17
|
+
*
|
|
18
|
+
* - Browser hosts: loopback, the hosts of the configured web, public, and
|
|
19
|
+
* extra origins, the GitHub App callback tunnel, and a specific API bind
|
|
20
|
+
* address. A present `Origin` must be this stack's web app, an explicitly
|
|
21
|
+
* configured origin, or the API's own address on one of these hosts.
|
|
22
|
+
* - Sandbox hosts: names only sandboxes and the worker use to reach the API
|
|
23
|
+
* (`host.docker.internal` with the Docker sandbox, and the hosts of
|
|
24
|
+
* `OPENGENI_MCP_URL` and `OPENGENI_MCP_INTERNAL_URL`). They serve only the
|
|
25
|
+
* sandbox routes (Codemode, first-party MCP, and the Git broker) and refuse
|
|
26
|
+
* any request that carries browser metadata. A browser cannot tell a
|
|
27
|
+
* sandbox name from an attacker's, so a rebinding page on one of these
|
|
28
|
+
* names can neither send an accepted `Origin` nor reach the rest of the API.
|
|
29
|
+
*
|
|
30
|
+
* Every other `Host` is refused. Non-browser clients (the SDK, curl, sandbox
|
|
31
|
+
* callbacks, host-app servers) send no `Origin` and are unaffected. The `Host`
|
|
32
|
+
* port is not compared: a rebinding page controls only the hostname, while
|
|
33
|
+
* local proxies and forwarders legitimately present their own port.
|
|
34
|
+
*
|
|
35
|
+
* It applies only to `local` access mode in the `local` environment (the
|
|
36
|
+
* `bun run dev` stack and manual local runs). Managed and configured access
|
|
37
|
+
* modes, and deployments that set another `OPENGENI_ENVIRONMENT`, keep their
|
|
38
|
+
* existing CORS policy.
|
|
39
|
+
*/
|
|
40
|
+
export type LocalBrowserBoundarySettings = Pick<Settings, "productAccessMode" | "environment" | "apiHost" | "webBaseUrl" | "publicBaseUrl" | "opengeniMcpUrl" | "opengeniMcpInternalUrl" | "githubAppManifestBaseUrl" | "localAllowedOrigins" | "sandboxBackend">;
|
|
41
|
+
export type LocalBrowserBoundaryRejectionCode = "LOCAL_HOST_NOT_ALLOWED" | "LOCAL_ORIGIN_NOT_ALLOWED" | "LOCAL_SANDBOX_ROUTE_ONLY";
|
|
42
|
+
export type LocalBrowserBoundaryRejection = {
|
|
43
|
+
status: 403;
|
|
44
|
+
code: LocalBrowserBoundaryRejectionCode;
|
|
45
|
+
message: string;
|
|
46
|
+
/** The refused `Host` or `Origin`, for the API log only; never sent back. */
|
|
47
|
+
refused: string;
|
|
48
|
+
};
|
|
49
|
+
/** Called once per distinct refused value, so an operator can see why. */
|
|
50
|
+
export type LocalBrowserBoundaryWarn = (message: string, attributes: Record<string, string>) => void;
|
|
51
|
+
export type LocalBrowserBoundary = {
|
|
52
|
+
readonly allowedOrigins: ReadonlySet<string>;
|
|
53
|
+
/** Hostnames a browser may address. */
|
|
54
|
+
readonly browserHostnames: ReadonlySet<string>;
|
|
55
|
+
/** Hostnames only sandboxes and the worker use; sandbox routes only, no browsers. */
|
|
56
|
+
readonly sandboxHostnames: ReadonlySet<string>;
|
|
57
|
+
/** Whether a present `Origin` may call the API for a request with this `Host`. */
|
|
58
|
+
originAllowed(origin: string, host: string | null): boolean;
|
|
59
|
+
/** The rejection for this request, or null when the boundary admits it. */
|
|
60
|
+
rejection(request: Request): LocalBrowserBoundaryRejection | null;
|
|
61
|
+
};
|
|
62
|
+
/** Mark a request the API dispatches to itself so the boundary admits it. */
|
|
63
|
+
export declare function markLocalInternalDispatch(request: Request): Request;
|
|
64
|
+
export declare function localBrowserBoundaryApplies(settings: Pick<Settings, "productAccessMode" | "environment">): boolean;
|
|
65
|
+
/** Build the boundary, or null when the deployment is not the local dev product. */
|
|
66
|
+
export declare function createLocalBrowserBoundary(settings: LocalBrowserBoundarySettings, options?: {
|
|
67
|
+
warn?: LocalBrowserBoundaryWarn;
|
|
68
|
+
}): LocalBrowserBoundary | null;
|
|
69
|
+
/** The standard API error envelope for a boundary rejection outside Hono. */
|
|
70
|
+
export declare function localBrowserBoundaryResponse(rejection: LocalBrowserBoundaryRejection): Response;
|
|
71
|
+
/** The `Host` the boundary checks: the header, else the request URL's authority. */
|
|
72
|
+
export declare function localBrowserRequestHost(request: Request): string | null;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Settings } from "@opengeni/config";
|
|
2
|
+
import { Hono } from "hono";
|
|
3
|
+
type PrometheusSource = {
|
|
4
|
+
prometheusMetrics(): Promise<string>;
|
|
5
|
+
};
|
|
6
|
+
/** Register the Prometheus exposition route on one Hono app. */
|
|
7
|
+
export declare function registerPrometheusMetricsRoute(app: Hono, observability: PrometheusSource): void;
|
|
8
|
+
/**
|
|
9
|
+
* Whether the public API listener serves `GET /metrics`. A deployment that sets
|
|
10
|
+
* `OPENGENI_API_METRICS_PORT` moves the exposition to a dedicated internal
|
|
11
|
+
* listener, so an ingress that forwards every path to the API cannot publish it.
|
|
12
|
+
*/
|
|
13
|
+
export declare function publicListenerServesMetrics(settings: Pick<Settings, "apiMetricsPort">): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* The dedicated metrics listener: only `GET /metrics`, behind the same
|
|
16
|
+
* deployment-key perimeter rules as the public listener. Nothing else is
|
|
17
|
+
* routed here, so exposing this port to a scraper exposes nothing else.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createMetricsListenerApp(settings: Settings, observability: PrometheusSource): Hono;
|
|
20
|
+
/** Start the dedicated listener when configured; returns undefined otherwise. */
|
|
21
|
+
export declare function startApiMetricsListener(settings: Settings, observability: PrometheusSource): ReturnType<typeof Bun.serve> | undefined;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ApiHttpError } from "./api-error.js";
|
|
2
|
+
/**
|
|
3
|
+
* A resource id taken verbatim from the URL path that is not a UUID cannot
|
|
4
|
+
* name any row. Routes pass such ids straight to PostgreSQL, which rejects the
|
|
5
|
+
* cast (SQLSTATE 22P02); that is a client addressing error, so answer 404
|
|
6
|
+
* instead of an unhandled 500.
|
|
7
|
+
*
|
|
8
|
+
* Deliberately narrow: only a uuid-syntax failure whose rejected text is
|
|
9
|
+
* exactly one of this request's own path segments qualifies. A malformed UUID
|
|
10
|
+
* produced by server code (a stored value, a derived subject, a body field)
|
|
11
|
+
* does not appear as a path segment and stays a genuine 500.
|
|
12
|
+
*
|
|
13
|
+
* Typical cause: a client built against a newer API calls a literal route
|
|
14
|
+
* (for example `.../scheduled-tasks/attention`) that an older server does not
|
|
15
|
+
* have, so the literal falls through to `.../scheduled-tasks/:taskId`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function invalidPathIdentifierHttpError(error: unknown, pathname: string): ApiHttpError | null;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Context } from "hono";
|
|
2
|
+
/**
|
|
3
|
+
* The registered Hono path template of the handler that answers this request.
|
|
4
|
+
*
|
|
5
|
+
* Hono resolves every route matching a request before the first middleware
|
|
6
|
+
* runs, so the metrics middleware can read the exact code-owned template (for
|
|
7
|
+
* example `/v1/workspaces/:workspaceId/rigs/:rigId`) without re-implementing
|
|
8
|
+
* routing. Templates come only from route registrations, never from request
|
|
9
|
+
* data, so they are a closed and bounded metric/log label set.
|
|
10
|
+
*
|
|
11
|
+
* Middleware (arity two: `(context, next)`) and global catch-alls never name a
|
|
12
|
+
* route; the first matched terminal handler is the one Hono dispatches to.
|
|
13
|
+
*/
|
|
14
|
+
export declare function registeredHandlerRoutePath(context: Context): string | null;
|
|
15
|
+
/** Normalize a registered template; drop catch-alls that would name nothing. */
|
|
16
|
+
export declare function boundedRegisteredRouteLabel(path: string | null | undefined): string | null;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded, content-free classification of a rejected (4xx/5xx) API response,
|
|
3
|
+
* so a refused request can be diagnosed from logs and counted per route without
|
|
4
|
+
* copying the response message, identifiers, or user content into telemetry.
|
|
5
|
+
*
|
|
6
|
+
* - `code` is the public `ErrorEnvelope.code` (a closed enum).
|
|
7
|
+
* - `reason` is `permission:<name>` when the refusal names a missing permission
|
|
8
|
+
* from the closed permission catalog, else the envelope's typed
|
|
9
|
+
* `details.code` when it is a short identifier, else `control:<code>` for a
|
|
10
|
+
* Connected Machine control failure, else `unclassified`.
|
|
11
|
+
* - `fingerprint` is a one-way hash of the message with identifiers and
|
|
12
|
+
* numbers normalized away. It groups identical refusals in logs; resolve it
|
|
13
|
+
* back to source text with `bun run scripts/resolve-rejection-fingerprint.ts`.
|
|
14
|
+
* It never becomes a metric label.
|
|
15
|
+
*/
|
|
16
|
+
export type HttpRejectionFacts = {
|
|
17
|
+
code: string;
|
|
18
|
+
reason: string;
|
|
19
|
+
fingerprint?: string;
|
|
20
|
+
};
|
|
21
|
+
export declare const UNCLASSIFIED_REJECTION_REASON = "unclassified";
|
|
22
|
+
export declare function rejectionFingerprint(message: string): string;
|
|
23
|
+
/** Identifiers, quoted values, and numbers never distinguish two fingerprints. */
|
|
24
|
+
export declare function normalizeRejectionMessage(message: string): string;
|
|
25
|
+
export declare function rejectionReasonFromMessage(message: string | undefined): string | null;
|
|
26
|
+
/** Classify a parsed `ErrorEnvelope`-shaped body. Unknown shapes still get a code. */
|
|
27
|
+
export declare function httpRejectionFactsFromEnvelope(envelope: unknown, fallbackCode: string): HttpRejectionFacts;
|
|
28
|
+
/** Classify a thrown error that escaped the central error handler. */
|
|
29
|
+
export declare function httpRejectionFactsFromError(error: unknown, fallbackCode: string): HttpRejectionFacts;
|
|
30
|
+
/**
|
|
31
|
+
* Read a small JSON error body without consuming the response that is sent to
|
|
32
|
+
* the client. Streams, non-JSON bodies, and large bodies are never read.
|
|
33
|
+
*/
|
|
34
|
+
export declare function readRejectionEnvelope(response: Response): Promise<unknown>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Context } from "hono";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import { ZodError } from "zod";
|
|
4
|
+
import { ApiHttpError } from "./api-error.js";
|
|
5
|
+
/** Parse an already-read request body against its public request schema. */
|
|
6
|
+
export declare function parseRequestBody<Schema extends z.ZodType>(schema: Schema, body: unknown): z.output<Schema>;
|
|
7
|
+
/**
|
|
8
|
+
* Read the request body as JSON. Malformed JSON is a client error (400), never
|
|
9
|
+
* an unhandled `SyntaxError` 500. Other failures (body limit, aborted stream)
|
|
10
|
+
* keep their own mapping.
|
|
11
|
+
*/
|
|
12
|
+
export declare function readRequestJson(c: Context): Promise<unknown>;
|
|
13
|
+
/** Read and validate a JSON request body in one step. */
|
|
14
|
+
export declare function parseRequestJson<Schema extends z.ZodType>(c: Context, schema: Schema): Promise<z.output<Schema>>;
|
|
15
|
+
/**
|
|
16
|
+
* Tag malformed-JSON failures of `c.req.json()` for this request. The same
|
|
17
|
+
* `SyntaxError` instance is rethrown so routes that already catch it keep
|
|
18
|
+
* their own mapping; an uncaught one becomes a 400 in `app.onError` instead of
|
|
19
|
+
* a 500. A `SyntaxError` from parsing stored or upstream data is never tagged.
|
|
20
|
+
*/
|
|
21
|
+
export declare function tagRequestJsonParseErrors(c: Context): void;
|
|
22
|
+
export declare function isRequestBodyValidationError(error: unknown): error is ZodError | SyntaxError;
|
|
23
|
+
/**
|
|
24
|
+
* Public 400 for a registered request-body validation failure, naming every
|
|
25
|
+
* offending field (bounded) so API callers can correct the request.
|
|
26
|
+
*/
|
|
27
|
+
export declare function requestBodyValidationHttpError(error: unknown): ApiHttpError | null;
|
|
@@ -1,14 +1,52 @@
|
|
|
1
|
+
import { type Settings } from "@opengeni/config";
|
|
1
2
|
import type { Context } from "hono";
|
|
2
3
|
declare const TRANSPORT_PEER_ADDRESS_BINDING = "opengeniTransportPeerAddress";
|
|
4
|
+
/** Returned when the runtime supplied no transport peer (for example an
|
|
5
|
+
* in-process test request). Callers treat it as one shared bucket. */
|
|
6
|
+
export declare const UNKNOWN_REQUEST_SOURCE_ADDRESS = "unknown";
|
|
7
|
+
/**
|
|
8
|
+
* App-owned request header carrying the server-resolved client address into
|
|
9
|
+
* Better Auth, which reads client addresses only from request headers. It is
|
|
10
|
+
* removed from every inbound request and re-stamped on managed-auth routes, so
|
|
11
|
+
* a caller-supplied value never reaches the auth rate limiter or session IP.
|
|
12
|
+
*/
|
|
13
|
+
export declare const TRUSTED_CLIENT_ADDRESS_HEADER = "x-opengeni-trusted-client-address";
|
|
3
14
|
type ApiRequestBindings = {
|
|
4
15
|
[TRANSPORT_PEER_ADDRESS_BINDING]?: string | null;
|
|
5
16
|
};
|
|
17
|
+
/** The deployment's declared proxy chain (`OPENGENI_API_TRUSTED_PROXY_*`). */
|
|
18
|
+
export type RequestSourceTrust = Pick<Settings, "apiTrustedProxyHops" | "apiTrustedProxyCidrs">;
|
|
6
19
|
export declare function apiRequestBindingsForTransportPeer(address: string | null | undefined): ApiRequestBindings;
|
|
7
20
|
/**
|
|
8
21
|
* Resolve a quota/audit source from the server-owned transport peer. Forwarded
|
|
9
22
|
* values are considered only when the operator declares an exact trusted proxy
|
|
10
|
-
* hop count
|
|
11
|
-
*
|
|
23
|
+
* hop count (`OPENGENI_API_TRUSTED_PROXY_HOPS`) and, when
|
|
24
|
+
* `OPENGENI_API_TRUSTED_PROXY_CIDRS` is set, only for a transport peer inside
|
|
25
|
+
* those ranges. Each trusted proxy must append the address of the peer that
|
|
26
|
+
* connected to it, or overwrite the header with the original client address;
|
|
27
|
+
* the chain is then walked from the server side so caller-prepended values
|
|
28
|
+
* cannot replace the address observed by the trusted edge. A missing, short,
|
|
29
|
+
* or malformed chain falls back to the transport peer.
|
|
30
|
+
*/
|
|
31
|
+
export declare function trustedRequestSourceAddress(c: Context, trust: RequestSourceTrust): string;
|
|
32
|
+
/**
|
|
33
|
+
* Rate-limit key for a trusted source address. An IPv6 address keys on its
|
|
34
|
+
* /64, the block one subscriber normally holds and the granularity Better
|
|
35
|
+
* Auth applies to the same stamped address, so rotating addresses inside one
|
|
36
|
+
* /64 cannot mint fresh buckets. An IPv4-mapped IPv6 address (how a
|
|
37
|
+
* dual-stack listener reports an IPv4 peer) keys on the embedded IPv4 address
|
|
38
|
+
* instead of collapsing every IPv4 client into one /64. Anything else,
|
|
39
|
+
* including {@link UNKNOWN_REQUEST_SOURCE_ADDRESS}, is returned unchanged.
|
|
40
|
+
*/
|
|
41
|
+
export declare function requestSourceRateLimitKey(address: string): string;
|
|
42
|
+
/** {@link trustedRequestSourceAddress} as an application rate-limit key. */
|
|
43
|
+
export declare function trustedRequestSourceRateLimitKey(c: Context, trust: RequestSourceTrust): string;
|
|
44
|
+
/**
|
|
45
|
+
* Replace any caller-supplied {@link TRUSTED_CLIENT_ADDRESS_HEADER}. When
|
|
46
|
+
* `stamp` is true the header is set to the trusted source address, so every
|
|
47
|
+
* Better Auth request derived from this request (direct handler calls,
|
|
48
|
+
* isolated provider requests, and `auth.api.*` calls built from its headers)
|
|
49
|
+
* keys rate limits and session records on the real client.
|
|
12
50
|
*/
|
|
13
|
-
export declare function
|
|
51
|
+
export declare function replaceTrustedClientAddressHeader(c: Context, trust: RequestSourceTrust, stamp: boolean): void;
|
|
14
52
|
export {};
|
package/dist/http/sse.d.ts
CHANGED
|
@@ -59,6 +59,17 @@ export type LatestWinsDelivery<T extends {
|
|
|
59
59
|
export declare function createLatestWinsDelivery<T extends {
|
|
60
60
|
sequence: number;
|
|
61
61
|
}>(send: (event: T) => Promise<void>, onError: (error: unknown) => void): LatestWinsDelivery<T>;
|
|
62
|
+
/**
|
|
63
|
+
* Durable coverage for each projected frame. Storage may omit sequences on
|
|
64
|
+
* purpose (an archived session keeps only its readable timeline), and clients
|
|
65
|
+
* treat an uncovered jump as a gap to backfill. Within a page the next stored
|
|
66
|
+
* row bounds the gap; after the last row, `gapEnd` (when given) reads the
|
|
67
|
+
* race-free bound from storage.
|
|
68
|
+
*/
|
|
69
|
+
export declare function coverStorageGaps(projection: {
|
|
70
|
+
events: SessionEvent[];
|
|
71
|
+
coveredThroughBySequence: ReadonlyMap<number, number>;
|
|
72
|
+
}, gapEnd: ((through: number) => Promise<number>) | null): Promise<Map<number, number>>;
|
|
62
73
|
export declare function sseSessionStream(db: Database, bus: EventBus, workspaceId: string, sessionId: string, after: number, signal: AbortSignal, options?: SessionSseDeliveryOptions): Promise<Response>;
|
|
63
74
|
export declare function replaySessionEvents(loadPage: (after: number, limit: number) => Promise<SessionEvent[]>, send: (event: SessionEvent) => Promise<void>, after: number, pageSize?: number): Promise<void>;
|
|
64
75
|
export declare function sseWorkspaceControlStream(db: Database, bus: EventBus, workspaceId: string, after: number, signal: AbortSignal, options?: SseDeliveryOptions): Promise<Response>;
|
|
@@ -67,7 +78,7 @@ export type WorkspaceInteractionSseOptions = SseDeliveryOptions & {
|
|
|
67
78
|
};
|
|
68
79
|
/**
|
|
69
80
|
* One HTTP connection for the two workspace-wide invalidation domains used by
|
|
70
|
-
* every visible
|
|
81
|
+
* every visible Opengeni surface. Keeping these as separate HTTP/1 streams
|
|
71
82
|
* consumes all six per-origin browser connections with only two windows and
|
|
72
83
|
* starves ordinary mutations/terminal grants. The durable cursors remain
|
|
73
84
|
* independent; this function only multiplexes their already-bounded SSE frames.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Context, Hono } from "hono";
|
|
2
|
+
export type UnmatchedRoute = {
|
|
3
|
+
status: 404;
|
|
4
|
+
} | {
|
|
5
|
+
status: 405;
|
|
6
|
+
allow: string[];
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Classify a request no registered handler can answer, BEFORE authentication
|
|
10
|
+
* or authorization middleware runs. Those layers otherwise turn a request for a
|
|
11
|
+
* route that does not exist into an authorization-shaped failure (for example
|
|
12
|
+
* the fail-closed session operation classifier answering a retryable 503), so
|
|
13
|
+
* a client probing an unknown method or path would be told to retry forever.
|
|
14
|
+
*
|
|
15
|
+
* Returns null when the request has a handler, or when classification itself
|
|
16
|
+
* fails (fail open: the request keeps its previous routing behavior).
|
|
17
|
+
*/
|
|
18
|
+
export declare function unmatchedRoute(app: Hono, c: Context): UnmatchedRoute | null;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare const USER_CONTENT_SECURITY_POLICY = "default-src 'none'; img-src 'self' data: blob:; media-src 'self' data: blob:; style-src 'unsafe-inline'; sandbox";
|
|
2
|
+
/** Media players only; scripts stay disabled (see the module comment). */
|
|
3
|
+
export declare const USER_MEDIA_CONTENT_SECURITY_POLICY = "default-src 'none'; img-src 'self' data: blob:; media-src 'self' data: blob:; style-src 'unsafe-inline'; sandbox allow-same-origin";
|
|
4
|
+
export declare const USER_CONTENT_SECURITY_HEADERS: Readonly<{
|
|
5
|
+
readonly "Content-Security-Policy": "default-src 'none'; img-src 'self' data: blob:; media-src 'self' data: blob:; style-src 'unsafe-inline'; sandbox";
|
|
6
|
+
readonly "Cross-Origin-Resource-Policy": "same-origin";
|
|
7
|
+
readonly "X-Content-Type-Options": "nosniff";
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* True when a browser would render this type as an active document (HTML,
|
|
11
|
+
* XHTML, SVG, any XML dialect, or multipart replacement streams). Anything that
|
|
12
|
+
* is not a clean `type/subtype` token is treated as active too.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isActiveUserContentType(contentType: string): boolean;
|
|
15
|
+
/** `Content-Disposition: attachment` for active markup; inline types are unchanged. */
|
|
16
|
+
export declare function userContentDispositionHeaders(contentType: string, filename?: string | null): {
|
|
17
|
+
"Content-Disposition": string;
|
|
18
|
+
} | Record<string, never>;
|
|
19
|
+
/**
|
|
20
|
+
* Signed object-storage GET options for one stored object: active markup gets
|
|
21
|
+
* a signed `attachment` response override, so a browser that opens the URL
|
|
22
|
+
* downloads the bytes instead of rendering them with their stored type. The
|
|
23
|
+
* storage endpoint is not always a separate site (local development serves it
|
|
24
|
+
* from loopback, and a preview may route the bucket path on the app origin),
|
|
25
|
+
* so a signed URL follows the same rule as the API routes. Spread into
|
|
26
|
+
* `createGetUrl`; inline types add nothing.
|
|
27
|
+
*/
|
|
28
|
+
export declare function userContentSignedGetUrlOptions(contentType: string, filename?: string | null): {
|
|
29
|
+
responseContentDisposition: string;
|
|
30
|
+
} | Record<string, never>;
|
|
31
|
+
/** True for audio and video types the browser plays in a synthesized media document. */
|
|
32
|
+
export declare function isPlayableMediaUserContentType(contentType: string): boolean;
|
|
33
|
+
/** Sandbox policy for one response; only playable media keeps its origin. */
|
|
34
|
+
export declare function userContentSecurityPolicy(contentType: string): string;
|
|
35
|
+
/** Full header set for one user-content response with the given content type. */
|
|
36
|
+
export declare function userContentResponseHeaders(contentType: string, filename?: string | null): Record<string, string>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Context } from "hono";
|
|
2
|
+
/** The RM-1 answer for legacy Variable Set routes (410) and fields (422). */
|
|
3
|
+
export declare function variableSetsRemovedResponse(c: Context, status: 410 | 422, fields?: readonly string[]): Response;
|
|
4
|
+
/** Thrown where a route cannot return directly; `app.onError` renders it. */
|
|
5
|
+
export declare class VariableSetsRemovedError extends Error {
|
|
6
|
+
readonly fields: readonly string[];
|
|
7
|
+
readonly name = "VariableSetsRemovedError";
|
|
8
|
+
constructor(fields: readonly string[]);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The RM-1 body for a removed-field error from a route or from core's
|
|
12
|
+
* `variableSetsRemovedError`, or null for any other error.
|
|
13
|
+
*/
|
|
14
|
+
export declare function variableSetsRemovedErrorResponse(c: Context, error: unknown): Response | null;
|
|
15
|
+
/**
|
|
16
|
+
* Legacy selection fields that still carry a choice. Empty arrays and null
|
|
17
|
+
* mean "no Variable Sets" and stay accepted so old clients keep working.
|
|
18
|
+
*/
|
|
19
|
+
export declare function legacyVariableSetFields(payload: unknown): string[];
|
|
20
|
+
/** True when the body explicitly clears a legacy selection (`null` or `[]`). */
|
|
21
|
+
export declare function clearsLegacyVariableSet(payload: unknown): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Drops every (empty) legacy Variable Set field so nothing downstream can act
|
|
24
|
+
* on one. Call after {@link legacyVariableSetFields} found none set.
|
|
25
|
+
*/
|
|
26
|
+
export declare function withoutLegacyVariableSetFields(payload: unknown): unknown;
|
|
27
|
+
/**
|
|
28
|
+
* The RM-1 boundary for one JSON body: a 422 `variable_sets_removed` response
|
|
29
|
+
* when a legacy field still carries a choice, otherwise the body without them.
|
|
30
|
+
*/
|
|
31
|
+
export declare function rejectLegacyVariableSetFields(c: Context, payload: unknown): {
|
|
32
|
+
response: Response;
|
|
33
|
+
} | {
|
|
34
|
+
payload: unknown;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Old clients send `variableSetId: null` / `environmentId: null` to mean "no
|
|
38
|
+
* Variable Sets". The create schema only takes the array form, so translate the
|
|
39
|
+
* accepted empty legacy fields to it. Call after {@link legacyVariableSetFields}.
|
|
40
|
+
*/
|
|
41
|
+
export declare function withoutEmptyLegacyVariableSetFields(payload: unknown): unknown;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type LocalBrowserBoundary } from "./local-browser-boundary.js";
|
|
2
|
+
export type ApiWebSocketUpgradeRoute<Server> = {
|
|
3
|
+
handles(request: Request): boolean;
|
|
4
|
+
upgrade(request: Request, server: Server): Response | undefined;
|
|
5
|
+
};
|
|
6
|
+
export type ApiWebSocketUpgradeDispatch = {
|
|
7
|
+
handled: false;
|
|
8
|
+
} | {
|
|
9
|
+
handled: true;
|
|
10
|
+
response: Response | undefined;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* WebSocket upgrades bypass the Hono app, so the local-mode browser boundary
|
|
14
|
+
* (./local-browser-boundary.ts) is applied here before a transport upgrades.
|
|
15
|
+
* Returns `{ handled: false }` when no transport claims the request, so the
|
|
16
|
+
* caller dispatches it to the app, where the boundary runs as middleware.
|
|
17
|
+
*/
|
|
18
|
+
export declare function dispatchApiWebSocketUpgrade<Server>(request: Request, server: Server, routes: ReadonlyArray<ApiWebSocketUpgradeRoute<Server>>, localBrowserBoundary: LocalBrowserBoundary | null): ApiWebSocketUpgradeDispatch;
|