@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
@@ -0,0 +1,209 @@
1
+ import type { XaiSubscriptionAccountMetadata } from "@opengeni/db";
2
+ import { requireAccessGrant, type ApiRouteDeps } from "@opengeni/core";
3
+ import type { Context, Hono } from "hono";
4
+ import { HTTPException } from "hono/http-exception";
5
+ import {
6
+ SubscriptionAccountRenameRequest,
7
+ SubscriptionAccountToggleRequest,
8
+ SubscriptionRotationSettingsRequest,
9
+ } from "@opengeni/contracts";
10
+ import { requireOrganizationCodexHuman } from "./codex";
11
+ import { requireSameOriginBrowserMutation } from "./subscription-pool-access";
12
+ import {
13
+ coreOrganizationAccount,
14
+ coreOrganizationAccounts,
15
+ coreOrganizationSettings,
16
+ coreWorkspaceAccounts,
17
+ coreWorkspaceActivate,
18
+ coreWorkspaceAllocator,
19
+ coreWorkspaceDisconnect,
20
+ coreWorkspaceRename,
21
+ coreWorkspaceSettings,
22
+ requireSubscriptionCoreRoute,
23
+ type SubscriptionPoolCore,
24
+ } from "./subscription-pool-core";
25
+ const allocatorBody = SubscriptionAccountToggleRequest;
26
+ const settingsBody = SubscriptionRotationSettingsRequest;
27
+ const renameBody = SubscriptionAccountRenameRequest;
28
+
29
+ /** The legacy pool repository; only Claude still has one (until its own cutover). */
30
+
31
+ /** The legacy pool account shape SuperGrok and Claude share (SuperGrok's metadata defines it). */
32
+ export type SubscriptionPoolAccount = XaiSubscriptionAccountMetadata;
33
+ /**
34
+ * The repository of a provider whose legacy runtime was deleted after its
35
+ * cutover: its routes serve only the core (`requireSubscriptionCoreRoute`
36
+ * refuses any other route first), so no legacy handler can reach these.
37
+ */
38
+
39
+ /** Account CRUD uses one authority, allocator and wake contract for every pool. */
40
+ export function registerSubscriptionAccountPoolRoutes(
41
+ app: Hono,
42
+ deps: ApiRouteDeps,
43
+ options: {
44
+ provider: "xai" | "claude";
45
+ route: "supergrok" | "claude";
46
+ displayName: "SuperGrok" | "Claude";
47
+ enabled: () => boolean;
48
+ accountJson: (
49
+ account: XaiSubscriptionAccountMetadata,
50
+ activeId: string | null,
51
+ ) => Record<string, unknown>;
52
+ core: SubscriptionPoolCore;
53
+ },
54
+ ) {
55
+ const core = options.core;
56
+ const coreContext = {
57
+ deps,
58
+ core,
59
+ displayName: options.displayName,
60
+ accountJson: options.accountJson,
61
+ listedAccountJson: core.listedAccountJson ?? options.accountJson,
62
+ };
63
+ /**
64
+ * The pool's runtime for this organization: `legacy` without a core
65
+ * binding; a core-only pool (no legacy repository) serves only `core`.
66
+ */
67
+ const route = (accountId: () => Promise<string>) =>
68
+ requireSubscriptionCoreRoute(deps, options.provider, options.displayName, accountId);
69
+ const workspaceRoute = (c: Context, workspaceId: string) =>
70
+ route(async () => (await requireAccessGrant(c, deps, workspaceId, "workspace:read")).accountId);
71
+ const workspacePath = `/v1/workspaces/:workspaceId/${options.route}`;
72
+ const organizationPath = `/v1/organizations/:organizationId/${options.route}`;
73
+ const requireEnabled = () => {
74
+ if (!options.enabled())
75
+ throw new HTTPException(404, {
76
+ message: options.displayName + " subscriptions are not enabled",
77
+ });
78
+ };
79
+ const organizationActor = async (c: Context, mutation = false) => {
80
+ requireEnabled();
81
+ if (mutation) requireSameOriginBrowserMutation(c, deps);
82
+ const organizationId = c.req.param("organizationId")!;
83
+ const human = await requireOrganizationCodexHuman(c, deps, organizationId);
84
+ return { organizationId, actorSubjectId: human.subjectId };
85
+ };
86
+
87
+ app.get(`${organizationPath}/accounts`, async (c) => {
88
+ const actor = await organizationActor(c);
89
+ await route(async () => actor.organizationId);
90
+ return await coreOrganizationAccounts(c, coreContext!, actor);
91
+ });
92
+ app.patch(`${organizationPath}/settings`, async (c) => {
93
+ const actor = await organizationActor(c, true);
94
+ const parsed = settingsBody.safeParse(await c.req.json().catch(() => null));
95
+ if (!parsed.success) throw new HTTPException(400, { message: "rotationEnabled is required" });
96
+ await route(async () => actor.organizationId);
97
+ return await coreOrganizationSettings(c, coreContext!, actor, parsed.data.rotationEnabled);
98
+ });
99
+ const updateOrganizationAccount = async (
100
+ c: Context,
101
+ changes: {
102
+ activate?: boolean;
103
+ disconnect?: boolean;
104
+ label?: string | null;
105
+ allocatorEnabled?: boolean;
106
+ expectedAllocatorVersion?: number;
107
+ },
108
+ ) => {
109
+ const actor = await organizationActor(c, true);
110
+ await route(async () => actor.organizationId);
111
+ return await coreOrganizationAccount(
112
+ c,
113
+ coreContext!,
114
+ actor,
115
+ c.req.param("accountId")!,
116
+ changes.activate
117
+ ? { activate: true }
118
+ : changes.disconnect
119
+ ? { disconnect: true }
120
+ : changes.label !== undefined
121
+ ? { label: changes.label }
122
+ : {
123
+ allocatorEnabled: changes.allocatorEnabled!,
124
+ expectedAllocatorVersion: changes.expectedAllocatorVersion!,
125
+ },
126
+ );
127
+ };
128
+ app.post(`${organizationPath}/accounts/:accountId/activate`, (c) =>
129
+ updateOrganizationAccount(c, { activate: true }),
130
+ );
131
+ app.delete(`${organizationPath}/accounts/:accountId`, (c) =>
132
+ updateOrganizationAccount(c, { disconnect: true }),
133
+ );
134
+ app.patch(`${organizationPath}/accounts/:accountId`, async (c) => {
135
+ const parsed = renameBody.safeParse(await c.req.json().catch(() => null));
136
+ if (!parsed.success) throw new HTTPException(400, { message: "label is invalid" });
137
+ return updateOrganizationAccount(c, { label: parsed.data.label || null });
138
+ });
139
+ app.patch(`${organizationPath}/accounts/:accountId/allocator`, async (c) => {
140
+ const parsed = allocatorBody.safeParse(await c.req.json().catch(() => null));
141
+ if (!parsed.success)
142
+ throw new HTTPException(400, { message: "enabled and expectedVersion are required" });
143
+ return updateOrganizationAccount(c, {
144
+ allocatorEnabled: parsed.data.enabled,
145
+ expectedAllocatorVersion: parsed.data.expectedVersion,
146
+ });
147
+ });
148
+
149
+ app.get(`${workspacePath}/accounts`, async (c) => {
150
+ requireEnabled();
151
+ const workspaceId = c.req.param("workspaceId")!;
152
+ await workspaceRoute(c, workspaceId);
153
+ return await coreWorkspaceAccounts(c, coreContext!, workspaceId);
154
+ });
155
+
156
+ app.post(`${workspacePath}/accounts/:accountId/activate`, async (c) => {
157
+ requireEnabled();
158
+ const workspaceId = c.req.param("workspaceId")!;
159
+ const credentialId = c.req.param("accountId")!;
160
+ await workspaceRoute(c, workspaceId);
161
+ return await coreWorkspaceActivate(c, coreContext!, workspaceId, credentialId);
162
+ });
163
+
164
+ app.patch(`${workspacePath}/settings`, async (c) => {
165
+ requireEnabled();
166
+ const workspaceId = c.req.param("workspaceId")!;
167
+ const parsed = settingsBody.safeParse(await c.req.json().catch(() => null));
168
+ if (!parsed.success) throw new HTTPException(400, { message: "rotationEnabled is required" });
169
+ await workspaceRoute(c, workspaceId);
170
+ return await coreWorkspaceSettings(c, coreContext!, workspaceId, parsed.data.rotationEnabled);
171
+ });
172
+
173
+ app.patch(`${workspacePath}/accounts/:accountId/allocator`, async (c) => {
174
+ requireEnabled();
175
+ const workspaceId = c.req.param("workspaceId")!;
176
+ const credentialId = c.req.param("accountId")!;
177
+ await workspaceRoute(c, workspaceId);
178
+
179
+ const parsed = allocatorBody.safeParse(await c.req.json().catch(() => null));
180
+ if (!parsed.success)
181
+ throw new HTTPException(400, { message: "enabled and expectedVersion are required" });
182
+ return await coreWorkspaceAllocator(c, coreContext!, workspaceId, credentialId, parsed.data);
183
+ });
184
+
185
+ app.patch(`${workspacePath}/accounts/:accountId`, async (c) => {
186
+ requireEnabled();
187
+ const workspaceId = c.req.param("workspaceId")!;
188
+ const credentialId = c.req.param("accountId")!;
189
+ await workspaceRoute(c, workspaceId);
190
+
191
+ const parsed = renameBody.safeParse(await c.req.json().catch(() => null));
192
+ if (!parsed.success) throw new HTTPException(400, { message: "label is invalid" });
193
+ return await coreWorkspaceRename(
194
+ c,
195
+ coreContext!,
196
+ workspaceId,
197
+ credentialId,
198
+ parsed.data.label || null,
199
+ );
200
+ });
201
+
202
+ app.delete(`${workspacePath}/accounts/:accountId`, async (c) => {
203
+ requireEnabled();
204
+ const workspaceId = c.req.param("workspaceId")!;
205
+ const credentialId = c.req.param("accountId")!;
206
+ await workspaceRoute(c, workspaceId);
207
+ return await coreWorkspaceDisconnect(c, coreContext!, workspaceId, credentialId);
208
+ });
209
+ }
@@ -0,0 +1,18 @@
1
+ // The typed HTTP answers every provider's routes on the shared subscription
2
+ // core use (design docs/design/subscription-core-2026-10-07.md, 5.3).
3
+ // Provider-neutral.
4
+ import { ApiHttpError } from "../http/api-error";
5
+
6
+ /** `details.reason` of the 503 a provider's route answers while its cutover row is missing or disabled. */
7
+ export const SUBSCRIPTION_CORE_CUTOVER_DISABLED = "subscription_core_cutover_disabled";
8
+
9
+ /** The public error envelope with the core reason in `details.reason`. */
10
+ export function typedHttpError(status: 409 | 503, reason: string, message: string): ApiHttpError {
11
+ return new ApiHttpError(status, {
12
+ code: status === 503 ? "upstream_unavailable" : "conflict",
13
+ message,
14
+ retryable: status === 503,
15
+ outcomeUnknown: false,
16
+ details: { reason },
17
+ });
18
+ }
@@ -0,0 +1,180 @@
1
+ import { getWorkspaceGrant, resolveNamedManagedPersonalWorkspaceGrant } from "@opengeni/db";
2
+ import {
3
+ getManagedSession,
4
+ requireAccessGrant,
5
+ requireAccessGrantAuthorization,
6
+ externalActorContinuationForAuthorization,
7
+ type ApiRouteDeps,
8
+ } from "@opengeni/core";
9
+ import type { Context } from "hono";
10
+ import { HTTPException } from "hono/http-exception";
11
+ import { agentActingAsPersonBeforeGrantCheck, isAgentActingAsPerson } from "../http/acting-person";
12
+ type ManagedCookieHuman = { subjectId: string };
13
+
14
+ /**
15
+ * Where a private (scope `user`) subscription is managed. The legacy pools
16
+ * keep a person's private accounts in an ordinary workspace they are a member
17
+ * of; the shared subscription core keeps a personal connection only in its
18
+ * owner's own Personal workspace (D-03), so on the core the private routes
19
+ * answer there and nowhere else.
20
+ */
21
+ export type PrivateSubscriptionPlace = "ordinary_workspace" | "personal_workspace";
22
+
23
+ async function requirePrivateSubscriptionPlace(
24
+ deps: ApiRouteDeps,
25
+ place: PrivateSubscriptionPlace,
26
+ input: { accountId: string; workspaceId: string; subjectId: string },
27
+ displayName: string,
28
+ ): Promise<void> {
29
+ if (place === "personal_workspace") {
30
+ // The subject's current Personal workspace pointer with a live
31
+ // organization membership; another person's Personal workspace or a
32
+ // shared workspace never qualifies.
33
+ if (!(await resolveNamedManagedPersonalWorkspaceGrant(deps.db, input)))
34
+ throw new HTTPException(409, {
35
+ message: `Private ${displayName} accounts are connected and managed from your Personal workspace`,
36
+ });
37
+ return;
38
+ }
39
+ // The shared user-pool domain requires an ordinary workspace membership,
40
+ // not just the synthetic Personal-workspace owner grant.
41
+ if (!(await getWorkspaceGrant(deps.db, input.subjectId, input.workspaceId)))
42
+ throw new HTTPException(409, {
43
+ message: `Private ${displayName} accounts require membership in an ordinary workspace`,
44
+ });
45
+ }
46
+
47
+ export async function managedCookieHuman(
48
+ c: Context,
49
+ deps: ApiRouteDeps,
50
+ ): Promise<ManagedCookieHuman | null> {
51
+ if (
52
+ deps.settings.productAccessMode !== "managed" ||
53
+ !deps.managedAuth ||
54
+ !c.req.header("cookie") ||
55
+ c.req.header("authorization")
56
+ ) {
57
+ return null;
58
+ }
59
+ const session = await getManagedSession(c, deps.managedAuth, {
60
+ db: deps.db,
61
+ sessionAdapter: deps.managedAuthSessionAdapter,
62
+ sessionSetMode: deps.settings.managedAuthSessionSetMode,
63
+ });
64
+ return session?.user?.id ? { subjectId: `user:${session.user.id}` } : null;
65
+ }
66
+
67
+ export function requireSameOriginBrowserMutation(c: Context, deps: ApiRouteDeps): void {
68
+ // Built in process for an agent acting as a person: no browser credentials
69
+ // ride along, so there is no cross-site request to guard against.
70
+ if (isAgentActingAsPerson(c)) return;
71
+ const contentType = c.req.header("content-type")?.split(";", 1)[0]?.trim().toLowerCase();
72
+ if (contentType !== "application/json") {
73
+ throw new HTTPException(403, { message: "JSON browser request required" });
74
+ }
75
+ if (!deps.settings.publicBaseUrl) {
76
+ throw new HTTPException(503, {
77
+ message: "managed browser origin is not configured",
78
+ });
79
+ }
80
+ const expectedOrigin = new URL(deps.settings.publicBaseUrl).origin;
81
+ if (c.req.header("origin") !== expectedOrigin) {
82
+ throw new HTTPException(403, {
83
+ message: "same-origin browser request required",
84
+ });
85
+ }
86
+ if (c.req.header("sec-fetch-site")?.toLowerCase() !== "same-origin") {
87
+ throw new HTTPException(403, {
88
+ message: "same-origin fetch metadata required",
89
+ });
90
+ }
91
+ }
92
+
93
+ export async function requirePrivateSubscriptionHuman(
94
+ c: Context,
95
+ deps: ApiRouteDeps,
96
+ workspaceId: string,
97
+ displayName: string,
98
+ place: PrivateSubscriptionPlace = "ordinary_workspace",
99
+ ): Promise<{ accountId: string; subjectId: string }> {
100
+ if (c.req.header("authorization")) {
101
+ const authorization = await requireAccessGrantAuthorization(
102
+ c,
103
+ deps,
104
+ workspaceId,
105
+ "connections:write",
106
+ );
107
+ const external = externalActorContinuationForAuthorization(authorization);
108
+ if (
109
+ external &&
110
+ authorization.contextIntegrity &&
111
+ external.actor.effectiveSubjectId === authorization.grant.subjectId
112
+ ) {
113
+ const owner = {
114
+ accountId: authorization.grant.accountId,
115
+ subjectId: authorization.grant.subjectId,
116
+ };
117
+ await requirePrivateSubscriptionPlace(deps, place, { ...owner, workspaceId }, displayName);
118
+ return owner;
119
+ }
120
+ throw new HTTPException(403, {
121
+ message: `Private ${displayName} accounts require a verified owning user`,
122
+ });
123
+ }
124
+ const human = (await managedCookieHuman(c, deps)) ?? agentActingAsPersonBeforeGrantCheck(c);
125
+ if (!human) {
126
+ throw new HTTPException(401, {
127
+ message: "managed browser session required",
128
+ });
129
+ }
130
+ const grant = await requireAccessGrant(c, deps, workspaceId, "connections:write");
131
+ if (grant.subjectId !== human.subjectId) {
132
+ throw new HTTPException(403, {
133
+ message: "managed browser identity mismatch",
134
+ });
135
+ }
136
+ const owner = { accountId: grant.accountId, subjectId: grant.subjectId };
137
+ await requirePrivateSubscriptionPlace(deps, place, { ...owner, workspaceId }, displayName);
138
+ return owner;
139
+ }
140
+
141
+ export async function requireSubscriptionScopeMutation(
142
+ c: Context,
143
+ deps: ApiRouteDeps,
144
+ workspaceId: string,
145
+ scope: "workspace" | "user" | "organization",
146
+ displayName: string,
147
+ place: PrivateSubscriptionPlace = "ordinary_workspace",
148
+ ): Promise<{ accountId: string; subjectId: string }> {
149
+ if (scope === "organization")
150
+ throw new HTTPException(409, { message: "Manage this subscription in organization settings" });
151
+ if (scope === "user") {
152
+ // Server-side external-user assertions do not use browser cookies. Ordinary
153
+ // bearers remain rejected by requirePrivateHuman; native CSRF is unchanged.
154
+ if (!c.req.header("authorization")) requireSameOriginBrowserMutation(c, deps);
155
+ return await requirePrivateSubscriptionHuman(c, deps, workspaceId, displayName, place);
156
+ }
157
+ const grant = await requireAccessGrant(c, deps, workspaceId, "workspace:admin");
158
+ return { accountId: grant.accountId, subjectId: grant.subjectId };
159
+ }
160
+
161
+ /**
162
+ * The mutation gate of a pool whose legacy repository is deleted (Claude,
163
+ * C4). The account's scope can no longer be read, so every caller gets the
164
+ * workspace-scope gate of `requireSubscriptionScopeMutation` (a browser
165
+ * request must be same-origin, and the caller needs `workspace:admin`)
166
+ * before the route fails closed; nothing is read or written either way.
167
+ * For a former private (user-scope) account this changes two outcomes: an
168
+ * ordinary bearer with `workspace:admin` now reaches the 503 where it got
169
+ * 403 (no verified owning user), and the owner without `workspace:admin` now
170
+ * gets 403 where it passed. C2b restores the per-scope check, including the
171
+ * owner's path, when the core serves these routes.
172
+ */
173
+ export async function requireDeletedSubscriptionPoolMutation(
174
+ c: Context,
175
+ deps: ApiRouteDeps,
176
+ workspaceId: string,
177
+ ): Promise<void> {
178
+ if (!c.req.header("authorization")) requireSameOriginBrowserMutation(c, deps);
179
+ await requireAccessGrant(c, deps, workspaceId, "workspace:admin");
180
+ }