@figulus/schema 0.4.0-alpha-dev → 0.5.0-alpha-dev-2
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.
- package/.openapi-meta/index.ts +12 -0
- package/dist/core/entities/figspec.d.ts +659 -0
- package/dist/core/entities/figspec.d.ts.map +1 -0
- package/dist/core/entities/figspec.js +73 -0
- package/dist/core/entities/figspec.js.map +1 -0
- package/dist/core/entities/figstack.d.ts +139 -0
- package/dist/core/entities/figstack.d.ts.map +1 -0
- package/dist/core/entities/figstack.js +79 -0
- package/dist/core/entities/figstack.js.map +1 -0
- package/dist/core/entities/index.d.ts +3 -0
- package/dist/core/entities/index.d.ts.map +1 -0
- package/dist/core/entities/index.js +3 -0
- package/dist/core/entities/index.js.map +1 -0
- package/dist/core/execute.d.ts +64 -0
- package/dist/core/execute.d.ts.map +1 -0
- package/dist/core/execute.js +45 -0
- package/dist/core/execute.js.map +1 -0
- package/dist/core/generic.d.ts +35 -0
- package/dist/core/generic.d.ts.map +1 -0
- package/dist/core/generic.js +28 -0
- package/dist/core/generic.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/primitives.d.ts +3 -0
- package/dist/core/primitives.d.ts.map +1 -0
- package/dist/core/primitives.js +11 -0
- package/dist/core/primitives.js.map +1 -0
- package/dist/core/volumes.d.ts +160 -0
- package/dist/core/volumes.d.ts.map +1 -0
- package/dist/core/volumes.js +100 -0
- package/dist/core/volumes.js.map +1 -0
- package/dist/engine/deprecated/index.d.ts +2 -0
- package/dist/engine/deprecated/index.d.ts.map +1 -0
- package/dist/engine/deprecated/index.js +2 -0
- package/dist/engine/deprecated/index.js.map +1 -0
- package/dist/engine/deprecated/run-request.d.ts +73 -0
- package/dist/engine/deprecated/run-request.d.ts.map +1 -0
- package/dist/engine/deprecated/run-request.js +47 -0
- package/dist/engine/deprecated/run-request.js.map +1 -0
- package/dist/engine/dry-run.d.ts +15 -0
- package/dist/engine/dry-run.d.ts.map +1 -0
- package/dist/engine/dry-run.js +12 -0
- package/dist/engine/dry-run.js.map +1 -0
- package/dist/engine/health.d.ts +11 -0
- package/dist/engine/health.d.ts.map +1 -0
- package/dist/engine/health.js +9 -0
- package/dist/engine/health.js.map +1 -0
- package/dist/engine/images.d.ts +49 -0
- package/dist/engine/images.d.ts.map +1 -0
- package/dist/engine/images.js +44 -0
- package/dist/engine/images.js.map +1 -0
- package/dist/engine/index.d.ts +9 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +9 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/paths/containers.d.ts +8 -0
- package/dist/engine/paths/containers.d.ts.map +1 -0
- package/dist/engine/paths/containers.js +297 -0
- package/dist/engine/paths/containers.js.map +1 -0
- package/dist/engine/paths/dry-run.d.ts +3 -0
- package/dist/engine/paths/dry-run.d.ts.map +1 -0
- package/dist/engine/paths/dry-run.js +43 -0
- package/dist/engine/paths/dry-run.js.map +1 -0
- package/dist/engine/paths/health.d.ts +3 -0
- package/dist/engine/paths/health.d.ts.map +1 -0
- package/dist/engine/paths/health.js +36 -0
- package/dist/engine/paths/health.js.map +1 -0
- package/dist/engine/paths/images.d.ts +5 -0
- package/dist/engine/paths/images.d.ts.map +1 -0
- package/dist/engine/paths/images.js +144 -0
- package/dist/engine/paths/images.js.map +1 -0
- package/dist/engine/paths/index.d.ts +8 -0
- package/dist/engine/paths/index.d.ts.map +1 -0
- package/dist/engine/paths/index.js +8 -0
- package/dist/engine/paths/index.js.map +1 -0
- package/dist/engine/paths/sessions.d.ts +10 -0
- package/dist/engine/paths/sessions.d.ts.map +1 -0
- package/dist/engine/paths/sessions.js +484 -0
- package/dist/engine/paths/sessions.js.map +1 -0
- package/dist/engine/paths/stacks.d.ts +6 -0
- package/dist/engine/paths/stacks.d.ts.map +1 -0
- package/dist/engine/paths/stacks.js +175 -0
- package/dist/engine/paths/stacks.js.map +1 -0
- package/dist/engine/paths/volumes.d.ts +6 -0
- package/dist/engine/paths/volumes.d.ts.map +1 -0
- package/dist/engine/paths/volumes.js +164 -0
- package/dist/engine/paths/volumes.js.map +1 -0
- package/dist/engine/response.d.ts +8 -0
- package/dist/engine/response.d.ts.map +1 -0
- package/dist/engine/response.js +9 -0
- package/dist/engine/response.js.map +1 -0
- package/dist/engine/sessions.d.ts +343 -0
- package/dist/engine/sessions.d.ts.map +1 -0
- package/dist/engine/sessions.js +118 -0
- package/dist/engine/sessions.js.map +1 -0
- package/dist/engine/volumes.d.ts +52 -0
- package/dist/engine/volumes.d.ts.map +1 -0
- package/dist/engine/volumes.js +39 -0
- package/dist/engine/volumes.js.map +1 -0
- package/dist/index.d.ts +2 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -8
- package/dist/index.js.map +1 -1
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +3 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/json-schema.d.ts +82 -0
- package/dist/registry/json-schema.d.ts.map +1 -0
- package/dist/registry/json-schema.js +149 -0
- package/dist/registry/json-schema.js.map +1 -0
- package/dist/registry/metadata.d.ts +216 -0
- package/dist/registry/metadata.d.ts.map +1 -0
- package/dist/registry/metadata.js +143 -0
- package/dist/registry/metadata.js.map +1 -0
- package/package.json +12 -4
- package/scripts/fix-openapi-3.1.ts +183 -0
- package/scripts/generate-openapi-data.ts +51 -0
- package/scripts/generate-openapi-meta.ts +540 -0
- package/src/core/entities/figspec.ts +94 -0
- package/src/core/entities/figstack.ts +101 -0
- package/src/core/entities/index.ts +2 -0
- package/src/core/execute.ts +66 -0
- package/src/core/generic.ts +38 -0
- package/src/core/index.ts +5 -0
- package/src/core/primitives.ts +12 -0
- package/src/core/volumes.ts +124 -0
- package/src/engine/deprecated/index.ts +1 -0
- package/src/engine/deprecated/run-request.ts +53 -0
- package/src/engine/dry-run.ts +14 -0
- package/src/engine/health.ts +11 -0
- package/src/engine/images.ts +58 -0
- package/src/engine/index.ts +8 -0
- package/src/engine/paths/containers.ts +304 -0
- package/src/engine/paths/dry-run.ts +44 -0
- package/src/engine/paths/health.ts +37 -0
- package/src/engine/paths/images.ts +148 -0
- package/src/engine/paths/index.ts +7 -0
- package/src/engine/paths/sessions.ts +493 -0
- package/src/engine/paths/stacks.ts +179 -0
- package/src/engine/paths/volumes.ts +168 -0
- package/src/engine/response.ts +11 -0
- package/src/engine/sessions.ts +146 -0
- package/src/engine/volumes.ts +53 -0
- package/src/index.ts +3 -8
- package/src/registry/index.ts +2 -0
- package/src/registry/json-schema.ts +178 -0
- package/src/registry/metadata.ts +181 -0
- package/tests/figspec.test.ts +1 -1
- package/tests/schemas.test.ts +31 -31
- package/dist/figspec.d.ts +0 -4394
- package/dist/figspec.d.ts.map +0 -1
- package/dist/figspec.js +0 -214
- package/dist/figspec.js.map +0 -1
- package/dist/figstack.d.ts +0 -419
- package/dist/figstack.d.ts.map +0 -1
- package/dist/figstack.js +0 -72
- package/dist/figstack.js.map +0 -1
- package/dist/health.d.ts +0 -16
- package/dist/health.d.ts.map +0 -1
- package/dist/health.js +0 -7
- package/dist/health.js.map +0 -1
- package/dist/image.d.ts +0 -115
- package/dist/image.d.ts.map +0 -1
- package/dist/image.js +0 -42
- package/dist/image.js.map +0 -1
- package/dist/run-request.d.ts +0 -244
- package/dist/run-request.d.ts.map +0 -1
- package/dist/run-request.js +0 -43
- package/dist/run-request.js.map +0 -1
- package/dist/session.d.ts +0 -447
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -78
- package/dist/session.js.map +0 -1
- package/dist/shared.d.ts +0 -90
- package/dist/shared.d.ts.map +0 -1
- package/dist/shared.js +0 -41
- package/dist/shared.js.map +0 -1
- package/dist/volume.d.ts +0 -140
- package/dist/volume.d.ts.map +0 -1
- package/dist/volume.js +0 -37
- package/dist/volume.js.map +0 -1
- package/src/figspec.ts +0 -279
- package/src/figstack.ts +0 -92
- package/src/health.ts +0 -8
- package/src/image.ts +0 -55
- package/src/run-request.ts +0 -55
- package/src/session.ts +0 -101
- package/src/shared.ts +0 -56
- package/src/volume.ts +0 -50
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
import { RouteConfig } from "@asteasolutions/zod-to-openapi";
|
|
2
|
+
import z from "zod";
|
|
3
|
+
import { createSessionRequestSchema, createSessionResponseSchema, getRunResponseSchema, getSessionResponseSchema, listRunsResponseSchema, runInSessionRequestSchema, runInSessionResponseSchema, syncFileRequestSchema, syncFileResponseSchema } from "../sessions.js";
|
|
4
|
+
import { extendZodWithOpenApi } from "@asteasolutions/zod-to-openapi";
|
|
5
|
+
import { errorResponseSchema } from "../response.js";
|
|
6
|
+
|
|
7
|
+
extendZodWithOpenApi(z);
|
|
8
|
+
|
|
9
|
+
export const listSessionsRouteSchema: RouteConfig = {
|
|
10
|
+
method: "get",
|
|
11
|
+
path: "/api/v1/sessions",
|
|
12
|
+
operationId: "listSessions",
|
|
13
|
+
summary: "List all active sessions",
|
|
14
|
+
description: "Returns all active sessions from the session store (memory and Valkey).",
|
|
15
|
+
tags: [
|
|
16
|
+
"sessions"
|
|
17
|
+
],
|
|
18
|
+
responses: {
|
|
19
|
+
200: {
|
|
20
|
+
description: "List of active sessions",
|
|
21
|
+
content: {
|
|
22
|
+
"application/json": {
|
|
23
|
+
schema: z.object({
|
|
24
|
+
sessions: getSessionResponseSchema.array(),
|
|
25
|
+
count: z.int(),
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
503: {
|
|
31
|
+
description: "Session management unavailable (Valkey not configured)",
|
|
32
|
+
content: {
|
|
33
|
+
"application/json": {
|
|
34
|
+
schema: errorResponseSchema
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export const createSessionRouteSchema: RouteConfig = {
|
|
42
|
+
method: "post",
|
|
43
|
+
path: "/api/v1/sessions",
|
|
44
|
+
operationId: "createSession",
|
|
45
|
+
summary: "Create a persistent session",
|
|
46
|
+
description: "Creates and starts a persistent container session. Returns 503 if Valkey is not configured (session management unavailable).",
|
|
47
|
+
tags: [
|
|
48
|
+
"sessions"
|
|
49
|
+
],
|
|
50
|
+
request: {
|
|
51
|
+
body: {
|
|
52
|
+
description: undefined,
|
|
53
|
+
content: {
|
|
54
|
+
"application/json": {
|
|
55
|
+
schema: createSessionRequestSchema
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
required: true
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
responses: {
|
|
62
|
+
201: {
|
|
63
|
+
description: "Session created",
|
|
64
|
+
content: {
|
|
65
|
+
"application/json": {
|
|
66
|
+
schema: createSessionResponseSchema
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
400: {
|
|
71
|
+
description: "Missing image_tag or invalid request",
|
|
72
|
+
content: {
|
|
73
|
+
"application/json": {
|
|
74
|
+
schema: errorResponseSchema
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
500: {
|
|
79
|
+
description: "Failed to create session",
|
|
80
|
+
content: {
|
|
81
|
+
"application/json": {
|
|
82
|
+
schema: errorResponseSchema
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
503: {
|
|
87
|
+
description: "Session management unavailable (Valkey not configured)",
|
|
88
|
+
content: {
|
|
89
|
+
"application/json": {
|
|
90
|
+
schema: errorResponseSchema
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const getSessionRouteSchema: RouteConfig = {
|
|
98
|
+
method: "get",
|
|
99
|
+
path: "/api/v1/sessions/{sessionId}",
|
|
100
|
+
operationId: "getSession",
|
|
101
|
+
summary: "Get session details",
|
|
102
|
+
description: "Returns the current status and metadata for a session, with container liveness verification.",
|
|
103
|
+
tags: [
|
|
104
|
+
"sessions"
|
|
105
|
+
],
|
|
106
|
+
parameters: [
|
|
107
|
+
{
|
|
108
|
+
name: "sessionId",
|
|
109
|
+
in: "path",
|
|
110
|
+
required: true,
|
|
111
|
+
schema: {
|
|
112
|
+
type: "string"
|
|
113
|
+
},
|
|
114
|
+
example: "sess-abc123"
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
responses: {
|
|
118
|
+
200: {
|
|
119
|
+
description: "Session details",
|
|
120
|
+
content: {
|
|
121
|
+
"application/json": {
|
|
122
|
+
schema: getSessionResponseSchema
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
400: {
|
|
127
|
+
description: "Missing sessionId",
|
|
128
|
+
content: {
|
|
129
|
+
"application/json": {
|
|
130
|
+
schema: errorResponseSchema
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
404: {
|
|
135
|
+
description: "Session not found",
|
|
136
|
+
content: {
|
|
137
|
+
"application/json": {
|
|
138
|
+
schema: errorResponseSchema
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
503: {
|
|
143
|
+
description: "Session management unavailable",
|
|
144
|
+
content: {
|
|
145
|
+
"application/json": {
|
|
146
|
+
schema: errorResponseSchema
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export const deleteSessionRouteSchema: RouteConfig = {
|
|
154
|
+
method: "delete",
|
|
155
|
+
path: "/api/v1/sessions/{sessionId}",
|
|
156
|
+
operationId: "deleteSession",
|
|
157
|
+
summary: "Delete a session",
|
|
158
|
+
description: "Destroys the session and its container.",
|
|
159
|
+
tags: [
|
|
160
|
+
"sessions"
|
|
161
|
+
],
|
|
162
|
+
parameters: [
|
|
163
|
+
{
|
|
164
|
+
name: "sessionId",
|
|
165
|
+
in: "path",
|
|
166
|
+
required: true,
|
|
167
|
+
schema: {
|
|
168
|
+
type: "string"
|
|
169
|
+
},
|
|
170
|
+
example: "sess-abc123"
|
|
171
|
+
}
|
|
172
|
+
],
|
|
173
|
+
responses: {
|
|
174
|
+
200: {
|
|
175
|
+
description: "Session deleted",
|
|
176
|
+
content: {
|
|
177
|
+
"application/json": {
|
|
178
|
+
schema: z.object({
|
|
179
|
+
message: z.string(),
|
|
180
|
+
session_id: z.string(),
|
|
181
|
+
}),
|
|
182
|
+
example: {
|
|
183
|
+
message: "Session deleted successfully",
|
|
184
|
+
session_id: "sess-abc123"
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
400: {
|
|
190
|
+
description: "Missing sessionId",
|
|
191
|
+
content: {
|
|
192
|
+
"application/json": {
|
|
193
|
+
schema: errorResponseSchema
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
404: {
|
|
198
|
+
description: "Session not found",
|
|
199
|
+
content: {
|
|
200
|
+
"application/json": {
|
|
201
|
+
schema: errorResponseSchema
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
503: {
|
|
206
|
+
description: "Session management unavailable",
|
|
207
|
+
content: {
|
|
208
|
+
"application/json": {
|
|
209
|
+
schema: errorResponseSchema
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
export const runInSessionRouteSchema: RouteConfig = {
|
|
217
|
+
method: "post",
|
|
218
|
+
path: "/api/v1/sessions/{sessionId}/run",
|
|
219
|
+
operationId: "runInSession",
|
|
220
|
+
summary: "Run a command in a session",
|
|
221
|
+
description: "Executes a command inside the session container and returns the result. Blocks until command completes or timeout is reached.",
|
|
222
|
+
tags: [
|
|
223
|
+
"sessions"
|
|
224
|
+
],
|
|
225
|
+
parameters: [
|
|
226
|
+
{
|
|
227
|
+
name: "sessionId",
|
|
228
|
+
in: "path",
|
|
229
|
+
required: true,
|
|
230
|
+
schema: {
|
|
231
|
+
type: "string"
|
|
232
|
+
},
|
|
233
|
+
example: "sess-abc123"
|
|
234
|
+
}
|
|
235
|
+
],
|
|
236
|
+
request: {
|
|
237
|
+
body: {
|
|
238
|
+
description: undefined,
|
|
239
|
+
content: {
|
|
240
|
+
"application/json": {
|
|
241
|
+
schema: runInSessionRequestSchema
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
required: true
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
responses: {
|
|
248
|
+
200: {
|
|
249
|
+
description: "Command completed",
|
|
250
|
+
content: {
|
|
251
|
+
"application/json": {
|
|
252
|
+
schema: runInSessionResponseSchema
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
400: {
|
|
257
|
+
description: "Missing command or invalid request",
|
|
258
|
+
content: {
|
|
259
|
+
"application/json": {
|
|
260
|
+
schema: errorResponseSchema
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
404: {
|
|
265
|
+
description: "Session not found",
|
|
266
|
+
content: {
|
|
267
|
+
"application/json": {
|
|
268
|
+
schema: errorResponseSchema
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
500: {
|
|
273
|
+
description: "Run failed",
|
|
274
|
+
content: {
|
|
275
|
+
"application/json": {
|
|
276
|
+
schema: errorResponseSchema
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
503: {
|
|
281
|
+
description: "Session management unavailable",
|
|
282
|
+
content: {
|
|
283
|
+
"application/json": {
|
|
284
|
+
schema: errorResponseSchema
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
export const syncFileInSessionRouteSchema: RouteConfig = {
|
|
292
|
+
method: "post",
|
|
293
|
+
path: "/api/v1/sessions/{sessionId}/sync-file",
|
|
294
|
+
operationId: "syncFileInSession",
|
|
295
|
+
summary: "Sync a file into a session container",
|
|
296
|
+
description: "Writes a file to an absolute path inside the running session container. Content must be base64-encoded (default) or utf8 as specified by encoding.",
|
|
297
|
+
tags: [
|
|
298
|
+
"sessions"
|
|
299
|
+
],
|
|
300
|
+
parameters: [
|
|
301
|
+
{
|
|
302
|
+
name: "sessionId",
|
|
303
|
+
in: "path",
|
|
304
|
+
required: true,
|
|
305
|
+
schema: {
|
|
306
|
+
type: "string"
|
|
307
|
+
},
|
|
308
|
+
example: "sess-abc123"
|
|
309
|
+
}
|
|
310
|
+
],
|
|
311
|
+
request: {
|
|
312
|
+
body: {
|
|
313
|
+
description: undefined,
|
|
314
|
+
content: {
|
|
315
|
+
"application/json": {
|
|
316
|
+
schema: syncFileRequestSchema
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
required: true
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
responses: {
|
|
323
|
+
200: {
|
|
324
|
+
description: "File written successfully",
|
|
325
|
+
content: {
|
|
326
|
+
"application/json": {
|
|
327
|
+
schema: syncFileResponseSchema
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
400: {
|
|
332
|
+
description: "Missing targetPath/content, invalid encoding, invalid base64, or invalid path",
|
|
333
|
+
content: {
|
|
334
|
+
"application/json": {
|
|
335
|
+
schema: errorResponseSchema
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
404: {
|
|
340
|
+
description: "Session not found",
|
|
341
|
+
content: {
|
|
342
|
+
"application/json": {
|
|
343
|
+
schema: errorResponseSchema
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
409: {
|
|
348
|
+
description: "Container is no longer running",
|
|
349
|
+
content: {
|
|
350
|
+
"application/json": {
|
|
351
|
+
schema: errorResponseSchema
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
500: {
|
|
356
|
+
description: "File write failed",
|
|
357
|
+
content: {
|
|
358
|
+
"application/json": {
|
|
359
|
+
schema: errorResponseSchema
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
},
|
|
363
|
+
503: {
|
|
364
|
+
description: "Session management unavailable",
|
|
365
|
+
content: {
|
|
366
|
+
"application/json": {
|
|
367
|
+
schema: errorResponseSchema
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
export const listSessionRunsRouteSchema: RouteConfig = {
|
|
375
|
+
method: "get",
|
|
376
|
+
path: "/api/v1/sessions/{sessionId}/runs",
|
|
377
|
+
operationId: "listSessionRuns",
|
|
378
|
+
summary: "List all runs for a session",
|
|
379
|
+
description: "Returns all cached runs for a session, ordered by start time ascending.",
|
|
380
|
+
tags: [
|
|
381
|
+
"sessions"
|
|
382
|
+
],
|
|
383
|
+
parameters: [
|
|
384
|
+
{
|
|
385
|
+
name: "sessionId",
|
|
386
|
+
in: "path",
|
|
387
|
+
required: true,
|
|
388
|
+
schema: {
|
|
389
|
+
type: "string"
|
|
390
|
+
},
|
|
391
|
+
example: "sess-abc123"
|
|
392
|
+
}
|
|
393
|
+
],
|
|
394
|
+
responses: {
|
|
395
|
+
200: {
|
|
396
|
+
description: "List of runs",
|
|
397
|
+
content: {
|
|
398
|
+
"application/json": {
|
|
399
|
+
schema: listRunsResponseSchema
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
400: {
|
|
404
|
+
description: "Missing sessionId",
|
|
405
|
+
content: {
|
|
406
|
+
"application/json": {
|
|
407
|
+
schema: errorResponseSchema
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
500: {
|
|
412
|
+
description: "Internal error",
|
|
413
|
+
content: {
|
|
414
|
+
"application/json": {
|
|
415
|
+
schema: errorResponseSchema
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
503: {
|
|
420
|
+
description: "Session management unavailable",
|
|
421
|
+
content: {
|
|
422
|
+
"application/json": {
|
|
423
|
+
schema: errorResponseSchema
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
export const getSessionRunRouteSchema: RouteConfig = {
|
|
431
|
+
method: "get",
|
|
432
|
+
path: "/api/v1/sessions/{sessionId}/runs/{runId}",
|
|
433
|
+
operationId: "getSessionRun",
|
|
434
|
+
summary: "Get a previous run result",
|
|
435
|
+
description: "Retrieves the stored result of a past run within a session.",
|
|
436
|
+
tags: [
|
|
437
|
+
"sessions"
|
|
438
|
+
],
|
|
439
|
+
parameters: [
|
|
440
|
+
{
|
|
441
|
+
name: "sessionId",
|
|
442
|
+
in: "path",
|
|
443
|
+
required: true,
|
|
444
|
+
schema: {
|
|
445
|
+
type: "string"
|
|
446
|
+
},
|
|
447
|
+
example: "sess-abc123"
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
name: "runId",
|
|
451
|
+
in: "path",
|
|
452
|
+
required: true,
|
|
453
|
+
schema: {
|
|
454
|
+
type: "string"
|
|
455
|
+
},
|
|
456
|
+
example: "run-def456"
|
|
457
|
+
}
|
|
458
|
+
],
|
|
459
|
+
responses: {
|
|
460
|
+
200: {
|
|
461
|
+
description: "Run details",
|
|
462
|
+
content: {
|
|
463
|
+
"application/json": {
|
|
464
|
+
schema: getRunResponseSchema
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
400: {
|
|
469
|
+
description: "Missing runId",
|
|
470
|
+
content: {
|
|
471
|
+
"application/json": {
|
|
472
|
+
schema: errorResponseSchema
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
},
|
|
476
|
+
404: {
|
|
477
|
+
description: "Run not found",
|
|
478
|
+
content: {
|
|
479
|
+
"application/json": {
|
|
480
|
+
schema: errorResponseSchema
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
},
|
|
484
|
+
503: {
|
|
485
|
+
description: "Session management unavailable",
|
|
486
|
+
content: {
|
|
487
|
+
"application/json": {
|
|
488
|
+
schema: errorResponseSchema
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { RouteConfig } from "@asteasolutions/zod-to-openapi";
|
|
2
|
+
import { getStackResponseSchema, listStacksResponseSchema, startStackRequestSchema, startStackResponseSchema } from "../sessions.js";
|
|
3
|
+
import { errorResponseSchema } from "../response.js";
|
|
4
|
+
|
|
5
|
+
export const startStackRouteSchema: RouteConfig = {
|
|
6
|
+
method: "post",
|
|
7
|
+
path: "/api/v1/stacks",
|
|
8
|
+
operationId: "startStack",
|
|
9
|
+
summary: "Start a FigStack",
|
|
10
|
+
description: "Parse the FigStack spec and start all containers in dependency order. Optionally builds all required images first if build=true.",
|
|
11
|
+
tags: [
|
|
12
|
+
"stacks"
|
|
13
|
+
],
|
|
14
|
+
request: {
|
|
15
|
+
body: {
|
|
16
|
+
description: undefined,
|
|
17
|
+
content: {
|
|
18
|
+
"application/json": {
|
|
19
|
+
schema: startStackRequestSchema
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
required: true
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
responses: {
|
|
26
|
+
201: {
|
|
27
|
+
description: "Stack started successfully",
|
|
28
|
+
content: {
|
|
29
|
+
"application/json": {
|
|
30
|
+
schema: startStackResponseSchema
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
400: {
|
|
35
|
+
description: "Invalid request or spec",
|
|
36
|
+
content: {
|
|
37
|
+
"application/json": {
|
|
38
|
+
schema: errorResponseSchema
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
500: {
|
|
43
|
+
description: "Stack startup failed",
|
|
44
|
+
content: {
|
|
45
|
+
"application/json": {
|
|
46
|
+
schema: errorResponseSchema
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
503: {
|
|
51
|
+
description: "Stack management unavailable",
|
|
52
|
+
content: {
|
|
53
|
+
"application/json": {
|
|
54
|
+
schema: errorResponseSchema
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const listStacksRouteSchema: RouteConfig = {
|
|
62
|
+
method: "get",
|
|
63
|
+
path: "/api/v1/stacks",
|
|
64
|
+
operationId: "listStacks",
|
|
65
|
+
summary: "List all running FigStacks",
|
|
66
|
+
description: "Returns all stacks currently tracked by the engine.",
|
|
67
|
+
tags: [
|
|
68
|
+
"stacks"
|
|
69
|
+
],
|
|
70
|
+
responses: {
|
|
71
|
+
200: {
|
|
72
|
+
description: "List of running stacks",
|
|
73
|
+
content: {
|
|
74
|
+
"application/json": {
|
|
75
|
+
schema: listStacksResponseSchema
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
503: {
|
|
80
|
+
description: "Stack management unavailable",
|
|
81
|
+
content: {
|
|
82
|
+
"application/json": {
|
|
83
|
+
schema: errorResponseSchema
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const getStackRouteSchema: RouteConfig = {
|
|
91
|
+
method: "get",
|
|
92
|
+
path: "/api/v1/stacks/{stackName}",
|
|
93
|
+
operationId: "getStack",
|
|
94
|
+
summary: "Get the status of a running FigStack",
|
|
95
|
+
description: "Returns the current status of all containers in the named stack.",
|
|
96
|
+
tags: [
|
|
97
|
+
"stacks"
|
|
98
|
+
],
|
|
99
|
+
parameters: [
|
|
100
|
+
{
|
|
101
|
+
name: "stackName",
|
|
102
|
+
in: "path",
|
|
103
|
+
required: true,
|
|
104
|
+
schema: {
|
|
105
|
+
type: "string"
|
|
106
|
+
},
|
|
107
|
+
example: "blog"
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
responses: {
|
|
111
|
+
200: {
|
|
112
|
+
description: "Stack status",
|
|
113
|
+
content: {
|
|
114
|
+
"application/json": {
|
|
115
|
+
schema: getStackResponseSchema
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
404: {
|
|
120
|
+
description: "Stack not found",
|
|
121
|
+
content: {
|
|
122
|
+
"application/json": {
|
|
123
|
+
schema: errorResponseSchema
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
503: {
|
|
128
|
+
description: "Stack management unavailable",
|
|
129
|
+
content: {
|
|
130
|
+
"application/json": {
|
|
131
|
+
schema: errorResponseSchema
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export const stopStackRouteSchema: RouteConfig = {
|
|
139
|
+
method: "delete",
|
|
140
|
+
path: "/api/v1/stacks/{stackName}",
|
|
141
|
+
operationId: "stopStack",
|
|
142
|
+
summary: "Stop a running FigStack",
|
|
143
|
+
description: "Stops all containers in the stack and removes the stack network.",
|
|
144
|
+
tags: [
|
|
145
|
+
"stacks"
|
|
146
|
+
],
|
|
147
|
+
parameters: [
|
|
148
|
+
{
|
|
149
|
+
name: "stackName",
|
|
150
|
+
in: "path",
|
|
151
|
+
required: true,
|
|
152
|
+
schema: {
|
|
153
|
+
type: "string"
|
|
154
|
+
},
|
|
155
|
+
example: "blog"
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
responses: {
|
|
159
|
+
204: {
|
|
160
|
+
description: "Stack stopped successfully"
|
|
161
|
+
},
|
|
162
|
+
500: {
|
|
163
|
+
description: "Stack stop failed",
|
|
164
|
+
content: {
|
|
165
|
+
"application/json": {
|
|
166
|
+
schema: errorResponseSchema
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
503: {
|
|
171
|
+
description: "Stack management unavailable",
|
|
172
|
+
content: {
|
|
173
|
+
"application/json": {
|
|
174
|
+
schema: errorResponseSchema
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
};
|