@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,139 +0,0 @@
1
- import {
2
- ConnectionUseGrantMutationResponse,
3
- ConnectionUseGrantRevocationResponse,
4
- IssueConnectionUseGrantRequest,
5
- ListConnectionAuthoritiesQuery,
6
- RevokeConnectionUseGrantQuery,
7
- } from "@opengeni/contracts/connection-authority";
8
- import {
9
- issueManagedHumanUserResourceGrant,
10
- listManagedHumanUserResourceAuthorities,
11
- requireAccessGrantAuthorization,
12
- revokeManagedHumanUserResourceGrant,
13
- SessionAuthorizationDeniedError,
14
- SessionAuthorizationUnavailableError,
15
- SessionTenancyManagedHumanRequiredError,
16
- type ApiRouteDeps,
17
- } from "@opengeni/core";
18
- import { nestedPostgresSqlState, SessionTenancyNotActivatedError } from "@opengeni/db";
19
- import type { Context, Hono } from "hono";
20
- import { HTTPException } from "hono/http-exception";
21
- import { z } from "zod";
22
- import {
23
- connectionUseGrantLifecycleInput,
24
- projectSelfConnectionAuthorities,
25
- } from "../connection-authority-owner";
26
-
27
- async function body<S extends z.ZodType>(context: Context, schema: S): Promise<z.infer<S>> {
28
- const parsed = schema.safeParse(await context.req.json().catch(() => null));
29
- if (!parsed.success) throw new HTTPException(422, { message: "invalid connection authority" });
30
- return parsed.data;
31
- }
32
-
33
- function lifecycleError(error: unknown): never {
34
- if (
35
- error instanceof SessionAuthorizationDeniedError ||
36
- error instanceof SessionTenancyManagedHumanRequiredError ||
37
- error instanceof SessionTenancyNotActivatedError
38
- ) {
39
- throw new HTTPException(403, { message: "connection authority denied" });
40
- }
41
- if (error instanceof SessionAuthorizationUnavailableError) {
42
- throw new HTTPException(503, { message: "session authorization unavailable" });
43
- }
44
- if (nestedPostgresSqlState(error) === "42501") {
45
- throw new HTTPException(403, { message: "connection authority denied" });
46
- }
47
- if (nestedPostgresSqlState(error) === "22023") {
48
- throw new HTTPException(422, { message: "invalid connection authority" });
49
- }
50
- throw error;
51
- }
52
-
53
- export function registerConnectionAuthorityRoutes(app: Hono, deps: ApiRouteDeps): void {
54
- const base = "/v1/workspaces/:workspaceId/connection-authorities";
55
-
56
- app.get(base, async (context) => {
57
- const query = ListConnectionAuthoritiesQuery.safeParse({
58
- scope: context.req.query("scope"),
59
- cursor: context.req.query("cursor"),
60
- limit: context.req.query("limit"),
61
- });
62
- if (!query.success) throw new HTTPException(422, { message: "explicit scope=user required" });
63
- const workspaceId = context.req.param("workspaceId");
64
- const access = await requireAccessGrantAuthorization(
65
- context,
66
- deps,
67
- workspaceId,
68
- "connections:read",
69
- );
70
- try {
71
- return context.json(
72
- projectSelfConnectionAuthorities(
73
- await listManagedHumanUserResourceAuthorities(deps, access, workspaceId, {
74
- resourceKind: "connection",
75
- cursor: query.data.cursor,
76
- limit: query.data.limit,
77
- }),
78
- ),
79
- );
80
- } catch (error) {
81
- return lifecycleError(error);
82
- }
83
- });
84
-
85
- app.post(`${base}/:authorityId/grants`, async (context) => {
86
- const workspaceId = context.req.param("workspaceId");
87
- const authorityId = z.string().uuid().safeParse(context.req.param("authorityId"));
88
- if (!authorityId.success) throw new HTTPException(422, { message: "invalid authority id" });
89
- const request = await body(context, IssueConnectionUseGrantRequest);
90
- const access = await requireAccessGrantAuthorization(
91
- context,
92
- deps,
93
- workspaceId,
94
- "connections:read",
95
- );
96
- try {
97
- const normalized = connectionUseGrantLifecycleInput(request);
98
- return context.json(
99
- ConnectionUseGrantMutationResponse.parse({
100
- scope: "user",
101
- grant: await issueManagedHumanUserResourceGrant(
102
- deps,
103
- access,
104
- workspaceId,
105
- authorityId.data,
106
- { scope: "user", resourceKind: "connection", ...normalized },
107
- "http",
108
- ),
109
- }),
110
- );
111
- } catch (error) {
112
- return lifecycleError(error);
113
- }
114
- });
115
-
116
- app.delete(`${base}/grants/:grantId`, async (context) => {
117
- const query = RevokeConnectionUseGrantQuery.safeParse({ scope: context.req.query("scope") });
118
- if (!query.success) throw new HTTPException(422, { message: "explicit scope=user required" });
119
- const grantId = z.string().uuid().safeParse(context.req.param("grantId"));
120
- if (!grantId.success) throw new HTTPException(422, { message: "invalid grant id" });
121
- const workspaceId = context.req.param("workspaceId");
122
- const access = await requireAccessGrantAuthorization(
123
- context,
124
- deps,
125
- workspaceId,
126
- "workspace:read",
127
- );
128
- try {
129
- return context.json(
130
- ConnectionUseGrantRevocationResponse.parse({
131
- scope: "user",
132
- grant: await revokeManagedHumanUserResourceGrant(deps, access, workspaceId, grantId.data),
133
- }),
134
- );
135
- } catch (error) {
136
- return lifecycleError(error);
137
- }
138
- });
139
- }
@@ -1,388 +0,0 @@
1
- import {
2
- CreateVariableSetRequest,
3
- ResolveVariableSetAttachmentsRequest,
4
- ResolveVariableSetAttachmentsResponse,
5
- SetVariableSetVariableRequest,
6
- UpdateVariableSetRequest,
7
- VariableSetVariableName,
8
- } from "@opengeni/contracts";
9
- import {
10
- countVariableSets,
11
- createVariableSet,
12
- decryptVariableSetValue,
13
- deleteVariableSet,
14
- deleteVariableSetVariable,
15
- encryptVariableSetValue,
16
- getVariableSetByName,
17
- listVariableSets,
18
- readVariableSetSecretAtomically,
19
- resolveVariableSetAttachments,
20
- setVariableSetVariable,
21
- updateVariableSet,
22
- VariableSetAttachedError,
23
- } from "@opengeni/db";
24
- import type { Hono } from "hono";
25
- import { HTTPException } from "hono/http-exception";
26
- import {
27
- requireAccessGrant,
28
- requireAccessGrantAuthorization,
29
- requireLiteralPermission,
30
- requirePermission,
31
- } from "@opengeni/core";
32
- import type { ApiRouteDeps } from "@opengeni/core";
33
- import {
34
- assertAllowedVariableSetVariableName,
35
- MAX_ENVIRONMENTS_PER_WORKSPACE,
36
- MAX_VARIABLES_PER_ENVIRONMENT,
37
- recordVariableSetAuditEvent,
38
- requireVariableSetEncryption,
39
- requireVariableSetForApi,
40
- } from "@opengeni/core";
41
-
42
- export function registerVariableSetRoutes(app: Hono, deps: ApiRouteDeps): void {
43
- const { settings, db } = deps;
44
- const prefixes = [
45
- "/v1/workspaces/:workspaceId/variable-sets",
46
- "/v1/workspaces/:workspaceId/environments",
47
- ];
48
-
49
- for (const prefix of prefixes) {
50
- app.get(`${prefix}`, async (c) => {
51
- const workspaceId = c.req.param("workspaceId")!;
52
- const grant = await requireAccessGrant(c, deps, workspaceId);
53
- requirePermission(grant, "variable-sets:list");
54
- requirePermission(grant, "secrets:list");
55
- return c.json(
56
- await listVariableSets(db, {
57
- accountId: grant.accountId,
58
- workspaceId,
59
- subjectId: grant.subjectId,
60
- }),
61
- );
62
- });
63
-
64
- app.post(`${prefix}`, async (c) => {
65
- const workspaceId = c.req.param("workspaceId")!;
66
- const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
67
- const grant = authorization.grant;
68
- requirePermission(grant, "variable-sets:write");
69
- const key = requireVariableSetEncryption(settings);
70
- const payload = CreateVariableSetRequest.parse(await c.req.json());
71
- if (prefix.endsWith("/environments") && payload.scope !== "workspace") {
72
- throw new HTTPException(422, {
73
- message: "the legacy environments route only creates workspace-scoped variable sets",
74
- });
75
- }
76
- if (
77
- payload.scope === "organization" &&
78
- authorization.accountGrant?.permissions.includes("account:admin") !== true
79
- ) {
80
- throw new HTTPException(403, {
81
- message: "missing permission: account:admin",
82
- });
83
- }
84
- if (payload.variables.length > 0) {
85
- requirePermission(grant, "secrets:write");
86
- }
87
- const name = trimmedVariableSetName(payload.name);
88
- if (payload.variables.length > MAX_VARIABLES_PER_ENVIRONMENT) {
89
- throw new HTTPException(422, {
90
- message: `a variable set supports at most ${MAX_VARIABLES_PER_ENVIRONMENT} variables`,
91
- });
92
- }
93
- const variableNames = new Set<string>();
94
- for (const variable of payload.variables) {
95
- assertAllowedVariableSetVariableName(variable.name);
96
- if (variableNames.has(variable.name)) {
97
- throw new HTTPException(422, {
98
- message: `duplicate variable set variable name: ${variable.name}`,
99
- });
100
- }
101
- variableNames.add(variable.name);
102
- }
103
- const access = {
104
- accountId: grant.accountId,
105
- workspaceId,
106
- subjectId: grant.subjectId,
107
- };
108
- if ((await countVariableSets(db, access, payload.scope)) >= MAX_ENVIRONMENTS_PER_WORKSPACE) {
109
- throw new HTTPException(422, {
110
- message: `a workspace supports at most ${MAX_ENVIRONMENTS_PER_WORKSPACE} variable sets`,
111
- });
112
- }
113
- if (await getVariableSetByName(db, access, name, payload.scope)) {
114
- throw new HTTPException(409, {
115
- message: `variable set name is already in use: ${name}`,
116
- });
117
- }
118
- // Values are encrypted up front and the variableSet plus all initial
119
- // variables are written in one transaction: a failure leaves nothing.
120
- const created = await createVariableSet(db, {
121
- accountId: grant.accountId,
122
- workspaceId,
123
- scope: payload.scope,
124
- subjectId: grant.subjectId,
125
- allowOrganization: payload.scope === "organization",
126
- name,
127
- description: payload.description ?? null,
128
- variables: payload.variables.map((variable) => ({
129
- name: variable.name,
130
- valueEncrypted: encryptVariableSetValue(key, variable.value),
131
- })),
132
- });
133
- await recordVariableSetAuditEvent(db, {
134
- grant,
135
- action: "variable_set.created",
136
- variableSetId: created.id,
137
- });
138
- return c.json(created, 201);
139
- });
140
-
141
- if (prefix.endsWith("/variable-sets")) {
142
- app.post(`${prefix}/resolve-attachments`, async (c) => {
143
- const workspaceId = c.req.param("workspaceId")!;
144
- const grant = await requireAccessGrant(c, deps, workspaceId);
145
- requirePermission(grant, "variable-sets:attach");
146
- requirePermission(grant, "variable-sets:use");
147
- const payload = ResolveVariableSetAttachmentsRequest.parse(await c.req.json());
148
- const variableSets = await resolveVariableSetAttachments(
149
- db,
150
- {
151
- accountId: grant.accountId,
152
- workspaceId,
153
- subjectId: grant.subjectId,
154
- },
155
- payload.variableSetIds,
156
- );
157
- return c.json(ResolveVariableSetAttachmentsResponse.parse({ variableSets }));
158
- });
159
- }
160
-
161
- app.get(`${prefix}/:variableSetId`, async (c) => {
162
- const workspaceId = c.req.param("workspaceId")!;
163
- const grant = await requireAccessGrant(c, deps, workspaceId);
164
- requirePermission(grant, "variable-sets:read");
165
- requirePermission(grant, "secrets:list");
166
- return c.json(await requireVariableSetForApi(db, grant, c.req.param("variableSetId")!));
167
- });
168
-
169
- if (prefix.endsWith("/variable-sets")) {
170
- app.get(`${prefix}/:variableSetId/variables/:name`, async (c) => {
171
- const workspaceId = c.req.param("workspaceId")!;
172
- const grant = await requireAccessGrant(c, deps, workspaceId);
173
- requirePermission(grant, "variable-sets:read");
174
- requireLiteralPermission(grant, "secrets:read");
175
- const key = requireVariableSetEncryption(settings);
176
- const name = parseVariableName(c.req.param("name")!);
177
- const secret = await readVariableSetSecretAtomically(db, {
178
- accountId: grant.accountId,
179
- workspaceId,
180
- subjectId: grant.subjectId,
181
- variableSetId: c.req.param("variableSetId")!,
182
- name,
183
- actor: { kind: "subject" },
184
- decrypt: (valueEncrypted) => decryptVariableSetValue(key, valueEncrypted),
185
- });
186
- if (!secret) {
187
- throw new HTTPException(404, {
188
- message: "variable set variable not found",
189
- });
190
- }
191
- return c.json(secret);
192
- });
193
- }
194
-
195
- app.patch(`${prefix}/:variableSetId`, async (c) => {
196
- const workspaceId = c.req.param("workspaceId")!;
197
- const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
198
- const grant = authorization.grant;
199
- requirePermission(grant, "variable-sets:write");
200
- const variableSet = await requireVariableSetForApi(db, grant, c.req.param("variableSetId")!);
201
- const allowOrganization =
202
- variableSet.scope === "organization" &&
203
- authorization.accountGrant?.permissions.includes("account:admin") === true;
204
- if (variableSet.scope === "organization" && !allowOrganization) {
205
- throw new HTTPException(403, {
206
- message: "missing permission: account:admin",
207
- });
208
- }
209
- const payload = UpdateVariableSetRequest.parse(await c.req.json());
210
- const name = payload.name !== undefined ? trimmedVariableSetName(payload.name) : undefined;
211
- if (name !== undefined && name !== variableSet.name) {
212
- const existing = await getVariableSetByName(
213
- db,
214
- {
215
- accountId: grant.accountId,
216
- workspaceId,
217
- subjectId: grant.subjectId,
218
- },
219
- name,
220
- variableSet.scope,
221
- );
222
- if (existing && existing.id !== variableSet.id) {
223
- throw new HTTPException(409, {
224
- message: `variable set name is already in use: ${name}`,
225
- });
226
- }
227
- }
228
- const updated = await updateVariableSet(
229
- db,
230
- { accountId: grant.accountId, workspaceId, subjectId: grant.subjectId },
231
- variableSet.id,
232
- {
233
- ...(name !== undefined ? { name } : {}),
234
- ...(payload.description !== undefined ? { description: payload.description } : {}),
235
- allowOrganization,
236
- },
237
- );
238
- await recordVariableSetAuditEvent(db, {
239
- grant,
240
- action: "variable_set.updated",
241
- variableSetId: variableSet.id,
242
- });
243
- return c.json(updated);
244
- });
245
-
246
- app.delete(`${prefix}/:variableSetId`, async (c) => {
247
- const workspaceId = c.req.param("workspaceId")!;
248
- const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
249
- const grant = authorization.grant;
250
- requirePermission(grant, "variable-sets:write");
251
- requirePermission(grant, "secrets:write");
252
- const variableSet = await requireVariableSetForApi(db, grant, c.req.param("variableSetId")!);
253
- const allowOrganization =
254
- variableSet.scope === "organization" &&
255
- authorization.accountGrant?.permissions.includes("account:admin") === true;
256
- if (variableSet.scope === "organization" && !allowOrganization) {
257
- throw new HTTPException(403, {
258
- message: "missing permission: account:admin",
259
- });
260
- }
261
- try {
262
- await deleteVariableSet(
263
- db,
264
- {
265
- accountId: grant.accountId,
266
- workspaceId,
267
- subjectId: grant.subjectId,
268
- },
269
- variableSet.id,
270
- { allowOrganization },
271
- );
272
- } catch (error) {
273
- if (error instanceof VariableSetAttachedError) {
274
- throw new HTTPException(409, { message: error.message });
275
- }
276
- throw error;
277
- }
278
- await recordVariableSetAuditEvent(db, {
279
- grant,
280
- action: "variable_set.deleted",
281
- variableSetId: variableSet.id,
282
- });
283
- return c.json({ ok: true });
284
- });
285
-
286
- app.put(`${prefix}/:variableSetId/variables/:name`, async (c) => {
287
- const workspaceId = c.req.param("workspaceId")!;
288
- const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
289
- const grant = authorization.grant;
290
- requirePermission(grant, "variable-sets:write");
291
- requirePermission(grant, "secrets:write");
292
- const key = requireVariableSetEncryption(settings);
293
- const name = parseVariableName(c.req.param("name")!);
294
- const variableSet = await requireVariableSetForApi(db, grant, c.req.param("variableSetId")!);
295
- const allowOrganization =
296
- variableSet.scope === "organization" &&
297
- authorization.accountGrant?.permissions.includes("account:admin") === true;
298
- if (variableSet.scope === "organization" && !allowOrganization) {
299
- throw new HTTPException(403, {
300
- message: "missing permission: account:admin",
301
- });
302
- }
303
- const payload = SetVariableSetVariableRequest.parse(await c.req.json());
304
- const exists = variableSet.variables.some((variable) => variable.name === name);
305
- if (!exists && variableSet.variables.length >= MAX_VARIABLES_PER_ENVIRONMENT) {
306
- throw new HTTPException(422, {
307
- message: `a variable set supports at most ${MAX_VARIABLES_PER_ENVIRONMENT} variables`,
308
- });
309
- }
310
- const metadata = await setVariableSetVariable(db, {
311
- accountId: grant.accountId,
312
- workspaceId,
313
- subjectId: grant.subjectId,
314
- variableSetId: variableSet.id,
315
- name,
316
- valueEncrypted: encryptVariableSetValue(key, payload.value),
317
- allowOrganization,
318
- });
319
- await recordVariableSetAuditEvent(db, {
320
- grant,
321
- action: "variable_set.variable.set",
322
- variableSetId: variableSet.id,
323
- variableName: name,
324
- });
325
- return c.json(metadata);
326
- });
327
-
328
- app.delete(`${prefix}/:variableSetId/variables/:name`, async (c) => {
329
- const workspaceId = c.req.param("workspaceId")!;
330
- const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
331
- const grant = authorization.grant;
332
- requirePermission(grant, "variable-sets:write");
333
- requirePermission(grant, "secrets:write");
334
- const name = parseVariableName(c.req.param("name")!);
335
- const variableSet = await requireVariableSetForApi(db, grant, c.req.param("variableSetId")!);
336
- const allowOrganization =
337
- variableSet.scope === "organization" &&
338
- authorization.accountGrant?.permissions.includes("account:admin") === true;
339
- if (variableSet.scope === "organization" && !allowOrganization) {
340
- throw new HTTPException(403, {
341
- message: "missing permission: account:admin",
342
- });
343
- }
344
- const deleted = await deleteVariableSetVariable(db, {
345
- accountId: grant.accountId,
346
- workspaceId,
347
- subjectId: grant.subjectId,
348
- variableSetId: variableSet.id,
349
- name,
350
- allowOrganization,
351
- });
352
- if (!deleted) {
353
- throw new HTTPException(404, {
354
- message: "variable set variable not found",
355
- });
356
- }
357
- await recordVariableSetAuditEvent(db, {
358
- grant,
359
- action: "variable_set.variable.deleted",
360
- variableSetId: variableSet.id,
361
- variableName: name,
362
- });
363
- return c.json({ ok: true });
364
- });
365
- }
366
- }
367
-
368
- /** @deprecated use registerVariableSetRoutes */
369
- export const registerEnvironmentRoutes = registerVariableSetRoutes;
370
-
371
- function parseVariableName(raw: string): string {
372
- const parsed = VariableSetVariableName.safeParse(raw);
373
- if (!parsed.success) {
374
- throw new HTTPException(422, {
375
- message: "variable set variable names must match ^[A-Z][A-Z0-9_]*$",
376
- });
377
- }
378
- assertAllowedVariableSetVariableName(parsed.data);
379
- return parsed.data;
380
- }
381
-
382
- function trimmedVariableSetName(name: string): string {
383
- const trimmed = name.trim();
384
- if (!trimmed) {
385
- throw new HTTPException(422, { message: "variable set name is required" });
386
- }
387
- return trimmed;
388
- }
@@ -1,122 +0,0 @@
1
- import type { Hono } from "hono";
2
- import { HTTPException } from "hono/http-exception";
3
- import { z } from "zod";
4
- import {
5
- CreateHostMcpBindingRequest,
6
- IssueHostMcpDelegationRequest,
7
- } from "@opengeni/contracts/host-mcp-bindings";
8
- import {
9
- createHostMcpBinding,
10
- getHostMcpBinding,
11
- revokeHostMcpBinding,
12
- issueHostMcpDelegation,
13
- getHostMcpDelegation,
14
- revokeHostMcpDelegation,
15
- HostMcpDelegationAuthorityError,
16
- HostMcpBindingConflictError,
17
- withWorkspaceSubjectRls,
18
- } from "@opengeni/db";
19
- import {
20
- requireAccessGrantAuthorization,
21
- prepareHostMcpOwnerAuthorization,
22
- type ApiRouteDeps,
23
- } from "@opengeni/core";
24
-
25
- /** Registration is not an execution grant. The durable runtime must separately
26
- * validate the exact binding generation and accepted execution context. */
27
- export function registerHostMcpBindingRoutes(app: Hono, deps: ApiRouteDeps): void {
28
- for (const entity of ["bindings", "delegations"] as const) {
29
- app.on(
30
- ["GET", "POST"],
31
- [
32
- `/v1/workspaces/:workspaceId/host-mcp-${entity}`,
33
- `/v1/workspaces/:workspaceId/host-mcp-${entity}/:bindingId`,
34
- `/v1/workspaces/:workspaceId/host-mcp-${entity}/:bindingId/revoke`,
35
- ],
36
- async (c) => {
37
- const workspaceId = c.req.param("workspaceId")!;
38
- const bindingId = c.req.param("bindingId");
39
- const method = c.req.method;
40
- const revoke = c.req.path.endsWith("/revoke");
41
- if (
42
- !(
43
- (method === "POST" && !bindingId) ||
44
- (method === "GET" && bindingId && !revoke) ||
45
- (method === "POST" && bindingId && revoke)
46
- )
47
- )
48
- throw new HTTPException(404, { message: "not found" });
49
- const permission = method === "GET" ? "connections:read" : "connections:write";
50
- const authorization = await requireAccessGrantAuthorization(
51
- c,
52
- deps,
53
- workspaceId,
54
- permission,
55
- );
56
- const authorizeCommit = prepareHostMcpOwnerAuthorization(
57
- authorization,
58
- workspaceId,
59
- permission,
60
- );
61
- if (bindingId) z.string().uuid().parse(bindingId);
62
- const createInput =
63
- method === "POST" && !bindingId
64
- ? (entity === "bindings"
65
- ? CreateHostMcpBindingRequest
66
- : IssueHostMcpDelegationRequest
67
- ).parse(await c.req.json())
68
- : null;
69
- const revokeInput = revoke
70
- ? z
71
- .object({ expectedGeneration: z.number().int().positive().safe() })
72
- .strict()
73
- .parse(await c.req.json())
74
- : null;
75
- const owner = {
76
- accountId: authorization.grant.accountId,
77
- workspaceId,
78
- subjectId: authorization.grant.subjectId,
79
- };
80
- try {
81
- const result = await withWorkspaceSubjectRls(
82
- deps.db,
83
- workspaceId,
84
- owner.subjectId,
85
- async (tx) => {
86
- const effectiveOwner = await authorizeCommit(tx);
87
- if (createInput)
88
- return entity === "bindings"
89
- ? createHostMcpBinding(tx, effectiveOwner, createInput)
90
- : issueHostMcpDelegation(tx, effectiveOwner, createInput);
91
- const existing = await (
92
- entity === "bindings" ? getHostMcpBinding : getHostMcpDelegation
93
- )(tx, effectiveOwner, bindingId!);
94
- if (!existing)
95
- throw new HTTPException(404, {
96
- message:
97
- entity === "bindings" ? "Host binding not found" : "Host delegation not found",
98
- });
99
- return revokeInput
100
- ? (entity === "bindings" ? revokeHostMcpBinding : revokeHostMcpDelegation)(
101
- tx,
102
- effectiveOwner,
103
- bindingId!,
104
- revokeInput.expectedGeneration,
105
- )
106
- : existing;
107
- },
108
- );
109
- return c.json(result, createInput ? 201 : 200);
110
- } catch (error) {
111
- if (error instanceof HostMcpDelegationAuthorityError)
112
- throw new HTTPException(403, { message: "Host delegation authority unavailable" });
113
- if (error instanceof HostMcpBindingConflictError)
114
- throw new HTTPException(409, {
115
- message: "Host binding changed; reload before retrying",
116
- });
117
- throw error;
118
- }
119
- },
120
- );
121
- }
122
- }
@@ -1,41 +0,0 @@
1
- import type { Hono } from "hono";
2
- import { hostMcpResolverForRequest, type ApiRouteDeps } from "@opengeni/core";
3
-
4
- export function registerHostMcpResolverRoutes(app: Hono, deps: ApiRouteDeps): void {
5
- const path = "/v1/organizations/:organizationId/mcp-credential-resolvers/:externalSource";
6
- app.get(path, async (context) =>
7
- context.json(
8
- await hostMcpResolverForRequest(
9
- context,
10
- deps,
11
- context.req.param("organizationId"),
12
- context.req.param("externalSource"),
13
- "get",
14
- ),
15
- ),
16
- );
17
- app.put(path, async (context) =>
18
- context.json(
19
- await hostMcpResolverForRequest(
20
- context,
21
- deps,
22
- context.req.param("organizationId"),
23
- context.req.param("externalSource"),
24
- "put",
25
- await context.req.json().catch(() => null),
26
- ),
27
- ),
28
- );
29
- app.post(`${path}/revoke`, async (context) =>
30
- context.json(
31
- await hostMcpResolverForRequest(
32
- context,
33
- deps,
34
- context.req.param("organizationId"),
35
- context.req.param("externalSource"),
36
- "revoke",
37
- await context.req.json().catch(() => null),
38
- ),
39
- ),
40
- );
41
- }