@opengeni/api-router 0.30.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-grant-rls.d.ts +3 -0
- package/dist/admission-trace.d.ts +8 -0
- package/dist/api-websocket.d.ts +18 -0
- package/dist/app.d.ts +50 -2
- package/dist/app.js +12 -1
- package/dist/artifact-catalog-cursor.d.ts +27 -0
- package/dist/auth/managed-auth-attempt-context.d.ts +10 -0
- package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
- package/dist/auth/managed-auth-session-adapter.d.ts +6 -0
- package/dist/auth/managed-auth.d.ts +102 -3
- package/dist/auth/managed-email.d.ts +29 -0
- package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
- package/dist/auth/new-signups-gate.d.ts +23 -0
- package/dist/auth/organization-user-setup.d.ts +80 -0
- package/dist/auth/signup-funnel-metrics.d.ts +44 -0
- package/dist/browser-controller-authority.d.ts +1 -61
- package/dist/browser-ephemeral.d.ts +5 -0
- package/dist/browser-state-authority.d.ts +1 -27
- package/dist/chunk-6TZ5LG3O.js +123948 -0
- package/dist/chunk-6TZ5LG3O.js.map +1 -0
- package/dist/chunk-OGQDXVXY.js +18 -0
- package/dist/chunk-OGQDXVXY.js.map +1 -0
- package/dist/claude-subscription-account-conflicts.d.ts +1 -0
- package/dist/claude-subscription-account-usage.d.ts +39 -0
- package/dist/claude-subscription-oauth.d.ts +25 -0
- package/dist/claude-subscription-profile.d.ts +9 -0
- package/dist/claude-subscription-usage.d.ts +44 -0
- package/dist/claude-workspace-connection.d.ts +15 -0
- package/dist/codemode.d.ts +32 -1
- package/dist/company-brain-okf.d.ts +24 -0
- package/dist/connected-machine-computer-access.d.ts +11 -0
- package/dist/connection-ownership.d.ts +54 -0
- package/dist/controller-data-plane.d.ts +32 -0
- package/dist/editable-artifact-office-import.d.ts +7 -4
- package/dist/editable-artifact-source-session.d.ts +3 -0
- package/dist/editable-artifact-websocket.d.ts +10 -18
- package/dist/editable-artifact-workspace-files.d.ts +1 -1
- package/dist/fatal-process-boundary.d.ts +25 -0
- package/dist/github-access.d.ts +31 -2
- package/dist/http/acting-person.d.ts +24 -0
- package/dist/http/api-contract-compat.d.ts +19 -0
- package/dist/http/api-error.d.ts +27 -1
- package/dist/http/cors.d.ts +17 -0
- package/dist/http/deprecation.d.ts +42 -0
- package/dist/http/interaction-control-error.d.ts +13 -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/request-body.d.ts +27 -0
- package/dist/http/request-source.d.ts +52 -0
- package/dist/http/sse.d.ts +17 -6
- package/dist/http/unmatched-route.d.ts +18 -0
- package/dist/http/user-content.d.ts +36 -0
- package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.js +1129 -166
- package/dist/index.js.map +1 -1
- package/dist/integration-endpoint-test.d.ts +20 -0
- package/dist/integrations/api-integrations.d.ts +2 -2
- package/dist/integrations/atlassian.d.ts +29 -3
- package/dist/integrations/connect-authority.d.ts +1 -0
- package/dist/integrations/connect-callback-return.d.ts +6 -0
- package/dist/integrations/fiken.d.ts +16 -2
- package/dist/integrations/github-app-connect.d.ts +47 -0
- package/dist/integrations/github-installation-proof.d.ts +3 -0
- package/dist/integrations/github-lens-connect.d.ts +116 -0
- package/dist/integrations/github-skill-source.d.ts +1 -5
- package/dist/integrations/google-drive.d.ts +25 -0
- package/dist/integrations/integration-commit-authority.d.ts +13 -0
- package/dist/integrations/marketplace-plugin.d.ts +2691 -0
- package/dist/integrations/oauth-client.d.ts +178 -18
- package/dist/integrations/oauth-profiles.d.ts +222 -0
- package/dist/integrations/oauth-return-path.d.ts +1 -0
- package/dist/integrations/personal-github-repositories.d.ts +84 -0
- package/dist/integrations/personal-github.d.ts +42 -0
- package/dist/integrations/pr-review-provider.d.ts +22 -0
- package/dist/integrations/provider-oauth.d.ts +19 -1
- package/dist/integrations/slack-app-home.d.ts +24 -0
- package/dist/integrations/slack-bot.d.ts +367 -12
- package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
- package/dist/integrations/slack-install.d.ts +20 -0
- package/dist/integrations/slack-interactions.d.ts +113 -10
- package/dist/integrations/slack-mrkdwn.d.ts +41 -0
- package/dist/integrations/slack-routing.d.ts +120 -0
- package/dist/integrations/slack-session-defaults.d.ts +58 -0
- package/dist/integrations/slack-task-file-upload.d.ts +36 -0
- package/dist/integrations/social-oauth.d.ts +7 -0
- package/dist/interaction-agent-access.d.ts +15 -0
- package/dist/interaction-frame-proxy.d.ts +68 -0
- package/dist/interaction-metrics.d.ts +2 -0
- package/dist/mcp/action-catalog-types.d.ts +9 -0
- package/dist/mcp/action-catalog.gen.d.ts +2 -0
- package/dist/mcp/capability-account-readiness.d.ts +7 -0
- package/dist/mcp/child-read-evidence.d.ts +9 -0
- package/dist/mcp/command-read.d.ts +24 -0
- package/dist/mcp/company-profile-agent-admin.d.ts +44 -0
- package/dist/mcp/contract-input.d.ts +11 -0
- package/dist/mcp/documents.d.ts +7 -5
- package/dist/mcp/files.d.ts +2 -2
- package/dist/mcp/first-party-tool-permissions.d.ts +650 -0
- package/dist/mcp/knowledge-entries.d.ts +5 -0
- package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
- package/dist/mcp/receipts.d.ts +9 -0
- package/dist/mcp/request-abort.d.ts +19 -0
- package/dist/mcp/scheduled-task-input.d.ts +1189 -0
- package/dist/mcp/scheduled-task-view.d.ts +22 -4
- package/dist/mcp/server.d.ts +255 -3
- package/dist/mcp/session-event-view.d.ts +94 -0
- package/dist/mcp/session-view.d.ts +66 -2
- package/dist/mcp/session-wait.d.ts +174 -0
- package/dist/mcp-oauth.d.ts +52 -0
- package/dist/model-catalog.d.ts +11 -31
- package/dist/observability.d.ts +3 -1
- package/dist/organization-mcp.d.ts +52 -0
- package/dist/organization-recovery-notifications.d.ts +41 -0
- package/dist/routes/analytics-consent.d.ts +26 -0
- package/dist/routes/api-integrations.d.ts +25 -0
- package/dist/routes/api-keys.d.ts +17 -0
- package/dist/routes/artifact-catalog.d.ts +6 -0
- package/dist/routes/automations.d.ts +19 -0
- package/dist/routes/billing.d.ts +49 -0
- package/dist/routes/browser-sessions.d.ts +71 -3
- 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 +146 -0
- package/dist/routes/codex.d.ts +76 -2
- package/dist/routes/company-brain.d.ts +3 -0
- package/dist/routes/company-profile.d.ts +2 -1
- package/dist/routes/computer-sessions.d.ts +14 -0
- package/dist/routes/connect.d.ts +5 -0
- package/dist/routes/editable-artifacts.d.ts +2 -0
- package/dist/routes/external-identity-links.d.ts +6 -0
- package/dist/routes/feedback.d.ts +3 -0
- package/dist/routes/files.d.ts +4 -0
- package/dist/routes/github-browser-pages.d.ts +12 -0
- package/dist/routes/github.d.ts +2 -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 +30 -1
- package/dist/routes/knowledge.d.ts +3 -0
- package/dist/routes/managed-auth-session-sets.d.ts +26 -0
- package/dist/routes/managed-onboarding.d.ts +29 -0
- package/dist/routes/managed-sign-in-methods.d.ts +6 -0
- package/dist/routes/model-connection-access.d.ts +3 -0
- package/dist/routes/organization-integration-policy.d.ts +3 -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-providers.d.ts +3 -0
- package/dist/routes/organization-recovery.d.ts +19 -0
- package/dist/routes/organization-service-accounts.d.ts +3 -0
- package/dist/routes/organization-sessions.d.ts +26 -0
- package/dist/routes/personal-github-git-broker.d.ts +29 -0
- package/dist/routes/personal-github.d.ts +3 -0
- package/dist/routes/pr-review-github.d.ts +3 -0
- package/dist/routes/pr-review.d.ts +3 -0
- package/dist/routes/session-artifact-associations.d.ts +4 -0
- package/dist/routes/session-history-imports.d.ts +9 -0
- package/dist/routes/sessions.d.ts +44 -6
- package/dist/routes/skill-content.d.ts +4 -0
- package/dist/routes/skill-install-authority.d.ts +6 -0
- package/dist/routes/subscription-account-pools.d.ts +34 -0
- package/dist/routes/subscription-pool-access.d.ts +16 -0
- package/dist/routes/supergrok.d.ts +6 -1
- package/dist/routes/usage-allowances.d.ts +12 -0
- package/dist/routes/user-resource-authorities.d.ts +3 -0
- package/dist/routes/workspace-artifacts.d.ts +2 -1
- package/dist/routes/workspace-capture.d.ts +10 -2
- package/dist/routes/workspace-integrations.d.ts +35 -0
- package/dist/routes/workspace-learning.d.ts +3 -0
- package/dist/routes/workspace-model-providers.d.ts +4 -0
- package/dist/routes/workspaces.d.ts +29 -0
- package/dist/sandbox/auth-callout.d.ts +8 -0
- package/dist/sandbox/channel-a.d.ts +19 -1
- package/dist/sandbox/connection-authority.d.ts +3 -0
- package/dist/sandbox/enrollment.d.ts +9 -1
- package/dist/sandbox/machines.d.ts +5 -2
- package/dist/sandbox/metrics-ingestion.d.ts +28 -20
- package/dist/sandbox/rematerialize.d.ts +2 -0
- package/dist/sandbox/session-attach-variable-sets.d.ts +30 -0
- package/dist/sandbox/viewer.d.ts +26 -1
- package/dist/sandbox-file-artifacts.d.ts +50 -0
- package/dist/scheduled-task-deletion.d.ts +13 -0
- package/dist/session-create-observability.d.ts +5 -0
- package/dist/session-event-view-MPS2OZD3.js +292 -0
- package/dist/session-event-view-MPS2OZD3.js.map +1 -0
- package/dist/site-session-origin.d.ts +13 -0
- package/dist/site-uploads.d.ts +41 -0
- package/dist/slack-reaction-files.d.ts +1 -1
- package/dist/temporal-schedule-cleanup.d.ts +1 -0
- package/dist/temporal-schedule-sync.d.ts +26 -0
- package/dist/transcription/providers/xai-subscription.d.ts +1 -0
- package/dist/transcription/service.d.ts +2 -1
- package/dist/work-discovery-observability.d.ts +33 -0
- package/dist/workspace-artifact-content.d.ts +28 -0
- package/dist/workspace-artifact-provenance.d.ts +7 -0
- package/dist/workspace-delete-observability.d.ts +10 -0
- package/dist/workspace-deletion.d.ts +6 -0
- package/dist/workspace-state-projection.d.ts +3 -5
- package/dist/workspace-tool-gateway-observability.d.ts +17 -0
- package/dist/workspace-tool-gateway.d.ts +123 -0
- package/dist/workspace-webhook-dispatch.d.ts +26 -0
- package/package.json +23 -19
- package/src/access-grant-rls.ts +75 -0
- package/src/admission-trace.ts +14 -0
- package/src/api-websocket.ts +23 -0
- package/src/app.ts +1974 -256
- package/src/artifact-catalog-cursor.ts +60 -0
- package/src/auth/managed-auth-attempt-context.ts +70 -0
- package/src/auth/managed-auth-rate-limits.ts +252 -0
- package/src/auth/managed-auth-session-adapter.ts +222 -0
- package/src/auth/managed-auth.ts +536 -60
- package/src/auth/managed-email.ts +174 -0
- 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 +307 -0
- package/src/auth/signup-funnel-metrics.ts +164 -0
- package/src/browser-controller-authority.ts +1 -186
- package/src/browser-ephemeral.ts +39 -0
- package/src/browser-state-authority.ts +1 -236
- package/src/claude-subscription-account-conflicts.ts +12 -0
- package/src/claude-subscription-account-usage.ts +48 -0
- package/src/claude-subscription-oauth.ts +362 -0
- package/src/claude-subscription-profile.ts +73 -0
- package/src/claude-subscription-usage.ts +97 -0
- package/src/claude-workspace-connection.ts +82 -0
- package/src/codemode.ts +194 -30
- package/src/codex-realtime.ts +8 -2
- package/src/company-brain-okf.ts +340 -0
- package/src/connected-machine-computer-access.ts +33 -0
- package/src/connection-ownership.ts +199 -0
- package/src/controller-data-plane.ts +81 -0
- package/src/editable-artifact-native-kernel.ts +26 -15
- package/src/editable-artifact-office-import.ts +77 -9
- package/src/editable-artifact-production.ts +23 -7
- package/src/editable-artifact-source-session.ts +123 -0
- package/src/editable-artifact-websocket.ts +27 -21
- package/src/editable-artifact-workspace-files.ts +31 -6
- package/src/fatal-process-boundary.ts +246 -0
- package/src/gateway-realtime.ts +1 -1
- package/src/github-access.ts +147 -5
- package/src/http/acting-person.ts +71 -0
- package/src/http/api-contract-compat.ts +49 -0
- package/src/http/api-error.ts +115 -1
- package/src/http/auth.ts +48 -0
- package/src/http/cors.ts +67 -0
- package/src/http/deprecation.ts +118 -0
- package/src/http/interaction-control-error.ts +164 -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/request-body.ts +127 -0
- package/src/http/request-source.ts +178 -0
- package/src/http/sse.ts +486 -132
- package/src/http/unmatched-route.ts +60 -0
- package/src/http/user-content.ts +158 -0
- package/src/http/websocket-upgrade-dispatch.ts +29 -0
- package/src/index.ts +157 -52
- package/src/integration-endpoint-test.ts +291 -0
- package/src/integrations/api-integrations.ts +98 -11
- package/src/integrations/atlassian.ts +474 -136
- package/src/integrations/connect-authority.ts +2 -0
- package/src/integrations/connect-callback-return.ts +86 -0
- package/src/integrations/fiken.ts +354 -64
- package/src/integrations/github-app-connect.ts +435 -0
- package/src/integrations/github-installation-proof.ts +60 -0
- package/src/integrations/github-lens-connect.ts +76 -0
- package/src/integrations/github-skill-source.ts +2 -142
- package/src/integrations/google-drive.ts +820 -222
- package/src/integrations/integration-commit-authority.ts +69 -0
- package/src/integrations/marketplace-plugin.ts +48 -0
- package/src/integrations/oauth-client.ts +1356 -459
- package/src/integrations/oauth-profiles.ts +537 -0
- package/src/integrations/oauth-return-path.ts +18 -0
- package/src/integrations/personal-github-repositories.ts +674 -0
- package/src/integrations/personal-github.ts +825 -0
- package/src/integrations/pr-review-provider.ts +246 -0
- package/src/integrations/provider-oauth.ts +250 -22
- package/src/integrations/slack-app-home.ts +300 -0
- package/src/integrations/slack-bot.ts +963 -239
- package/src/integrations/slack-file-upload-flow.ts +147 -0
- package/src/integrations/slack-install.ts +83 -0
- package/src/integrations/slack-interactions.ts +3170 -474
- package/src/integrations/slack-mrkdwn.ts +193 -0
- package/src/integrations/slack-routing.ts +337 -0
- package/src/integrations/slack-session-defaults.ts +224 -0
- package/src/integrations/slack-task-file-upload.ts +323 -0
- package/src/integrations/social-oauth.ts +213 -15
- package/src/interaction-agent-access.ts +48 -0
- package/src/interaction-frame-proxy.ts +409 -0
- package/src/interaction-metrics.ts +30 -0
- package/src/mcp/action-catalog-types.ts +9 -0
- package/src/mcp/action-catalog.gen.ts +6696 -0
- package/src/mcp/capability-account-readiness.ts +17 -0
- package/src/mcp/child-read-evidence.ts +19 -0
- package/src/mcp/command-read.ts +109 -0
- package/src/mcp/company-profile-agent-admin.ts +198 -0
- package/src/mcp/contract-input.ts +141 -0
- package/src/mcp/documents.ts +65 -377
- package/src/mcp/editable-artifacts.ts +12 -6
- package/src/mcp/files.ts +80 -38
- package/src/mcp/first-party-tool-permissions.ts +305 -0
- package/src/mcp/knowledge-entries.ts +322 -0
- package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
- package/src/mcp/receipts.ts +34 -0
- package/src/mcp/request-abort.ts +44 -0
- package/src/mcp/scheduled-task-input.ts +76 -0
- package/src/mcp/scheduled-task-view.ts +44 -3
- package/src/mcp/server.ts +3030 -1267
- package/src/mcp/session-event-view.ts +383 -0
- package/src/mcp/session-view.ts +84 -3
- package/src/mcp/session-wait.ts +665 -0
- package/src/mcp-oauth.ts +1123 -0
- package/src/model-catalog.ts +91 -333
- package/src/observability.ts +15 -1
- package/src/organization-mcp.ts +397 -0
- package/src/organization-recovery-notifications.ts +103 -0
- package/src/routes/analytics-consent.ts +123 -0
- package/src/routes/api-integrations.ts +364 -74
- package/src/routes/api-keys.ts +336 -10
- package/src/routes/artifact-catalog.ts +279 -0
- package/src/routes/automations.ts +768 -0
- package/src/routes/billing.ts +461 -46
- package/src/routes/browser-sessions.ts +839 -131
- package/src/routes/canonical-human-identities.ts +90 -14
- package/src/routes/capabilities.ts +107 -6
- package/src/routes/channels.ts +20 -3
- package/src/routes/claude-subscription-accounts.ts +334 -0
- package/src/routes/claude-subscription-oauth.ts +142 -0
- package/src/routes/client-errors.ts +362 -0
- package/src/routes/codex.ts +833 -116
- package/src/routes/company-brain.ts +322 -0
- package/src/routes/company-profile.ts +65 -1
- package/src/routes/computer-sessions.ts +557 -106
- package/src/routes/connect.ts +1938 -0
- package/src/routes/connections.ts +1040 -349
- package/src/routes/documents.ts +488 -287
- package/src/routes/editable-artifacts.ts +79 -9
- package/src/routes/enrollments.ts +135 -39
- package/src/routes/environments.ts +154 -58
- package/src/routes/external-identity-links.ts +201 -0
- package/src/routes/feedback.ts +113 -0
- package/src/routes/files.ts +337 -39
- package/src/routes/github-browser-pages.ts +162 -0
- package/src/routes/github.ts +446 -144
- package/src/routes/insights-response-cache.ts +83 -0
- package/src/routes/insights-usage.ts +345 -0
- package/src/routes/insights.ts +153 -19
- package/src/routes/install.ts +133 -38
- package/src/routes/integration-facets.ts +107 -33
- package/src/routes/interaction-resources.ts +30 -3
- package/src/routes/knowledge.ts +488 -0
- package/src/routes/machines.ts +313 -15
- package/src/routes/managed-auth-session-sets.ts +1218 -0
- package/src/routes/managed-onboarding.ts +337 -0
- package/src/routes/managed-sign-in-methods.ts +433 -0
- package/src/routes/memory-slack-publications.ts +3 -2
- package/src/routes/model-connection-access.ts +208 -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 +178 -0
- package/src/routes/organization-memberships.ts +1019 -27
- package/src/routes/organization-model-providers.ts +293 -0
- package/src/routes/organization-recovery.ts +325 -0
- package/src/routes/organization-service-accounts.ts +128 -0
- package/src/routes/organization-sessions.ts +350 -0
- package/src/routes/personal-github-git-broker.ts +785 -0
- package/src/routes/personal-github.ts +370 -0
- package/src/routes/plugins.ts +251 -22
- package/src/routes/pr-review-github.ts +881 -0
- package/src/routes/pr-review.ts +622 -0
- package/src/routes/preference-registry.ts +12 -93
- package/src/routes/rigs.ts +167 -50
- package/src/routes/scheduled-tasks.ts +346 -41
- package/src/routes/session-artifact-associations.ts +87 -0
- package/src/routes/session-history-imports.ts +280 -0
- package/src/routes/sessions.ts +2306 -264
- package/src/routes/skill-content.ts +297 -0
- package/src/routes/skill-install-authority.ts +64 -0
- package/src/routes/skills.ts +62 -9
- package/src/routes/social.ts +46 -18
- package/src/routes/subscription-account-pools.ts +436 -0
- package/src/routes/subscription-pool-access.ts +126 -0
- package/src/routes/supergrok.ts +219 -303
- package/src/routes/transcription-recordings.ts +38 -3
- package/src/routes/transcriptions.ts +4 -0
- package/src/routes/usage-allowances.ts +378 -0
- package/src/routes/user-resource-authorities.ts +138 -0
- package/src/routes/video-generation.ts +14 -10
- package/src/routes/workspace-artifacts.ts +275 -69
- package/src/routes/workspace-capture.ts +21 -0
- package/src/routes/workspace-integrations.ts +576 -0
- package/src/routes/workspace-learning.ts +159 -0
- package/src/routes/workspace-model-providers.ts +148 -0
- package/src/routes/workspace-state.ts +38 -25
- package/src/routes/workspaces.ts +1004 -127
- package/src/sandbox/auth-callout.ts +96 -19
- package/src/sandbox/channel-a.ts +323 -24
- package/src/sandbox/connection-authority.ts +3 -0
- package/src/sandbox/enrollment.ts +81 -6
- package/src/sandbox/machines.ts +218 -76
- package/src/sandbox/metrics-ingestion.ts +411 -62
- package/src/sandbox/rematerialize.ts +121 -19
- package/src/sandbox/session-attach-variable-sets.ts +131 -0
- package/src/sandbox/viewer.ts +280 -25
- package/src/sandbox-file-artifacts.ts +413 -0
- package/src/scheduled-task-deletion.ts +138 -0
- package/src/session-create-observability.ts +46 -0
- package/src/session-realtime-context.ts +6 -3
- package/src/site-session-origin.ts +48 -0
- package/src/site-uploads.ts +224 -0
- package/src/slack-reaction-files.ts +16 -5
- package/src/temporal-schedule-cleanup.ts +13 -0
- package/src/temporal-schedule-sync.ts +74 -0
- package/src/transcription/providers/codex-subscription.ts +2 -0
- package/src/transcription/providers/openai.ts +1 -0
- package/src/transcription/providers/xai-subscription.ts +49 -3
- package/src/transcription/segmenter.ts +8 -2
- package/src/transcription/service.ts +43 -6
- package/src/work-discovery-observability.ts +121 -0
- package/src/workspace-artifact-content.ts +144 -0
- package/src/workspace-artifact-provenance.ts +104 -0
- package/src/workspace-delete-observability.ts +75 -0
- package/src/workspace-deletion.ts +73 -0
- package/src/workspace-state-projection.ts +18 -148
- package/src/workspace-tool-gateway-observability.ts +100 -0
- package/src/workspace-tool-gateway.ts +870 -0
- package/src/workspace-webhook-dispatch.ts +190 -0
- package/src/xai-subscription-auth.ts +9 -2
- package/dist/chunk-2PQMSRCB.js +0 -49759
- package/dist/chunk-2PQMSRCB.js.map +0 -1
- package/dist/routes/packs.d.ts +0 -3
- package/src/routes/packs.ts +0 -729
|
@@ -1,11 +1,40 @@
|
|
|
1
1
|
import { type Settings } from "@opengeni/config";
|
|
2
|
-
import { OAuthStartResponse, type
|
|
2
|
+
import { OAuthStartResponse, type OAuthStartRequest } from "@opengeni/contracts";
|
|
3
|
+
import { ExternalActorContinuation } from "@opengeni/contracts/external-identities";
|
|
3
4
|
import type { Observability } from "@opengeni/observability";
|
|
4
|
-
import { type Database } from "@opengeni/db";
|
|
5
|
+
import { claimConnectOperation, finishConnectOperation, type Database } from "@opengeni/db";
|
|
6
|
+
import { type McpAuthorizationServerMetadata } from "@opengeni/network";
|
|
7
|
+
import { type OAuthProviderProfile } from "./oauth-profiles.js";
|
|
5
8
|
export declare const oauthStateTtlMs: number;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Workspace-free landing for a callback whose state names no trustworthy
|
|
11
|
+
* workspace. The web app resolves it to the viewer's current workspace
|
|
12
|
+
* integrations page and keeps the callback outcome parameters.
|
|
13
|
+
*/
|
|
14
|
+
export declare const INTEGRATIONS_FALLBACK_PATH = "/integrations";
|
|
15
|
+
/** The web integrations page for one workspace (the Plugins surface). */
|
|
16
|
+
export declare function workspaceIntegrationsPath(workspaceId: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* The integrations page for a workspace id read from untrusted input (a URL
|
|
19
|
+
* parameter or an unverified-age state), or null unless it is a workspace UUID.
|
|
20
|
+
* A link target only: it grants nothing.
|
|
21
|
+
*/
|
|
22
|
+
export declare function workspaceIntegrationsPathForUntrusted(candidate: unknown): string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Where a callback returns, and why, when its own signed state is unusable.
|
|
25
|
+
*
|
|
26
|
+
* A correctly signed state still names its workspace, even when it is too old
|
|
27
|
+
* or its flow rejected it, so the browser returns to that workspace's
|
|
28
|
+
* integrations page; an aged one is reported as expired. Anything unsigned,
|
|
29
|
+
* tampered, or signed with another secret returns to
|
|
30
|
+
* {@link INTEGRATIONS_FALLBACK_PATH}. Display routing only: nothing here
|
|
31
|
+
* authorizes, resumes, or replays the callback.
|
|
32
|
+
*/
|
|
33
|
+
export declare function oauthStateFailureReturn(settings: Settings, rawState: string | undefined, nowMs?: number): {
|
|
34
|
+
returnPath: string;
|
|
35
|
+
reason: "state_expired" | "state_invalid";
|
|
36
|
+
};
|
|
37
|
+
export { OFFICIAL_GMAIL_MCP_SCOPES, OFFICIAL_GMAIL_MCP_URL, OFFICIAL_SLACK_MCP_URL, } from "./oauth-profiles.js";
|
|
9
38
|
export { OAUTH_MAX_RESPONSE_BYTES } from "@opengeni/network";
|
|
10
39
|
type OAuthClientDeps = {
|
|
11
40
|
db: Database;
|
|
@@ -15,40 +44,168 @@ type OAuthClientDeps = {
|
|
|
15
44
|
oauthCallbackDeadlineMs?: number | undefined;
|
|
16
45
|
};
|
|
17
46
|
export type OAuthStartContext = {
|
|
47
|
+
/** Server-selected dedicated adapter identity; never copied from request metadata. */
|
|
48
|
+
integrationKey?: "gmail" | "slack-personal";
|
|
49
|
+
connectAttemptId?: string;
|
|
50
|
+
externalContinuation?: ExternalActorContinuation;
|
|
18
51
|
accountId: string;
|
|
19
52
|
workspaceId: string;
|
|
20
53
|
subjectId: string;
|
|
54
|
+
/**
|
|
55
|
+
* False for every principal that cannot own a personal Connection (API keys,
|
|
56
|
+
* the configured key, services, agent attempts). Resolved by the route from
|
|
57
|
+
* the live authenticated principal, never inferred here.
|
|
58
|
+
*/
|
|
59
|
+
personalOwnershipAllowed: boolean;
|
|
21
60
|
requestUrl: string;
|
|
22
61
|
payload: OAuthStartRequest;
|
|
23
62
|
};
|
|
24
63
|
export type OAuthCallbackResult = {
|
|
25
64
|
redirectTo: string;
|
|
65
|
+
exactReturn?: boolean;
|
|
26
66
|
};
|
|
27
|
-
type AuthorizationServerMetadata =
|
|
28
|
-
issuer: string;
|
|
29
|
-
authorizationServer: string;
|
|
30
|
-
authorizationEndpoint: string;
|
|
31
|
-
tokenEndpoint: string;
|
|
32
|
-
registrationEndpoint?: string;
|
|
33
|
-
clientIdMetadataDocumentSupported: boolean;
|
|
34
|
-
tokenEndpointAuthMethodsSupported: string[];
|
|
35
|
-
codeChallengeMethodsSupported: string[];
|
|
36
|
-
raw: Record<string, unknown>;
|
|
37
|
-
};
|
|
67
|
+
type AuthorizationServerMetadata = McpAuthorizationServerMetadata;
|
|
38
68
|
export declare const OAUTH_START_DEADLINE_MS = 15000;
|
|
39
69
|
export declare const OAUTH_CALLBACK_DEADLINE_MS = 30000;
|
|
40
|
-
export type OAuthStartStage = "connection_lookup" | "mcp_challenge" | "protected_resource_metadata" | "authorization_server_metadata" | "client_registration";
|
|
70
|
+
export type OAuthStartStage = "connection_lookup" | "mcp_challenge" | "protected_resource_metadata" | "authorization_server_metadata" | "client_registration" | "state_persist";
|
|
71
|
+
/** Policy is the outermost lock. Receipt replay still runs normal authorization,
|
|
72
|
+
* but the DB calls authorizeAcquisition only for uncommitted progress. Provider
|
|
73
|
+
* requests must happen after this transaction, never inside either wrapper. */
|
|
74
|
+
export declare function claimOAuthAcquisition(db: Database, scope: Parameters<typeof claimConnectOperation>[1], input: Parameters<typeof claimConnectOperation>[2], integrationKey: string | null, acquiring?: boolean): Promise<{
|
|
75
|
+
status: "claimed";
|
|
76
|
+
attempt: import("@opengeni/contracts/connect").ConnectAttempt;
|
|
77
|
+
} | {
|
|
78
|
+
status: "replayed";
|
|
79
|
+
attempt: import("@opengeni/contracts/connect").ConnectAttempt;
|
|
80
|
+
}>;
|
|
81
|
+
type IntegrationSourceSelection = Record<string, unknown> & {
|
|
82
|
+
id: string;
|
|
83
|
+
syncEnabled: boolean;
|
|
84
|
+
readPolicy: "allow" | "ask" | "block";
|
|
85
|
+
};
|
|
86
|
+
/** Compare server-bound selections, not provider classification. Removing a
|
|
87
|
+
* source, disabling sync, or narrowing its read permission acquires no authority.
|
|
88
|
+
* Generation/timestamp bookkeeping does not turn an unchanged save into setup. */
|
|
89
|
+
export declare function integrationSourceSelectionRequiresAcquisition(previous: readonly IntegrationSourceSelection[], requested: readonly IntegrationSourceSelection[]): boolean;
|
|
90
|
+
export declare function finishOAuthAcquisition(db: Database, scope: Parameters<typeof finishConnectOperation>[1], input: Parameters<typeof finishConnectOperation>[2], integrationKey: string | null): Promise<{
|
|
91
|
+
id: string;
|
|
92
|
+
workspaceId: string;
|
|
93
|
+
providerId: string;
|
|
94
|
+
ownership: "personal" | "workspace";
|
|
95
|
+
revision: number;
|
|
96
|
+
state: "account_selection" | "cancelled" | "complete" | "connected_but_incomplete" | "credential_input" | "expired" | "failed" | "installing" | "preview" | "provider_wait" | "ready" | "requires_user_action" | "resource_selection" | "uncertain";
|
|
97
|
+
credentialsCommitted: boolean;
|
|
98
|
+
integrationInstalled: boolean;
|
|
99
|
+
completionRequirement: "connection" | "integration" | "provider_setup";
|
|
100
|
+
nextAction: {
|
|
101
|
+
type: "authorize";
|
|
102
|
+
url: string;
|
|
103
|
+
} | {
|
|
104
|
+
type: "credentials";
|
|
105
|
+
fields: {
|
|
106
|
+
name: string;
|
|
107
|
+
label: string;
|
|
108
|
+
required: boolean;
|
|
109
|
+
secret: boolean;
|
|
110
|
+
options?: {
|
|
111
|
+
value: string;
|
|
112
|
+
label: string;
|
|
113
|
+
}[] | undefined;
|
|
114
|
+
}[];
|
|
115
|
+
} | {
|
|
116
|
+
type: "wait";
|
|
117
|
+
pollAfterMs: number;
|
|
118
|
+
userCode?: string | undefined;
|
|
119
|
+
verificationUrl?: string | undefined;
|
|
120
|
+
} | {
|
|
121
|
+
type: "select_account";
|
|
122
|
+
accounts: {
|
|
123
|
+
id: string;
|
|
124
|
+
providerId: string;
|
|
125
|
+
version?: number | undefined;
|
|
126
|
+
label: string;
|
|
127
|
+
ownership: "personal" | "workspace";
|
|
128
|
+
status: "auth_needed" | "connected" | "disabled";
|
|
129
|
+
}[];
|
|
130
|
+
} | {
|
|
131
|
+
type: "select_resources";
|
|
132
|
+
resources: {
|
|
133
|
+
id: string;
|
|
134
|
+
label: string;
|
|
135
|
+
kind: string;
|
|
136
|
+
}[];
|
|
137
|
+
cursor?: string | undefined;
|
|
138
|
+
} | {
|
|
139
|
+
type: "preview";
|
|
140
|
+
previewId: string;
|
|
141
|
+
contentHash: string;
|
|
142
|
+
operations: {
|
|
143
|
+
id: string;
|
|
144
|
+
label: string;
|
|
145
|
+
kind: string;
|
|
146
|
+
}[];
|
|
147
|
+
} | {
|
|
148
|
+
type: "none";
|
|
149
|
+
};
|
|
150
|
+
expiresAt: string;
|
|
151
|
+
account?: {
|
|
152
|
+
id: string;
|
|
153
|
+
providerId: string;
|
|
154
|
+
version?: number | undefined;
|
|
155
|
+
label: string;
|
|
156
|
+
ownership: "personal" | "workspace";
|
|
157
|
+
status: "auth_needed" | "connected" | "disabled";
|
|
158
|
+
} | undefined;
|
|
159
|
+
installationTarget?: {
|
|
160
|
+
instanceKey: string;
|
|
161
|
+
displayName: string;
|
|
162
|
+
expectedInstanceVersion?: number | undefined;
|
|
163
|
+
} | undefined;
|
|
164
|
+
source?: {
|
|
165
|
+
kind: "definition";
|
|
166
|
+
definitionId: string;
|
|
167
|
+
} | {
|
|
168
|
+
kind: "openapi";
|
|
169
|
+
url: string;
|
|
170
|
+
baseUrl?: string | undefined;
|
|
171
|
+
} | {
|
|
172
|
+
kind: "graphql";
|
|
173
|
+
endpoint: string;
|
|
174
|
+
name?: string | undefined;
|
|
175
|
+
} | {
|
|
176
|
+
kind: "auto";
|
|
177
|
+
url: string;
|
|
178
|
+
baseUrl?: string | undefined;
|
|
179
|
+
} | undefined;
|
|
180
|
+
error?: {
|
|
181
|
+
code: string;
|
|
182
|
+
message: string;
|
|
183
|
+
retryable: boolean;
|
|
184
|
+
} | undefined;
|
|
185
|
+
}>;
|
|
41
186
|
export declare function startMcpOAuth(deps: OAuthClientDeps, context: OAuthStartContext): Promise<OAuthStartResponse>;
|
|
42
|
-
export declare function
|
|
187
|
+
export declare function isHostedSlackMcpTarget(providerDomain: string, mcpUrl: string): boolean;
|
|
43
188
|
export declare function completeMcpOAuthCallback(deps: OAuthClientDeps, input: {
|
|
44
189
|
code?: string | undefined;
|
|
45
190
|
state?: string | undefined;
|
|
191
|
+
/** The provider's `error` parameter, for example `access_denied` on Cancel. */
|
|
192
|
+
error?: string | undefined;
|
|
46
193
|
requestUrl: string;
|
|
47
194
|
}): Promise<OAuthCallbackResult>;
|
|
48
195
|
export declare function integrationBaseUrl(publicBaseUrl: string | undefined, requestUrl: string): string;
|
|
49
196
|
export declare function requireIntegrationsStateSecret(settings: Settings): string;
|
|
197
|
+
/** The hosted-Slack profile's origin pins, kept exported for its tests. */
|
|
50
198
|
export declare function assertSlackAuthorizationServer(as: AuthorizationServerMetadata): void;
|
|
199
|
+
/** The official-Gmail profile's origin pins, kept exported for its tests. */
|
|
51
200
|
export declare function assertGoogleAuthorizationServer(as: AuthorizationServerMetadata): void;
|
|
201
|
+
/** Inspect without credentials, registration, or running tools. */
|
|
202
|
+
export declare function inspectMcpAuthentication(resource: string, settings: Settings): Promise<{
|
|
203
|
+
kind: "oauth2" | "none" | "unknown";
|
|
204
|
+
message?: string;
|
|
205
|
+
}>;
|
|
206
|
+
export declare function preferredOAuthSelfRegistration(as: Pick<AuthorizationServerMetadata, "clientIdMetadataDocumentSupported" | "registrationEndpoint">, clientSource: OAuthProviderProfile["clientSource"]): "cimd" | "dcr" | null;
|
|
207
|
+
/** Secret-free readiness for the exact registered client used by Gmail setup. */
|
|
208
|
+
export declare function gmailOAuthClientConfigured(settings: Settings): boolean;
|
|
52
209
|
export declare function buildAuthorizationUrl(input: {
|
|
53
210
|
endpoint: string;
|
|
54
211
|
settings: Settings;
|
|
@@ -59,6 +216,8 @@ export declare function buildAuthorizationUrl(input: {
|
|
|
59
216
|
verifier: string;
|
|
60
217
|
scopes: string[];
|
|
61
218
|
resourceParameterSupported: boolean;
|
|
219
|
+
/** Profile-declared extra authorize parameters, applied last. */
|
|
220
|
+
extraParams?: Readonly<Record<string, string>> | undefined;
|
|
62
221
|
}): string;
|
|
63
222
|
export type OAuthPublicErrorFields = {
|
|
64
223
|
errorClass: "OAuthOperationError";
|
|
@@ -73,4 +232,5 @@ export declare function chooseMcpAuthorizeScopes(input: {
|
|
|
73
232
|
requested: string[] | undefined;
|
|
74
233
|
challenged: string[] | undefined;
|
|
75
234
|
supported: string[];
|
|
235
|
+
authorizationServerScopesSupported?: string[];
|
|
76
236
|
}): string[];
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { type ConnectionOwnership } from "@opengeni/contracts";
|
|
2
|
+
import type { Settings } from "@opengeni/config";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
/**
|
|
5
|
+
* Provider OAuth quirks as data.
|
|
6
|
+
*
|
|
7
|
+
* Some providers do not support DCR or CIMD and need a pre-registered client
|
|
8
|
+
* with pinned metadata; some issue personal tokens only; some reject RFC 8707's
|
|
9
|
+
* `resource` parameter. Each used to be a hand-written branch set inside
|
|
10
|
+
* `oauth-client.ts`; every quirk is now a field on an `OAuthProviderProfile`.
|
|
11
|
+
* The flow reads exactly one resolved profile and contains no provider-name
|
|
12
|
+
* conditional.
|
|
13
|
+
*
|
|
14
|
+
* Profiles come from two layers:
|
|
15
|
+
*
|
|
16
|
+
* 1. Built-in profiles pin known authorization servers and protocol quirks.
|
|
17
|
+
* Ownership defaults guide setup; users may choose personal or workspace.
|
|
18
|
+
* Authorization-server pins never depend on catalog import state.
|
|
19
|
+
* 2. A validated `oauthProfile` object on a global catalog row (curated
|
|
20
|
+
* overlay -> importer -> `capability_catalog_items.metadata`). A catalog
|
|
21
|
+
* profile applies only when no built-in matches, and it can only narrow the
|
|
22
|
+
* default behavior, never loosen a built-in fence.
|
|
23
|
+
*/
|
|
24
|
+
export declare const OFFICIAL_SLACK_MCP_URL: "https://mcp.slack.com/mcp";
|
|
25
|
+
export declare const OFFICIAL_GMAIL_MCP_URL = "https://gmailmcp.googleapis.com/mcp/v1";
|
|
26
|
+
export declare const OFFICIAL_GMAIL_MCP_SCOPES: readonly ["https://www.googleapis.com/auth/gmail.readonly", "https://www.googleapis.com/auth/gmail.compose", "https://www.googleapis.com/auth/gmail.modify"];
|
|
27
|
+
/** The slice of discovered authorization-server metadata the pins constrain. */
|
|
28
|
+
export type PinnableAuthorizationServer = {
|
|
29
|
+
issuer: string;
|
|
30
|
+
authorizationServer: string;
|
|
31
|
+
authorizationEndpoint: string;
|
|
32
|
+
tokenEndpoint: string;
|
|
33
|
+
};
|
|
34
|
+
export type AuthorizationServerPins = {
|
|
35
|
+
/** Origins `issuer` and `authorizationServer` must both belong to. */
|
|
36
|
+
issuerOrigins: readonly string[];
|
|
37
|
+
/** Origins the authorization endpoint must belong to. */
|
|
38
|
+
authorizationEndpointOrigins: readonly string[];
|
|
39
|
+
/** Origins the token endpoint must belong to. */
|
|
40
|
+
tokenEndpointOrigins: readonly string[];
|
|
41
|
+
/** Exact 422 message when a pin fails. */
|
|
42
|
+
message: string;
|
|
43
|
+
/** Skip enforcement in a local test environment (loopback fixtures). */
|
|
44
|
+
skipInLocalTest: boolean;
|
|
45
|
+
};
|
|
46
|
+
export type OAuthProviderProfile = {
|
|
47
|
+
/** Stable identity for guards, logs, and tests. */
|
|
48
|
+
key: string;
|
|
49
|
+
/** Built-in matching; catalog profiles match their own row's exact mcpUrl. */
|
|
50
|
+
match: {
|
|
51
|
+
mcpUrls?: readonly string[];
|
|
52
|
+
providerDomains?: readonly string[];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Canonical provider identity forced when the profile matches by URL, so a
|
|
56
|
+
* caller cannot relabel a pinned resource under another domain.
|
|
57
|
+
*/
|
|
58
|
+
canonicalProviderDomain?: string;
|
|
59
|
+
/** Reject a caller-supplied manual OAuth client (deployment-managed only). */
|
|
60
|
+
rejectCallerOAuthClient?: {
|
|
61
|
+
message: string;
|
|
62
|
+
};
|
|
63
|
+
/** The payload's explicit providerDomain must canonicalize to this domain. */
|
|
64
|
+
requireProviderDomain?: {
|
|
65
|
+
domain: string;
|
|
66
|
+
message: string;
|
|
67
|
+
};
|
|
68
|
+
/** Outside a local test environment, the start URL must be exactly this. */
|
|
69
|
+
requireExactMcpUrl?: {
|
|
70
|
+
url: string;
|
|
71
|
+
message: string;
|
|
72
|
+
};
|
|
73
|
+
/** Deployment-managed client credentials must be configured (503 otherwise). */
|
|
74
|
+
requireDeploymentClient?: {
|
|
75
|
+
key: DeploymentManagedClientKey;
|
|
76
|
+
message: string;
|
|
77
|
+
};
|
|
78
|
+
/** Suggested ownership; explicit choices remain subject to requiredOwnership. */
|
|
79
|
+
defaultOwnership?: ConnectionOwnership;
|
|
80
|
+
/** Built-in-only ownership restriction, including old reconnect/callback state. */
|
|
81
|
+
requiredOwnership?: {
|
|
82
|
+
ownership: ConnectionOwnership;
|
|
83
|
+
message: string;
|
|
84
|
+
};
|
|
85
|
+
/** Bind reconnect/dedupe to the exact mcpUrl, not just the provider domain. */
|
|
86
|
+
exactMcpBinding: boolean;
|
|
87
|
+
/** How an existing connection is chosen for reconnect coalescing. */
|
|
88
|
+
connectionSelection: "canonical_personal" | "first_active";
|
|
89
|
+
/** Post-discovery authorization-server origin pins. */
|
|
90
|
+
authorizationServer?: AuthorizationServerPins;
|
|
91
|
+
/**
|
|
92
|
+
* Post-discovery identity check: the resolved providerDomain must equal this
|
|
93
|
+
* domain (the reserved-authorization-server guard shares its message).
|
|
94
|
+
*/
|
|
95
|
+
postDiscoveryProviderDomain?: {
|
|
96
|
+
domain: string;
|
|
97
|
+
message: string;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Client registration preference. `dcr` or `cimd` forces that advertised
|
|
101
|
+
* self-registration mechanism after operator/deployment clients. Without an
|
|
102
|
+
* explicit preference, DCR wins when both mechanisms are advertised.
|
|
103
|
+
*/
|
|
104
|
+
clientSource?: "deployment_managed" | "cimd" | "dcr";
|
|
105
|
+
/** Send RFC 8707 `resource` on authorize and token requests. */
|
|
106
|
+
sendResourceParameter: boolean;
|
|
107
|
+
/** Extra authorize-URL query parameters (e.g. offline-consent opts). */
|
|
108
|
+
extraAuthorizeParams?: Readonly<Record<string, string>>;
|
|
109
|
+
/** Exact scope override; the caller can never widen past it. */
|
|
110
|
+
requestedScopes?: readonly string[];
|
|
111
|
+
/** Reviewed local bridge grant normalization and token verification. Catalog profiles cannot supply code. */
|
|
112
|
+
normalizeGrantedScopes?: (scopes: readonly string[] | string) => string[];
|
|
113
|
+
reportedScopesRequired?: boolean;
|
|
114
|
+
/** Built-in durable API bridges may refuse a new grant without offline access. */
|
|
115
|
+
freshRefreshTokenRequired?: boolean;
|
|
116
|
+
/** The reviewed bridge exposes one tool contract, not a partial-scope variant. */
|
|
117
|
+
fullRequestedScopesRequired?: boolean;
|
|
118
|
+
/** Built-in web OAuth clients must use a configured secret and provider-supported authentication. */
|
|
119
|
+
confidentialClientRequired?: boolean;
|
|
120
|
+
/** Built-in API bridge discovery; catalog metadata cannot redirect this seam. */
|
|
121
|
+
providerOAuthDiscovery?: {
|
|
122
|
+
issuer: string;
|
|
123
|
+
metadataUrl: string;
|
|
124
|
+
};
|
|
125
|
+
localToolVerification?: {
|
|
126
|
+
url: string;
|
|
127
|
+
method?: "GET" | "POST";
|
|
128
|
+
/** An API bridge may require a verified account before accepting a grant. */
|
|
129
|
+
required?: boolean;
|
|
130
|
+
/** Distinguish a rejected OAuth grant from a temporary verification failure. */
|
|
131
|
+
isRejectedGrant?: (payload: Record<string, unknown>) => boolean;
|
|
132
|
+
validateIdentity: (payload: Record<string, unknown>) => Record<string, string>;
|
|
133
|
+
toolsForScopes: (scopes: readonly string[]) => Array<{
|
|
134
|
+
name: string;
|
|
135
|
+
description?: string;
|
|
136
|
+
}>;
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
export declare const DEFAULT_OAUTH_PROFILE: OAuthProviderProfile;
|
|
140
|
+
/** Exact built-in profile by its stable key; throws on an unknown key. */
|
|
141
|
+
export declare function builtInOAuthProfileByKey(key: string): OAuthProviderProfile;
|
|
142
|
+
export type DeploymentManagedClientKey = "slack";
|
|
143
|
+
/**
|
|
144
|
+
* Pre-registered deployment clients resolved from dedicated settings, keyed by
|
|
145
|
+
* the authorization-server origins they serve. Consulted before the operator
|
|
146
|
+
* clients JSON so a deployment-managed provider can never be shadowed.
|
|
147
|
+
*/
|
|
148
|
+
export declare const DEPLOYMENT_MANAGED_CLIENTS: readonly {
|
|
149
|
+
key: DeploymentManagedClientKey;
|
|
150
|
+
issuerOrigins: readonly string[];
|
|
151
|
+
resolve: (settings: Settings) => {
|
|
152
|
+
clientId: string;
|
|
153
|
+
clientSecret: string;
|
|
154
|
+
tokenEndpointAuthMethod: "client_secret_post";
|
|
155
|
+
} | null;
|
|
156
|
+
}[];
|
|
157
|
+
export declare function deploymentManagedClientFor(settings: Settings, key: DeploymentManagedClientKey): ReturnType<(typeof DEPLOYMENT_MANAGED_CLIENTS)[number]["resolve"]>;
|
|
158
|
+
/** Built-in profile for a start target, or null when only the default applies. */
|
|
159
|
+
export declare function builtInOAuthProfileFor(input: {
|
|
160
|
+
mcpUrl: string;
|
|
161
|
+
providerDomain?: string | undefined;
|
|
162
|
+
}): OAuthProviderProfile | null;
|
|
163
|
+
/** Ownership an omitted request defaults to under a profile. */
|
|
164
|
+
export declare function defaultOwnershipFor(profile: OAuthProviderProfile): ConnectionOwnership;
|
|
165
|
+
/** Enforces a profile's authorization-server origin pins with its exact message. */
|
|
166
|
+
export declare function assertAuthorizationServerPins(as: PinnableAuthorizationServer, pins: Pick<AuthorizationServerPins, "issuerOrigins" | "authorizationEndpointOrigins" | "tokenEndpointOrigins" | "message">): void;
|
|
167
|
+
/**
|
|
168
|
+
* Reserved-authorization-server guard: a discovered identity claimed by one
|
|
169
|
+
* profile is rejected on every other flow with that guard's exact message.
|
|
170
|
+
*/
|
|
171
|
+
export declare function assertAuthorizationServerNotReserved(as: PinnableAuthorizationServer, profile: OAuthProviderProfile): void;
|
|
172
|
+
/**
|
|
173
|
+
* Catalog-row profile: the declarative subset a curated row may carry. It can
|
|
174
|
+
* only narrow the default flow; the fields that grant authority (deployment
|
|
175
|
+
* client settings, reserved-server membership) are built-in-only by
|
|
176
|
+
* construction because the schema cannot express them.
|
|
177
|
+
*/
|
|
178
|
+
/**
|
|
179
|
+
* Authorize-URL parameters owned by the OAuth client itself. A profile's
|
|
180
|
+
* `extraAuthorizeParams` may never name one: overriding `scope` or `resource`
|
|
181
|
+
* would widen the grant past the recorded contract, and the rest carry the
|
|
182
|
+
* PKCE/state security machinery. Enforced in this schema, in the curation
|
|
183
|
+
* parser, and defensively again in `buildAuthorizationUrl`.
|
|
184
|
+
*/
|
|
185
|
+
export declare const RESERVED_AUTHORIZE_PARAMS: ReadonlySet<string>;
|
|
186
|
+
export declare const catalogOAuthProfileSchema: z.ZodObject<{
|
|
187
|
+
clientSource: z.ZodOptional<z.ZodEnum<{
|
|
188
|
+
cimd: "cimd";
|
|
189
|
+
dcr: "dcr";
|
|
190
|
+
deployment_managed: "deployment_managed";
|
|
191
|
+
}>>;
|
|
192
|
+
exactMcpUrl: z.ZodOptional<z.ZodString>;
|
|
193
|
+
pinnedIssuerOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
194
|
+
pinnedEndpointOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
195
|
+
sendResourceParameter: z.ZodOptional<z.ZodBoolean>;
|
|
196
|
+
defaultOwnership: z.ZodOptional<z.ZodEnum<{
|
|
197
|
+
personal: "personal";
|
|
198
|
+
workspace: "workspace";
|
|
199
|
+
}>>;
|
|
200
|
+
requestedScopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
201
|
+
extraAuthorizeParams: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
202
|
+
}, z.core.$strict>;
|
|
203
|
+
export type CatalogOAuthProfile = z.infer<typeof catalogOAuthProfileSchema>;
|
|
204
|
+
/**
|
|
205
|
+
* Canonical catalog lookup key for an MCP URL, mirroring the importer's
|
|
206
|
+
* `canonicalMcpUrl` (`scripts/catalog-curation.ts`): no fragment, lowercase
|
|
207
|
+
* host, default ports stripped, trailing slashes collapsed. Without this, a
|
|
208
|
+
* trailing-slash or uppercase-host variant of a profiled URL would miss the
|
|
209
|
+
* row and silently fall back to the default profile.
|
|
210
|
+
*/
|
|
211
|
+
export declare function catalogMcpUrlKey(value: string): string;
|
|
212
|
+
/**
|
|
213
|
+
* Applies a validated catalog profile over the default profile for a row with
|
|
214
|
+
* no built-in. `deployment_managed` from catalog data resolves through the
|
|
215
|
+
* operator clients JSON (issuer-keyed) only; named settings-backed clients
|
|
216
|
+
* remain built-in-only.
|
|
217
|
+
*
|
|
218
|
+
* A present-but-invalid profile fails closed with a 422: the row's operator
|
|
219
|
+
* declared constraints, and silently degrading to the default profile would
|
|
220
|
+
* drop an origin pin on a JSON typo.
|
|
221
|
+
*/
|
|
222
|
+
export declare function oauthProfileFromCatalog(mcpUrl: string, raw: unknown): OAuthProviderProfile;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function safeReturnPath(value: string): string;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type PersonalGitHubRepository as PersonalGitHubRepositoryContract, type PersonalGitHubRepositorySelectionInput } from "@opengeni/contracts/personal-github";
|
|
2
|
+
import { type GitHubRepositoryBranchesResponse as GitHubRepositoryBranchesResponseContract, type ListGitHubRepositoryBranchesQuery } from "@opengeni/contracts/github-repository-contracts";
|
|
3
|
+
import type { ApiRouteDeps } from "@opengeni/core";
|
|
4
|
+
import { getConnectionMetadata, type PersonalGitHubRepositorySelectionState as DbPersonalGitHubRepositorySelectionState } from "@opengeni/db";
|
|
5
|
+
import { HTTPException } from "hono/http-exception";
|
|
6
|
+
export type PersonalGitHubRepositoryConnection = NonNullable<Awaited<ReturnType<typeof getConnectionMetadata>>>;
|
|
7
|
+
type PersonalGitHubRepositoryProviderOperation = "repositories_list" | "repository_branches_list" | "repository_verify";
|
|
8
|
+
type ExpectedPersonalGitHubRepositoryAuthority = {
|
|
9
|
+
selectionGeneration: number;
|
|
10
|
+
repositoryId: string;
|
|
11
|
+
fullName: string;
|
|
12
|
+
};
|
|
13
|
+
type PersonalGitHubProviderJsonOptions = {
|
|
14
|
+
operation: PersonalGitHubRepositoryProviderOperation;
|
|
15
|
+
expectedRepositoryAuthority?: ExpectedPersonalGitHubRepositoryAuthority;
|
|
16
|
+
responseLabel?: string;
|
|
17
|
+
responseMaxBytes?: number;
|
|
18
|
+
};
|
|
19
|
+
export type PersonalGitHubRepositoryBranchServices = {
|
|
20
|
+
requireConnection: typeof requirePersonalGitHubRepositoryConnection;
|
|
21
|
+
getSelectionState: (deps: ApiRouteDeps, input: {
|
|
22
|
+
accountId: string;
|
|
23
|
+
originWorkspaceId: string;
|
|
24
|
+
subjectId: string;
|
|
25
|
+
connectionId: string;
|
|
26
|
+
}) => Promise<DbPersonalGitHubRepositorySelectionState | null>;
|
|
27
|
+
providerJson: (input: {
|
|
28
|
+
deps: ApiRouteDeps;
|
|
29
|
+
connection: PersonalGitHubRepositoryConnection;
|
|
30
|
+
subjectId: string;
|
|
31
|
+
url: URL;
|
|
32
|
+
expectedConnectionAuthorityGeneration: number;
|
|
33
|
+
options: PersonalGitHubProviderJsonOptions;
|
|
34
|
+
}) => Promise<unknown>;
|
|
35
|
+
};
|
|
36
|
+
export type PersonalGitHubRepositoryProviderErrorCode = "connection_changed" | "connection_inactive" | "invalid_provider_response" | "provider_denied" | "provider_rate_limited" | "provider_unavailable" | "repository_archived" | "repository_not_found" | "repository_not_selected" | "repository_read_denied" | "repository_selection_changed" | "repository_write_denied";
|
|
37
|
+
export declare class PersonalGitHubRepositoryProviderError extends Error {
|
|
38
|
+
readonly code: PersonalGitHubRepositoryProviderErrorCode;
|
|
39
|
+
constructor(code: PersonalGitHubRepositoryProviderErrorCode);
|
|
40
|
+
}
|
|
41
|
+
export declare function requirePersonalGitHubRepositoryConnection(deps: ApiRouteDeps, input: {
|
|
42
|
+
accountId: string;
|
|
43
|
+
workspaceId: string;
|
|
44
|
+
subjectId: string;
|
|
45
|
+
connectionId: string;
|
|
46
|
+
}): Promise<PersonalGitHubRepositoryConnection>;
|
|
47
|
+
export declare function listLivePersonalGitHubRepositories(deps: ApiRouteDeps, input: {
|
|
48
|
+
workspaceId: string;
|
|
49
|
+
accountId: string;
|
|
50
|
+
subjectId: string;
|
|
51
|
+
connectionId: string;
|
|
52
|
+
expectedConnectionAuthorityGeneration: number;
|
|
53
|
+
page: number;
|
|
54
|
+
limit: number;
|
|
55
|
+
}): Promise<{
|
|
56
|
+
repositories: PersonalGitHubRepositoryContract[];
|
|
57
|
+
nextPage: number | null;
|
|
58
|
+
}>;
|
|
59
|
+
export declare function listLivePersonalGitHubRepositoryBranches(deps: ApiRouteDeps, input: {
|
|
60
|
+
workspaceId: string;
|
|
61
|
+
accountId: string;
|
|
62
|
+
subjectId: string;
|
|
63
|
+
connectionId: string;
|
|
64
|
+
repositoryId: string;
|
|
65
|
+
query: ListGitHubRepositoryBranchesQuery;
|
|
66
|
+
}, services?: PersonalGitHubRepositoryBranchServices): Promise<GitHubRepositoryBranchesResponseContract>;
|
|
67
|
+
/** Serial by design: one bounded provider request and one authority check at a time. */
|
|
68
|
+
export declare function verifyLivePersonalGitHubRepositories(deps: ApiRouteDeps, input: {
|
|
69
|
+
workspaceId: string;
|
|
70
|
+
accountId: string;
|
|
71
|
+
subjectId: string;
|
|
72
|
+
connectionId: string;
|
|
73
|
+
expectedConnectionAuthorityGeneration: number;
|
|
74
|
+
repositories: PersonalGitHubRepositorySelectionInput[];
|
|
75
|
+
}): Promise<Array<PersonalGitHubRepositoryContract & {
|
|
76
|
+
selectedAccess: "read" | "write";
|
|
77
|
+
}>>;
|
|
78
|
+
export declare function personalGitHubRepositoryProviderHttpError(error: PersonalGitHubRepositoryProviderError): HTTPException;
|
|
79
|
+
/** Keep provider integer lexemes exact before repository IDs become bigint-backed strings. */
|
|
80
|
+
export declare function parsePersonalGitHubProviderJson(value: string): unknown;
|
|
81
|
+
export declare function personalGitHubRepositoryCanRead(permissions: PersonalGitHubRepositoryContract["permissions"]): boolean;
|
|
82
|
+
export declare function personalGitHubRepositoryCanWrite(permissions: PersonalGitHubRepositoryContract["permissions"]): boolean;
|
|
83
|
+
export declare function parsePersonalGitHubRepository(value: unknown): PersonalGitHubRepositoryContract;
|
|
84
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type Settings } from "@opengeni/config";
|
|
2
|
+
import { type PersonalGitHubDisconnectRequest } from "@opengeni/contracts/personal-github";
|
|
3
|
+
import { type AccessGrantAuthorization, type ApiRouteDeps } from "@opengeni/core";
|
|
4
|
+
export declare function personalGitHubClientMarker(clientId: string): string;
|
|
5
|
+
export declare function requirePersonalGitHubOAuthSettings(settings: Settings): {
|
|
6
|
+
clientId: string;
|
|
7
|
+
clientSecret: string;
|
|
8
|
+
callbackUrl: string;
|
|
9
|
+
oauthEnvironment: string;
|
|
10
|
+
oauthClientMarker: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function listPersonalGitHubConnections(deps: ApiRouteDeps, input: {
|
|
13
|
+
workspaceId: string;
|
|
14
|
+
subjectId: string;
|
|
15
|
+
}): Promise<import("@opengeni/db").ConnectionMetadataWithVerification[]>;
|
|
16
|
+
export declare function disconnectPersonalGitHub(deps: ApiRouteDeps, input: {
|
|
17
|
+
workspaceId: string;
|
|
18
|
+
subjectId: string;
|
|
19
|
+
connectionId: string;
|
|
20
|
+
payload: PersonalGitHubDisconnectRequest;
|
|
21
|
+
}): Promise<import("@opengeni/db").ConnectionMetadataWithVerification | null>;
|
|
22
|
+
export declare function startPersonalGitHubOAuth(deps: ApiRouteDeps, input: {
|
|
23
|
+
access: AccessGrantAuthorization;
|
|
24
|
+
workspaceId: string;
|
|
25
|
+
connectionId?: string;
|
|
26
|
+
returnPath?: string;
|
|
27
|
+
connectAttemptId?: string;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
authorizationUrl: string;
|
|
30
|
+
expiresAt: string;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function completePersonalGitHubOAuthCallback(deps: ApiRouteDeps, input: {
|
|
33
|
+
code?: string;
|
|
34
|
+
state?: string;
|
|
35
|
+
error?: string;
|
|
36
|
+
requestUrl: string;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
redirectTo: string;
|
|
39
|
+
exactReturn?: boolean;
|
|
40
|
+
}>;
|
|
41
|
+
export declare function personalGitHubReviewUrl(settings: Settings): string | null;
|
|
42
|
+
export declare const PERSONAL_GITHUB_CONNECTION_PRINCIPAL_MESSAGE: string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PrReviewProvider } from "@opengeni/contracts";
|
|
2
|
+
import { type FetchLike, type OutboundNetworkSettings } from "@opengeni/network";
|
|
3
|
+
export declare class PrReviewProviderRepositoryError extends Error {
|
|
4
|
+
readonly reason: "denied" | "identity_mismatch" | "unavailable";
|
|
5
|
+
constructor(reason: "denied" | "identity_mismatch" | "unavailable", message: string);
|
|
6
|
+
}
|
|
7
|
+
export type VerifiedPrReviewProviderRepository = {
|
|
8
|
+
repositoryUri: string;
|
|
9
|
+
repositoryFullName: string;
|
|
10
|
+
providerRepositoryId: string;
|
|
11
|
+
projectId: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function verifyPrReviewProviderRepository(input: {
|
|
14
|
+
provider: Exclude<PrReviewProvider, "github">;
|
|
15
|
+
providerBaseUrl: string;
|
|
16
|
+
providerRepositoryId: string;
|
|
17
|
+
projectId?: string;
|
|
18
|
+
token: string;
|
|
19
|
+
username: string | null;
|
|
20
|
+
settings: OutboundNetworkSettings;
|
|
21
|
+
fetchImpl?: FetchLike;
|
|
22
|
+
}): Promise<VerifiedPrReviewProviderRepository>;
|
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type IntegrationDefinition } from "@opengeni/capabilities";
|
|
2
|
+
import { type Settings } from "@opengeni/config";
|
|
3
|
+
import { OAuthStartResponse, type ApiIntegrationOAuthStartRequest, type ConnectionOwnership } from "@opengeni/contracts";
|
|
2
4
|
import { type ApiRouteDeps } from "@opengeni/core";
|
|
5
|
+
import { ExternalActorContinuation } from "@opengeni/contracts/external-identities";
|
|
3
6
|
export declare function startApiIntegrationProviderOAuth(deps: ApiRouteDeps, input: {
|
|
4
7
|
accountId: string;
|
|
5
8
|
workspaceId: string;
|
|
6
9
|
subjectId: string;
|
|
10
|
+
/**
|
|
11
|
+
* False for every principal that cannot own a personal Connection (API
|
|
12
|
+
* keys, the configured key, services, agent attempts). Resolved by the
|
|
13
|
+
* route from the live authenticated principal, never inferred here.
|
|
14
|
+
*/
|
|
15
|
+
personalOwnershipAllowed: boolean;
|
|
16
|
+
externalContinuation?: ExternalActorContinuation;
|
|
17
|
+
connectAttemptId?: string;
|
|
7
18
|
requestUrl: string;
|
|
8
19
|
payload: ApiIntegrationOAuthStartRequest;
|
|
9
20
|
}): Promise<OAuthStartResponse>;
|
|
@@ -14,4 +25,11 @@ export declare function completeApiIntegrationProviderOAuth(deps: ApiRouteDeps,
|
|
|
14
25
|
requestUrl: string;
|
|
15
26
|
}): Promise<{
|
|
16
27
|
redirectTo: string;
|
|
28
|
+
exactReturn?: boolean;
|
|
17
29
|
}>;
|
|
30
|
+
/** Configuration readiness only: consent and installation are still separate. */
|
|
31
|
+
export declare function curatedOAuthReadiness(settings: Settings, definition: IntegrationDefinition): {
|
|
32
|
+
configured: boolean;
|
|
33
|
+
ownership: ConnectionOwnership[];
|
|
34
|
+
};
|
|
35
|
+
export declare function isApiIntegrationProviderOAuthState(value: string | undefined, settings: Settings): boolean;
|