@figulus/schema 0.4.0-alpha-dev

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 (50) hide show
  1. package/dist/figspec.d.ts +4394 -0
  2. package/dist/figspec.d.ts.map +1 -0
  3. package/dist/figspec.js +214 -0
  4. package/dist/figspec.js.map +1 -0
  5. package/dist/figstack.d.ts +419 -0
  6. package/dist/figstack.d.ts.map +1 -0
  7. package/dist/figstack.js +72 -0
  8. package/dist/figstack.js.map +1 -0
  9. package/dist/health.d.ts +16 -0
  10. package/dist/health.d.ts.map +1 -0
  11. package/dist/health.js +7 -0
  12. package/dist/health.js.map +1 -0
  13. package/dist/image.d.ts +115 -0
  14. package/dist/image.d.ts.map +1 -0
  15. package/dist/image.js +42 -0
  16. package/dist/image.js.map +1 -0
  17. package/dist/index.d.ts +9 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +9 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/run-request.d.ts +244 -0
  22. package/dist/run-request.d.ts.map +1 -0
  23. package/dist/run-request.js +43 -0
  24. package/dist/run-request.js.map +1 -0
  25. package/dist/session.d.ts +447 -0
  26. package/dist/session.d.ts.map +1 -0
  27. package/dist/session.js +78 -0
  28. package/dist/session.js.map +1 -0
  29. package/dist/shared.d.ts +90 -0
  30. package/dist/shared.d.ts.map +1 -0
  31. package/dist/shared.js +41 -0
  32. package/dist/shared.js.map +1 -0
  33. package/dist/volume.d.ts +140 -0
  34. package/dist/volume.d.ts.map +1 -0
  35. package/dist/volume.js +37 -0
  36. package/dist/volume.js.map +1 -0
  37. package/package.json +22 -0
  38. package/src/figspec.ts +279 -0
  39. package/src/figstack.ts +92 -0
  40. package/src/health.ts +8 -0
  41. package/src/image.ts +55 -0
  42. package/src/index.ts +8 -0
  43. package/src/run-request.ts +55 -0
  44. package/src/session.ts +101 -0
  45. package/src/shared.ts +56 -0
  46. package/src/volume.ts +50 -0
  47. package/tests/figspec.test.ts +383 -0
  48. package/tests/schemas.test.ts +187 -0
  49. package/tsconfig.build.json +11 -0
  50. package/tsconfig.json +12 -0
