@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
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ConnectionUseGrantMutationResponse,
|
|
3
|
-
ConnectionUseGrantRevocationResponse,
|
|
4
|
-
IssueConnectionUseGrantRequest,
|
|
5
|
-
ListConnectionAuthoritiesQuery,
|
|
6
|
-
RevokeConnectionUseGrantQuery,
|
|
7
|
-
} from "@opengeni/contracts/connection-authority";
|
|
8
|
-
import {
|
|
9
|
-
issueManagedHumanUserResourceGrant,
|
|
10
|
-
listManagedHumanUserResourceAuthorities,
|
|
11
|
-
requireAccessGrantAuthorization,
|
|
12
|
-
revokeManagedHumanUserResourceGrant,
|
|
13
|
-
SessionAuthorizationDeniedError,
|
|
14
|
-
SessionAuthorizationUnavailableError,
|
|
15
|
-
SessionTenancyManagedHumanRequiredError,
|
|
16
|
-
type ApiRouteDeps,
|
|
17
|
-
} from "@opengeni/core";
|
|
18
|
-
import { nestedPostgresSqlState, SessionTenancyNotActivatedError } from "@opengeni/db";
|
|
19
|
-
import type { Context, Hono } from "hono";
|
|
20
|
-
import { HTTPException } from "hono/http-exception";
|
|
21
|
-
import { z } from "zod";
|
|
22
|
-
import {
|
|
23
|
-
connectionUseGrantLifecycleInput,
|
|
24
|
-
projectSelfConnectionAuthorities,
|
|
25
|
-
} from "../connection-authority-owner";
|
|
26
|
-
|
|
27
|
-
async function body<S extends z.ZodType>(context: Context, schema: S): Promise<z.infer<S>> {
|
|
28
|
-
const parsed = schema.safeParse(await context.req.json().catch(() => null));
|
|
29
|
-
if (!parsed.success) throw new HTTPException(422, { message: "invalid connection authority" });
|
|
30
|
-
return parsed.data;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function lifecycleError(error: unknown): never {
|
|
34
|
-
if (
|
|
35
|
-
error instanceof SessionAuthorizationDeniedError ||
|
|
36
|
-
error instanceof SessionTenancyManagedHumanRequiredError ||
|
|
37
|
-
error instanceof SessionTenancyNotActivatedError
|
|
38
|
-
) {
|
|
39
|
-
throw new HTTPException(403, { message: "connection authority denied" });
|
|
40
|
-
}
|
|
41
|
-
if (error instanceof SessionAuthorizationUnavailableError) {
|
|
42
|
-
throw new HTTPException(503, { message: "session authorization unavailable" });
|
|
43
|
-
}
|
|
44
|
-
if (nestedPostgresSqlState(error) === "42501") {
|
|
45
|
-
throw new HTTPException(403, { message: "connection authority denied" });
|
|
46
|
-
}
|
|
47
|
-
if (nestedPostgresSqlState(error) === "22023") {
|
|
48
|
-
throw new HTTPException(422, { message: "invalid connection authority" });
|
|
49
|
-
}
|
|
50
|
-
throw error;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export function registerConnectionAuthorityRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
54
|
-
const base = "/v1/workspaces/:workspaceId/connection-authorities";
|
|
55
|
-
|
|
56
|
-
app.get(base, async (context) => {
|
|
57
|
-
const query = ListConnectionAuthoritiesQuery.safeParse({
|
|
58
|
-
scope: context.req.query("scope"),
|
|
59
|
-
cursor: context.req.query("cursor"),
|
|
60
|
-
limit: context.req.query("limit"),
|
|
61
|
-
});
|
|
62
|
-
if (!query.success) throw new HTTPException(422, { message: "explicit scope=user required" });
|
|
63
|
-
const workspaceId = context.req.param("workspaceId");
|
|
64
|
-
const access = await requireAccessGrantAuthorization(
|
|
65
|
-
context,
|
|
66
|
-
deps,
|
|
67
|
-
workspaceId,
|
|
68
|
-
"connections:read",
|
|
69
|
-
);
|
|
70
|
-
try {
|
|
71
|
-
return context.json(
|
|
72
|
-
projectSelfConnectionAuthorities(
|
|
73
|
-
await listManagedHumanUserResourceAuthorities(deps, access, workspaceId, {
|
|
74
|
-
resourceKind: "connection",
|
|
75
|
-
cursor: query.data.cursor,
|
|
76
|
-
limit: query.data.limit,
|
|
77
|
-
}),
|
|
78
|
-
),
|
|
79
|
-
);
|
|
80
|
-
} catch (error) {
|
|
81
|
-
return lifecycleError(error);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
app.post(`${base}/:authorityId/grants`, async (context) => {
|
|
86
|
-
const workspaceId = context.req.param("workspaceId");
|
|
87
|
-
const authorityId = z.string().uuid().safeParse(context.req.param("authorityId"));
|
|
88
|
-
if (!authorityId.success) throw new HTTPException(422, { message: "invalid authority id" });
|
|
89
|
-
const request = await body(context, IssueConnectionUseGrantRequest);
|
|
90
|
-
const access = await requireAccessGrantAuthorization(
|
|
91
|
-
context,
|
|
92
|
-
deps,
|
|
93
|
-
workspaceId,
|
|
94
|
-
"connections:read",
|
|
95
|
-
);
|
|
96
|
-
try {
|
|
97
|
-
const normalized = connectionUseGrantLifecycleInput(request);
|
|
98
|
-
return context.json(
|
|
99
|
-
ConnectionUseGrantMutationResponse.parse({
|
|
100
|
-
scope: "user",
|
|
101
|
-
grant: await issueManagedHumanUserResourceGrant(
|
|
102
|
-
deps,
|
|
103
|
-
access,
|
|
104
|
-
workspaceId,
|
|
105
|
-
authorityId.data,
|
|
106
|
-
{ scope: "user", resourceKind: "connection", ...normalized },
|
|
107
|
-
"http",
|
|
108
|
-
),
|
|
109
|
-
}),
|
|
110
|
-
);
|
|
111
|
-
} catch (error) {
|
|
112
|
-
return lifecycleError(error);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
app.delete(`${base}/grants/:grantId`, async (context) => {
|
|
117
|
-
const query = RevokeConnectionUseGrantQuery.safeParse({ scope: context.req.query("scope") });
|
|
118
|
-
if (!query.success) throw new HTTPException(422, { message: "explicit scope=user required" });
|
|
119
|
-
const grantId = z.string().uuid().safeParse(context.req.param("grantId"));
|
|
120
|
-
if (!grantId.success) throw new HTTPException(422, { message: "invalid grant id" });
|
|
121
|
-
const workspaceId = context.req.param("workspaceId");
|
|
122
|
-
const access = await requireAccessGrantAuthorization(
|
|
123
|
-
context,
|
|
124
|
-
deps,
|
|
125
|
-
workspaceId,
|
|
126
|
-
"workspace:read",
|
|
127
|
-
);
|
|
128
|
-
try {
|
|
129
|
-
return context.json(
|
|
130
|
-
ConnectionUseGrantRevocationResponse.parse({
|
|
131
|
-
scope: "user",
|
|
132
|
-
grant: await revokeManagedHumanUserResourceGrant(deps, access, workspaceId, grantId.data),
|
|
133
|
-
}),
|
|
134
|
-
);
|
|
135
|
-
} catch (error) {
|
|
136
|
-
return lifecycleError(error);
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}
|
|
@@ -1,388 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CreateVariableSetRequest,
|
|
3
|
-
ResolveVariableSetAttachmentsRequest,
|
|
4
|
-
ResolveVariableSetAttachmentsResponse,
|
|
5
|
-
SetVariableSetVariableRequest,
|
|
6
|
-
UpdateVariableSetRequest,
|
|
7
|
-
VariableSetVariableName,
|
|
8
|
-
} from "@opengeni/contracts";
|
|
9
|
-
import {
|
|
10
|
-
countVariableSets,
|
|
11
|
-
createVariableSet,
|
|
12
|
-
decryptVariableSetValue,
|
|
13
|
-
deleteVariableSet,
|
|
14
|
-
deleteVariableSetVariable,
|
|
15
|
-
encryptVariableSetValue,
|
|
16
|
-
getVariableSetByName,
|
|
17
|
-
listVariableSets,
|
|
18
|
-
readVariableSetSecretAtomically,
|
|
19
|
-
resolveVariableSetAttachments,
|
|
20
|
-
setVariableSetVariable,
|
|
21
|
-
updateVariableSet,
|
|
22
|
-
VariableSetAttachedError,
|
|
23
|
-
} from "@opengeni/db";
|
|
24
|
-
import type { Hono } from "hono";
|
|
25
|
-
import { HTTPException } from "hono/http-exception";
|
|
26
|
-
import {
|
|
27
|
-
requireAccessGrant,
|
|
28
|
-
requireAccessGrantAuthorization,
|
|
29
|
-
requireLiteralPermission,
|
|
30
|
-
requirePermission,
|
|
31
|
-
} from "@opengeni/core";
|
|
32
|
-
import type { ApiRouteDeps } from "@opengeni/core";
|
|
33
|
-
import {
|
|
34
|
-
assertAllowedVariableSetVariableName,
|
|
35
|
-
MAX_ENVIRONMENTS_PER_WORKSPACE,
|
|
36
|
-
MAX_VARIABLES_PER_ENVIRONMENT,
|
|
37
|
-
recordVariableSetAuditEvent,
|
|
38
|
-
requireVariableSetEncryption,
|
|
39
|
-
requireVariableSetForApi,
|
|
40
|
-
} from "@opengeni/core";
|
|
41
|
-
|
|
42
|
-
export function registerVariableSetRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
43
|
-
const { settings, db } = deps;
|
|
44
|
-
const prefixes = [
|
|
45
|
-
"/v1/workspaces/:workspaceId/variable-sets",
|
|
46
|
-
"/v1/workspaces/:workspaceId/environments",
|
|
47
|
-
];
|
|
48
|
-
|
|
49
|
-
for (const prefix of prefixes) {
|
|
50
|
-
app.get(`${prefix}`, async (c) => {
|
|
51
|
-
const workspaceId = c.req.param("workspaceId")!;
|
|
52
|
-
const grant = await requireAccessGrant(c, deps, workspaceId);
|
|
53
|
-
requirePermission(grant, "variable-sets:list");
|
|
54
|
-
requirePermission(grant, "secrets:list");
|
|
55
|
-
return c.json(
|
|
56
|
-
await listVariableSets(db, {
|
|
57
|
-
accountId: grant.accountId,
|
|
58
|
-
workspaceId,
|
|
59
|
-
subjectId: grant.subjectId,
|
|
60
|
-
}),
|
|
61
|
-
);
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
app.post(`${prefix}`, async (c) => {
|
|
65
|
-
const workspaceId = c.req.param("workspaceId")!;
|
|
66
|
-
const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
|
|
67
|
-
const grant = authorization.grant;
|
|
68
|
-
requirePermission(grant, "variable-sets:write");
|
|
69
|
-
const key = requireVariableSetEncryption(settings);
|
|
70
|
-
const payload = CreateVariableSetRequest.parse(await c.req.json());
|
|
71
|
-
if (prefix.endsWith("/environments") && payload.scope !== "workspace") {
|
|
72
|
-
throw new HTTPException(422, {
|
|
73
|
-
message: "the legacy environments route only creates workspace-scoped variable sets",
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
if (
|
|
77
|
-
payload.scope === "organization" &&
|
|
78
|
-
authorization.accountGrant?.permissions.includes("account:admin") !== true
|
|
79
|
-
) {
|
|
80
|
-
throw new HTTPException(403, {
|
|
81
|
-
message: "missing permission: account:admin",
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
if (payload.variables.length > 0) {
|
|
85
|
-
requirePermission(grant, "secrets:write");
|
|
86
|
-
}
|
|
87
|
-
const name = trimmedVariableSetName(payload.name);
|
|
88
|
-
if (payload.variables.length > MAX_VARIABLES_PER_ENVIRONMENT) {
|
|
89
|
-
throw new HTTPException(422, {
|
|
90
|
-
message: `a variable set supports at most ${MAX_VARIABLES_PER_ENVIRONMENT} variables`,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
const variableNames = new Set<string>();
|
|
94
|
-
for (const variable of payload.variables) {
|
|
95
|
-
assertAllowedVariableSetVariableName(variable.name);
|
|
96
|
-
if (variableNames.has(variable.name)) {
|
|
97
|
-
throw new HTTPException(422, {
|
|
98
|
-
message: `duplicate variable set variable name: ${variable.name}`,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
variableNames.add(variable.name);
|
|
102
|
-
}
|
|
103
|
-
const access = {
|
|
104
|
-
accountId: grant.accountId,
|
|
105
|
-
workspaceId,
|
|
106
|
-
subjectId: grant.subjectId,
|
|
107
|
-
};
|
|
108
|
-
if ((await countVariableSets(db, access, payload.scope)) >= MAX_ENVIRONMENTS_PER_WORKSPACE) {
|
|
109
|
-
throw new HTTPException(422, {
|
|
110
|
-
message: `a workspace supports at most ${MAX_ENVIRONMENTS_PER_WORKSPACE} variable sets`,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
if (await getVariableSetByName(db, access, name, payload.scope)) {
|
|
114
|
-
throw new HTTPException(409, {
|
|
115
|
-
message: `variable set name is already in use: ${name}`,
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
// Values are encrypted up front and the variableSet plus all initial
|
|
119
|
-
// variables are written in one transaction: a failure leaves nothing.
|
|
120
|
-
const created = await createVariableSet(db, {
|
|
121
|
-
accountId: grant.accountId,
|
|
122
|
-
workspaceId,
|
|
123
|
-
scope: payload.scope,
|
|
124
|
-
subjectId: grant.subjectId,
|
|
125
|
-
allowOrganization: payload.scope === "organization",
|
|
126
|
-
name,
|
|
127
|
-
description: payload.description ?? null,
|
|
128
|
-
variables: payload.variables.map((variable) => ({
|
|
129
|
-
name: variable.name,
|
|
130
|
-
valueEncrypted: encryptVariableSetValue(key, variable.value),
|
|
131
|
-
})),
|
|
132
|
-
});
|
|
133
|
-
await recordVariableSetAuditEvent(db, {
|
|
134
|
-
grant,
|
|
135
|
-
action: "variable_set.created",
|
|
136
|
-
variableSetId: created.id,
|
|
137
|
-
});
|
|
138
|
-
return c.json(created, 201);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
if (prefix.endsWith("/variable-sets")) {
|
|
142
|
-
app.post(`${prefix}/resolve-attachments`, async (c) => {
|
|
143
|
-
const workspaceId = c.req.param("workspaceId")!;
|
|
144
|
-
const grant = await requireAccessGrant(c, deps, workspaceId);
|
|
145
|
-
requirePermission(grant, "variable-sets:attach");
|
|
146
|
-
requirePermission(grant, "variable-sets:use");
|
|
147
|
-
const payload = ResolveVariableSetAttachmentsRequest.parse(await c.req.json());
|
|
148
|
-
const variableSets = await resolveVariableSetAttachments(
|
|
149
|
-
db,
|
|
150
|
-
{
|
|
151
|
-
accountId: grant.accountId,
|
|
152
|
-
workspaceId,
|
|
153
|
-
subjectId: grant.subjectId,
|
|
154
|
-
},
|
|
155
|
-
payload.variableSetIds,
|
|
156
|
-
);
|
|
157
|
-
return c.json(ResolveVariableSetAttachmentsResponse.parse({ variableSets }));
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
app.get(`${prefix}/:variableSetId`, async (c) => {
|
|
162
|
-
const workspaceId = c.req.param("workspaceId")!;
|
|
163
|
-
const grant = await requireAccessGrant(c, deps, workspaceId);
|
|
164
|
-
requirePermission(grant, "variable-sets:read");
|
|
165
|
-
requirePermission(grant, "secrets:list");
|
|
166
|
-
return c.json(await requireVariableSetForApi(db, grant, c.req.param("variableSetId")!));
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
if (prefix.endsWith("/variable-sets")) {
|
|
170
|
-
app.get(`${prefix}/:variableSetId/variables/:name`, async (c) => {
|
|
171
|
-
const workspaceId = c.req.param("workspaceId")!;
|
|
172
|
-
const grant = await requireAccessGrant(c, deps, workspaceId);
|
|
173
|
-
requirePermission(grant, "variable-sets:read");
|
|
174
|
-
requireLiteralPermission(grant, "secrets:read");
|
|
175
|
-
const key = requireVariableSetEncryption(settings);
|
|
176
|
-
const name = parseVariableName(c.req.param("name")!);
|
|
177
|
-
const secret = await readVariableSetSecretAtomically(db, {
|
|
178
|
-
accountId: grant.accountId,
|
|
179
|
-
workspaceId,
|
|
180
|
-
subjectId: grant.subjectId,
|
|
181
|
-
variableSetId: c.req.param("variableSetId")!,
|
|
182
|
-
name,
|
|
183
|
-
actor: { kind: "subject" },
|
|
184
|
-
decrypt: (valueEncrypted) => decryptVariableSetValue(key, valueEncrypted),
|
|
185
|
-
});
|
|
186
|
-
if (!secret) {
|
|
187
|
-
throw new HTTPException(404, {
|
|
188
|
-
message: "variable set variable not found",
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
return c.json(secret);
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
app.patch(`${prefix}/:variableSetId`, async (c) => {
|
|
196
|
-
const workspaceId = c.req.param("workspaceId")!;
|
|
197
|
-
const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
|
|
198
|
-
const grant = authorization.grant;
|
|
199
|
-
requirePermission(grant, "variable-sets:write");
|
|
200
|
-
const variableSet = await requireVariableSetForApi(db, grant, c.req.param("variableSetId")!);
|
|
201
|
-
const allowOrganization =
|
|
202
|
-
variableSet.scope === "organization" &&
|
|
203
|
-
authorization.accountGrant?.permissions.includes("account:admin") === true;
|
|
204
|
-
if (variableSet.scope === "organization" && !allowOrganization) {
|
|
205
|
-
throw new HTTPException(403, {
|
|
206
|
-
message: "missing permission: account:admin",
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
const payload = UpdateVariableSetRequest.parse(await c.req.json());
|
|
210
|
-
const name = payload.name !== undefined ? trimmedVariableSetName(payload.name) : undefined;
|
|
211
|
-
if (name !== undefined && name !== variableSet.name) {
|
|
212
|
-
const existing = await getVariableSetByName(
|
|
213
|
-
db,
|
|
214
|
-
{
|
|
215
|
-
accountId: grant.accountId,
|
|
216
|
-
workspaceId,
|
|
217
|
-
subjectId: grant.subjectId,
|
|
218
|
-
},
|
|
219
|
-
name,
|
|
220
|
-
variableSet.scope,
|
|
221
|
-
);
|
|
222
|
-
if (existing && existing.id !== variableSet.id) {
|
|
223
|
-
throw new HTTPException(409, {
|
|
224
|
-
message: `variable set name is already in use: ${name}`,
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
const updated = await updateVariableSet(
|
|
229
|
-
db,
|
|
230
|
-
{ accountId: grant.accountId, workspaceId, subjectId: grant.subjectId },
|
|
231
|
-
variableSet.id,
|
|
232
|
-
{
|
|
233
|
-
...(name !== undefined ? { name } : {}),
|
|
234
|
-
...(payload.description !== undefined ? { description: payload.description } : {}),
|
|
235
|
-
allowOrganization,
|
|
236
|
-
},
|
|
237
|
-
);
|
|
238
|
-
await recordVariableSetAuditEvent(db, {
|
|
239
|
-
grant,
|
|
240
|
-
action: "variable_set.updated",
|
|
241
|
-
variableSetId: variableSet.id,
|
|
242
|
-
});
|
|
243
|
-
return c.json(updated);
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
app.delete(`${prefix}/:variableSetId`, async (c) => {
|
|
247
|
-
const workspaceId = c.req.param("workspaceId")!;
|
|
248
|
-
const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
|
|
249
|
-
const grant = authorization.grant;
|
|
250
|
-
requirePermission(grant, "variable-sets:write");
|
|
251
|
-
requirePermission(grant, "secrets:write");
|
|
252
|
-
const variableSet = await requireVariableSetForApi(db, grant, c.req.param("variableSetId")!);
|
|
253
|
-
const allowOrganization =
|
|
254
|
-
variableSet.scope === "organization" &&
|
|
255
|
-
authorization.accountGrant?.permissions.includes("account:admin") === true;
|
|
256
|
-
if (variableSet.scope === "organization" && !allowOrganization) {
|
|
257
|
-
throw new HTTPException(403, {
|
|
258
|
-
message: "missing permission: account:admin",
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
try {
|
|
262
|
-
await deleteVariableSet(
|
|
263
|
-
db,
|
|
264
|
-
{
|
|
265
|
-
accountId: grant.accountId,
|
|
266
|
-
workspaceId,
|
|
267
|
-
subjectId: grant.subjectId,
|
|
268
|
-
},
|
|
269
|
-
variableSet.id,
|
|
270
|
-
{ allowOrganization },
|
|
271
|
-
);
|
|
272
|
-
} catch (error) {
|
|
273
|
-
if (error instanceof VariableSetAttachedError) {
|
|
274
|
-
throw new HTTPException(409, { message: error.message });
|
|
275
|
-
}
|
|
276
|
-
throw error;
|
|
277
|
-
}
|
|
278
|
-
await recordVariableSetAuditEvent(db, {
|
|
279
|
-
grant,
|
|
280
|
-
action: "variable_set.deleted",
|
|
281
|
-
variableSetId: variableSet.id,
|
|
282
|
-
});
|
|
283
|
-
return c.json({ ok: true });
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
app.put(`${prefix}/:variableSetId/variables/:name`, async (c) => {
|
|
287
|
-
const workspaceId = c.req.param("workspaceId")!;
|
|
288
|
-
const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
|
|
289
|
-
const grant = authorization.grant;
|
|
290
|
-
requirePermission(grant, "variable-sets:write");
|
|
291
|
-
requirePermission(grant, "secrets:write");
|
|
292
|
-
const key = requireVariableSetEncryption(settings);
|
|
293
|
-
const name = parseVariableName(c.req.param("name")!);
|
|
294
|
-
const variableSet = await requireVariableSetForApi(db, grant, c.req.param("variableSetId")!);
|
|
295
|
-
const allowOrganization =
|
|
296
|
-
variableSet.scope === "organization" &&
|
|
297
|
-
authorization.accountGrant?.permissions.includes("account:admin") === true;
|
|
298
|
-
if (variableSet.scope === "organization" && !allowOrganization) {
|
|
299
|
-
throw new HTTPException(403, {
|
|
300
|
-
message: "missing permission: account:admin",
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
const payload = SetVariableSetVariableRequest.parse(await c.req.json());
|
|
304
|
-
const exists = variableSet.variables.some((variable) => variable.name === name);
|
|
305
|
-
if (!exists && variableSet.variables.length >= MAX_VARIABLES_PER_ENVIRONMENT) {
|
|
306
|
-
throw new HTTPException(422, {
|
|
307
|
-
message: `a variable set supports at most ${MAX_VARIABLES_PER_ENVIRONMENT} variables`,
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
const metadata = await setVariableSetVariable(db, {
|
|
311
|
-
accountId: grant.accountId,
|
|
312
|
-
workspaceId,
|
|
313
|
-
subjectId: grant.subjectId,
|
|
314
|
-
variableSetId: variableSet.id,
|
|
315
|
-
name,
|
|
316
|
-
valueEncrypted: encryptVariableSetValue(key, payload.value),
|
|
317
|
-
allowOrganization,
|
|
318
|
-
});
|
|
319
|
-
await recordVariableSetAuditEvent(db, {
|
|
320
|
-
grant,
|
|
321
|
-
action: "variable_set.variable.set",
|
|
322
|
-
variableSetId: variableSet.id,
|
|
323
|
-
variableName: name,
|
|
324
|
-
});
|
|
325
|
-
return c.json(metadata);
|
|
326
|
-
});
|
|
327
|
-
|
|
328
|
-
app.delete(`${prefix}/:variableSetId/variables/:name`, async (c) => {
|
|
329
|
-
const workspaceId = c.req.param("workspaceId")!;
|
|
330
|
-
const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
|
|
331
|
-
const grant = authorization.grant;
|
|
332
|
-
requirePermission(grant, "variable-sets:write");
|
|
333
|
-
requirePermission(grant, "secrets:write");
|
|
334
|
-
const name = parseVariableName(c.req.param("name")!);
|
|
335
|
-
const variableSet = await requireVariableSetForApi(db, grant, c.req.param("variableSetId")!);
|
|
336
|
-
const allowOrganization =
|
|
337
|
-
variableSet.scope === "organization" &&
|
|
338
|
-
authorization.accountGrant?.permissions.includes("account:admin") === true;
|
|
339
|
-
if (variableSet.scope === "organization" && !allowOrganization) {
|
|
340
|
-
throw new HTTPException(403, {
|
|
341
|
-
message: "missing permission: account:admin",
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
const deleted = await deleteVariableSetVariable(db, {
|
|
345
|
-
accountId: grant.accountId,
|
|
346
|
-
workspaceId,
|
|
347
|
-
subjectId: grant.subjectId,
|
|
348
|
-
variableSetId: variableSet.id,
|
|
349
|
-
name,
|
|
350
|
-
allowOrganization,
|
|
351
|
-
});
|
|
352
|
-
if (!deleted) {
|
|
353
|
-
throw new HTTPException(404, {
|
|
354
|
-
message: "variable set variable not found",
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
await recordVariableSetAuditEvent(db, {
|
|
358
|
-
grant,
|
|
359
|
-
action: "variable_set.variable.deleted",
|
|
360
|
-
variableSetId: variableSet.id,
|
|
361
|
-
variableName: name,
|
|
362
|
-
});
|
|
363
|
-
return c.json({ ok: true });
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/** @deprecated use registerVariableSetRoutes */
|
|
369
|
-
export const registerEnvironmentRoutes = registerVariableSetRoutes;
|
|
370
|
-
|
|
371
|
-
function parseVariableName(raw: string): string {
|
|
372
|
-
const parsed = VariableSetVariableName.safeParse(raw);
|
|
373
|
-
if (!parsed.success) {
|
|
374
|
-
throw new HTTPException(422, {
|
|
375
|
-
message: "variable set variable names must match ^[A-Z][A-Z0-9_]*$",
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
assertAllowedVariableSetVariableName(parsed.data);
|
|
379
|
-
return parsed.data;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
function trimmedVariableSetName(name: string): string {
|
|
383
|
-
const trimmed = name.trim();
|
|
384
|
-
if (!trimmed) {
|
|
385
|
-
throw new HTTPException(422, { message: "variable set name is required" });
|
|
386
|
-
}
|
|
387
|
-
return trimmed;
|
|
388
|
-
}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import type { Hono } from "hono";
|
|
2
|
-
import { HTTPException } from "hono/http-exception";
|
|
3
|
-
import { z } from "zod";
|
|
4
|
-
import {
|
|
5
|
-
CreateHostMcpBindingRequest,
|
|
6
|
-
IssueHostMcpDelegationRequest,
|
|
7
|
-
} from "@opengeni/contracts/host-mcp-bindings";
|
|
8
|
-
import {
|
|
9
|
-
createHostMcpBinding,
|
|
10
|
-
getHostMcpBinding,
|
|
11
|
-
revokeHostMcpBinding,
|
|
12
|
-
issueHostMcpDelegation,
|
|
13
|
-
getHostMcpDelegation,
|
|
14
|
-
revokeHostMcpDelegation,
|
|
15
|
-
HostMcpDelegationAuthorityError,
|
|
16
|
-
HostMcpBindingConflictError,
|
|
17
|
-
withWorkspaceSubjectRls,
|
|
18
|
-
} from "@opengeni/db";
|
|
19
|
-
import {
|
|
20
|
-
requireAccessGrantAuthorization,
|
|
21
|
-
prepareHostMcpOwnerAuthorization,
|
|
22
|
-
type ApiRouteDeps,
|
|
23
|
-
} from "@opengeni/core";
|
|
24
|
-
|
|
25
|
-
/** Registration is not an execution grant. The durable runtime must separately
|
|
26
|
-
* validate the exact binding generation and accepted execution context. */
|
|
27
|
-
export function registerHostMcpBindingRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
28
|
-
for (const entity of ["bindings", "delegations"] as const) {
|
|
29
|
-
app.on(
|
|
30
|
-
["GET", "POST"],
|
|
31
|
-
[
|
|
32
|
-
`/v1/workspaces/:workspaceId/host-mcp-${entity}`,
|
|
33
|
-
`/v1/workspaces/:workspaceId/host-mcp-${entity}/:bindingId`,
|
|
34
|
-
`/v1/workspaces/:workspaceId/host-mcp-${entity}/:bindingId/revoke`,
|
|
35
|
-
],
|
|
36
|
-
async (c) => {
|
|
37
|
-
const workspaceId = c.req.param("workspaceId")!;
|
|
38
|
-
const bindingId = c.req.param("bindingId");
|
|
39
|
-
const method = c.req.method;
|
|
40
|
-
const revoke = c.req.path.endsWith("/revoke");
|
|
41
|
-
if (
|
|
42
|
-
!(
|
|
43
|
-
(method === "POST" && !bindingId) ||
|
|
44
|
-
(method === "GET" && bindingId && !revoke) ||
|
|
45
|
-
(method === "POST" && bindingId && revoke)
|
|
46
|
-
)
|
|
47
|
-
)
|
|
48
|
-
throw new HTTPException(404, { message: "not found" });
|
|
49
|
-
const permission = method === "GET" ? "connections:read" : "connections:write";
|
|
50
|
-
const authorization = await requireAccessGrantAuthorization(
|
|
51
|
-
c,
|
|
52
|
-
deps,
|
|
53
|
-
workspaceId,
|
|
54
|
-
permission,
|
|
55
|
-
);
|
|
56
|
-
const authorizeCommit = prepareHostMcpOwnerAuthorization(
|
|
57
|
-
authorization,
|
|
58
|
-
workspaceId,
|
|
59
|
-
permission,
|
|
60
|
-
);
|
|
61
|
-
if (bindingId) z.string().uuid().parse(bindingId);
|
|
62
|
-
const createInput =
|
|
63
|
-
method === "POST" && !bindingId
|
|
64
|
-
? (entity === "bindings"
|
|
65
|
-
? CreateHostMcpBindingRequest
|
|
66
|
-
: IssueHostMcpDelegationRequest
|
|
67
|
-
).parse(await c.req.json())
|
|
68
|
-
: null;
|
|
69
|
-
const revokeInput = revoke
|
|
70
|
-
? z
|
|
71
|
-
.object({ expectedGeneration: z.number().int().positive().safe() })
|
|
72
|
-
.strict()
|
|
73
|
-
.parse(await c.req.json())
|
|
74
|
-
: null;
|
|
75
|
-
const owner = {
|
|
76
|
-
accountId: authorization.grant.accountId,
|
|
77
|
-
workspaceId,
|
|
78
|
-
subjectId: authorization.grant.subjectId,
|
|
79
|
-
};
|
|
80
|
-
try {
|
|
81
|
-
const result = await withWorkspaceSubjectRls(
|
|
82
|
-
deps.db,
|
|
83
|
-
workspaceId,
|
|
84
|
-
owner.subjectId,
|
|
85
|
-
async (tx) => {
|
|
86
|
-
const effectiveOwner = await authorizeCommit(tx);
|
|
87
|
-
if (createInput)
|
|
88
|
-
return entity === "bindings"
|
|
89
|
-
? createHostMcpBinding(tx, effectiveOwner, createInput)
|
|
90
|
-
: issueHostMcpDelegation(tx, effectiveOwner, createInput);
|
|
91
|
-
const existing = await (
|
|
92
|
-
entity === "bindings" ? getHostMcpBinding : getHostMcpDelegation
|
|
93
|
-
)(tx, effectiveOwner, bindingId!);
|
|
94
|
-
if (!existing)
|
|
95
|
-
throw new HTTPException(404, {
|
|
96
|
-
message:
|
|
97
|
-
entity === "bindings" ? "Host binding not found" : "Host delegation not found",
|
|
98
|
-
});
|
|
99
|
-
return revokeInput
|
|
100
|
-
? (entity === "bindings" ? revokeHostMcpBinding : revokeHostMcpDelegation)(
|
|
101
|
-
tx,
|
|
102
|
-
effectiveOwner,
|
|
103
|
-
bindingId!,
|
|
104
|
-
revokeInput.expectedGeneration,
|
|
105
|
-
)
|
|
106
|
-
: existing;
|
|
107
|
-
},
|
|
108
|
-
);
|
|
109
|
-
return c.json(result, createInput ? 201 : 200);
|
|
110
|
-
} catch (error) {
|
|
111
|
-
if (error instanceof HostMcpDelegationAuthorityError)
|
|
112
|
-
throw new HTTPException(403, { message: "Host delegation authority unavailable" });
|
|
113
|
-
if (error instanceof HostMcpBindingConflictError)
|
|
114
|
-
throw new HTTPException(409, {
|
|
115
|
-
message: "Host binding changed; reload before retrying",
|
|
116
|
-
});
|
|
117
|
-
throw error;
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { Hono } from "hono";
|
|
2
|
-
import { hostMcpResolverForRequest, type ApiRouteDeps } from "@opengeni/core";
|
|
3
|
-
|
|
4
|
-
export function registerHostMcpResolverRoutes(app: Hono, deps: ApiRouteDeps): void {
|
|
5
|
-
const path = "/v1/organizations/:organizationId/mcp-credential-resolvers/:externalSource";
|
|
6
|
-
app.get(path, async (context) =>
|
|
7
|
-
context.json(
|
|
8
|
-
await hostMcpResolverForRequest(
|
|
9
|
-
context,
|
|
10
|
-
deps,
|
|
11
|
-
context.req.param("organizationId"),
|
|
12
|
-
context.req.param("externalSource"),
|
|
13
|
-
"get",
|
|
14
|
-
),
|
|
15
|
-
),
|
|
16
|
-
);
|
|
17
|
-
app.put(path, async (context) =>
|
|
18
|
-
context.json(
|
|
19
|
-
await hostMcpResolverForRequest(
|
|
20
|
-
context,
|
|
21
|
-
deps,
|
|
22
|
-
context.req.param("organizationId"),
|
|
23
|
-
context.req.param("externalSource"),
|
|
24
|
-
"put",
|
|
25
|
-
await context.req.json().catch(() => null),
|
|
26
|
-
),
|
|
27
|
-
),
|
|
28
|
-
);
|
|
29
|
-
app.post(`${path}/revoke`, async (context) =>
|
|
30
|
-
context.json(
|
|
31
|
-
await hostMcpResolverForRequest(
|
|
32
|
-
context,
|
|
33
|
-
deps,
|
|
34
|
-
context.req.param("organizationId"),
|
|
35
|
-
context.req.param("externalSource"),
|
|
36
|
-
"revoke",
|
|
37
|
-
await context.req.json().catch(() => null),
|
|
38
|
-
),
|
|
39
|
-
),
|
|
40
|
-
);
|
|
41
|
-
}
|