@opengeni/api-router 0.30.1 → 1.0.0

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 (436) hide show
  1. package/dist/access-grant-rls.d.ts +3 -0
  2. package/dist/admission-trace.d.ts +8 -0
  3. package/dist/api-websocket.d.ts +18 -0
  4. package/dist/app.d.ts +50 -2
  5. package/dist/app.js +12 -1
  6. package/dist/artifact-catalog-cursor.d.ts +27 -0
  7. package/dist/auth/managed-auth-attempt-context.d.ts +10 -0
  8. package/dist/auth/managed-auth-rate-limits.d.ts +167 -0
  9. package/dist/auth/managed-auth-session-adapter.d.ts +6 -0
  10. package/dist/auth/managed-auth.d.ts +102 -3
  11. package/dist/auth/managed-email.d.ts +29 -0
  12. package/dist/auth/managed-sign-in-notifications.d.ts +4 -0
  13. package/dist/auth/new-signups-gate.d.ts +23 -0
  14. package/dist/auth/organization-user-setup.d.ts +80 -0
  15. package/dist/auth/signup-funnel-metrics.d.ts +44 -0
  16. package/dist/browser-controller-authority.d.ts +1 -61
  17. package/dist/browser-ephemeral.d.ts +5 -0
  18. package/dist/browser-state-authority.d.ts +1 -27
  19. package/dist/chunk-6TZ5LG3O.js +123948 -0
  20. package/dist/chunk-6TZ5LG3O.js.map +1 -0
  21. package/dist/chunk-OGQDXVXY.js +18 -0
  22. package/dist/chunk-OGQDXVXY.js.map +1 -0
  23. package/dist/claude-subscription-account-conflicts.d.ts +1 -0
  24. package/dist/claude-subscription-account-usage.d.ts +39 -0
  25. package/dist/claude-subscription-oauth.d.ts +25 -0
  26. package/dist/claude-subscription-profile.d.ts +9 -0
  27. package/dist/claude-subscription-usage.d.ts +44 -0
  28. package/dist/claude-workspace-connection.d.ts +15 -0
  29. package/dist/codemode.d.ts +32 -1
  30. package/dist/company-brain-okf.d.ts +24 -0
  31. package/dist/connected-machine-computer-access.d.ts +11 -0
  32. package/dist/connection-ownership.d.ts +54 -0
  33. package/dist/controller-data-plane.d.ts +32 -0
  34. package/dist/editable-artifact-office-import.d.ts +7 -4
  35. package/dist/editable-artifact-source-session.d.ts +3 -0
  36. package/dist/editable-artifact-websocket.d.ts +10 -18
  37. package/dist/editable-artifact-workspace-files.d.ts +1 -1
  38. package/dist/fatal-process-boundary.d.ts +25 -0
  39. package/dist/github-access.d.ts +31 -2
  40. package/dist/http/acting-person.d.ts +24 -0
  41. package/dist/http/api-contract-compat.d.ts +19 -0
  42. package/dist/http/api-error.d.ts +27 -1
  43. package/dist/http/cors.d.ts +17 -0
  44. package/dist/http/deprecation.d.ts +42 -0
  45. package/dist/http/interaction-control-error.d.ts +13 -0
  46. package/dist/http/keyed-admission.d.ts +12 -0
  47. package/dist/http/local-browser-boundary.d.ts +72 -0
  48. package/dist/http/metrics-listener.d.ts +22 -0
  49. package/dist/http/path-identifier.d.ts +17 -0
  50. package/dist/http/registered-route-label.d.ts +16 -0
  51. package/dist/http/request-body.d.ts +27 -0
  52. package/dist/http/request-source.d.ts +52 -0
  53. package/dist/http/sse.d.ts +17 -6
  54. package/dist/http/unmatched-route.d.ts +18 -0
  55. package/dist/http/user-content.d.ts +36 -0
  56. package/dist/http/websocket-upgrade-dispatch.d.ts +18 -0
  57. package/dist/index.d.ts +10 -3
  58. package/dist/index.js +1129 -166
  59. package/dist/index.js.map +1 -1
  60. package/dist/integration-endpoint-test.d.ts +20 -0
  61. package/dist/integrations/api-integrations.d.ts +2 -2
  62. package/dist/integrations/atlassian.d.ts +29 -3
  63. package/dist/integrations/connect-authority.d.ts +1 -0
  64. package/dist/integrations/connect-callback-return.d.ts +6 -0
  65. package/dist/integrations/fiken.d.ts +16 -2
  66. package/dist/integrations/github-app-connect.d.ts +47 -0
  67. package/dist/integrations/github-installation-proof.d.ts +3 -0
  68. package/dist/integrations/github-lens-connect.d.ts +116 -0
  69. package/dist/integrations/github-skill-source.d.ts +1 -5
  70. package/dist/integrations/google-drive.d.ts +25 -0
  71. package/dist/integrations/integration-commit-authority.d.ts +13 -0
  72. package/dist/integrations/marketplace-plugin.d.ts +2691 -0
  73. package/dist/integrations/oauth-client.d.ts +178 -18
  74. package/dist/integrations/oauth-profiles.d.ts +222 -0
  75. package/dist/integrations/oauth-return-path.d.ts +1 -0
  76. package/dist/integrations/personal-github-repositories.d.ts +84 -0
  77. package/dist/integrations/personal-github.d.ts +42 -0
  78. package/dist/integrations/pr-review-provider.d.ts +22 -0
  79. package/dist/integrations/provider-oauth.d.ts +19 -1
  80. package/dist/integrations/slack-app-home.d.ts +24 -0
  81. package/dist/integrations/slack-bot.d.ts +367 -12
  82. package/dist/integrations/slack-file-upload-flow.d.ts +62 -0
  83. package/dist/integrations/slack-install.d.ts +20 -0
  84. package/dist/integrations/slack-interactions.d.ts +113 -10
  85. package/dist/integrations/slack-mrkdwn.d.ts +41 -0
  86. package/dist/integrations/slack-routing.d.ts +120 -0
  87. package/dist/integrations/slack-session-defaults.d.ts +58 -0
  88. package/dist/integrations/slack-task-file-upload.d.ts +36 -0
  89. package/dist/integrations/social-oauth.d.ts +7 -0
  90. package/dist/interaction-agent-access.d.ts +15 -0
  91. package/dist/interaction-frame-proxy.d.ts +68 -0
  92. package/dist/interaction-metrics.d.ts +2 -0
  93. package/dist/mcp/action-catalog-types.d.ts +9 -0
  94. package/dist/mcp/action-catalog.gen.d.ts +2 -0
  95. package/dist/mcp/capability-account-readiness.d.ts +7 -0
  96. package/dist/mcp/child-read-evidence.d.ts +9 -0
  97. package/dist/mcp/command-read.d.ts +24 -0
  98. package/dist/mcp/company-profile-agent-admin.d.ts +44 -0
  99. package/dist/mcp/contract-input.d.ts +11 -0
  100. package/dist/mcp/documents.d.ts +7 -5
  101. package/dist/mcp/files.d.ts +2 -2
  102. package/dist/mcp/first-party-tool-permissions.d.ts +650 -0
  103. package/dist/mcp/knowledge-entries.d.ts +5 -0
  104. package/dist/mcp/orchestration-failure-diagnostic.d.ts +43 -0
  105. package/dist/mcp/receipts.d.ts +9 -0
  106. package/dist/mcp/request-abort.d.ts +19 -0
  107. package/dist/mcp/scheduled-task-input.d.ts +1189 -0
  108. package/dist/mcp/scheduled-task-view.d.ts +22 -4
  109. package/dist/mcp/server.d.ts +255 -3
  110. package/dist/mcp/session-event-view.d.ts +94 -0
  111. package/dist/mcp/session-view.d.ts +66 -2
  112. package/dist/mcp/session-wait.d.ts +174 -0
  113. package/dist/mcp-oauth.d.ts +52 -0
  114. package/dist/model-catalog.d.ts +11 -31
  115. package/dist/observability.d.ts +3 -1
  116. package/dist/organization-mcp.d.ts +52 -0
  117. package/dist/organization-recovery-notifications.d.ts +41 -0
  118. package/dist/routes/analytics-consent.d.ts +26 -0
  119. package/dist/routes/api-integrations.d.ts +25 -0
  120. package/dist/routes/api-keys.d.ts +17 -0
  121. package/dist/routes/artifact-catalog.d.ts +6 -0
  122. package/dist/routes/automations.d.ts +19 -0
  123. package/dist/routes/billing.d.ts +49 -0
  124. package/dist/routes/browser-sessions.d.ts +71 -3
  125. package/dist/routes/claude-subscription-accounts.d.ts +3 -0
  126. package/dist/routes/claude-subscription-oauth.d.ts +3 -0
  127. package/dist/routes/client-errors.d.ts +146 -0
  128. package/dist/routes/codex.d.ts +76 -2
  129. package/dist/routes/company-brain.d.ts +3 -0
  130. package/dist/routes/company-profile.d.ts +2 -1
  131. package/dist/routes/computer-sessions.d.ts +14 -0
  132. package/dist/routes/connect.d.ts +5 -0
  133. package/dist/routes/editable-artifacts.d.ts +2 -0
  134. package/dist/routes/external-identity-links.d.ts +6 -0
  135. package/dist/routes/feedback.d.ts +3 -0
  136. package/dist/routes/files.d.ts +4 -0
  137. package/dist/routes/github-browser-pages.d.ts +12 -0
  138. package/dist/routes/github.d.ts +2 -0
  139. package/dist/routes/insights-response-cache.d.ts +10 -0
  140. package/dist/routes/insights-usage.d.ts +12 -0
  141. package/dist/routes/insights.d.ts +30 -1
  142. package/dist/routes/knowledge.d.ts +3 -0
  143. package/dist/routes/managed-auth-session-sets.d.ts +26 -0
  144. package/dist/routes/managed-onboarding.d.ts +29 -0
  145. package/dist/routes/managed-sign-in-methods.d.ts +6 -0
  146. package/dist/routes/model-connection-access.d.ts +3 -0
  147. package/dist/routes/organization-integration-policy.d.ts +3 -0
  148. package/dist/routes/organization-integrations.d.ts +6 -0
  149. package/dist/routes/organization-mcp-connections.d.ts +3 -0
  150. package/dist/routes/organization-model-providers.d.ts +3 -0
  151. package/dist/routes/organization-recovery.d.ts +19 -0
  152. package/dist/routes/organization-service-accounts.d.ts +3 -0
  153. package/dist/routes/organization-sessions.d.ts +26 -0
  154. package/dist/routes/personal-github-git-broker.d.ts +29 -0
  155. package/dist/routes/personal-github.d.ts +3 -0
  156. package/dist/routes/pr-review-github.d.ts +3 -0
  157. package/dist/routes/pr-review.d.ts +3 -0
  158. package/dist/routes/session-artifact-associations.d.ts +4 -0
  159. package/dist/routes/session-history-imports.d.ts +9 -0
  160. package/dist/routes/sessions.d.ts +44 -6
  161. package/dist/routes/skill-content.d.ts +4 -0
  162. package/dist/routes/skill-install-authority.d.ts +6 -0
  163. package/dist/routes/subscription-account-pools.d.ts +34 -0
  164. package/dist/routes/subscription-pool-access.d.ts +16 -0
  165. package/dist/routes/supergrok.d.ts +6 -1
  166. package/dist/routes/usage-allowances.d.ts +12 -0
  167. package/dist/routes/user-resource-authorities.d.ts +3 -0
  168. package/dist/routes/workspace-artifacts.d.ts +2 -1
  169. package/dist/routes/workspace-capture.d.ts +10 -2
  170. package/dist/routes/workspace-integrations.d.ts +35 -0
  171. package/dist/routes/workspace-learning.d.ts +3 -0
  172. package/dist/routes/workspace-model-providers.d.ts +4 -0
  173. package/dist/routes/workspaces.d.ts +29 -0
  174. package/dist/sandbox/auth-callout.d.ts +8 -0
  175. package/dist/sandbox/channel-a.d.ts +19 -1
  176. package/dist/sandbox/connection-authority.d.ts +3 -0
  177. package/dist/sandbox/enrollment.d.ts +9 -1
  178. package/dist/sandbox/machines.d.ts +5 -2
  179. package/dist/sandbox/metrics-ingestion.d.ts +28 -20
  180. package/dist/sandbox/rematerialize.d.ts +2 -0
  181. package/dist/sandbox/session-attach-variable-sets.d.ts +30 -0
  182. package/dist/sandbox/viewer.d.ts +26 -1
  183. package/dist/sandbox-file-artifacts.d.ts +50 -0
  184. package/dist/scheduled-task-deletion.d.ts +13 -0
  185. package/dist/session-create-observability.d.ts +5 -0
  186. package/dist/session-event-view-MPS2OZD3.js +292 -0
  187. package/dist/session-event-view-MPS2OZD3.js.map +1 -0
  188. package/dist/site-session-origin.d.ts +13 -0
  189. package/dist/site-uploads.d.ts +41 -0
  190. package/dist/slack-reaction-files.d.ts +1 -1
  191. package/dist/temporal-schedule-cleanup.d.ts +1 -0
  192. package/dist/temporal-schedule-sync.d.ts +26 -0
  193. package/dist/transcription/providers/xai-subscription.d.ts +1 -0
  194. package/dist/transcription/service.d.ts +2 -1
  195. package/dist/work-discovery-observability.d.ts +33 -0
  196. package/dist/workspace-artifact-content.d.ts +28 -0
  197. package/dist/workspace-artifact-provenance.d.ts +7 -0
  198. package/dist/workspace-delete-observability.d.ts +10 -0
  199. package/dist/workspace-deletion.d.ts +6 -0
  200. package/dist/workspace-state-projection.d.ts +3 -5
  201. package/dist/workspace-tool-gateway-observability.d.ts +17 -0
  202. package/dist/workspace-tool-gateway.d.ts +123 -0
  203. package/dist/workspace-webhook-dispatch.d.ts +26 -0
  204. package/package.json +23 -19
  205. package/src/access-grant-rls.ts +75 -0
  206. package/src/admission-trace.ts +14 -0
  207. package/src/api-websocket.ts +23 -0
  208. package/src/app.ts +1974 -256
  209. package/src/artifact-catalog-cursor.ts +60 -0
  210. package/src/auth/managed-auth-attempt-context.ts +70 -0
  211. package/src/auth/managed-auth-rate-limits.ts +252 -0
  212. package/src/auth/managed-auth-session-adapter.ts +222 -0
  213. package/src/auth/managed-auth.ts +536 -60
  214. package/src/auth/managed-email.ts +174 -0
  215. package/src/auth/managed-sign-in-notifications.ts +81 -0
  216. package/src/auth/new-signups-gate.ts +49 -0
  217. package/src/auth/organization-user-setup.ts +307 -0
  218. package/src/auth/signup-funnel-metrics.ts +164 -0
  219. package/src/browser-controller-authority.ts +1 -186
  220. package/src/browser-ephemeral.ts +39 -0
  221. package/src/browser-state-authority.ts +1 -236
  222. package/src/claude-subscription-account-conflicts.ts +12 -0
  223. package/src/claude-subscription-account-usage.ts +48 -0
  224. package/src/claude-subscription-oauth.ts +362 -0
  225. package/src/claude-subscription-profile.ts +73 -0
  226. package/src/claude-subscription-usage.ts +97 -0
  227. package/src/claude-workspace-connection.ts +82 -0
  228. package/src/codemode.ts +194 -30
  229. package/src/codex-realtime.ts +8 -2
  230. package/src/company-brain-okf.ts +340 -0
  231. package/src/connected-machine-computer-access.ts +33 -0
  232. package/src/connection-ownership.ts +199 -0
  233. package/src/controller-data-plane.ts +81 -0
  234. package/src/editable-artifact-native-kernel.ts +26 -15
  235. package/src/editable-artifact-office-import.ts +77 -9
  236. package/src/editable-artifact-production.ts +23 -7
  237. package/src/editable-artifact-source-session.ts +123 -0
  238. package/src/editable-artifact-websocket.ts +27 -21
  239. package/src/editable-artifact-workspace-files.ts +31 -6
  240. package/src/fatal-process-boundary.ts +246 -0
  241. package/src/gateway-realtime.ts +1 -1
  242. package/src/github-access.ts +147 -5
  243. package/src/http/acting-person.ts +71 -0
  244. package/src/http/api-contract-compat.ts +49 -0
  245. package/src/http/api-error.ts +115 -1
  246. package/src/http/auth.ts +48 -0
  247. package/src/http/cors.ts +67 -0
  248. package/src/http/deprecation.ts +118 -0
  249. package/src/http/interaction-control-error.ts +164 -0
  250. package/src/http/keyed-admission.ts +29 -0
  251. package/src/http/local-browser-boundary.ts +343 -0
  252. package/src/http/metrics-listener.ts +57 -0
  253. package/src/http/path-identifier.ts +54 -0
  254. package/src/http/registered-route-label.ts +34 -0
  255. package/src/http/request-body.ts +127 -0
  256. package/src/http/request-source.ts +178 -0
  257. package/src/http/sse.ts +486 -132
  258. package/src/http/unmatched-route.ts +60 -0
  259. package/src/http/user-content.ts +158 -0
  260. package/src/http/websocket-upgrade-dispatch.ts +29 -0
  261. package/src/index.ts +157 -52
  262. package/src/integration-endpoint-test.ts +291 -0
  263. package/src/integrations/api-integrations.ts +98 -11
  264. package/src/integrations/atlassian.ts +474 -136
  265. package/src/integrations/connect-authority.ts +2 -0
  266. package/src/integrations/connect-callback-return.ts +86 -0
  267. package/src/integrations/fiken.ts +354 -64
  268. package/src/integrations/github-app-connect.ts +435 -0
  269. package/src/integrations/github-installation-proof.ts +60 -0
  270. package/src/integrations/github-lens-connect.ts +76 -0
  271. package/src/integrations/github-skill-source.ts +2 -142
  272. package/src/integrations/google-drive.ts +820 -222
  273. package/src/integrations/integration-commit-authority.ts +69 -0
  274. package/src/integrations/marketplace-plugin.ts +48 -0
  275. package/src/integrations/oauth-client.ts +1356 -459
  276. package/src/integrations/oauth-profiles.ts +537 -0
  277. package/src/integrations/oauth-return-path.ts +18 -0
  278. package/src/integrations/personal-github-repositories.ts +674 -0
  279. package/src/integrations/personal-github.ts +825 -0
  280. package/src/integrations/pr-review-provider.ts +246 -0
  281. package/src/integrations/provider-oauth.ts +250 -22
  282. package/src/integrations/slack-app-home.ts +300 -0
  283. package/src/integrations/slack-bot.ts +963 -239
  284. package/src/integrations/slack-file-upload-flow.ts +147 -0
  285. package/src/integrations/slack-install.ts +83 -0
  286. package/src/integrations/slack-interactions.ts +3170 -474
  287. package/src/integrations/slack-mrkdwn.ts +193 -0
  288. package/src/integrations/slack-routing.ts +337 -0
  289. package/src/integrations/slack-session-defaults.ts +224 -0
  290. package/src/integrations/slack-task-file-upload.ts +323 -0
  291. package/src/integrations/social-oauth.ts +213 -15
  292. package/src/interaction-agent-access.ts +48 -0
  293. package/src/interaction-frame-proxy.ts +409 -0
  294. package/src/interaction-metrics.ts +30 -0
  295. package/src/mcp/action-catalog-types.ts +9 -0
  296. package/src/mcp/action-catalog.gen.ts +6696 -0
  297. package/src/mcp/capability-account-readiness.ts +17 -0
  298. package/src/mcp/child-read-evidence.ts +19 -0
  299. package/src/mcp/command-read.ts +109 -0
  300. package/src/mcp/company-profile-agent-admin.ts +198 -0
  301. package/src/mcp/contract-input.ts +141 -0
  302. package/src/mcp/documents.ts +65 -377
  303. package/src/mcp/editable-artifacts.ts +12 -6
  304. package/src/mcp/files.ts +80 -38
  305. package/src/mcp/first-party-tool-permissions.ts +305 -0
  306. package/src/mcp/knowledge-entries.ts +322 -0
  307. package/src/mcp/orchestration-failure-diagnostic.ts +43 -0
  308. package/src/mcp/receipts.ts +34 -0
  309. package/src/mcp/request-abort.ts +44 -0
  310. package/src/mcp/scheduled-task-input.ts +76 -0
  311. package/src/mcp/scheduled-task-view.ts +44 -3
  312. package/src/mcp/server.ts +3030 -1267
  313. package/src/mcp/session-event-view.ts +383 -0
  314. package/src/mcp/session-view.ts +84 -3
  315. package/src/mcp/session-wait.ts +665 -0
  316. package/src/mcp-oauth.ts +1123 -0
  317. package/src/model-catalog.ts +91 -333
  318. package/src/observability.ts +15 -1
  319. package/src/organization-mcp.ts +397 -0
  320. package/src/organization-recovery-notifications.ts +103 -0
  321. package/src/routes/analytics-consent.ts +123 -0
  322. package/src/routes/api-integrations.ts +364 -74
  323. package/src/routes/api-keys.ts +336 -10
  324. package/src/routes/artifact-catalog.ts +279 -0
  325. package/src/routes/automations.ts +768 -0
  326. package/src/routes/billing.ts +461 -46
  327. package/src/routes/browser-sessions.ts +839 -131
  328. package/src/routes/canonical-human-identities.ts +90 -14
  329. package/src/routes/capabilities.ts +107 -6
  330. package/src/routes/channels.ts +20 -3
  331. package/src/routes/claude-subscription-accounts.ts +334 -0
  332. package/src/routes/claude-subscription-oauth.ts +142 -0
  333. package/src/routes/client-errors.ts +362 -0
  334. package/src/routes/codex.ts +833 -116
  335. package/src/routes/company-brain.ts +322 -0
  336. package/src/routes/company-profile.ts +65 -1
  337. package/src/routes/computer-sessions.ts +557 -106
  338. package/src/routes/connect.ts +1938 -0
  339. package/src/routes/connections.ts +1040 -349
  340. package/src/routes/documents.ts +488 -287
  341. package/src/routes/editable-artifacts.ts +79 -9
  342. package/src/routes/enrollments.ts +135 -39
  343. package/src/routes/environments.ts +154 -58
  344. package/src/routes/external-identity-links.ts +201 -0
  345. package/src/routes/feedback.ts +113 -0
  346. package/src/routes/files.ts +337 -39
  347. package/src/routes/github-browser-pages.ts +162 -0
  348. package/src/routes/github.ts +446 -144
  349. package/src/routes/insights-response-cache.ts +83 -0
  350. package/src/routes/insights-usage.ts +345 -0
  351. package/src/routes/insights.ts +153 -19
  352. package/src/routes/install.ts +133 -38
  353. package/src/routes/integration-facets.ts +107 -33
  354. package/src/routes/interaction-resources.ts +30 -3
  355. package/src/routes/knowledge.ts +488 -0
  356. package/src/routes/machines.ts +313 -15
  357. package/src/routes/managed-auth-session-sets.ts +1218 -0
  358. package/src/routes/managed-onboarding.ts +337 -0
  359. package/src/routes/managed-sign-in-methods.ts +433 -0
  360. package/src/routes/memory-slack-publications.ts +3 -2
  361. package/src/routes/model-connection-access.ts +208 -0
  362. package/src/routes/organization-integration-policy.ts +116 -0
  363. package/src/routes/organization-integrations.ts +326 -0
  364. package/src/routes/organization-mcp-connections.ts +178 -0
  365. package/src/routes/organization-memberships.ts +1019 -27
  366. package/src/routes/organization-model-providers.ts +293 -0
  367. package/src/routes/organization-recovery.ts +325 -0
  368. package/src/routes/organization-service-accounts.ts +128 -0
  369. package/src/routes/organization-sessions.ts +350 -0
  370. package/src/routes/personal-github-git-broker.ts +785 -0
  371. package/src/routes/personal-github.ts +370 -0
  372. package/src/routes/plugins.ts +251 -22
  373. package/src/routes/pr-review-github.ts +881 -0
  374. package/src/routes/pr-review.ts +622 -0
  375. package/src/routes/preference-registry.ts +12 -93
  376. package/src/routes/rigs.ts +167 -50
  377. package/src/routes/scheduled-tasks.ts +346 -41
  378. package/src/routes/session-artifact-associations.ts +87 -0
  379. package/src/routes/session-history-imports.ts +280 -0
  380. package/src/routes/sessions.ts +2306 -264
  381. package/src/routes/skill-content.ts +297 -0
  382. package/src/routes/skill-install-authority.ts +64 -0
  383. package/src/routes/skills.ts +62 -9
  384. package/src/routes/social.ts +46 -18
  385. package/src/routes/subscription-account-pools.ts +436 -0
  386. package/src/routes/subscription-pool-access.ts +126 -0
  387. package/src/routes/supergrok.ts +219 -303
  388. package/src/routes/transcription-recordings.ts +38 -3
  389. package/src/routes/transcriptions.ts +4 -0
  390. package/src/routes/usage-allowances.ts +378 -0
  391. package/src/routes/user-resource-authorities.ts +138 -0
  392. package/src/routes/video-generation.ts +14 -10
  393. package/src/routes/workspace-artifacts.ts +275 -69
  394. package/src/routes/workspace-capture.ts +21 -0
  395. package/src/routes/workspace-integrations.ts +576 -0
  396. package/src/routes/workspace-learning.ts +159 -0
  397. package/src/routes/workspace-model-providers.ts +148 -0
  398. package/src/routes/workspace-state.ts +38 -25
  399. package/src/routes/workspaces.ts +1004 -127
  400. package/src/sandbox/auth-callout.ts +96 -19
  401. package/src/sandbox/channel-a.ts +323 -24
  402. package/src/sandbox/connection-authority.ts +3 -0
  403. package/src/sandbox/enrollment.ts +81 -6
  404. package/src/sandbox/machines.ts +218 -76
  405. package/src/sandbox/metrics-ingestion.ts +411 -62
  406. package/src/sandbox/rematerialize.ts +121 -19
  407. package/src/sandbox/session-attach-variable-sets.ts +131 -0
  408. package/src/sandbox/viewer.ts +280 -25
  409. package/src/sandbox-file-artifacts.ts +413 -0
  410. package/src/scheduled-task-deletion.ts +138 -0
  411. package/src/session-create-observability.ts +46 -0
  412. package/src/session-realtime-context.ts +6 -3
  413. package/src/site-session-origin.ts +48 -0
  414. package/src/site-uploads.ts +224 -0
  415. package/src/slack-reaction-files.ts +16 -5
  416. package/src/temporal-schedule-cleanup.ts +13 -0
  417. package/src/temporal-schedule-sync.ts +74 -0
  418. package/src/transcription/providers/codex-subscription.ts +2 -0
  419. package/src/transcription/providers/openai.ts +1 -0
  420. package/src/transcription/providers/xai-subscription.ts +49 -3
  421. package/src/transcription/segmenter.ts +8 -2
  422. package/src/transcription/service.ts +43 -6
  423. package/src/work-discovery-observability.ts +121 -0
  424. package/src/workspace-artifact-content.ts +144 -0
  425. package/src/workspace-artifact-provenance.ts +104 -0
  426. package/src/workspace-delete-observability.ts +75 -0
  427. package/src/workspace-deletion.ts +73 -0
  428. package/src/workspace-state-projection.ts +18 -148
  429. package/src/workspace-tool-gateway-observability.ts +100 -0
  430. package/src/workspace-tool-gateway.ts +870 -0
  431. package/src/workspace-webhook-dispatch.ts +190 -0
  432. package/src/xai-subscription-auth.ts +9 -2
  433. package/dist/chunk-2PQMSRCB.js +0 -49759
  434. package/dist/chunk-2PQMSRCB.js.map +0 -1
  435. package/dist/routes/packs.d.ts +0 -3
  436. package/src/routes/packs.ts +0 -729
