@cat-factory/contracts 0.33.0 → 0.35.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 (228) hide show
  1. package/dist/api-keys.d.ts +17 -0
  2. package/dist/api-keys.d.ts.map +1 -1
  3. package/dist/api-keys.js +2 -0
  4. package/dist/api-keys.js.map +1 -1
  5. package/dist/entities.d.ts +135 -0
  6. package/dist/entities.d.ts.map +1 -1
  7. package/dist/entities.js +46 -0
  8. package/dist/entities.js.map +1 -1
  9. package/dist/github.d.ts +14 -0
  10. package/dist/github.d.ts.map +1 -1
  11. package/dist/github.js +13 -0
  12. package/dist/github.js.map +1 -1
  13. package/dist/human-review.d.ts +8 -0
  14. package/dist/human-review.d.ts.map +1 -0
  15. package/dist/human-review.js +12 -0
  16. package/dist/human-review.js.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/merge.d.ts +9 -0
  22. package/dist/merge.d.ts.map +1 -1
  23. package/dist/merge.js +10 -0
  24. package/dist/merge.js.map +1 -1
  25. package/dist/notifications.d.ts +2 -2
  26. package/dist/notifications.d.ts.map +1 -1
  27. package/dist/notifications.js +6 -0
  28. package/dist/notifications.js.map +1 -1
  29. package/dist/observability.d.ts +63 -0
  30. package/dist/observability.d.ts.map +1 -1
  31. package/dist/observability.js +57 -0
  32. package/dist/observability.js.map +1 -1
  33. package/dist/requests.d.ts +7 -0
  34. package/dist/requests.d.ts.map +1 -1
  35. package/dist/requests.js +2 -0
  36. package/dist/requests.js.map +1 -1
  37. package/dist/routes/_shared.d.ts +49 -0
  38. package/dist/routes/_shared.d.ts.map +1 -0
  39. package/dist/routes/_shared.js +34 -0
  40. package/dist/routes/_shared.js.map +1 -0
  41. package/dist/routes/accounts.d.ts +775 -0
  42. package/dist/routes/accounts.d.ts.map +1 -0
  43. package/dist/routes/accounts.js +145 -0
  44. package/dist/routes/accounts.js.map +1 -0
  45. package/dist/routes/agent-runs.d.ts +659 -0
  46. package/dist/routes/agent-runs.d.ts.map +1 -0
  47. package/dist/routes/agent-runs.js +33 -0
  48. package/dist/routes/agent-runs.js.map +1 -0
  49. package/dist/routes/api-keys.d.ts +245 -0
  50. package/dist/routes/api-keys.d.ts.map +1 -0
  51. package/dist/routes/api-keys.js +49 -0
  52. package/dist/routes/api-keys.js.map +1 -0
  53. package/dist/routes/auth.d.ts +411 -0
  54. package/dist/routes/auth.d.ts.map +1 -0
  55. package/dist/routes/auth.js +129 -0
  56. package/dist/routes/auth.js.map +1 -0
  57. package/dist/routes/board.d.ts +1260 -0
  58. package/dist/routes/board.d.ts.map +1 -0
  59. package/dist/routes/board.js +85 -0
  60. package/dist/routes/board.js.map +1 -0
  61. package/dist/routes/bootstrap.d.ts +395 -0
  62. package/dist/routes/bootstrap.d.ts.map +1 -0
  63. package/dist/routes/bootstrap.js +56 -0
  64. package/dist/routes/bootstrap.js.map +1 -0
  65. package/dist/routes/brainstorm.d.ts +482 -0
  66. package/dist/routes/brainstorm.d.ts.map +1 -0
  67. package/dist/routes/brainstorm.js +69 -0
  68. package/dist/routes/brainstorm.js.map +1 -0
  69. package/dist/routes/clarity.d.ts +462 -0
  70. package/dist/routes/clarity.d.ts.map +1 -0
  71. package/dist/routes/clarity.js +67 -0
  72. package/dist/routes/clarity.js.map +1 -0
  73. package/dist/routes/consensus.d.ts +71 -0
  74. package/dist/routes/consensus.d.ts.map +1 -0
  75. package/dist/routes/consensus.js +23 -0
  76. package/dist/routes/consensus.js.map +1 -0
  77. package/dist/routes/documents.d.ts +449 -0
  78. package/dist/routes/documents.d.ts.map +1 -0
  79. package/dist/routes/documents.js +89 -0
  80. package/dist/routes/documents.js.map +1 -0
  81. package/dist/routes/environments.d.ts +715 -0
  82. package/dist/routes/environments.d.ts.map +1 -0
  83. package/dist/routes/environments.js +82 -0
  84. package/dist/routes/environments.js.map +1 -0
  85. package/dist/routes/execution.d.ts +2768 -0
  86. package/dist/routes/execution.d.ts.map +1 -0
  87. package/dist/routes/execution.js +119 -0
  88. package/dist/routes/execution.js.map +1 -0
  89. package/dist/routes/followUp.d.ts +277 -0
  90. package/dist/routes/followUp.d.ts.map +1 -0
  91. package/dist/routes/followUp.js +47 -0
  92. package/dist/routes/followUp.js.map +1 -0
  93. package/dist/routes/fragment-library.d.ts +594 -0
  94. package/dist/routes/fragment-library.d.ts.map +1 -0
  95. package/dist/routes/fragment-library.js +102 -0
  96. package/dist/routes/fragment-library.js.map +1 -0
  97. package/dist/routes/github.d.ts +807 -0
  98. package/dist/routes/github.d.ts.map +1 -0
  99. package/dist/routes/github.js +157 -0
  100. package/dist/routes/github.js.map +1 -0
  101. package/dist/routes/human-review.d.ts +290 -0
  102. package/dist/routes/human-review.d.ts.map +1 -0
  103. package/dist/routes/human-review.js +20 -0
  104. package/dist/routes/human-review.js.map +1 -0
  105. package/dist/routes/human-test.d.ts +1435 -0
  106. package/dist/routes/human-test.d.ts.map +1 -0
  107. package/dist/routes/human-test.js +48 -0
  108. package/dist/routes/human-test.js.map +1 -0
  109. package/dist/routes/incident-enrichment.d.ts +110 -0
  110. package/dist/routes/incident-enrichment.d.ts.map +1 -0
  111. package/dist/routes/incident-enrichment.js +26 -0
  112. package/dist/routes/incident-enrichment.js.map +1 -0
  113. package/dist/routes/index.d.ts +47 -0
  114. package/dist/routes/index.d.ts.map +1 -0
  115. package/dist/routes/index.js +50 -0
  116. package/dist/routes/index.js.map +1 -0
  117. package/dist/routes/kaizen.d.ts +113 -0
  118. package/dist/routes/kaizen.d.ts.map +1 -0
  119. package/dist/routes/kaizen.js +22 -0
  120. package/dist/routes/kaizen.js.map +1 -0
  121. package/dist/routes/localModels.d.ts +163 -0
  122. package/dist/routes/localModels.d.ts.map +1 -0
  123. package/dist/routes/localModels.js +41 -0
  124. package/dist/routes/localModels.js.map +1 -0
  125. package/dist/routes/localSettings.d.ts +93 -0
  126. package/dist/routes/localSettings.d.ts.map +1 -0
  127. package/dist/routes/localSettings.js +22 -0
  128. package/dist/routes/localSettings.js.map +1 -0
  129. package/dist/routes/merge.d.ts +197 -0
  130. package/dist/routes/merge.d.ts.map +1 -0
  131. package/dist/routes/merge.js +36 -0
  132. package/dist/routes/merge.js.map +1 -0
  133. package/dist/routes/model-presets.d.ts +162 -0
  134. package/dist/routes/model-presets.d.ts.map +1 -0
  135. package/dist/routes/model-presets.js +36 -0
  136. package/dist/routes/model-presets.js.map +1 -0
  137. package/dist/routes/models.d.ts +123 -0
  138. package/dist/routes/models.d.ts.map +1 -0
  139. package/dist/routes/models.js +25 -0
  140. package/dist/routes/models.js.map +1 -0
  141. package/dist/routes/notifications.d.ts +213 -0
  142. package/dist/routes/notifications.d.ts.map +1 -0
  143. package/dist/routes/notifications.js +31 -0
  144. package/dist/routes/notifications.js.map +1 -0
  145. package/dist/routes/openrouter.d.ts +145 -0
  146. package/dist/routes/openrouter.d.ts.map +1 -0
  147. package/dist/routes/openrouter.js +32 -0
  148. package/dist/routes/openrouter.js.map +1 -0
  149. package/dist/routes/personal-subscriptions.d.ts +124 -0
  150. package/dist/routes/personal-subscriptions.d.ts.map +1 -0
  151. package/dist/routes/personal-subscriptions.js +32 -0
  152. package/dist/routes/personal-subscriptions.js.map +1 -0
  153. package/dist/routes/pipelines.d.ts +457 -0
  154. package/dist/routes/pipelines.d.ts.map +1 -0
  155. package/dist/routes/pipelines.js +51 -0
  156. package/dist/routes/pipelines.js.map +1 -0
  157. package/dist/routes/prompt-fragments.d.ts +52 -0
  158. package/dist/routes/prompt-fragments.d.ts.map +1 -0
  159. package/dist/routes/prompt-fragments.js +14 -0
  160. package/dist/routes/prompt-fragments.js.map +1 -0
  161. package/dist/routes/provisioning-logs.d.ts +45 -0
  162. package/dist/routes/provisioning-logs.d.ts.map +1 -0
  163. package/dist/routes/provisioning-logs.js +14 -0
  164. package/dist/routes/provisioning-logs.js.map +1 -0
  165. package/dist/routes/recurring.d.ts +309 -0
  166. package/dist/routes/recurring.d.ts.map +1 -0
  167. package/dist/routes/recurring.js +50 -0
  168. package/dist/routes/recurring.js.map +1 -0
  169. package/dist/routes/release.d.ts +218 -0
  170. package/dist/routes/release.d.ts.map +1 -0
  171. package/dist/routes/release.js +47 -0
  172. package/dist/routes/release.js.map +1 -0
  173. package/dist/routes/requirements.d.ts +901 -0
  174. package/dist/routes/requirements.d.ts.map +1 -0
  175. package/dist/routes/requirements.js +96 -0
  176. package/dist/routes/requirements.js.map +1 -0
  177. package/dist/routes/runners.d.ts +442 -0
  178. package/dist/routes/runners.d.ts.map +1 -0
  179. package/dist/routes/runners.js +47 -0
  180. package/dist/routes/runners.js.map +1 -0
  181. package/dist/routes/sandbox.d.ts +898 -0
  182. package/dist/routes/sandbox.d.ts.map +1 -0
  183. package/dist/routes/sandbox.js +119 -0
  184. package/dist/routes/sandbox.js.map +1 -0
  185. package/dist/routes/service-fragment-defaults.d.ts +66 -0
  186. package/dist/routes/service-fragment-defaults.d.ts.map +1 -0
  187. package/dist/routes/service-fragment-defaults.js +20 -0
  188. package/dist/routes/service-fragment-defaults.js.map +1 -0
  189. package/dist/routes/services.d.ts +224 -0
  190. package/dist/routes/services.d.ts.map +1 -0
  191. package/dist/routes/services.js +44 -0
  192. package/dist/routes/services.js.map +1 -0
  193. package/dist/routes/slack.d.ts +332 -0
  194. package/dist/routes/slack.d.ts.map +1 -0
  195. package/dist/routes/slack.js +72 -0
  196. package/dist/routes/slack.js.map +1 -0
  197. package/dist/routes/spec.d.ts +76 -0
  198. package/dist/routes/spec.d.ts.map +1 -0
  199. package/dist/routes/spec.js +17 -0
  200. package/dist/routes/spec.js.map +1 -0
  201. package/dist/routes/tasks.d.ts +723 -0
  202. package/dist/routes/tasks.d.ts.map +1 -0
  203. package/dist/routes/tasks.js +108 -0
  204. package/dist/routes/tasks.js.map +1 -0
  205. package/dist/routes/tracker.d.ts +77 -0
  206. package/dist/routes/tracker.d.ts.map +1 -0
  207. package/dist/routes/tracker.js +20 -0
  208. package/dist/routes/tracker.js.map +1 -0
  209. package/dist/routes/user-secret.d.ts +231 -0
  210. package/dist/routes/user-secret.d.ts.map +1 -0
  211. package/dist/routes/user-secret.js +49 -0
  212. package/dist/routes/user-secret.js.map +1 -0
  213. package/dist/routes/vendor-credentials.d.ts +120 -0
  214. package/dist/routes/vendor-credentials.d.ts.map +1 -0
  215. package/dist/routes/vendor-credentials.js +33 -0
  216. package/dist/routes/vendor-credentials.js.map +1 -0
  217. package/dist/routes/workspace-settings.d.ts +93 -0
  218. package/dist/routes/workspace-settings.d.ts.map +1 -0
  219. package/dist/routes/workspace-settings.js +20 -0
  220. package/dist/routes/workspace-settings.js.map +1 -0
  221. package/dist/routes/workspaces.d.ts +1309 -0
  222. package/dist/routes/workspaces.d.ts.map +1 -0
  223. package/dist/routes/workspaces.js +45 -0
  224. package/dist/routes/workspaces.js.map +1 -0
  225. package/dist/slack.d.ts +2 -2
  226. package/dist/snapshot.d.ts +11 -1
  227. package/dist/snapshot.d.ts.map +1 -1
  228. package/package.json +3 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runs.d.ts","sourceRoot":"","sources":["../../src/routes/agent-runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqC,MAAM,yBAAyB,CAAA;AAC3F,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAqB5B,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMhC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM/B,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { ContractNoBody, defineApiContract, withObjectKeys } from '@toad-contracts/valibot';
