@cat-factory/server 0.167.0 → 0.170.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 (220) hide show
  1. package/dist/agents/modelProviderResolver.d.ts +9 -1
  2. package/dist/agents/modelProviderResolver.d.ts.map +1 -1
  3. package/dist/agents/modelProviderResolver.js +1 -0
  4. package/dist/agents/modelProviderResolver.js.map +1 -1
  5. package/dist/agents/storeAgentContextGate.d.ts +36 -0
  6. package/dist/agents/storeAgentContextGate.d.ts.map +1 -0
  7. package/dist/agents/storeAgentContextGate.js +36 -0
  8. package/dist/agents/storeAgentContextGate.js.map +1 -0
  9. package/dist/app.d.ts.map +1 -1
  10. package/dist/app.js +5 -0
  11. package/dist/app.js.map +1 -1
  12. package/dist/auth/middleware.d.ts.map +1 -1
  13. package/dist/auth/middleware.js +2 -1
  14. package/dist/auth/middleware.js.map +1 -1
  15. package/dist/http/errorHandler.d.ts.map +1 -1
  16. package/dist/http/errorHandler.js +6 -0
  17. package/dist/http/errorHandler.js.map +1 -1
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/modules/accounts/AccountController.d.ts.map +1 -1
  23. package/dist/modules/accounts/AccountController.js +37 -31
  24. package/dist/modules/accounts/AccountController.js.map +1 -1
  25. package/dist/modules/agentRuns/AgentRunController.d.ts.map +1 -1
  26. package/dist/modules/agentRuns/AgentRunController.js +9 -6
  27. package/dist/modules/agentRuns/AgentRunController.js.map +1 -1
  28. package/dist/modules/artifacts/ArtifactController.d.ts.map +1 -1
  29. package/dist/modules/artifacts/ArtifactController.js +8 -5
  30. package/dist/modules/artifacts/ArtifactController.js.map +1 -1
  31. package/dist/modules/artifacts/HarnessArtifactController.d.ts.map +1 -1
  32. package/dist/modules/artifacts/HarnessArtifactController.js +5 -4
  33. package/dist/modules/artifacts/HarnessArtifactController.js.map +1 -1
  34. package/dist/modules/auth/AuthController.d.ts.map +1 -1
  35. package/dist/modules/auth/AuthController.js +48 -50
  36. package/dist/modules/auth/AuthController.js.map +1 -1
  37. package/dist/modules/bootstrap/BootstrapController.d.ts.map +1 -1
  38. package/dist/modules/bootstrap/BootstrapController.js +12 -9
  39. package/dist/modules/bootstrap/BootstrapController.js.map +1 -1
  40. package/dist/modules/brainstorm/BrainstormController.d.ts.map +1 -1
  41. package/dist/modules/brainstorm/BrainstormController.js +12 -9
  42. package/dist/modules/brainstorm/BrainstormController.js.map +1 -1
  43. package/dist/modules/bugHunt/BugHuntController.d.ts.map +1 -1
  44. package/dist/modules/bugHunt/BugHuntController.js +7 -5
  45. package/dist/modules/bugHunt/BugHuntController.js.map +1 -1
  46. package/dist/modules/clarity/ClarityReviewController.d.ts.map +1 -1
  47. package/dist/modules/clarity/ClarityReviewController.js +12 -9
  48. package/dist/modules/clarity/ClarityReviewController.js.map +1 -1
  49. package/dist/modules/docInterview/DocInterviewController.d.ts.map +1 -1
  50. package/dist/modules/docInterview/DocInterviewController.js +8 -5
  51. package/dist/modules/docInterview/DocInterviewController.js.map +1 -1
  52. package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -1
  53. package/dist/modules/documents/DocumentSourceController.js +17 -15
  54. package/dist/modules/documents/DocumentSourceController.js.map +1 -1
  55. package/dist/modules/environments/EnvironmentController.d.ts.map +1 -1
  56. package/dist/modules/environments/EnvironmentController.js +33 -33
  57. package/dist/modules/environments/EnvironmentController.js.map +1 -1
  58. package/dist/modules/environments/EnvironmentUserHandlerController.d.ts.map +1 -1
  59. package/dist/modules/environments/EnvironmentUserHandlerController.js +13 -9
  60. package/dist/modules/environments/EnvironmentUserHandlerController.js.map +1 -1
  61. package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts.map +1 -1
  62. package/dist/modules/fragmentLibrary/FragmentLibraryController.js +32 -41
  63. package/dist/modules/fragmentLibrary/FragmentLibraryController.js.map +1 -1
  64. package/dist/modules/github/GitHubController.d.ts.map +1 -1
  65. package/dist/modules/github/GitHubController.js +26 -23
  66. package/dist/modules/github/GitHubController.js.map +1 -1
  67. package/dist/modules/github/GitHubWebhookController.d.ts.map +1 -1
  68. package/dist/modules/github/GitHubWebhookController.js +5 -4
  69. package/dist/modules/github/GitHubWebhookController.js.map +1 -1
  70. package/dist/modules/gitlab/GitLabController.d.ts.map +1 -1
  71. package/dist/modules/gitlab/GitLabController.js +7 -4
  72. package/dist/modules/gitlab/GitLabController.js.map +1 -1
  73. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.d.ts.map +1 -1
  74. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js +7 -9
  75. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js.map +1 -1
  76. package/dist/modules/initiatives/InitiativeController.d.ts.map +1 -1
  77. package/dist/modules/initiatives/InitiativeController.js +20 -17
  78. package/dist/modules/initiatives/InitiativeController.js.map +1 -1
  79. package/dist/modules/kaizen/KaizenController.d.ts.map +1 -1
  80. package/dist/modules/kaizen/KaizenController.js +6 -3
  81. package/dist/modules/kaizen/KaizenController.js.map +1 -1
  82. package/dist/modules/llmProxy/LlmProxyController.d.ts.map +1 -1
  83. package/dist/modules/llmProxy/LlmProxyController.js +41 -12
  84. package/dist/modules/llmProxy/LlmProxyController.js.map +1 -1
  85. package/dist/modules/localModels/LocalModelEndpointController.d.ts.map +1 -1
  86. package/dist/modules/localModels/LocalModelEndpointController.js +15 -10
  87. package/dist/modules/localModels/LocalModelEndpointController.js.map +1 -1
  88. package/dist/modules/localSettings/LocalSettingsController.d.ts.map +1 -1
  89. package/dist/modules/localSettings/LocalSettingsController.js +6 -8
  90. package/dist/modules/localSettings/LocalSettingsController.js.map +1 -1
  91. package/dist/modules/localSettings/MothershipConnectController.d.ts.map +1 -1
  92. package/dist/modules/localSettings/MothershipConnectController.js +2 -6
  93. package/dist/modules/localSettings/MothershipConnectController.js.map +1 -1
  94. package/dist/modules/merge/MergeTrackRecordController.d.ts.map +1 -1
  95. package/dist/modules/merge/MergeTrackRecordController.js +6 -3
  96. package/dist/modules/merge/MergeTrackRecordController.js.map +1 -1
  97. package/dist/modules/merge/RiskPolicyController.d.ts.map +1 -1
  98. package/dist/modules/merge/RiskPolicyController.js +9 -6
  99. package/dist/modules/merge/RiskPolicyController.js.map +1 -1
  100. package/dist/modules/modelPresets/ModelPresetController.d.ts.map +1 -1
  101. package/dist/modules/modelPresets/ModelPresetController.js +9 -6
  102. package/dist/modules/modelPresets/ModelPresetController.js.map +1 -1
  103. package/dist/modules/notificationWebhook/NotificationWebhookController.d.ts.map +1 -1
  104. package/dist/modules/notificationWebhook/NotificationWebhookController.js +7 -4
  105. package/dist/modules/notificationWebhook/NotificationWebhookController.js.map +1 -1
  106. package/dist/modules/notifications/NotificationController.d.ts.map +1 -1
  107. package/dist/modules/notifications/NotificationController.js +7 -4
  108. package/dist/modules/notifications/NotificationController.js.map +1 -1
  109. package/dist/modules/observability/PlatformObservabilityController.d.ts.map +1 -1
  110. package/dist/modules/observability/PlatformObservabilityController.js +6 -8
  111. package/dist/modules/observability/PlatformObservabilityController.js.map +1 -1
  112. package/dist/modules/openrouter/OpenRouterCatalogController.d.ts.map +1 -1
  113. package/dist/modules/openrouter/OpenRouterCatalogController.js +13 -8
  114. package/dist/modules/openrouter/OpenRouterCatalogController.js.map +1 -1
  115. package/dist/modules/packageRegistries/PackageRegistriesController.d.ts.map +1 -1
  116. package/dist/modules/packageRegistries/PackageRegistriesController.js +7 -9
  117. package/dist/modules/packageRegistries/PackageRegistriesController.js.map +1 -1
  118. package/dist/modules/persistence/GitHubDelegationController.d.ts.map +1 -1
  119. package/dist/modules/persistence/GitHubDelegationController.js +3 -7
  120. package/dist/modules/persistence/GitHubDelegationController.js.map +1 -1
  121. package/dist/modules/preflight/PreflightController.d.ts.map +1 -1
  122. package/dist/modules/preflight/PreflightController.js +5 -7
  123. package/dist/modules/preflight/PreflightController.js.map +1 -1
  124. package/dist/modules/preview/PreviewController.d.ts.map +1 -1
  125. package/dist/modules/preview/PreviewController.js +7 -9
  126. package/dist/modules/preview/PreviewController.js.map +1 -1
  127. package/dist/modules/providers/ApiKeyController.d.ts.map +1 -1
  128. package/dist/modules/providers/ApiKeyController.js +19 -14
  129. package/dist/modules/providers/ApiKeyController.js.map +1 -1
  130. package/dist/modules/providers/PersonalSubscriptionController.d.ts.map +1 -1
  131. package/dist/modules/providers/PersonalSubscriptionController.js +13 -8
  132. package/dist/modules/providers/PersonalSubscriptionController.js.map +1 -1
  133. package/dist/modules/providers/UserSecretController.d.ts.map +1 -1
  134. package/dist/modules/providers/UserSecretController.js +17 -12
  135. package/dist/modules/providers/UserSecretController.js.map +1 -1
  136. package/dist/modules/providers/VendorCredentialController.d.ts.map +1 -1
  137. package/dist/modules/providers/VendorCredentialController.js +8 -10
  138. package/dist/modules/providers/VendorCredentialController.js.map +1 -1
  139. package/dist/modules/provisioningLogs/ProvisioningLogController.d.ts.map +1 -1
  140. package/dist/modules/provisioningLogs/ProvisioningLogController.js +6 -3
  141. package/dist/modules/provisioningLogs/ProvisioningLogController.js.map +1 -1
  142. package/dist/modules/publicApi/PublicApiController.js +4 -4
  143. package/dist/modules/publicApi/PublicApiController.js.map +1 -1
  144. package/dist/modules/publicApi/PublicApiKeyController.d.ts.map +1 -1
  145. package/dist/modules/publicApi/PublicApiKeyController.js +7 -4
  146. package/dist/modules/publicApi/PublicApiKeyController.js.map +1 -1
  147. package/dist/modules/publicApi/PublicDebugController.d.ts +4 -0
  148. package/dist/modules/publicApi/PublicDebugController.d.ts.map +1 -0
  149. package/dist/modules/publicApi/PublicDebugController.js +241 -0
  150. package/dist/modules/publicApi/PublicDebugController.js.map +1 -0
  151. package/dist/modules/recurring/RecurringPipelineController.d.ts.map +1 -1
  152. package/dist/modules/recurring/RecurringPipelineController.js +10 -7
  153. package/dist/modules/recurring/RecurringPipelineController.js.map +1 -1
  154. package/dist/modules/recurring/TrackerSettingsController.d.ts.map +1 -1
  155. package/dist/modules/recurring/TrackerSettingsController.js +6 -3
  156. package/dist/modules/recurring/TrackerSettingsController.js.map +1 -1
  157. package/dist/modules/releaseHealth/ReleaseHealthController.d.ts.map +1 -1
  158. package/dist/modules/releaseHealth/ReleaseHealthController.js +10 -7
  159. package/dist/modules/releaseHealth/ReleaseHealthController.js.map +1 -1
  160. package/dist/modules/reports/ReportsController.d.ts.map +1 -1
  161. package/dist/modules/reports/ReportsController.js +6 -3
  162. package/dist/modules/reports/ReportsController.js.map +1 -1
  163. package/dist/modules/requirements/RequirementReviewController.d.ts.map +1 -1
  164. package/dist/modules/requirements/RequirementReviewController.js +16 -13
  165. package/dist/modules/requirements/RequirementReviewController.js.map +1 -1
  166. package/dist/modules/runners/RunnerPoolController.d.ts.map +1 -1
  167. package/dist/modules/runners/RunnerPoolController.js +10 -7
  168. package/dist/modules/runners/RunnerPoolController.js.map +1 -1
  169. package/dist/modules/sandbox/SandboxController.d.ts.map +1 -1
  170. package/dist/modules/sandbox/SandboxController.js +17 -14
  171. package/dist/modules/sandbox/SandboxController.js.map +1 -1
  172. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts.map +1 -1
  173. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js +6 -3
  174. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js.map +1 -1
  175. package/dist/modules/services/ServiceMountController.d.ts.map +1 -1
  176. package/dist/modules/services/ServiceMountController.js +9 -6
  177. package/dist/modules/services/ServiceMountController.js.map +1 -1
  178. package/dist/modules/settings/WorkspaceSettingsController.d.ts.map +1 -1
  179. package/dist/modules/settings/WorkspaceSettingsController.js +6 -3
  180. package/dist/modules/settings/WorkspaceSettingsController.js.map +1 -1
  181. package/dist/modules/sharedStack/SharedStackController.d.ts.map +1 -1
  182. package/dist/modules/sharedStack/SharedStackController.js +11 -8
  183. package/dist/modules/sharedStack/SharedStackController.js.map +1 -1
  184. package/dist/modules/skillLibrary/SkillLibraryController.d.ts.map +1 -1
  185. package/dist/modules/skillLibrary/SkillLibraryController.js +19 -19
  186. package/dist/modules/skillLibrary/SkillLibraryController.js.map +1 -1
  187. package/dist/modules/slack/SlackController.d.ts.map +1 -1
  188. package/dist/modules/slack/SlackController.js +16 -13
  189. package/dist/modules/slack/SlackController.js.map +1 -1
  190. package/dist/modules/tasks/TaskSourceController.d.ts.map +1 -1
  191. package/dist/modules/tasks/TaskSourceController.js +26 -24
  192. package/dist/modules/tasks/TaskSourceController.js.map +1 -1
  193. package/dist/modules/tasks/TaskWebhookController.d.ts.map +1 -1
  194. package/dist/modules/tasks/TaskWebhookController.js +4 -4
  195. package/dist/modules/tasks/TaskWebhookController.js.map +1 -1
  196. package/dist/modules/testSecrets/TestSecretsController.d.ts.map +1 -1
  197. package/dist/modules/testSecrets/TestSecretsController.js +7 -9
  198. package/dist/modules/testSecrets/TestSecretsController.js.map +1 -1
  199. package/dist/modules/userSettings/UserSettingsController.d.ts.map +1 -1
  200. package/dist/modules/userSettings/UserSettingsController.js +11 -6
  201. package/dist/modules/userSettings/UserSettingsController.js.map +1 -1
  202. package/dist/modules/validation/ValidationConfigController.d.ts.map +1 -1
  203. package/dist/modules/validation/ValidationConfigController.js +52 -11
  204. package/dist/modules/validation/ValidationConfigController.js.map +1 -1
  205. package/dist/modules/vcs/VcsWebhookController.d.ts.map +1 -1
  206. package/dist/modules/vcs/VcsWebhookController.js +5 -5
  207. package/dist/modules/vcs/VcsWebhookController.js.map +1 -1
  208. package/dist/modules/webSearch/WebSearchProxyController.d.ts.map +1 -1
  209. package/dist/modules/webSearch/WebSearchProxyController.js +3 -3
  210. package/dist/modules/webSearch/WebSearchProxyController.js.map +1 -1
  211. package/dist/modules/workspaces/WorkspaceMemberController.d.ts.map +1 -1
  212. package/dist/modules/workspaces/WorkspaceMemberController.js +9 -6
  213. package/dist/modules/workspaces/WorkspaceMemberController.js.map +1 -1
  214. package/dist/persistence/rpc-allowlist.d.ts.map +1 -1
  215. package/dist/persistence/rpc-allowlist.js +16 -1
  216. package/dist/persistence/rpc-allowlist.js.map +1 -1
  217. package/dist/persistence/rpc.d.ts.map +1 -1
  218. package/dist/persistence/rpc.js +3 -0
  219. package/dist/persistence/rpc.js.map +1 -1
  220. package/package.json +8 -8
