@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,20 +1,31 @@
|
|
|
1
|
+
import {
|
|
2
|
+
voiceInputModelReportsDurationOnly,
|
|
3
|
+
type VoiceInputPricing,
|
|
4
|
+
type VoiceInputUsage,
|
|
5
|
+
} from "@opengeni/config";
|
|
1
6
|
import { type TranscriptionProvider, TranscriptionServiceError } from "@opengeni/core";
|
|
2
7
|
|
|
3
8
|
export function createOpenAiTranscriptionProvider(input: {
|
|
4
9
|
apiKey: string;
|
|
5
10
|
baseUrl: string;
|
|
6
11
|
model: string;
|
|
12
|
+
pricing?: VoiceInputPricing | null;
|
|
7
13
|
fetch?: typeof fetch;
|
|
8
14
|
}): TranscriptionProvider {
|
|
9
15
|
const fetchImpl = input.fetch ?? fetch;
|
|
10
16
|
return {
|
|
11
17
|
id: "openai",
|
|
12
18
|
supportsServerDeadline: true,
|
|
19
|
+
deploymentFunded: { model: input.model, pricing: input.pricing ?? null },
|
|
13
20
|
available: () => true,
|
|
14
21
|
async transcribe({ audio, mimeType, filename, requestId, signal }) {
|
|
15
22
|
const form = new FormData();
|
|
16
23
|
form.append("file", audioBlob(audio, mimeType), filename);
|
|
17
24
|
form.append("model", input.model);
|
|
25
|
+
// Whisper reports its billed audio duration only in verbose_json.
|
|
26
|
+
if (voiceInputModelReportsDurationOnly(input.model)) {
|
|
27
|
+
form.append("response_format", "verbose_json");
|
|
28
|
+
}
|
|
18
29
|
let response: Response;
|
|
19
30
|
try {
|
|
20
31
|
response = await fetchImpl(`${input.baseUrl}/audio/transcriptions`, {
|
|
@@ -32,20 +43,83 @@ export function createOpenAiTranscriptionProvider(input: {
|
|
|
32
43
|
}
|
|
33
44
|
if (!response.ok) throw responseError(response.status);
|
|
34
45
|
const body = await response.json().catch(() => null);
|
|
35
|
-
|
|
46
|
+
const parsed = parseTranscriptionResponseBody(body);
|
|
47
|
+
if (!parsed) {
|
|
36
48
|
throw new TranscriptionServiceError({
|
|
37
49
|
code: "provider",
|
|
38
50
|
message: "Invalid transcription response.",
|
|
39
51
|
});
|
|
40
52
|
}
|
|
41
|
-
return
|
|
42
|
-
text: body.text,
|
|
43
|
-
languages: typeof body.language === "string" && body.language ? [body.language] : [],
|
|
44
|
-
};
|
|
53
|
+
return parsed;
|
|
45
54
|
},
|
|
46
55
|
};
|
|
47
56
|
}
|
|
48
57
|
|
|
58
|
+
/**
|
|
59
|
+
* OpenAI-compatible `/audio/transcriptions` JSON (OpenAI and Azure OpenAI).
|
|
60
|
+
* `usage` is `{type:"tokens", input_tokens, input_token_details:{audio_tokens,
|
|
61
|
+
* text_tokens}, output_tokens, total_tokens}` for the gpt-4o-transcribe family
|
|
62
|
+
* or `{type:"duration", seconds}` for duration-billed models; Whisper
|
|
63
|
+
* `verbose_json` carries the processed audio `duration`. Unusable usage is
|
|
64
|
+
* dropped (null), never guessed.
|
|
65
|
+
*/
|
|
66
|
+
export function parseTranscriptionResponseBody(
|
|
67
|
+
body: unknown,
|
|
68
|
+
): { text: string; languages: string[]; usage: VoiceInputUsage | null } | null {
|
|
69
|
+
if (!body || typeof body !== "object") return null;
|
|
70
|
+
const record = body as Record<string, unknown>;
|
|
71
|
+
if (typeof record.text !== "string") return null;
|
|
72
|
+
const languages =
|
|
73
|
+
typeof record.language === "string" && record.language
|
|
74
|
+
? [record.language]
|
|
75
|
+
: Array.isArray(record.languages)
|
|
76
|
+
? record.languages.flatMap((language) => {
|
|
77
|
+
const code = typeof language === "string" ? language : language?.code;
|
|
78
|
+
return typeof code === "string" && code ? [code] : [];
|
|
79
|
+
})
|
|
80
|
+
: [];
|
|
81
|
+
return { text: record.text, languages, usage: parseTranscriptionUsage(record) };
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function parseTranscriptionUsage(body: Record<string, unknown>): VoiceInputUsage | null {
|
|
85
|
+
const usage = body.usage;
|
|
86
|
+
if (usage && typeof usage === "object") {
|
|
87
|
+
const record = usage as Record<string, unknown>;
|
|
88
|
+
if (record.type === "tokens") {
|
|
89
|
+
const inputTokens = count(record.input_tokens);
|
|
90
|
+
const outputTokens = count(record.output_tokens);
|
|
91
|
+
if (inputTokens !== null && outputTokens !== null) {
|
|
92
|
+
const details =
|
|
93
|
+
record.input_token_details && typeof record.input_token_details === "object"
|
|
94
|
+
? (record.input_token_details as Record<string, unknown>)
|
|
95
|
+
: {};
|
|
96
|
+
return {
|
|
97
|
+
kind: "tokens",
|
|
98
|
+
inputTokens,
|
|
99
|
+
audioInputTokens: count(details.audio_tokens) ?? 0,
|
|
100
|
+
textInputTokens: count(details.text_tokens) ?? 0,
|
|
101
|
+
outputTokens,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (record.type === "duration" && seconds(record.seconds) !== null) {
|
|
106
|
+
return { kind: "duration", seconds: seconds(record.seconds)! };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const duration = seconds(body.duration);
|
|
110
|
+
return duration === null ? null : { kind: "duration", seconds: duration };
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function count(value: unknown): number | null {
|
|
114
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function seconds(value: unknown): number | null {
|
|
118
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 && value < 86_400
|
|
119
|
+
? value
|
|
120
|
+
: null;
|
|
121
|
+
}
|
|
122
|
+
|
|
49
123
|
function audioBlob(audio: Uint8Array, mimeType: string): Blob {
|
|
50
124
|
return new Blob([Uint8Array.from(audio).buffer], { type: mimeType });
|
|
51
125
|
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { Settings } from "@opengeni/config";
|
|
2
|
+
import { TranscriptionServiceError } from "@opengeni/core";
|
|
3
|
+
import {
|
|
4
|
+
subscriptionCoreOperationConnections,
|
|
5
|
+
type Database,
|
|
6
|
+
type SubscriptionCoreConnectionToken,
|
|
7
|
+
type SubscriptionCoreFetch,
|
|
8
|
+
type SubscriptionCoreProvider,
|
|
9
|
+
} from "@opengeni/db";
|
|
10
|
+
import { fetchError, responseError } from "./openai";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Once a shared-core provider is selected, its failures are final for that
|
|
14
|
+
* audio: provider ordering chose the initial provider only (design 6.5).
|
|
15
|
+
*/
|
|
16
|
+
export function coreTranscriptionUnavailable(): TranscriptionServiceError {
|
|
17
|
+
return new TranscriptionServiceError({
|
|
18
|
+
fallbackSafe: false,
|
|
19
|
+
code: "unavailable",
|
|
20
|
+
message: "Transcription is unavailable.",
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function withoutFallback(error: TranscriptionServiceError): TranscriptionServiceError {
|
|
25
|
+
return new TranscriptionServiceError({
|
|
26
|
+
code: error.code,
|
|
27
|
+
message: error.message,
|
|
28
|
+
status: error.status,
|
|
29
|
+
retryable: error.retryable,
|
|
30
|
+
fallbackSafe: false,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Parse a `{ text, language }` transcription body (response already buffered by custody). */
|
|
35
|
+
export async function coreTranscriptionResult(
|
|
36
|
+
response: Response,
|
|
37
|
+
): Promise<{ text: string; languages: string[] }> {
|
|
38
|
+
if (!response.ok) {
|
|
39
|
+
await response.arrayBuffer().catch(() => undefined);
|
|
40
|
+
throw withoutFallback(responseError(response.status));
|
|
41
|
+
}
|
|
42
|
+
const body = await response.json().catch(() => null);
|
|
43
|
+
if (!body || typeof body.text !== "string") throw withoutFallback(responseError(502));
|
|
44
|
+
return {
|
|
45
|
+
text: body.text,
|
|
46
|
+
languages: typeof body.language === "string" && body.language ? [body.language] : [],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Transcription on the shared subscription core for any provider (the M3
|
|
52
|
+
* Codex rule, EP-N01..N04): a sessionless `transcription` operation for the
|
|
53
|
+
* authenticated caller in an explicit account/workspace context, on a shared
|
|
54
|
+
* organization- or workspace-scoped connection only, under its own operation
|
|
55
|
+
* lease and the per-connection refresh lock. One forced refresh and one
|
|
56
|
+
* retry when the provider refuses the bearer; nothing is retried through
|
|
57
|
+
* another provider once a connection was selected.
|
|
58
|
+
*/
|
|
59
|
+
export async function transcribeOnSubscriptionCore(input: {
|
|
60
|
+
db: Database;
|
|
61
|
+
settings: Settings;
|
|
62
|
+
provider: SubscriptionCoreProvider;
|
|
63
|
+
fetch: SubscriptionCoreFetch;
|
|
64
|
+
accountId: string;
|
|
65
|
+
workspaceId: string;
|
|
66
|
+
subjectId: string;
|
|
67
|
+
requestId: string;
|
|
68
|
+
send: (
|
|
69
|
+
token: SubscriptionCoreConnectionToken,
|
|
70
|
+
fetchImpl: SubscriptionCoreFetch,
|
|
71
|
+
) => Promise<Response>;
|
|
72
|
+
/** The provider refused the bearer (refresh once and retry). */
|
|
73
|
+
unauthorized: (response: Response) => Promise<boolean>;
|
|
74
|
+
}): Promise<{ text: string; languages: string[] }> {
|
|
75
|
+
const scope = {
|
|
76
|
+
kind: "workspace" as const,
|
|
77
|
+
accountId: input.accountId,
|
|
78
|
+
workspaceId: input.workspaceId,
|
|
79
|
+
subjectId: input.subjectId,
|
|
80
|
+
};
|
|
81
|
+
const connections = subscriptionCoreOperationConnections(input.provider);
|
|
82
|
+
const candidates = await connections.listSubscriptionCoreOperationCandidates(input.db, scope);
|
|
83
|
+
const ran = await connections.runSubscriptionCoreOperation(
|
|
84
|
+
input.db,
|
|
85
|
+
input.settings,
|
|
86
|
+
scope,
|
|
87
|
+
{
|
|
88
|
+
candidates: candidates.map((candidate) => candidate.connectionId),
|
|
89
|
+
operationKind: "transcription",
|
|
90
|
+
holderId: `transcription:${input.requestId}`,
|
|
91
|
+
requestId: `transcription:${input.requestId}`,
|
|
92
|
+
fetchImpl: input.fetch,
|
|
93
|
+
},
|
|
94
|
+
async ({ resolver, fetch: requestFetch, fence }) => {
|
|
95
|
+
const dispatch = async (force: boolean): Promise<Response> => {
|
|
96
|
+
let token: SubscriptionCoreConnectionToken;
|
|
97
|
+
try {
|
|
98
|
+
token = force ? await resolver.refresh() : await resolver.getToken();
|
|
99
|
+
} catch {
|
|
100
|
+
throw coreTranscriptionUnavailable();
|
|
101
|
+
}
|
|
102
|
+
// Pre-dispatch fence: the exact operation lease must still be live.
|
|
103
|
+
if (!(await fence())) throw coreTranscriptionUnavailable();
|
|
104
|
+
return await input.send(token, requestFetch);
|
|
105
|
+
};
|
|
106
|
+
let response: Response;
|
|
107
|
+
try {
|
|
108
|
+
response = await dispatch(false);
|
|
109
|
+
if (await input.unauthorized(response)) {
|
|
110
|
+
await response.arrayBuffer().catch(() => undefined);
|
|
111
|
+
response = await dispatch(true);
|
|
112
|
+
}
|
|
113
|
+
} catch (error) {
|
|
114
|
+
if (error instanceof TranscriptionServiceError) throw error;
|
|
115
|
+
// A provider transport failure keeps its classification but is never
|
|
116
|
+
// replayed through another provider.
|
|
117
|
+
throw withoutFallback(fetchError(error));
|
|
118
|
+
}
|
|
119
|
+
// Keep operation custody through parsing, not just response headers.
|
|
120
|
+
return await coreTranscriptionResult(response);
|
|
121
|
+
},
|
|
122
|
+
);
|
|
123
|
+
if (ran.kind === "unavailable") throw coreTranscriptionUnavailable();
|
|
124
|
+
return ran.value;
|
|
125
|
+
}
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import { type Settings } from "@opengeni/config";
|
|
2
|
+
import { type TranscriptionAvailabilityContext, type TranscriptionProvider } from "@opengeni/core";
|
|
2
3
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
getWorkspace,
|
|
5
|
+
readSubscriptionCoreProviderRouteForWorkspace,
|
|
6
|
+
SUBSCRIPTION_CORE_XAI,
|
|
7
|
+
SUBSCRIPTION_CORE_XAI_PROVIDER,
|
|
8
|
+
subscriptionCoreXaiBearer,
|
|
9
|
+
type Database,
|
|
10
|
+
type SubscriptionCoreFetch,
|
|
11
|
+
} from "@opengeni/db";
|
|
8
12
|
import {
|
|
9
13
|
XAI_CLIENT_MODE,
|
|
10
14
|
XAI_CLIENT_VERSION,
|
|
11
15
|
XAI_PUBLIC_API_BASE_URL,
|
|
12
|
-
type XaiFetch,
|
|
13
16
|
} from "@opengeni/xai-subscription";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
17
|
+
import { workspaceXaiOperationAvailable } from "../../xai-subscription-core";
|
|
18
|
+
import { coreTranscriptionUnavailable, transcribeOnSubscriptionCore } from "./subscription-core";
|
|
16
19
|
|
|
17
20
|
const TRANSCRIBE_URL = `${XAI_PUBLIC_API_BASE_URL}/stt`;
|
|
18
21
|
|
|
@@ -30,12 +33,14 @@ export function createXaiSubscriptionTranscriptionProvider(input: {
|
|
|
30
33
|
if (!context?.workspaceId || !context.subjectId) {
|
|
31
34
|
return input.settings.supergrokSubscriptionEnabled;
|
|
32
35
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
const accountId = (await getWorkspace(input.db, context.workspaceId))?.accountId;
|
|
37
|
+
// An unresolvable account fails closed rather than guessing a path.
|
|
38
|
+
if (!accountId) return false;
|
|
39
|
+
return await workspaceXaiOperationAvailable(input.db, input.settings, {
|
|
40
|
+
accountId,
|
|
41
|
+
workspaceId: context.workspaceId,
|
|
42
|
+
subjectId: context.subjectId,
|
|
43
|
+
});
|
|
39
44
|
},
|
|
40
45
|
async transcribe({
|
|
41
46
|
audio,
|
|
@@ -47,81 +52,74 @@ export function createXaiSubscriptionTranscriptionProvider(input: {
|
|
|
47
52
|
requestId,
|
|
48
53
|
signal,
|
|
49
54
|
}) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
settings: input.settings,
|
|
55
|
-
accountId,
|
|
56
|
-
workspaceId,
|
|
57
|
-
subjectId,
|
|
58
|
-
shardKey: requestId,
|
|
59
|
-
sessionId: requestId,
|
|
60
|
-
...(input.fetch ? { fetch: input.fetch as XaiFetch } : {}),
|
|
61
|
-
});
|
|
62
|
-
} catch {
|
|
63
|
-
throw new TranscriptionServiceError({
|
|
64
|
-
code: "unavailable",
|
|
65
|
-
fallbackSafe: true,
|
|
66
|
-
message: "Transcription is unavailable.",
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
const request = async (accessToken: string) => {
|
|
70
|
-
const form = new FormData();
|
|
71
|
-
form.append(
|
|
72
|
-
"file",
|
|
73
|
-
new Blob([Uint8Array.from(audio).buffer], { type: mimeType }),
|
|
55
|
+
const send = async (fetcher: SubscriptionCoreFetch, accessToken: string) =>
|
|
56
|
+
await sendXaiTranscription(fetcher, accessToken, {
|
|
57
|
+
audio,
|
|
58
|
+
mimeType,
|
|
74
59
|
filename,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
method: "POST",
|
|
78
|
-
headers: {
|
|
79
|
-
Authorization: `Bearer ${accessToken}`,
|
|
80
|
-
"User-Agent": `opengeni/${XAI_CLIENT_VERSION}`,
|
|
81
|
-
"x-grok-client-version": XAI_CLIENT_VERSION,
|
|
82
|
-
"x-grok-client-identifier": "opengeni",
|
|
83
|
-
"x-grok-client-mode": XAI_CLIENT_MODE,
|
|
84
|
-
"x-grok-session-id": requestId,
|
|
85
|
-
},
|
|
86
|
-
body: form,
|
|
87
|
-
...(signal ? { signal } : {}),
|
|
60
|
+
requestId,
|
|
61
|
+
signal,
|
|
88
62
|
});
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
if (!response.ok) throw responseError(response.status);
|
|
115
|
-
const body = (await response.json().catch(() => null)) as Record<string, unknown> | null;
|
|
116
|
-
if (!body || typeof body.text !== "string") throw responseError(502);
|
|
117
|
-
return {
|
|
118
|
-
text: body.text,
|
|
119
|
-
languages: typeof body.language === "string" && body.language ? [body.language] : [],
|
|
120
|
-
};
|
|
63
|
+
const route = await readSubscriptionCoreProviderRouteForWorkspace(input.db, {
|
|
64
|
+
accountId,
|
|
65
|
+
workspaceId,
|
|
66
|
+
provider: SUBSCRIPTION_CORE_XAI_PROVIDER,
|
|
67
|
+
});
|
|
68
|
+
// SuperGrok transcribes only on the shared core; any other route
|
|
69
|
+
// (maintenance, or no receipt) is unavailable.
|
|
70
|
+
if (route !== "core") throw coreTranscriptionUnavailable();
|
|
71
|
+
// Decision 3: shared organization- or workspace-scoped connections
|
|
72
|
+
// only; personal SuperGrok accounts never transcribe on the core.
|
|
73
|
+
return await transcribeOnSubscriptionCore({
|
|
74
|
+
db: input.db,
|
|
75
|
+
settings: input.settings,
|
|
76
|
+
provider: SUBSCRIPTION_CORE_XAI,
|
|
77
|
+
fetch: fetchImpl,
|
|
78
|
+
accountId,
|
|
79
|
+
workspaceId,
|
|
80
|
+
subjectId,
|
|
81
|
+
requestId,
|
|
82
|
+
send: async (token, requestFetch) =>
|
|
83
|
+
await send(requestFetch, subscriptionCoreXaiBearer(token).accessToken),
|
|
84
|
+
unauthorized: async (response) =>
|
|
85
|
+
response.status === 401 || (await isXaiInvalidCredentialResponse(response)),
|
|
86
|
+
});
|
|
121
87
|
},
|
|
122
88
|
};
|
|
123
89
|
}
|
|
124
90
|
|
|
91
|
+
async function sendXaiTranscription(
|
|
92
|
+
fetchImpl: SubscriptionCoreFetch,
|
|
93
|
+
accessToken: string,
|
|
94
|
+
input: {
|
|
95
|
+
audio: Uint8Array;
|
|
96
|
+
mimeType: string;
|
|
97
|
+
filename: string;
|
|
98
|
+
requestId: string;
|
|
99
|
+
signal?: AbortSignal | undefined;
|
|
100
|
+
},
|
|
101
|
+
): Promise<Response> {
|
|
102
|
+
const form = new FormData();
|
|
103
|
+
form.append(
|
|
104
|
+
"file",
|
|
105
|
+
new Blob([Uint8Array.from(input.audio).buffer], { type: input.mimeType }),
|
|
106
|
+
input.filename,
|
|
107
|
+
);
|
|
108
|
+
return await fetchImpl(TRANSCRIBE_URL, {
|
|
109
|
+
method: "POST",
|
|
110
|
+
headers: {
|
|
111
|
+
Authorization: `Bearer ${accessToken}`,
|
|
112
|
+
"User-Agent": `opengeni/${XAI_CLIENT_VERSION}`,
|
|
113
|
+
"x-grok-client-version": XAI_CLIENT_VERSION,
|
|
114
|
+
"x-grok-client-identifier": "opengeni",
|
|
115
|
+
"x-grok-client-mode": XAI_CLIENT_MODE,
|
|
116
|
+
"x-grok-session-id": input.requestId,
|
|
117
|
+
},
|
|
118
|
+
body: form,
|
|
119
|
+
...(input.signal ? { signal: input.signal } : {}),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
125
123
|
export async function isXaiInvalidCredentialResponse(response: Response): Promise<boolean> {
|
|
126
124
|
if (response.status !== 403) return false;
|
|
127
125
|
const reader = response.clone().body?.getReader();
|
|
@@ -41,7 +41,9 @@ export function createFfmpegTranscriptionSegmenter(input: {
|
|
|
41
41
|
!Number.isSafeInteger(request.providerSegmentSeconds) ||
|
|
42
42
|
request.providerSegmentSeconds <= 0 ||
|
|
43
43
|
!Number.isSafeInteger(request.totalDurationMilliseconds) ||
|
|
44
|
-
request.totalDurationMilliseconds <= 0
|
|
44
|
+
request.totalDurationMilliseconds <= 0 ||
|
|
45
|
+
(request.maxDecodeSeconds !== undefined &&
|
|
46
|
+
(!Number.isSafeInteger(request.maxDecodeSeconds) || request.maxDecodeSeconds <= 0))
|
|
45
47
|
) {
|
|
46
48
|
throw new TranscriptionSegmenterError(
|
|
47
49
|
"Audio segmentation bounds are invalid",
|
|
@@ -77,6 +79,10 @@ export function createFfmpegTranscriptionSegmenter(input: {
|
|
|
77
79
|
"-y",
|
|
78
80
|
"-i",
|
|
79
81
|
inputPath,
|
|
82
|
+
// Output-side ceiling: audio past it is never decoded or written.
|
|
83
|
+
...(request.maxDecodeSeconds !== undefined
|
|
84
|
+
? ["-t", String(request.maxDecodeSeconds)]
|
|
85
|
+
: []),
|
|
80
86
|
"-map",
|
|
81
87
|
"0:a:0",
|
|
82
88
|
"-vn",
|