@cat-factory/server 0.170.1 → 0.172.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 (222) hide show
  1. package/dist/agents/ContainerAgentExecutor.d.ts +0 -8
  2. package/dist/agents/ContainerAgentExecutor.d.ts.map +1 -1
  3. package/dist/agents/ContainerAgentExecutor.js +51 -129
  4. package/dist/agents/ContainerAgentExecutor.js.map +1 -1
  5. package/dist/agents/ContainerEnvConfigRepairer.d.ts.map +1 -1
  6. package/dist/agents/ContainerEnvConfigRepairer.js +6 -0
  7. package/dist/agents/ContainerEnvConfigRepairer.js.map +1 -1
  8. package/dist/agents/ContainerRepoBootstrapper.d.ts.map +1 -1
  9. package/dist/agents/ContainerRepoBootstrapper.js +8 -0
  10. package/dist/agents/ContainerRepoBootstrapper.js.map +1 -1
  11. package/dist/agents/agentContextRecord.d.ts +31 -0
  12. package/dist/agents/agentContextRecord.d.ts.map +1 -0
  13. package/dist/agents/agentContextRecord.js +113 -0
  14. package/dist/agents/agentContextRecord.js.map +1 -0
  15. package/dist/agents/containerAgentBody.d.ts.map +1 -1
  16. package/dist/agents/containerAgentBody.js +8 -0
  17. package/dist/agents/containerAgentBody.js.map +1 -1
  18. package/dist/agents/containerAgentLogging.d.ts +44 -0
  19. package/dist/agents/containerAgentLogging.d.ts.map +1 -0
  20. package/dist/agents/containerAgentLogging.js +28 -0
  21. package/dist/agents/containerAgentLogging.js.map +1 -0
  22. package/dist/config/misconfiguredApp.d.ts +2 -1
  23. package/dist/config/misconfiguredApp.d.ts.map +1 -1
  24. package/dist/config/misconfiguredApp.js +11 -2
  25. package/dist/config/misconfiguredApp.js.map +1 -1
  26. package/dist/http/cors.d.ts +10 -0
  27. package/dist/http/cors.d.ts.map +1 -1
  28. package/dist/http/cors.js +11 -0
  29. package/dist/http/cors.js.map +1 -1
  30. package/dist/http/env.d.ts +19 -1
  31. package/dist/http/env.d.ts.map +1 -1
  32. package/dist/http/errorHandler.d.ts +10 -2
  33. package/dist/http/errorHandler.d.ts.map +1 -1
  34. package/dist/http/errorHandler.js +28 -12
  35. package/dist/http/errorHandler.js.map +1 -1
  36. package/dist/http/guards.d.ts +46 -0
  37. package/dist/http/guards.d.ts.map +1 -0
  38. package/dist/http/guards.js +57 -0
  39. package/dist/http/guards.js.map +1 -0
  40. package/dist/http/requestLogging.d.ts +32 -0
  41. package/dist/http/requestLogging.d.ts.map +1 -0
  42. package/dist/http/requestLogging.js +117 -0
  43. package/dist/http/requestLogging.js.map +1 -0
  44. package/dist/index.d.ts +3 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +3 -2
  47. package/dist/index.js.map +1 -1
  48. package/dist/modules/accounts/AccountController.d.ts +0 -10
  49. package/dist/modules/accounts/AccountController.d.ts.map +1 -1
  50. package/dist/modules/accounts/AccountController.js +56 -101
  51. package/dist/modules/accounts/AccountController.js.map +1 -1
  52. package/dist/modules/agentRuns/AgentRunController.d.ts +0 -6
  53. package/dist/modules/agentRuns/AgentRunController.d.ts.map +1 -1
  54. package/dist/modules/agentRuns/AgentRunController.js +19 -16
  55. package/dist/modules/agentRuns/AgentRunController.js.map +1 -1
  56. package/dist/modules/artifacts/ArtifactController.d.ts.map +1 -1
  57. package/dist/modules/artifacts/ArtifactController.js +4 -15
  58. package/dist/modules/artifacts/ArtifactController.js.map +1 -1
  59. package/dist/modules/auth/AuthController.d.ts.map +1 -1
  60. package/dist/modules/auth/AuthController.js +14 -9
  61. package/dist/modules/auth/AuthController.js.map +1 -1
  62. package/dist/modules/bootstrap/BootstrapController.d.ts.map +1 -1
  63. package/dist/modules/bootstrap/BootstrapController.js +6 -20
  64. package/dist/modules/bootstrap/BootstrapController.js.map +1 -1
  65. package/dist/modules/brainstorm/BrainstormController.d.ts.map +1 -1
  66. package/dist/modules/brainstorm/BrainstormController.js +17 -27
  67. package/dist/modules/brainstorm/BrainstormController.js.map +1 -1
  68. package/dist/modules/bugHunt/BugHuntController.d.ts.map +1 -1
  69. package/dist/modules/bugHunt/BugHuntController.js +4 -12
  70. package/dist/modules/bugHunt/BugHuntController.js.map +1 -1
  71. package/dist/modules/clarity/ClarityReviewController.d.ts.map +1 -1
  72. package/dist/modules/clarity/ClarityReviewController.js +18 -27
  73. package/dist/modules/clarity/ClarityReviewController.js.map +1 -1
  74. package/dist/modules/docInterview/DocInterviewController.d.ts.map +1 -1
  75. package/dist/modules/docInterview/DocInterviewController.js +6 -17
  76. package/dist/modules/docInterview/DocInterviewController.js.map +1 -1
  77. package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -1
  78. package/dist/modules/documents/DocumentSourceController.js +4 -32
  79. package/dist/modules/documents/DocumentSourceController.js.map +1 -1
  80. package/dist/modules/environments/EnvironmentController.d.ts.map +1 -1
  81. package/dist/modules/environments/EnvironmentController.js +10 -63
  82. package/dist/modules/environments/EnvironmentController.js.map +1 -1
  83. package/dist/modules/environments/EnvironmentUserHandlerController.d.ts.map +1 -1
  84. package/dist/modules/environments/EnvironmentUserHandlerController.js +16 -25
  85. package/dist/modules/environments/EnvironmentUserHandlerController.js.map +1 -1
  86. package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts.map +1 -1
  87. package/dist/modules/fragmentLibrary/FragmentLibraryController.js +26 -60
  88. package/dist/modules/fragmentLibrary/FragmentLibraryController.js.map +1 -1
  89. package/dist/modules/github/GitHubController.d.ts.map +1 -1
  90. package/dist/modules/github/GitHubController.js +14 -48
  91. package/dist/modules/github/GitHubController.js.map +1 -1
  92. package/dist/modules/gitlab/GitLabController.d.ts.map +1 -1
  93. package/dist/modules/gitlab/GitLabController.js +3 -12
  94. package/dist/modules/gitlab/GitLabController.js.map +1 -1
  95. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.d.ts.map +1 -1
  96. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js +3 -12
  97. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js.map +1 -1
  98. package/dist/modules/initiatives/InitiativeController.d.ts.map +1 -1
  99. package/dist/modules/initiatives/InitiativeController.js +4 -39
  100. package/dist/modules/initiatives/InitiativeController.js.map +1 -1
  101. package/dist/modules/kaizen/KaizenController.d.ts.map +1 -1
  102. package/dist/modules/kaizen/KaizenController.js +3 -10
  103. package/dist/modules/kaizen/KaizenController.js.map +1 -1
  104. package/dist/modules/localModels/LocalModelEndpointController.d.ts.map +1 -1
  105. package/dist/modules/localModels/LocalModelEndpointController.js +21 -31
  106. package/dist/modules/localModels/LocalModelEndpointController.js.map +1 -1
  107. package/dist/modules/localSettings/LocalSettingsController.d.ts +0 -9
  108. package/dist/modules/localSettings/LocalSettingsController.d.ts.map +1 -1
  109. package/dist/modules/localSettings/LocalSettingsController.js +9 -12
  110. package/dist/modules/localSettings/LocalSettingsController.js.map +1 -1
  111. package/dist/modules/merge/MergeTrackRecordController.d.ts.map +1 -1
  112. package/dist/modules/merge/MergeTrackRecordController.js +3 -10
  113. package/dist/modules/merge/MergeTrackRecordController.js.map +1 -1
  114. package/dist/modules/merge/RiskPolicyController.d.ts.map +1 -1
  115. package/dist/modules/merge/RiskPolicyController.js +3 -16
  116. package/dist/modules/merge/RiskPolicyController.js.map +1 -1
  117. package/dist/modules/modelPresets/ModelPresetController.d.ts.map +1 -1
  118. package/dist/modules/modelPresets/ModelPresetController.js +3 -16
  119. package/dist/modules/modelPresets/ModelPresetController.js.map +1 -1
  120. package/dist/modules/notificationWebhook/NotificationWebhookController.d.ts.map +1 -1
  121. package/dist/modules/notificationWebhook/NotificationWebhookController.js +3 -12
  122. package/dist/modules/notificationWebhook/NotificationWebhookController.js.map +1 -1
  123. package/dist/modules/notifications/NotificationController.d.ts.map +1 -1
  124. package/dist/modules/notifications/NotificationController.js +3 -12
  125. package/dist/modules/notifications/NotificationController.js.map +1 -1
  126. package/dist/modules/observability/PlatformObservabilityController.d.ts.map +1 -1
  127. package/dist/modules/observability/PlatformObservabilityController.js +7 -11
  128. package/dist/modules/observability/PlatformObservabilityController.js.map +1 -1
  129. package/dist/modules/openrouter/OpenRouterCatalogController.d.ts.map +1 -1
  130. package/dist/modules/openrouter/OpenRouterCatalogController.js +19 -23
  131. package/dist/modules/openrouter/OpenRouterCatalogController.js.map +1 -1
  132. package/dist/modules/packageRegistries/PackageRegistriesController.d.ts.map +1 -1
  133. package/dist/modules/packageRegistries/PackageRegistriesController.js +3 -12
  134. package/dist/modules/packageRegistries/PackageRegistriesController.js.map +1 -1
  135. package/dist/modules/preflight/PreflightController.d.ts.map +1 -1
  136. package/dist/modules/preflight/PreflightController.js +3 -8
  137. package/dist/modules/preflight/PreflightController.js.map +1 -1
  138. package/dist/modules/preview/PreviewController.d.ts.map +1 -1
  139. package/dist/modules/preview/PreviewController.js +4 -14
  140. package/dist/modules/preview/PreviewController.js.map +1 -1
  141. package/dist/modules/providers/ApiKeyController.d.ts +0 -1
  142. package/dist/modules/providers/ApiKeyController.d.ts.map +1 -1
  143. package/dist/modules/providers/ApiKeyController.js +21 -43
  144. package/dist/modules/providers/ApiKeyController.js.map +1 -1
  145. package/dist/modules/providers/PersonalSubscriptionController.d.ts.map +1 -1
  146. package/dist/modules/providers/PersonalSubscriptionController.js +15 -25
  147. package/dist/modules/providers/PersonalSubscriptionController.js.map +1 -1
  148. package/dist/modules/providers/UserSecretController.d.ts.map +1 -1
  149. package/dist/modules/providers/UserSecretController.js +23 -37
  150. package/dist/modules/providers/UserSecretController.js.map +1 -1
  151. package/dist/modules/providers/VendorCredentialController.d.ts.map +1 -1
  152. package/dist/modules/providers/VendorCredentialController.js +9 -16
  153. package/dist/modules/providers/VendorCredentialController.js.map +1 -1
  154. package/dist/modules/provisioningLogs/ProvisioningLogController.d.ts.map +1 -1
  155. package/dist/modules/provisioningLogs/ProvisioningLogController.js +3 -8
  156. package/dist/modules/provisioningLogs/ProvisioningLogController.js.map +1 -1
  157. package/dist/modules/publicApi/PublicApiKeyController.d.ts +0 -1
  158. package/dist/modules/publicApi/PublicApiKeyController.d.ts.map +1 -1
  159. package/dist/modules/publicApi/PublicApiKeyController.js +8 -13
  160. package/dist/modules/publicApi/PublicApiKeyController.js.map +1 -1
  161. package/dist/modules/recurring/RecurringPipelineController.d.ts.map +1 -1
  162. package/dist/modules/recurring/RecurringPipelineController.js +3 -18
  163. package/dist/modules/recurring/RecurringPipelineController.js.map +1 -1
  164. package/dist/modules/recurring/TrackerSettingsController.d.ts.map +1 -1
  165. package/dist/modules/recurring/TrackerSettingsController.js +3 -10
  166. package/dist/modules/recurring/TrackerSettingsController.js.map +1 -1
  167. package/dist/modules/releaseHealth/ReleaseHealthController.d.ts.map +1 -1
  168. package/dist/modules/releaseHealth/ReleaseHealthController.js +3 -18
  169. package/dist/modules/releaseHealth/ReleaseHealthController.js.map +1 -1
  170. package/dist/modules/reports/ReportsController.d.ts.map +1 -1
  171. package/dist/modules/reports/ReportsController.js +7 -11
  172. package/dist/modules/reports/ReportsController.js.map +1 -1
  173. package/dist/modules/requirements/RequirementReviewController.d.ts.map +1 -1
  174. package/dist/modules/requirements/RequirementReviewController.js +18 -36
  175. package/dist/modules/requirements/RequirementReviewController.js.map +1 -1
  176. package/dist/modules/runners/RunnerPoolController.d.ts.map +1 -1
  177. package/dist/modules/runners/RunnerPoolController.js +3 -18
  178. package/dist/modules/runners/RunnerPoolController.js.map +1 -1
  179. package/dist/modules/sandbox/SandboxController.d.ts.map +1 -1
  180. package/dist/modules/sandbox/SandboxController.js +3 -32
  181. package/dist/modules/sandbox/SandboxController.js.map +1 -1
  182. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts.map +1 -1
  183. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js +3 -10
  184. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js.map +1 -1
  185. package/dist/modules/services/ServiceMountController.d.ts.map +1 -1
  186. package/dist/modules/services/ServiceMountController.js +3 -16
  187. package/dist/modules/services/ServiceMountController.js.map +1 -1
  188. package/dist/modules/settings/WorkspaceSettingsController.d.ts.map +1 -1
  189. package/dist/modules/settings/WorkspaceSettingsController.js +3 -10
  190. package/dist/modules/settings/WorkspaceSettingsController.js.map +1 -1
  191. package/dist/modules/sharedStack/SharedStackController.d.ts.map +1 -1
  192. package/dist/modules/sharedStack/SharedStackController.js +3 -20
  193. package/dist/modules/sharedStack/SharedStackController.js.map +1 -1
  194. package/dist/modules/skillLibrary/SkillLibraryController.d.ts.map +1 -1
  195. package/dist/modules/skillLibrary/SkillLibraryController.js +21 -44
  196. package/dist/modules/skillLibrary/SkillLibraryController.js.map +1 -1
  197. package/dist/modules/slack/SlackController.d.ts.map +1 -1
  198. package/dist/modules/slack/SlackController.js +4 -26
  199. package/dist/modules/slack/SlackController.js.map +1 -1
  200. package/dist/modules/tasks/TaskSourceController.d.ts.map +1 -1
  201. package/dist/modules/tasks/TaskSourceController.js +5 -47
  202. package/dist/modules/tasks/TaskSourceController.js.map +1 -1
  203. package/dist/modules/testSecrets/TestSecretsController.d.ts.map +1 -1
  204. package/dist/modules/testSecrets/TestSecretsController.js +3 -12
  205. package/dist/modules/testSecrets/TestSecretsController.js.map +1 -1
  206. package/dist/modules/userSettings/UserSettingsController.d.ts.map +1 -1
  207. package/dist/modules/userSettings/UserSettingsController.js +13 -19
  208. package/dist/modules/userSettings/UserSettingsController.js.map +1 -1
  209. package/dist/modules/validation/ValidationConfigController.d.ts.map +1 -1
  210. package/dist/modules/validation/ValidationConfigController.js +3 -14
  211. package/dist/modules/validation/ValidationConfigController.js.map +1 -1
  212. package/dist/modules/workspaces/WorkspaceController.d.ts.map +1 -1
  213. package/dist/modules/workspaces/WorkspaceController.js +9 -4
  214. package/dist/modules/workspaces/WorkspaceController.js.map +1 -1
  215. package/dist/modules/workspaces/WorkspaceMemberController.d.ts.map +1 -1
  216. package/dist/modules/workspaces/WorkspaceMemberController.js +10 -19
  217. package/dist/modules/workspaces/WorkspaceMemberController.js.map +1 -1
  218. package/package.json +6 -6
  219. package/dist/agents/storeAgentContextGate.d.ts +0 -36
  220. package/dist/agents/storeAgentContextGate.d.ts.map +0 -1
  221. package/dist/agents/storeAgentContextGate.js +0 -36
  222. package/dist/agents/storeAgentContextGate.js.map +0 -1