@@ -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 package-registries module or send a 503, returning null when unconfigured. */
7
8
  function requirePackageRegistries(c) {
8
9
  return c.get('container').packageRegistries ?? null;
9
10
  }
10
- const unavailable = (c) => c.json({
11
- error: {
12
- code: 'unavailable',
13
- message: 'The package-registry integration is not configured',
14
- },
15
- }, 503);
11
+ const unavailable = () => {
12
+ throw new UnavailableError('The package-registry integration is not configured');
13
+ };
16
14
  /**
17
15
  * Per-workspace private package-registry entries (npm private orgs, GitHub Packages)
18
16
  * that agent containers use to resolve private dependencies. Tokens are write-only —
@@ -25,19 +23,19 @@ export function packageRegistriesController() {
25
23
  buildHonoRoute(app, listPackageRegistriesContract, async (c) => {
26
24
  const registries = requirePackageRegistries(c);
27
25
  if (!registries)
28
- return unavailable(c);
26
+ return unavailable();
29
27
  return c.json(await registries.service.list(param(c, 'workspaceId')), 200);
30
28
  });
31
29
  buildHonoRoute(app, addPackageRegistryContract, async (c) => {
32
30
  const registries = requirePackageRegistries(c);
33
31
  if (!registries)
34
- return unavailable(c);
32
+ return unavailable();
35
33
  return c.json(await registries.service.add(param(c, 'workspaceId'), c.req.valid('json')), 200);
36
34
  });
37
35
  buildHonoRoute(app, deletePackageRegistryContract, async (c) => {
38
36
  const registries = requirePackageRegistries(c);
39
37
  if (!registries)
40
- return unavailable(c);
38
+ return unavailable();
41
39
  await registries.service.remove(param(c, 'workspaceId'), c.req.valid('param').entryId);
42
40
  return c.body(null, 204);
43
41
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PackageRegistriesController.js","sourceRoot":"","sources":["../../../src/modules/packageRegistries/PackageRegistriesController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,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,6FAA6F;AAC7F,SAAS,wBAAwB,CAAmB,CAAa;IAC/D,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAA;AACrD,CAAC;AAED,MAAM,WAAW,GAAG,CAAmB,CAAa,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,CACJ;IACE,KAAK,EAAE;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,oDAAoD;KAC9D;CACF,EACD,GAAG,CACJ,CAAA;AAEH;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B;IACzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAE/D,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,UAAU,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,CAAC,UAAU;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACtC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,UAAU,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,CAAC,UAAU;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACtC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAChG,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,UAAU,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,CAAC,UAAU;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAA;QACtF,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"PackageRegistriesController.js","sourceRoot":"","sources":["../../../src/modules/packageRegistries/PackageRegistriesController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,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,6FAA6F;AAC7F,SAAS,wBAAwB,CAAmB,CAAa;IAC/D,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAA;AACrD,CAAC;AAED,MAAM,WAAW,GAAG,GAAU,EAAE;IAC9B,MAAM,IAAI,gBAAgB,CAAC,oDAAoD,CAAC,CAAA;AAClF,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B;IACzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAE/D,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,UAAU,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,CAAC,UAAU;YAAE,OAAO,WAAW,EAAE,CAAA;QACrC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,UAAU,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,CAAC,UAAU;YAAE,OAAO,WAAW,EAAE,CAAA;QACrC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAChG,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,UAAU,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,CAAC,UAAU;YAAE,OAAO,WAAW,EAAE,CAAA;QACrC,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAA;QACtF,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":"GitHubDelegationController.d.ts","sourceRoot":"","sources":["../../../src/modules/persistence/GitHubDelegationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,gFAAgF;AAChF,MAAM,WAAW,yBAAyB;IACxC,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iCAAiC;IAChD,uEAAuE;IACvE,SAAS,CAAC,EAAE,yBAAyB,CAAA;IACrC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAUD,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,iCAAsC,GAC9C,IAAI,CAAC,MAAM,CAAC,CA8Id"}
1
+ {"version":3,"file":"GitHubDelegationController.d.ts","sourceRoot":"","sources":["../../../src/modules/persistence/GitHubDelegationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAI/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,gFAAgF;AAChF,MAAM,WAAW,yBAAyB;IACxC,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iCAAiC;IAChD,uEAAuE;IACvE,SAAS,CAAC,EAAE,yBAAyB,CAAA;IACrC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAUD,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,iCAAsC,GAC9C,IAAI,CAAC,MAAM,CAAC,CAmId"}
@@ -1,6 +1,7 @@
1
1
  import { Hono } from 'hono';
2
2
  import { signerFor, TOKEN_AUDIENCE } from '../../auth/signing.js';
3
3
  import { logger } from '../../observability/logger.js';
4
+ import { UnavailableError, RateLimitedError } from '@cat-factory/kernel';
4
5
  /**
5
6
  * Generous for a legitimate satellite: the client (`DelegatedAppTokenSource`) memoises a
6
7
  * minted token for 60s per installation, so steady-state traffic is ~1 mint/min per
@@ -44,17 +45,12 @@ export function githubDelegationController(options = {}) {
44
45
  }
45
46
  else if (++bucket.count > limit) {
46
47
  log.warn('github delegation: mint rate limit exceeded', { limit, windowMs });
47
- return c.json({ error: { code: 'rate_limited', message: 'too many token mints, retry shortly' } }, 429);
48
+ throw new RateLimitedError('too many token mints, retry shortly');
48
49
  }
49
50
  const registry = container.repositories;
50
51
  const delegation = container.githubTokenDelegation;
51
52
  if (!registry || !delegation) {
52
- return c.json({
53
- error: {
54
- code: 'unavailable',
55
- message: 'GitHub token delegation is not enabled on this deployment',
56
- },
57
- }, 503);
53
+ throw new UnavailableError('GitHub token delegation is not enabled on this deployment');
58
54
  }
59
55
  let body;
60
56
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"GitHubDelegationController.js","sourceRoot":"","sources":["../../../src/modules/persistence/GitHubDelegationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,SAAS,EAAuB,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtF,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAsDtD;;;;;GAKG;AACH,MAAM,kBAAkB,GAA8B,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;AAErF,MAAM,UAAU,0BAA0B,CACxC,OAAO,GAAsC,EAAE;IAE/C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAA;IACnE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA;IACnC,uFAAuF;IACvF,qFAAqF;IACrF,qFAAqF;IACrF,qEAAqE;IACrE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkD,CAAA;IAE7E,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAEpC,8EAA8E;QAC9E,6EAA6E;QAC7E,0CAA0C;QAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAA;QAClD,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;QACvE,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,CAAiB,KAAK,EAAE,EAAE,GAAG,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC;YACxF,CAAC,CAAC,IAAI,CAAA;QACR,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QACxF,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;YACvB,KAAK,EAAE,kBAAkB;YACzB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAA;QAEF,gFAAgF;QAChF,gCAAgC;QAChC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAA;QACnB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC9C,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,EAAE,CAAC;YACtD,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QACnE,CAAC;aAAM,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,6CAA6C,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC5E,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,qCAAqC,EAAE,EAAE,EACnF,GAAG,CACJ,CAAA;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAA;QACvC,MAAM,UAAU,GAAG,SAAS,CAAC,qBAAqB,CAAA;QAClD,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE;oBACL,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,2DAA2D;iBACrE;aACF,EACD,GAAG,CACJ,CAAA;QACH,CAAC;QAED,IAAI,IAA0D,CAAA;QAC9D,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAgB,CAAA;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QACxF,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,EAAE,cAAc,CAAA;QAC3C,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5E,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,sCAAsC,EAAE,EAAE,EAClF,GAAG,CACJ,CAAA;QACH,CAAC;QAED,mFAAmF;QACnF,mFAAmF;QACnF,sFAAsF;QACtF,qFAAqF;QACrF,sFAAsF;QACtF,6EAA6E;QAC7E,sFAAsF;QACtF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QACxF,MAAM,aAAa,GAAG,QAAQ,CAAC,4BAA4B,CAAA;QAC3D,MAAM,cAAc,GAAG,QAAQ,CAAC,wBAAwB,CAAA;QACxD,IACE,OAAO,aAAa,EAAE,mBAAmB,KAAK,UAAU;YACxD,OAAO,cAAc,EAAE,kBAAkB,KAAK,UAAU,EACxD,CAAC;YACD,OAAO,MAAM,EAAE,CAAA;QACjB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,CAAC,MAAM,aAAa,CAAC,mBAAmB,CAC3D,cAAc,CACf,CAA8B,CAAA;YAC/B,MAAM,SAAS,GAAG,YAAY,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;YACzF,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnF,GAAG,CAAC,IAAI,CAAC,sDAAsD,EAAE,EAAE,cAAc,EAAE,CAAC,CAAA;gBACpF,OAAO,MAAM,EAAE,CAAA;YACjB,CAAC;YAED,6EAA6E;YAC7E,yEAAyE;YACzE,kFAAkF;YAClF,kFAAkF;YAClF,gFAAgF;YAChF,kFAAkF;YAClF,MAAM,KAAK,GAAG,CAAC,MAAM,cAAc,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAiB,CAAA;YACvF,MAAM,aAAa,GAAG;gBACpB,GAAG,IAAI,GAAG,CACR,CAAC,KAAK,IAAI,EAAE,CAAC;qBACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,UAAU,CAAC;qBAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAChC;aACF,CAAA;YACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,mFAAmF;gBACnF,GAAG,CAAC,IAAI,CAAC,qDAAqD,EAAE,EAAE,cAAc,EAAE,CAAC,CAAA;gBACnF,OAAO,MAAM,EAAE,CAAA;YACjB,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAA;YAC/C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,iBAAiB,CAAC,cAAc,EAAE;gBAChE,YAAY;gBACZ,aAAa;aACd,CAAC,CAAA;YACF,6EAA6E;YAC7E,GAAG,CAAC,IAAI,CAAC,0DAA0D,EAAE;gBACnE,cAAc;gBACd,YAAY;gBACZ,SAAS,EAAE,aAAa,CAAC,MAAM;aAChC,CAAC,CAAA;YACF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAA;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mFAAmF;YACnF,oDAAoD;YACpD,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE;gBAC1C,cAAc;gBACd,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC5D,CAAC,CAAA;YACF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QAChF,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"GitHubDelegationController.js","sourceRoot":"","sources":["../../../src/modules/persistence/GitHubDelegationController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PreflightController.d.ts","sourceRoot":"","sources":["../../../src/modules/preflight/PreflightController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAkB/C;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,CAWlD"}
1
+ {"version":3,"file":"PreflightController.d.ts","sourceRoot":"","sources":["../../../src/modules/preflight/PreflightController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAY/C;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,CAWlD"}
@@ -1,16 +1,14 @@
1
1
  import { runPreflightsContract } from '@cat-factory/contracts';
2
2
  import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
+ import { UnavailableError } from '@cat-factory/kernel';
4
5
  /** Resolve the preflight module, or null when the host-probe runtime isn't wired (non-local facade). */
