@opengeni/api-router 3.0.1 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/dist/access-grant-rls.d.ts +8 -1
  2. package/dist/admission-trace.d.ts +8 -0
  3. package/dist/app.d.ts +50 -3
  4. package/dist/app.js +10 -1
  5. package/dist/artifact-catalog-cursor.d.ts +1 -0
  6. package/dist/attached-browser-viewer.d.ts +11 -0
  7. package/dist/auth/managed-auth-attempt-context.d.ts +2 -0
  8. package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
  9. package/dist/auth/managed-auth-session-adapter.d.ts +9 -1
  10. package/dist/auth/managed-auth.d.ts +72 -5
  11. package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
  12. package/dist/auth/new-signups-gate.d.ts +23 -0
  13. package/dist/auth/signup-funnel-metrics.d.ts +44 -0
  14. package/dist/azure-live.d.ts +28 -0
  15. package/dist/browser-action-fences.d.ts +13 -0
  16. package/dist/browser-controller-authority.d.ts +1 -61
  17. package/dist/browser-ephemeral.d.ts +5 -0
  18. package/dist/browser-lost-runtime-end.d.ts +24 -0
  19. package/dist/browser-state-authority.d.ts +1 -27
  20. package/dist/chunk-OGQDXVXY.js +18 -0
  21. package/dist/chunk-OGQDXVXY.js.map +1 -0
  22. package/dist/{chunk-AJ62T5QN.js → chunk-OT56OY4V.js} +80503 -39869
  23. package/dist/chunk-OT56OY4V.js.map +1 -0
  24. package/dist/claude-default-models.d.ts +19 -0
  25. package/dist/claude-subscription-core.d.ts +50 -0
  26. package/dist/claude-subscription-oauth.d.ts +36 -0
  27. package/dist/claude-subscription-profile.d.ts +9 -0
  28. package/dist/claude-subscription-usage.d.ts +6 -0
  29. package/dist/claude-workspace-connection.d.ts +15 -0
  30. package/dist/codemode.d.ts +40 -5
  31. package/dist/codex-realtime.d.ts +29 -3
  32. package/dist/codex-session-pointers.d.ts +19 -0
  33. package/dist/connection-ownership.d.ts +6 -3
  34. package/dist/controller-data-plane.d.ts +16 -0
  35. package/dist/credit-promotion-snapshot.d.ts +6 -0
  36. package/dist/editable-artifact-source-session.d.ts +3 -0
  37. package/dist/editable-artifact-websocket.d.ts +5 -3
  38. package/dist/fatal-process-boundary.d.ts +9 -1
  39. package/dist/github-access.d.ts +7 -1
  40. package/dist/github-browser-flow.d.ts +1 -1
  41. package/dist/http/acting-person.d.ts +36 -0
  42. package/dist/http/api-contract-compat.d.ts +19 -0
  43. package/dist/http/api-error.d.ts +50 -1
  44. package/dist/http/auth.d.ts +8 -1
  45. package/dist/http/cors.d.ts +12 -0
  46. package/dist/http/deprecation.d.ts +42 -0
  47. package/dist/http/keyed-admission.d.ts +12 -0
  48. package/dist/http/local-browser-boundary.d.ts +72 -0
  49. package/dist/http/metrics-listener.d.ts +22 -0
  50. package/dist/http/path-identifier.d.ts +17 -0
  51. package/dist/http/registered-route-label.d.ts +16 -0
  52. package/dist/http/rejection-telemetry.d.ts +34 -0
  53. package/dist/http/request-body.d.ts +27 -0
  54. package/dist/http/request-source.d.ts +41 -3
  55. package/dist/http/sse.d.ts +12 -1
  56. package/dist/http/unmatched-route.d.ts +18 -0
  57. package/dist/http/user-content.d.ts +36 -0
  58. package/dist/http/variable-sets-removed.d.ts +41 -0
  59. package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
  60. package/dist/index.js +1279 -108
  61. package/dist/index.js.map +1 -1
  62. package/dist/integration-connect-metrics.d.ts +35 -0
  63. package/dist/integration-endpoint-test.d.ts +20 -0
  64. package/dist/integrations/api-integrations.d.ts +2 -2
  65. package/dist/integrations/atlassian.d.ts +8 -3
  66. package/dist/integrations/fiken.d.ts +3 -1
  67. package/dist/integrations/github-lens-connect.d.ts +37 -66
  68. package/dist/integrations/google-drive.d.ts +2 -0
  69. package/dist/integrations/integration-commit-authority.d.ts +13 -0
  70. package/dist/integrations/marketplace-plugin.d.ts +43 -43
  71. package/dist/integrations/oauth-client.d.ts +171 -12
  72. package/dist/integrations/oauth-profiles.d.ts +42 -13
  73. package/dist/integrations/onepassword-vault-provider.d.ts +9 -0
  74. package/dist/integrations/slack-bot.d.ts +285 -7
  75. package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
  76. package/dist/integrations/slack-interactions.d.ts +89 -10
  77. package/dist/integrations/slack-mrkdwn.d.ts +41 -0
  78. package/dist/integrations/slack-routing.d.ts +1 -1
  79. package/dist/integrations/slack-session-defaults.d.ts +58 -0
  80. package/dist/integrations/slack-task-file-upload.d.ts +36 -0
  81. package/dist/integrations/slack-tool-review.d.ts +5 -0
  82. package/dist/interaction-agent-access.d.ts +13 -8
  83. package/dist/interaction-agent-version.d.ts +21 -0
  84. package/dist/interaction-holder-heartbeat.d.ts +5 -0
  85. package/dist/interaction-metrics.d.ts +27 -2
  86. package/dist/interaction-route-stages.d.ts +25 -0
  87. package/dist/interaction-secrets-vault.d.ts +20 -0
  88. package/dist/interaction-secrets.d.ts +103 -0
  89. package/dist/mcp/action-catalog-types.d.ts +14 -0
  90. package/dist/mcp/action-catalog.gen.d.ts +2 -0
  91. package/dist/mcp/action-descriptions.d.ts +4 -0
  92. package/dist/mcp/action-schema-imports.gen.d.ts +1 -0
  93. package/dist/mcp/capability-account-readiness.d.ts +7 -0
  94. package/dist/mcp/child-read-evidence.d.ts +9 -0
  95. package/dist/mcp/company-profile-agent-admin.d.ts +12 -0
  96. package/dist/mcp/contract-input.d.ts +13 -0
  97. package/dist/mcp/documents.d.ts +2 -0
  98. package/dist/mcp/first-party-tool-permissions.d.ts +3 -606
  99. package/dist/mcp/notification-tools.d.ts +26 -0
  100. package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
  101. package/dist/mcp/scheduled-task-input.d.ts +1309 -0
  102. package/dist/mcp/scheduled-task-view.d.ts +217 -3
  103. package/dist/mcp/secret-tools.d.ts +14 -0
  104. package/dist/mcp/server.d.ts +108 -5
  105. package/dist/mcp/session-admin-access-tools.d.ts +33 -0
  106. package/dist/mcp/session-event-errors.d.ts +28 -0
  107. package/dist/mcp/session-event-view.d.ts +62 -0
  108. package/dist/mcp/session-view.d.ts +15 -0
  109. package/dist/mcp/session-wait.d.ts +18 -0
  110. package/dist/mcp/site-agent-clamp-tools.d.ts +38 -0
  111. package/dist/mcp/site-data-tools.d.ts +22 -0
  112. package/dist/mcp/site-publication-tools.d.ts +19 -0
  113. package/dist/mcp/site-sql-tools.d.ts +27 -0
  114. package/dist/mcp-oauth.d.ts +37 -4
  115. package/dist/model-calls/chat-completions.d.ts +87 -0
  116. package/dist/model-calls/pending-usage-settlements.d.ts +57 -0
  117. package/dist/model-calls/service.d.ts +36 -0
  118. package/dist/model-catalog.d.ts +9 -3
  119. package/dist/native-push-dispatch.d.ts +69 -0
  120. package/dist/observability.d.ts +3 -1
  121. package/dist/organization-mcp.d.ts +82 -0
  122. package/dist/prepared-mcp-actor.d.ts +77 -0
  123. package/dist/prepared-mcp-permissions.d.ts +8 -0
  124. package/dist/routes/analytics-consent.d.ts +26 -0
  125. package/dist/routes/api-integrations.d.ts +11 -0
  126. package/dist/routes/api-keys.d.ts +7 -7
  127. package/dist/routes/automations.d.ts +2 -0
  128. package/dist/routes/billing.d.ts +59 -0
  129. package/dist/routes/browser-sessions.d.ts +65 -2
  130. package/dist/routes/chat-completions.d.ts +11 -0
  131. package/dist/routes/claude-core-usage.d.ts +20 -0
  132. package/dist/routes/claude-subscription-accounts.d.ts +3 -0
  133. package/dist/routes/claude-subscription-oauth.d.ts +3 -0
  134. package/dist/routes/client-errors.d.ts +182 -0
  135. package/dist/routes/codex-core.d.ts +401 -0
  136. package/dist/routes/codex.d.ts +64 -2
  137. package/dist/routes/computer-sessions.d.ts +6 -1
  138. package/dist/routes/desktop-distribution.d.ts +32 -0
  139. package/dist/routes/github-browser-fonts.gen.d.ts +2 -0
  140. package/dist/routes/github-browser-pages.d.ts +27 -0
  141. package/dist/routes/inbox.d.ts +13 -0
  142. package/dist/routes/insights-response-cache.d.ts +10 -0
  143. package/dist/routes/insights-usage.d.ts +12 -0
  144. package/dist/routes/insights.d.ts +28 -0
  145. package/dist/routes/interaction-placement-message.d.ts +7 -0
  146. package/dist/routes/managed-sign-in-methods.d.ts +6 -0
  147. package/dist/routes/model-account-choice.d.ts +13 -0
  148. package/dist/routes/model-account-settings.d.ts +19 -0
  149. package/dist/routes/native-app-auth.d.ts +12 -0
  150. package/dist/routes/organization-integration-policy.d.ts +8 -0
  151. package/dist/routes/organization-integrations.d.ts +6 -0
  152. package/dist/routes/organization-mcp-connections.d.ts +3 -0
  153. package/dist/routes/organization-model-defaults.d.ts +9 -0
  154. package/dist/routes/organization-service-accounts.d.ts +3 -0
  155. package/dist/routes/personal-api-keys.d.ts +3 -0
  156. package/dist/routes/session-admin-access.d.ts +3 -0
  157. package/dist/routes/session-artifact-associations.d.ts +4 -0
  158. package/dist/routes/session-history-imports.d.ts +20 -0
  159. package/dist/routes/sessions.d.ts +38 -2
  160. package/dist/routes/site-data.d.ts +18 -0
  161. package/dist/routes/site-publishing.d.ts +5 -0
  162. package/dist/routes/site-runtime.d.ts +31 -0
  163. package/dist/routes/site-sql.d.ts +16 -0
  164. package/dist/routes/slack-bot-access.d.ts +3 -0
  165. package/dist/routes/subscription-account-pools.d.ts +21 -0
  166. package/dist/routes/subscription-core-http.d.ts +5 -0
  167. package/dist/routes/subscription-pool-access.d.ts +37 -0
  168. package/dist/routes/subscription-pool-core.d.ts +153 -0
  169. package/dist/routes/supergrok.d.ts +6 -6
  170. package/dist/routes/usage-allowances.d.ts +12 -0
  171. package/dist/routes/variable-sets-removed.d.ts +2 -0
  172. package/dist/routes/vault-providers.d.ts +34 -0
  173. package/dist/routes/vaults.d.ts +3 -0
  174. package/dist/routes/workspace-integrations.d.ts +35 -0
  175. package/dist/routes/workspace-model-providers.d.ts +4 -0
  176. package/dist/routes/workspaces.d.ts +11 -2
  177. package/dist/sandbox/agent-update.d.ts +64 -0
  178. package/dist/sandbox/auth-callout.d.ts +8 -0
  179. package/dist/sandbox/channel-a.d.ts +15 -1
  180. package/dist/sandbox/enrollment.d.ts +26 -4
  181. package/dist/sandbox/machine-audience.d.ts +29 -0
  182. package/dist/sandbox/machines.d.ts +15 -2
  183. package/dist/sandbox/metrics-ingestion.d.ts +6 -2
  184. package/dist/sandbox/screen-control.d.ts +85 -0
  185. package/dist/sandbox/viewer.d.ts +5 -1
  186. package/dist/sandbox-file-artifacts.d.ts +17 -1
  187. package/dist/scheduled-task-blockers.d.ts +39 -0
  188. package/dist/scheduled-task-deletion.d.ts +3 -4
  189. package/dist/scheduled-task-lifecycle.d.ts +14 -0
  190. package/dist/secret-answers.d.ts +40 -0
  191. package/dist/session-create-observability.d.ts +5 -0
  192. package/dist/session-event-view-36GO3IL7.js +528 -0
  193. package/dist/session-event-view-36GO3IL7.js.map +1 -0
  194. package/dist/signed-state-secret.d.ts +18 -0
  195. package/dist/site-agent-guard.d.ts +53 -0
  196. package/dist/site-data/operations.d.ts +103 -0
  197. package/dist/site-data/service.d.ts +203 -0
  198. package/dist/site-frame-guard.d.ts +32 -0
  199. package/dist/site-publishing/agent-data-tools.d.ts +84 -0
  200. package/dist/site-publishing/agent-model.d.ts +58 -0
  201. package/dist/site-publishing/agent-session.d.ts +16 -0
  202. package/dist/site-publishing/content-scanner.d.ts +31 -0
  203. package/dist/site-publishing/edge-sync.d.ts +48 -0
  204. package/dist/site-publishing/gateway-signature.d.ts +56 -0
  205. package/dist/site-publishing/limits.d.ts +63 -0
  206. package/dist/site-publishing/page-tool-authority.d.ts +30 -0
  207. package/dist/site-publishing/platform-usage.d.ts +113 -0
  208. package/dist/site-publishing/platform.d.ts +21 -0
  209. package/dist/site-publishing/readiness.d.ts +62 -0
  210. package/dist/site-publishing/runtime.d.ts +179 -0
  211. package/dist/site-publishing/service.d.ts +264 -0
  212. package/dist/site-publishing/session-events.d.ts +22 -0
  213. package/dist/site-publishing/session-views.d.ts +36 -0
  214. package/dist/site-publishing/viewer.d.ts +40 -0
  215. package/dist/site-session-origin.d.ts +31 -6
  216. package/dist/site-sql/format.d.ts +47 -0
  217. package/dist/site-sql/gateway.d.ts +50 -0
  218. package/dist/site-sql/service.d.ts +213 -0
  219. package/dist/temporal-schedule-sync.d.ts +26 -0
  220. package/dist/transcription/billing-refusal.d.ts +8 -0
  221. package/dist/transcription/normalize.d.ts +23 -0
  222. package/dist/transcription/providers/azure-mai.d.ts +12 -0
  223. package/dist/transcription/providers/azure-openai.d.ts +4 -0
  224. package/dist/transcription/providers/openai.d.ts +16 -0
  225. package/dist/transcription/providers/subscription-core.d.ts +39 -0
  226. package/dist/transcription/service.d.ts +10 -1
  227. package/dist/transcription/wav-duration.d.ts +8 -0
  228. package/dist/workspace-tool-gateway-attestations.d.ts +37 -0
  229. package/dist/workspace-tool-gateway-observability.d.ts +16 -0
  230. package/dist/workspace-tool-gateway-secrets.d.ts +27 -0
  231. package/dist/workspace-tool-gateway.d.ts +102 -6
  232. package/dist/workspace-tool-target-fence.d.ts +116 -0
  233. package/dist/workspace-tool-target.d.ts +225 -0
  234. package/dist/workspace-webhook-dispatch.d.ts +26 -0
  235. package/dist/xai-subscription-core.d.ts +60 -0
  236. package/package.json +25 -20
  237. package/src/access-grant-rls.ts +64 -14
  238. package/src/admission-trace.ts +14 -0
  239. package/src/app.ts +1684 -252
  240. package/src/artifact-catalog-cursor.ts +1 -0
  241. package/src/attached-browser-viewer.ts +26 -0
  242. package/src/auth/managed-auth-attempt-context.ts +9 -0
  243. package/src/auth/managed-auth-rate-limits.ts +252 -0
  244. package/src/auth/managed-auth-session-adapter.ts +64 -29
  245. package/src/auth/managed-auth.ts +303 -35
  246. package/src/auth/managed-email.ts +18 -1
  247. package/src/auth/managed-sign-in-notifications.ts +81 -0
  248. package/src/auth/new-signups-gate.ts +49 -0
  249. package/src/auth/organization-user-setup.ts +3 -3
  250. package/src/auth/signup-funnel-metrics.ts +164 -0
  251. package/src/azure-live.ts +103 -0
  252. package/src/browser-action-fences.ts +45 -0
  253. package/src/browser-controller-authority.ts +1 -186
  254. package/src/browser-ephemeral.ts +39 -0
  255. package/src/browser-lost-runtime-end.ts +71 -0
  256. package/src/browser-state-authority.ts +1 -236
  257. package/src/claude-default-models.ts +37 -0
  258. package/src/claude-subscription-core.ts +154 -0
  259. package/src/claude-subscription-oauth.ts +352 -0
  260. package/src/claude-subscription-profile.ts +73 -0
  261. package/src/claude-subscription-usage.ts +51 -0
  262. package/src/claude-workspace-connection.ts +82 -0
  263. package/src/codemode.ts +236 -39
  264. package/src/codex-realtime.ts +181 -53
  265. package/src/codex-session-pointers.ts +80 -0
  266. package/src/company-brain-okf.ts +1 -1
  267. package/src/connected-machine-computer-access.ts +2 -1
  268. package/src/connection-ownership.ts +19 -13
  269. package/src/controller-data-plane.ts +34 -0
  270. package/src/credit-promotion-snapshot.ts +36 -0
  271. package/src/editable-artifact-production.ts +10 -0
  272. package/src/editable-artifact-source-session.ts +123 -0
  273. package/src/editable-artifact-websocket.ts +16 -3
  274. package/src/fatal-process-boundary.ts +67 -3
  275. package/src/gateway-realtime.ts +12 -8
  276. package/src/github-access.ts +31 -5
  277. package/src/github-browser-flow.ts +1 -1
  278. package/src/http/acting-person.ts +105 -0
  279. package/src/http/api-contract-compat.ts +49 -0
  280. package/src/http/api-error.ts +210 -2
  281. package/src/http/auth.ts +68 -4
  282. package/src/http/cors.ts +37 -5
  283. package/src/http/deprecation.ts +118 -0
  284. package/src/http/keyed-admission.ts +29 -0
  285. package/src/http/local-browser-boundary.ts +343 -0
  286. package/src/http/metrics-listener.ts +57 -0
  287. package/src/http/path-identifier.ts +54 -0
  288. package/src/http/registered-route-label.ts +34 -0
  289. package/src/http/rejection-telemetry.ts +120 -0
  290. package/src/http/request-body.ts +127 -0
  291. package/src/http/request-source.ts +154 -13
  292. package/src/http/sse.ts +88 -28
  293. package/src/http/unmatched-route.ts +60 -0
  294. package/src/http/user-content.ts +158 -0
  295. package/src/http/variable-sets-removed.ts +122 -0
  296. package/src/http/websocket-upgrade-dispatch.ts +29 -0
  297. package/src/index.ts +107 -57
  298. package/src/integration-connect-metrics.ts +228 -0
  299. package/src/integration-endpoint-test.ts +291 -0
  300. package/src/integrations/api-integrations.ts +81 -7
  301. package/src/integrations/atlassian.ts +202 -83
  302. package/src/integrations/fiken.ts +66 -38
  303. package/src/integrations/github-app-connect.ts +64 -18
  304. package/src/integrations/github-lens-connect.ts +8 -29
  305. package/src/integrations/google-drive.ts +448 -152
  306. package/src/integrations/integration-commit-authority.ts +69 -0
  307. package/src/integrations/marketplace-plugin.ts +1 -1
  308. package/src/integrations/oauth-client.ts +733 -193
  309. package/src/integrations/oauth-profiles.ts +116 -45
  310. package/src/integrations/onepassword-vault-provider.ts +16 -0
  311. package/src/integrations/personal-github-repositories.ts +1 -1
  312. package/src/integrations/personal-github.ts +61 -35
  313. package/src/integrations/provider-oauth.ts +67 -85
  314. package/src/integrations/slack-app-home.ts +5 -5
  315. package/src/integrations/slack-bot.ts +893 -201
  316. package/src/integrations/slack-file-upload-flow.ts +147 -0
  317. package/src/integrations/slack-install.ts +7 -7
  318. package/src/integrations/slack-interactions.ts +1589 -299
  319. package/src/integrations/slack-mrkdwn.ts +193 -0
  320. package/src/integrations/slack-routing.ts +2 -2
  321. package/src/integrations/slack-session-defaults.ts +224 -0
  322. package/src/integrations/slack-task-file-upload.ts +323 -0
  323. package/src/integrations/slack-tool-review.ts +65 -0
  324. package/src/integrations/social-oauth.ts +90 -58
  325. package/src/interaction-agent-access.ts +40 -20
  326. package/src/interaction-agent-version.ts +85 -0
  327. package/src/interaction-holder-heartbeat.ts +24 -8
  328. package/src/interaction-metrics.ts +164 -2
  329. package/src/interaction-route-stages.ts +94 -0
  330. package/src/interaction-secrets-vault.ts +213 -0
  331. package/src/interaction-secrets.ts +426 -0
  332. package/src/mcp/action-catalog-types.ts +14 -0
  333. package/src/mcp/action-catalog.gen.ts +8014 -0
  334. package/src/mcp/action-descriptions.ts +299 -0
  335. package/src/mcp/action-schema-imports.gen.ts +304 -0
  336. package/src/mcp/capability-account-readiness.ts +17 -0
  337. package/src/mcp/child-read-evidence.ts +19 -0
  338. package/src/mcp/company-profile-agent-admin.ts +13 -0
  339. package/src/mcp/contract-input.ts +165 -0
  340. package/src/mcp/documents.ts +9 -2
  341. package/src/mcp/editable-artifacts.ts +29 -11
  342. package/src/mcp/files.ts +5 -1
  343. package/src/mcp/first-party-tool-permissions.ts +7 -285
  344. package/src/mcp/knowledge-entries.ts +108 -34
  345. package/src/mcp/notification-tools.ts +480 -0
  346. package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
  347. package/src/mcp/scheduled-task-input.ts +89 -0
  348. package/src/mcp/scheduled-task-view.ts +63 -3
  349. package/src/mcp/secret-tools.ts +185 -0
  350. package/src/mcp/server.ts +2213 -1116
  351. package/src/mcp/session-admin-access-tools.ts +163 -0
  352. package/src/mcp/session-event-errors.ts +123 -0
  353. package/src/mcp/session-event-view.ts +395 -13
  354. package/src/mcp/session-view.ts +3 -0
  355. package/src/mcp/session-wait.ts +67 -7
  356. package/src/mcp/site-agent-clamp-tools.ts +140 -0
  357. package/src/mcp/site-data-tools.ts +339 -0
  358. package/src/mcp/site-publication-tools.ts +201 -0
  359. package/src/mcp/site-sql-tools.ts +427 -0
  360. package/src/mcp-oauth.ts +635 -45
  361. package/src/model-calls/chat-completions.ts +352 -0
  362. package/src/model-calls/pending-usage-settlements.ts +125 -0
  363. package/src/model-calls/service.ts +694 -0
  364. package/src/model-catalog.ts +68 -17
  365. package/src/native-push-dispatch.ts +457 -0
  366. package/src/observability.ts +15 -1
  367. package/src/organization-mcp.ts +485 -0
  368. package/src/prepared-mcp-actor.ts +154 -0
  369. package/src/prepared-mcp-permissions.ts +38 -0
  370. package/src/routes/analytics-consent.ts +123 -0
  371. package/src/routes/api-integrations.ts +268 -9
  372. package/src/routes/api-keys.ts +164 -25
  373. package/src/routes/artifact-catalog.ts +111 -0
  374. package/src/routes/automations.ts +163 -90
  375. package/src/routes/billing.ts +535 -59
  376. package/src/routes/browser-sessions.ts +966 -342
  377. package/src/routes/canonical-human-identities.ts +61 -0
  378. package/src/routes/capabilities.ts +112 -5
  379. package/src/routes/channels.ts +4 -3
  380. package/src/routes/chat-completions.ts +235 -0
  381. package/src/routes/claude-core-usage.ts +147 -0
  382. package/src/routes/claude-subscription-accounts.ts +233 -0
  383. package/src/routes/claude-subscription-oauth.ts +175 -0
  384. package/src/routes/client-errors.ts +394 -0
  385. package/src/routes/codex-core.ts +687 -0
  386. package/src/routes/codex.ts +1277 -1119
  387. package/src/routes/company-brain.ts +4 -0
  388. package/src/routes/computer-sessions.ts +319 -85
  389. package/src/routes/connect.ts +277 -175
  390. package/src/routes/connections.ts +690 -363
  391. package/src/routes/desktop-distribution.ts +217 -0
  392. package/src/routes/documents.ts +13 -7
  393. package/src/routes/editable-artifacts.ts +74 -4
  394. package/src/routes/enrollments.ts +110 -16
  395. package/src/routes/external-identity-links.ts +13 -12
  396. package/src/routes/files.ts +41 -16
  397. package/src/routes/github-browser-fonts.gen.ts +12 -0
  398. package/src/routes/github-browser-pages.ts +258 -0
  399. package/src/routes/github.ts +200 -75
  400. package/src/routes/inbox.ts +353 -0
  401. package/src/routes/insights-response-cache.ts +83 -0
  402. package/src/routes/insights-usage.ts +345 -0
  403. package/src/routes/insights.ts +103 -8
  404. package/src/routes/install.ts +51 -10
  405. package/src/routes/integration-facets.ts +70 -28
  406. package/src/routes/interaction-placement-message.ts +12 -0
  407. package/src/routes/knowledge.ts +136 -27
  408. package/src/routes/machines.ts +189 -135
  409. package/src/routes/managed-auth-session-sets.ts +43 -10
  410. package/src/routes/managed-onboarding.ts +39 -19
  411. package/src/routes/managed-sign-in-methods.ts +433 -0
  412. package/src/routes/memory-slack-publications.ts +3 -2
  413. package/src/routes/model-account-choice.ts +194 -0
  414. package/src/routes/model-account-settings.ts +235 -0
  415. package/src/routes/model-connection-access.ts +210 -48
  416. package/src/routes/native-app-auth.ts +296 -0
  417. package/src/routes/organization-integration-policy.ts +116 -0
  418. package/src/routes/organization-integrations.ts +326 -0
  419. package/src/routes/organization-mcp-connections.ts +183 -0
  420. package/src/routes/organization-memberships.ts +205 -19
  421. package/src/routes/organization-model-defaults.ts +110 -0
  422. package/src/routes/organization-model-providers.ts +74 -3
  423. package/src/routes/organization-service-accounts.ts +128 -0
  424. package/src/routes/organization-sessions.ts +21 -5
  425. package/src/routes/personal-api-keys.ts +184 -0
  426. package/src/routes/personal-github-git-broker.ts +2 -2
  427. package/src/routes/personal-github.ts +9 -4
  428. package/src/routes/plugins.ts +46 -7
  429. package/src/routes/pr-review-github.ts +105 -118
  430. package/src/routes/pr-review.ts +88 -82
  431. package/src/routes/preference-registry.ts +18 -0
  432. package/src/routes/rigs.ts +48 -13
  433. package/src/routes/scheduled-tasks.ts +347 -27
  434. package/src/routes/session-admin-access.ts +271 -0
  435. package/src/routes/session-artifact-associations.ts +164 -0
  436. package/src/routes/session-history-imports.ts +305 -0
  437. package/src/routes/sessions.ts +1682 -363
  438. package/src/routes/site-data.ts +340 -0
  439. package/src/routes/site-publishing.ts +584 -0
  440. package/src/routes/site-runtime.ts +1944 -0
  441. package/src/routes/site-sql.ts +263 -0
  442. package/src/routes/skill-content.ts +72 -7
  443. package/src/routes/skills.ts +5 -4
  444. package/src/routes/slack-bot-access.ts +108 -0
  445. package/src/routes/social.ts +27 -15
  446. package/src/routes/subscription-account-pools.ts +209 -0
  447. package/src/routes/subscription-core-http.ts +18 -0
  448. package/src/routes/subscription-pool-access.ts +180 -0
  449. package/src/routes/subscription-pool-core.ts +552 -0
  450. package/src/routes/supergrok.ts +174 -655
  451. package/src/routes/transcription-recordings.ts +71 -4
  452. package/src/routes/transcriptions.ts +26 -2
  453. package/src/routes/usage-allowances.ts +381 -0
  454. package/src/routes/variable-sets-removed.ts +19 -0
  455. package/src/routes/vault-providers.ts +782 -0
  456. package/src/routes/vaults.ts +421 -0
  457. package/src/routes/video-generation.ts +30 -12
  458. package/src/routes/workspace-artifacts.ts +165 -53
  459. package/src/routes/workspace-integrations.ts +576 -0
  460. package/src/routes/workspace-model-providers.ts +148 -0
  461. package/src/routes/workspace-state.ts +4 -0
  462. package/src/routes/workspaces.ts +625 -117
  463. package/src/sandbox/agent-update.ts +315 -0
  464. package/src/sandbox/auth-callout.ts +104 -21
  465. package/src/sandbox/channel-a.ts +165 -55
  466. package/src/sandbox/enrollment.ts +131 -22
  467. package/src/sandbox/machine-audience.ts +192 -0
  468. package/src/sandbox/machines.ts +75 -31
  469. package/src/sandbox/metrics-ingestion.ts +133 -2
  470. package/src/sandbox/rematerialize.ts +51 -21
  471. package/src/sandbox/screen-control.ts +289 -0
  472. package/src/sandbox/viewer.ts +33 -58
  473. package/src/sandbox-file-artifacts.ts +53 -27
  474. package/src/scheduled-task-blockers.ts +293 -0
  475. package/src/scheduled-task-deletion.ts +13 -3
  476. package/src/scheduled-task-lifecycle.ts +84 -0
  477. package/src/secret-answers.ts +119 -0
  478. package/src/session-create-observability.ts +46 -0
  479. package/src/session-realtime-context.ts +26 -4
  480. package/src/signed-state-secret.ts +58 -0
  481. package/src/site-agent-guard.ts +261 -0
  482. package/src/site-data/operations.ts +777 -0
  483. package/src/site-data/service.ts +1043 -0
  484. package/src/site-frame-guard.ts +107 -0
  485. package/src/site-publishing/agent-data-tools.ts +250 -0
  486. package/src/site-publishing/agent-model.ts +127 -0
  487. package/src/site-publishing/agent-session.ts +148 -0
  488. package/src/site-publishing/content-scanner.ts +93 -0
  489. package/src/site-publishing/edge-sync.ts +148 -0
  490. package/src/site-publishing/gateway-signature.ts +198 -0
  491. package/src/site-publishing/limits.ts +315 -0
  492. package/src/site-publishing/page-tool-authority.ts +111 -0
  493. package/src/site-publishing/platform-usage.ts +479 -0
  494. package/src/site-publishing/platform.ts +98 -0
  495. package/src/site-publishing/readiness.ts +330 -0
  496. package/src/site-publishing/runtime.ts +831 -0
  497. package/src/site-publishing/service.ts +1282 -0
  498. package/src/site-publishing/session-events.ts +262 -0
  499. package/src/site-publishing/session-views.ts +262 -0
  500. package/src/site-publishing/viewer.ts +75 -0
  501. package/src/site-session-origin.ts +91 -6
  502. package/src/site-sql/format.ts +134 -0
  503. package/src/site-sql/gateway.ts +168 -0
  504. package/src/site-sql/service.ts +1636 -0
  505. package/src/site-uploads.ts +27 -5
  506. package/src/temporal-schedule-sync.ts +74 -0
  507. package/src/transcription/billing-refusal.ts +14 -0
  508. package/src/transcription/normalize.ts +77 -0
  509. package/src/transcription/providers/azure-mai.ts +98 -0
  510. package/src/transcription/providers/azure-openai.ts +16 -7
  511. package/src/transcription/providers/codex-subscription.ts +190 -67
  512. package/src/transcription/providers/openai.ts +79 -5
  513. package/src/transcription/providers/subscription-core.ts +125 -0
  514. package/src/transcription/providers/xai-subscription.ts +81 -83
  515. package/src/transcription/segmenter.ts +7 -1
  516. package/src/transcription/service.ts +239 -10
  517. package/src/transcription/wav-duration.ts +39 -0
  518. package/src/workspace-deletion.ts +25 -1
  519. package/src/workspace-tool-gateway-attestations.ts +133 -0
  520. package/src/workspace-tool-gateway-observability.ts +64 -0
  521. package/src/workspace-tool-gateway-secrets.ts +104 -0
  522. package/src/workspace-tool-gateway.ts +921 -103
  523. package/src/workspace-tool-target-fence.ts +380 -0
  524. package/src/workspace-tool-target.ts +554 -0
  525. package/src/workspace-webhook-dispatch.ts +225 -0
  526. package/src/xai-realtime.ts +85 -81
  527. package/src/xai-subscription-core.ts +172 -0
  528. package/dist/browser-auth-broker.d.ts +0 -20
  529. package/dist/chunk-AJ62T5QN.js.map +0 -1
  530. package/dist/connection-authority-owner.d.ts +0 -59
  531. package/dist/routes/connection-authorities.d.ts +0 -3
  532. package/dist/routes/environments.d.ts +0 -5
  533. package/dist/routes/host-mcp-bindings.d.ts +0 -5
  534. package/dist/routes/host-mcp-resolvers.d.ts +0 -3
  535. package/dist/routes/packs.d.ts +0 -3
  536. package/dist/session-event-view-MU3HMNV3.js +0 -264
  537. package/dist/session-event-view-MU3HMNV3.js.map +0 -1
  538. package/dist/xai-subscription-auth.d.ts +0 -23
  539. package/src/browser-auth-broker.ts +0 -155
  540. package/src/connection-authority-owner.ts +0 -61
  541. package/src/routes/connection-authorities.ts +0 -139
  542. package/src/routes/environments.ts +0 -388
  543. package/src/routes/host-mcp-bindings.ts +0 -122
  544. package/src/routes/host-mcp-resolvers.ts +0 -41
  545. package/src/routes/packs.ts +0 -784
  546. package/src/xai-subscription-auth.ts +0 -139