@@ -1,20 +1,21 @@
1
1
  import { addAccountApiKeyContract, addAccountMemberContract, connectEmailContract, createAccountContract, createInvitationContract, disconnectEmailContract, getAccountSettingsContract, getEmailConnectionContract, listAccountApiKeysContract, listAccountMembersContract, listAccountsContract, listInvitationsContract, removeAccountApiKeyContract, revokeInvitationContract, setMemberRolesContract, testEmailContract, updateAccountApiKeyContract, updateAccountContract, updateAccountSettingsContract, } from '@cat-factory/contracts';
2
- import { ConflictError, UnavailableError, UnauthorizedError } from '@cat-factory/kernel';
2
+ import { ConflictError } from '@cat-factory/kernel';
3
3
  import { buildHonoRoute } from '@toad-contracts/hono';
4
4
  import { Hono } from 'hono';
5
5
  import { apiKeyToWire } from '../providers/ApiKeyController.js';
6
+ import { requireCapability, requireUser } from '../../http/guards.js';
6
7
  /**
7
- * The signed-in user, narrowed to what the tenancy layer needs. Generic over the
8
- * env so it accepts a contract-typed handler context (`ContractEnv<T> & AppEnv`),
9
- * which Hono treats as a distinct, non-assignable env from the bare `AppEnv`.
8
+ * The signed-in user, narrowed to what the tenancy layer needs, or a 401 — every route here
9
+ * is account-scoped and has nothing to answer for an anonymous caller. Contrast
10
+ * `WorkspaceController`'s `optionalAccountUser`, which is deliberately nullable because board
11
+ * listing still answers with no signed-in user (dev-open). Generic over the env so it accepts a
12
+ * contract-typed handler context (`ContractEnv<T> & AppEnv`), which Hono treats as a distinct,
13
+ * non-assignable env from the bare `AppEnv`.
10
14
  */
