@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.
Files changed (546) hide show
  1. package/dist/access-grant-rls.d.ts +8 -1
  2. package/dist/admission-trace.d.ts +8 -0
  3. package/dist/app.d.ts +50 -3
  4. package/dist/app.js +10 -1
  5. package/dist/artifact-catalog-cursor.d.ts +1 -0
  6. package/dist/attached-browser-viewer.d.ts +11 -0
  7. package/dist/auth/managed-auth-attempt-context.d.ts +2 -0
  8. package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
  9. package/dist/auth/managed-auth-session-adapter.d.ts +9 -1
  10. package/dist/auth/managed-auth.d.ts +72 -5
  11. package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
  12. package/dist/auth/new-signups-gate.d.ts +23 -0
  13. package/dist/auth/signup-funnel-metrics.d.ts +44 -0
  14. package/dist/azure-live.d.ts +28 -0
  15. package/dist/browser-action-fences.d.ts +13 -0
  16. package/dist/browser-controller-authority.d.ts +1 -61
  17. package/dist/browser-ephemeral.d.ts +5 -0
  18. package/dist/browser-lost-runtime-end.d.ts +24 -0
  19. package/dist/browser-state-authority.d.ts +1 -27
  20. package/dist/chunk-OGQDXVXY.js +18 -0
  21. package/dist/chunk-OGQDXVXY.js.map +1 -0
  22. package/dist/{chunk-AJ62T5QN.js → chunk-OT56OY4V.js} +80503 -39869
  23. package/dist/chunk-OT56OY4V.js.map +1 -0
  24. package/dist/claude-default-models.d.ts +19 -0
  25. package/dist/claude-subscription-core.d.ts +50 -0
  26. package/dist/claude-subscription-oauth.d.ts +36 -0
  27. package/dist/claude-subscription-profile.d.ts +9 -0
  28. package/dist/claude-subscription-usage.d.ts +6 -0
  29. package/dist/claude-workspace-connection.d.ts +15 -0
  30. package/dist/codemode.d.ts +40 -5
  31. package/dist/codex-realtime.d.ts +29 -3
  32. package/dist/codex-session-pointers.d.ts +19 -0
  33. package/dist/connection-ownership.d.ts +6 -3
  34. package/dist/controller-data-plane.d.ts +16 -0
  35. package/dist/credit-promotion-snapshot.d.ts +6 -0
  36. package/dist/editable-artifact-source-session.d.ts +3 -0
  37. package/dist/editable-artifact-websocket.d.ts +5 -3
  38. package/dist/fatal-process-boundary.d.ts +9 -1
  39. package/dist/github-access.d.ts +7 -1
  40. package/dist/github-browser-flow.d.ts +1 -1
  41. package/dist/http/acting-person.d.ts +36 -0
  42. package/dist/http/api-contract-compat.d.ts +19 -0
  43. package/dist/http/api-error.d.ts +50 -1
  44. package/dist/http/auth.d.ts +8 -1
  45. package/dist/http/cors.d.ts +12 -0
  46. package/dist/http/deprecation.d.ts +42 -0
  47. package/dist/http/keyed-admission.d.ts +12 -0
  48. package/dist/http/local-browser-boundary.d.ts +72 -0
  49. package/dist/http/metrics-listener.d.ts +22 -0
  50. package/dist/http/path-identifier.d.ts +17 -0
  51. package/dist/http/registered-route-label.d.ts +16 -0
  52. package/dist/http/rejection-telemetry.d.ts +34 -0
  53. package/dist/http/request-body.d.ts +27 -0
  54. package/dist/http/request-source.d.ts +41 -3
  55. package/dist/http/sse.d.ts +12 -1
  56. package/dist/http/unmatched-route.d.ts +18 -0
  57. package/dist/http/user-content.d.ts +36 -0
  58. package/dist/http/variable-sets-removed.d.ts +41 -0
  59. package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
  60. package/dist/index.js +1279 -108
  61. package/dist/index.js.map +1 -1
  62. package/dist/integration-connect-metrics.d.ts +35 -0
  63. package/dist/integration-endpoint-test.d.ts +20 -0
  64. package/dist/integrations/api-integrations.d.ts +2 -2
  65. package/dist/integrations/atlassian.d.ts +8 -3
  66. package/dist/integrations/fiken.d.ts +3 -1
  67. package/dist/integrations/github-lens-connect.d.ts +37 -66
  68. package/dist/integrations/google-drive.d.ts +2 -0
  69. package/dist/integrations/integration-commit-authority.d.ts +13 -0
  70. package/dist/integrations/marketplace-plugin.d.ts +43 -43
  71. package/dist/integrations/oauth-client.d.ts +171 -12
  72. package/dist/integrations/oauth-profiles.d.ts +42 -13
  73. package/dist/integrations/onepassword-vault-provider.d.ts +9 -0
  74. package/dist/integrations/slack-bot.d.ts +285 -7
  75. package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
  76. package/dist/integrations/slack-interactions.d.ts +89 -10
  77. package/dist/integrations/slack-mrkdwn.d.ts +41 -0
  78. package/dist/integrations/slack-routing.d.ts +1 -1
  79. package/dist/integrations/slack-session-defaults.d.ts +58 -0
  80. package/dist/integrations/slack-task-file-upload.d.ts +36 -0
  81. package/dist/integrations/slack-tool-review.d.ts +5 -0
  82. package/dist/interaction-agent-access.d.ts +13 -8
  83. package/dist/interaction-agent-version.d.ts +21 -0
  84. package/dist/interaction-holder-heartbeat.d.ts +5 -0
  85. package/dist/interaction-metrics.d.ts +27 -2
  86. package/dist/interaction-route-stages.d.ts +25 -0
  87. package/dist/interaction-secrets-vault.d.ts +20 -0
  88. package/dist/interaction-secrets.d.ts +103 -0
  89. package/dist/mcp/action-catalog-types.d.ts +14 -0
  90. package/dist/mcp/action-catalog.gen.d.ts +2 -0
  91. package/dist/mcp/action-descriptions.d.ts +4 -0
  92. package/dist/mcp/action-schema-imports.gen.d.ts +1 -0
  93. package/dist/mcp/capability-account-readiness.d.ts +7 -0
  94. package/dist/mcp/child-read-evidence.d.ts +9 -0
  95. package/dist/mcp/company-profile-agent-admin.d.ts +12 -0
  96. package/dist/mcp/contract-input.d.ts +13 -0
  97. package/dist/mcp/documents.d.ts +2 -0
  98. package/dist/mcp/first-party-tool-permissions.d.ts +3 -606
  99. package/dist/mcp/notification-tools.d.ts +26 -0
  100. package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
  101. package/dist/mcp/scheduled-task-input.d.ts +1309 -0
  102. package/dist/mcp/scheduled-task-view.d.ts +217 -3
  103. package/dist/mcp/secret-tools.d.ts +14 -0
  104. package/dist/mcp/server.d.ts +108 -5
  105. package/dist/mcp/session-admin-access-tools.d.ts +33 -0
  106. package/dist/mcp/session-event-errors.d.ts +28 -0
  107. package/dist/mcp/session-event-view.d.ts +62 -0
  108. package/dist/mcp/session-view.d.ts +15 -0
  109. package/dist/mcp/session-wait.d.ts +18 -0
  110. package/dist/mcp/site-agent-clamp-tools.d.ts +38 -0
  111. package/dist/mcp/site-data-tools.d.ts +22 -0
  112. package/dist/mcp/site-publication-tools.d.ts +19 -0
  113. package/dist/mcp/site-sql-tools.d.ts +27 -0
  114. package/dist/mcp-oauth.d.ts +37 -4
  115. package/dist/model-calls/chat-completions.d.ts +87 -0
  116. package/dist/model-calls/pending-usage-settlements.d.ts +57 -0
  117. package/dist/model-calls/service.d.ts +36 -0
  118. package/dist/model-catalog.d.ts +9 -3
  119. package/dist/native-push-dispatch.d.ts +69 -0
  120. package/dist/observability.d.ts +3 -1
  121. package/dist/organization-mcp.d.ts +82 -0
  122. package/dist/prepared-mcp-actor.d.ts +77 -0
  123. package/dist/prepared-mcp-permissions.d.ts +8 -0
  124. package/dist/routes/analytics-consent.d.ts +26 -0
  125. package/dist/routes/api-integrations.d.ts +11 -0
  126. package/dist/routes/api-keys.d.ts +7 -7
  127. package/dist/routes/automations.d.ts +2 -0
  128. package/dist/routes/billing.d.ts +59 -0
  129. package/dist/routes/browser-sessions.d.ts +65 -2
  130. package/dist/routes/chat-completions.d.ts +11 -0
  131. package/dist/routes/claude-core-usage.d.ts +20 -0
  132. package/dist/routes/claude-subscription-accounts.d.ts +3 -0
  133. package/dist/routes/claude-subscription-oauth.d.ts +3 -0
  134. package/dist/routes/client-errors.d.ts +182 -0
  135. package/dist/routes/codex-core.d.ts +401 -0
  136. package/dist/routes/codex.d.ts +64 -2
  137. package/dist/routes/computer-sessions.d.ts +6 -1
  138. package/dist/routes/desktop-distribution.d.ts +32 -0
  139. package/dist/routes/github-browser-fonts.gen.d.ts +2 -0
  140. package/dist/routes/github-browser-pages.d.ts +27 -0
  141. package/dist/routes/inbox.d.ts +13 -0
  142. package/dist/routes/insights-response-cache.d.ts +10 -0
  143. package/dist/routes/insights-usage.d.ts +12 -0
  144. package/dist/routes/insights.d.ts +28 -0
  145. package/dist/routes/interaction-placement-message.d.ts +7 -0
  146. package/dist/routes/managed-sign-in-methods.d.ts +6 -0
  147. package/dist/routes/model-account-choice.d.ts +13 -0
  148. package/dist/routes/model-account-settings.d.ts +19 -0
  149. package/dist/routes/native-app-auth.d.ts +12 -0
  150. package/dist/routes/organization-integration-policy.d.ts +8 -0
  151. package/dist/routes/organization-integrations.d.ts +6 -0
  152. package/dist/routes/organization-mcp-connections.d.ts +3 -0
  153. package/dist/routes/organization-model-defaults.d.ts +9 -0
  154. package/dist/routes/organization-service-accounts.d.ts +3 -0
  155. package/dist/routes/personal-api-keys.d.ts +3 -0
  156. package/dist/routes/session-admin-access.d.ts +3 -0
  157. package/dist/routes/session-artifact-associations.d.ts +4 -0
  158. package/dist/routes/session-history-imports.d.ts +20 -0
  159. package/dist/routes/sessions.d.ts +38 -2
  160. package/dist/routes/site-data.d.ts +18 -0
  161. package/dist/routes/site-publishing.d.ts +5 -0
  162. package/dist/routes/site-runtime.d.ts +31 -0
  163. package/dist/routes/site-sql.d.ts +16 -0
  164. package/dist/routes/slack-bot-access.d.ts +3 -0
  165. package/dist/routes/subscription-account-pools.d.ts +21 -0
  166. package/dist/routes/subscription-core-http.d.ts +5 -0
  167. package/dist/routes/subscription-pool-access.d.ts +37 -0
  168. package/dist/routes/subscription-pool-core.d.ts +153 -0
  169. package/dist/routes/supergrok.d.ts +6 -6
  170. package/dist/routes/usage-allowances.d.ts +12 -0
  171. package/dist/routes/variable-sets-removed.d.ts +2 -0
  172. package/dist/routes/vault-providers.d.ts +34 -0
  173. package/dist/routes/vaults.d.ts +3 -0
  174. package/dist/routes/workspace-integrations.d.ts +35 -0
  175. package/dist/routes/workspace-model-providers.d.ts +4 -0
  176. package/dist/routes/workspaces.d.ts +11 -2
  177. package/dist/sandbox/agent-update.d.ts +64 -0
  178. package/dist/sandbox/auth-callout.d.ts +8 -0
  179. package/dist/sandbox/channel-a.d.ts +15 -1
  180. package/dist/sandbox/enrollment.d.ts +26 -4
  181. package/dist/sandbox/machine-audience.d.ts +29 -0
  182. package/dist/sandbox/machines.d.ts +15 -2
  183. package/dist/sandbox/metrics-ingestion.d.ts +6 -2
  184. package/dist/sandbox/screen-control.d.ts +85 -0
  185. package/dist/sandbox/viewer.d.ts +5 -1
  186. package/dist/sandbox-file-artifacts.d.ts +17 -1
  187. package/dist/scheduled-task-blockers.d.ts +39 -0
  188. package/dist/scheduled-task-deletion.d.ts +3 -4
  189. package/dist/scheduled-task-lifecycle.d.ts +14 -0
  190. package/dist/secret-answers.d.ts +40 -0
  191. package/dist/session-create-observability.d.ts +5 -0
  192. package/dist/session-event-view-36GO3IL7.js +528 -0
  193. package/dist/session-event-view-36GO3IL7.js.map +1 -0
  194. package/dist/signed-state-secret.d.ts +18 -0
  195. package/dist/site-agent-guard.d.ts +53 -0
  196. package/dist/site-data/operations.d.ts +103 -0
  197. package/dist/site-data/service.d.ts +203 -0
  198. package/dist/site-frame-guard.d.ts +32 -0
  199. package/dist/site-publishing/agent-data-tools.d.ts +84 -0
  200. package/dist/site-publishing/agent-model.d.ts +58 -0
  201. package/dist/site-publishing/agent-session.d.ts +16 -0
  202. package/dist/site-publishing/content-scanner.d.ts +31 -0
  203. package/dist/site-publishing/edge-sync.d.ts +48 -0
  204. package/dist/site-publishing/gateway-signature.d.ts +56 -0
  205. package/dist/site-publishing/limits.d.ts +63 -0
  206. package/dist/site-publishing/page-tool-authority.d.ts +30 -0
  207. package/dist/site-publishing/platform-usage.d.ts +113 -0
  208. package/dist/site-publishing/platform.d.ts +21 -0
  209. package/dist/site-publishing/readiness.d.ts +62 -0
  210. package/dist/site-publishing/runtime.d.ts +179 -0
  211. package/dist/site-publishing/service.d.ts +264 -0
  212. package/dist/site-publishing/session-events.d.ts +22 -0
  213. package/dist/site-publishing/session-views.d.ts +36 -0
  214. package/dist/site-publishing/viewer.d.ts +40 -0
  215. package/dist/site-session-origin.d.ts +31 -6
  216. package/dist/site-sql/format.d.ts +47 -0
  217. package/dist/site-sql/gateway.d.ts +50 -0
  218. package/dist/site-sql/service.d.ts +213 -0
  219. package/dist/temporal-schedule-sync.d.ts +26 -0
  220. package/dist/transcription/billing-refusal.d.ts +8 -0
  221. package/dist/transcription/normalize.d.ts +23 -0
  222. package/dist/transcription/providers/azure-mai.d.ts +12 -0
  223. package/dist/transcription/providers/azure-openai.d.ts +4 -0
  224. package/dist/transcription/providers/openai.d.ts +16 -0
  225. package/dist/transcription/providers/subscription-core.d.ts +39 -0
  226. package/dist/transcription/service.d.ts +10 -1
  227. package/dist/transcription/wav-duration.d.ts +8 -0
  228. package/dist/workspace-tool-gateway-attestations.d.ts +37 -0
  229. package/dist/workspace-tool-gateway-observability.d.ts +16 -0
  230. package/dist/workspace-tool-gateway-secrets.d.ts +27 -0
  231. package/dist/workspace-tool-gateway.d.ts +102 -6
  232. package/dist/workspace-tool-target-fence.d.ts +116 -0
  233. package/dist/workspace-tool-target.d.ts +225 -0
  234. package/dist/workspace-webhook-dispatch.d.ts +26 -0
  235. package/dist/xai-subscription-core.d.ts +60 -0
  236. package/package.json +25 -20
  237. package/src/access-grant-rls.ts +64 -14
  238. package/src/admission-trace.ts +14 -0
  239. package/src/app.ts +1684 -252
  240. package/src/artifact-catalog-cursor.ts +1 -0
  241. package/src/attached-browser-viewer.ts +26 -0
  242. package/src/auth/managed-auth-attempt-context.ts +9 -0
  243. package/src/auth/managed-auth-rate-limits.ts +252 -0
  244. package/src/auth/managed-auth-session-adapter.ts +64 -29
  245. package/src/auth/managed-auth.ts +303 -35
  246. package/src/auth/managed-email.ts +18 -1
  247. package/src/auth/managed-sign-in-notifications.ts +81 -0
  248. package/src/auth/new-signups-gate.ts +49 -0
  249. package/src/auth/organization-user-setup.ts +3 -3
  250. package/src/auth/signup-funnel-metrics.ts +164 -0
  251. package/src/azure-live.ts +103 -0
  252. package/src/browser-action-fences.ts +45 -0
  253. package/src/browser-controller-authority.ts +1 -186
  254. package/src/browser-ephemeral.ts +39 -0
  255. package/src/browser-lost-runtime-end.ts +71 -0
  256. package/src/browser-state-authority.ts +1 -236
  257. package/src/claude-default-models.ts +37 -0
  258. package/src/claude-subscription-core.ts +154 -0
  259. package/src/claude-subscription-oauth.ts +352 -0
  260. package/src/claude-subscription-profile.ts +73 -0
  261. package/src/claude-subscription-usage.ts +51 -0
  262. package/src/claude-workspace-connection.ts +82 -0
  263. package/src/codemode.ts +236 -39
  264. package/src/codex-realtime.ts +181 -53
  265. package/src/codex-session-pointers.ts +80 -0
  266. package/src/company-brain-okf.ts +1 -1
  267. package/src/connected-machine-computer-access.ts +2 -1
  268. package/src/connection-ownership.ts +19 -13
  269. package/src/controller-data-plane.ts +34 -0
  270. package/src/credit-promotion-snapshot.ts +36 -0
  271. package/src/editable-artifact-production.ts +10 -0
  272. package/src/editable-artifact-source-session.ts +123 -0
  273. package/src/editable-artifact-websocket.ts +16 -3
  274. package/src/fatal-process-boundary.ts +67 -3
  275. package/src/gateway-realtime.ts +12 -8
  276. package/src/github-access.ts +31 -5
  277. package/src/github-browser-flow.ts +1 -1
  278. package/src/http/acting-person.ts +105 -0
  279. package/src/http/api-contract-compat.ts +49 -0
  280. package/src/http/api-error.ts +210 -2
  281. package/src/http/auth.ts +68 -4
  282. package/src/http/cors.ts +37 -5
  283. package/src/http/deprecation.ts +118 -0
  284. package/src/http/keyed-admission.ts +29 -0
  285. package/src/http/local-browser-boundary.ts +343 -0
  286. package/src/http/metrics-listener.ts +57 -0
  287. package/src/http/path-identifier.ts +54 -0
  288. package/src/http/registered-route-label.ts +34 -0
  289. package/src/http/rejection-telemetry.ts +120 -0
  290. package/src/http/request-body.ts +127 -0
  291. package/src/http/request-source.ts +154 -13
  292. package/src/http/sse.ts +88 -28
  293. package/src/http/unmatched-route.ts +60 -0
  294. package/src/http/user-content.ts +158 -0
  295. package/src/http/variable-sets-removed.ts +122 -0
  296. package/src/http/websocket-upgrade-dispatch.ts +29 -0
  297. package/src/index.ts +107 -57
  298. package/src/integration-connect-metrics.ts +228 -0
  299. package/src/integration-endpoint-test.ts +291 -0
  300. package/src/integrations/api-integrations.ts +81 -7
  301. package/src/integrations/atlassian.ts +202 -83
  302. package/src/integrations/fiken.ts +66 -38
  303. package/src/integrations/github-app-connect.ts +64 -18
  304. package/src/integrations/github-lens-connect.ts +8 -29
  305. package/src/integrations/google-drive.ts +448 -152
  306. package/src/integrations/integration-commit-authority.ts +69 -0
  307. package/src/integrations/marketplace-plugin.ts +1 -1
  308. package/src/integrations/oauth-client.ts +733 -193
  309. package/src/integrations/oauth-profiles.ts +116 -45
  310. package/src/integrations/onepassword-vault-provider.ts +16 -0
  311. package/src/integrations/personal-github-repositories.ts +1 -1
  312. package/src/integrations/personal-github.ts +61 -35
  313. package/src/integrations/provider-oauth.ts +67 -85
  314. package/src/integrations/slack-app-home.ts +5 -5
  315. package/src/integrations/slack-bot.ts +893 -201
  316. package/src/integrations/slack-file-upload-flow.ts +147 -0
  317. package/src/integrations/slack-install.ts +7 -7
  318. package/src/integrations/slack-interactions.ts +1589 -299
  319. package/src/integrations/slack-mrkdwn.ts +193 -0
  320. package/src/integrations/slack-routing.ts +2 -2
  321. package/src/integrations/slack-session-defaults.ts +224 -0
  322. package/src/integrations/slack-task-file-upload.ts +323 -0
  323. package/src/integrations/slack-tool-review.ts +65 -0
  324. package/src/integrations/social-oauth.ts +90 -58
  325. package/src/interaction-agent-access.ts +40 -20
  326. package/src/interaction-agent-version.ts +85 -0
  327. package/src/interaction-holder-heartbeat.ts +24 -8
  328. package/src/interaction-metrics.ts +164 -2
  329. package/src/interaction-route-stages.ts +94 -0
  330. package/src/interaction-secrets-vault.ts +213 -0
  331. package/src/interaction-secrets.ts +426 -0
  332. package/src/mcp/action-catalog-types.ts +14 -0
  333. package/src/mcp/action-catalog.gen.ts +8014 -0
  334. package/src/mcp/action-descriptions.ts +299 -0
  335. package/src/mcp/action-schema-imports.gen.ts +304 -0
  336. package/src/mcp/capability-account-readiness.ts +17 -0
  337. package/src/mcp/child-read-evidence.ts +19 -0
  338. package/src/mcp/company-profile-agent-admin.ts +13 -0
  339. package/src/mcp/contract-input.ts +165 -0
  340. package/src/mcp/documents.ts +9 -2
  341. package/src/mcp/editable-artifacts.ts +29 -11
  342. package/src/mcp/files.ts +5 -1
  343. package/src/mcp/first-party-tool-permissions.ts +7 -285
  344. package/src/mcp/knowledge-entries.ts +108 -34
  345. package/src/mcp/notification-tools.ts +480 -0
  346. package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
  347. package/src/mcp/scheduled-task-input.ts +89 -0
  348. package/src/mcp/scheduled-task-view.ts +63 -3
  349. package/src/mcp/secret-tools.ts +185 -0
  350. package/src/mcp/server.ts +2213 -1116
  351. package/src/mcp/session-admin-access-tools.ts +163 -0
  352. package/src/mcp/session-event-errors.ts +123 -0
  353. package/src/mcp/session-event-view.ts +395 -13
  354. package/src/mcp/session-view.ts +3 -0
  355. package/src/mcp/session-wait.ts +67 -7
  356. package/src/mcp/site-agent-clamp-tools.ts +140 -0
  357. package/src/mcp/site-data-tools.ts +339 -0
  358. package/src/mcp/site-publication-tools.ts +201 -0
  359. package/src/mcp/site-sql-tools.ts +427 -0
  360. package/src/mcp-oauth.ts +635 -45
  361. package/src/model-calls/chat-completions.ts +352 -0
  362. package/src/model-calls/pending-usage-settlements.ts +125 -0
  363. package/src/model-calls/service.ts +694 -0
  364. package/src/model-catalog.ts +68 -17
  365. package/src/native-push-dispatch.ts +457 -0
  366. package/src/observability.ts +15 -1
  367. package/src/organization-mcp.ts +485 -0
  368. package/src/prepared-mcp-actor.ts +154 -0
  369. package/src/prepared-mcp-permissions.ts +38 -0
  370. package/src/routes/analytics-consent.ts +123 -0
  371. package/src/routes/api-integrations.ts +268 -9
  372. package/src/routes/api-keys.ts +164 -25
  373. package/src/routes/artifact-catalog.ts +111 -0
  374. package/src/routes/automations.ts +163 -90
  375. package/src/routes/billing.ts +535 -59
  376. package/src/routes/browser-sessions.ts +966 -342
  377. package/src/routes/canonical-human-identities.ts +61 -0
  378. package/src/routes/capabilities.ts +112 -5
  379. package/src/routes/channels.ts +4 -3
  380. package/src/routes/chat-completions.ts +235 -0
  381. package/src/routes/claude-core-usage.ts +147 -0
  382. package/src/routes/claude-subscription-accounts.ts +233 -0
  383. package/src/routes/claude-subscription-oauth.ts +175 -0
  384. package/src/routes/client-errors.ts +394 -0
  385. package/src/routes/codex-core.ts +687 -0
  386. package/src/routes/codex.ts +1277 -1119
  387. package/src/routes/company-brain.ts +4 -0
  388. package/src/routes/computer-sessions.ts +319 -85
  389. package/src/routes/connect.ts +277 -175
  390. package/src/routes/connections.ts +690 -363
  391. package/src/routes/desktop-distribution.ts +217 -0
  392. package/src/routes/documents.ts +13 -7
  393. package/src/routes/editable-artifacts.ts +74 -4
  394. package/src/routes/enrollments.ts +110 -16
  395. package/src/routes/external-identity-links.ts +13 -12
  396. package/src/routes/files.ts +41 -16
  397. package/src/routes/github-browser-fonts.gen.ts +12 -0
  398. package/src/routes/github-browser-pages.ts +258 -0
  399. package/src/routes/github.ts +200 -75
  400. package/src/routes/inbox.ts +353 -0
  401. package/src/routes/insights-response-cache.ts +83 -0
  402. package/src/routes/insights-usage.ts +345 -0
  403. package/src/routes/insights.ts +103 -8
  404. package/src/routes/install.ts +51 -10
  405. package/src/routes/integration-facets.ts +70 -28
  406. package/src/routes/interaction-placement-message.ts +12 -0
  407. package/src/routes/knowledge.ts +136 -27
  408. package/src/routes/machines.ts +189 -135
  409. package/src/routes/managed-auth-session-sets.ts +43 -10
  410. package/src/routes/managed-onboarding.ts +39 -19
  411. package/src/routes/managed-sign-in-methods.ts +433 -0
  412. package/src/routes/memory-slack-publications.ts +3 -2
  413. package/src/routes/model-account-choice.ts +194 -0
  414. package/src/routes/model-account-settings.ts +235 -0
  415. package/src/routes/model-connection-access.ts +210 -48
  416. package/src/routes/native-app-auth.ts +296 -0
  417. package/src/routes/organization-integration-policy.ts +116 -0
  418. package/src/routes/organization-integrations.ts +326 -0
  419. package/src/routes/organization-mcp-connections.ts +183 -0
  420. package/src/routes/organization-memberships.ts +205 -19
  421. package/src/routes/organization-model-defaults.ts +110 -0
  422. package/src/routes/organization-model-providers.ts +74 -3
  423. package/src/routes/organization-service-accounts.ts +128 -0
  424. package/src/routes/organization-sessions.ts +21 -5
  425. package/src/routes/personal-api-keys.ts +184 -0
  426. package/src/routes/personal-github-git-broker.ts +2 -2
  427. package/src/routes/personal-github.ts +9 -4
  428. package/src/routes/plugins.ts +46 -7
  429. package/src/routes/pr-review-github.ts +105 -118
  430. package/src/routes/pr-review.ts +88 -82
  431. package/src/routes/preference-registry.ts +18 -0
  432. package/src/routes/rigs.ts +48 -13
  433. package/src/routes/scheduled-tasks.ts +347 -27
  434. package/src/routes/session-admin-access.ts +271 -0
  435. package/src/routes/session-artifact-associations.ts +164 -0
  436. package/src/routes/session-history-imports.ts +305 -0
  437. package/src/routes/sessions.ts +1682 -363
  438. package/src/routes/site-data.ts +340 -0
  439. package/src/routes/site-publishing.ts +584 -0
  440. package/src/routes/site-runtime.ts +1944 -0
  441. package/src/routes/site-sql.ts +263 -0
  442. package/src/routes/skill-content.ts +72 -7
  443. package/src/routes/skills.ts +5 -4
  444. package/src/routes/slack-bot-access.ts +108 -0
  445. package/src/routes/social.ts +27 -15
  446. package/src/routes/subscription-account-pools.ts +209 -0
  447. package/src/routes/subscription-core-http.ts +18 -0
  448. package/src/routes/subscription-pool-access.ts +180 -0
  449. package/src/routes/subscription-pool-core.ts +552 -0
  450. package/src/routes/supergrok.ts +174 -655
  451. package/src/routes/transcription-recordings.ts +71 -4
  452. package/src/routes/transcriptions.ts +26 -2
  453. package/src/routes/usage-allowances.ts +381 -0
  454. package/src/routes/variable-sets-removed.ts +19 -0
  455. package/src/routes/vault-providers.ts +782 -0
  456. package/src/routes/vaults.ts +421 -0
  457. package/src/routes/video-generation.ts +30 -12
  458. package/src/routes/workspace-artifacts.ts +165 -53
  459. package/src/routes/workspace-integrations.ts +576 -0
  460. package/src/routes/workspace-model-providers.ts +148 -0
  461. package/src/routes/workspace-state.ts +4 -0
  462. package/src/routes/workspaces.ts +625 -117
  463. package/src/sandbox/agent-update.ts +315 -0
  464. package/src/sandbox/auth-callout.ts +104 -21
  465. package/src/sandbox/channel-a.ts +165 -55
  466. package/src/sandbox/enrollment.ts +131 -22
  467. package/src/sandbox/machine-audience.ts +192 -0
  468. package/src/sandbox/machines.ts +75 -31
  469. package/src/sandbox/metrics-ingestion.ts +133 -2
  470. package/src/sandbox/rematerialize.ts +51 -21
  471. package/src/sandbox/screen-control.ts +289 -0
  472. package/src/sandbox/viewer.ts +33 -58
  473. package/src/sandbox-file-artifacts.ts +53 -27
  474. package/src/scheduled-task-blockers.ts +293 -0
  475. package/src/scheduled-task-deletion.ts +13 -3
  476. package/src/scheduled-task-lifecycle.ts +84 -0
  477. package/src/secret-answers.ts +119 -0
  478. package/src/session-create-observability.ts +46 -0
  479. package/src/session-realtime-context.ts +26 -4
  480. package/src/signed-state-secret.ts +58 -0
  481. package/src/site-agent-guard.ts +261 -0
  482. package/src/site-data/operations.ts +777 -0
  483. package/src/site-data/service.ts +1043 -0
  484. package/src/site-frame-guard.ts +107 -0
  485. package/src/site-publishing/agent-data-tools.ts +250 -0
  486. package/src/site-publishing/agent-model.ts +127 -0
  487. package/src/site-publishing/agent-session.ts +148 -0
  488. package/src/site-publishing/content-scanner.ts +93 -0
  489. package/src/site-publishing/edge-sync.ts +148 -0
  490. package/src/site-publishing/gateway-signature.ts +198 -0
  491. package/src/site-publishing/limits.ts +315 -0
  492. package/src/site-publishing/page-tool-authority.ts +111 -0
  493. package/src/site-publishing/platform-usage.ts +479 -0
  494. package/src/site-publishing/platform.ts +98 -0
  495. package/src/site-publishing/readiness.ts +330 -0
  496. package/src/site-publishing/runtime.ts +831 -0
  497. package/src/site-publishing/service.ts +1282 -0
  498. package/src/site-publishing/session-events.ts +262 -0
  499. package/src/site-publishing/session-views.ts +262 -0
  500. package/src/site-publishing/viewer.ts +75 -0
  501. package/src/site-session-origin.ts +91 -6
  502. package/src/site-sql/format.ts +134 -0
  503. package/src/site-sql/gateway.ts +168 -0
  504. package/src/site-sql/service.ts +1636 -0
  505. package/src/site-uploads.ts +27 -5
  506. package/src/temporal-schedule-sync.ts +74 -0
  507. package/src/transcription/billing-refusal.ts +14 -0
  508. package/src/transcription/normalize.ts +77 -0
  509. package/src/transcription/providers/azure-mai.ts +98 -0
  510. package/src/transcription/providers/azure-openai.ts +16 -7
  511. package/src/transcription/providers/codex-subscription.ts +190 -67
  512. package/src/transcription/providers/openai.ts +79 -5
  513. package/src/transcription/providers/subscription-core.ts +125 -0
  514. package/src/transcription/providers/xai-subscription.ts +81 -83
  515. package/src/transcription/segmenter.ts +7 -1
  516. package/src/transcription/service.ts +239 -10
  517. package/src/transcription/wav-duration.ts +39 -0
  518. package/src/workspace-deletion.ts +25 -1
  519. package/src/workspace-tool-gateway-attestations.ts +133 -0
  520. package/src/workspace-tool-gateway-observability.ts +64 -0
  521. package/src/workspace-tool-gateway-secrets.ts +104 -0
  522. package/src/workspace-tool-gateway.ts +921 -103
  523. package/src/workspace-tool-target-fence.ts +380 -0
  524. package/src/workspace-tool-target.ts +554 -0
  525. package/src/workspace-webhook-dispatch.ts +225 -0
  526. package/src/xai-realtime.ts +85 -81
  527. package/src/xai-subscription-core.ts +172 -0
  528. package/dist/browser-auth-broker.d.ts +0 -20
  529. package/dist/chunk-AJ62T5QN.js.map +0 -1
  530. package/dist/connection-authority-owner.d.ts +0 -59
  531. package/dist/routes/connection-authorities.d.ts +0 -3
  532. package/dist/routes/environments.d.ts +0 -5
  533. package/dist/routes/host-mcp-bindings.d.ts +0 -5
  534. package/dist/routes/host-mcp-resolvers.d.ts +0 -3
  535. package/dist/routes/packs.d.ts +0 -3
  536. package/dist/session-event-view-MU3HMNV3.js +0 -264
  537. package/dist/session-event-view-MU3HMNV3.js.map +0 -1
  538. package/dist/xai-subscription-auth.d.ts +0 -23
  539. package/src/browser-auth-broker.ts +0 -155
  540. package/src/connection-authority-owner.ts +0 -61
  541. package/src/routes/connection-authorities.ts +0 -139
  542. package/src/routes/environments.ts +0 -388
  543. package/src/routes/host-mcp-bindings.ts +0 -122
  544. package/src/routes/host-mcp-resolvers.ts +0 -41
  545. package/src/routes/packs.ts +0 -784
  546. 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