@@ -1,11 +1,40 @@
1
1
  import { type Settings } from "@opengeni/config";
2
- import { OAuthStartResponse, type ConnectionOwnership, type OAuthStartRequest } from "@opengeni/contracts";
2
+ import { OAuthStartResponse, type OAuthStartRequest } from "@opengeni/contracts";
3
+ import { ExternalActorContinuation } from "@opengeni/contracts/external-identities";
3
4
  import type { Observability } from "@opengeni/observability";
4
- import { type Database } from "@opengeni/db";
5
+ import { claimConnectOperation, finishConnectOperation, type Database } from "@opengeni/db";
6
+ import { type McpAuthorizationServerMetadata } from "@opengeni/network";
7
+ import { type OAuthProviderProfile } from "./oauth-profiles.js";
5
8
  export declare const oauthStateTtlMs: number;
6
- export declare const OFFICIAL_SLACK_MCP_URL: "https://mcp.slack.com/mcp";
7
- export declare const OFFICIAL_GMAIL_MCP_URL = "https://gmailmcp.googleapis.com/mcp/v1";
8
- export declare const OFFICIAL_GMAIL_MCP_SCOPES: readonly ["https://www.googleapis.com/auth/gmail.readonly", "https://www.googleapis.com/auth/gmail.compose", "https://www.googleapis.com/auth/gmail.modify"];
9
+ /**
10
+ * Workspace-free landing for a callback whose state names no trustworthy
11
+ * workspace. The web app resolves it to the viewer's current workspace
12
+ * integrations page and keeps the callback outcome parameters.
13
+ */
14
+ export declare const INTEGRATIONS_FALLBACK_PATH = "/integrations";
15
+ /** The web integrations page for one workspace (the Plugins surface). */
16
+ export declare function workspaceIntegrationsPath(workspaceId: string): string;
17
+ /**
18
+ * The integrations page for a workspace id read from untrusted input (a URL
19
+ * parameter or an unverified-age state), or null unless it is a workspace UUID.
20
+ * A link target only: it grants nothing.
21
+ */
22
+ export declare function workspaceIntegrationsPathForUntrusted(candidate: unknown): string | null;
23
+ /**
24
+ * Where a callback returns, and why, when its own signed state is unusable.
25
+ *
26
+ * A correctly signed state still names its workspace, even when it is too old
27
+ * or its flow rejected it, so the browser returns to that workspace's
28
+ * integrations page; an aged one is reported as expired. Anything unsigned,
29
+ * tampered, or signed with another secret returns to
30
+ * {@link INTEGRATIONS_FALLBACK_PATH}. Display routing only: nothing here
31
+ * authorizes, resumes, or replays the callback.
32
+ */
33
+ export declare function oauthStateFailureReturn(settings: Settings, rawState: string | undefined, nowMs?: number): {
34
+ returnPath: string;
35
+ reason: "state_expired" | "state_invalid";
36
+ };
37
+ export { OFFICIAL_GMAIL_MCP_SCOPES, OFFICIAL_GMAIL_MCP_URL, OFFICIAL_SLACK_MCP_URL, } from "./oauth-profiles.js";
9
38
  export { OAUTH_MAX_RESPONSE_BYTES } from "@opengeni/network";
