@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,236 +1 @@
1
- import { createCipheriv, createDecipheriv, createHash, createHmac, randomBytes } from "node:crypto";
2
- import { BROWSER_PROFILE_ARTIFACT_FORMAT } from "@opengeni/contracts";
3
-
4
- const ROOT_KEY_BYTES = 32;
5
- const DATA_KEY_BYTES = 32;
6
- const IV_BYTES = 12;
7
- const TAG_BYTES = 16;
8
- const WRAPPED_PREFIX = "ogbk1";
9
- const SHA256_PATTERN = /^[0-9a-f]{64}$/u;
10
- const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
11
-
12
- export type BrowserStateOperationScope = {
13
- accountId: string;
14
- workspaceId: string;
15
- browserSessionId: string;
16
- operationId: string;
17
- objectKey: string;
18
- };
19
-
20
- export type BrowserStateArtifactScope = {
21
- accountId: string;
22
- workspaceId: string;
23
- objectKey: string;
24
- artifactDigest: string;
25
- contentDigest: string;
26
- };
27
-
28
- /** Deterministic only within one idempotent publication operation. This lets a
29
- * control-plane retry present browserd with exactly the same secret authority
30
- * without storing a plaintext key or placing it in an operation row. */
31
- export function deriveBrowserStateDataKey(
32
- rootKey: Uint8Array,
33
- scopeInput: BrowserStateOperationScope,
34
- ): Buffer {
35
- const scope = operationScope(scopeInput);
36
- return createHmac("sha256", root(rootKey))
37
- .update("opengeni.browser-state.data-key.v1\0", "utf8")
38
- .update(canonicalJson(scope), "utf8")
39
- .digest();
40
- }
41
-
42
- /** Associated data for the encrypted profile object. It is reproducible from
43
- * durable non-secret artifact authority during restore. */
44
- export function browserStateArtifactAad(
45
- scopeInput: Pick<BrowserStateArtifactScope, "accountId" | "workspaceId" | "objectKey">,
46
- ): Buffer {
47
- const scope = baseArtifactScope(scopeInput);
48
- return Buffer.from(`opengeni.browser-state.artifact-aad.v1\0${canonicalJson(scope)}`, "utf8");
49
- }
50
-
51
- /** Wrap a 32-byte artifact data key under the operator-held root key. The
52
- * ciphertext is bound to workspace, object, and both integrity digests. */
53
- export function wrapBrowserStateDataKey(
54
- rootKey: Uint8Array,
55
- dataKeyInput: Uint8Array,
56
- scopeInput: BrowserStateArtifactScope,
57
- ): string {
58
- const dataKey = exactKey(dataKeyInput, "browser state data key");
59
- const scope = artifactScope(scopeInput);
60
- const iv = randomBytes(IV_BYTES);
61
- const wrappingKey = browserStateWrappingKey(rootKey, scope);
62
- try {
63
- const cipher = createCipheriv("aes-256-gcm", wrappingKey, iv);
64
- cipher.setAAD(wrapAad(scope));
65
- const ciphertext = Buffer.concat([cipher.update(dataKey), cipher.final()]);
66
- const payload = Buffer.concat([ciphertext, cipher.getAuthTag()]);
67
- return `${WRAPPED_PREFIX}:${iv.toString("base64")}:${payload.toString("base64")}`;
68
- } finally {
69
- wrappingKey.fill(0);
70
- }
71
- }
72
-
73
- export function unwrapBrowserStateDataKey(
74
- rootKey: Uint8Array,
75
- wrapped: string,
76
- scopeInput: BrowserStateArtifactScope,
77
- ): Buffer {
78
- const scope = artifactScope(scopeInput);
79
- const parts = wrapped.split(":");
80
- if (parts.length !== 3 || parts[0] !== WRAPPED_PREFIX) {
81
- throw new Error("browser state data-key envelope is unsupported");
82
- }
83
- const iv = canonicalBase64(parts[1]!, IV_BYTES, "browser state data-key envelope");
84
- const payload = canonicalBase64(
85
- parts[2]!,
86
- DATA_KEY_BYTES + TAG_BYTES,
87
- "browser state data-key envelope",
88
- );
89
- const ciphertext = payload.subarray(0, DATA_KEY_BYTES);
90
- const tag = payload.subarray(DATA_KEY_BYTES);
91
- const wrappingKey = browserStateWrappingKey(rootKey, scope);
92
- try {
93
- const decipher = createDecipheriv("aes-256-gcm", wrappingKey, iv);
94
- decipher.setAAD(wrapAad(scope));
95
- decipher.setAuthTag(tag);
96
- return Buffer.concat([decipher.update(ciphertext), decipher.final()]);
97
- } catch {
98
- throw new Error("browser state data-key decryption failed");
99
- } finally {
100
- wrappingKey.fill(0);
101
- }
102
- }
103
-
104
- export function browserStateObjectKey(workspaceIdInput: string, operationIdInput: string): string {
105
- const workspaceId = uuid(workspaceIdInput, "workspace id");
106
- const operationId = uuid(operationIdInput, "browser state operation id");
107
- return `workspaces/${workspaceId}/browser-state/revisions/${operationId}/chromium-profile.ogbs`;
108
- }
109
-
110
- export function browserStateManifestDigest(manifest: unknown): string {
111
- return createHash("sha256").update(canonicalJson(manifest), "utf8").digest("hex");
112
- }
113
-
114
- function operationScope(input: BrowserStateOperationScope) {
115
- const base = baseArtifactScope(input);
116
- return {
117
- ...base,
118
- browserSessionId: uuid(input.browserSessionId, "browser session id"),
119
- operationId: uuid(input.operationId, "browser state operation id"),
120
- };
121
- }
122
-
123
- function artifactScope(input: BrowserStateArtifactScope) {
124
- return {
125
- ...baseArtifactScope(input),
126
- artifactDigest: sha256(input.artifactDigest, "browser state artifact digest"),
127
- contentDigest: sha256(input.contentDigest, "browser state content digest"),
128
- };
129
- }
130
-
131
- function baseArtifactScope(
132
- input: Pick<BrowserStateArtifactScope, "accountId" | "workspaceId" | "objectKey">,
133
- ) {
134
- const workspaceId = uuid(input.workspaceId, "workspace id");
135
- const objectKey = browserStateObjectKeyValue(input.objectKey, workspaceId);
136
- return {
137
- version: 1,
138
- accountId: uuid(input.accountId, "account id"),
139
- workspaceId,
140
- objectKey,
141
- format: BROWSER_PROFILE_ARTIFACT_FORMAT,
142
- };
143
- }
144
-
145
- function wrapAad(scope: ReturnType<typeof artifactScope>): Buffer {
146
- return Buffer.from(`opengeni.browser-state.data-key-wrap.v1\0${canonicalJson(scope)}`, "utf8");
147
- }
148
-
149
- function browserStateWrappingKey(
150
- rootKey: Uint8Array,
151
- scope: ReturnType<typeof artifactScope>,
152
- ): Buffer {
153
- return createHmac("sha256", root(rootKey))
154
- .update("opengeni.browser-state.wrapping-key.v1\0", "utf8")
155
- .update(canonicalJson(scope), "utf8")
156
- .digest();
157
- }
158
-
159
- function browserStateObjectKeyValue(value: string, workspaceId: string): string {
160
- if (
161
- typeof value !== "string" ||
162
- Buffer.byteLength(value) > 2_048 ||
163
- !new RegExp(
164
- `^workspaces/${workspaceId}/browser-state/[A-Za-z0-9._=-]+(?:/[A-Za-z0-9._=-]+)*$`,
165
- "u",
166
- ).test(value)
167
- ) {
168
- throw new Error("browser state object key is invalid");
169
- }
170
- return value;
171
- }
172
-
173
- function root(value: Uint8Array): Buffer {
174
- return exactKey(value, "browser state root key");
175
- }
176
-
177
- function exactKey(value: Uint8Array, label: string): Buffer {
178
- if (!(value instanceof Uint8Array) || value.byteLength !== ROOT_KEY_BYTES) {
179
- throw new Error(`${label} must be exactly ${ROOT_KEY_BYTES} bytes`);
180
- }
181
- return Buffer.from(value.buffer, value.byteOffset, value.byteLength);
182
- }
183
-
184
- function uuid(value: string, label: string): string {
185
- if (typeof value !== "string" || !UUID_PATTERN.test(value)) {
186
- throw new Error(`${label} must be a UUID`);
187
- }
188
- return value.toLowerCase();
189
- }
190
-
191
- function sha256(value: string, label: string): string {
192
- if (typeof value !== "string" || !SHA256_PATTERN.test(value)) {
193
- throw new Error(`${label} is invalid`);
194
- }
195
- return value;
196
- }
197
-
198
- function canonicalBase64(value: string, length: number, label: string): Buffer {
199
- if (!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u.test(value)) {
200
- throw new Error(`${label} is unsupported`);
201
- }
202
- const decoded = Buffer.from(value, "base64");
203
- if (decoded.byteLength !== length || decoded.toString("base64") !== value) {
204
- decoded.fill(0);
205
- throw new Error(`${label} is unsupported`);
206
- }
207
- return decoded;
208
- }
209
-
210
- function canonicalJson(value: unknown): string {
211
- return JSON.stringify(canonicalValue(value));
212
- }
213
-
214
- function canonicalValue(value: unknown): unknown {
215
- if (
216
- value === null ||
217
- typeof value === "string" ||
218
- typeof value === "boolean" ||
219
- (typeof value === "number" && Number.isFinite(value))
220
- ) {
221
- return value;
222
- }
223
- if (Array.isArray(value)) return value.map(canonicalValue);
224
- if (typeof value === "object") {
225
- const input = value as Record<string, unknown>;
226
- const output: Record<string, unknown> = {};
227
- for (const key of Object.keys(input).sort()) {
228
- if (input[key] === undefined) {
229
- throw new Error("canonical JSON cannot contain undefined");
230
- }
231
- output[key] = canonicalValue(input[key]);
232
- }
233
- return output;
234
- }
235
- throw new Error("value cannot be represented as canonical JSON");
236
- }
1
+ export * from "@opengeni/interaction/browser-state-authority";
@@ -0,0 +1,37 @@
1
+ import type { ApiRouteDeps } from "@opengeni/core";
2
+ import {
3
+ seedOrganizationClaudeDefaultModels,
4
+ seedWorkspaceClaudeDefaultModels,
5
+ } from "@opengeni/db";
6
+
7
+ type ClaudeConnectionScope =
8
+ | { organizationId: string; workspaceId?: undefined }
9
+ | { accountId: string; workspaceId: string };
10
+
11
+ /**
12
+ * After a Claude account connects, offer the default models where this scope
13
+ * never configured any. The connection has already succeeded, so a failure
14
+ * here is reported and leaves the model list as it was; people can still add
15
+ * models themselves.
16
+ */
17
+ export async function offerClaudeDefaultModels(
18
+ deps: Pick<ApiRouteDeps, "db">,
19
+ scope: ClaudeConnectionScope & {
20
+ actorSubjectId: string;
21
+ providerKind: "anthropic" | "claude_subscription";
22
+ },
23
+ ): Promise<void> {
24
+ try {
25
+ if (scope.workspaceId === undefined) {
26
+ await seedOrganizationClaudeDefaultModels(deps.db, scope);
27
+ } else {
28
+ await seedWorkspaceClaudeDefaultModels(deps.db, scope);
29
+ }
30
+ } catch (error) {
31
+ console.warn("[api] could not add the default Claude models", {
32
+ providerKind: scope.providerKind,
33
+ scope: scope.workspaceId === undefined ? "organization" : "workspace",
34
+ error: error instanceof Error ? error.message : String(error),
35
+ });
36
+ }
37
+ }
@@ -0,0 +1,154 @@
1
+ // Claude's account routes on the shared subscription core (design
2
+ // docs/design/subscription-core-2026-10-07.md, 5.3 "Claude track", C2b).
3
+ // Every caller requires the organization's Claude cutover receipt. Missing
4
+ // or disabled receipts fail closed; legacy tables are never a runtime fallback.
5
+ import { HTTPException } from "hono/http-exception";
6
+ import type { ApiRouteDeps } from "@opengeni/core";
7
+ import {
8
+ connectSubscriptionCoreClaudeConnection,
9
+ getSubscriptionCoreClaudeOrganizationProjection,
10
+ getSubscriptionCoreClaudeWorkspaceProjection,
11
+ namedSubjectPersonalWorkspaceId,
12
+ SUBSCRIPTION_CORE_CLAUDE,
13
+ type Database,
14
+ type SubscriptionCoreClaudeAccount,
15
+ type SubscriptionCoreClaudeConnectResult,
16
+ } from "@opengeni/db";
17
+ import {
18
+ canonicalConnectionId,
19
+ coreConnectRefused,
20
+ deliverPoolCoreWake,
21
+ requireSubscriptionCoreRoute,
22
+ type SubscriptionPoolCore,
23
+ } from "./routes/subscription-pool-core";
24
+
25
+ /** The runtime serving Claude for the organization (one receipt read; maintenance is a typed 503). */
26
+ export const claudeCoreRoute = (deps: ApiRouteDeps, accountId: () => Promise<string>) =>
27
+ requireSubscriptionCoreRoute(deps, "claude", "Claude", accountId);
28
+
29
+ /** Deliver a core Claude wake after commit (best effort, as every pool wake). */
30
+ export const deliverClaudeCoreWake = (
31
+ deps: ApiRouteDeps,
32
+ wake: Parameters<typeof deliverPoolCoreWake>[2],
33
+ ) => deliverPoolCoreWake(deps, { binding: SUBSCRIPTION_CORE_CLAUDE }, wake);
34
+
35
+ /**
36
+ * Claude on the shared core for the neutral pool routes. The listings add
37
+ * the legacy usage reading beside the account (`listedAccountJson`); every
38
+ * other route answers the plain legacy `accountJson`.
39
+ */
40
+ export function claudePoolCore(
41
+ accountJson: (account: SubscriptionCoreClaudeAccount, activeId: string | null) => object,
42
+ ): SubscriptionPoolCore {
43
+ return {
44
+ binding: SUBSCRIPTION_CORE_CLAUDE,
45
+ workspaceProjection: getSubscriptionCoreClaudeWorkspaceProjection,
46
+ organizationProjection: getSubscriptionCoreClaudeOrganizationProjection,
47
+ listedAccountJson: (account, activeId) => {
48
+ const claude = account as SubscriptionCoreClaudeAccount;
49
+ // The legacy listing's usage fields, from the core quota reading.
50
+ return {
51
+ ...accountJson(claude, activeId),
52
+ usage: claude.usage,
53
+ ...(claude.usage.refreshStatus === "reconnect"
54
+ ? { status: "needs_relogin", lastError: "Sign in to Claude again." }
55
+ : {}),
56
+ };
57
+ },
58
+ };
59
+ }
60
+
61
+ type ClaudeCoreScope = { accountId: string; workspaceId: string | null; subjectId: string };
62
+
63
+ /**
64
+ * The account a reconnect names, as this caller's listing shows it: a legacy
65
+ * id resolves through the cutover aliases as the caller may see them
66
+ * (`canonicalConnectionId`, which resolves a personal account's legacy id
67
+ * only for its owner in their Personal workspace). Null when the caller's
68
+ * listing does not show it.
69
+ */
70
+ export async function claudeCoreAccount(
71
+ deps: ApiRouteDeps,
72
+ scope: ClaudeCoreScope,
73
+ routeId: string,
74
+ ): Promise<SubscriptionCoreClaudeAccount | null> {
75
+ const id = await canonicalConnectionId(deps, SUBSCRIPTION_CORE_CLAUDE, { ...scope, routeId });
76
+ const projection = scope.workspaceId
77
+ ? await getSubscriptionCoreClaudeWorkspaceProjection(deps.db, {
78
+ accountId: scope.accountId,
79
+ workspaceId: scope.workspaceId,
80
+ viewerSubjectId: scope.subjectId,
81
+ })
82
+ : await getSubscriptionCoreClaudeOrganizationProjection(deps.db, {
83
+ organizationId: scope.accountId,
84
+ subjectId: scope.subjectId,
85
+ });
86
+ return projection.accounts.find((account) => account.id === id) ?? null;
87
+ }
88
+
89
+ /**
90
+ * A private (`user`) Claude account is connected on the core only in the
91
+ * person's own Personal workspace (strictest reading of the personal rule);
92
+ * elsewhere, including any shared workspace, it is refused before a sign-in
93
+ * starts. The connect writer checks the same rule with the exact owner
94
+ * membership and authority generation in its transaction.
95
+ */
96
+ export async function requireClaudeCorePersonalWorkspace(
97
+ deps: ApiRouteDeps,
98
+ scope: { accountId: string; workspaceId: string | null; subjectId: string },
99
+ ): Promise<void> {
100
+ const own = scope.subjectId.startsWith("user:")
101
+ ? await namedSubjectPersonalWorkspaceId(deps.db, scope)
102
+ : null;
103
+ if (own === null || own !== scope.workspaceId)
104
+ throw new HTTPException(403, {
105
+ message: "Connect a private Claude account from your own Personal workspace.",
106
+ });
107
+ }
108
+
109
+ /** What a person who cannot reconnect this way is told to do instead. */
110
+ const RECONNECT_REFUSED: Record<
111
+ "different_account" | "setup_token_over_sign_in" | "sign_in_over_unverified",
112
+ string
113
+ > = {
114
+ different_account:
115
+ "Sign in to the same Claude account to reconnect. Use Add account for a different subscription.",
116
+ setup_token_over_sign_in:
117
+ "A setup token can't replace a signed-in Claude account. Add it as a new account.",
118
+ sign_in_over_unverified:
119
+ "This account was added without a verified sign-in. Add it again with Sign in, then remove the old one.",
120
+ };
121
+
122
+ /** The legacy response for a refused core Claude connect. */
123
+ export function claudeCoreConnectRefused(
124
+ result: Extract<SubscriptionCoreClaudeConnectResult, { kind: "refused" }>,
125
+ personal: boolean,
126
+ changedMessage: string,
127
+ ): HTTPException | ReturnType<typeof coreConnectRefused> {
128
+ if (
129
+ result.reason === "different_account" ||
130
+ result.reason === "setup_token_over_sign_in" ||
131
+ result.reason === "sign_in_over_unverified"
132
+ )
133
+ return new HTTPException(409, { message: RECONNECT_REFUSED[result.reason] });
134
+ if (result.reason === "changed") return new HTTPException(409, { message: changedMessage });
135
+ if (result.reason === "forbidden" && personal)
136
+ return new HTTPException(403, {
137
+ message: "Connect a private Claude account from your own Personal workspace.",
138
+ });
139
+ return coreConnectRefused(result.reason, "Claude", personal);
140
+ }
141
+
142
+ /** Connect through the neutral writer; throws the legacy refusal, returns the connection. */
143
+ export async function connectClaudeCore(
144
+ db: Database,
145
+ input: Parameters<typeof connectSubscriptionCoreClaudeConnection>[1],
146
+ changedMessage: string,
147
+ ) {
148
+ const result = await connectSubscriptionCoreClaudeConnection(db, input);
149
+ if (result.kind === "refused")
150
+ throw claudeCoreConnectRefused(result, input.personal === true, changedMessage);
151
+ // The Claude writer always asks for the version (the legacy credential version).
152
+ if (result.version === undefined) throw new Error("core Claude connect reported no version");
153
+ return { id: result.id, version: result.version, wake: result.wake };
154
+ }