@cat-factory/server 0.166.2 → 0.169.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 (232) hide show
  1. package/dist/agents/ContainerAgentExecutor.d.ts.map +1 -1
  2. package/dist/agents/ContainerAgentExecutor.js +15 -1
  3. package/dist/agents/ContainerAgentExecutor.js.map +1 -1
  4. package/dist/agents/ContainerEnvConfigRepairer.d.ts.map +1 -1
  5. package/dist/agents/ContainerEnvConfigRepairer.js +3 -0
  6. package/dist/agents/ContainerEnvConfigRepairer.js.map +1 -1
  7. package/dist/agents/ContainerRepoBootstrapper.d.ts.map +1 -1
  8. package/dist/agents/ContainerRepoBootstrapper.js +3 -0
  9. package/dist/agents/ContainerRepoBootstrapper.js.map +1 -1
  10. package/dist/agents/modelProviderResolver.d.ts +9 -1
  11. package/dist/agents/modelProviderResolver.d.ts.map +1 -1
  12. package/dist/agents/modelProviderResolver.js +1 -0
  13. package/dist/agents/modelProviderResolver.js.map +1 -1
  14. package/dist/agents/storeAgentContextGate.d.ts +36 -0
  15. package/dist/agents/storeAgentContextGate.d.ts.map +1 -0
  16. package/dist/agents/storeAgentContextGate.js +36 -0
  17. package/dist/agents/storeAgentContextGate.js.map +1 -0
  18. package/dist/auth/middleware.d.ts.map +1 -1
  19. package/dist/auth/middleware.js +2 -1
  20. package/dist/auth/middleware.js.map +1 -1
  21. package/dist/http/errorHandler.d.ts.map +1 -1
  22. package/dist/http/errorHandler.js +6 -0
  23. package/dist/http/errorHandler.js.map +1 -1
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +5 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/modules/accounts/AccountController.d.ts.map +1 -1
  29. package/dist/modules/accounts/AccountController.js +37 -31
  30. package/dist/modules/accounts/AccountController.js.map +1 -1
  31. package/dist/modules/agentRuns/AgentRunController.d.ts.map +1 -1
  32. package/dist/modules/agentRuns/AgentRunController.js +9 -6
  33. package/dist/modules/agentRuns/AgentRunController.js.map +1 -1
  34. package/dist/modules/artifacts/ArtifactController.d.ts.map +1 -1
  35. package/dist/modules/artifacts/ArtifactController.js +8 -5
  36. package/dist/modules/artifacts/ArtifactController.js.map +1 -1
  37. package/dist/modules/artifacts/HarnessArtifactController.d.ts.map +1 -1
  38. package/dist/modules/artifacts/HarnessArtifactController.js +5 -4
  39. package/dist/modules/artifacts/HarnessArtifactController.js.map +1 -1
  40. package/dist/modules/auth/AuthController.d.ts.map +1 -1
  41. package/dist/modules/auth/AuthController.js +48 -50
  42. package/dist/modules/auth/AuthController.js.map +1 -1
  43. package/dist/modules/bootstrap/BootstrapController.d.ts.map +1 -1
  44. package/dist/modules/bootstrap/BootstrapController.js +12 -9
  45. package/dist/modules/bootstrap/BootstrapController.js.map +1 -1
  46. package/dist/modules/brainstorm/BrainstormController.d.ts.map +1 -1
  47. package/dist/modules/brainstorm/BrainstormController.js +12 -9
  48. package/dist/modules/brainstorm/BrainstormController.js.map +1 -1
  49. package/dist/modules/bugHunt/BugHuntController.d.ts.map +1 -1
  50. package/dist/modules/bugHunt/BugHuntController.js +7 -5
  51. package/dist/modules/bugHunt/BugHuntController.js.map +1 -1
  52. package/dist/modules/clarity/ClarityReviewController.d.ts.map +1 -1
  53. package/dist/modules/clarity/ClarityReviewController.js +12 -9
  54. package/dist/modules/clarity/ClarityReviewController.js.map +1 -1
  55. package/dist/modules/docInterview/DocInterviewController.d.ts.map +1 -1
  56. package/dist/modules/docInterview/DocInterviewController.js +8 -5
  57. package/dist/modules/docInterview/DocInterviewController.js.map +1 -1
  58. package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -1
  59. package/dist/modules/documents/DocumentSourceController.js +17 -15
  60. package/dist/modules/documents/DocumentSourceController.js.map +1 -1
  61. package/dist/modules/environments/EnvironmentController.d.ts.map +1 -1
  62. package/dist/modules/environments/EnvironmentController.js +33 -33
  63. package/dist/modules/environments/EnvironmentController.js.map +1 -1
  64. package/dist/modules/environments/EnvironmentUserHandlerController.d.ts.map +1 -1
  65. package/dist/modules/environments/EnvironmentUserHandlerController.js +13 -9
  66. package/dist/modules/environments/EnvironmentUserHandlerController.js.map +1 -1
  67. package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts.map +1 -1
  68. package/dist/modules/fragmentLibrary/FragmentLibraryController.js +32 -41
  69. package/dist/modules/fragmentLibrary/FragmentLibraryController.js.map +1 -1
  70. package/dist/modules/github/GitHubController.d.ts.map +1 -1
  71. package/dist/modules/github/GitHubController.js +26 -23
  72. package/dist/modules/github/GitHubController.js.map +1 -1
  73. package/dist/modules/github/GitHubWebhookController.d.ts.map +1 -1
  74. package/dist/modules/github/GitHubWebhookController.js +5 -4
  75. package/dist/modules/github/GitHubWebhookController.js.map +1 -1
  76. package/dist/modules/gitlab/GitLabController.d.ts.map +1 -1
  77. package/dist/modules/gitlab/GitLabController.js +7 -4
  78. package/dist/modules/gitlab/GitLabController.js.map +1 -1
  79. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.d.ts.map +1 -1
  80. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js +7 -9
  81. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js.map +1 -1
  82. package/dist/modules/initiatives/InitiativeController.d.ts.map +1 -1
  83. package/dist/modules/initiatives/InitiativeController.js +20 -17
  84. package/dist/modules/initiatives/InitiativeController.js.map +1 -1
  85. package/dist/modules/kaizen/KaizenController.d.ts.map +1 -1
  86. package/dist/modules/kaizen/KaizenController.js +6 -3
  87. package/dist/modules/kaizen/KaizenController.js.map +1 -1
  88. package/dist/modules/llmProxy/LlmProxyController.d.ts.map +1 -1
  89. package/dist/modules/llmProxy/LlmProxyController.js +309 -222
  90. package/dist/modules/llmProxy/LlmProxyController.js.map +1 -1
  91. package/dist/modules/localModels/LocalModelEndpointController.d.ts.map +1 -1
  92. package/dist/modules/localModels/LocalModelEndpointController.js +15 -10
  93. package/dist/modules/localModels/LocalModelEndpointController.js.map +1 -1
  94. package/dist/modules/localSettings/LocalSettingsController.d.ts.map +1 -1
  95. package/dist/modules/localSettings/LocalSettingsController.js +6 -8
  96. package/dist/modules/localSettings/LocalSettingsController.js.map +1 -1
  97. package/dist/modules/localSettings/MothershipConnectController.d.ts.map +1 -1
  98. package/dist/modules/localSettings/MothershipConnectController.js +2 -6
  99. package/dist/modules/localSettings/MothershipConnectController.js.map +1 -1
  100. package/dist/modules/merge/MergeTrackRecordController.d.ts.map +1 -1
  101. package/dist/modules/merge/MergeTrackRecordController.js +6 -3
  102. package/dist/modules/merge/MergeTrackRecordController.js.map +1 -1
  103. package/dist/modules/merge/RiskPolicyController.d.ts.map +1 -1
  104. package/dist/modules/merge/RiskPolicyController.js +9 -6
  105. package/dist/modules/merge/RiskPolicyController.js.map +1 -1
  106. package/dist/modules/modelPresets/ModelPresetController.d.ts.map +1 -1
  107. package/dist/modules/modelPresets/ModelPresetController.js +9 -6
  108. package/dist/modules/modelPresets/ModelPresetController.js.map +1 -1
  109. package/dist/modules/notificationWebhook/NotificationWebhookController.d.ts.map +1 -1
  110. package/dist/modules/notificationWebhook/NotificationWebhookController.js +7 -4
  111. package/dist/modules/notificationWebhook/NotificationWebhookController.js.map +1 -1
  112. package/dist/modules/notifications/NotificationController.d.ts.map +1 -1
  113. package/dist/modules/notifications/NotificationController.js +7 -4
  114. package/dist/modules/notifications/NotificationController.js.map +1 -1
  115. package/dist/modules/observability/PlatformObservabilityController.d.ts.map +1 -1
  116. package/dist/modules/observability/PlatformObservabilityController.js +6 -8
  117. package/dist/modules/observability/PlatformObservabilityController.js.map +1 -1
  118. package/dist/modules/openrouter/OpenRouterCatalogController.d.ts.map +1 -1
  119. package/dist/modules/openrouter/OpenRouterCatalogController.js +13 -8
  120. package/dist/modules/openrouter/OpenRouterCatalogController.js.map +1 -1
  121. package/dist/modules/packageRegistries/PackageRegistriesController.d.ts.map +1 -1
  122. package/dist/modules/packageRegistries/PackageRegistriesController.js +7 -9
  123. package/dist/modules/packageRegistries/PackageRegistriesController.js.map +1 -1
  124. package/dist/modules/persistence/GitHubDelegationController.d.ts.map +1 -1
  125. package/dist/modules/persistence/GitHubDelegationController.js +3 -7
  126. package/dist/modules/persistence/GitHubDelegationController.js.map +1 -1
  127. package/dist/modules/preflight/PreflightController.d.ts.map +1 -1
  128. package/dist/modules/preflight/PreflightController.js +5 -7
  129. package/dist/modules/preflight/PreflightController.js.map +1 -1
  130. package/dist/modules/preview/PreviewController.d.ts.map +1 -1
  131. package/dist/modules/preview/PreviewController.js +7 -9
  132. package/dist/modules/preview/PreviewController.js.map +1 -1
  133. package/dist/modules/providers/ApiKeyController.d.ts.map +1 -1
  134. package/dist/modules/providers/ApiKeyController.js +19 -14
  135. package/dist/modules/providers/ApiKeyController.js.map +1 -1
  136. package/dist/modules/providers/PersonalSubscriptionController.d.ts.map +1 -1
  137. package/dist/modules/providers/PersonalSubscriptionController.js +13 -8
  138. package/dist/modules/providers/PersonalSubscriptionController.js.map +1 -1
  139. package/dist/modules/providers/UserSecretController.d.ts.map +1 -1
  140. package/dist/modules/providers/UserSecretController.js +17 -12
  141. package/dist/modules/providers/UserSecretController.js.map +1 -1
  142. package/dist/modules/providers/VendorCredentialController.d.ts.map +1 -1
  143. package/dist/modules/providers/VendorCredentialController.js +8 -10
  144. package/dist/modules/providers/VendorCredentialController.js.map +1 -1
  145. package/dist/modules/provisioningLogs/ProvisioningLogController.d.ts.map +1 -1
  146. package/dist/modules/provisioningLogs/ProvisioningLogController.js +5 -2
  147. package/dist/modules/provisioningLogs/ProvisioningLogController.js.map +1 -1
  148. package/dist/modules/publicApi/PublicApiController.js +4 -4
  149. package/dist/modules/publicApi/PublicApiController.js.map +1 -1
  150. package/dist/modules/publicApi/PublicApiKeyController.d.ts.map +1 -1
  151. package/dist/modules/publicApi/PublicApiKeyController.js +7 -4
  152. package/dist/modules/publicApi/PublicApiKeyController.js.map +1 -1
  153. package/dist/modules/recurring/RecurringPipelineController.d.ts.map +1 -1
  154. package/dist/modules/recurring/RecurringPipelineController.js +10 -7
  155. package/dist/modules/recurring/RecurringPipelineController.js.map +1 -1
  156. package/dist/modules/recurring/TrackerSettingsController.d.ts.map +1 -1
  157. package/dist/modules/recurring/TrackerSettingsController.js +6 -3
  158. package/dist/modules/recurring/TrackerSettingsController.js.map +1 -1
  159. package/dist/modules/releaseHealth/ReleaseHealthController.d.ts.map +1 -1
  160. package/dist/modules/releaseHealth/ReleaseHealthController.js +10 -7
  161. package/dist/modules/releaseHealth/ReleaseHealthController.js.map +1 -1
  162. package/dist/modules/reports/ReportsController.d.ts.map +1 -1
  163. package/dist/modules/reports/ReportsController.js +6 -3
  164. package/dist/modules/reports/ReportsController.js.map +1 -1
  165. package/dist/modules/requirements/RequirementReviewController.d.ts.map +1 -1
  166. package/dist/modules/requirements/RequirementReviewController.js +16 -13
  167. package/dist/modules/requirements/RequirementReviewController.js.map +1 -1
  168. package/dist/modules/runners/RunnerPoolController.d.ts.map +1 -1
  169. package/dist/modules/runners/RunnerPoolController.js +10 -7
  170. package/dist/modules/runners/RunnerPoolController.js.map +1 -1
  171. package/dist/modules/sandbox/SandboxController.d.ts.map +1 -1
  172. package/dist/modules/sandbox/SandboxController.js +17 -14
  173. package/dist/modules/sandbox/SandboxController.js.map +1 -1
  174. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts.map +1 -1
  175. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js +6 -3
  176. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js.map +1 -1
  177. package/dist/modules/services/ServiceMountController.d.ts.map +1 -1
  178. package/dist/modules/services/ServiceMountController.js +9 -6
  179. package/dist/modules/services/ServiceMountController.js.map +1 -1
  180. package/dist/modules/settings/WorkspaceSettingsController.d.ts.map +1 -1
  181. package/dist/modules/settings/WorkspaceSettingsController.js +6 -3
  182. package/dist/modules/settings/WorkspaceSettingsController.js.map +1 -1
  183. package/dist/modules/sharedStack/SharedStackController.d.ts.map +1 -1
  184. package/dist/modules/sharedStack/SharedStackController.js +11 -8
  185. package/dist/modules/sharedStack/SharedStackController.js.map +1 -1
  186. package/dist/modules/skillLibrary/SkillLibraryController.d.ts.map +1 -1
  187. package/dist/modules/skillLibrary/SkillLibraryController.js +19 -19
  188. package/dist/modules/skillLibrary/SkillLibraryController.js.map +1 -1
  189. package/dist/modules/slack/SlackController.d.ts.map +1 -1
  190. package/dist/modules/slack/SlackController.js +16 -13
  191. package/dist/modules/slack/SlackController.js.map +1 -1
  192. package/dist/modules/tasks/TaskSourceController.d.ts.map +1 -1
  193. package/dist/modules/tasks/TaskSourceController.js +26 -24
  194. package/dist/modules/tasks/TaskSourceController.js.map +1 -1
  195. package/dist/modules/tasks/TaskWebhookController.d.ts.map +1 -1
  196. package/dist/modules/tasks/TaskWebhookController.js +4 -4
  197. package/dist/modules/tasks/TaskWebhookController.js.map +1 -1
  198. package/dist/modules/testSecrets/TestSecretsController.d.ts.map +1 -1
  199. package/dist/modules/testSecrets/TestSecretsController.js +7 -9
  200. package/dist/modules/testSecrets/TestSecretsController.js.map +1 -1
  201. package/dist/modules/userSettings/UserSettingsController.d.ts.map +1 -1
  202. package/dist/modules/userSettings/UserSettingsController.js +11 -6
  203. package/dist/modules/userSettings/UserSettingsController.js.map +1 -1
  204. package/dist/modules/validation/ValidationConfigController.d.ts.map +1 -1
  205. package/dist/modules/validation/ValidationConfigController.js +52 -11
  206. package/dist/modules/validation/ValidationConfigController.js.map +1 -1
  207. package/dist/modules/vcs/VcsWebhookController.d.ts.map +1 -1
  208. package/dist/modules/vcs/VcsWebhookController.js +5 -5
  209. package/dist/modules/vcs/VcsWebhookController.js.map +1 -1
  210. package/dist/modules/webSearch/WebSearchProxyController.d.ts.map +1 -1
  211. package/dist/modules/webSearch/WebSearchProxyController.js +3 -3
  212. package/dist/modules/webSearch/WebSearchProxyController.js.map +1 -1
  213. package/dist/modules/workspaces/WorkspaceMemberController.d.ts.map +1 -1
  214. package/dist/modules/workspaces/WorkspaceMemberController.js +9 -6
  215. package/dist/modules/workspaces/WorkspaceMemberController.js.map +1 -1
  216. package/dist/persistence/remoteRepositories.d.ts +9 -1
  217. package/dist/persistence/remoteRepositories.d.ts.map +1 -1
  218. package/dist/persistence/remoteRepositories.js +13 -1
  219. package/dist/persistence/remoteRepositories.js.map +1 -1
  220. package/dist/persistence/rpc-allowlist.d.ts +23 -0
  221. package/dist/persistence/rpc-allowlist.d.ts.map +1 -1
  222. package/dist/persistence/rpc-allowlist.js +56 -10
  223. package/dist/persistence/rpc-allowlist.js.map +1 -1
  224. package/dist/persistence/rpc-scope.logic.d.ts +15 -0
  225. package/dist/persistence/rpc-scope.logic.d.ts.map +1 -1
  226. package/dist/persistence/rpc-scope.logic.js +29 -0
  227. package/dist/persistence/rpc-scope.logic.js.map +1 -1
  228. package/dist/persistence/rpc.d.ts +11 -0
  229. package/dist/persistence/rpc.d.ts.map +1 -1
  230. package/dist/persistence/rpc.js +10 -1
  231. package/dist/persistence/rpc.js.map +1 -1
  232. package/package.json +8 -8