- if (!body || typeof body.text !== "string") {
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
- type TranscriptionAvailabilityContext,
4
- type TranscriptionProvider,
5
- TranscriptionServiceError,
6
- } from "@opengeni/core";
7
- import { workspaceXaiSubscriptionActive, type Database } from "@opengeni/db";
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 { buildXaiSubscriptionAuthorization } from "../../xai-subscription-auth";
15
- import { fetchError, responseError } from "./openai";
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
- return await workspaceXaiSubscriptionActive(
34
- input.db,
35
- input.settings,
36
- context.workspaceId,
37
- context.subjectId,
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
- let auth: Awaited<ReturnType<typeof buildXaiSubscriptionAuthorization>>;
51
- try {
52
- auth = await buildXaiSubscriptionAuthorization({
53
- db: input.db,
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
- return await fetchImpl(TRANSCRIBE_URL, {
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
- const tokenForRequest = async (refresh: boolean) => {
91
- try {
92
- return await (refresh ? auth.context.refresh() : auth.context.getToken());
93
- } catch {
94
- throw new TranscriptionServiceError({
95
- code: "unavailable",
96
- message: "Reconnect the SuperGrok account to use transcription.",
97
- fallbackSafe: true,
98
- });
99
- }
100
- };
101
- let response: Response;
102
- try {
103
- let token = await tokenForRequest(false);
104
- response = await request(token.accessToken);
105
- if (response.status === 401 || (await isXaiInvalidCredentialResponse(response))) {
106
- await response.body?.cancel().catch(() => undefined);
107
- token = await tokenForRequest(true);
108
- response = await request(token.accessToken);
109
- }
110
- } catch (error) {
111
- if (error instanceof TranscriptionServiceError) throw error;
112
- throw fetchError(error);
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",