5
6
  function requirePreflight(c) {
6
7
  return c.get('container').preflight ?? null;
7
8
  }
8
- const unavailable = (c) => c.json({
9
- error: {
10
- code: 'unavailable',
11
- message: 'Preflight checks are not available on this deployment',
12
- },
13
- }, 503);
9
+ const unavailable = () => {
10
+ throw new UnavailableError('Preflight checks are not available on this deployment');
11
+ };
14
12
  /**
15
13
  * Run a set of preflight checks (machine-prerequisite probes with guided remediation) and return
16
14
  * one verdict per ref — the setup wizard's live re-check button (slice 7) + any ad-hoc "am I ready
@@ -22,7 +20,7 @@ export function preflightController() {
22
20
  buildHonoRoute(app, runPreflightsContract, async (c) => {
23
21
  const preflight = requirePreflight(c);
24
22
  if (!preflight)
25
- return unavailable(c);
23
+ return unavailable();
26
24
  const { prerequisites } = c.req.valid('json');
27
25
  return c.json(await preflight.service.run(prerequisites), 200);
28
26
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PreflightController.js","sourceRoot":"","sources":["../../../src/modules/preflight/PreflightController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,wGAAwG;AACxG,SAAS,gBAAgB,CAAmB,CAAa;IACvD,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,IAAI,IAAI,CAAA;AAC7C,CAAC;AAED,MAAM,WAAW,GAAG,CAAmB,CAAa,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,CACJ;IACE,KAAK,EAAE;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,uDAAuD;KACjE;CACF,EACD,GAAG,CACJ,CAAA;AAEH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACrC,IAAI,CAAC,SAAS;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"PreflightController.js","sourceRoot":"","sources":["../../../src/modules/preflight/PreflightController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,wGAAwG;AACxG,SAAS,gBAAgB,CAAmB,CAAa;IACvD,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,IAAI,IAAI,CAAA;AAC7C,CAAC;AAED,MAAM,WAAW,GAAG,GAAU,EAAE;IAC9B,MAAM,IAAI,gBAAgB,CAAC,uDAAuD,CAAC,CAAA;AACrF,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACrC,IAAI,CAAC,SAAS;YAAE,OAAO,WAAW,EAAE,CAAA;QACpC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewController.d.ts","sourceRoot":"","sources":["../../../src/modules/preview/PreviewController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AA2B/C;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CA0BhD"}
1
+ {"version":3,"file":"PreviewController.d.ts","sourceRoot":"","sources":["../../../src/modules/preview/PreviewController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAqB/C;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CA0BhD"}
@@ -3,6 +3,7 @@ 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
  /**
7
8
  * Resolve the preview module, gating on the runtime's `frontendPreview.supported` capability
8
9
  * FIRST (defense-in-depth: slice 5a only gated the SPA toggle, so a direct API call on an
@@ -15,12 +16,9 @@ function requirePreview(c) {
15
16
  return null;
16
17
  return container.preview ?? null;
17
18
  }
18
- const unavailable = (c) => c.json({
19
- error: {
20
- code: 'unavailable',
21
- message: 'Browsable frontend previews are not supported on this runtime',
22
- },
23
- }, 503);
19
+ const unavailable = () => {
20
+ throw new UnavailableError('Browsable frontend previews are not supported on this runtime');
21
+ };
24
22
  /**
25
23
  * Browsable frontend preview (slice 5c): start / poll / stop a long-lived build+serve container
26
24
  * for a `frontend` frame, reachable on a host URL. A local/node differentiator — 503 on the
@@ -32,21 +30,21 @@ export function previewController() {
32
30
  buildHonoRoute(app, getPreviewContract, async (c) => {
33
31
  const preview = requirePreview(c);
34
32
  if (!preview)
35
- return unavailable(c);
33
+ return unavailable();
36
34
  const frameId = c.req.valid('param').frameId;
37
35
  return c.json(await preview.service.get(param(c, 'workspaceId'), frameId), 200);
38
36
  });
39
37
  buildHonoRoute(app, startPreviewContract, async (c) => {
40
38
  const preview = requirePreview(c);
41
39
  if (!preview)
42
- return unavailable(c);
40
+ return unavailable();
43
41
  const frameId = c.req.valid('param').frameId;
44
42
  return c.json(await preview.service.start(param(c, 'workspaceId'), frameId), 201);
45
43
  });
46
44
  buildHonoRoute(app, stopPreviewContract, async (c) => {
47
45
  const preview = requirePreview(c);
48
46
  if (!preview)
49
- return unavailable(c);
47
+ return unavailable();
50
48
  const frameId = c.req.valid('param').frameId;
51
49
  return c.json(await preview.service.stop(param(c, 'workspaceId'), frameId), 200);
52
50
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewController.js","sourceRoot":"","sources":["../../../src/modules/preview/PreviewController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GACpB,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;;;;;GAKG;AACH,SAAS,cAAc,CAAmB,CAAa;IACrD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACpC,IAAI,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,EAAE,SAAS,KAAK,KAAK;QAAE,OAAO,IAAI,CAAA;IACtF,OAAO,SAAS,CAAC,OAAO,IAAI,IAAI,CAAA;AAClC,CAAC;AAED,MAAM,WAAW,GAAG,CAAmB,CAAa,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,CACJ;IACE,KAAK,EAAE;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,+DAA+D;KACzE;CACF,EACD,GAAG,CACJ,CAAA;AAEH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAE/D,cAAc,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAA;QAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAA;QAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;IACnF,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAA;QAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;IAClF,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"PreviewController.js","sourceRoot":"","sources":["../../../src/modules/preview/PreviewController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GACpB,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;;;;;GAKG;AACH,SAAS,cAAc,CAAmB,CAAa;IACrD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACpC,IAAI,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,EAAE,SAAS,KAAK,KAAK;QAAE,OAAO,IAAI,CAAA;IACtF,OAAO,SAAS,CAAC,OAAO,IAAI,IAAI,CAAA;AAClC,CAAC;AAED,MAAM,WAAW,GAAG,GAAU,EAAE;IAC9B,MAAM,IAAI,gBAAgB,CAAC,+DAA+D,CAAC,CAAA;AAC7F,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAE/D,cAAc,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,EAAE,CAAA;QAClC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAA;QAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,EAAE,CAAA;QAClC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAA;QAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;IACnF,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,EAAE,CAAA;QAClC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAA;QAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;IAClF,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeyController.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/ApiKeyController.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,MAAM,EACZ,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAkB/C,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAe3D;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,IAAI,IAAI,CAAC,MAAM,CAAC,CAsCxD;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CA6CnD"}
1
+ {"version":3,"file":"ApiKeyController.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/ApiKeyController.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,MAAM,EACZ,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAqB/C,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAe3D;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,IAAI,IAAI,CAAC,MAAM,CAAC,CAsCxD;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CA6CnD"}
@@ -3,6 +3,7 @@ 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, UnauthorizedError } from '@cat-factory/kernel';
6
7
  // Direct-provider API-key endpoints. Keys (OpenAI/Anthropic/Qwen/DeepSeek/Moonshot)
7
8
  // are onboarded here and stored encrypted, replacing deployment-env onboarding. The
8
9
  // raw key is write-only — only metadata + rolling-window usage is ever returned.
@@ -10,8 +11,12 @@ import { param } from '../../http/params.js';
10
11
  // This controller mounts the WORKSPACE-scoped routes (under `/workspaces/:workspaceId`)
11
12
  // and the USER-scoped routes (`/me/api-keys`, the caller's own pool). ACCOUNT-scoped
12
13
  // keys are managed by the AccountController, which admin-gates them.
13
- const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'API key storage is not configured' } }, 503);
14
- const signInRequired = (c) => c.json({ error: { code: 'unauthorized', message: 'Sign in to manage your API keys' } }, 401);
14
+ const unavailable = () => {
15
+ throw new UnavailableError('API key storage is not configured');
16
+ };
17
+ const signInRequired = () => {
18
+ throw new UnauthorizedError('Sign in to manage your API keys');
19
+ };
15
20
  /** Project the service summary onto the wire type (already secret-free). */