@@ -2,7 +2,7 @@ import { clearTaskSourceWebhookContract, configureTaskSourceWebhookContract, con
2
2
  import * as v from 'valibot';
3
3
  import { buildHonoRoute } from '@toad-contracts/hono';
4
4
  import { Hono } from 'hono';
5
- import { ValidationError } from '@cat-factory/kernel';
5
+ import { ValidationError, UnavailableError, UnauthorizedError, } from '@cat-factory/kernel';
6
6
  import { LinearOAuth } from '../../auth/LinearOAuth.js';
7
7
  import { StateSigner } from '../../github/state.js';
8
8
  import { requireWorkspacePermission } from '../../http/workspaceAccess.js';
@@ -11,7 +11,9 @@ import { param } from '../../http/params.js';
11
11
  function requireTasks(c) {
12
12
  return c.get('container').tasks ?? null;
13
13
  }
14
- const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Task-source integration is not configured' } }, 503);
14
+ const unavailable = () => {
15
+ throw new UnavailableError('Task-source integration is not configured');
16
+ };
15
17
  /** Read + validate the `:source` path param as a known source kind. */
16
18
  function sourceParam(c) {
17
19
  const source = param(c, 'source');
@@ -95,7 +97,7 @@ export function taskSourceController() {
95
97
  buildHonoRoute(app, listTaskSourcesContract, async (c) => {
96
98
  const tasks = requireTasks(c);
97
99
  if (!tasks)
98
- return unavailable(c);
100
+ return unavailable();
99
101
  const sources = await tasks.connectionService.listSourceStates(param(c, 'workspaceId'));
100
102
  return c.json({ sources }, 200);
101
103
  });
@@ -106,7 +108,7 @@ export function taskSourceController() {
106
108
  buildHonoRoute(app, setTaskSourceEnabledContract, async (c) => {
107
109
  const tasks = requireTasks(c);
108
110
  if (!tasks)
109
- return unavailable(c);
111
+ return unavailable();
110
112
  await tasks.connectionService.setEnabled(param(c, 'workspaceId'), sourceParam(c), c.req.valid('json').enabled);
111
113
  return c.body(null, 204);
112
114
  });
@@ -114,21 +116,21 @@ export function taskSourceController() {
114
116
  buildHonoRoute(app, listTaskConnectionsContract, async (c) => {
115
117
  const tasks = requireTasks(c);
116
118
  if (!tasks)
117
- return unavailable(c);
119
+ return unavailable();
118
120
  const connections = await tasks.connectionService.listConnections(param(c, 'workspaceId'));
119
121
  return c.json({ connections }, 200);
120
122
  });
121
123
  buildHonoRoute(app, connectTaskSourceContract, async (c) => {
122
124
  const tasks = requireTasks(c);
123
125
  if (!tasks)
124
- return unavailable(c);
126
+ return unavailable();
125
127
  const connection = await tasks.connectionService.connect(param(c, 'workspaceId'), sourceParam(c), c.req.valid('json').credentials);
126
128
  return c.json(connection, 201);
127
129
  });
128
130
  buildHonoRoute(app, disconnectTaskSourceContract, async (c) => {
129
131
  const tasks = requireTasks(c);
130
132
  if (!tasks)
131
- return unavailable(c);
133
+ return unavailable();
132
134
  await tasks.connectionService.disconnect(param(c, 'workspaceId'), sourceParam(c));
133
135
  return c.body(null, 204);
134
136
  });
@@ -140,7 +142,7 @@ export function taskSourceController() {
140
142
  buildHonoRoute(app, diagnoseTaskSourceContract, async (c) => {
141
143
  const tasks = requireTasks(c);
142
144
  if (!tasks)
143
- return unavailable(c);
145
+ return unavailable();
144
146
  const diagnostic = await tasks.connectionService.diagnose(param(c, 'workspaceId'), sourceParam(c));
145
147
  return c.json(diagnostic, 200);
146
148
  });
@@ -153,7 +155,7 @@ export function taskSourceController() {
153
155
  buildHonoRoute(app, getTaskSourceWebhookContract, async (c) => {
154
156
  const tasks = requireTasks(c);
155
157
  if (!tasks)
156
- return unavailable(c);
158
+ return unavailable();
157
159
  const state = await tasks.connectionService.getWebhookState(param(c, 'workspaceId'), sourceParam(c));
158
160
  return c.json(state, 200);
159
161
  });
@@ -162,7 +164,7 @@ export function taskSourceController() {
162
164
  buildHonoRoute(app, configureTaskSourceWebhookContract, async (c) => {
163
165
  const tasks = requireTasks(c);
164
166
  if (!tasks)
165
- return unavailable(c);
167
+ return unavailable();
166
168
  const minted = await tasks.connectionService.mintWebhookSecret(param(c, 'workspaceId'), sourceParam(c), c.req.valid('json'));
167
169
  return c.json(minted, 201);
168
170
  });
@@ -171,7 +173,7 @@ export function taskSourceController() {
171
173
  buildHonoRoute(app, updateTaskSourceWebhookContract, async (c) => {
172
174
  const tasks = requireTasks(c);
173
175
  if (!tasks)
174
- return unavailable(c);
176
+ return unavailable();
175
177
  const state = await tasks.connectionService.updateWebhookReplyAllow(param(c, 'workspaceId'), sourceParam(c), c.req.valid('json').replyAllow);
176
178
  return c.json(state, 200);
177
179
  });
@@ -180,7 +182,7 @@ export function taskSourceController() {
180
182
  buildHonoRoute(app, clearTaskSourceWebhookContract, async (c) => {
181
183
  const tasks = requireTasks(c);
182
184
  if (!tasks)
183
- return unavailable(c);
185
+ return unavailable();
184
186
  await tasks.connectionService.clearWebhookSecret(param(c, 'workspaceId'), sourceParam(c));
185
187
  return c.body(null, 204);
186
188
  });
@@ -190,7 +192,7 @@ export function taskSourceController() {
190
192
  buildHonoRoute(app, listLinearTeamsContract, async (c) => {
191
193
  const tasks = requireTasks(c);
192
194
  if (!tasks)
193
- return unavailable(c);
195
+ return unavailable();
194
196
  const teams = await tasks.connectionService.listLinearTeams(param(c, 'workspaceId'));
195
197
  return c.json({ teams }, 200);
196
198
  });
@@ -200,13 +202,13 @@ export function taskSourceController() {
200
202
  buildHonoRoute(app, getLinearInstallUrlContract, async (c) => {
201
203
  const tasks = requireTasks(c);
202
204
  if (!tasks)
203
- return unavailable(c);
205
+ return unavailable();
204
206
  const workspaceId = param(c, 'workspaceId');
205
207
  // OAuth app creds live in per-account deployment settings (sealed in the DB), resolved
206
208
  // dynamically — not env. Absent ⇒ OAuth isn't offered (manual API-key paste still works).
207
209
  const oauth = await tasks.connectionService.resolveLinearOAuthConfig(workspaceId);
208
210
  if (!oauth) {
209
- return c.json({ error: { code: 'unavailable', message: 'Linear OAuth is not configured' } }, 503);
211
+ throw new UnavailableError('Linear OAuth is not configured');
210
212
  }
211
213
  const signer = new StateSigner(c.get('container').config.auth.sessionSecret);
212
214
  const state = await signer.sign({
@@ -224,14 +226,14 @@ export function taskSourceController() {
224
226
  buildHonoRoute(app, listTasksContract, async (c) => {
225
227
  const tasks = requireTasks(c);
226
228
  if (!tasks)
227
- return unavailable(c);
229
+ return unavailable();
228
230
  const scope = await resolveListScope(c, c.req.valid('query').blockId);
229
231
  return c.json(await tasks.importService.listTasks(param(c, 'workspaceId'), scope), 200);
230
232
  });
231
233
  buildHonoRoute(app, importTaskContract, async (c) => {
232
234
  const tasks = requireTasks(c);
233
235
  if (!tasks)
234
- return unavailable(c);
236
+ return unavailable();
235
237
  const task = await tasks.importService.import(param(c, 'workspaceId'), sourceParam(c), c.req.valid('json').ref);
236
238
  return c.json(task, 201);
237
239
  });
@@ -240,7 +242,7 @@ export function taskSourceController() {
240
242
  buildHonoRoute(app, searchTasksContract, async (c) => {
241
243
  const tasks = requireTasks(c);
242
244
  if (!tasks)
243
- return unavailable(c);
245
+ return unavailable();
244
246
  const source = sourceParam(c);
245
247
  const { query, blockId } = c.req.valid('json');
246
248
  const scope = await resolveSearchScope(c, source, blockId);
@@ -252,7 +254,7 @@ export function taskSourceController() {
252
254
  buildHonoRoute(app, linkTaskContract, async (c) => {
253
255
  const tasks = requireTasks(c);
254
256
  if (!tasks)
255
- return unavailable(c);
257
+ return unavailable();
256
258
  const { source, externalId, blockId } = c.req.valid('json');
257
259
  const task = await tasks.linkService.linkToBlock(param(c, 'workspaceId'), blockId, source, externalId);
258
260
  return c.json(task, 201);
@@ -262,7 +264,7 @@ export function taskSourceController() {
262
264
  buildHonoRoute(app, createTaskFromIssueContract, async (c) => {
263
265
  const tasks = requireTasks(c);
264
266
  if (!tasks)
265
- return unavailable(c);
267
+ return unavailable();
266
268
  const { source, externalId, containerId } = c.req.valid('json');
267
269
  const result = await tasks.linkService.createTaskFromIssue(param(c, 'workspaceId'), containerId, source, externalId, c.get('user')?.id ?? null);
268
270
  return c.json(result, 201);
@@ -273,7 +275,7 @@ export function taskSourceController() {
273
275
  buildHonoRoute(app, spawnEpicContract, async (c) => {
274
276
  const tasks = requireTasks(c);
275
277
  if (!tasks)
276
- return unavailable(c);
278
+ return unavailable();
277
279
  const { ref, containerId, position } = c.req.valid('json');
278
280
  const result = await tasks.linkService.spawnEpic(param(c, 'workspaceId'), sourceParam(c), ref, containerId, c.get('user')?.id ?? null, position);
279
281
  return c.json(result, 201);
@@ -293,7 +295,7 @@ export function linearOAuthController() {
293
295
  const container = c.get('container');
294
296
  const tasks = container.tasks;
295
297
  if (!tasks)
296
- return unavailable(c);
298
+ return unavailable();
297
299
  const code = c.req.query('code');
298
300
  if (!code) {
299
301
  return c.json({ error: { code: 'validation', message: 'Missing code' } }, 400);
@@ -301,13 +303,13 @@ export function linearOAuthController() {
301
303
  const signer = new StateSigner(container.config.auth.sessionSecret);
302
304
  const state = await signer.verify(c.req.query('state') ?? null);
303
305
  if (!state) {
304
- return c.json({ error: { code: 'unauthorized', message: 'Invalid or expired state' } }, 401);
306
+ throw new UnauthorizedError('Invalid or expired state');
305
307
  }
306
308
  // Resolve the account's OAuth creds (per-account deployment settings, not env). The
307
309
  // redirect_uri must match the install-url + the registered app, so reuse the stored one.
308
310
  const oauth = await tasks.connectionService.resolveLinearOAuthConfig(state.workspaceId);
309
311
  if (!oauth)
310
- return unavailable(c);
312
+ return unavailable();
311
313
  const token = await new LinearOAuth({
312
314
  clientId: oauth.clientId,
313
315
  clientSecret: oauth.clientSecret,
@@ -1 +1 @@
1
- {"version":3,"file":"TaskSourceController.js","sourceRoot":"","sources":["../../../src/modules/tasks/TaskSourceController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TaskSourceController.js","sourceRoot":"","sources":["../../../src/modules/tasks/TaskSourceController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TaskWebhookController.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/TaskWebhookController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAK3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,CA6EpD"}
1
+ {"version":3,"file":"TaskWebhookController.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/TaskWebhookController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAU3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,CAuEpD"}
@@ -1,5 +1,5 @@
1
1
  import { Hono } from 'hono';
2
- import { isTaskSourceKind, trackerWebhookSecret } from '@cat-factory/kernel';
2
+ import { isTaskSourceKind, trackerWebhookSecret, UnavailableError, UnauthorizedError, } from '@cat-factory/kernel';
3
3
  import { webhookBodyLimit } from '../../webhooks/bodyLimit.js';
4
4
  import { logger } from '../../observability/logger.js';
5
5
  /**
@@ -30,7 +30,7 @@ export function taskWebhookController() {
30
30
  const tasks = container.tasks;
31
31
  const trackerWebhook = container.trackerWebhook;
32
32
  if (!tasks || !trackerWebhook) {
33
- return c.json({ error: { code: 'unavailable', message: 'Task sources are not configured' } }, 503);
33
+ throw new UnavailableError('Task sources are not configured');
34
34
  }
35
35
  // A provider with no webhook capability 404s rather than 503s: unlike an unconfigured
36
36
  // deployment this will never start working, so an operator who pasted the wrong URL should
@@ -46,7 +46,7 @@ export function taskWebhookController() {
46
46
  // Fail CLOSED on an unconfigured secret: an empty HMAC key is one an attacker also has, so
47
47
  // this must never degrade to "accept anything". 503 (not 401) because the remedy is the
48
48
  // operator's — mint a secret on the connection — not the caller's.
49
- return c.json({ error: { code: 'unavailable', message: 'No webhook secret configured' } }, 503);
49
+ throw new UnavailableError('No webhook secret configured');
50
50
  }
51
51
  // Verify against the RAW bytes before parsing. Hono's `header()` (no arg) returns every header
52
52
  // with lower-cased keys, which is what the adapters' scheme names assume.
@@ -66,7 +66,7 @@ export function taskWebhookController() {
66
66
  `workspace's ${sourceParam} connection differ — re-mint the secret via ` +
67
67
  `POST /workspaces/${workspaceId}/task-sources/${sourceParam}/webhook and paste the ` +
68
68
  `returned value into the tracker.`, { event: 'tracker_webhook_signature_rejected', source: sourceParam, workspaceId });
69
- return c.json({ error: { code: 'unauthorized', message: 'Invalid signature' } }, 401);
69
+ throw new UnauthorizedError('Invalid signature');
70
70
  }
71
71
  // Verified but unrecognised ⇒ ack. Trackers send far more event kinds than we consume, and
72
72
  // retrying a shape we will never act on just makes the vendor redeliver it forever.
@@ -1 +1 @@
1
- {"version":3,"file":"TaskWebhookController.js","sourceRoot":"","sources":["../../../src/modules/tasks/TaskWebhookController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAGtD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACtE,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACzC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QACvF,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAA;QAC7B,MAAM,cAAc,GAAG,SAAS,CAAC,cAAc,CAAA;QAC/C,IAAI,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9B,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,iCAAiC,EAAE,EAAE,EAC9E,GAAG,CACJ,CAAA;QACH,CAAC;QAED,sFAAsF;QACtF,2FAA2F;QAC3F,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACjE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,WAAW,2BAA2B,EAAE,EAAE,EACpF,GAAG,CACJ,CAAA;QACH,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAC9C,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QAC9F,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;QAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,2FAA2F;YAC3F,wFAAwF;YACxF,mEAAmE;YACnE,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,8BAA8B,EAAE,EAAE,EAC3E,GAAG,CACJ,CAAA;QACH,CAAC;QAED,+FAA+F;QAC/F,0EAA0E;QAC1E,MAAM,QAAQ,GAA2B;YACvC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;YAC/E,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE;YACvB,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;SAC/B,CAAA;QACD,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;YACvD,8FAA8F;YAC9F,8FAA8F;YAC9F,uFAAuF;YACvF,8FAA8F;YAC9F,2BAA2B;YAC3B,MAAM,CAAC,IAAI,CACT,KAAK,WAAW,mCAAmC,WAAW,6BAA6B;gBACzF,wFAAwF;gBACxF,eAAe,WAAW,8CAA8C;gBACxE,oBAAoB,WAAW,iBAAiB,WAAW,yBAAyB;gBACpF,kCAAkC,EACpC,EAAE,KAAK,EAAE,oCAAoC,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CAClF,CAAA;YACD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QACvF,CAAC;QAED,2FAA2F;QAC3F,oFAAoF;QACpF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAEpC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QACvF,IAAI,CAAC,MAAM;YAAE,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QACpE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"TaskWebhookController.js","sourceRoot":"","sources":["../../../src/modules/tasks/TaskWebhookController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TestSecretsController.d.ts","sourceRoot":"","sources":["../../../src/modules/testSecrets/TestSecretsController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAoB/C;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,CA6BpD"}
1
+ {"version":3,"file":"TestSecretsController.d.ts","sourceRoot":"","sources":["../../../src/modules/testSecrets/TestSecretsController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAgB/C;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,CA6BpD"}
@@ -3,16 +3,14 @@ import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
4
  import { requireWorkspacePermission } from '../../http/workspaceAccess.js';
5
5
  import { param } from '../../http/params.js';
6
+ import { UnavailableError } from '@cat-factory/kernel';
6
7
  /** Resolve the test-secrets service or send a 503, returning null when unconfigured. */
7
8
  function requireTestSecrets(c) {
8
9
  return c.get('container').testSecrets ?? null;
9
10
  }
10
- const unavailable = (c) => c.json({
11
- error: {
12
- code: 'unavailable',
13
- message: 'The sensitive test-credential store is not configured (needs ENCRYPTION_KEY)',
14
- },
15
- }, 503);
11
+ const unavailable = () => {
12
+ throw new UnavailableError('The sensitive test-credential store is not configured (needs ENCRYPTION_KEY)');
13
+ };
16
14
  /**
17
15
  * The SENSITIVE per-service test-credential store: sealed at rest, delivered to the Tester
18
16
  * out of band (never in a prompt or the telemetry snapshot). Values are write-only — the view
@@ -25,20 +23,20 @@ export function testSecretsController() {
25
23
  buildHonoRoute(app, getServiceTestSecretsContract, async (c) => {
26
24
  const svc = requireTestSecrets(c);
27
25
  if (!svc)
28
- return unavailable(c);
26
+ return unavailable();
29
27
  return c.json(await svc.getView(param(c, 'workspaceId'), c.req.valid('param').blockId), 200);
30
28
  });
31
29
  buildHonoRoute(app, setServiceTestSecretsContract, async (c) => {
32
30
  const svc = requireTestSecrets(c);
33
31
  if (!svc)
34
- return unavailable(c);
32
+ return unavailable();
35
33
  const view = await svc.set(param(c, 'workspaceId'), c.req.valid('param').blockId, c.req.valid('json'));
36
34
  return c.json(view, 200);
37
35
  });
38
36
  buildHonoRoute(app, deleteServiceTestSecretsContract, async (c) => {
39
37
  const svc = requireTestSecrets(c);
40
38
  if (!svc)
41
- return unavailable(c);
39
+ return unavailable();
42
40
  await svc.deleteFor(param(c, 'workspaceId'), c.req.valid('param').blockId);
43
41
  return c.body(null, 204);
44
42
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TestSecretsController.js","sourceRoot":"","sources":["../../../src/modules/testSecrets/TestSecretsController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C,wFAAwF;AACxF,SAAS,kBAAkB,CAAmB,CAAa;IACzD,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,WAAW,IAAI,IAAI,CAAA;AAC/C,CAAC;AAED,MAAM,WAAW,GAAG,CAAmB,CAAa,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,CACJ;IACE,KAAK,EAAE;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,8EAA8E;KACxF;CACF,EACD,GAAG,CACJ,CAAA;AAEH;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAE1D,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CACxB,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAC5B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CACpB,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChE,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAA;QAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"TestSecretsController.js","sourceRoot":"","sources":["../../../src/modules/testSecrets/TestSecretsController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,wFAAwF;AACxF,SAAS,kBAAkB,CAAmB,CAAa;IACzD,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,WAAW,IAAI,IAAI,CAAA;AAC/C,CAAC;AAED,MAAM,WAAW,GAAG,GAAU,EAAE;IAC9B,MAAM,IAAI,gBAAgB,CACxB,8EAA8E,CAC/E,CAAA;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAE1D,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,EAAE,CAAA;QAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,EAAE,CAAA;QAC9B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CACxB,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAC5B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CACpB,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChE,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,EAAE,CAAA;QAC9B,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAA;QAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserSettingsController.d.ts","sourceRoot":"","sources":["../../../src/modules/userSettings/UserSettingsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAe/C,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,MAAM,CAAC,CAoBrD"}
1
+ {"version":3,"file":"UserSettingsController.d.ts","sourceRoot":"","sources":["../../../src/modules/userSettings/UserSettingsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAe/C,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,MAAM,CAAC,CAoBrD"}
@@ -1,29 +1,34 @@
1
1
  import { getUserSettingsContract, updateUserSettingsContract } from '@cat-factory/contracts';
2
2
  import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
+ import { UnavailableError, UnauthorizedError } from '@cat-factory/kernel';
4
5
  // Per-USER settings (today: the user-tier spend budget). Scoped to the signed-in user
5
6
  // (not a workspace), mounted at the root, like personal subscriptions + local model
6
7
  // runners. Absent user-settings persistence ⇒ 503 (unconfigured facade / tests).
7
- const signInRequired = (c) => c.json({ error: { code: 'unauthorized', message: 'Sign in to manage your settings' } }, 401);
8
- const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'User settings storage is not configured' } }, 503);
8
+ const signInRequired = () => {
9
+ throw new UnauthorizedError('Sign in to manage your settings');
10
+ };
11
+ const unavailable = () => {
12
+ throw new UnavailableError('User settings storage is not configured');
13
+ };
9
14
  export function userSettingsController() {
10
15
  const app = new Hono();
11
16
  buildHonoRoute(app, getUserSettingsContract, async (c) => {
12
17
  const settings = c.get('container').userSettings;
13
18
  if (!settings)
14
- return unavailable(c);
19
+ return unavailable();
15
20
  const user = c.get('user');
16
21
  if (!user)
17
- return signInRequired(c);
22
+ return signInRequired();
18
23
  return c.json(await settings.service.get(user.id), 200);
19
24
  });
20
25
  buildHonoRoute(app, updateUserSettingsContract, async (c) => {
21
26
  const settings = c.get('container').userSettings;
22
27
  if (!settings)
23
- return unavailable(c);
28
+ return unavailable();
24
29
  const user = c.get('user');
25
30
  if (!user)
26
- return signInRequired(c);
31
+ return signInRequired();
27
32
  return c.json(await settings.service.update(user.id, c.req.valid('json')), 200);
28
33
  });
29
34
  return app;
@@ -1 +1 @@
1
- {"version":3,"file":"UserSettingsController.js","sourceRoot":"","sources":["../../../src/modules/userSettings/UserSettingsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,sFAAsF;AACtF,oFAAoF;AACpF,iFAAiF;AAEjF,MAAM,cAAc,GAAG,CAAmB,CAAa,EAAE,EAAE,CACzD,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iCAAiC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;AAE9F,MAAM,WAAW,GAAG,CAAmB,CAAa,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,CACJ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,yCAAyC,EAAE,EAAE,EACtF,GAAG,CACJ,CAAA;AAEH,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvD,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,YAAY,CAAA;QAChD,IAAI,CAAC,QAAQ;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,YAAY,CAAA;QAChD,IAAI,CAAC,QAAQ;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"UserSettingsController.js","sourceRoot":"","sources":["../../../src/modules/userSettings/UserSettingsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEzE,sFAAsF;AACtF,oFAAoF;AACpF,iFAAiF;AAEjF,MAAM,cAAc,GAAG,GAAU,EAAE;IACjC,MAAM,IAAI,iBAAiB,CAAC,iCAAiC,CAAC,CAAA;AAChE,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,GAAU,EAAE;IAC9B,MAAM,IAAI,gBAAgB,CAAC,yCAAyC,CAAC,CAAA;AACvE,CAAC,CAAA;AAED,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvD,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,YAAY,CAAA;QAChD,IAAI,CAAC,QAAQ;YAAE,OAAO,WAAW,EAAE,CAAA;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,cAAc,EAAE,CAAA;QAClC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,YAAY,CAAA;QAChD,IAAI,CAAC,QAAQ;YAAE,OAAO,WAAW,EAAE,CAAA;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,cAAc,EAAE,CAAA;QAClC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValidationConfigController.d.ts","sourceRoot":"","sources":["../../../src/modules/validation/ValidationConfigController.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAoB/C;;;;;;GAMG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAAC,MAAM,CAAC,CAmCzD"}
1
+ {"version":3,"file":"ValidationConfigController.d.ts","sourceRoot":"","sources":["../../../src/modules/validation/ValidationConfigController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAK3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc/C;;;;;;GAMG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAAC,MAAM,CAAC,CA2EzD"}
@@ -1,18 +1,18 @@
1
- import { deleteServiceValidationConfigContract, getServiceValidationConfigContract, listServiceValidationConfigsContract, setServiceValidationConfigContract, } from '@cat-factory/contracts';
1
+ import { deleteServiceValidationConfigContract, detectServiceValidationChecksContract, getServiceValidationConfigContract, listServiceValidationConfigsContract, setServiceValidationConfigContract, } from '@cat-factory/contracts';
2
2
  import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
+ import { detectValidationChecksFromRepo } from '@cat-factory/integrations';
5
+ import { describeError } from '@cat-factory/kernel';
4
6
  import { requireWorkspacePermission } from '../../http/workspaceAccess.js';
5
7
  import { param } from '../../http/params.js';
8
+ import { UnavailableError } from '@cat-factory/kernel';
6
9
  /** Resolve the validation-config service or send a 503, returning null when unconfigured. */
7
10
  function requireValidationConfig(c) {
8
11
  return c.get('container').validationConfig ?? null;
9
12
  }
10
- const unavailable = (c) => c.json({
11
- error: {
12
- code: 'unavailable',
13
- message: 'The validation-check store is not configured',
14
- },
15
- }, 503);
13
+ const unavailable = () => {
14
+ throw new UnavailableError('The validation-check store is not configured');
15
+ };
16
16
  /**
17
17
  * Per-service PRE-PR VALIDATION CHECKS: the shell commands the executor-harness runs against
18
18
  * the checkout after the coding agent settles and BEFORE the PR opens (see
@@ -26,26 +26,67 @@ export function validationConfigController() {
26
26
  buildHonoRoute(app, listServiceValidationConfigsContract, async (c) => {
27
27
  const svc = requireValidationConfig(c);
28
28
  if (!svc)
29
- return unavailable(c);
29
+ return unavailable();
30
30
  return c.json(await svc.list(param(c, 'workspaceId')), 200);
31
31
  });
32
32
  buildHonoRoute(app, getServiceValidationConfigContract, async (c) => {
33
33
  const svc = requireValidationConfig(c);
34
34
  if (!svc)
35
- return unavailable(c);
35
+ return unavailable();
36
36
  return c.json(await svc.getView(param(c, 'workspaceId'), c.req.valid('param').blockId), 200);
37
37
  });
38
38
  buildHonoRoute(app, setServiceValidationConfigContract, async (c) => {
39
39
  const svc = requireValidationConfig(c);
40
40
  if (!svc)
41
- return unavailable(c);
41
+ return unavailable();
42
42
  const view = await svc.set(param(c, 'workspaceId'), c.req.valid('param').blockId, c.req.valid('json'));
43
43
  return c.json(view, 200);
44
44
  });
45
+ // Suggest checks from the service repo's own manifests (the panel's "Detect" button).
46
+ // A pure READ that writes nothing: it fills the operator's rows, and they save as usual.
47
+ //
48
+ // Deliberately independent of the config STORE (`requireValidationConfig`) — detection
49
+ // reads the repo, not the table, so a facade that wired no store would still answer here.
50
+ // The store's absence hides the whole panel client-side, so this never strands a control.
51
+ buildHonoRoute(app, detectServiceValidationChecksContract, async (c) => {
52
+ const container = c.get('container');
53
+ const resolve = container.resolveRunRepoContext;
54
+ // The three outcomes are REPORTED, never collapsed into an empty list: "no repo linked"
55
+ // and "GitHub read failed" send an operator to completely different places than "we read
56
+ // your repo and recognised nothing".
57
+ const empty = (status) => ({
58
+ status,
59
+ ecosystems: [],
60
+ checks: [],
61
+ truncated: false,
62
+ });
63
+ if (!resolve)
64
+ return c.json(empty('repo_unavailable'), 200);
65
+ const workspaceId = param(c, 'workspaceId');
66
+ const blockId = c.req.valid('param').blockId;
67
+ try {
68
+ const ctx = await resolve(workspaceId, blockId);
69
+ if (!ctx)
70
+ return c.json(empty('repo_unavailable'), 200);
71
+ const detected = await detectValidationChecksFromRepo(ctx.repo, ctx.baseBranch);
72
+ return c.json({ status: 'ok', ...detected }, 200);
73
+ }
74
+ catch (error) {
75
+ // A block with no linked service throws in the resolver, and a revoked token / rate
76
+ // limit throws in the read. Both are a FAILED detection the panel states plainly —
77
+ // never a 500 on an assistive button, and never a silent empty result.
78
+ container.logger.warn('pre-PR validation autodetect failed', {
79
+ workspaceId,
80
+ blockId,
81
+ ...describeError(error),
82
+ });
83
+ return c.json(empty('failed'), 200);
84
+ }
85
+ });
45
86
  buildHonoRoute(app, deleteServiceValidationConfigContract, async (c) => {
46
87
  const svc = requireValidationConfig(c);
47
88
  if (!svc)
48
- return unavailable(c);
89
+ return unavailable();
49
90
  await svc.deleteFor(param(c, 'workspaceId'), c.req.valid('param').blockId);
50
91
  return c.body(null, 204);
51
92
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ValidationConfigController.js","sourceRoot":"","sources":["../../../src/modules/validation/ValidationConfigController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qCAAqC,EACrC,kCAAkC,EAClC,oCAAoC,EACpC,kCAAkC,GACnC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C,6FAA6F;AAC7F,SAAS,uBAAuB,CAAmB,CAAa;IAC9D,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,gBAAgB,IAAI,IAAI,CAAA;AACpD,CAAC;AAED,MAAM,WAAW,GAAG,CAAmB,CAAa,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,CACJ;IACE,KAAK,EAAE;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,8CAA8C;KACxD;CACF,EACD,GAAG,CACJ,CAAA;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAE3D,cAAc,CAAC,GAAG,EAAE,oCAAoC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpE,MAAM,GAAG,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClE,MAAM,GAAG,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClE,MAAM,GAAG,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CACxB,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAC5B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CACpB,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,qCAAqC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrE,MAAM,GAAG,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAA;QAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"ValidationConfigController.js","sourceRoot":"","sources":["../../../src/modules/validation/ValidationConfigController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"VcsWebhookController.d.ts","sourceRoot":"","sources":["../../../src/modules/vcs/VcsWebhookController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAI/C;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CAqEnD"}
1
+ {"version":3,"file":"VcsWebhookController.d.ts","sourceRoot":"","sources":["../../../src/modules/vcs/VcsWebhookController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAI/C;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CA4DnD"}
@@ -1,5 +1,5 @@
1
1
  import { Hono } from 'hono';
2
- import { isVcsProvider } from '@cat-factory/kernel';
2
+ import { isVcsProvider, UnavailableError, UnauthorizedError } from '@cat-factory/kernel';
3
3
  import { webhookBodyLimit } from '../../webhooks/bodyLimit.js';
4
4
  import { logWebhookSignatureRejection } from '../../webhooks/signatureLog.js';
5
5
  /**
@@ -24,18 +24,18 @@ export function vcsWebhookController() {
24
24
  }
25
25
  const bundle = c.get('container').vcsRegistry.get(providerParam);
26
26
  if (!bundle) {
27
- return c.json({ error: { code: 'unavailable', message: `${providerParam} is not configured` } }, 503);
27
+ throw new UnavailableError(`${providerParam} is not configured`);
28
28
  }
29
29
  const connection = resolveConnection(c.get('container').config, providerParam);
30
30
  if (!connection) {
31
- return c.json({ error: { code: 'unavailable', message: `${providerParam} connection not configured` } }, 503);
31
+ throw new UnavailableError(`${providerParam} connection not configured`);
32
32
  }
33
33
  // Verify against the RAW bytes before parsing. Each provider keys off a different
34
34
  // header — GitLab's caller-chosen `X-Gitlab-Token`, GitHub's HMAC `X-Hub-Signature-256`.
35
35
  const raw = await c.req.arrayBuffer();
36
36
  const signatureHeader = c.req.header('x-gitlab-token') ?? c.req.header('x-hub-signature-256') ?? null;
37
37
  if (!bundle.webhookVerifier) {
38
- return c.json({ error: { code: 'unavailable', message: 'Webhook verification not configured' } }, 503);
38
+ throw new UnavailableError('Webhook verification not configured');
39
39
  }
40
40
  if (!(await bundle.webhookVerifier.verify(raw, signatureHeader))) {
41
41
  // Response stays terse (external caller); log the operator-facing setup remedy. NOTE: a
@@ -47,7 +47,7 @@ export function vcsWebhookController() {
47
47
  secretConfigured: connectionSecret(c.get('container').config, providerParam) !== '',
48
48
  signaturePresent: !!signatureHeader,
49
49
  });
50
- return c.json({ error: { code: 'unauthorized', message: 'Invalid signature' } }, 401);
50
+ throw new UnauthorizedError('Invalid signature');
51
51
  }
52
52
  let payload;
53
53
  try {