11
- function accountUser(c) {
12
- const user = c.get('user');
13
- return user ? { id: user.id, login: user.login, name: user.name } : null;
15
+ function requireAccountUser(c) {
16
+ const user = requireUser(c, 'Sign in to manage accounts');
17
+ return { id: user.id, login: user.login, name: user.name };
14
18
  }
15
- const signInRequired = () => {
16
- throw new UnauthorizedError('Sign in to manage accounts');
17
- };
18
19
  /**
19
20
  * Account tenancy: the accounts a user can switch between (their personal account
20
21
  * plus any orgs they belong to), org creation, and membership management. Accounts
@@ -25,34 +26,36 @@ const signInRequired = () => {
25
26
  * `buildHonoRoute`: the method/path and request validation come from the contract,
26
27
  * and `c.req.valid(...)` + the `c.json(body, status)` return are typed from it.
27
28
  */
29
+ /** Resolve the account-scoped API-key store, or refuse with a 503. */
30
+ function requireApiKeys(c) {
31
+ return requireCapability(c.get('container').apiKeys, 'API key storage is not configured');
32
+ }
33
+ /** Resolve the account-settings store, or refuse with a 503. */
34
+ function requireAccountSettings(c) {
35
+ return requireCapability(c.get('container').accountSettings, 'Account settings storage is not configured');
36
+ }
28
37
  export function accountController() {
29
38
  const app = new Hono();
30
39
  buildHonoRoute(app, listAccountsContract, async (c) => {
31
- const user = accountUser(c);
40
+ const user = requireAccountUser(c);
32
41
  if (!user)
33
42
  return c.json([], 200);
34
43
  return c.json(await c.get('container').accountService.listForUser(user), 200);
35
44
  });
36
45
  buildHonoRoute(app, createAccountContract, async (c) => {
37
- const user = accountUser(c);
38
- if (!user)
39
- return signInRequired();
46
+ const user = requireAccountUser(c);
40
47
  const account = await c.get('container').accountService.createOrg(user, c.req.valid('json'));
41
48
  return c.json(account, 201);
42
49
  });
43
50
  buildHonoRoute(app, updateAccountContract, async (c) => {
44
- const user = accountUser(c);
45
- if (!user)
46
- return signInRequired();
51
+ const user = requireAccountUser(c);
47
52
  const account = await c
48
53
  .get('container')
49
54
  .accountService.updateSettings(c.req.valid('param').accountId, user.id, c.req.valid('json'));
50
55
  return c.json(account, 200);
51
56
  });
52
57
  buildHonoRoute(app, listAccountMembersContract, async (c) => {
53
- const user = accountUser(c);
54
- if (!user)
55
- return signInRequired();
58
+ const user = requireAccountUser(c);
56
59
  const accounts = c.get('container').accountService;
57
60
  const { accountId } = c.req.valid('param');
58
61
  // Membership in the account is required to see its roster (404 otherwise).
@@ -60,9 +63,7 @@ export function accountController() {
60
63
  return c.json(await accounts.members(accountId), 200);
61
64
  });
62
65
  buildHonoRoute(app, addAccountMemberContract, async (c) => {
63
- const user = accountUser(c);
64
- if (!user)
65
- return signInRequired();
66
+ const user = requireAccountUser(c);
66
67
  const body = c.req.valid('json');
67
68
  const member = await c
68
69
  .get('container')
@@ -71,9 +72,7 @@ export function accountController() {
71
72
  });
72
73
  // Set a member's role set (admin-only). The acting admin can't drop their own admin.
73
74
  buildHonoRoute(app, setMemberRolesContract, async (c) => {
74
- const user = accountUser(c);
75
- if (!user)
76
- return signInRequired();
75
+ const user = requireAccountUser(c);
77
76
  const { accountId, userId } = c.req.valid('param');
78
77
  const member = await c
79
78
  .get('container')
@@ -83,9 +82,7 @@ export function accountController() {
83
82
  // ---- Invitations (email-based org onboarding) ---------------------------
84
83
  // Available only when the invitation repository is wired (opt-in feature).
85
84
  buildHonoRoute(app, listInvitationsContract, async (c) => {
86
- const user = accountUser(c);
87
- if (!user)
88
- return signInRequired();
85
+ const user = requireAccountUser(c);
89
86
  const container = c.get('container');
90
87
  if (!container.invitations)
91
88
  return c.json([], 200);
@@ -95,23 +92,17 @@ export function accountController() {
95
92
  return c.json(await container.invitations.list(accountId), 200);
96
93
  });
97
94
  buildHonoRoute(app, createInvitationContract, async (c) => {
98
- const user = accountUser(c);
99
- if (!user)
100
- return signInRequired();
95
+ const user = requireAccountUser(c);
101
96
  const container = c.get('container');
102
- if (!container.invitations) {
103
- throw new UnavailableError('Invitations are not configured');
104
- }
97
+ const invitations = requireCapability(container.invitations, 'Invitations are not configured');
105
98
  const body = c.req.valid('json');
106
- const created = await container.invitations.invite(c.req.valid('param').accountId, user.id, body.email, body.roles);
99
+ const created = await invitations.invite(c.req.valid('param').accountId, user.id, body.email, body.roles);
107
100
  // The raw accept link is returned so an operator can share it manually when no
108
101
  // email transport is configured; never re-derivable afterwards.
109
102
  return c.json({ invitation: created.invitation, acceptUrl: created.acceptUrl }, 201);
110
103
  });
111
104
  buildHonoRoute(app, revokeInvitationContract, async (c) => {
112
- const user = accountUser(c);
113
- if (!user)
114
- return signInRequired();
105
+ const user = requireAccountUser(c);
115
106
  const container = c.get('container');
116
107
  if (!container.invitations)
117
108
  return c.body(null, 204);
@@ -124,63 +115,46 @@ export function accountController() {
124
115
  // workspace in the account. Admin-gated like the other account-scoped credentials;
125
116
  // the raw key is write-only — only secret-free metadata is ever returned. Available
126
117
  // only when the API-key store is wired (ENCRYPTION_KEY).
127
- const apiKeysUnavailable = () => {
128
- throw new UnavailableError('API key storage is not configured');
129
- };
130
118
  buildHonoRoute(app, listAccountApiKeysContract, async (c) => {
131
- const user = accountUser(c);
132
- if (!user)
133
- return signInRequired();
119
+ const user = requireAccountUser(c);
134
120
  const container = c.get('container');
135
- if (!container.apiKeys)
136
- return apiKeysUnavailable();
121
+ const apiKeys = requireApiKeys(c);
137
122
  const { accountId } = c.req.valid('param');
138
123
  await container.accountService.requireAdmin(accountId, user.id);
139
- const keys = await container.apiKeys.listKeys('account', accountId);
124
+ const keys = await apiKeys.listKeys('account', accountId);
140
125
  return c.json({ keys: keys.map(apiKeyToWire) }, 200);
141
126
  });
142
127
  buildHonoRoute(app, addAccountApiKeyContract, async (c) => {
143
- const user = accountUser(c);
144
- if (!user)
145
- return signInRequired();
128
+ const user = requireAccountUser(c);
146
129
  const container = c.get('container');
147
- if (!container.apiKeys)
148
- return apiKeysUnavailable();
130
+ const apiKeys = requireApiKeys(c);
149
131
  const { accountId } = c.req.valid('param');
150
132
  await container.accountService.requireAdmin(accountId, user.id);
151
- const summary = await container.apiKeys.addKey('account', accountId, c.req.valid('json'));
133
+ const summary = await apiKeys.addKey('account', accountId, c.req.valid('json'));
152
134
  return c.json(apiKeyToWire(summary), 201);
153
135
  });
154
136
  buildHonoRoute(app, updateAccountApiKeyContract, async (c) => {
155
- const user = accountUser(c);
156
- if (!user)
157
- return signInRequired();
137
+ const user = requireAccountUser(c);
158
138
  const container = c.get('container');
159
- if (!container.apiKeys)
160
- return apiKeysUnavailable();
139
+ const apiKeys = requireApiKeys(c);
161
140
  const { accountId, id } = c.req.valid('param');
162
141
  await container.accountService.requireAdmin(accountId, user.id);
163
- const summary = await container.apiKeys.updateKey('account', accountId, id, c.req.valid('json'));
142
+ const summary = await apiKeys.updateKey('account', accountId, id, c.req.valid('json'));
164
143
  return c.json(apiKeyToWire(summary), 200);
165
144
  });
166
145
  buildHonoRoute(app, removeAccountApiKeyContract, async (c) => {
167
- const user = accountUser(c);
168
- if (!user)
169
- return signInRequired();
146
+ const user = requireAccountUser(c);
170
147
  const container = c.get('container');
171
- if (!container.apiKeys)
172
- return apiKeysUnavailable();
148
+ const apiKeys = requireApiKeys(c);
173
149
  const { accountId, id } = c.req.valid('param');
174
150
  await container.accountService.requireAdmin(accountId, user.id);
175
- await container.apiKeys.removeKey('account', accountId, id);
151
+ await apiKeys.removeKey('account', accountId, id);
176
152
  return c.body(null, 204);
177
153
  });
178
154
  // ---- Email sender connection (per-account, UI-onboarded) ----------------
179
155
  // Owner-only mutations; available only when the email module is wired.
180
156
  buildHonoRoute(app, getEmailConnectionContract, async (c) => {
181
- const user = accountUser(c);
182
- if (!user)
183
- return signInRequired();
157
+ const user = requireAccountUser(c);
184
158
  const container = c.get('container');
185
159
  if (!container.email)
186
160
  return c.json({ connection: null, configured: false }, 200);
@@ -190,22 +164,16 @@ export function accountController() {
190
164
  return c.json({ connection, configured: true }, 200);
191
165
  });
192
166
  buildHonoRoute(app, connectEmailContract, async (c) => {
193
- const user = accountUser(c);
194
- if (!user)
195
- return signInRequired();
167
+ const user = requireAccountUser(c);
196
168
  const container = c.get('container');
197
- if (!container.email) {
198
- throw new UnavailableError('Email is not configured');
199
- }
169
+ const email = requireCapability(container.email, 'Email is not configured');
200
170
  const { accountId } = c.req.valid('param');
201
171
  await container.accountService.requireAdmin(accountId, user.id);
202
- const connection = await container.email.connect(accountId, c.req.valid('json'));
172
+ const connection = await email.connect(accountId, c.req.valid('json'));
203
173
  return c.json(connection, 201);
204
174
  });
205
175
  buildHonoRoute(app, disconnectEmailContract, async (c) => {
206
- const user = accountUser(c);
207
- if (!user)
208
- return signInRequired();
176
+ const user = requireAccountUser(c);
209
177
  const container = c.get('container');
210
178
  if (!container.email)
211
179
  return c.body(null, 204);
@@ -215,16 +183,12 @@ export function accountController() {
215
183
  return c.body(null, 204);
216
184
  });
217
185
  buildHonoRoute(app, testEmailContract, async (c) => {
218
- const user = accountUser(c);
219
- if (!user)
220
- return signInRequired();
186
+ const user = requireAccountUser(c);
221
187
  const container = c.get('container');
222
- if (!container.email) {
223
- throw new UnavailableError('Email is not configured');
224
- }
188
+ const email = requireCapability(container.email, 'Email is not configured');
225
189
  const { accountId } = c.req.valid('param');
226
190
  await container.accountService.requireAdmin(accountId, user.id);
227
- await container.email.sendTest(accountId, c.req.valid('json').to);
191
+ await email.sendTest(accountId, c.req.valid('json').to);
228
192
  return c.json({ ok: true }, 200);
229
193
  });
230
194
  // ---- Deployment settings (per-account, admin-only) ----------------------
@@ -233,27 +197,18 @@ export function accountController() {
233
197
  // GET returns only the non-secret config + presence summary. Available only when the
234
198
  // settings store is wired (ENCRYPTION_KEY). Admin-gated for BOTH read and write —
235
199
  // these are sensitive deployment knobs.
236
- const settingsUnavailable = () => {
237
- throw new UnavailableError('Account settings storage is not configured');
238
- };
239
200
  buildHonoRoute(app, getAccountSettingsContract, async (c) => {
240
- const user = accountUser(c);
241
- if (!user)
242
- return signInRequired();
201
+ const user = requireAccountUser(c);
243
202
  const container = c.get('container');
244
- if (!container.accountSettings)
245
- return settingsUnavailable();
203
+ const accountSettings = requireAccountSettings(c);
246
204
  const { accountId } = c.req.valid('param');
247
205
  await container.accountService.requireAdmin(accountId, user.id);
248
- return c.json(await container.accountSettings.service.read(accountId), 200);
206
+ return c.json(await accountSettings.service.read(accountId), 200);
249
207
  });
250
208
  buildHonoRoute(app, updateAccountSettingsContract, async (c) => {
251
- const user = accountUser(c);
252
- if (!user)
253
- return signInRequired();
209
+ const user = requireAccountUser(c);
254
210
  const container = c.get('container');
255
- if (!container.accountSettings)
256
- return settingsUnavailable();
211
+ const accountSettings = requireAccountSettings(c);
257
212
  const { accountId } = c.req.valid('param');
258
213
  await container.accountService.requireAdmin(accountId, user.id);
259
214
  const input = c.req.valid('json');
@@ -266,7 +221,7 @@ export function accountController() {
266
221
  throw new ConflictError('The account-wide model-family policy is not available on this deployment (it is a ' +
267
222
  'hosted / mothership-mode feature, not plain local mode).', 'model_policy_unsupported');
268
223
  }
269
- const view = await container.accountSettings.service.write(accountId, input);
224
+ const view = await accountSettings.service.write(accountId, input);
270
225
  // The write may have changed the account's model-family policy; drop the cached read so
271
226
  // the `/models` catalog + start guard see it at once (cross-node when a bus is wired).
272
227
  await container.caches.accountModelPolicy.invalidate(accountId, accountId);
@@ -1 +1 @@
1
- {"version":3,"file":"AccountController.js","sourceRoot":"","sources":["../../../src/modules/accounts/AccountController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AccountController.js","sourceRoot":"","sources":["../../../src/modules/accounts/AccountController.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,4 @@
1
1
  import { Hono } from 'hono';
2
2
  import type { AppEnv } from '../../http/env.js';
3
- /**
4
- * Cross-cutting endpoints over any "agent run" (bootstrap or execution),
5
- * dispatching to the right service by the run's kind. Mounted under
6
- * `/workspaces/:workspaceId`. This is the single retry path the board uses for a
7
- * failed run of either flow (replacing the bootstrap-only retry route).
8
- */
9
3
  export declare function agentRunController(): Hono<AppEnv>;
10
4
  //# sourceMappingURL=AgentRunController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentRunController.d.ts","sourceRoot":"","sources":["../../../src/modules/agentRuns/AgentRunController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAS/C;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,CAwFjD"}
1
+ {"version":3,"file":"AgentRunController.d.ts","sourceRoot":"","sources":["../../../src/modules/agentRuns/AgentRunController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAyB/C,wBAAgB,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,CAwFjD"}
@@ -4,15 +4,21 @@ import { Hono } from 'hono';
4
4
  import { param } from '../../http/params.js';
5
5
  import { personalGateForRun, readPersonalPassword } from '../providers/personalCredentialGate.js';
6
6
  import { UnavailableError } from '@cat-factory/kernel';
7
- const unavailable = (message) => {
8
- throw new UnavailableError(message);
9
- };
7
+ import { requireCapability } from '../../http/guards.js';
10
8
  /**
11
9
  * Cross-cutting endpoints over any "agent run" (bootstrap or execution),
12
10
  * dispatching to the right service by the run's kind. Mounted under
13
11
  * `/workspaces/:workspaceId`. This is the single retry path the board uses for a
14
12
  * failed run of either flow (replacing the bootstrap-only retry route).
15
13
  */
14
+ /** Resolve the repo-bootstrap module, or refuse with a 503 naming what isn't wired. */
15
+ function requireBootstrap(c) {
16
+ return requireCapability(c.get('container').bootstrap, 'Repo bootstrap is not configured');
17
+ }
18
+ /** Resolve the env-config-repair module, or refuse with a 503 naming what isn't wired. */
19
+ function requireEnvConfigRepair(c) {
20
+ return requireCapability(c.get('container').envConfigRepair, 'Environment config repair is not configured');
21
+ }
16
22
  export function agentRunController() {
17
23
  const app = new Hono();
18
24
  // Retry a failed run. Resolves the kind from the unified agent_runs table, then
@@ -26,19 +32,20 @@ export function agentRunController() {
26
32
  return c.json({ error: { code: 'not_found', message: `Agent run '${id}' not found` } }, 404);
27
33
  }
28
34
  if (ref.kind === 'bootstrap') {
29
- const bootstrap = container.bootstrap;
30
- if (!bootstrap)
31
- return unavailable('Repo bootstrap is not configured');
35
+ const bootstrap = requireBootstrap(c);
36
+ // A capability that IS wired but can't act: a predicate, not an absent value, so it
37
+ // throws directly rather than through the accessor.
32
38
  if (!bootstrap.service.canBootstrap) {
33
- return unavailable('Repo bootstrapping needs the GitHub App and the implementation container to be configured');
39
+ throw new UnavailableError('Repo bootstrapping needs the GitHub App and the implementation container to be configured');
34
40
  }
35
41
  const run = await bootstrap.service.retry(workspaceId, id);
36
42
  return c.json({ kind: ref.kind, run }, 201);
37
43
  }
38
44
  if (ref.kind === 'env-config-repair') {
39
- const repair = container.envConfigRepair;
40
- if (!repair || !repair.service.canRepair) {
41
- return unavailable('Environment config repair is not configured');
45
+ const repair = requireEnvConfigRepair(c);
46
+ // Wired but unable to act — a predicate, not an absent value.
47
+ if (!repair.service.canRepair) {
48
+ throw new UnavailableError('Environment config repair is not configured');
42
49
  }
43
50
  // No same-id re-drive (unlike bootstrap/execution): a repair run is a one-shot
44
51
  // clone→fix→push, so retry STARTS a fresh run from the failed job's coords (recovering
@@ -68,16 +75,12 @@ export function agentRunController() {
68
75
  return c.json({ error: { code: 'not_found', message: `Agent run '${id}' not found` } }, 404);
69
76
  }
70
77
  if (ref.kind === 'bootstrap') {
71
- const bootstrap = container.bootstrap;
72
- if (!bootstrap)
73
- return unavailable('Repo bootstrap is not configured');
78
+ const bootstrap = requireBootstrap(c);
74
79
  const run = await bootstrap.service.stop(workspaceId, id);
75
80
  return c.json({ kind: ref.kind, run }, 200);
76
81
  }
77
82
  if (ref.kind === 'env-config-repair') {
78
- const repair = container.envConfigRepair;
79
- if (!repair)
80
- return unavailable('Environment config repair is not configured');
83
+ const repair = requireEnvConfigRepair(c);
81
84
  const run = await repair.service.stop(workspaceId, id);
82
85
  return c.json({ kind: ref.kind, run }, 200);
83
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AgentRunController.js","sourceRoot":"","sources":["../../../src/modules/agentRuns/AgentRunController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentRunController.js","sourceRoot":"","sources":["../../../src/modules/agentRuns/AgentRunController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAA;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;;;GAKG;AACH,uFAAuF;AACvF,SAAS,gBAAgB,CAAmB,CAAa;IACvD,OAAO,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAA;AAC5F,CAAC;AAED,0FAA0F;AAC1F,SAAS,sBAAsB,CAAmB,CAAa;IAC7D,OAAO,iBAAiB,CACtB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,eAAe,EAClC,6CAA6C,CAC9C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,gFAAgF;IAChF,2EAA2E;IAC3E,cAAc,CAAC,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAA;QAElC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACtE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QAC9F,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;YACrC,oFAAoF;YACpF,oDAAoD;YACpD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;gBACpC,MAAM,IAAI,gBAAgB,CACxB,2FAA2F,CAC5F,CAAA;YACH,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;YAC1D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAA;YACxC,8DAA8D;YAC9D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,gBAAgB,CAAC,6CAA6C,CAAC,CAAA;YAC3E,CAAC;YACD,+EAA+E;YAC/E,uFAAuF;YACvF,wFAAwF;YACxF,uEAAuE;YACvE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;YACvD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;QAC7C,CAAC;QAED,wEAAwE;QACxE,8EAA8E;QAC9E,+EAA+E;QAC/E,wCAAwC;QACxC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,kBAAkB,CACxD,SAAS,EACT,WAAW,EACX,EAAE,EACF,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EACb,oBAAoB,CAAC,CAAC,CAAC,CACxB,CAAA;QACD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;QAC1F,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,6EAA6E;IAC7E,+EAA+E;IAC/E,uEAAuE;IACvE,cAAc,CAAC,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAA;QAElC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACtE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QAC9F,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;YACrC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;YACzD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAA;YACxC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;YACtD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;QAC7C,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACrE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ArtifactController.d.ts","sourceRoot":"","sources":["../../../src/modules/artifacts/ArtifactController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AA2B/C;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,CAuHjD"}
1
+ {"version":3,"file":"ArtifactController.d.ts","sourceRoot":"","sources":["../../../src/modules/artifacts/ArtifactController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AA0B/C;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,CAmHjD"}
@@ -2,19 +2,16 @@ import { Hono } from 'hono';
2
2
  import { bodyLimit } from 'hono/body-limit';
3
3
  import { param } from '../../http/params.js';
4
4
  import { MAX_REQUEST_BYTES, MAX_UPLOAD_BYTES, blobResponseHeaders, exceedsRequestSizeLimit, normalizeImageContentType, } from './imageArtifacts.js';
5
- import { UnavailableError } from '@cat-factory/kernel';
5
+ import { requireCapability } from '../../http/guards.js';
6
6
  /**
7
7
  * Resolve the binary-artifact store for the request's workspace (its account's configured
8
- * backend), or null when none is configured (the caller then 503s). All routes here are
9
- * mounted under `/workspaces/:workspaceId`.
8
+ * backend), or refuse with a 503 when none is configured. All routes here are mounted under
9
+ * `/workspaces/:workspaceId`.
10
10
  */
11
11
  async function requireStore(c) {
12
12
  const resolve = c.get('container').resolveBinaryArtifactStore;
13
- return resolve ? resolve(param(c, 'workspaceId')) : null;
13
+ return requireCapability(resolve ? await resolve(param(c, 'workspaceId')) : null, 'Binary-artifact storage is not configured');
14
14
  }
15
- const unavailable = () => {
16
- throw new UnavailableError('Binary-artifact storage is not configured');
17
- };
18
15
  const ALLOWED_KINDS = ['screenshot', 'reference'];
19
16
  /**
20
17
  * Workspace-scoped binary-artifact API backing the visual-confirmation gate: upload a
@@ -35,8 +32,6 @@ export function artifactController() {
35
32
  onError: (c) => c.json({ error: { code: 'too_large', message: 'Artifact exceeds size limit' } }, 413),
36
33
  }), async (c) => {
37
34
  const store = await requireStore(c);
38
- if (!store)
39
- return unavailable();
40
35
  // Refuse a grossly oversized body up-front (from Content-Length) so it is never buffered
41
36
  // into memory; the exact per-file ceiling is still enforced after parsing below.
42
37
  if (exceedsRequestSizeLimit(c.req.header('content-length'))) {
@@ -98,8 +93,6 @@ export function artifactController() {
98
93
  // Stream a stored blob's bytes (the metadata names its content type).
99
94
  app.get('/artifacts/:id/blob', async (c) => {
100
95
  const store = await requireStore(c);
101
- if (!store)
102
- return unavailable();
103
96
  const workspaceId = param(c, 'workspaceId');
104
97
  const id = param(c, 'id');
105
98
  // Read metadata + bytes in a SINGLE metadata lookup (the serve path needs both the
@@ -121,8 +114,6 @@ export function artifactController() {
121
114
  // List a run's artifacts (metadata only; the gate pairs screenshots vs references by view).
122
115
  app.get('/executions/:executionId/artifacts', async (c) => {
123
116
  const store = await requireStore(c);
124
- if (!store)
125
- return unavailable();
126
117
  const artifacts = await store.listByExecution(param(c, 'workspaceId'), param(c, 'executionId'));
127
118
  return c.json({ artifacts }, 200);
128
119
  });
@@ -130,8 +121,6 @@ export function artifactController() {
130
121
  // executionId because they're attached before any run).
131
122
  app.get('/blocks/:blockId/artifacts', async (c) => {
132
123
  const store = await requireStore(c);
133
- if (!store)
134
- return unavailable();
135
124
  const artifacts = await store.listByBlock(param(c, 'workspaceId'), param(c, 'blockId'));
136
125
  return c.json({ artifacts }, 200);
137
126
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ArtifactController.js","sourceRoot":"","sources":["../../../src/modules/artifacts/ArtifactController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ArtifactController.js","sourceRoot":"","sources":["../../../src/modules/artifacts/ArtifactController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AuthController.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/AuthController.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAO3B,OAAO,EAGL,KAAK,WAAW,EAEjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAoF/C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,oBAAoB,GAAG,wBAAwB,CAAC,GACrE,MAAM,CAkBR;AAwBD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAIzC;AA0GD,wBAAgB,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,CAU7C"}
1
+ {"version":3,"file":"AuthController.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/AuthController.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAO3B,OAAO,EAGL,KAAK,WAAW,EAEjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAgG/C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,oBAAoB,GAAG,wBAAwB,CAAC,GACrE,MAAM,CAkBR;AAwBD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAIzC;AA0GD,wBAAgB,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,CAU7C"}
@@ -8,6 +8,7 @@ import { verifySession } from '../../auth/middleware.js';
8
8
  import { mintMachineToken } from '../../auth/machineToken.js';
9
9
  import { HmacSigner, TOKEN_AUDIENCE, } from '../../auth/signing.js';
10
10
  import { ConflictError, NotFoundError, ValidationError, UnavailableError, UnauthorizedError, RateLimitedError, } from '@cat-factory/kernel';
11
+ import { requireCapability } from '../../http/guards.js';
11
12
  // Authentication endpoints. The SPA is handed a signed session token (via the URL
12
13
  // fragment for OAuth redirects, or the JSON body for password login) which it carries
13
14
  // as `Authorization: Bearer` on subsequent calls. Three login providers compose here:
@@ -19,6 +20,16 @@ import { ConflictError, NotFoundError, ValidationError, UnavailableError, Unauth
19
20
  const OAUTH_STATE_TTL_MS = 10 * 60 * 1000;
20
21
  /** Browser-binding cookie for an OAuth round-trip (see the GitHub flow notes below). */
21
22
  const OAUTH_STATE_COOKIE = 'cf_oauth_state';
23
+ // The one controller that keeps a local thrower rather than `requireCapability`: what it
24
+ // guards is a boolean FLAG (`cfg.githubEnabled` / `cfg.passwordEnabled`), not an absent
25
+ // value, so there is nothing for the accessor to narrow and return.
26
+ /**
27
+ * The Google OAuth client, or a 503. Wraps the nullable `googleClient(cfg)` builder so the two
28
+ * OAuth routes don't restate the refusal.
29
+ */
30
+ function requireGoogle(cfg) {
31
+ return requireCapability(googleClient(cfg), 'Authentication is not configured');
32
+ }
22
33
  const unavailable = () => {
23
34
  throw new UnavailableError('Authentication is not configured');
24
35
  };
@@ -321,9 +332,7 @@ function registerOAuthRoutes(app) {
321
332
  // ---- Google OAuth -------------------------------------------------------
322
333
  buildHonoRoute(app, googleLoginContract, async (c) => {
323
334
  const cfg = authConfig(c);
324
- const google = googleClient(cfg);
325
- if (!google)
326
- return unavailable();
335
+ const google = requireGoogle(cfg);
327
336
  const nonce = crypto.randomUUID();
328
337
  const state = {
329
338
  aud: TOKEN_AUDIENCE.oauthState,
@@ -344,9 +353,7 @@ function registerOAuthRoutes(app) {
344
353
  });
345
354
  buildHonoRoute(app, googleCallbackContract, async (c) => {
346
355
  const cfg = authConfig(c);
347
- const google = googleClient(cfg);
348
- if (!google)
349
- return unavailable();
356
+ const google = requireGoogle(cfg);
350
357
  const state = await consumeState(c, cfg);
351
358
  const code = c.req.query('code');
352
359
  if (!code || !state) {
@@ -453,9 +460,7 @@ function registerCredentialRoutes(app) {
453
460
  buildHonoRoute(app, patLoginContract, async (c) => {
454
461
  const cfg = authConfig(c);
455
462
  const container = c.get('container');
456
- const registry = container.vcsIdentity;
457
- if (!registry)
458
- return unavailable();
463
+ const registry = requireCapability(container.vcsIdentity, 'Authentication is not configured');
459
464
  const { provider, token } = c.req.valid('json');
460
465
  const entry = registry[provider];
461
466
  if (!entry) {