duron 0.2.2 → 0.3.0-beta.1
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/dist/action-job.d.ts +2 -0
- package/dist/action-job.d.ts.map +1 -1
- package/dist/action-job.js +20 -1
- package/dist/action-manager.d.ts +2 -0
- package/dist/action-manager.d.ts.map +1 -1
- package/dist/action-manager.js +3 -0
- package/dist/action.d.ts +27 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +9 -0
- package/dist/adapters/adapter.d.ts +10 -2
- package/dist/adapters/adapter.d.ts.map +1 -1
- package/dist/adapters/adapter.js +59 -1
- package/dist/adapters/postgres/base.d.ts +9 -4
- package/dist/adapters/postgres/base.d.ts.map +1 -1
- package/dist/adapters/postgres/base.js +269 -19
- package/dist/adapters/postgres/schema.d.ts +249 -105
- package/dist/adapters/postgres/schema.d.ts.map +1 -1
- package/dist/adapters/postgres/schema.default.d.ts +249 -106
- package/dist/adapters/postgres/schema.default.d.ts.map +1 -1
- package/dist/adapters/postgres/schema.default.js +2 -2
- package/dist/adapters/postgres/schema.js +29 -1
- package/dist/adapters/schemas.d.ts +140 -7
- package/dist/adapters/schemas.d.ts.map +1 -1
- package/dist/adapters/schemas.js +52 -4
- package/dist/client.d.ts +8 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +28 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +16 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/server.d.ts +220 -16
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +123 -8
- package/dist/step-manager.d.ts +8 -2
- package/dist/step-manager.d.ts.map +1 -1
- package/dist/step-manager.js +174 -15
- package/dist/telemetry/adapter.d.ts +85 -0
- package/dist/telemetry/adapter.d.ts.map +1 -0
- package/dist/telemetry/adapter.js +128 -0
- package/dist/telemetry/index.d.ts +5 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +4 -0
- package/dist/telemetry/local.d.ts +21 -0
- package/dist/telemetry/local.d.ts.map +1 -0
- package/dist/telemetry/local.js +180 -0
- package/dist/telemetry/noop.d.ts +16 -0
- package/dist/telemetry/noop.d.ts.map +1 -0
- package/dist/telemetry/noop.js +39 -0
- package/dist/telemetry/opentelemetry.d.ts +24 -0
- package/dist/telemetry/opentelemetry.d.ts.map +1 -0
- package/dist/telemetry/opentelemetry.js +202 -0
- package/migrations/postgres/20260117231749_clumsy_penance/migration.sql +3 -0
- package/migrations/postgres/20260117231749_clumsy_penance/snapshot.json +988 -0
- package/migrations/postgres/20260118202533_wealthy_mysterio/migration.sql +24 -0
- package/migrations/postgres/20260118202533_wealthy_mysterio/snapshot.json +1362 -0
- package/package.json +6 -4
- package/src/action-job.ts +35 -0
- package/src/action-manager.ts +5 -0
- package/src/action.ts +199 -0
- package/src/adapters/adapter.ts +151 -0
- package/src/adapters/postgres/base.ts +342 -23
- package/src/adapters/postgres/schema.default.ts +2 -2
- package/src/adapters/postgres/schema.ts +49 -1
- package/src/adapters/schemas.ts +81 -5
- package/src/client.ts +78 -0
- package/src/errors.ts +45 -1
- package/src/index.ts +10 -2
- package/src/server.ts +163 -8
- package/src/step-manager.ts +293 -13
- package/src/telemetry/adapter.ts +468 -0
- package/src/telemetry/index.ts +17 -0
- package/src/telemetry/local.ts +336 -0
- package/src/telemetry/noop.ts +95 -0
- package/src/telemetry/opentelemetry.ts +310 -0
package/dist/server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Elysia } from 'elysia';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { JobSortFieldSchema, SortOrderSchema } from './adapters/schemas.js';
|
|
3
|
+
import { JobSortFieldSchema, MetricSortFieldSchema, SortOrderSchema } from './adapters/schemas.js';
|
|
4
4
|
import type { Client } from './client.js';
|
|
5
5
|
export declare class NotFoundError extends Error {
|
|
6
6
|
constructor(message: string);
|
|
@@ -9,24 +9,17 @@ export declare class UnauthorizedError extends Error {
|
|
|
9
9
|
constructor(message: string);
|
|
10
10
|
}
|
|
11
11
|
export declare const GetJobStepsQuerySchema: z.ZodPipe<z.ZodObject<{
|
|
12
|
-
page: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
13
|
-
pageSize: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
14
12
|
search: z.ZodOptional<z.ZodString>;
|
|
15
13
|
fUpdatedAfter: z.ZodOptional<z.ZodCoercedDate<unknown>>;
|
|
16
14
|
}, z.core.$strip>, z.ZodTransform<{
|
|
17
|
-
page: number | undefined;
|
|
18
|
-
pageSize: number | undefined;
|
|
19
15
|
search: string | undefined;
|
|
20
16
|
updatedAfter: Date | undefined;
|
|
21
17
|
}, {
|
|
22
|
-
page?: number | undefined;
|
|
23
|
-
pageSize?: number | undefined;
|
|
24
18
|
search?: string | undefined;
|
|
25
19
|
fUpdatedAfter?: Date | undefined;
|
|
26
20
|
}>>;
|
|
27
21
|
export declare const GetJobStepsResponseSchema: z.ZodObject<{
|
|
28
22
|
steps: z.ZodArray<z.ZodObject<{
|
|
29
|
-
error: z.ZodDefault<z.ZodNullable<z.ZodAny>>;
|
|
30
23
|
name: z.ZodString;
|
|
31
24
|
status: z.ZodEnum<{
|
|
32
25
|
active: "active";
|
|
@@ -37,11 +30,14 @@ export declare const GetJobStepsResponseSchema: z.ZodObject<{
|
|
|
37
30
|
createdAt: z.ZodUnion<readonly [z.ZodDate, z.ZodPipe<z.ZodString, z.ZodTransform<Date, string>>, z.ZodPipe<z.ZodNumber, z.ZodTransform<Date, number>>]>;
|
|
38
31
|
updatedAt: z.ZodUnion<readonly [z.ZodDate, z.ZodPipe<z.ZodString, z.ZodTransform<Date, string>>, z.ZodPipe<z.ZodNumber, z.ZodTransform<Date, number>>]>;
|
|
39
32
|
id: z.ZodString;
|
|
33
|
+
error: z.ZodDefault<z.ZodNullable<z.ZodAny>>;
|
|
40
34
|
timeoutMs: z.ZodCoercedNumber<unknown>;
|
|
41
35
|
expiresAt: z.ZodDefault<z.ZodNullable<z.ZodUnion<readonly [z.ZodDate, z.ZodPipe<z.ZodString, z.ZodTransform<Date, string>>, z.ZodPipe<z.ZodNumber, z.ZodTransform<Date, number>>]>>>;
|
|
42
36
|
startedAt: z.ZodUnion<readonly [z.ZodDate, z.ZodPipe<z.ZodString, z.ZodTransform<Date, string>>, z.ZodPipe<z.ZodNumber, z.ZodTransform<Date, number>>]>;
|
|
43
37
|
finishedAt: z.ZodDefault<z.ZodNullable<z.ZodUnion<readonly [z.ZodDate, z.ZodPipe<z.ZodString, z.ZodTransform<Date, string>>, z.ZodPipe<z.ZodNumber, z.ZodTransform<Date, number>>]>>>;
|
|
44
38
|
jobId: z.ZodString;
|
|
39
|
+
parentStepId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
40
|
+
parallel: z.ZodDefault<z.ZodBoolean>;
|
|
45
41
|
retriesLimit: z.ZodCoercedNumber<unknown>;
|
|
46
42
|
retriesCount: z.ZodCoercedNumber<unknown>;
|
|
47
43
|
delayedMs: z.ZodDefault<z.ZodNullable<z.ZodCoercedNumber<unknown>>>;
|
|
@@ -57,8 +53,6 @@ export declare const GetJobStepsResponseSchema: z.ZodObject<{
|
|
|
57
53
|
}, z.core.$strip>>;
|
|
58
54
|
}, z.core.$strip>>;
|
|
59
55
|
total: z.ZodNumber;
|
|
60
|
-
page: z.ZodNumber;
|
|
61
|
-
pageSize: z.ZodNumber;
|
|
62
56
|
}, z.core.$strip>;
|
|
63
57
|
export declare const GetJobsQuerySchema: z.ZodPipe<z.ZodObject<{
|
|
64
58
|
page: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
@@ -155,6 +149,34 @@ export declare const GetActionsMetadataResponseSchema: z.ZodArray<z.ZodObject<{
|
|
|
155
149
|
}, z.core.$strip>>;
|
|
156
150
|
export type GetJobsQueryInput = z.input<typeof GetJobsQuerySchema>;
|
|
157
151
|
export type GetJobStepsQueryInput = z.input<typeof GetJobStepsQuerySchema>;
|
|
152
|
+
export declare const GetMetricsQuerySchema: z.ZodPipe<z.ZodObject<{
|
|
153
|
+
fName: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
154
|
+
fType: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
155
|
+
metric: "metric";
|
|
156
|
+
span_event: "span_event";
|
|
157
|
+
span_attribute: "span_attribute";
|
|
158
|
+
}>, z.ZodArray<z.ZodEnum<{
|
|
159
|
+
metric: "metric";
|
|
160
|
+
span_event: "span_event";
|
|
161
|
+
span_attribute: "span_attribute";
|
|
162
|
+
}>>]>>;
|
|
163
|
+
fTimestampRange: z.ZodOptional<z.ZodArray<z.ZodCoercedDate<unknown>>>;
|
|
164
|
+
fAttributesFilter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
165
|
+
sort: z.ZodOptional<z.ZodString>;
|
|
166
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
167
|
+
filters: any;
|
|
168
|
+
sort: {
|
|
169
|
+
field: z.infer<typeof MetricSortFieldSchema>;
|
|
170
|
+
order: z.infer<typeof SortOrderSchema>;
|
|
171
|
+
} | undefined;
|
|
172
|
+
}, {
|
|
173
|
+
fName?: string | string[] | undefined;
|
|
174
|
+
fType?: "metric" | "span_event" | "span_attribute" | ("metric" | "span_event" | "span_attribute")[] | undefined;
|
|
175
|
+
fTimestampRange?: Date[] | undefined;
|
|
176
|
+
fAttributesFilter?: Record<string, any> | undefined;
|
|
177
|
+
sort?: string | undefined;
|
|
178
|
+
}>>;
|
|
179
|
+
export type GetMetricsQueryInput = z.input<typeof GetMetricsQuerySchema>;
|
|
158
180
|
export declare const ErrorResponseSchema: z.ZodObject<{
|
|
159
181
|
error: z.ZodString;
|
|
160
182
|
message: z.ZodOptional<z.ZodString>;
|
|
@@ -168,9 +190,17 @@ export declare const RetryJobResponseSchema: z.ZodObject<{
|
|
|
168
190
|
message: z.ZodString;
|
|
169
191
|
newJobId: z.ZodString;
|
|
170
192
|
}, z.core.$strip>;
|
|
193
|
+
export declare const TimeTravelJobBodySchema: z.ZodObject<{
|
|
194
|
+
stepId: z.ZodUUID;
|
|
195
|
+
}, z.core.$strip>;
|
|
196
|
+
export declare const TimeTravelJobResponseSchema: z.ZodObject<{
|
|
197
|
+
success: z.ZodBoolean;
|
|
198
|
+
message: z.ZodString;
|
|
199
|
+
}, z.core.$strip>;
|
|
171
200
|
export interface CreateServerOptions<P extends string> {
|
|
172
201
|
client: Client<any, any>;
|
|
173
202
|
prefix?: P;
|
|
203
|
+
metricsEnabled?: boolean;
|
|
174
204
|
login?: {
|
|
175
205
|
onLogin: (body: {
|
|
176
206
|
email: string;
|
|
@@ -181,7 +211,7 @@ export interface CreateServerOptions<P extends string> {
|
|
|
181
211
|
refreshTokenExpirationTime?: string;
|
|
182
212
|
};
|
|
183
213
|
}
|
|
184
|
-
export declare function createServer<P extends string>({ client, prefix, login }: CreateServerOptions<P>): Elysia<P, {
|
|
214
|
+
export declare function createServer<P extends string>({ client, prefix, login, metricsEnabled }: CreateServerOptions<P>): Elysia<P, {
|
|
185
215
|
decorator: {};
|
|
186
216
|
store: {};
|
|
187
217
|
derive: {};
|
|
@@ -563,8 +593,6 @@ export declare function createServer<P extends string>({ client, prefix, login }
|
|
|
563
593
|
id: string;
|
|
564
594
|
};
|
|
565
595
|
query: {
|
|
566
|
-
page: number | undefined;
|
|
567
|
-
pageSize: number | undefined;
|
|
568
596
|
search: string | undefined;
|
|
569
597
|
updatedAfter: Date | undefined;
|
|
570
598
|
};
|
|
@@ -574,17 +602,19 @@ export declare function createServer<P extends string>({ client, prefix, login }
|
|
|
574
602
|
response: {
|
|
575
603
|
200: {
|
|
576
604
|
steps: {
|
|
577
|
-
error: any;
|
|
578
605
|
name: string;
|
|
579
606
|
status: "active" | "completed" | "failed" | "cancelled";
|
|
580
607
|
createdAt: Date;
|
|
581
608
|
updatedAt: Date;
|
|
582
609
|
id: string;
|
|
610
|
+
error: any;
|
|
583
611
|
timeoutMs: number;
|
|
584
612
|
expiresAt: Date | null;
|
|
585
613
|
startedAt: Date;
|
|
586
614
|
finishedAt: Date | null;
|
|
587
615
|
jobId: string;
|
|
616
|
+
parentStepId: string | null;
|
|
617
|
+
parallel: boolean;
|
|
588
618
|
retriesLimit: number;
|
|
589
619
|
retriesCount: number;
|
|
590
620
|
delayedMs: number | null;
|
|
@@ -600,8 +630,6 @@ export declare function createServer<P extends string>({ client, prefix, login }
|
|
|
600
630
|
}>;
|
|
601
631
|
}[];
|
|
602
632
|
total: number;
|
|
603
|
-
page: number;
|
|
604
|
-
pageSize: number;
|
|
605
633
|
};
|
|
606
634
|
400: {
|
|
607
635
|
error: string;
|
|
@@ -702,6 +730,8 @@ export declare function createServer<P extends string>({ client, prefix, login }
|
|
|
702
730
|
200: {
|
|
703
731
|
id: string;
|
|
704
732
|
jobId: string;
|
|
733
|
+
parentStepId: string | null;
|
|
734
|
+
parallel: boolean;
|
|
705
735
|
name: string;
|
|
706
736
|
output: any;
|
|
707
737
|
status: "active" | "completed" | "failed" | "cancelled";
|
|
@@ -902,6 +932,46 @@ export declare function createServer<P extends string>({ client, prefix, login }
|
|
|
902
932
|
};
|
|
903
933
|
};
|
|
904
934
|
};
|
|
935
|
+
}> & import("elysia").CreateEden<`${P}/jobs/:id/time-travel`, {
|
|
936
|
+
post: {
|
|
937
|
+
body: {
|
|
938
|
+
stepId: string;
|
|
939
|
+
};
|
|
940
|
+
params: {
|
|
941
|
+
id: string;
|
|
942
|
+
};
|
|
943
|
+
query: {};
|
|
944
|
+
headers: {
|
|
945
|
+
authorization?: string | undefined;
|
|
946
|
+
};
|
|
947
|
+
response: {
|
|
948
|
+
200: {
|
|
949
|
+
success: boolean;
|
|
950
|
+
message: string;
|
|
951
|
+
};
|
|
952
|
+
400: {
|
|
953
|
+
error: string;
|
|
954
|
+
message?: string | undefined;
|
|
955
|
+
};
|
|
956
|
+
401: {
|
|
957
|
+
error: string;
|
|
958
|
+
message?: string | undefined;
|
|
959
|
+
};
|
|
960
|
+
422: {
|
|
961
|
+
type: "validation";
|
|
962
|
+
on: string;
|
|
963
|
+
summary?: string;
|
|
964
|
+
message?: string;
|
|
965
|
+
found?: unknown;
|
|
966
|
+
property?: string;
|
|
967
|
+
expected?: string;
|
|
968
|
+
};
|
|
969
|
+
500: {
|
|
970
|
+
error: string;
|
|
971
|
+
message?: string | undefined;
|
|
972
|
+
};
|
|
973
|
+
};
|
|
974
|
+
};
|
|
905
975
|
}> & import("elysia").CreateEden<`${P}/jobs/:id`, {
|
|
906
976
|
delete: {
|
|
907
977
|
body: {};
|
|
@@ -1063,6 +1133,140 @@ export declare function createServer<P extends string>({ client, prefix, login }
|
|
|
1063
1133
|
};
|
|
1064
1134
|
};
|
|
1065
1135
|
};
|
|
1136
|
+
}> & import("elysia").CreateEden<`${P}/config`, {
|
|
1137
|
+
get: {
|
|
1138
|
+
body: unknown;
|
|
1139
|
+
params: import("elysia/types").IsNever<keyof import("elysia/types").IntersectIfObject<import("elysia").ResolvePath<`${P}/config`>, unknown>> extends true ? {} : import("elysia/types").IntersectIfObject<import("elysia").ResolvePath<`${P}/config`>, unknown>;
|
|
1140
|
+
query: unknown;
|
|
1141
|
+
headers: unknown;
|
|
1142
|
+
response: {
|
|
1143
|
+
200: {
|
|
1144
|
+
metricsEnabled: boolean;
|
|
1145
|
+
authEnabled: boolean;
|
|
1146
|
+
};
|
|
1147
|
+
422: {
|
|
1148
|
+
type: "validation";
|
|
1149
|
+
on: string;
|
|
1150
|
+
summary?: string;
|
|
1151
|
+
message?: string;
|
|
1152
|
+
found?: unknown;
|
|
1153
|
+
property?: string;
|
|
1154
|
+
expected?: string;
|
|
1155
|
+
};
|
|
1156
|
+
500: {
|
|
1157
|
+
error: string;
|
|
1158
|
+
message?: string | undefined;
|
|
1159
|
+
};
|
|
1160
|
+
};
|
|
1161
|
+
};
|
|
1162
|
+
}> & import("elysia").CreateEden<`${P}/jobs/:id/metrics`, {
|
|
1163
|
+
get: {
|
|
1164
|
+
body: {};
|
|
1165
|
+
params: {
|
|
1166
|
+
id: string;
|
|
1167
|
+
};
|
|
1168
|
+
query: {
|
|
1169
|
+
filters: any;
|
|
1170
|
+
sort: {
|
|
1171
|
+
field: z.infer<typeof MetricSortFieldSchema>;
|
|
1172
|
+
order: z.infer<typeof SortOrderSchema>;
|
|
1173
|
+
} | undefined;
|
|
1174
|
+
};
|
|
1175
|
+
headers: {
|
|
1176
|
+
authorization?: string | undefined;
|
|
1177
|
+
};
|
|
1178
|
+
response: {
|
|
1179
|
+
200: {
|
|
1180
|
+
metrics: {
|
|
1181
|
+
id: string;
|
|
1182
|
+
jobId: string;
|
|
1183
|
+
stepId: string | null;
|
|
1184
|
+
name: string;
|
|
1185
|
+
value: number;
|
|
1186
|
+
attributes: Record<string, any>;
|
|
1187
|
+
type: "metric" | "span_event" | "span_attribute";
|
|
1188
|
+
timestamp: Date;
|
|
1189
|
+
createdAt: Date;
|
|
1190
|
+
}[];
|
|
1191
|
+
total: number;
|
|
1192
|
+
};
|
|
1193
|
+
400: {
|
|
1194
|
+
error: string;
|
|
1195
|
+
message?: string | undefined;
|
|
1196
|
+
};
|
|
1197
|
+
401: {
|
|
1198
|
+
error: string;
|
|
1199
|
+
message?: string | undefined;
|
|
1200
|
+
};
|
|
1201
|
+
422: {
|
|
1202
|
+
type: "validation";
|
|
1203
|
+
on: string;
|
|
1204
|
+
summary?: string;
|
|
1205
|
+
message?: string;
|
|
1206
|
+
found?: unknown;
|
|
1207
|
+
property?: string;
|
|
1208
|
+
expected?: string;
|
|
1209
|
+
};
|
|
1210
|
+
500: {
|
|
1211
|
+
error: string;
|
|
1212
|
+
message?: string | undefined;
|
|
1213
|
+
};
|
|
1214
|
+
};
|
|
1215
|
+
};
|
|
1216
|
+
}> & import("elysia").CreateEden<`${P}/steps/:id/metrics`, {
|
|
1217
|
+
get: {
|
|
1218
|
+
body: {};
|
|
1219
|
+
params: {
|
|
1220
|
+
id: string;
|
|
1221
|
+
};
|
|
1222
|
+
query: {
|
|
1223
|
+
filters: any;
|
|
1224
|
+
sort: {
|
|
1225
|
+
field: z.infer<typeof MetricSortFieldSchema>;
|
|
1226
|
+
order: z.infer<typeof SortOrderSchema>;
|
|
1227
|
+
} | undefined;
|
|
1228
|
+
};
|
|
1229
|
+
headers: {
|
|
1230
|
+
authorization?: string | undefined;
|
|
1231
|
+
};
|
|
1232
|
+
response: {
|
|
1233
|
+
200: {
|
|
1234
|
+
metrics: {
|
|
1235
|
+
id: string;
|
|
1236
|
+
jobId: string;
|
|
1237
|
+
stepId: string | null;
|
|
1238
|
+
name: string;
|
|
1239
|
+
value: number;
|
|
1240
|
+
attributes: Record<string, any>;
|
|
1241
|
+
type: "metric" | "span_event" | "span_attribute";
|
|
1242
|
+
timestamp: Date;
|
|
1243
|
+
createdAt: Date;
|
|
1244
|
+
}[];
|
|
1245
|
+
total: number;
|
|
1246
|
+
};
|
|
1247
|
+
400: {
|
|
1248
|
+
error: string;
|
|
1249
|
+
message?: string | undefined;
|
|
1250
|
+
};
|
|
1251
|
+
401: {
|
|
1252
|
+
error: string;
|
|
1253
|
+
message?: string | undefined;
|
|
1254
|
+
};
|
|
1255
|
+
422: {
|
|
1256
|
+
type: "validation";
|
|
1257
|
+
on: string;
|
|
1258
|
+
summary?: string;
|
|
1259
|
+
message?: string;
|
|
1260
|
+
found?: unknown;
|
|
1261
|
+
property?: string;
|
|
1262
|
+
expected?: string;
|
|
1263
|
+
};
|
|
1264
|
+
500: {
|
|
1265
|
+
error: string;
|
|
1266
|
+
message?: string | undefined;
|
|
1267
|
+
};
|
|
1268
|
+
};
|
|
1269
|
+
};
|
|
1066
1270
|
}> & import("elysia").CreateEden<`${P}/actions/:actionName/run`, {
|
|
1067
1271
|
post: {
|
|
1068
1272
|
body: {
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Elysia } from 'elysia';
|
|
2
2
|
import { jwtVerify, SignJWT } from 'jose';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { GetActionsResultSchema, GetJobStepsResultSchema, GetJobsResultSchema, JobSchema, JobSortFieldSchema, JobStatusResultSchema, JobStatusSchema, JobStepSchema, JobStepStatusResultSchema, SortOrderSchema, } from './adapters/schemas.js';
|
|
4
|
+
import { GetActionsResultSchema, GetJobStepsResultSchema, GetJobsResultSchema, GetMetricsResultSchema, JobSchema, JobSortFieldSchema, JobStatusResultSchema, JobStatusSchema, JobStepSchema, JobStepStatusResultSchema, MetricSortFieldSchema, MetricTypeSchema, SortOrderSchema, } from './adapters/schemas.js';
|
|
5
5
|
export class NotFoundError extends Error {
|
|
6
6
|
constructor(message) {
|
|
7
7
|
super(message);
|
|
@@ -16,14 +16,10 @@ export class UnauthorizedError extends Error {
|
|
|
16
16
|
}
|
|
17
17
|
export const GetJobStepsQuerySchema = z
|
|
18
18
|
.object({
|
|
19
|
-
page: z.coerce.number().int().min(1).optional(),
|
|
20
|
-
pageSize: z.coerce.number().int().min(1).max(1000).optional(),
|
|
21
19
|
search: z.string().optional(),
|
|
22
20
|
fUpdatedAfter: z.coerce.date().optional(),
|
|
23
21
|
})
|
|
24
22
|
.transform((data) => ({
|
|
25
|
-
page: data.page,
|
|
26
|
-
pageSize: data.pageSize,
|
|
27
23
|
search: data.search,
|
|
28
24
|
updatedAfter: data.fUpdatedAfter,
|
|
29
25
|
}));
|
|
@@ -112,6 +108,43 @@ export const GetActionsMetadataResponseSchema = z.array(z.object({
|
|
|
112
108
|
name: z.string(),
|
|
113
109
|
mockInput: z.any(),
|
|
114
110
|
}));
|
|
111
|
+
export const GetMetricsQuerySchema = z
|
|
112
|
+
.object({
|
|
113
|
+
fName: z.union([z.string(), z.array(z.string())]).optional(),
|
|
114
|
+
fType: z.union([MetricTypeSchema, z.array(MetricTypeSchema)]).optional(),
|
|
115
|
+
fTimestampRange: z.array(z.coerce.date()).length(2).optional(),
|
|
116
|
+
fAttributesFilter: z.record(z.string(), z.any()).optional(),
|
|
117
|
+
sort: z.string().optional(),
|
|
118
|
+
})
|
|
119
|
+
.transform((data) => {
|
|
120
|
+
const filters = {};
|
|
121
|
+
if (data.fName)
|
|
122
|
+
filters.name = data.fName;
|
|
123
|
+
if (data.fType)
|
|
124
|
+
filters.type = data.fType;
|
|
125
|
+
if (data.fTimestampRange)
|
|
126
|
+
filters.timestampRange = data.fTimestampRange;
|
|
127
|
+
if (data.fAttributesFilter)
|
|
128
|
+
filters.attributesFilter = data.fAttributesFilter;
|
|
129
|
+
let sort;
|
|
130
|
+
if (data.sort) {
|
|
131
|
+
const [field, order] = data.sort.split(':').map((s) => s.trim());
|
|
132
|
+
if (field && order) {
|
|
133
|
+
const fieldResult = MetricSortFieldSchema.safeParse(field);
|
|
134
|
+
const orderResult = SortOrderSchema.safeParse(order.toLowerCase());
|
|
135
|
+
if (fieldResult.success && orderResult.success) {
|
|
136
|
+
sort = {
|
|
137
|
+
field: fieldResult.data,
|
|
138
|
+
order: orderResult.data,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
filters: Object.keys(filters).length > 0 ? filters : undefined,
|
|
145
|
+
sort,
|
|
146
|
+
};
|
|
147
|
+
});
|
|
115
148
|
export const ErrorResponseSchema = z.object({
|
|
116
149
|
error: z.string(),
|
|
117
150
|
message: z.string().optional(),
|
|
@@ -131,9 +164,17 @@ export const RetryJobResponseSchema = z.object({
|
|
|
131
164
|
message: z.string(),
|
|
132
165
|
newJobId: z.string(),
|
|
133
166
|
});
|
|
134
|
-
export
|
|
167
|
+
export const TimeTravelJobBodySchema = z.object({
|
|
168
|
+
stepId: z.uuid(),
|
|
169
|
+
});
|
|
170
|
+
export const TimeTravelJobResponseSchema = z.object({
|
|
171
|
+
success: z.boolean(),
|
|
172
|
+
message: z.string(),
|
|
173
|
+
});
|
|
174
|
+
export function createServer({ client, prefix, login, metricsEnabled }) {
|
|
135
175
|
const secretKey = typeof login?.jwtSecret === 'string' ? new TextEncoder().encode(login?.jwtSecret) : login?.jwtSecret;
|
|
136
176
|
const routePrefix = (prefix ?? '/api');
|
|
177
|
+
const isMetricsEnabled = metricsEnabled ?? client.metricsEnabled;
|
|
137
178
|
return new Elysia({
|
|
138
179
|
prefix: routePrefix,
|
|
139
180
|
})
|
|
@@ -221,8 +262,6 @@ export function createServer({ client, prefix, login }) {
|
|
|
221
262
|
.get('/jobs/:id/steps', async ({ params, query }) => {
|
|
222
263
|
const options = {
|
|
223
264
|
jobId: params.id,
|
|
224
|
-
page: query.page,
|
|
225
|
-
pageSize: query.pageSize,
|
|
226
265
|
search: query.search,
|
|
227
266
|
updatedAfter: query.updatedAfter,
|
|
228
267
|
};
|
|
@@ -339,6 +378,26 @@ export function createServer({ client, prefix, login }) {
|
|
|
339
378
|
401: ErrorResponseSchema,
|
|
340
379
|
},
|
|
341
380
|
auth: true,
|
|
381
|
+
})
|
|
382
|
+
.post('/jobs/:id/time-travel', async ({ params, body }) => {
|
|
383
|
+
const success = await client.timeTravelJob(params.id, body.stepId);
|
|
384
|
+
if (!success) {
|
|
385
|
+
throw new Error(`Could not time travel job ${params.id}. The job may not be in a terminal state or the step may not exist.`);
|
|
386
|
+
}
|
|
387
|
+
return {
|
|
388
|
+
success: true,
|
|
389
|
+
message: `Job ${params.id} has been time traveled to step ${body.stepId}`,
|
|
390
|
+
};
|
|
391
|
+
}, {
|
|
392
|
+
params: JobIdParamsSchema,
|
|
393
|
+
body: TimeTravelJobBodySchema,
|
|
394
|
+
response: {
|
|
395
|
+
200: TimeTravelJobResponseSchema,
|
|
396
|
+
400: ErrorResponseSchema,
|
|
397
|
+
500: ErrorResponseSchema,
|
|
398
|
+
401: ErrorResponseSchema,
|
|
399
|
+
},
|
|
400
|
+
auth: true,
|
|
342
401
|
})
|
|
343
402
|
.delete('/jobs/:id', async ({ params }) => {
|
|
344
403
|
const deleted = await client.deleteJob(params.id);
|
|
@@ -410,6 +469,62 @@ export function createServer({ client, prefix, login }) {
|
|
|
410
469
|
401: ErrorResponseSchema,
|
|
411
470
|
},
|
|
412
471
|
auth: true,
|
|
472
|
+
})
|
|
473
|
+
.get('/config', async () => {
|
|
474
|
+
return {
|
|
475
|
+
metricsEnabled: isMetricsEnabled,
|
|
476
|
+
authEnabled: !!login,
|
|
477
|
+
};
|
|
478
|
+
}, {
|
|
479
|
+
response: {
|
|
480
|
+
200: z.object({
|
|
481
|
+
metricsEnabled: z.boolean(),
|
|
482
|
+
authEnabled: z.boolean(),
|
|
483
|
+
}),
|
|
484
|
+
500: ErrorResponseSchema,
|
|
485
|
+
},
|
|
486
|
+
})
|
|
487
|
+
.get('/jobs/:id/metrics', async ({ params, query }) => {
|
|
488
|
+
if (!isMetricsEnabled) {
|
|
489
|
+
throw new Error('Metrics are not enabled. Use LocalTelemetryAdapter to enable metrics.');
|
|
490
|
+
}
|
|
491
|
+
const options = {
|
|
492
|
+
jobId: params.id,
|
|
493
|
+
filters: query.filters,
|
|
494
|
+
sort: query.sort,
|
|
495
|
+
};
|
|
496
|
+
return client.getMetrics(options);
|
|
497
|
+
}, {
|
|
498
|
+
params: JobIdParamsSchema,
|
|
499
|
+
query: GetMetricsQuerySchema,
|
|
500
|
+
response: {
|
|
501
|
+
200: GetMetricsResultSchema,
|
|
502
|
+
400: ErrorResponseSchema,
|
|
503
|
+
500: ErrorResponseSchema,
|
|
504
|
+
401: ErrorResponseSchema,
|
|
505
|
+
},
|
|
506
|
+
auth: true,
|
|
507
|
+
})
|
|
508
|
+
.get('/steps/:id/metrics', async ({ params, query }) => {
|
|
509
|
+
if (!isMetricsEnabled) {
|
|
510
|
+
throw new Error('Metrics are not enabled. Use LocalTelemetryAdapter to enable metrics.');
|
|
511
|
+
}
|
|
512
|
+
const options = {
|
|
513
|
+
stepId: params.id,
|
|
514
|
+
filters: query.filters,
|
|
515
|
+
sort: query.sort,
|
|
516
|
+
};
|
|
517
|
+
return client.getMetrics(options);
|
|
518
|
+
}, {
|
|
519
|
+
params: StepIdParamsSchema,
|
|
520
|
+
query: GetMetricsQuerySchema,
|
|
521
|
+
response: {
|
|
522
|
+
200: GetMetricsResultSchema,
|
|
523
|
+
400: ErrorResponseSchema,
|
|
524
|
+
500: ErrorResponseSchema,
|
|
525
|
+
401: ErrorResponseSchema,
|
|
526
|
+
},
|
|
527
|
+
auth: true,
|
|
413
528
|
})
|
|
414
529
|
.post('/actions/:actionName/run', async ({ params, body }) => {
|
|
415
530
|
const jobId = await client.runAction(params.actionName, body);
|
package/dist/step-manager.d.ts
CHANGED
|
@@ -3,16 +3,19 @@ import type { z } from 'zod';
|
|
|
3
3
|
import { type Action, type ActionHandlerContext, type StepHandlerContext, type StepOptions } from './action.js';
|
|
4
4
|
import type { Adapter } from './adapters/adapter.js';
|
|
5
5
|
import { type StepStatus } from './constants.js';
|
|
6
|
+
import type { ObserveContext, Span, TelemetryAdapter } from './telemetry/adapter.js';
|
|
6
7
|
export interface TaskStep {
|
|
7
8
|
name: string;
|
|
8
9
|
cb: (ctx: StepHandlerContext) => Promise<any>;
|
|
9
10
|
options: StepOptions;
|
|
10
11
|
abortSignal: AbortSignal;
|
|
12
|
+
parentStepId: string | null;
|
|
13
|
+
parallel: boolean;
|
|
11
14
|
}
|
|
12
15
|
export declare class StepStore {
|
|
13
16
|
#private;
|
|
14
17
|
constructor(adapter: Adapter);
|
|
15
|
-
getOrCreate(jobId: string, name: string, timeoutMs: number, retriesLimit: number): Promise<{
|
|
18
|
+
getOrCreate(jobId: string, name: string, timeoutMs: number, retriesLimit: number, parentStepId?: string | null, parallel?: boolean): Promise<{
|
|
16
19
|
id: string;
|
|
17
20
|
status: "active" | "completed" | "failed" | "cancelled";
|
|
18
21
|
retriesLimit: number;
|
|
@@ -29,17 +32,20 @@ export interface StepManagerOptions {
|
|
|
29
32
|
jobId: string;
|
|
30
33
|
actionName: string;
|
|
31
34
|
adapter: Adapter;
|
|
35
|
+
telemetry: TelemetryAdapter;
|
|
32
36
|
logger: Logger;
|
|
33
37
|
concurrencyLimit: number;
|
|
34
38
|
}
|
|
35
39
|
export declare class StepManager {
|
|
36
40
|
#private;
|
|
37
41
|
constructor(options: StepManagerOptions);
|
|
42
|
+
setJobSpan(span: Span): void;
|
|
38
43
|
createActionContext<TInput extends z.ZodObject, TOutput extends z.ZodObject, TVariables = Record<string, unknown>>(job: {
|
|
39
44
|
id: string;
|
|
40
45
|
input: z.infer<TInput>;
|
|
41
46
|
groupKey?: string;
|
|
42
|
-
}, action: Action<TInput, TOutput, TVariables>, variables: TVariables, abortSignal: AbortSignal, logger: Logger): ActionHandlerContext<TInput, TVariables>;
|
|
47
|
+
}, action: Action<TInput, TOutput, TVariables>, variables: TVariables, abortSignal: AbortSignal, logger: Logger, observeContext: ObserveContext): ActionHandlerContext<TInput, TVariables>;
|
|
48
|
+
createStepObserveContext(stepId: string): ObserveContext;
|
|
43
49
|
push(task: TaskStep): Promise<any>;
|
|
44
50
|
drain(): Promise<void>;
|
|
45
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-manager.d.ts","sourceRoot":"","sources":["../src/step-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B,OAAO,EACL,KAAK,MAAM,EACX,KAAK,oBAAoB,
|
|
1
|
+
{"version":3,"file":"step-manager.d.ts","sourceRoot":"","sources":["../src/step-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B,OAAO,EACL,KAAK,MAAM,EACX,KAAK,oBAAoB,EAGzB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,OAAO,EAAgC,MAAM,uBAAuB,CAAA;AAClF,OAAO,EAAoE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAWlH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAIpF,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7C,OAAO,EAAE,WAAW,CAAA;IACpB,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAMD,qBAAa,SAAS;;gBAYR,OAAO,EAAE,OAAO;IAoBtB,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,QAAQ,GAAE,OAAe;;;;;;;;;;IAyBrB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB7F,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;CAG3E;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,gBAAgB,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAMD,qBAAa,WAAW;;gBAuBV,OAAO,EAAE,kBAAkB;IAmBvC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAoB5B,mBAAmB,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,SAAS,CAAC,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/G,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAC3C,SAAS,EAAE,UAAU,EACrB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,GAC7B,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC;IAO3C,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IA6BlD,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAQlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAiT7B"}
|