2
+ import * as v from 'valibot';
3
+ import { bootstrapJobSchema } from '../bootstrap.js';
4
+ import { agentRunKindSchema, executionInstanceSchema } from '../entities.js';
5
+ import { errorResponses } from './_shared.js';
6
+ // ---------------------------------------------------------------------------
7
+ // Cross-cutting agent-run route contracts (retry / stop over a bootstrap or
8
+ // execution run). Mounted under `/workspaces/:workspaceId`, so the paths here are
9
+ // relative to that prefix. See AgentRunController in @cat-factory/server.
10
+ // ---------------------------------------------------------------------------
11
+ // The `{ kind, run }` envelope both endpoints return: the run's kind plus the run
12
+ // itself, which is a bootstrap job or an execution instance depending on the kind.
13
+ // This shape exists only inline in the controller today.
14
+ const agentRunResultSchema = v.object({
15
+ kind: agentRunKindSchema,
16
+ run: v.union([bootstrapJobSchema, executionInstanceSchema]),
17
+ });
18
+ const agentRunIdParams = withObjectKeys(v.object({ id: v.string() }));
19
+ export const retryAgentRunContract = defineApiContract({
20
+ method: 'post',
21
+ requestPathParamsSchema: agentRunIdParams,
22
+ pathResolver: ({ id }) => `/agent-runs/${id}/retry`,
23
+ requestBodySchema: ContractNoBody,
24
+ responsesByStatusCode: { 201: agentRunResultSchema, ...errorResponses },
25
+ });
26
+ export const stopAgentRunContract = defineApiContract({
27
+ method: 'post',
28
+ requestPathParamsSchema: agentRunIdParams,
29
+ pathResolver: ({ id }) => `/agent-runs/${id}/stop`,
30
+ requestBodySchema: ContractNoBody,
31
+ responsesByStatusCode: { 200: agentRunResultSchema, ...errorResponses },
32
+ });
33
+ //# sourceMappingURL=agent-runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runs.js","sourceRoot":"","sources":["../../src/routes/agent-runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC3F,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,8EAA8E;AAC9E,4EAA4E;AAC5E,kFAAkF;AAClF,0EAA0E;AAC1E,8EAA8E;AAE9E,kFAAkF;AAClF,mFAAmF;AACnF,yDAAyD;AACzD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,kBAAkB;IACxB,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;CAC5D,CAAC,CAAA;AAEF,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;AAErE,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;IACrD,MAAM,EAAE,MAAM;IACd,uBAAuB,EAAE,gBAAgB;IACzC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ;IACnD,iBAAiB,EAAE,cAAc;IACjC,qBAAqB,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,cAAc,EAAE;CACxE,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;IACpD,MAAM,EAAE,MAAM;IACd,uBAAuB,EAAE,gBAAgB;IACzC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,eAAe,EAAE,OAAO;IAClD,iBAAiB,EAAE,cAAc;IACjC,qBAAqB,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,cAAc,EAAE;CACxE,CAAC,CAAA"}
@@ -0,0 +1,245 @@
1
+ import { ContractNoBody } from '@toad-contracts/valibot';
2
+ import * as v from 'valibot';
3
+ export declare const listWorkspaceApiKeysContract: {
4
+ readonly method: "get";
5
+ readonly pathResolver: () => string;
6
+ readonly responsesByStatusCode: {
7
+ readonly '4xx': v.ObjectSchema<{
8
+ readonly error: v.ObjectSchema<{
9
+ readonly code: v.StringSchema<undefined>;
10
+ readonly message: v.StringSchema<undefined>;
11
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
12
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
13
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
14
+ readonly message: v.StringSchema<undefined>;
15
+ }, undefined>, undefined>, undefined>;
16
+ }, undefined>;
17
+ }, undefined>;
18
+ readonly '5xx': v.ObjectSchema<{
19
+ readonly error: v.ObjectSchema<{
20
+ readonly code: v.StringSchema<undefined>;
21
+ readonly message: v.StringSchema<undefined>;
22
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
23
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
24
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
25
+ readonly message: v.StringSchema<undefined>;
26
+ }, undefined>, undefined>, undefined>;
27
+ }, undefined>;
28
+ }, undefined>;
29
+ readonly 200: v.ObjectSchema<{
30
+ readonly keys: v.ArraySchema<v.ObjectSchema<{
31
+ readonly id: v.StringSchema<undefined>;
32
+ readonly scope: v.PicklistSchema<["account", "workspace", "user"], undefined>;
33
+ readonly scopeId: v.StringSchema<undefined>;
34
+ readonly provider: v.PicklistSchema<["openai", "anthropic", "qwen", "deepseek", "moonshot", "openrouter", "litellm"], undefined>;
35
+ readonly label: v.StringSchema<undefined>;
36
+ readonly createdAt: v.NumberSchema<undefined>;
37
+ readonly lastUsedAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
38
+ readonly inputTokens: v.NumberSchema<undefined>;
39
+ readonly outputTokens: v.NumberSchema<undefined>;
40
+ readonly requestCount: v.NumberSchema<undefined>;
41
+ }, undefined>, undefined>;
42
+ }, undefined>;
43
+ };
44
+ };
45
+ export declare const addWorkspaceApiKeyContract: {
46
+ readonly method: "post";
47
+ readonly pathResolver: () => string;
48
+ readonly requestBodySchema: v.ObjectSchema<{
49
+ readonly provider: v.PicklistSchema<["openai", "anthropic", "qwen", "deepseek", "moonshot", "openrouter", "litellm"], undefined>;
50
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
51
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
52
+ }, undefined>;
53
+ readonly responsesByStatusCode: {
54
+ readonly '4xx': v.ObjectSchema<{
55
+ readonly error: v.ObjectSchema<{
56
+ readonly code: v.StringSchema<undefined>;
57
+ readonly message: v.StringSchema<undefined>;
58
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
59
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
60
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
61
+ readonly message: v.StringSchema<undefined>;
62
+ }, undefined>, undefined>, undefined>;
63
+ }, undefined>;
64
+ }, undefined>;
65
+ readonly '5xx': v.ObjectSchema<{
66
+ readonly error: v.ObjectSchema<{
67
+ readonly code: v.StringSchema<undefined>;
68
+ readonly message: v.StringSchema<undefined>;
69
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
70
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
71
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
72
+ readonly message: v.StringSchema<undefined>;
73
+ }, undefined>, undefined>, undefined>;
74
+ }, undefined>;
75
+ }, undefined>;
76
+ readonly 201: v.ObjectSchema<{
77
+ readonly id: v.StringSchema<undefined>;
78
+ readonly scope: v.PicklistSchema<["account", "workspace", "user"], undefined>;
79
+ readonly scopeId: v.StringSchema<undefined>;
80
+ readonly provider: v.PicklistSchema<["openai", "anthropic", "qwen", "deepseek", "moonshot", "openrouter", "litellm"], undefined>;
81
+ readonly label: v.StringSchema<undefined>;
82
+ readonly createdAt: v.NumberSchema<undefined>;
83
+ readonly lastUsedAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
84
+ readonly inputTokens: v.NumberSchema<undefined>;
85
+ readonly outputTokens: v.NumberSchema<undefined>;
86
+ readonly requestCount: v.NumberSchema<undefined>;
87
+ }, undefined>;
88
+ };
89
+ };
90
+ export declare const removeWorkspaceApiKeyContract: {
91
+ readonly method: "delete";
92
+ readonly requestPathParamsSchema: v.ObjectSchema<{
93
+ readonly id: v.StringSchema<undefined>;
94
+ }, undefined> & import("@toad-contracts/core").ObjectKeysCarrier;
95
+ readonly pathResolver: ({ id }: {
96
+ id: string;
97
+ }) => string;
98
+ readonly responsesByStatusCode: {
99
+ readonly '4xx': v.ObjectSchema<{
100
+ readonly error: v.ObjectSchema<{
101
+ readonly code: v.StringSchema<undefined>;
102
+ readonly message: v.StringSchema<undefined>;
103
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
104
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
105
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
106
+ readonly message: v.StringSchema<undefined>;
107
+ }, undefined>, undefined>, undefined>;
108
+ }, undefined>;
109
+ }, undefined>;
110
+ readonly '5xx': v.ObjectSchema<{
111
+ readonly error: v.ObjectSchema<{
112
+ readonly code: v.StringSchema<undefined>;
113
+ readonly message: v.StringSchema<undefined>;
114
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
115
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
116
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
117
+ readonly message: v.StringSchema<undefined>;
118
+ }, undefined>, undefined>, undefined>;
119
+ }, undefined>;
120
+ }, undefined>;
121
+ readonly 204: typeof ContractNoBody;
122
+ };
123
+ };
124
+ export declare const listUserApiKeysContract: {
125
+ readonly method: "get";
126
+ readonly pathResolver: () => string;
127
+ readonly responsesByStatusCode: {
128
+ readonly '4xx': v.ObjectSchema<{
129
+ readonly error: v.ObjectSchema<{
130
+ readonly code: v.StringSchema<undefined>;
131
+ readonly message: v.StringSchema<undefined>;
132
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
133
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
134
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
135
+ readonly message: v.StringSchema<undefined>;
136
+ }, undefined>, undefined>, undefined>;
137
+ }, undefined>;
138
+ }, undefined>;
139
+ readonly '5xx': v.ObjectSchema<{
140
+ readonly error: v.ObjectSchema<{
141
+ readonly code: v.StringSchema<undefined>;
142
+ readonly message: v.StringSchema<undefined>;
143
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
144
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
145
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
146
+ readonly message: v.StringSchema<undefined>;
147
+ }, undefined>, undefined>, undefined>;
148
+ }, undefined>;
149
+ }, undefined>;
150
+ readonly 200: v.ObjectSchema<{
151
+ readonly keys: v.ArraySchema<v.ObjectSchema<{
152
+ readonly id: v.StringSchema<undefined>;
153
+ readonly scope: v.PicklistSchema<["account", "workspace", "user"], undefined>;
154
+ readonly scopeId: v.StringSchema<undefined>;
155
+ readonly provider: v.PicklistSchema<["openai", "anthropic", "qwen", "deepseek", "moonshot", "openrouter", "litellm"], undefined>;
156
+ readonly label: v.StringSchema<undefined>;
157
+ readonly createdAt: v.NumberSchema<undefined>;
158
+ readonly lastUsedAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
159
+ readonly inputTokens: v.NumberSchema<undefined>;
160
+ readonly outputTokens: v.NumberSchema<undefined>;
161
+ readonly requestCount: v.NumberSchema<undefined>;
162
+ }, undefined>, undefined>;
163
+ }, undefined>;
164
+ };
165
+ };
166
+ export declare const addUserApiKeyContract: {
167
+ readonly method: "post";
168
+ readonly pathResolver: () => string;
169
+ readonly requestBodySchema: v.ObjectSchema<{
170
+ readonly provider: v.PicklistSchema<["openai", "anthropic", "qwen", "deepseek", "moonshot", "openrouter", "litellm"], undefined>;
171
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
172
+ readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
173
+ }, undefined>;
174
+ readonly responsesByStatusCode: {
175
+ readonly '4xx': v.ObjectSchema<{
176
+ readonly error: v.ObjectSchema<{
177
+ readonly code: v.StringSchema<undefined>;
178
+ readonly message: v.StringSchema<undefined>;
179
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
180
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
181
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
182
+ readonly message: v.StringSchema<undefined>;
183
+ }, undefined>, undefined>, undefined>;
184
+ }, undefined>;
185
+ }, undefined>;
186
+ readonly '5xx': v.ObjectSchema<{
187
+ readonly error: v.ObjectSchema<{
188
+ readonly code: v.StringSchema<undefined>;
189
+ readonly message: v.StringSchema<undefined>;
190
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
191
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
192
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
193
+ readonly message: v.StringSchema<undefined>;
194
+ }, undefined>, undefined>, undefined>;
195
+ }, undefined>;
196
+ }, undefined>;
197
+ readonly 201: v.ObjectSchema<{
198
+ readonly id: v.StringSchema<undefined>;
199
+ readonly scope: v.PicklistSchema<["account", "workspace", "user"], undefined>;
200
+ readonly scopeId: v.StringSchema<undefined>;
201
+ readonly provider: v.PicklistSchema<["openai", "anthropic", "qwen", "deepseek", "moonshot", "openrouter", "litellm"], undefined>;
202
+ readonly label: v.StringSchema<undefined>;
203
+ readonly createdAt: v.NumberSchema<undefined>;
204
+ readonly lastUsedAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
205
+ readonly inputTokens: v.NumberSchema<undefined>;
206
+ readonly outputTokens: v.NumberSchema<undefined>;
207
+ readonly requestCount: v.NumberSchema<undefined>;
208
+ }, undefined>;
209
+ };
210
+ };
211
+ export declare const removeUserApiKeyContract: {
212
+ readonly method: "delete";
213
+ readonly requestPathParamsSchema: v.ObjectSchema<{
214
+ readonly id: v.StringSchema<undefined>;
215
+ }, undefined> & import("@toad-contracts/core").ObjectKeysCarrier;
216
+ readonly pathResolver: ({ id }: {
217
+ id: string;
218
+ }) => string;
219
+ readonly responsesByStatusCode: {
220
+ readonly '4xx': v.ObjectSchema<{
221
+ readonly error: v.ObjectSchema<{
222
+ readonly code: v.StringSchema<undefined>;
223
+ readonly message: v.StringSchema<undefined>;
224
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
225
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
226
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
227
+ readonly message: v.StringSchema<undefined>;
228
+ }, undefined>, undefined>, undefined>;
229
+ }, undefined>;
230
+ }, undefined>;
231
+ readonly '5xx': v.ObjectSchema<{
232
+ readonly error: v.ObjectSchema<{
233
+ readonly code: v.StringSchema<undefined>;
234
+ readonly message: v.StringSchema<undefined>;
235
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
236
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
237
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
238
+ readonly message: v.StringSchema<undefined>;
239
+ }, undefined>, undefined>, undefined>;
240
+ }, undefined>;
241
+ }, undefined>;
242
+ readonly 204: typeof ContractNoBody;
243
+ };
244
+ };
245
+ //# sourceMappingURL=api-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../src/routes/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqC,MAAM,yBAAyB,CAAA;AAC3F,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAgB5B,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIvC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKrC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxC,CAAA;AAIF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIlC,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKhC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKnC,CAAA"}
@@ -0,0 +1,49 @@
1
+ import { ContractNoBody, defineApiContract, withObjectKeys } from '@toad-contracts/valibot';
2
+ import * as v from 'valibot';
3
+ import { addApiKeySchema, apiKeyListResultSchema, apiKeySchema } from '../api-keys.js';
4
+ import { errorResponses } from './_shared.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Direct-provider API-key route contracts. Two controllers consume these:
7
+ // `workspaceApiKeyController` (mounted under `/workspaces/:workspaceId`, so its
8
+ // paths are relative) and `userApiKeyController` (mounted at `/`, so its `/me`
9
+ // paths are absolute and carry no path params). See ApiKeyController in
10
+ // @cat-factory/server. (The account-scoped key routes live in `routes/accounts.ts`.)
11
+ // ---------------------------------------------------------------------------
12
+ const idParams = withObjectKeys(v.object({ id: v.string() }));
13
+ // ---- workspace-scoped (relative to `/workspaces/:workspaceId`) ------------
14
+ export const listWorkspaceApiKeysContract = defineApiContract({
15
+ method: 'get',
16
+ pathResolver: () => '/api-keys',
17
+ responsesByStatusCode: { 200: apiKeyListResultSchema, ...errorResponses },
18
+ });
19
+ export const addWorkspaceApiKeyContract = defineApiContract({
20
+ method: 'post',
21
+ pathResolver: () => '/api-keys',
22
+ requestBodySchema: addApiKeySchema,
23
+ responsesByStatusCode: { 201: apiKeySchema, ...errorResponses },
24
+ });
25
+ export const removeWorkspaceApiKeyContract = defineApiContract({
26
+ method: 'delete',
27
+ requestPathParamsSchema: idParams,
28
+ pathResolver: ({ id }) => `/api-keys/${id}`,
29
+ responsesByStatusCode: { 204: ContractNoBody, ...errorResponses },
30
+ });
31
+ // ---- user-scoped (the caller's own pool, mounted at the root) -------------
32
+ export const listUserApiKeysContract = defineApiContract({
33
+ method: 'get',
34
+ pathResolver: () => '/me/api-keys',
35
+ responsesByStatusCode: { 200: apiKeyListResultSchema, ...errorResponses },
36
+ });
37
+ export const addUserApiKeyContract = defineApiContract({
38
+ method: 'post',
39
+ pathResolver: () => '/me/api-keys',
40
+ requestBodySchema: addApiKeySchema,
41
+ responsesByStatusCode: { 201: apiKeySchema, ...errorResponses },
42
+ });
43
+ export const removeUserApiKeyContract = defineApiContract({
44
+ method: 'delete',
45
+ requestPathParamsSchema: idParams,
46
+ pathResolver: ({ id }) => `/me/api-keys/${id}`,
47
+ responsesByStatusCode: { 204: ContractNoBody, ...errorResponses },
48
+ });
49
+ //# sourceMappingURL=api-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../src/routes/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC3F,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,8EAA8E;AAC9E,0EAA0E;AAC1E,gFAAgF;AAChF,+EAA+E;AAC/E,wEAAwE;AACxE,qFAAqF;AACrF,8EAA8E;AAE9E,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;AAE7D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,4BAA4B,GAAG,iBAAiB,CAAC;IAC5D,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,GAAG,EAAE,CAAC,WAAW;IAC/B,qBAAqB,EAAE,EAAE,GAAG,EAAE,sBAAsB,EAAE,GAAG,cAAc,EAAE;CAC1E,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;IAC1D,MAAM,EAAE,MAAM;IACd,YAAY,EAAE,GAAG,EAAE,CAAC,WAAW;IAC/B,iBAAiB,EAAE,eAAe;IAClC,qBAAqB,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE;CAChE,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAAC;IAC7D,MAAM,EAAE,QAAQ;IAChB,uBAAuB,EAAE,QAAQ;IACjC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE;IAC3C,qBAAqB,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;CAClE,CAAC,CAAA;AAEF,8EAA8E;AAE9E,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;IACvD,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,GAAG,EAAE,CAAC,cAAc;IAClC,qBAAqB,EAAE,EAAE,GAAG,EAAE,sBAAsB,EAAE,GAAG,cAAc,EAAE;CAC1E,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;IACrD,MAAM,EAAE,MAAM;IACd,YAAY,EAAE,GAAG,EAAE,CAAC,cAAc;IAClC,iBAAiB,EAAE,eAAe;IAClC,qBAAqB,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE;CAChE,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;IACxD,MAAM,EAAE,QAAQ;IAChB,uBAAuB,EAAE,QAAQ;IACjC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,gBAAgB,EAAE,EAAE;IAC9C,qBAAqB,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;CAClE,CAAC,CAAA"}