@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,7 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
normalizeSlackScopes,
|
|
3
|
+
OPENGENI_SLACK_REST_USER_SCOPES,
|
|
4
|
+
slackRestMcpToolsForScopes,
|
|
5
|
+
} from "@opengeni/contracts/slack-rest-mcp";
|
|
1
6
|
import { OPENGENI_PERSONAL_SLACK_MCP_URL, type ConnectionOwnership } from "@opengeni/contracts";
|
|
2
7
|
import type { Settings } from "@opengeni/config";
|
|
3
8
|
import { HTTPException } from "hono/http-exception";
|
|
4
9
|
import { z } from "zod";
|
|
10
|
+
import {
|
|
11
|
+
GMAIL_REST_MCP_TOOLS,
|
|
12
|
+
gmailToolAvailableOnDeployment,
|
|
13
|
+
gmailToolSupportsScopes,
|
|
14
|
+
} from "@opengeni/runtime/gmail-rest-mcp";
|
|
5
15
|
import { canonicalProviderDomain } from "./provider-domain";
|
|
6
16
|
|
|
7
17
|
/**
|
|
@@ -16,10 +26,9 @@ import { canonicalProviderDomain } from "./provider-domain";
|
|
|
16
26
|
*
|
|
17
27
|
* Profiles come from two layers:
|
|
18
28
|
*
|
|
19
|
-
* 1. Built-in profiles
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* the fences never depend on catalog import state.
|
|
29
|
+
* 1. Built-in profiles pin known authorization servers and protocol quirks.
|
|
30
|
+
* Ownership defaults guide setup; users may choose personal or workspace.
|
|
31
|
+
* Authorization-server pins never depend on catalog import state.
|
|
23
32
|
* 2. A validated `oauthProfile` object on a global catalog row (curated
|
|
24
33
|
* overlay -> importer -> `capability_catalog_items.metadata`). A catalog
|
|
25
34
|
* profile applies only when no built-in matches, and it can only narrow the
|
|
@@ -81,10 +90,10 @@ export type OAuthProviderProfile = {
|
|
|
81
90
|
requireExactMcpUrl?: { url: string; message: string };
|
|
82
91
|
/** Deployment-managed client credentials must be configured (503 otherwise). */
|
|
83
92
|
requireDeploymentClient?: { key: DeploymentManagedClientKey; message: string };
|
|
84
|
-
/**
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
|
|
93
|
+
/** Suggested ownership; explicit choices remain subject to requiredOwnership. */
|
|
94
|
+
defaultOwnership?: ConnectionOwnership;
|
|
95
|
+
/** Built-in-only ownership restriction, including old reconnect/callback state. */
|
|
96
|
+
requiredOwnership?: { ownership: ConnectionOwnership; message: string };
|
|
88
97
|
/** Bind reconnect/dedupe to the exact mcpUrl, not just the provider domain. */
|
|
89
98
|
exactMcpBinding: boolean;
|
|
90
99
|
/** How an existing connection is chosen for reconnect coalescing. */
|
|
@@ -108,12 +117,35 @@ export type OAuthProviderProfile = {
|
|
|
108
117
|
extraAuthorizeParams?: Readonly<Record<string, string>>;
|
|
109
118
|
/** Exact scope override; the caller can never widen past it. */
|
|
110
119
|
requestedScopes?: readonly string[];
|
|
120
|
+
/** Reviewed local bridge grant normalization and token verification. Catalog profiles cannot supply code. */
|
|
121
|
+
normalizeGrantedScopes?: (scopes: readonly string[] | string) => string[];
|
|
122
|
+
reportedScopesRequired?: boolean;
|
|
123
|
+
/** Built-in durable API bridges may refuse a new grant without offline access. */
|
|
124
|
+
freshRefreshTokenRequired?: boolean;
|
|
125
|
+
/** The reviewed bridge exposes one tool contract, not a partial-scope variant. */
|
|
126
|
+
fullRequestedScopesRequired?: boolean;
|
|
127
|
+
/** Built-in web OAuth clients must use a configured secret and provider-supported authentication. */
|
|
128
|
+
confidentialClientRequired?: boolean;
|
|
129
|
+
/** Built-in API bridge discovery; catalog metadata cannot redirect this seam. */
|
|
130
|
+
providerOAuthDiscovery?: { issuer: string; metadataUrl: string };
|
|
131
|
+
localToolVerification?: {
|
|
132
|
+
url: string;
|
|
133
|
+
method?: "GET" | "POST";
|
|
134
|
+
/** An API bridge may require a verified account before accepting a grant. */
|
|
135
|
+
required?: boolean;
|
|
136
|
+
/** Distinguish a rejected OAuth grant from a temporary verification failure. */
|
|
137
|
+
isRejectedGrant?: (payload: Record<string, unknown>) => boolean;
|
|
138
|
+
validateIdentity: (payload: Record<string, unknown>) => Record<string, string>;
|
|
139
|
+
toolsForScopes: (
|
|
140
|
+
scopes: readonly string[],
|
|
141
|
+
deployment: { gmailWatchTopicName?: string | undefined },
|
|
142
|
+
) => Array<{ name: string; description?: string }>;
|
|
143
|
+
};
|
|
111
144
|
};
|
|
112
145
|
|
|
113
146
|
export const DEFAULT_OAUTH_PROFILE: OAuthProviderProfile = {
|
|
114
147
|
key: "default",
|
|
115
148
|
match: {},
|
|
116
|
-
allowedOwnership: ["workspace", "personal"],
|
|
117
149
|
exactMcpBinding: false,
|
|
118
150
|
connectionSelection: "first_active",
|
|
119
151
|
sendResourceParameter: true,
|
|
@@ -138,9 +170,6 @@ const HOSTED_SLACK_PROFILE: OAuthProviderProfile = {
|
|
|
138
170
|
key: "slack",
|
|
139
171
|
message: "Slack MCP OAuth requires OPENGENI_SLACK_CLIENT_ID and OPENGENI_SLACK_CLIENT_SECRET",
|
|
140
172
|
},
|
|
141
|
-
allowedOwnership: ["personal"],
|
|
142
|
-
ownershipMessage:
|
|
143
|
-
"Slack's hosted MCP connection is personal only; install the OpenGeni Slack bot for workspace access",
|
|
144
173
|
exactMcpBinding: true,
|
|
145
174
|
connectionSelection: "canonical_personal",
|
|
146
175
|
authorizationServer: {
|
|
@@ -151,14 +180,51 @@ const HOSTED_SLACK_PROFILE: OAuthProviderProfile = {
|
|
|
151
180
|
skipInLocalTest: true,
|
|
152
181
|
},
|
|
153
182
|
sendResourceParameter: true,
|
|
183
|
+
requestedScopes: OPENGENI_SLACK_REST_USER_SCOPES,
|
|
184
|
+
normalizeGrantedScopes: normalizeSlackScopes,
|
|
185
|
+
reportedScopesRequired: true,
|
|
186
|
+
localToolVerification: {
|
|
187
|
+
url: "https://slack.com/api/auth.test",
|
|
188
|
+
isRejectedGrant: (payload) =>
|
|
189
|
+
payload.ok === false &&
|
|
190
|
+
["invalid_auth", "not_authed", "token_revoked", "account_inactive", "token_expired"].includes(
|
|
191
|
+
typeof payload.error === "string" ? payload.error : "",
|
|
192
|
+
),
|
|
193
|
+
validateIdentity: (payload) => {
|
|
194
|
+
if (
|
|
195
|
+
payload.ok !== true ||
|
|
196
|
+
typeof payload.team_id !== "string" ||
|
|
197
|
+
!payload.team_id ||
|
|
198
|
+
typeof payload.user_id !== "string" ||
|
|
199
|
+
!payload.user_id ||
|
|
200
|
+
payload.bot_id
|
|
201
|
+
) {
|
|
202
|
+
throw new Error("Slack account verification failed");
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
slackTeamId: payload.team_id,
|
|
206
|
+
slackUserId: payload.user_id,
|
|
207
|
+
...(typeof payload.team === "string" && payload.team.trim()
|
|
208
|
+
? { slackTeamName: payload.team }
|
|
209
|
+
: {}),
|
|
210
|
+
...(typeof payload.user === "string" && payload.user.trim()
|
|
211
|
+
? { slackUserName: payload.user }
|
|
212
|
+
: {}),
|
|
213
|
+
};
|
|
214
|
+
},
|
|
215
|
+
toolsForScopes: slackRestMcpToolsForScopes,
|
|
216
|
+
},
|
|
154
217
|
};
|
|
155
218
|
|
|
156
219
|
const OFFICIAL_GMAIL_PROFILE: OAuthProviderProfile = {
|
|
157
220
|
key: "official-gmail",
|
|
158
221
|
match: { mcpUrls: [OFFICIAL_GMAIL_MCP_URL] },
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
222
|
+
requireExactMcpUrl: {
|
|
223
|
+
url: OFFICIAL_GMAIL_MCP_URL,
|
|
224
|
+
message: `Gmail OAuth must use ${OFFICIAL_GMAIL_MCP_URL}`,
|
|
225
|
+
},
|
|
226
|
+
defaultOwnership: "personal",
|
|
227
|
+
requiredOwnership: { ownership: "personal", message: "Gmail connections must be personal-owned" },
|
|
162
228
|
exactMcpBinding: true,
|
|
163
229
|
connectionSelection: "first_active",
|
|
164
230
|
authorizationServer: {
|
|
@@ -185,6 +251,37 @@ const OFFICIAL_GMAIL_PROFILE: OAuthProviderProfile = {
|
|
|
185
251
|
// The Gmail PRM advertises broader grants, including full-mail access. The
|
|
186
252
|
// reviewed connector never lets a caller widen the capability contract.
|
|
187
253
|
requestedScopes: OFFICIAL_GMAIL_MCP_SCOPES,
|
|
254
|
+
reportedScopesRequired: true,
|
|
255
|
+
freshRefreshTokenRequired: true,
|
|
256
|
+
fullRequestedScopesRequired: true,
|
|
257
|
+
confidentialClientRequired: true,
|
|
258
|
+
providerOAuthDiscovery: {
|
|
259
|
+
issuer: GOOGLE_OAUTH_ISSUER_ORIGIN,
|
|
260
|
+
metadataUrl: `${GOOGLE_OAUTH_ISSUER_ORIGIN}/.well-known/openid-configuration`,
|
|
261
|
+
},
|
|
262
|
+
localToolVerification: {
|
|
263
|
+
url: "https://gmail.googleapis.com/gmail/v1/users/me/profile",
|
|
264
|
+
method: "GET",
|
|
265
|
+
required: true,
|
|
266
|
+
validateIdentity: (payload) => {
|
|
267
|
+
if (
|
|
268
|
+
typeof payload.emailAddress !== "string" ||
|
|
269
|
+
!/^[^\s@]+@[^\s@]+$/u.test(payload.emailAddress)
|
|
270
|
+
) {
|
|
271
|
+
throw new Error("Gmail account verification failed");
|
|
272
|
+
}
|
|
273
|
+
return { gmailEmail: payload.emailAddress };
|
|
274
|
+
},
|
|
275
|
+
toolsForScopes: (scopes, deployment) => {
|
|
276
|
+
return GMAIL_REST_MCP_TOOLS.filter(
|
|
277
|
+
(tool) =>
|
|
278
|
+
gmailToolSupportsScopes(tool.name, scopes) &&
|
|
279
|
+
gmailToolAvailableOnDeployment(tool.name, {
|
|
280
|
+
watchTopicName: deployment.gmailWatchTopicName,
|
|
281
|
+
}),
|
|
282
|
+
).map(({ name, description }) => ({ name, ...(description ? { description } : {}) }));
|
|
283
|
+
},
|
|
284
|
+
},
|
|
188
285
|
};
|
|
189
286
|
|
|
190
287
|
const BUILT_IN_OAUTH_PROFILES: readonly OAuthProviderProfile[] = [
|
|
@@ -285,24 +382,7 @@ export function builtInOAuthProfileFor(input: {
|
|
|
285
382
|
|
|
286
383
|
/** Ownership an omitted request defaults to under a profile. */
|
|
287
384
|
export function defaultOwnershipFor(profile: OAuthProviderProfile): ConnectionOwnership {
|
|
288
|
-
return profile.
|
|
289
|
-
? "personal"
|
|
290
|
-
: "workspace";
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
/** Rejects an ownership outside the profile's allowed set with its exact message. */
|
|
294
|
-
export function assertOwnershipAllowed(
|
|
295
|
-
profile: OAuthProviderProfile,
|
|
296
|
-
ownership: ConnectionOwnership,
|
|
297
|
-
): void {
|
|
298
|
-
if (profile.allowedOwnership.includes(ownership)) {
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
throw new HTTPException(422, {
|
|
302
|
-
message:
|
|
303
|
-
profile.ownershipMessage ??
|
|
304
|
-
`this integration allows only ${profile.allowedOwnership.join(" or ")} connections`,
|
|
305
|
-
});
|
|
385
|
+
return profile.defaultOwnership ?? "workspace";
|
|
306
386
|
}
|
|
307
387
|
|
|
308
388
|
/** Enforces a profile's authorization-server origin pins with its exact message. */
|
|
@@ -375,10 +455,7 @@ export const catalogOAuthProfileSchema = z
|
|
|
375
455
|
pinnedIssuerOrigins: z.array(z.string().url()).min(1).optional(),
|
|
376
456
|
pinnedEndpointOrigins: z.array(z.string().url()).min(1).optional(),
|
|
377
457
|
sendResourceParameter: z.boolean().optional(),
|
|
378
|
-
|
|
379
|
-
.array(z.enum(["personal", "workspace"]))
|
|
380
|
-
.min(1)
|
|
381
|
-
.optional(),
|
|
458
|
+
defaultOwnership: z.enum(["personal", "workspace"]).optional(),
|
|
382
459
|
requestedScopes: z.array(z.string().min(1)).min(1).optional(),
|
|
383
460
|
extraAuthorizeParams: z
|
|
384
461
|
.record(z.string(), z.string())
|
|
@@ -425,7 +502,7 @@ export function catalogMcpUrlKey(value: string): string {
|
|
|
425
502
|
*
|
|
426
503
|
* A present-but-invalid profile fails closed with a 422: the row's operator
|
|
427
504
|
* declared constraints, and silently degrading to the default profile would
|
|
428
|
-
* drop an
|
|
505
|
+
* drop an origin pin on a JSON typo.
|
|
429
506
|
*/
|
|
430
507
|
export function oauthProfileFromCatalog(mcpUrl: string, raw: unknown): OAuthProviderProfile {
|
|
431
508
|
const parsed = catalogOAuthProfileSchema.safeParse(raw);
|
|
@@ -451,13 +528,7 @@ export function oauthProfileFromCatalog(mcpUrl: string, raw: unknown): OAuthProv
|
|
|
451
528
|
return {
|
|
452
529
|
key: `catalog:${mcpUrl}`,
|
|
453
530
|
match: { mcpUrls: [mcpUrl] },
|
|
454
|
-
|
|
455
|
-
...(data.allowedOwnership && !data.allowedOwnership.includes("workspace")
|
|
456
|
-
? {
|
|
457
|
-
ownershipMessage:
|
|
458
|
-
"this integration allows only personal connections; each workspace member must connect their own account",
|
|
459
|
-
}
|
|
460
|
-
: {}),
|
|
531
|
+
...(data.defaultOwnership ? { defaultOwnership: data.defaultOwnership } : {}),
|
|
461
532
|
exactMcpBinding: Boolean(data.exactMcpUrl),
|
|
462
533
|
...(data.exactMcpUrl
|
|
463
534
|
? {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { OnePasswordVaultProviderFactory } from "@opengeni/core";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Loads the 1Password adapter (and its ~14 MB WASM SDK) only when a request
|
|
5
|
+
* first touches 1Password. The only allowed import edge, besides apps/worker,
|
|
6
|
+
* is this dynamic one (OP-5, packages/vaults-onepassword/test/import-guard.test.ts).
|
|
7
|
+
*/
|
|
8
|
+
export const loadOnePasswordVaultProvider: OnePasswordVaultProviderFactory = async (input) => {
|
|
9
|
+
const { vaultProviderForOnePasswordConnection } = await import("@opengeni/vaults-onepassword");
|
|
10
|
+
return vaultProviderForOnePasswordConnection(input);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/** The offline token check and connection-scoped provider used by the install route. */
|
|
14
|
+
export async function loadOnePasswordModule() {
|
|
15
|
+
return await import("@opengeni/vaults-onepassword");
|
|
16
|
+
}
|
|
@@ -592,7 +592,7 @@ async function personalGitHubProviderFetch(
|
|
|
592
592
|
headers: {
|
|
593
593
|
accept: "application/vnd.github+json",
|
|
594
594
|
authorization,
|
|
595
|
-
"user-agent": "
|
|
595
|
+
"user-agent": "Opengeni",
|
|
596
596
|
"x-github-api-version": GITHUB_API_VERSION,
|
|
597
597
|
},
|
|
598
598
|
signal: AbortSignal.timeout(GITHUB_REQUEST_TIMEOUT_MS),
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { withOrganizationIntegrationAcquisition } from "@opengeni/db/organization-integration-policy";
|
|
2
|
+
import { claimOAuthAcquisition, finishOAuthAcquisition } from "./oauth-client";
|
|
1
3
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
2
4
|
import { ExternalActorContinuation } from "@opengeni/contracts/external-identities";
|
|
3
5
|
import { requireConnectOwnerAuthority } from "./connect-authority";
|
|
@@ -23,7 +25,6 @@ import {
|
|
|
23
25
|
} from "@opengeni/core";
|
|
24
26
|
import {
|
|
25
27
|
consumeIntegrationOAuthStateNonce,
|
|
26
|
-
claimConnectOperation,
|
|
27
28
|
finishConnectOperation,
|
|
28
29
|
getConnectAttempt,
|
|
29
30
|
type Database,
|
|
@@ -47,8 +48,10 @@ import {
|
|
|
47
48
|
} from "../connection-ownership";
|
|
48
49
|
import {
|
|
49
50
|
integrationBaseUrl,
|
|
51
|
+
oauthStateFailureReturn,
|
|
50
52
|
oauthStateTtlMs,
|
|
51
53
|
requireIntegrationsStateSecret,
|
|
54
|
+
workspaceIntegrationsPath,
|
|
52
55
|
} from "./oauth-client";
|
|
53
56
|
|
|
54
57
|
const PERSONAL_GITHUB_OAUTH_STATE_KIND = "personal_github_oauth";
|
|
@@ -216,6 +219,7 @@ export async function startPersonalGitHubOAuth(
|
|
|
216
219
|
) {
|
|
217
220
|
const oauth = requirePersonalGitHubOAuthSettings(deps.settings);
|
|
218
221
|
const { grant } = input.access;
|
|
222
|
+
await withOrganizationIntegrationAcquisition(deps.db, grant, ["github-personal"], async () => {});
|
|
219
223
|
const existing = input.connectionId
|
|
220
224
|
? await getConnectionMetadata(deps.db, input.workspaceId, input.connectionId, grant.subjectId)
|
|
221
225
|
: null;
|
|
@@ -301,12 +305,18 @@ export async function completePersonalGitHubOAuthCallback(
|
|
|
301
305
|
operationId: `oauth:${state.nonce}`,
|
|
302
306
|
inputDigest: createHash("sha256").update(input.state!).digest("hex"),
|
|
303
307
|
};
|
|
304
|
-
const claim = await
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
308
|
+
const claim = await claimOAuthAcquisition(
|
|
309
|
+
deps.db,
|
|
310
|
+
state,
|
|
311
|
+
{
|
|
312
|
+
...operation,
|
|
313
|
+
expectedRevision: stored.attempt.revision,
|
|
314
|
+
authorize: (tx, _attempt, origin) =>
|
|
315
|
+
requireConnectOwnerAuthority(tx, state!, "connections:write", origin),
|
|
316
|
+
},
|
|
317
|
+
"github-personal",
|
|
318
|
+
Boolean(input.code && !input.error),
|
|
319
|
+
);
|
|
310
320
|
if (claim.status === "replayed") return { redirectTo: exactReturnUrl, exactReturn: true };
|
|
311
321
|
}
|
|
312
322
|
await requirePersonalGitHubCallbackGrant(deps, state);
|
|
@@ -340,6 +350,12 @@ export async function completePersonalGitHubOAuthCallback(
|
|
|
340
350
|
}
|
|
341
351
|
if (input.error) throw new PersonalGitHubCallbackError("provider_denied");
|
|
342
352
|
if (!input.code) throw new PersonalGitHubCallbackError("missing_code");
|
|
353
|
+
await withOrganizationIntegrationAcquisition(
|
|
354
|
+
deps.db,
|
|
355
|
+
state,
|
|
356
|
+
["github-personal"],
|
|
357
|
+
async () => {},
|
|
358
|
+
);
|
|
343
359
|
|
|
344
360
|
const oauth = requirePersonalGitHubOAuthSettings(deps.settings);
|
|
345
361
|
if (
|
|
@@ -474,33 +490,43 @@ export async function completePersonalGitHubOAuthCallback(
|
|
|
474
490
|
});
|
|
475
491
|
};
|
|
476
492
|
if (operation) {
|
|
477
|
-
await
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
493
|
+
await finishOAuthAcquisition(
|
|
494
|
+
deps.db,
|
|
495
|
+
acceptedState,
|
|
496
|
+
{
|
|
497
|
+
...operation,
|
|
498
|
+
authorize: (tx, _attempt, origin) =>
|
|
499
|
+
requireConnectOwnerAuthority(tx, acceptedState, "connections:write", origin),
|
|
500
|
+
commit: async (tx, current) => {
|
|
501
|
+
const connection = await persist(tx);
|
|
502
|
+
if (!connection) throw new PersonalGitHubCallbackError("connection_conflict");
|
|
503
|
+
return {
|
|
504
|
+
...current,
|
|
505
|
+
revision: current.revision + 1,
|
|
506
|
+
state: "complete",
|
|
507
|
+
credentialsCommitted: true,
|
|
508
|
+
nextAction: { type: "none" },
|
|
509
|
+
account: {
|
|
510
|
+
id: connection.id,
|
|
511
|
+
version: connection.version,
|
|
512
|
+
providerId: "github-personal",
|
|
513
|
+
label: identity.login,
|
|
514
|
+
ownership: "personal",
|
|
515
|
+
status: "connected",
|
|
516
|
+
},
|
|
517
|
+
};
|
|
518
|
+
},
|
|
499
519
|
},
|
|
500
|
-
|
|
520
|
+
"github-personal",
|
|
521
|
+
);
|
|
501
522
|
return { redirectTo: exactReturnUrl!, exactReturn: true };
|
|
502
523
|
}
|
|
503
|
-
const connection = await
|
|
524
|
+
const connection = await withOrganizationIntegrationAcquisition(
|
|
525
|
+
deps.db,
|
|
526
|
+
acceptedState,
|
|
527
|
+
["github-personal"],
|
|
528
|
+
persist,
|
|
529
|
+
);
|
|
504
530
|
if (!connection) throw new PersonalGitHubCallbackError("connection_conflict");
|
|
505
531
|
return {
|
|
506
532
|
redirectTo: personalGitHubCallbackReturnUrl(returnBaseUrl, state.returnPath, "success", {
|
|
@@ -512,7 +538,7 @@ export async function completePersonalGitHubOAuthCallback(
|
|
|
512
538
|
return {
|
|
513
539
|
redirectTo: personalGitHubCallbackReturnUrl(
|
|
514
540
|
returnBaseUrl,
|
|
515
|
-
state?.returnPath ??
|
|
541
|
+
state?.returnPath ?? oauthStateFailureReturn(deps.settings, input.state).returnPath,
|
|
516
542
|
"error",
|
|
517
543
|
{ reason: personalGitHubFailureReason(error) },
|
|
518
544
|
),
|
|
@@ -620,7 +646,7 @@ async function exchangePersonalGitHubAuthorizationCode(
|
|
|
620
646
|
headers: {
|
|
621
647
|
accept: "application/json",
|
|
622
648
|
"content-type": "application/x-www-form-urlencoded",
|
|
623
|
-
"user-agent": "
|
|
649
|
+
"user-agent": "Opengeni",
|
|
624
650
|
},
|
|
625
651
|
body: new URLSearchParams({
|
|
626
652
|
client_id: oauth.clientId,
|
|
@@ -679,7 +705,7 @@ async function fetchPersonalGitHubIdentity(
|
|
|
679
705
|
headers: {
|
|
680
706
|
accept: "application/vnd.github+json",
|
|
681
707
|
authorization: `Bearer ${accessToken}`,
|
|
682
|
-
"user-agent": "
|
|
708
|
+
"user-agent": "Opengeni",
|
|
683
709
|
"x-github-api-version": GITHUB_API_VERSION,
|
|
684
710
|
},
|
|
685
711
|
signal: AbortSignal.timeout(GITHUB_REQUEST_TIMEOUT_MS),
|
|
@@ -728,7 +754,7 @@ function parseGitHubScopes(raw: string | null): string[] {
|
|
|
728
754
|
}
|
|
729
755
|
|
|
730
756
|
function personalGitHubReturnPath(workspaceId: string, raw?: string): string {
|
|
731
|
-
const fallback =
|
|
757
|
+
const fallback = workspaceIntegrationsPath(workspaceId);
|
|
732
758
|
if (!raw) return fallback;
|
|
733
759
|
let parsed: URL;
|
|
734
760
|
try {
|