16
21
  export function apiKeyToWire(summary) {
17
22
  return {
@@ -36,28 +41,28 @@ export function workspaceApiKeyController() {
36
41
  buildHonoRoute(app, listWorkspaceApiKeysContract, async (c) => {
37
42
  const apiKeys = c.get('container').apiKeys;
38
43
  if (!apiKeys)
39
- return unavailable(c);
44
+ return unavailable();
40
45
  const keys = await apiKeys.listKeys('workspace', param(c, 'workspaceId'));
41
46
  return c.json({ keys: keys.map(apiKeyToWire) }, 200);
42
47
  });
43
48
  buildHonoRoute(app, addWorkspaceApiKeyContract, async (c) => {
44
49
  const apiKeys = c.get('container').apiKeys;
45
50
  if (!apiKeys)
46
- return unavailable(c);
51
+ return unavailable();
47
52
  const summary = await apiKeys.addKey('workspace', param(c, 'workspaceId'), c.req.valid('json'));
48
53
  return c.json(apiKeyToWire(summary), 201);
49
54
  });
50
55
  buildHonoRoute(app, updateWorkspaceApiKeyContract, async (c) => {
51
56
  const apiKeys = c.get('container').apiKeys;
52
57
  if (!apiKeys)
53
- return unavailable(c);
58
+ return unavailable();
54
59
  const summary = await apiKeys.updateKey('workspace', param(c, 'workspaceId'), c.req.valid('param').id, c.req.valid('json'));
55
60
  return c.json(apiKeyToWire(summary), 200);
56
61
  });
57
62
  buildHonoRoute(app, removeWorkspaceApiKeyContract, async (c) => {
58
63
  const apiKeys = c.get('container').apiKeys;
59
64
  if (!apiKeys)
60
- return unavailable(c);
65
+ return unavailable();
61
66
  await apiKeys.removeKey('workspace', param(c, 'workspaceId'), c.req.valid('param').id);
62
67
  return c.body(null, 204);
63
68
  });
@@ -69,40 +74,40 @@ export function userApiKeyController() {
69
74
  buildHonoRoute(app, listUserApiKeysContract, async (c) => {
70
75
  const apiKeys = c.get('container').apiKeys;
71
76
  if (!apiKeys)
72
- return unavailable(c);
77
+ return unavailable();
73
78
  const user = c.get('user');
74
79
  if (!user)
75
- return signInRequired(c);
80
+ return signInRequired();
76
81
  const keys = await apiKeys.listKeys('user', user.id);
77
82
  return c.json({ keys: keys.map(apiKeyToWire) }, 200);
78
83
  });
79
84
  buildHonoRoute(app, addUserApiKeyContract, async (c) => {
80
85
  const apiKeys = c.get('container').apiKeys;
81
86
  if (!apiKeys)
82
- return unavailable(c);
87
+ return unavailable();
83
88
  const user = c.get('user');
84
89
  if (!user)
85
- return signInRequired(c);
90
+ return signInRequired();
86
91
  const summary = await apiKeys.addKey('user', user.id, c.req.valid('json'));
87
92
  return c.json(apiKeyToWire(summary), 201);
88
93
  });
89
94
  buildHonoRoute(app, updateUserApiKeyContract, async (c) => {
90
95
  const apiKeys = c.get('container').apiKeys;
91
96
  if (!apiKeys)
92
- return unavailable(c);
97
+ return unavailable();
93
98
  const user = c.get('user');
94
99
  if (!user)
95
- return signInRequired(c);
100
+ return signInRequired();
96
101
  const summary = await apiKeys.updateKey('user', user.id, c.req.valid('param').id, c.req.valid('json'));
97
102
  return c.json(apiKeyToWire(summary), 200);
98
103
  });
99
104
  buildHonoRoute(app, removeUserApiKeyContract, async (c) => {
100
105
  const apiKeys = c.get('container').apiKeys;
101
106
  if (!apiKeys)
102
- return unavailable(c);
107
+ return unavailable();
103
108
  const user = c.get('user');
104
109
  if (!user)
105
- return signInRequired(c);
110
+ return signInRequired();
106
111
  await apiKeys.removeKey('user', user.id, c.req.valid('param').id);
107
112
  return c.body(null, 204);
108
113
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeyController.js","sourceRoot":"","sources":["../../../src/modules/providers/ApiKeyController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiKeyController.js","sourceRoot":"","sources":["../../../src/modules/providers/ApiKeyController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PersonalSubscriptionController.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/PersonalSubscriptionController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAqB/C,wBAAgB,8BAA8B,IAAI,IAAI,CAAC,MAAM,CAAC,CA+B7D"}
1
+ {"version":3,"file":"PersonalSubscriptionController.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/PersonalSubscriptionController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAkB/C,wBAAgB,8BAA8B,IAAI,IAAI,CAAC,MAAM,CAAC,CA+B7D"}
@@ -2,42 +2,47 @@ import { listPersonalSubscriptionsContract, removePersonalSubscriptionContract,
2
2
  import * as v from 'valibot';
3
3
  import { buildHonoRoute } from '@toad-contracts/hono';
4
4
  import { Hono } from 'hono';
5
+ import { UnavailableError, UnauthorizedError } from '@cat-factory/kernel';
5
6
  // Per-USER individual-usage subscription endpoints (Claude). Unlike the workspace
6
7
  // vendor-credential pool, these are scoped to the signed-in user: a personal
7
8
  // subscription is licensed for that individual only, stored DOUBLE-encrypted (a
8
9
  // personal-password layer inside the system layer), and never shared. Mounted at the
9
10
  // root (not under a workspace) and require a signed-in user — with auth disabled there
10
11
  // is no individual to own a personal credential.
11
- const signInRequired = (c) => c.json({ error: { code: 'unauthorized', message: 'Sign in to manage personal subscriptions' } }, 401);
12
- const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Personal subscription storage is not configured' } }, 503);
12
+ const signInRequired = () => {
13
+ throw new UnauthorizedError('Sign in to manage personal subscriptions');
14
+ };
15
+ const unavailable = () => {
16
+ throw new UnavailableError('Personal subscription storage is not configured');
17
+ };
13
18
  export function personalSubscriptionController() {
14
19
  const app = new Hono();
15
20
  buildHonoRoute(app, listPersonalSubscriptionsContract, async (c) => {
16
21
  const personal = c.get('container').personalSubscriptions;
17
22
  if (!personal)
18
- return unavailable(c);
23
+ return unavailable();
19
24
  const user = c.get('user');
20
25
  if (!user)
21
- return signInRequired(c);
26
+ return signInRequired();
22
27
  return c.json({ subscriptions: await personal.list(user.id) }, 200);
23
28
  });
24
29
  buildHonoRoute(app, storePersonalSubscriptionContract, async (c) => {
25
30
  const personal = c.get('container').personalSubscriptions;
26
31
  if (!personal)
27
- return unavailable(c);
32
+ return unavailable();
28
33
  const user = c.get('user');
29
34
  if (!user)
30
- return signInRequired(c);
35
+ return signInRequired();
31
36
  const status = await personal.store(user.id, c.req.valid('json'));
32
37
  return c.json(status, 201);
33
38
  });
34
39
  buildHonoRoute(app, removePersonalSubscriptionContract, async (c) => {
35
40
  const personal = c.get('container').personalSubscriptions;
36
41
  if (!personal)
37
- return unavailable(c);
42
+ return unavailable();
38
43
  const user = c.get('user');
39
44
  if (!user)
40
- return signInRequired(c);
45
+ return signInRequired();
41
46
  const vendor = v.parse(subscriptionVendorSchema, c.req.valid('param').vendor);
42
47
  await personal.remove(user.id, vendor);
43
48
  return c.body(null, 204);
@@ -1 +1 @@
1
- {"version":3,"file":"PersonalSubscriptionController.js","sourceRoot":"","sources":["../../../src/modules/providers/PersonalSubscriptionController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PersonalSubscriptionController.js","sourceRoot":"","sources":["../../../src/modules/providers/PersonalSubscriptionController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserSecretController.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/UserSecretController.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAa/C,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CAwDnD"}
1
+ {"version":3,"file":"UserSecretController.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/UserSecretController.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAgB/C,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CAwDnD"}
@@ -2,30 +2,35 @@ import { getUserSecretDescriptorContract, listUserSecretsContract, removeUserSec
2
2
  import * as v from 'valibot';
3
3
  import { buildHonoRoute } from '@toad-contracts/hono';
4
4
  import { Hono } from 'hono';
5
+ import { UnavailableError, UnauthorizedError } from '@cat-factory/kernel';
5
6
  // Per-USER generic secrets (a GitHub PAT today; future repository/provider tokens as
6
7
  // new kinds). Scoped to the signed-in user — mounted at the root (not under a
7
8
  // workspace) and require a signed-in user, like personal subscriptions / local model
8
9
  // runners. The secret is write-only; only status metadata is returned.
9
- const signInRequired = (c) => c.json({ error: { code: 'unauthorized', message: 'Sign in to manage your secrets' } }, 401);
10
- const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'User secret storage is not configured' } }, 503);
10
+ const signInRequired = () => {
11
+ throw new UnauthorizedError('Sign in to manage your secrets');
12
+ };
13
+ const unavailable = () => {
14
+ throw new UnavailableError('User secret storage is not configured');
15
+ };
11
16
  export function userSecretController() {
12
17
  const app = new Hono();
13
18
  buildHonoRoute(app, listUserSecretsContract, async (c) => {
14
19
  const store = c.get('container').userSecrets;
15
20
  if (!store)
16
- return unavailable(c);
21
+ return unavailable();
17
22
  const user = c.get('user');
18
23
  if (!user)
19
- return signInRequired(c);
24
+ return signInRequired();
20
25
  return c.json({ secrets: await store.list(user.id), descriptors: store.describeAll() }, 200);
21
26
  });
22
27
  buildHonoRoute(app, getUserSecretDescriptorContract, async (c) => {
23
28
  const store = c.get('container').userSecrets;
24
29
  if (!store)
25
- return unavailable(c);
30
+ return unavailable();
26
31
  const user = c.get('user');
27
32
  if (!user)
28
- return signInRequired(c);
33
+ return signInRequired();
29
34
  const kind = v.parse(userSecretKindSchema, c.req.valid('param').kind);
30
35
  const descriptor = store.describe(kind);
31
36
  if (!descriptor)
@@ -35,20 +40,20 @@ export function userSecretController() {
35
40
  buildHonoRoute(app, storeUserSecretContract, async (c) => {
36
41
  const store = c.get('container').userSecrets;
37
42
  if (!store)
38
- return unavailable(c);
43
+ return unavailable();
39
44
  const user = c.get('user');
40
45
  if (!user)
41
- return signInRequired(c);
46
+ return signInRequired();
42
47
  const kind = v.parse(userSecretKindSchema, c.req.valid('param').kind);
43
48
  return c.json(await store.store(user.id, kind, c.req.valid('json')), 201);
44
49
  });
45
50
  buildHonoRoute(app, removeUserSecretContract, async (c) => {
46
51
  const store = c.get('container').userSecrets;
47
52
  if (!store)
48
- return unavailable(c);
53
+ return unavailable();
49
54
  const user = c.get('user');
50
55
  if (!user)
51
- return signInRequired(c);
56
+ return signInRequired();
52
57
  const kind = v.parse(userSecretKindSchema, c.req.valid('param').kind);
53
58
  await store.remove(user.id, kind);
54
59
  // Revoke the fail-closed access cache too: without their PAT the user no longer has
@@ -61,10 +66,10 @@ export function userSecretController() {
61
66
  buildHonoRoute(app, testUserSecretContract, async (c) => {
62
67
  const store = c.get('container').userSecrets;
63
68
  if (!store)
64
- return unavailable(c);
69
+ return unavailable();
65
70
  const user = c.get('user');
66
71
  if (!user)
67
- return signInRequired(c);
72
+ return signInRequired();
68
73
  const kind = v.parse(userSecretKindSchema, c.req.valid('param').kind);
69
74
  return c.json(await store.testConnection(kind, c.req.valid('json')), 200);
70
75
  });
@@ -1 +1 @@
1
- {"version":3,"file":"UserSecretController.js","sourceRoot":"","sources":["../../../src/modules/providers/UserSecretController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UserSecretController.js","sourceRoot":"","sources":["../../../src/modules/providers/UserSecretController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"VendorCredentialController.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/VendorCredentialController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAqC/C,wBAAgB,0BAA0B,IAAI,IAAI,CAAC,MAAM,CAAC,CAsCzD"}
1
+ {"version":3,"file":"VendorCredentialController.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/VendorCredentialController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AA+B/C,wBAAgB,0BAA0B,IAAI,IAAI,CAAC,MAAM,CAAC,CAsCzD"}