@@ -0,0 +1,315 @@
1
+ import {
2
+ DEFAULT_SITE_LIMITS,
3
+ SiteLimits,
4
+ UNLIMITED_SITE_FLOOD_BRAKES,
5
+ type SiteLimitProfile,
6
+ type SiteLimitProfileKind,
7
+ type SiteLimits as SiteLimitsValue,
8
+ } from "@opengeni/contracts";
9
+ import type { Settings } from "@opengeni/config";
10
+ import type { StoredSiteLimitProfile } from "@opengeni/db";
11
+
12
+ /**
13
+ * Limit profiles for published Sites. Opengeni enforces these values (the
14
+ * edge only brakes floods). Limits follow who the viewer is, not the Site's
15
+ * access mode:
16
+ *
17
+ * - Workspace members are never limited by Site limits, on any Site: they
18
+ * use the workspace's normal session limits and billing. Only the request
19
+ * flood brake applies.
20
+ * - Everyone outside the workspace (invited people and public visitors,
21
+ * signed in or anonymous) shares ONE Site limit (per month by default, or
22
+ * per day), and an optional per-person limit (off by default).
23
+ * - Anonymous guests also meet internal bot guards (conversation and message
24
+ * counts and a per-conversation cap), configured in settings and not shown
25
+ * to Site owners.
26
+ *
27
+ * The profile in force is the Site's own, else the workspace default, else
28
+ * `standard`. Every profile keeps the flood brakes, and deployment switches
29
+ * (public agents) apply last.
30
+ */
31
+
32
+ export type SiteLimitSettings = Pick<
33
+ Settings,
34
+ | "sitesFreeRequestsPerMinutePerVisitor"
35
+ | "sitesFreeGuestWritesPerMinute"
36
+ | "sitesFreeConversationsPerVisitorPerDay"
37
+ | "sitesFreeConversationsPerSitePerDay"
38
+ | "sitesFreeTurnsPerConversation"
39
+ | "sitesFreeAgentMicrosPerConversation"
40
+ | "sitesFreeAgentMicrosPerVisitorPerDay"
41
+ | "sitesFreeAgentMicrosPerSitePerMonth"
42
+ | "sitesAgentMicrosPerSitePerMonth"
43
+ | "sitesAgentMicrosPerPersonPerDay"
44
+ | "sitesGuestConversationsPerVisitorPerDay"
45
+ | "sitesGuestConversationsPerSitePerDay"
46
+ | "sitesGuestTurnsPerConversation"
47
+ | "sitesGuestAgentMicrosPerConversation"
48
+ | "sitesCreditsLimitMultiplier"
49
+ | "sitesPublicAgentsEnabled"
50
+ >;
51
+
52
+ /** The stored kind as the API reports it: the legacy `free` is `standard`. */
53
+ export function normalizedSiteLimitProfileKind(kind: SiteLimitProfileKind): SiteLimitProfileKind {
54
+ return kind === "free" ? "standard" : kind;
55
+ }
56
+
57
+ /** The standard limits from settings (the new setting, the deprecated one, the built-in default). */
58
+ export function standardSiteLimits(settings: SiteLimitSettings): SiteLimitsValue {
59
+ const pick = (...values: (number | null | undefined)[]) =>
60
+ values.find((value) => value !== undefined && value !== null) ?? null;
61
+ const fallback = DEFAULT_SITE_LIMITS;
62
+ return {
63
+ ...fallback,
64
+ requestsPerMinutePerVisitor: settings.sitesFreeRequestsPerMinutePerVisitor,
65
+ guestWritesPerMinute: settings.sitesFreeGuestWritesPerMinute,
66
+ conversationsPerVisitorPerDay: pick(
67
+ settings.sitesGuestConversationsPerVisitorPerDay,
68
+ settings.sitesFreeConversationsPerVisitorPerDay,
69
+ fallback.conversationsPerVisitorPerDay,
70
+ ),
71
+ conversationsPerSitePerDay: pick(
72
+ settings.sitesGuestConversationsPerSitePerDay,
73
+ settings.sitesFreeConversationsPerSitePerDay,
74
+ fallback.conversationsPerSitePerDay,
75
+ ),
76
+ turnsPerConversation: pick(
77
+ settings.sitesGuestTurnsPerConversation,
78
+ settings.sitesFreeTurnsPerConversation,
79
+ fallback.turnsPerConversation,
80
+ ),
81
+ agentMicrosPerConversation: pick(
82
+ settings.sitesGuestAgentMicrosPerConversation,
83
+ settings.sitesFreeAgentMicrosPerConversation,
84
+ fallback.agentMicrosPerConversation,
85
+ ),
86
+ agentMicrosPerVisitorPerDay: pick(
87
+ settings.sitesAgentMicrosPerPersonPerDay,
88
+ settings.sitesFreeAgentMicrosPerVisitorPerDay,
89
+ fallback.agentMicrosPerVisitorPerDay,
90
+ ),
91
+ agentMicrosPerSitePerMonth: pick(
92
+ settings.sitesAgentMicrosPerSitePerMonth,
93
+ settings.sitesFreeAgentMicrosPerSitePerMonth,
94
+ fallback.agentMicrosPerSitePerMonth,
95
+ ),
96
+ };
97
+ }
98
+
99
+ /** @deprecated The former free profile: the standard limits. */
100
+ export function freeSiteLimits(settings: SiteLimitSettings): SiteLimitsValue {
101
+ return standardSiteLimits(settings);
102
+ }
103
+
104
+ const times = (value: number | null, factor: number) => (value === null ? null : value * factor);
105
+
106
+ /** A cap that never exceeds `brake` (null, no cap, becomes the brake). */
107
+ const braked = (value: number | null, brake: number) =>
108
+ value === null ? brake : Math.min(value, brake);
109
+
110
+ /**
111
+ * The previous release's free defaults. Its custom form always saved the six
112
+ * LEGACY_CUSTOM_FORM_FIELDS, prefilled with these, so in a profile of that
113
+ * shape a field with exactly this value means "the default" and takes the
114
+ * new standard value instead. Migration 0791 deliberately leaves stored rows
115
+ * intact for old readers. New writes mark explicit overrides with version 2;
116
+ * unmarked old-pod writes keep normalizing throughout the rolling deploy.
117
+ */
118
+ export const LEGACY_FREE_SITE_LIMIT_DEFAULTS: Readonly<Record<string, unknown>> = Object.freeze({
119
+ requestsPerMinutePerVisitor: 120,
120
+ guestWritesPerMinute: 30,
121
+ agentsEnabled: true,
122
+ guestAgentsEnabled: true,
123
+ conversationsPerVisitorPerDay: 10,
124
+ conversationsPerSitePerDay: 50,
125
+ turnsPerConversation: 20,
126
+ agentMicrosPerConversation: 20_000,
127
+ agentMicrosPerVisitorPerDay: 200_000,
128
+ agentMicrosPerSitePerMonth: 2_000_000,
129
+ agentModels: null,
130
+ });
131
+
132
+ /** The fields the previous release's custom form always saved. */
133
+ export const LEGACY_CUSTOM_FORM_FIELDS = Object.freeze([
134
+ "conversationsPerVisitorPerDay",
135
+ "conversationsPerSitePerDay",
136
+ "turnsPerConversation",
137
+ "agentMicrosPerConversation",
138
+ "agentMicrosPerVisitorPerDay",
139
+ "agentMicrosPerSitePerMonth",
140
+ ] as const);
141
+
142
+ /** Parse stored overrides leniently: unknown or invalid fields are ignored. */
143
+ export function siteLimitOverrides(
144
+ stored: Record<string, unknown> | null | undefined,
145
+ ): Partial<SiteLimitsValue> {
146
+ if (!stored) return {};
147
+ const legacyForm = stored.__siteLimitsVersion !== 2;
148
+ const overrides = legacyForm
149
+ ? Object.fromEntries(
150
+ Object.entries(stored).filter(
151
+ ([key, value]) =>
152
+ !(key in LEGACY_FREE_SITE_LIMIT_DEFAULTS) ||
153
+ LEGACY_FREE_SITE_LIMIT_DEFAULTS[key] !== value,
154
+ ),
155
+ )
156
+ : stored;
157
+ const parsed = SiteLimits.partial().safeParse(overrides);
158
+ if (parsed.success) return parsed.data as Partial<SiteLimitsValue>;
159
+ const kept: Record<string, unknown> = {};
160
+ for (const [key, value] of Object.entries(overrides)) {
161
+ const one = SiteLimits.partial().safeParse({ [key]: value });
162
+ if (one.success) Object.assign(kept, one.data);
163
+ }
164
+ return kept as Partial<SiteLimitsValue>;
165
+ }
166
+
167
+ /** The limits one profile gives people outside the workspace, before deployment switches. */
168
+ export function siteLimitsForProfile(
169
+ settings: SiteLimitSettings,
170
+ profile: StoredSiteLimitProfile | SiteLimitProfile,
171
+ ): SiteLimitsValue {
172
+ const standard = standardSiteLimits(settings);
173
+ // Overrides adjust any kind's limits; custom is the standard limits plus them.
174
+ const overrides = siteLimitOverrides(
175
+ profile.kind === "custom" ||
176
+ (profile.overrides as Record<string, unknown> | null)?.__siteLimitsVersion === 2
177
+ ? profile.overrides
178
+ : null,
179
+ );
180
+ let limits: SiteLimitsValue;
181
+ switch (profile.kind) {
182
+ case "standard":
183
+ case "free":
184
+ limits = standard;
185
+ break;
186
+ case "credits": {
187
+ const factor = settings.sitesCreditsLimitMultiplier;
188
+ limits = {
189
+ ...standard,
190
+ conversationsPerVisitorPerDay: times(standard.conversationsPerVisitorPerDay, factor),
191
+ conversationsPerSitePerDay: times(standard.conversationsPerSitePerDay, factor),
192
+ agentMicrosPerConversation: times(standard.agentMicrosPerConversation, factor),
193
+ agentMicrosPerVisitorPerDay: times(standard.agentMicrosPerVisitorPerDay, factor),
194
+ agentMicrosPerVisitorPerMonth: times(standard.agentMicrosPerVisitorPerMonth, factor),
195
+ agentMicrosPerSitePerDay: times(standard.agentMicrosPerSitePerDay, factor),
196
+ agentMicrosPerSitePerMonth: times(standard.agentMicrosPerSitePerMonth, factor),
197
+ };
198
+ break;
199
+ }
200
+ case "unlimited":
201
+ limits = {
202
+ ...standard,
203
+ conversationsPerVisitorPerDay: null,
204
+ conversationsPerSitePerDay: UNLIMITED_SITE_FLOOD_BRAKES.conversationsPerSitePerDay,
205
+ turnsPerConversation: null,
206
+ agentMicrosPerVisitorPerDay: null,
207
+ agentMicrosPerVisitorPerMonth: null,
208
+ agentMicrosPerSitePerDay: null,
209
+ agentMicrosPerSitePerMonth: null,
210
+ requestsPerMinutePerVisitor: UNLIMITED_SITE_FLOOD_BRAKES.requestsPerMinutePerVisitor,
211
+ agentMicrosPerConversation: UNLIMITED_SITE_FLOOD_BRAKES.agentMicrosPerConversation,
212
+ };
213
+ break;
214
+ case "custom":
215
+ limits = standard;
216
+ break;
217
+ }
218
+ limits = { ...limits, ...overrides };
219
+ // Flood brakes hold under every profile.
220
+ return {
221
+ ...limits,
222
+ requestsPerMinutePerVisitor: braked(
223
+ limits.requestsPerMinutePerVisitor,
224
+ UNLIMITED_SITE_FLOOD_BRAKES.requestsPerMinutePerVisitor,
225
+ ),
226
+ conversationsPerSitePerDay: braked(
227
+ limits.conversationsPerSitePerDay,
228
+ UNLIMITED_SITE_FLOOD_BRAKES.conversationsPerSitePerDay,
229
+ ),
230
+ agentMicrosPerConversation: braked(
231
+ limits.agentMicrosPerConversation,
232
+ UNLIMITED_SITE_FLOOD_BRAKES.agentMicrosPerConversation,
233
+ ),
234
+ };
235
+ }
236
+
237
+ /** The profile in force: the Site's own, else the workspace default, else standard. */
238
+ export function sourceSiteLimitProfile(
239
+ siteProfile: StoredSiteLimitProfile | null,
240
+ workspaceProfile: StoredSiteLimitProfile | null,
241
+ ): SiteLimitProfile {
242
+ const profile = siteProfile ?? workspaceProfile ?? { kind: "standard", overrides: null };
243
+ return {
244
+ kind: normalizedSiteLimitProfileKind(profile.kind),
245
+ overrides:
246
+ profile.kind === "custom" || profile.overrides?.__siteLimitsVersion === 2
247
+ ? siteLimitOverrides(profile.overrides)
248
+ : null,
249
+ };
250
+ }
251
+
252
+ /**
253
+ * The Site's limits (for people outside the workspace) under the profile in
254
+ * force, deployment switches applied. Viewer-specific limits: siteViewerLimits.
255
+ */
256
+ export function effectiveSiteLimits(
257
+ settings: SiteLimitSettings,
258
+ siteProfile: StoredSiteLimitProfile | null,
259
+ workspaceProfile: StoredSiteLimitProfile | null,
260
+ ): SiteLimitsValue {
261
+ const limits = siteLimitsForProfile(
262
+ settings,
263
+ siteProfile ?? workspaceProfile ?? { kind: "standard", overrides: null },
264
+ );
265
+ return {
266
+ ...limits,
267
+ guestAgentsEnabled:
268
+ limits.agentsEnabled && limits.guestAgentsEnabled && settings.sitesPublicAgentsEnabled,
269
+ };
270
+ }
271
+
272
+ export type SiteViewerLimitKind = "member" | "invited" | "user" | "guest";
273
+
274
+ /**
275
+ * The limits that govern one viewer:
276
+ * - members: no Site limits at all (agents on, nothing capped), only the
277
+ * request flood brake;
278
+ * - signed-in people outside the workspace: the Site limit and the optional
279
+ * per-person limit, with the flood brakes as their only guards;
280
+ * - anonymous guests: all of the Site's limits, bot guards included.
281
+ */
282
+ export function siteViewerLimits(
283
+ limits: SiteLimitsValue,
284
+ viewerKind: SiteViewerLimitKind,
285
+ ): SiteLimitsValue {
286
+ if (viewerKind === "member")
287
+ return {
288
+ ...limits,
289
+ agentsEnabled: true,
290
+ guestAgentsEnabled: true,
291
+ conversationsPerVisitorPerDay: null,
292
+ conversationsPerSitePerDay: null,
293
+ turnsPerConversation: null,
294
+ agentMicrosPerConversation: null,
295
+ agentMicrosPerVisitorPerDay: null,
296
+ agentMicrosPerVisitorPerMonth: null,
297
+ agentMicrosPerSitePerDay: null,
298
+ agentMicrosPerSitePerMonth: null,
299
+ };
300
+ if (viewerKind === "guest") return limits;
301
+ return {
302
+ ...limits,
303
+ conversationsPerVisitorPerDay: null,
304
+ turnsPerConversation: null,
305
+ conversationsPerSitePerDay: UNLIMITED_SITE_FLOOD_BRAKES.conversationsPerSitePerDay,
306
+ agentMicrosPerConversation: UNLIMITED_SITE_FLOOD_BRAKES.agentMicrosPerConversation,
307
+ };
308
+ }
309
+
310
+ /** The stored form of a requested profile kind: `free` is stored as `standard`. */
311
+ export function storedSiteLimitProfileKind(
312
+ kind: SiteLimitProfileKind,
313
+ ): StoredSiteLimitProfile["kind"] {
314
+ return normalizedSiteLimitProfileKind(kind);
315
+ }
@@ -0,0 +1,111 @@
1
+ import type { AccessGrant } from "@opengeni/contracts";
2
+ import { hasPermission, type ApiRouteDeps, type SiteSessionOrigin } from "@opengeni/core";
3
+ import {
4
+ getPublishedSiteVersion,
5
+ getWorkspaceGrant,
6
+ subjectHasLiveWorkspaceAuthorityInScope,
7
+ withWorkspaceSubjectRls,
8
+ } from "@opengeni/db";
9
+ import { HTTPException } from "hono/http-exception";
10
+ import type { WorkspaceSiteVersionResolver } from "../workspace-tool-gateway";
11
+ import type { SiteGatewayFields } from "./gateway-signature";
12
+ import {
13
+ requireServedSiteRuntimeHost,
14
+ resolveSiteRuntimeViewer,
15
+ siteNotAvailableForViewer,
16
+ } from "./runtime";
17
+
18
+ /** A Site cookie is NOT a console session or a general access authorization. */
19
+ export type PublishedSiteToolAuthorization = {
20
+ readonly kind: "published_site_tools";
21
+ readonly grant: AccessGrant;
22
+ };
23
+
24
+ type Authority = {
25
+ requestedTools: Array<{ serverId: string; toolName: string }>;
26
+ origin: SiteSessionOrigin & { siteId: string; versionId: string };
27
+ reauthorize: () => Promise<void>;
28
+ readVersion: WorkspaceSiteVersionResolver;
29
+ };
30
+ const authorities = new WeakMap<PublishedSiteToolAuthorization, Authority>();
31
+
32
+ export function isPublishedSiteToolAuthorization(
33
+ value: object,
34
+ ): value is PublishedSiteToolAuthorization {
35
+ return authorities.has(value as PublishedSiteToolAuthorization);
36
+ }
37
+
38
+ export function publishedSiteToolAuthority(value: PublishedSiteToolAuthorization): Authority {
39
+ const authority = authorities.get(value);
40
+ if (!authority) throw new HTTPException(403, { message: "site_tool_not_authorized" });
41
+ return authority;
42
+ }
43
+
44
+ /**
45
+ * Called only after gateway signature verification. Authenticate the opaque
46
+ * Site cookie against this served host; never accept a subject or grant from
47
+ * the page. The resulting capability is usable only by the tool gateway.
48
+ */
49
+ export async function authorizePublishedSiteTools(
50
+ deps: ApiRouteDeps,
51
+ domain: string,
52
+ fields: SiteGatewayFields,
53
+ ): Promise<PublishedSiteToolAuthorization> {
54
+ const denied = () =>
55
+ siteNotAvailableForViewer("workspace_tools", "Workspace tools require workspace membership");
56
+ const read = async () => {
57
+ const host = await requireServedSiteRuntimeHost(deps, domain, fields.host);
58
+ const viewer = await resolveSiteRuntimeViewer(deps, host, fields);
59
+ if (viewer.kind !== "member" || !viewer.subjectId || !viewer.sessionId) throw denied();
60
+ const scope = { ...host.scope, subjectId: viewer.subjectId };
61
+ const grant = await withWorkspaceSubjectRls(
62
+ deps.db,
63
+ scope.workspaceId,
64
+ scope.subjectId,
65
+ async (tx) => {
66
+ // Membership is necessary but not sufficient while its organization is suspended.
67
+ if (!(await subjectHasLiveWorkspaceAuthorityInScope(tx, scope))) throw denied();
68
+ return await getWorkspaceGrant(tx, scope.subjectId, scope.workspaceId, {
69
+ principalKind: "human_session",
70
+ });
71
+ },
72
+ );
73
+ if (!grant || !hasPermission(grant.permissions, "workspace:read")) throw denied();
74
+ return { host, viewer, grant };
75
+ };
76
+ const initial = await read();
77
+ const { host, grant } = initial;
78
+ const version = await getPublishedSiteVersion(deps.db, host.scope, host.site.id, host.versionId);
79
+ if (!version) throw new HTTPException(403, { message: "site_tool_not_authorized" });
80
+ const reauthorize = async () => {
81
+ const live = await read();
82
+ if (
83
+ live.host.site.id !== host.site.id ||
84
+ live.host.versionId !== version.id ||
85
+ live.grant.accountId !== grant.accountId ||
86
+ live.grant.workspaceId !== grant.workspaceId ||
87
+ live.grant.subjectId !== grant.subjectId ||
88
+ live.viewer.sessionId !== initial.viewer.sessionId ||
89
+ grant.permissions.some((permission) => !hasPermission(live.grant.permissions, permission))
90
+ )
91
+ throw new HTTPException(403, { message: "site_tool_access_changed" });
92
+ };
93
+ Object.freeze(grant.permissions);
94
+ Object.freeze(grant);
95
+ const authorization: PublishedSiteToolAuthorization = Object.freeze({
96
+ kind: "published_site_tools",
97
+ grant,
98
+ });
99
+ authorities.set(authorization, {
100
+ requestedTools: version.requestedTools,
101
+ origin: { siteId: host.site.id, versionId: version.id, title: host.site.title },
102
+ reauthorize,
103
+ readVersion: async (_db, caller, siteId, versionId) => {
104
+ if (caller !== grant || siteId !== host.site.id || versionId !== version.id)
105
+ throw new HTTPException(403, { message: "site_tool_not_authorized" });
106
+ await reauthorize();
107
+ return { status: "active", version };
108
+ },
109
+ });
110
+ return authorization;
111
+ }