10
39
  type OAuthClientDeps = {
11
40
  db: Database;
@@ -15,40 +44,168 @@ type OAuthClientDeps = {
15
44
  oauthCallbackDeadlineMs?: number | undefined;
16
45
  };
17
46
  export type OAuthStartContext = {
47
+ /** Server-selected dedicated adapter identity; never copied from request metadata. */
48
+ integrationKey?: "gmail" | "slack-personal";
49
+ connectAttemptId?: string;
50
+ externalContinuation?: ExternalActorContinuation;
18
51
  accountId: string;
19
52
  workspaceId: string;
20
53
  subjectId: string;
54
+ /**
55
+ * False for every principal that cannot own a personal Connection (API keys,
56
+ * the configured key, services, agent attempts). Resolved by the route from
57
+ * the live authenticated principal, never inferred here.
58
+ */
59
+ personalOwnershipAllowed: boolean;
21
60
  requestUrl: string;
22
61
  payload: OAuthStartRequest;
23
62
  };
24
63
  export type OAuthCallbackResult = {
25
64
  redirectTo: string;
65
+ exactReturn?: boolean;
26
66
  };
27
- type AuthorizationServerMetadata = {
28
- issuer: string;
29
- authorizationServer: string;
30
- authorizationEndpoint: string;
31
- tokenEndpoint: string;
32
- registrationEndpoint?: string;
33
- clientIdMetadataDocumentSupported: boolean;
34
- tokenEndpointAuthMethodsSupported: string[];
35
- codeChallengeMethodsSupported: string[];
36
- raw: Record<string, unknown>;
37
- };
67
+ type AuthorizationServerMetadata = McpAuthorizationServerMetadata;
38
68
  export declare const OAUTH_START_DEADLINE_MS = 15000;
39
69
  export declare const OAUTH_CALLBACK_DEADLINE_MS = 30000;
40
- export type OAuthStartStage = "connection_lookup" | "mcp_challenge" | "protected_resource_metadata" | "authorization_server_metadata" | "client_registration";
70
+ export type OAuthStartStage = "connection_lookup" | "mcp_challenge" | "protected_resource_metadata" | "authorization_server_metadata" | "client_registration" | "state_persist";
71
+ /** Policy is the outermost lock. Receipt replay still runs normal authorization,
72
+ * but the DB calls authorizeAcquisition only for uncommitted progress. Provider
73
+ * requests must happen after this transaction, never inside either wrapper. */
74
+ export declare function claimOAuthAcquisition(db: Database, scope: Parameters<typeof claimConnectOperation>[1], input: Parameters<typeof claimConnectOperation>[2], integrationKey: string | null, acquiring?: boolean): Promise<{
75
+ status: "claimed";
76
+ attempt: import("@opengeni/contracts/connect").ConnectAttempt;
77
+ } | {
78
+ status: "replayed";
79
+ attempt: import("@opengeni/contracts/connect").ConnectAttempt;
80
+ }>;
81
+ type IntegrationSourceSelection = Record<string, unknown> & {
82
+ id: string;
83
+ syncEnabled: boolean;
84
+ readPolicy: "allow" | "ask" | "block";
85
+ };
86
+ /** Compare server-bound selections, not provider classification. Removing a
87
+ * source, disabling sync, or narrowing its read permission acquires no authority.
88
+ * Generation/timestamp bookkeeping does not turn an unchanged save into setup. */
89
+ export declare function integrationSourceSelectionRequiresAcquisition(previous: readonly IntegrationSourceSelection[], requested: readonly IntegrationSourceSelection[]): boolean;
90
+ export declare function finishOAuthAcquisition(db: Database, scope: Parameters<typeof finishConnectOperation>[1], input: Parameters<typeof finishConnectOperation>[2], integrationKey: string | null): Promise<{
91
+ id: string;
92
+ workspaceId: string;
93
+ providerId: string;
94
+ ownership: "personal" | "workspace";
95
+ revision: number;
96
+ state: "account_selection" | "cancelled" | "complete" | "connected_but_incomplete" | "credential_input" | "expired" | "failed" | "installing" | "preview" | "provider_wait" | "ready" | "requires_user_action" | "resource_selection" | "uncertain";
97
+ credentialsCommitted: boolean;
98
+ integrationInstalled: boolean;
99
+ completionRequirement: "connection" | "integration" | "provider_setup";
100
+ nextAction: {
101
+ type: "authorize";
102
+ url: string;
103
+ } | {
104
+ type: "credentials";
105
+ fields: {
106
+ name: string;
107
+ label: string;
108
+ required: boolean;
109
+ secret: boolean;
110
+ options?: {
111
+ value: string;
112
+ label: string;
113
+ }[] | undefined;
114
+ }[];
115
+ } | {
116
+ type: "wait";
117
+ pollAfterMs: number;
118
+ userCode?: string | undefined;
119
+ verificationUrl?: string | undefined;
120
+ } | {
121
+ type: "select_account";
122
+ accounts: {
123
+ id: string;
124
+ providerId: string;
125
+ version?: number | undefined;
126
+ label: string;
127
+ ownership: "personal" | "workspace";
128
+ status: "auth_needed" | "connected" | "disabled";
129
+ }[];
130
+ } | {
131
+ type: "select_resources";
132
+ resources: {
133
+ id: string;
134
+ label: string;
135
+ kind: string;
136
+ }[];
137
+ cursor?: string | undefined;
138
+ } | {
139
+ type: "preview";
140
+ previewId: string;
141
+ contentHash: string;
142
+ operations: {
143
+ id: string;
144
+ label: string;
145
+ kind: string;
146
+ }[];
147
+ } | {
148
+ type: "none";
149
+ };
150
+ expiresAt: string;
151
+ account?: {
152
+ id: string;
153
+ providerId: string;
154
+ version?: number | undefined;
155
+ label: string;
156
+ ownership: "personal" | "workspace";
157
+ status: "auth_needed" | "connected" | "disabled";
158
+ } | undefined;
159
+ installationTarget?: {
160
+ instanceKey: string;
161
+ displayName: string;
162
+ expectedInstanceVersion?: number | undefined;
163
+ } | undefined;
164
+ source?: {
165
+ kind: "definition";
166
+ definitionId: string;
167
+ } | {
168
+ kind: "openapi";
169
+ url: string;
170
+ baseUrl?: string | undefined;
171
+ } | {
172
+ kind: "graphql";
173
+ endpoint: string;
174
+ name?: string | undefined;
175
+ } | {
176
+ kind: "auto";
177
+ url: string;
178
+ baseUrl?: string | undefined;
179
+ } | undefined;
180
+ error?: {
181
+ code: string;
182
+ message: string;
183
+ retryable: boolean;
184
+ } | undefined;
185
+ }>;
41
186
  export declare function startMcpOAuth(deps: OAuthClientDeps, context: OAuthStartContext): Promise<OAuthStartResponse>;
42
- export declare function assertOfficialGmailPersonalOwnership(mcpUrl: string, ownership: ConnectionOwnership): void;
187
+ export declare function isHostedSlackMcpTarget(providerDomain: string, mcpUrl: string): boolean;
43
188
  export declare function completeMcpOAuthCallback(deps: OAuthClientDeps, input: {
44
189
  code?: string | undefined;
45
190
  state?: string | undefined;
191
+ /** The provider's `error` parameter, for example `access_denied` on Cancel. */
192
+ error?: string | undefined;
46
193
  requestUrl: string;
47
194
  }): Promise<OAuthCallbackResult>;
48
195
  export declare function integrationBaseUrl(publicBaseUrl: string | undefined, requestUrl: string): string;
49
196
  export declare function requireIntegrationsStateSecret(settings: Settings): string;
197
+ /** The hosted-Slack profile's origin pins, kept exported for its tests. */
50
198
  export declare function assertSlackAuthorizationServer(as: AuthorizationServerMetadata): void;
199
+ /** The official-Gmail profile's origin pins, kept exported for its tests. */
51
200
  export declare function assertGoogleAuthorizationServer(as: AuthorizationServerMetadata): void;
201
+ /** Inspect without credentials, registration, or running tools. */
202
+ export declare function inspectMcpAuthentication(resource: string, settings: Settings): Promise<{
203
+ kind: "oauth2" | "none" | "unknown";
204
+ message?: string;
205
+ }>;
206
+ export declare function preferredOAuthSelfRegistration(as: Pick<AuthorizationServerMetadata, "clientIdMetadataDocumentSupported" | "registrationEndpoint">, clientSource: OAuthProviderProfile["clientSource"]): "cimd" | "dcr" | null;
207
+ /** Secret-free readiness for the exact registered client used by Gmail setup. */
208
+ export declare function gmailOAuthClientConfigured(settings: Settings): boolean;
52
209
  export declare function buildAuthorizationUrl(input: {
53
210
  endpoint: string;
54
211
  settings: Settings;
@@ -59,6 +216,8 @@ export declare function buildAuthorizationUrl(input: {
59
216
  verifier: string;
60
217
  scopes: string[];
61
218
  resourceParameterSupported: boolean;
219
+ /** Profile-declared extra authorize parameters, applied last. */
220
+ extraParams?: Readonly<Record<string, string>> | undefined;
62
221
  }): string;
63
222
  export type OAuthPublicErrorFields = {
64
223
  errorClass: "OAuthOperationError";
@@ -73,4 +232,5 @@ export declare function chooseMcpAuthorizeScopes(input: {
73
232
  requested: string[] | undefined;
74
233
  challenged: string[] | undefined;
75
234
  supported: string[];
235
+ authorizationServerScopesSupported?: string[];
76
236
  }): string[];
@@ -0,0 +1,222 @@
1
+ import { type ConnectionOwnership } from "@opengeni/contracts";
2
+ import type { Settings } from "@opengeni/config";
3
+ import { z } from "zod";
4
+ /**
5
+ * Provider OAuth quirks as data.
6
+ *
7
+ * Some providers do not support DCR or CIMD and need a pre-registered client
8
+ * with pinned metadata; some issue personal tokens only; some reject RFC 8707's
9
+ * `resource` parameter. Each used to be a hand-written branch set inside
10
+ * `oauth-client.ts`; every quirk is now a field on an `OAuthProviderProfile`.
11
+ * The flow reads exactly one resolved profile and contains no provider-name
12
+ * conditional.
13
+ *
14
+ * Profiles come from two layers:
15
+ *
16
+ * 1. Built-in profiles pin known authorization servers and protocol quirks.
17
+ * Ownership defaults guide setup; users may choose personal or workspace.
18
+ * Authorization-server pins never depend on catalog import state.
19
+ * 2. A validated `oauthProfile` object on a global catalog row (curated
20
+ * overlay -> importer -> `capability_catalog_items.metadata`). A catalog
21
+ * profile applies only when no built-in matches, and it can only narrow the
22
+ * default behavior, never loosen a built-in fence.
23
+ */
24
+ export declare const OFFICIAL_SLACK_MCP_URL: "https://mcp.slack.com/mcp";
25
+ export declare const OFFICIAL_GMAIL_MCP_URL = "https://gmailmcp.googleapis.com/mcp/v1";
26
+ export declare const OFFICIAL_GMAIL_MCP_SCOPES: readonly ["https://www.googleapis.com/auth/gmail.readonly", "https://www.googleapis.com/auth/gmail.compose", "https://www.googleapis.com/auth/gmail.modify"];
27
+ /** The slice of discovered authorization-server metadata the pins constrain. */
28
+ export type PinnableAuthorizationServer = {
29
+ issuer: string;
30
+ authorizationServer: string;
31
+ authorizationEndpoint: string;
32
+ tokenEndpoint: string;
33
+ };
34
+ export type AuthorizationServerPins = {
35
+ /** Origins `issuer` and `authorizationServer` must both belong to. */
36
+ issuerOrigins: readonly string[];
37
+ /** Origins the authorization endpoint must belong to. */
38
+ authorizationEndpointOrigins: readonly string[];
39
+ /** Origins the token endpoint must belong to. */
40
+ tokenEndpointOrigins: readonly string[];
41
+ /** Exact 422 message when a pin fails. */
42
+ message: string;
43
+ /** Skip enforcement in a local test environment (loopback fixtures). */
44
+ skipInLocalTest: boolean;
45
+ };
46
+ export type OAuthProviderProfile = {
47
+ /** Stable identity for guards, logs, and tests. */
48
+ key: string;
49
+ /** Built-in matching; catalog profiles match their own row's exact mcpUrl. */
50
+ match: {
51
+ mcpUrls?: readonly string[];
52
+ providerDomains?: readonly string[];
53
+ };
54
+ /**
55
+ * Canonical provider identity forced when the profile matches by URL, so a
56
+ * caller cannot relabel a pinned resource under another domain.
57
+ */
58
+ canonicalProviderDomain?: string;
59
+ /** Reject a caller-supplied manual OAuth client (deployment-managed only). */
60
+ rejectCallerOAuthClient?: {
61
+ message: string;
62
+ };
63
+ /** The payload's explicit providerDomain must canonicalize to this domain. */
64
+ requireProviderDomain?: {
65
+ domain: string;
66
+ message: string;
67
+ };
68
+ /** Outside a local test environment, the start URL must be exactly this. */
69
+ requireExactMcpUrl?: {
70
+ url: string;
71
+ message: string;
72
+ };
73
+ /** Deployment-managed client credentials must be configured (503 otherwise). */
74
+ requireDeploymentClient?: {
75
+ key: DeploymentManagedClientKey;
76
+ message: string;
77
+ };
78
+ /** Suggested ownership; explicit choices remain subject to requiredOwnership. */
79
+ defaultOwnership?: ConnectionOwnership;
80
+ /** Built-in-only ownership restriction, including old reconnect/callback state. */
81
+ requiredOwnership?: {
82
+ ownership: ConnectionOwnership;
83
+ message: string;
84
+ };
85
+ /** Bind reconnect/dedupe to the exact mcpUrl, not just the provider domain. */
86
+ exactMcpBinding: boolean;
87
+ /** How an existing connection is chosen for reconnect coalescing. */
88
+ connectionSelection: "canonical_personal" | "first_active";
89
+ /** Post-discovery authorization-server origin pins. */
90
+ authorizationServer?: AuthorizationServerPins;
91
+ /**
92
+ * Post-discovery identity check: the resolved providerDomain must equal this
93
+ * domain (the reserved-authorization-server guard shares its message).
94
+ */
95
+ postDiscoveryProviderDomain?: {
96
+ domain: string;
97
+ message: string;
98
+ };
99
+ /**
100
+ * Client registration preference. `dcr` or `cimd` forces that advertised
101
+ * self-registration mechanism after operator/deployment clients. Without an
102
+ * explicit preference, DCR wins when both mechanisms are advertised.
103
+ */
104
+ clientSource?: "deployment_managed" | "cimd" | "dcr";
105
+ /** Send RFC 8707 `resource` on authorize and token requests. */
106
+ sendResourceParameter: boolean;
107
+ /** Extra authorize-URL query parameters (e.g. offline-consent opts). */
108
+ extraAuthorizeParams?: Readonly<Record<string, string>>;
109
+ /** Exact scope override; the caller can never widen past it. */
110
+ requestedScopes?: readonly string[];
111
+ /** Reviewed local bridge grant normalization and token verification. Catalog profiles cannot supply code. */
112
+ normalizeGrantedScopes?: (scopes: readonly string[] | string) => string[];
113
+ reportedScopesRequired?: boolean;
114
+ /** Built-in durable API bridges may refuse a new grant without offline access. */
115
+ freshRefreshTokenRequired?: boolean;
116
+ /** The reviewed bridge exposes one tool contract, not a partial-scope variant. */
117
+ fullRequestedScopesRequired?: boolean;
118
+ /** Built-in web OAuth clients must use a configured secret and provider-supported authentication. */
119
+ confidentialClientRequired?: boolean;
120
+ /** Built-in API bridge discovery; catalog metadata cannot redirect this seam. */
121
+ providerOAuthDiscovery?: {
122
+ issuer: string;
123
+ metadataUrl: string;
124
+ };
125
+ localToolVerification?: {
126
+ url: string;
127
+ method?: "GET" | "POST";
128
+ /** An API bridge may require a verified account before accepting a grant. */
129
+ required?: boolean;
130
+ /** Distinguish a rejected OAuth grant from a temporary verification failure. */
131
+ isRejectedGrant?: (payload: Record<string, unknown>) => boolean;
132
+ validateIdentity: (payload: Record<string, unknown>) => Record<string, string>;
133
+ toolsForScopes: (scopes: readonly string[]) => Array<{
134
+ name: string;
135
+ description?: string;
136
+ }>;
137
+ };
138
+ };
139
+ export declare const DEFAULT_OAUTH_PROFILE: OAuthProviderProfile;
140
+ /** Exact built-in profile by its stable key; throws on an unknown key. */
141
+ export declare function builtInOAuthProfileByKey(key: string): OAuthProviderProfile;
142
+ export type DeploymentManagedClientKey = "slack";
143
+ /**
144
+ * Pre-registered deployment clients resolved from dedicated settings, keyed by
145
+ * the authorization-server origins they serve. Consulted before the operator
146
+ * clients JSON so a deployment-managed provider can never be shadowed.
147
+ */
148
+ export declare const DEPLOYMENT_MANAGED_CLIENTS: readonly {
149
+ key: DeploymentManagedClientKey;
150
+ issuerOrigins: readonly string[];
151
+ resolve: (settings: Settings) => {
152
+ clientId: string;
153
+ clientSecret: string;
154
+ tokenEndpointAuthMethod: "client_secret_post";
155
+ } | null;
156
+ }[];
157
+ export declare function deploymentManagedClientFor(settings: Settings, key: DeploymentManagedClientKey): ReturnType<(typeof DEPLOYMENT_MANAGED_CLIENTS)[number]["resolve"]>;
158
+ /** Built-in profile for a start target, or null when only the default applies. */
159
+ export declare function builtInOAuthProfileFor(input: {
160
+ mcpUrl: string;
161
+ providerDomain?: string | undefined;
162
+ }): OAuthProviderProfile | null;
163
+ /** Ownership an omitted request defaults to under a profile. */
164
+ export declare function defaultOwnershipFor(profile: OAuthProviderProfile): ConnectionOwnership;
165
+ /** Enforces a profile's authorization-server origin pins with its exact message. */
166
+ export declare function assertAuthorizationServerPins(as: PinnableAuthorizationServer, pins: Pick<AuthorizationServerPins, "issuerOrigins" | "authorizationEndpointOrigins" | "tokenEndpointOrigins" | "message">): void;
167
+ /**
168
+ * Reserved-authorization-server guard: a discovered identity claimed by one
169
+ * profile is rejected on every other flow with that guard's exact message.
170
+ */
171
+ export declare function assertAuthorizationServerNotReserved(as: PinnableAuthorizationServer, profile: OAuthProviderProfile): void;
172
+ /**
173
+ * Catalog-row profile: the declarative subset a curated row may carry. It can
174
+ * only narrow the default flow; the fields that grant authority (deployment
175
+ * client settings, reserved-server membership) are built-in-only by
176
+ * construction because the schema cannot express them.
177
+ */
178
+ /**
179
+ * Authorize-URL parameters owned by the OAuth client itself. A profile's
180
+ * `extraAuthorizeParams` may never name one: overriding `scope` or `resource`
181
+ * would widen the grant past the recorded contract, and the rest carry the
182
+ * PKCE/state security machinery. Enforced in this schema, in the curation
183
+ * parser, and defensively again in `buildAuthorizationUrl`.
184
+ */
185
+ export declare const RESERVED_AUTHORIZE_PARAMS: ReadonlySet<string>;
186
+ export declare const catalogOAuthProfileSchema: z.ZodObject<{
187
+ clientSource: z.ZodOptional<z.ZodEnum<{
188
+ cimd: "cimd";
189
+ dcr: "dcr";
190
+ deployment_managed: "deployment_managed";
191
+ }>>;
192
+ exactMcpUrl: z.ZodOptional<z.ZodString>;
193
+ pinnedIssuerOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
194
+ pinnedEndpointOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
195
+ sendResourceParameter: z.ZodOptional<z.ZodBoolean>;
196
+ defaultOwnership: z.ZodOptional<z.ZodEnum<{
197
+ personal: "personal";
198
+ workspace: "workspace";
199
+ }>>;
200
+ requestedScopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
201
+ extraAuthorizeParams: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
202
+ }, z.core.$strict>;
203
+ export type CatalogOAuthProfile = z.infer<typeof catalogOAuthProfileSchema>;
204
+ /**
205
+ * Canonical catalog lookup key for an MCP URL, mirroring the importer's
206
+ * `canonicalMcpUrl` (`scripts/catalog-curation.ts`): no fragment, lowercase
207
+ * host, default ports stripped, trailing slashes collapsed. Without this, a
208
+ * trailing-slash or uppercase-host variant of a profiled URL would miss the
209
+ * row and silently fall back to the default profile.
210
+ */
211
+ export declare function catalogMcpUrlKey(value: string): string;
212
+ /**
213
+ * Applies a validated catalog profile over the default profile for a row with
214
+ * no built-in. `deployment_managed` from catalog data resolves through the
215
+ * operator clients JSON (issuer-keyed) only; named settings-backed clients
216
+ * remain built-in-only.
217
+ *
218
+ * A present-but-invalid profile fails closed with a 422: the row's operator
219
+ * declared constraints, and silently degrading to the default profile would
220
+ * drop an origin pin on a JSON typo.
221
+ */
222
+ export declare function oauthProfileFromCatalog(mcpUrl: string, raw: unknown): OAuthProviderProfile;
@@ -0,0 +1 @@
1
+ export declare function safeReturnPath(value: string): string;
@@ -0,0 +1,84 @@
1
+ import { type PersonalGitHubRepository as PersonalGitHubRepositoryContract, type PersonalGitHubRepositorySelectionInput } from "@opengeni/contracts/personal-github";
2
+ import { type GitHubRepositoryBranchesResponse as GitHubRepositoryBranchesResponseContract, type ListGitHubRepositoryBranchesQuery } from "@opengeni/contracts/github-repository-contracts";
3
+ import type { ApiRouteDeps } from "@opengeni/core";
4
+ import { getConnectionMetadata, type PersonalGitHubRepositorySelectionState as DbPersonalGitHubRepositorySelectionState } from "@opengeni/db";
5
+ import { HTTPException } from "hono/http-exception";
6
+ export type PersonalGitHubRepositoryConnection = NonNullable<Awaited<ReturnType<typeof getConnectionMetadata>>>;
7
+ type PersonalGitHubRepositoryProviderOperation = "repositories_list" | "repository_branches_list" | "repository_verify";
8
+ type ExpectedPersonalGitHubRepositoryAuthority = {
9
+ selectionGeneration: number;
10
+ repositoryId: string;
11
+ fullName: string;
12
+ };
13
+ type PersonalGitHubProviderJsonOptions = {
14
+ operation: PersonalGitHubRepositoryProviderOperation;
15
+ expectedRepositoryAuthority?: ExpectedPersonalGitHubRepositoryAuthority;
16
+ responseLabel?: string;
17
+ responseMaxBytes?: number;
18
+ };
19
+ export type PersonalGitHubRepositoryBranchServices = {
20
+ requireConnection: typeof requirePersonalGitHubRepositoryConnection;
21
+ getSelectionState: (deps: ApiRouteDeps, input: {
22
+ accountId: string;
23
+ originWorkspaceId: string;
24
+ subjectId: string;
25
+ connectionId: string;
26
+ }) => Promise<DbPersonalGitHubRepositorySelectionState | null>;
27
+ providerJson: (input: {
28
+ deps: ApiRouteDeps;
29
+ connection: PersonalGitHubRepositoryConnection;
30
+ subjectId: string;
31
+ url: URL;
32
+ expectedConnectionAuthorityGeneration: number;
33
+ options: PersonalGitHubProviderJsonOptions;
34
+ }) => Promise<unknown>;
35
+ };
36
+ export type PersonalGitHubRepositoryProviderErrorCode = "connection_changed" | "connection_inactive" | "invalid_provider_response" | "provider_denied" | "provider_rate_limited" | "provider_unavailable" | "repository_archived" | "repository_not_found" | "repository_not_selected" | "repository_read_denied" | "repository_selection_changed" | "repository_write_denied";
37
+ export declare class PersonalGitHubRepositoryProviderError extends Error {
38
+ readonly code: PersonalGitHubRepositoryProviderErrorCode;
39
+ constructor(code: PersonalGitHubRepositoryProviderErrorCode);
40
+ }
41
+ export declare function requirePersonalGitHubRepositoryConnection(deps: ApiRouteDeps, input: {
42
+ accountId: string;
43
+ workspaceId: string;
44
+ subjectId: string;
45
+ connectionId: string;
46
+ }): Promise<PersonalGitHubRepositoryConnection>;
47
+ export declare function listLivePersonalGitHubRepositories(deps: ApiRouteDeps, input: {
48
+ workspaceId: string;
49
+ accountId: string;
50
+ subjectId: string;
51
+ connectionId: string;
52
+ expectedConnectionAuthorityGeneration: number;
53
+ page: number;
54
+ limit: number;
55
+ }): Promise<{
56
+ repositories: PersonalGitHubRepositoryContract[];
57
+ nextPage: number | null;
58
+ }>;
59
+ export declare function listLivePersonalGitHubRepositoryBranches(deps: ApiRouteDeps, input: {
60
+ workspaceId: string;
61
+ accountId: string;
62
+ subjectId: string;
63
+ connectionId: string;
64
+ repositoryId: string;
65
+ query: ListGitHubRepositoryBranchesQuery;
66
+ }, services?: PersonalGitHubRepositoryBranchServices): Promise<GitHubRepositoryBranchesResponseContract>;
67
+ /** Serial by design: one bounded provider request and one authority check at a time. */
68
+ export declare function verifyLivePersonalGitHubRepositories(deps: ApiRouteDeps, input: {
69
+ workspaceId: string;
70
+ accountId: string;
71
+ subjectId: string;
72
+ connectionId: string;
73
+ expectedConnectionAuthorityGeneration: number;
74
+ repositories: PersonalGitHubRepositorySelectionInput[];
75
+ }): Promise<Array<PersonalGitHubRepositoryContract & {
76
+ selectedAccess: "read" | "write";
77
+ }>>;
78
+ export declare function personalGitHubRepositoryProviderHttpError(error: PersonalGitHubRepositoryProviderError): HTTPException;
79
+ /** Keep provider integer lexemes exact before repository IDs become bigint-backed strings. */
80
+ export declare function parsePersonalGitHubProviderJson(value: string): unknown;
81
+ export declare function personalGitHubRepositoryCanRead(permissions: PersonalGitHubRepositoryContract["permissions"]): boolean;
82
+ export declare function personalGitHubRepositoryCanWrite(permissions: PersonalGitHubRepositoryContract["permissions"]): boolean;
83
+ export declare function parsePersonalGitHubRepository(value: unknown): PersonalGitHubRepositoryContract;
84
+ export {};
@@ -0,0 +1,42 @@
1
+ import { type Settings } from "@opengeni/config";
2
+ import { type PersonalGitHubDisconnectRequest } from "@opengeni/contracts/personal-github";
3
+ import { type AccessGrantAuthorization, type ApiRouteDeps } from "@opengeni/core";
4
+ export declare function personalGitHubClientMarker(clientId: string): string;
5
+ export declare function requirePersonalGitHubOAuthSettings(settings: Settings): {
6
+ clientId: string;
7
+ clientSecret: string;
8
+ callbackUrl: string;
9
+ oauthEnvironment: string;
10
+ oauthClientMarker: string;
11
+ };
12
+ export declare function listPersonalGitHubConnections(deps: ApiRouteDeps, input: {
13
+ workspaceId: string;
14
+ subjectId: string;
15
+ }): Promise<import("@opengeni/db").ConnectionMetadataWithVerification[]>;
16
+ export declare function disconnectPersonalGitHub(deps: ApiRouteDeps, input: {
17
+ workspaceId: string;
18
+ subjectId: string;
19
+ connectionId: string;
20
+ payload: PersonalGitHubDisconnectRequest;
21
+ }): Promise<import("@opengeni/db").ConnectionMetadataWithVerification | null>;
22
+ export declare function startPersonalGitHubOAuth(deps: ApiRouteDeps, input: {
23
+ access: AccessGrantAuthorization;
24
+ workspaceId: string;
25
+ connectionId?: string;
26
+ returnPath?: string;
27
+ connectAttemptId?: string;
28
+ }): Promise<{
29
+ authorizationUrl: string;
30
+ expiresAt: string;
31
+ }>;
32
+ export declare function completePersonalGitHubOAuthCallback(deps: ApiRouteDeps, input: {
33
+ code?: string;
34
+ state?: string;
35
+ error?: string;
36
+ requestUrl: string;
37
+ }): Promise<{
38
+ redirectTo: string;
39
+ exactReturn?: boolean;
40
+ }>;
41
+ export declare function personalGitHubReviewUrl(settings: Settings): string | null;
42
+ export declare const PERSONAL_GITHUB_CONNECTION_PRINCIPAL_MESSAGE: string;
@@ -0,0 +1,22 @@
1
+ import type { PrReviewProvider } from "@opengeni/contracts";
2
+ import { type FetchLike, type OutboundNetworkSettings } from "@opengeni/network";
3
+ export declare class PrReviewProviderRepositoryError extends Error {
4
+ readonly reason: "denied" | "identity_mismatch" | "unavailable";
5
+ constructor(reason: "denied" | "identity_mismatch" | "unavailable", message: string);
6
+ }
7
+ export type VerifiedPrReviewProviderRepository = {
8
+ repositoryUri: string;
9
+ repositoryFullName: string;
10
+ providerRepositoryId: string;
11
+ projectId: string;
12
+ };
13
+ export declare function verifyPrReviewProviderRepository(input: {
14
+ provider: Exclude<PrReviewProvider, "github">;
15
+ providerBaseUrl: string;
16
+ providerRepositoryId: string;
17
+ projectId?: string;
18
+ token: string;
19
+ username: string | null;
20
+ settings: OutboundNetworkSettings;
21
+ fetchImpl?: FetchLike;
22
+ }): Promise<VerifiedPrReviewProviderRepository>;
@@ -1,9 +1,20 @@
1
- import { OAuthStartResponse, type ApiIntegrationOAuthStartRequest } from "@opengeni/contracts";
1
+ import { type IntegrationDefinition } from "@opengeni/capabilities";
2
+ import { type Settings } from "@opengeni/config";
3
+ import { OAuthStartResponse, type ApiIntegrationOAuthStartRequest, type ConnectionOwnership } from "@opengeni/contracts";
2
4
  import { type ApiRouteDeps } from "@opengeni/core";
5
+ import { ExternalActorContinuation } from "@opengeni/contracts/external-identities";
3
6
  export declare function startApiIntegrationProviderOAuth(deps: ApiRouteDeps, input: {
4
7
  accountId: string;
5
8
  workspaceId: string;
6
9
  subjectId: string;
10
+ /**
11
+ * False for every principal that cannot own a personal Connection (API
12
+ * keys, the configured key, services, agent attempts). Resolved by the
13
+ * route from the live authenticated principal, never inferred here.
14
+ */
15
+ personalOwnershipAllowed: boolean;
16
+ externalContinuation?: ExternalActorContinuation;
17
+ connectAttemptId?: string;
7
18
  requestUrl: string;
8
19
  payload: ApiIntegrationOAuthStartRequest;
9
20
  }): Promise<OAuthStartResponse>;
@@ -14,4 +25,11 @@ export declare function completeApiIntegrationProviderOAuth(deps: ApiRouteDeps,
14
25
  requestUrl: string;
15
26
  }): Promise<{
16
27
  redirectTo: string;
28
+ exactReturn?: boolean;
17
29
  }>;
30
+ /** Configuration readiness only: consent and installation are still separate. */
31
+ export declare function curatedOAuthReadiness(settings: Settings, definition: IntegrationDefinition): {
32
+ configured: boolean;
33
+ ownership: ConnectionOwnership[];
34
+ };
35
+ export declare function isApiIntegrationProviderOAuthState(value: string | undefined, settings: Settings): boolean;