@@ -0,0 +1,72 @@
1
+ import { z } from 'zod';
2
+ import { PortMappingSchema } from './shared.js';
3
+ // ---------------------------------------------------------------------------
4
+ // FigStackDependency
5
+ // ---------------------------------------------------------------------------
6
+ export const figStackDependencySchema = z.object({
7
+ name: z.string().min(1),
8
+ condition: z.enum(['started', 'healthy', 'completed']).default('started').optional(),
9
+ });
10
+ // ---------------------------------------------------------------------------
11
+ // FigStackHealthCheck (discriminated union flattened into one object)
12
+ // ---------------------------------------------------------------------------
13
+ export const figStackHealthCheckSchema = z.object({
14
+ type: z.enum(['exec', 'http', 'tcp']),
15
+ // exec
16
+ cmd: z.string().optional(),
17
+ // http
18
+ path: z.string().optional(),
19
+ port: z.number().int().optional(),
20
+ method: z.enum(['GET', 'HEAD']).optional(),
21
+ expectedStatus: z.number().int().optional(),
22
+ // shared timing
23
+ intervalSeconds: z.number().int().optional(),
24
+ timeoutSeconds: z.number().int().optional(),
25
+ retries: z.number().int().optional(),
26
+ startPeriodSeconds: z.number().int().optional(),
27
+ });
28
+ // ---------------------------------------------------------------------------
29
+ // FigStackEntry
30
+ // ---------------------------------------------------------------------------
31
+ export const figStackEntrySchema = z.object({
32
+ name: z.string().min(1),
33
+ spec: z.union([z.record(z.unknown()), z.string()]),
34
+ ports: z.array(PortMappingSchema).optional(),
35
+ dependsOn: z.array(figStackDependencySchema).optional(),
36
+ healthCheck: figStackHealthCheckSchema.optional(),
37
+ env: z.record(z.string()).optional(),
38
+ });
39
+ // ---------------------------------------------------------------------------
40
+ // FigStackNetworkConfig
41
+ // ---------------------------------------------------------------------------
42
+ export const figStackNetworkConfigSchema = z.object({
43
+ name: z.string().optional(),
44
+ subnet: z.string().optional(),
45
+ external: z.string().optional(),
46
+ });
47
+ // ---------------------------------------------------------------------------
48
+ // FigStackVolumeDeclaration
49
+ // ---------------------------------------------------------------------------
50
+ export const figStackVolumeDeclarationSchema = z.object({
51
+ name: z.string().min(1),
52
+ external: z.boolean().optional(),
53
+ });
54
+ // ---------------------------------------------------------------------------
55
+ // FigStackEnvGroup
56
+ // ---------------------------------------------------------------------------
57
+ export const figStackEnvGroupSchema = z.object({
58
+ vars: z.record(z.string()),
59
+ inject: z.array(z.string()).optional(),
60
+ });
61
+ // ---------------------------------------------------------------------------
62
+ // FigStack (top-level)
63
+ // ---------------------------------------------------------------------------
64
+ export const figStackSchema = z.object({
65
+ schemaVersion: z.literal('1.0'),
66
+ stackName: z.string().min(1),
67
+ containers: z.array(figStackEntrySchema).min(1),
68
+ env: z.array(figStackEnvGroupSchema).optional(),
69
+ network: figStackNetworkConfigSchema.optional(),
70
+ volumes: z.array(figStackVolumeDeclarationSchema).optional(),
71
+ });
72
+ //# sourceMappingURL=figstack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figstack.js","sourceRoot":"","sources":["../src/figstack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ export declare const HealthResponseSchema: z.ZodObject<{
3
+ status: z.ZodEnum<["healthy", "unhealthy"]>;
4
+ docker_api: z.ZodOptional<z.ZodString>;
5
+ message: z.ZodOptional<z.ZodString>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ status: "healthy" | "unhealthy";
8
+ message?: string | undefined;
9
+ docker_api?: string | undefined;
10
+ }, {
11
+ status: "healthy" | "unhealthy";
12
+ message?: string | undefined;
13
+ docker_api?: string | undefined;
14
+ }>;
15
+ export type HealthResponse = z.infer<typeof HealthResponseSchema>;
16
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
package/dist/health.js ADDED
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export const HealthResponseSchema = z.object({
3
+ status: z.enum(['healthy', 'unhealthy']),
4
+ docker_api: z.string().optional(),
5
+ message: z.string().optional(),
6
+ });
7
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACxC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC"}
@@ -0,0 +1,115 @@
1
+ import { z } from 'zod';
2
+ export declare const BuildImageRequestSchema: z.ZodObject<{
3
+ spec: z.ZodRecord<z.ZodString, z.ZodUnknown>;
4
+ platform: z.ZodOptional<z.ZodString>;
5
+ parser_script: z.ZodOptional<z.ZodString>;
6
+ root_dir: z.ZodOptional<z.ZodString>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ spec: Record<string, unknown>;
9
+ platform?: string | undefined;
10
+ parser_script?: string | undefined;
11
+ root_dir?: string | undefined;
12
+ }, {
13
+ spec: Record<string, unknown>;
14
+ platform?: string | undefined;
15
+ parser_script?: string | undefined;
16
+ root_dir?: string | undefined;
17
+ }>;
18
+ export type BuildImageRequest = z.infer<typeof BuildImageRequestSchema>;
19
+ export declare const BuildImageResponseSchema: z.ZodObject<{
20
+ image_tag: z.ZodString;
21
+ hash: z.ZodString;
22
+ cached: z.ZodBoolean;
23
+ message: z.ZodOptional<z.ZodString>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ image_tag: string;
26
+ hash: string;
27
+ cached: boolean;
28
+ message?: string | undefined;
29
+ }, {
30
+ image_tag: string;
31
+ hash: string;
32
+ cached: boolean;
33
+ message?: string | undefined;
34
+ }>;
35
+ export type BuildImageResponse = z.infer<typeof BuildImageResponseSchema>;
36
+ export declare const PruneImagesRequestSchema: z.ZodObject<{
37
+ retention_days: z.ZodOptional<z.ZodNumber>;
38
+ all: z.ZodOptional<z.ZodBoolean>;
39
+ }, "strip", z.ZodTypeAny, {
40
+ retention_days?: number | undefined;
41
+ all?: boolean | undefined;
42
+ }, {
43
+ retention_days?: number | undefined;
44
+ all?: boolean | undefined;
45
+ }>;
46
+ export type PruneImagesRequest = z.infer<typeof PruneImagesRequestSchema>;
47
+ export declare const PruneImagesResponseSchema: z.ZodObject<{
48
+ removed: z.ZodNumber;
49
+ bytes_freed: z.ZodNumber;
50
+ mb_freed: z.ZodNumber;
51
+ message: z.ZodString;
52
+ docker_images_pruned: z.ZodOptional<z.ZodNumber>;
53
+ docker_bytes_freed: z.ZodOptional<z.ZodNumber>;
54
+ }, "strip", z.ZodTypeAny, {
55
+ message: string;
56
+ removed: number;
57
+ bytes_freed: number;
58
+ mb_freed: number;
59
+ docker_images_pruned?: number | undefined;
60
+ docker_bytes_freed?: number | undefined;
61
+ }, {
62
+ message: string;
63
+ removed: number;
64
+ bytes_freed: number;
65
+ mb_freed: number;
66
+ docker_images_pruned?: number | undefined;
67
+ docker_bytes_freed?: number | undefined;
68
+ }>;
69
+ export type PruneImagesResponse = z.infer<typeof PruneImagesResponseSchema>;
70
+ export declare const PruneCacheResponseSchema: z.ZodObject<{
71
+ freed_bytes: z.ZodNumber;
72
+ }, "strip", z.ZodTypeAny, {
73
+ freed_bytes: number;
74
+ }, {
75
+ freed_bytes: number;
76
+ }>;
77
+ export type PruneCacheResponse = z.infer<typeof PruneCacheResponseSchema>;
78
+ export declare const ExtractArtifactsRequestSchema: z.ZodObject<{
79
+ container_id: z.ZodString;
80
+ container_path: z.ZodString;
81
+ host_path: z.ZodString;
82
+ }, "strip", z.ZodTypeAny, {
83
+ host_path: string;
84
+ container_path: string;
85
+ container_id: string;
86
+ }, {
87
+ host_path: string;
88
+ container_path: string;
89
+ container_id: string;
90
+ }>;
91
+ export type ExtractArtifactsRequest = z.infer<typeof ExtractArtifactsRequestSchema>;
92
+ export declare const ExtractArtifactsResponseSchema: z.ZodObject<{
93
+ container_id: z.ZodString;
94
+ container_path: z.ZodString;
95
+ host_path: z.ZodString;
96
+ files_count: z.ZodOptional<z.ZodNumber>;
97
+ total_bytes: z.ZodOptional<z.ZodNumber>;
98
+ message: z.ZodString;
99
+ }, "strip", z.ZodTypeAny, {
100
+ message: string;
101
+ host_path: string;
102
+ container_path: string;
103
+ container_id: string;
104
+ files_count?: number | undefined;
105
+ total_bytes?: number | undefined;
106
+ }, {
107
+ message: string;
108
+ host_path: string;
109
+ container_path: string;
110
+ container_id: string;
111
+ files_count?: number | undefined;
112
+ total_bytes?: number | undefined;
113
+ }>;
114
+ export type ExtractArtifactsResponse = z.infer<typeof ExtractArtifactsResponseSchema>;
115
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;EAKnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;EAOpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,wBAAwB;;;;;;EAEnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,6BAA6B;;;;;;;;;;;;EAIxC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;EAOzC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC"}
package/dist/image.js ADDED
@@ -0,0 +1,42 @@
1
+ import { z } from 'zod';
2
+ export const BuildImageRequestSchema = z.object({
3
+ spec: z.record(z.unknown()),
4
+ platform: z.string().optional(),
5
+ parser_script: z.string().optional(),
6
+ root_dir: z.string().optional(),
7
+ });
8
+ export const BuildImageResponseSchema = z.object({
9
+ image_tag: z.string().min(1),
10
+ hash: z.string().min(1),
11
+ cached: z.boolean(),
12
+ message: z.string().optional(),
13
+ });
14
+ export const PruneImagesRequestSchema = z.object({
15
+ retention_days: z.number().int().min(1).optional(),
16
+ all: z.boolean().optional(),
17
+ });
18
+ export const PruneImagesResponseSchema = z.object({
19
+ removed: z.number().int(),
20
+ bytes_freed: z.number().int(),
21
+ mb_freed: z.number(),
22
+ message: z.string(),
23
+ docker_images_pruned: z.number().int().optional(),
24
+ docker_bytes_freed: z.number().int().optional(),
25
+ });
26
+ export const PruneCacheResponseSchema = z.object({
27
+ freed_bytes: z.number().int(),
28
+ });
29
+ export const ExtractArtifactsRequestSchema = z.object({
30
+ container_id: z.string().min(1),
31
+ container_path: z.string().min(1),
32
+ host_path: z.string().min(1),
33
+ });
34
+ export const ExtractArtifactsResponseSchema = z.object({
35
+ container_id: z.string(),
36
+ container_path: z.string(),
37
+ host_path: z.string(),
38
+ files_count: z.number().int().optional(),
39
+ total_bytes: z.number().int().optional(),
40
+ message: z.string(),
41
+ });
42
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClD,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACjD,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;CAC9B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from './shared.js';
2
+ export * from './health.js';
3
+ export * from './run-request.js';
4
+ export * from './image.js';
5
+ export * from './volume.js';
6
+ export * from './session.js';
7
+ export * from './figspec.js';
8
+ export * from './figstack.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export * from './shared.js';
2
+ export * from './health.js';
3
+ export * from './run-request.js';
4
+ export * from './image.js';
5
+ export * from './volume.js';
6
+ export * from './session.js';
7
+ export * from './figspec.js';
8
+ export * from './figstack.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,244 @@
1
+ import { z } from 'zod';
2
+ export declare const RunRequestSchema: z.ZodObject<{
3
+ job_id: z.ZodString;
4
+ image: z.ZodString;
5
+ command: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
6
+ environment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
7
+ volumes: z.ZodOptional<z.ZodArray<z.ZodObject<{
8
+ type: z.ZodOptional<z.ZodString>;
9
+ host_path: z.ZodString;
10
+ container_path: z.ZodOptional<z.ZodString>;
11
+ read_only: z.ZodBoolean;
12
+ }, "strip", z.ZodTypeAny, {
13
+ host_path: string;
14
+ read_only: boolean;
15
+ type?: string | undefined;
16
+ container_path?: string | undefined;
17
+ }, {
18
+ host_path: string;
19
+ read_only: boolean;
20
+ type?: string | undefined;
21
+ container_path?: string | undefined;
22
+ }>, "many">>;
23
+ named_volumes: z.ZodOptional<z.ZodArray<z.ZodObject<{
24
+ volume_name: z.ZodString;
25
+ container_path: z.ZodString;
26
+ read_only: z.ZodBoolean;
27
+ }, "strip", z.ZodTypeAny, {
28
+ container_path: string;
29
+ read_only: boolean;
30
+ volume_name: string;
31
+ }, {
32
+ container_path: string;
33
+ read_only: boolean;
34
+ volume_name: string;
35
+ }>, "many">>;
36
+ resources: z.ZodOptional<z.ZodObject<{
37
+ memory_limit: z.ZodOptional<z.ZodString>;
38
+ memory_reservation: z.ZodOptional<z.ZodString>;
39
+ cpu_limit: z.ZodOptional<z.ZodString>;
40
+ cpu_reservation: z.ZodOptional<z.ZodString>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ memory_limit?: string | undefined;
43
+ memory_reservation?: string | undefined;
44
+ cpu_limit?: string | undefined;
45
+ cpu_reservation?: string | undefined;
46
+ }, {
47
+ memory_limit?: string | undefined;
48
+ memory_reservation?: string | undefined;
49
+ cpu_limit?: string | undefined;
50
+ cpu_reservation?: string | undefined;
51
+ }>>;
52
+ timeout: z.ZodOptional<z.ZodNumber>;
53
+ parser_script: z.ZodOptional<z.ZodString>;
54
+ root_dir: z.ZodOptional<z.ZodString>;
55
+ env_files: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
56
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
57
+ extra_hosts: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
58
+ network_mode: z.ZodOptional<z.ZodString>;
59
+ working_dir: z.ZodOptional<z.ZodString>;
60
+ ports: z.ZodOptional<z.ZodArray<z.ZodObject<{
61
+ container: z.ZodNumber;
62
+ host: z.ZodOptional<z.ZodNumber>;
63
+ }, "strip", z.ZodTypeAny, {
64
+ container: number;
65
+ host?: number | undefined;
66
+ }, {
67
+ container: number;
68
+ host?: number | undefined;
69
+ }>, "many">>;
70
+ }, "strip", z.ZodTypeAny, {
71
+ job_id: string;
72
+ image: string;
73
+ volumes?: {
74
+ host_path: string;
75
+ read_only: boolean;
76
+ type?: string | undefined;
77
+ container_path?: string | undefined;
78
+ }[] | undefined;
79
+ secrets?: Record<string, string> | undefined;
80
+ ports?: {
81
+ container: number;
82
+ host?: number | undefined;
83
+ }[] | undefined;
84
+ timeout?: number | undefined;
85
+ parser_script?: string | undefined;
86
+ root_dir?: string | undefined;
87
+ command?: string[] | undefined;
88
+ environment?: Record<string, string> | undefined;
89
+ named_volumes?: {
90
+ container_path: string;
91
+ read_only: boolean;
92
+ volume_name: string;
93
+ }[] | undefined;
94
+ resources?: {
95
+ memory_limit?: string | undefined;
96
+ memory_reservation?: string | undefined;
97
+ cpu_limit?: string | undefined;
98
+ cpu_reservation?: string | undefined;
99
+ } | undefined;
100
+ env_files?: string[] | undefined;
101
+ extra_hosts?: string[] | undefined;
102
+ network_mode?: string | undefined;
103
+ working_dir?: string | undefined;
104
+ }, {
105
+ job_id: string;
106
+ image: string;
107
+ volumes?: {
108
+ host_path: string;
109
+ read_only: boolean;
110
+ type?: string | undefined;
111
+ container_path?: string | undefined;
112
+ }[] | undefined;
113
+ secrets?: Record<string, string> | undefined;
114
+ ports?: {
115
+ container: number;
116
+ host?: number | undefined;
117
+ }[] | undefined;
118
+ timeout?: number | undefined;
119
+ parser_script?: string | undefined;
120
+ root_dir?: string | undefined;
121
+ command?: string[] | undefined;
122
+ environment?: Record<string, string> | undefined;
123
+ named_volumes?: {
124
+ container_path: string;
125
+ read_only: boolean;
126
+ volume_name: string;
127
+ }[] | undefined;
128
+ resources?: {
129
+ memory_limit?: string | undefined;
130
+ memory_reservation?: string | undefined;
131
+ cpu_limit?: string | undefined;
132
+ cpu_reservation?: string | undefined;
133
+ } | undefined;
134
+ env_files?: string[] | undefined;
135
+ extra_hosts?: string[] | undefined;
136
+ network_mode?: string | undefined;
137
+ working_dir?: string | undefined;
138
+ }>;
139
+ export type RunRequest = z.infer<typeof RunRequestSchema>;
140
+ export declare const RunResponseSchema: z.ZodObject<{
141
+ job_id: z.ZodString;
142
+ status: z.ZodEnum<["pending", "running", "completed", "failed", "timeout", "awaiting_cleanup"]>;
143
+ message: z.ZodOptional<z.ZodString>;
144
+ container_id: z.ZodOptional<z.ZodString>;
145
+ exit_code: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
146
+ stdout: z.ZodOptional<z.ZodString>;
147
+ stderr: z.ZodOptional<z.ZodString>;
148
+ parsed_output: z.ZodOptional<z.ZodObject<{
149
+ success: z.ZodBoolean;
150
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
151
+ }, "strip", z.ZodTypeAny, {
152
+ success: boolean;
153
+ data?: Record<string, unknown> | undefined;
154
+ }, {
155
+ success: boolean;
156
+ data?: Record<string, unknown> | undefined;
157
+ }>>;
158
+ started_at: z.ZodOptional<z.ZodString>;
159
+ completed_at: z.ZodOptional<z.ZodString>;
160
+ duration: z.ZodOptional<z.ZodNumber>;
161
+ command: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
162
+ final_command: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
163
+ }, "strip", z.ZodTypeAny, {
164
+ status: "pending" | "running" | "completed" | "failed" | "timeout" | "awaiting_cleanup";
165
+ job_id: string;
166
+ message?: string | undefined;
167
+ container_id?: string | undefined;
168
+ command?: string[] | undefined;
169
+ exit_code?: number | null | undefined;
170
+ stdout?: string | undefined;
171
+ stderr?: string | undefined;
172
+ parsed_output?: {
173
+ success: boolean;
174
+ data?: Record<string, unknown> | undefined;
175
+ } | undefined;
176
+ started_at?: string | undefined;
177
+ completed_at?: string | undefined;
178
+ duration?: number | undefined;
179
+ final_command?: string[] | undefined;
180
+ }, {
181
+ status: "pending" | "running" | "completed" | "failed" | "timeout" | "awaiting_cleanup";
182
+ job_id: string;
183
+ message?: string | undefined;
184
+ container_id?: string | undefined;
185
+ command?: string[] | undefined;
186
+ exit_code?: number | null | undefined;
187
+ stdout?: string | undefined;
188
+ stderr?: string | undefined;
189
+ parsed_output?: {
190
+ success: boolean;
191
+ data?: Record<string, unknown> | undefined;
192
+ } | undefined;
193
+ started_at?: string | undefined;
194
+ completed_at?: string | undefined;
195
+ duration?: number | undefined;
196
+ final_command?: string[] | undefined;
197
+ }>;
198
+ export type RunResponse = z.infer<typeof RunResponseSchema>;
199
+ export declare const DryRunResponseSchema: z.ZodObject<{
200
+ command: z.ZodArray<z.ZodString, "many">;
201
+ final_command: z.ZodArray<z.ZodString, "many">;
202
+ image: z.ZodString;
203
+ working_dir: z.ZodString;
204
+ volumes: z.ZodOptional<z.ZodArray<z.ZodObject<{
205
+ type: z.ZodOptional<z.ZodString>;
206
+ host_path: z.ZodString;
207
+ container_path: z.ZodOptional<z.ZodString>;
208
+ read_only: z.ZodBoolean;
209
+ }, "strip", z.ZodTypeAny, {
210
+ host_path: string;
211
+ read_only: boolean;
212
+ type?: string | undefined;
213
+ container_path?: string | undefined;
214
+ }, {
215
+ host_path: string;
216
+ read_only: boolean;
217
+ type?: string | undefined;
218
+ container_path?: string | undefined;
219
+ }>, "many">>;
220
+ }, "strip", z.ZodTypeAny, {
221
+ image: string;
222
+ command: string[];
223
+ working_dir: string;
224
+ final_command: string[];
225
+ volumes?: {
226
+ host_path: string;
227
+ read_only: boolean;
228
+ type?: string | undefined;
229
+ container_path?: string | undefined;
230
+ }[] | undefined;
231
+ }, {
232
+ image: string;
233
+ command: string[];
234
+ working_dir: string;
235
+ final_command: string[];
236
+ volumes?: {
237
+ host_path: string;
238
+ read_only: boolean;
239
+ type?: string | undefined;
240
+ container_path?: string | undefined;
241
+ }[] | undefined;
242
+ }>;
243
+ export type DryRunResponse = z.infer<typeof DryRunResponseSchema>;
244
+ //# sourceMappingURL=run-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-request.d.ts","sourceRoot":"","sources":["../src/run-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { z } from 'zod';
2
+ import { JobStatusSchema, ParsedOutputSchema, ResourceLimitsSchema, VolumeMountSchema, NamedVolumeMountSchema, PortMappingSchema, } from './shared.js';
3
+ export const RunRequestSchema = z.object({
4
+ job_id: z.string().min(1),
5
+ image: z.string().min(1),
6
+ command: z.array(z.string()).optional(),
7
+ environment: z.record(z.string()).optional(),
8
+ volumes: z.array(VolumeMountSchema).optional(),
9
+ named_volumes: z.array(NamedVolumeMountSchema).optional(),
10
+ resources: ResourceLimitsSchema.optional(),
11
+ timeout: z.number().int().positive().max(86400).optional(),
12
+ parser_script: z.string().optional(),
13
+ root_dir: z.string().optional(),
14
+ env_files: z.array(z.string()).optional(),
15
+ secrets: z.record(z.string()).optional(),
16
+ extra_hosts: z.array(z.string()).optional(),
17
+ network_mode: z.string().optional(),
18
+ working_dir: z.string().optional(),
19
+ ports: z.array(PortMappingSchema).optional(),
20
+ });
21
+ export const RunResponseSchema = z.object({
22
+ job_id: z.string(),
23
+ status: JobStatusSchema,
24
+ message: z.string().optional(),
25
+ container_id: z.string().optional(),
26
+ exit_code: z.number().int().nullable().optional(),
27
+ stdout: z.string().optional(),
28
+ stderr: z.string().optional(),
29
+ parsed_output: ParsedOutputSchema.optional(),
30
+ started_at: z.string().datetime().optional(),
31
+ completed_at: z.string().datetime().optional(),
32
+ duration: z.number().optional(),
33
+ command: z.array(z.string()).optional(),
34
+ final_command: z.array(z.string()).optional(),
35
+ });
36
+ export const DryRunResponseSchema = z.object({
37
+ command: z.array(z.string()),
38
+ final_command: z.array(z.string()),
39
+ image: z.string(),
40
+ working_dir: z.string(),
41
+ volumes: z.array(VolumeMountSchema).optional(),
42
+ });
43
+ //# sourceMappingURL=run-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-request.js","sourceRoot":"","sources":["../src/run-request.ts"],"names":[],"mappings":"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"}