@ekairos/tasks 1.22.83-beta.development.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.
- package/README.md +19 -0
- package/dist/actions.d.ts +26 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +20 -0
- package/dist/actions.js.map +1 -0
- package/dist/approval.d.ts +31 -0
- package/dist/approval.d.ts.map +1 -0
- package/dist/approval.js +24 -0
- package/dist/approval.js.map +1 -0
- package/dist/domain.d.ts +218 -0
- package/dist/domain.d.ts.map +1 -0
- package/dist/domain.js +134 -0
- package/dist/domain.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/service.d.ts +95 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +305 -0
- package/dist/service.js.map +1 -0
- package/dist/task.d.ts +36 -0
- package/dist/task.d.ts.map +1 -0
- package/dist/task.js +63 -0
- package/dist/task.js.map +1 -0
- package/package.json +57 -0
package/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# @ekairos/tasks
|
|
2
|
+
|
|
3
|
+
Durable tasks with typed outcomes.
|
|
4
|
+
|
|
5
|
+
`@ekairos/tasks` is intentionally small. It owns task `state` and typed outcomes. Approval
|
|
6
|
+
policies, approvers, assignments, notifications, and domain-specific links remain app/domain
|
|
7
|
+
concerns layered above it.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
const task = await Task.open(runtime, {
|
|
11
|
+
kind: "approval",
|
|
12
|
+
key: "requisition:approve:123",
|
|
13
|
+
outcome: approvalOutcomeSchema,
|
|
14
|
+
instructions: "Review this requisition before the step continues.",
|
|
15
|
+
context: { requisitionId: "123" },
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
const outcome = await task.outcome()
|
|
19
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ServiceResult, type TaskAwaitOutcomeActionInput, type TaskCancelActionInput, type TaskDecideActionInput, type TaskFailActionInput, type TaskGetActionInput, type TaskOpenActionInput, type TaskRecord, type TasksRuntime } from "./service.js";
|
|
2
|
+
export declare function openTaskExecute({ runtime, input, }: {
|
|
3
|
+
runtime: TasksRuntime;
|
|
4
|
+
input: TaskOpenActionInput;
|
|
5
|
+
}): Promise<ServiceResult<TaskRecord>>;
|
|
6
|
+
export declare function decideTaskExecute({ runtime, input, }: {
|
|
7
|
+
runtime: TasksRuntime;
|
|
8
|
+
input: TaskDecideActionInput;
|
|
9
|
+
}): Promise<ServiceResult<TaskRecord>>;
|
|
10
|
+
export declare function cancelTaskExecute({ runtime, input, }: {
|
|
11
|
+
runtime: TasksRuntime;
|
|
12
|
+
input: TaskCancelActionInput;
|
|
13
|
+
}): Promise<ServiceResult<TaskRecord>>;
|
|
14
|
+
export declare function failTaskExecute({ runtime, input, }: {
|
|
15
|
+
runtime: TasksRuntime;
|
|
16
|
+
input: TaskFailActionInput;
|
|
17
|
+
}): Promise<ServiceResult<TaskRecord>>;
|
|
18
|
+
export declare function getTaskExecute({ runtime, input, }: {
|
|
19
|
+
runtime: TasksRuntime;
|
|
20
|
+
input: TaskGetActionInput;
|
|
21
|
+
}): Promise<ServiceResult<TaskRecord>>;
|
|
22
|
+
export declare function awaitOutcomeExecute({ runtime, input, }: {
|
|
23
|
+
runtime: TasksRuntime;
|
|
24
|
+
input: TaskAwaitOutcomeActionInput;
|
|
25
|
+
}): Promise<ServiceResult<unknown>>;
|
|
26
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,cAAc,CAAA;AAErB,wBAAsB,eAAe,CAAC,EACpC,OAAO,EACP,KAAK,GACN,EAAE;IACD,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,mBAAmB,CAAA;CAC3B,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAErC;AAED,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,KAAK,GACN,EAAE;IACD,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,qBAAqB,CAAA;CAC7B,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAErC;AAED,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,KAAK,GACN,EAAE;IACD,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,qBAAqB,CAAA;CAC7B,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAErC;AAED,wBAAsB,eAAe,CAAC,EACpC,OAAO,EACP,KAAK,GACN,EAAE;IACD,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,mBAAmB,CAAA;CAC3B,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAErC;AAED,wBAAsB,cAAc,CAAC,EACnC,OAAO,EACP,KAAK,GACN,EAAE;IACD,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,kBAAkB,CAAA;CAC1B,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAErC;AAED,wBAAsB,mBAAmB,CAAC,EACxC,OAAO,EACP,KAAK,GACN,EAAE;IACD,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,2BAA2B,CAAA;CACnC,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAElC"}
|
package/dist/actions.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TaskService, } from "./service.js";
|
|
2
|
+
export async function openTaskExecute({ runtime, input, }) {
|
|
3
|
+
return await new TaskService(runtime).openRaw(input);
|
|
4
|
+
}
|
|
5
|
+
export async function decideTaskExecute({ runtime, input, }) {
|
|
6
|
+
return await new TaskService(runtime).decide(input);
|
|
7
|
+
}
|
|
8
|
+
export async function cancelTaskExecute({ runtime, input, }) {
|
|
9
|
+
return await new TaskService(runtime).cancel(input);
|
|
10
|
+
}
|
|
11
|
+
export async function failTaskExecute({ runtime, input, }) {
|
|
12
|
+
return await new TaskService(runtime).fail(input);
|
|
13
|
+
}
|
|
14
|
+
export async function getTaskExecute({ runtime, input, }) {
|
|
15
|
+
return await new TaskService(runtime).getRaw(input);
|
|
16
|
+
}
|
|
17
|
+
export async function awaitOutcomeExecute({ runtime, input, }) {
|
|
18
|
+
return await new TaskService(runtime).awaitOutcome(input);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAUZ,MAAM,cAAc,CAAA;AAErB,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,OAAO,EACP,KAAK,GAIN;IACC,OAAO,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,OAAO,EACP,KAAK,GAIN;IACC,OAAO,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,OAAO,EACP,KAAK,GAIN;IACC,OAAO,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,OAAO,EACP,KAAK,GAIN;IACC,OAAO,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,OAAO,EACP,KAAK,GAIN;IACC,OAAO,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EACxC,OAAO,EACP,KAAK,GAIN;IACC,OAAO,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const approvalOutcomeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
3
|
+
outcome: z.ZodLiteral<"approved">;
|
|
4
|
+
approved: z.ZodLiteral<true>;
|
|
5
|
+
decidedBy: z.ZodOptional<z.ZodString>;
|
|
6
|
+
decidedAt: z.ZodOptional<z.ZodString>;
|
|
7
|
+
note: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
9
|
+
outcome: z.ZodLiteral<"rejected">;
|
|
10
|
+
approved: z.ZodLiteral<false>;
|
|
11
|
+
decidedBy: z.ZodOptional<z.ZodString>;
|
|
12
|
+
decidedAt: z.ZodOptional<z.ZodString>;
|
|
13
|
+
reason: z.ZodString;
|
|
14
|
+
}, z.core.$strip>], "outcome">;
|
|
15
|
+
export type ApprovalOutcome = z.output<typeof approvalOutcomeSchema>;
|
|
16
|
+
export type ApprovalCommand = "approve" | "reject";
|
|
17
|
+
export declare function approvalOutcomeForCommand(command: ApprovalCommand): "approved" | "rejected";
|
|
18
|
+
export declare function createApprovalOutcome(outcome: ApprovalOutcome): {
|
|
19
|
+
outcome: "approved";
|
|
20
|
+
approved: true;
|
|
21
|
+
decidedBy?: string | undefined;
|
|
22
|
+
decidedAt?: string | undefined;
|
|
23
|
+
note?: string | undefined;
|
|
24
|
+
} | {
|
|
25
|
+
outcome: "rejected";
|
|
26
|
+
approved: false;
|
|
27
|
+
reason: string;
|
|
28
|
+
decidedBy?: string | undefined;
|
|
29
|
+
decidedAt?: string | undefined;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../src/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;8BAehC,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACpE,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAA;AAElD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,eAAe,2BAEjE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe;;;;;;;;;;;;EAE7D"}
|
package/dist/approval.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const approvalOutcomeSchema = z.discriminatedUnion("outcome", [
|
|
3
|
+
z.object({
|
|
4
|
+
outcome: z.literal("approved"),
|
|
5
|
+
approved: z.literal(true),
|
|
6
|
+
decidedBy: z.string().optional(),
|
|
7
|
+
decidedAt: z.string().optional(),
|
|
8
|
+
note: z.string().optional(),
|
|
9
|
+
}),
|
|
10
|
+
z.object({
|
|
11
|
+
outcome: z.literal("rejected"),
|
|
12
|
+
approved: z.literal(false),
|
|
13
|
+
decidedBy: z.string().optional(),
|
|
14
|
+
decidedAt: z.string().optional(),
|
|
15
|
+
reason: z.string().min(1),
|
|
16
|
+
}),
|
|
17
|
+
]);
|
|
18
|
+
export function approvalOutcomeForCommand(command) {
|
|
19
|
+
return command === "approve" ? "approved" : "rejected";
|
|
20
|
+
}
|
|
21
|
+
export function createApprovalOutcome(outcome) {
|
|
22
|
+
return approvalOutcomeSchema.parse(outcome);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../src/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;IACnE,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9B,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACzB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9B,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1B,CAAC;CACH,CAAC,CAAA;AAKF,MAAM,UAAU,yBAAyB,CAAC,OAAwB;IAChE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAwB;IAC5D,OAAO,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC7C,CAAC"}
|
package/dist/domain.d.ts
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const tasksSchemaDomain: import("@ekairos/domain").DomainSchemaResult<{
|
|
3
|
+
task_tasks: import("@instantdb/core").EntityDef<{
|
|
4
|
+
kind: import("@instantdb/core").DataAttrDef<string, true, true, false>;
|
|
5
|
+
key: import("@instantdb/core").DataAttrDef<string, true, true, true>;
|
|
6
|
+
state: import("@instantdb/core").DataAttrDef<string, true, true, false>;
|
|
7
|
+
instructions: import("@instantdb/core").DataAttrDef<string, false, false, false>;
|
|
8
|
+
context: import("@instantdb/core").DataAttrDef<any, false, false, false>;
|
|
9
|
+
outcomeKind: import("@instantdb/core").DataAttrDef<string, false, true, false>;
|
|
10
|
+
outcomeSchema: import("@instantdb/core").DataAttrDef<any, false, false, false>;
|
|
11
|
+
outcome: import("@instantdb/core").DataAttrDef<any, false, false, false>;
|
|
12
|
+
errorText: import("@instantdb/core").DataAttrDef<string, false, false, false>;
|
|
13
|
+
createdAt: import("@instantdb/core").DataAttrDef<Date, true, true, false>;
|
|
14
|
+
updatedAt: import("@instantdb/core").DataAttrDef<Date, true, true, false>;
|
|
15
|
+
resolvedAt: import("@instantdb/core").DataAttrDef<Date, false, true, false>;
|
|
16
|
+
}, {}, unknown>;
|
|
17
|
+
}, {}, import("@instantdb/core").RoomsDef, {}, "tasks", "tasks">;
|
|
18
|
+
export declare const tasksDomain: import("@ekairos/domain").DomainSchemaResult<{
|
|
19
|
+
task_tasks: import("@instantdb/core").EntityDef<{
|
|
20
|
+
kind: import("@instantdb/core").DataAttrDef<string, true, true, false>;
|
|
21
|
+
key: import("@instantdb/core").DataAttrDef<string, true, true, true>;
|
|
22
|
+
state: import("@instantdb/core").DataAttrDef<string, true, true, false>;
|
|
23
|
+
instructions: import("@instantdb/core").DataAttrDef<string, false, false, false>;
|
|
24
|
+
context: import("@instantdb/core").DataAttrDef<any, false, false, false>;
|
|
25
|
+
outcomeKind: import("@instantdb/core").DataAttrDef<string, false, true, false>;
|
|
26
|
+
outcomeSchema: import("@instantdb/core").DataAttrDef<any, false, false, false>;
|
|
27
|
+
outcome: import("@instantdb/core").DataAttrDef<any, false, false, false>;
|
|
28
|
+
errorText: import("@instantdb/core").DataAttrDef<string, false, false, false>;
|
|
29
|
+
createdAt: import("@instantdb/core").DataAttrDef<Date, true, true, false>;
|
|
30
|
+
updatedAt: import("@instantdb/core").DataAttrDef<Date, true, true, false>;
|
|
31
|
+
resolvedAt: import("@instantdb/core").DataAttrDef<Date, false, true, false>;
|
|
32
|
+
}, {}, unknown>;
|
|
33
|
+
}, {}, import("@instantdb/core").RoomsDef, {
|
|
34
|
+
openTask: import("@ekairos/domain").DomainActionRegistration<z.ZodObject<{
|
|
35
|
+
id: z.ZodOptional<z.ZodString>;
|
|
36
|
+
kind: z.ZodString;
|
|
37
|
+
key: z.ZodString;
|
|
38
|
+
instructions: z.ZodString;
|
|
39
|
+
context: z.ZodOptional<z.ZodUnknown>;
|
|
40
|
+
outcomeKind: z.ZodOptional<z.ZodString>;
|
|
41
|
+
outcomeSchema: z.ZodObject<{
|
|
42
|
+
type: z.ZodLiteral<"json-schema">;
|
|
43
|
+
schema: z.ZodUnknown;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
46
|
+
ok: z.ZodLiteral<true>;
|
|
47
|
+
data: z.ZodObject<{
|
|
48
|
+
id: z.ZodString;
|
|
49
|
+
kind: z.ZodString;
|
|
50
|
+
key: z.ZodString;
|
|
51
|
+
state: z.ZodEnum<{
|
|
52
|
+
open: "open";
|
|
53
|
+
completed: "completed";
|
|
54
|
+
cancelled: "cancelled";
|
|
55
|
+
failed: "failed";
|
|
56
|
+
}>;
|
|
57
|
+
instructions: z.ZodString;
|
|
58
|
+
context: z.ZodUnknown;
|
|
59
|
+
outcomeKind: z.ZodOptional<z.ZodString>;
|
|
60
|
+
outcomeSchema: z.ZodOptional<z.ZodObject<{
|
|
61
|
+
type: z.ZodLiteral<"json-schema">;
|
|
62
|
+
schema: z.ZodUnknown;
|
|
63
|
+
}, z.core.$strip>>;
|
|
64
|
+
resolvedOutcome: z.ZodOptional<z.ZodUnknown>;
|
|
65
|
+
errorText: z.ZodOptional<z.ZodString>;
|
|
66
|
+
createdAt: z.ZodOptional<z.ZodUnknown>;
|
|
67
|
+
updatedAt: z.ZodOptional<z.ZodUnknown>;
|
|
68
|
+
resolvedAt: z.ZodOptional<z.ZodUnknown>;
|
|
69
|
+
}, z.core.$strip>;
|
|
70
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
71
|
+
ok: z.ZodLiteral<false>;
|
|
72
|
+
error: z.ZodString;
|
|
73
|
+
issues: z.ZodOptional<z.ZodUnknown>;
|
|
74
|
+
}, z.core.$strip>], "ok">, import("./service.js").TasksRuntime, any>;
|
|
75
|
+
getTask: import("@ekairos/domain").DomainActionRegistration<z.ZodObject<{
|
|
76
|
+
id: z.ZodString;
|
|
77
|
+
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
78
|
+
ok: z.ZodLiteral<true>;
|
|
79
|
+
data: z.ZodObject<{
|
|
80
|
+
id: z.ZodString;
|
|
81
|
+
kind: z.ZodString;
|
|
82
|
+
key: z.ZodString;
|
|
83
|
+
state: z.ZodEnum<{
|
|
84
|
+
open: "open";
|
|
85
|
+
completed: "completed";
|
|
86
|
+
cancelled: "cancelled";
|
|
87
|
+
failed: "failed";
|
|
88
|
+
}>;
|
|
89
|
+
instructions: z.ZodString;
|
|
90
|
+
context: z.ZodUnknown;
|
|
91
|
+
outcomeKind: z.ZodOptional<z.ZodString>;
|
|
92
|
+
outcomeSchema: z.ZodOptional<z.ZodObject<{
|
|
93
|
+
type: z.ZodLiteral<"json-schema">;
|
|
94
|
+
schema: z.ZodUnknown;
|
|
95
|
+
}, z.core.$strip>>;
|
|
96
|
+
resolvedOutcome: z.ZodOptional<z.ZodUnknown>;
|
|
97
|
+
errorText: z.ZodOptional<z.ZodString>;
|
|
98
|
+
createdAt: z.ZodOptional<z.ZodUnknown>;
|
|
99
|
+
updatedAt: z.ZodOptional<z.ZodUnknown>;
|
|
100
|
+
resolvedAt: z.ZodOptional<z.ZodUnknown>;
|
|
101
|
+
}, z.core.$strip>;
|
|
102
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
103
|
+
ok: z.ZodLiteral<false>;
|
|
104
|
+
error: z.ZodString;
|
|
105
|
+
issues: z.ZodOptional<z.ZodUnknown>;
|
|
106
|
+
}, z.core.$strip>], "ok">, import("./service.js").TasksRuntime, any>;
|
|
107
|
+
awaitOutcome: import("@ekairos/domain").DomainActionRegistration<z.ZodObject<{
|
|
108
|
+
id: z.ZodString;
|
|
109
|
+
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
110
|
+
ok: z.ZodLiteral<true>;
|
|
111
|
+
data: z.ZodUnknown;
|
|
112
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
113
|
+
ok: z.ZodLiteral<false>;
|
|
114
|
+
error: z.ZodString;
|
|
115
|
+
issues: z.ZodOptional<z.ZodUnknown>;
|
|
116
|
+
}, z.core.$strip>], "ok">, import("./service.js").TasksRuntime, any>;
|
|
117
|
+
decideTask: import("@ekairos/domain").DomainActionRegistration<z.ZodObject<{
|
|
118
|
+
id: z.ZodString;
|
|
119
|
+
outcome: z.ZodUnknown;
|
|
120
|
+
resumeWorkflow: z.ZodOptional<z.ZodBoolean>;
|
|
121
|
+
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
122
|
+
ok: z.ZodLiteral<true>;
|
|
123
|
+
data: z.ZodObject<{
|
|
124
|
+
id: z.ZodString;
|
|
125
|
+
kind: z.ZodString;
|
|
126
|
+
key: z.ZodString;
|
|
127
|
+
state: z.ZodEnum<{
|
|
128
|
+
open: "open";
|
|
129
|
+
completed: "completed";
|
|
130
|
+
cancelled: "cancelled";
|
|
131
|
+
failed: "failed";
|
|
132
|
+
}>;
|
|
133
|
+
instructions: z.ZodString;
|
|
134
|
+
context: z.ZodUnknown;
|
|
135
|
+
outcomeKind: z.ZodOptional<z.ZodString>;
|
|
136
|
+
outcomeSchema: z.ZodOptional<z.ZodObject<{
|
|
137
|
+
type: z.ZodLiteral<"json-schema">;
|
|
138
|
+
schema: z.ZodUnknown;
|
|
139
|
+
}, z.core.$strip>>;
|
|
140
|
+
resolvedOutcome: z.ZodOptional<z.ZodUnknown>;
|
|
141
|
+
errorText: z.ZodOptional<z.ZodString>;
|
|
142
|
+
createdAt: z.ZodOptional<z.ZodUnknown>;
|
|
143
|
+
updatedAt: z.ZodOptional<z.ZodUnknown>;
|
|
144
|
+
resolvedAt: z.ZodOptional<z.ZodUnknown>;
|
|
145
|
+
}, z.core.$strip>;
|
|
146
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
147
|
+
ok: z.ZodLiteral<false>;
|
|
148
|
+
error: z.ZodString;
|
|
149
|
+
issues: z.ZodOptional<z.ZodUnknown>;
|
|
150
|
+
}, z.core.$strip>], "ok">, import("./service.js").TasksRuntime, any>;
|
|
151
|
+
cancelTask: import("@ekairos/domain").DomainActionRegistration<z.ZodObject<{
|
|
152
|
+
id: z.ZodString;
|
|
153
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
154
|
+
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
155
|
+
ok: z.ZodLiteral<true>;
|
|
156
|
+
data: z.ZodObject<{
|
|
157
|
+
id: z.ZodString;
|
|
158
|
+
kind: z.ZodString;
|
|
159
|
+
key: z.ZodString;
|
|
160
|
+
state: z.ZodEnum<{
|
|
161
|
+
open: "open";
|
|
162
|
+
completed: "completed";
|
|
163
|
+
cancelled: "cancelled";
|
|
164
|
+
failed: "failed";
|
|
165
|
+
}>;
|
|
166
|
+
instructions: z.ZodString;
|
|
167
|
+
context: z.ZodUnknown;
|
|
168
|
+
outcomeKind: z.ZodOptional<z.ZodString>;
|
|
169
|
+
outcomeSchema: z.ZodOptional<z.ZodObject<{
|
|
170
|
+
type: z.ZodLiteral<"json-schema">;
|
|
171
|
+
schema: z.ZodUnknown;
|
|
172
|
+
}, z.core.$strip>>;
|
|
173
|
+
resolvedOutcome: z.ZodOptional<z.ZodUnknown>;
|
|
174
|
+
errorText: z.ZodOptional<z.ZodString>;
|
|
175
|
+
createdAt: z.ZodOptional<z.ZodUnknown>;
|
|
176
|
+
updatedAt: z.ZodOptional<z.ZodUnknown>;
|
|
177
|
+
resolvedAt: z.ZodOptional<z.ZodUnknown>;
|
|
178
|
+
}, z.core.$strip>;
|
|
179
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
180
|
+
ok: z.ZodLiteral<false>;
|
|
181
|
+
error: z.ZodString;
|
|
182
|
+
issues: z.ZodOptional<z.ZodUnknown>;
|
|
183
|
+
}, z.core.$strip>], "ok">, import("./service.js").TasksRuntime, any>;
|
|
184
|
+
failTask: import("@ekairos/domain").DomainActionRegistration<z.ZodObject<{
|
|
185
|
+
id: z.ZodString;
|
|
186
|
+
errorText: z.ZodString;
|
|
187
|
+
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
188
|
+
ok: z.ZodLiteral<true>;
|
|
189
|
+
data: z.ZodObject<{
|
|
190
|
+
id: z.ZodString;
|
|
191
|
+
kind: z.ZodString;
|
|
192
|
+
key: z.ZodString;
|
|
193
|
+
state: z.ZodEnum<{
|
|
194
|
+
open: "open";
|
|
195
|
+
completed: "completed";
|
|
196
|
+
cancelled: "cancelled";
|
|
197
|
+
failed: "failed";
|
|
198
|
+
}>;
|
|
199
|
+
instructions: z.ZodString;
|
|
200
|
+
context: z.ZodUnknown;
|
|
201
|
+
outcomeKind: z.ZodOptional<z.ZodString>;
|
|
202
|
+
outcomeSchema: z.ZodOptional<z.ZodObject<{
|
|
203
|
+
type: z.ZodLiteral<"json-schema">;
|
|
204
|
+
schema: z.ZodUnknown;
|
|
205
|
+
}, z.core.$strip>>;
|
|
206
|
+
resolvedOutcome: z.ZodOptional<z.ZodUnknown>;
|
|
207
|
+
errorText: z.ZodOptional<z.ZodString>;
|
|
208
|
+
createdAt: z.ZodOptional<z.ZodUnknown>;
|
|
209
|
+
updatedAt: z.ZodOptional<z.ZodUnknown>;
|
|
210
|
+
resolvedAt: z.ZodOptional<z.ZodUnknown>;
|
|
211
|
+
}, z.core.$strip>;
|
|
212
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
213
|
+
ok: z.ZodLiteral<false>;
|
|
214
|
+
error: z.ZodString;
|
|
215
|
+
issues: z.ZodOptional<z.ZodUnknown>;
|
|
216
|
+
}, z.core.$strip>], "ok">, import("./service.js").TasksRuntime, any>;
|
|
217
|
+
}, "tasks", "tasks">;
|
|
218
|
+
//# sourceMappingURL=domain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA0FvB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;gEAoB1B,CAAA;AAEJ,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAsCpB,CAAA"}
|
package/dist/domain.js
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { i } from "@instantdb/core";
|
|
2
|
+
import { defineAction, domain } from "@ekairos/domain";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { awaitOutcomeExecute, cancelTaskExecute, decideTaskExecute, failTaskExecute, getTaskExecute, openTaskExecute, } from "./actions.js";
|
|
5
|
+
const storedOutcomeSchema = z.object({
|
|
6
|
+
type: z.literal("json-schema"),
|
|
7
|
+
schema: z.unknown(),
|
|
8
|
+
});
|
|
9
|
+
const taskRecordSchema = z.object({
|
|
10
|
+
id: z.string(),
|
|
11
|
+
kind: z.string(),
|
|
12
|
+
key: z.string(),
|
|
13
|
+
state: z.enum(["open", "completed", "cancelled", "failed"]),
|
|
14
|
+
instructions: z.string(),
|
|
15
|
+
context: z.unknown(),
|
|
16
|
+
outcomeKind: z.string().optional(),
|
|
17
|
+
outcomeSchema: storedOutcomeSchema.optional(),
|
|
18
|
+
resolvedOutcome: z.unknown().optional(),
|
|
19
|
+
errorText: z.string().optional(),
|
|
20
|
+
createdAt: z.unknown().optional(),
|
|
21
|
+
updatedAt: z.unknown().optional(),
|
|
22
|
+
resolvedAt: z.unknown().optional(),
|
|
23
|
+
});
|
|
24
|
+
const taskServiceResultSchema = z.discriminatedUnion("ok", [
|
|
25
|
+
z.object({
|
|
26
|
+
ok: z.literal(true),
|
|
27
|
+
data: taskRecordSchema,
|
|
28
|
+
}),
|
|
29
|
+
z.object({
|
|
30
|
+
ok: z.literal(false),
|
|
31
|
+
error: z.string(),
|
|
32
|
+
issues: z.unknown().optional(),
|
|
33
|
+
}),
|
|
34
|
+
]);
|
|
35
|
+
const taskOutcomeResultSchema = z.discriminatedUnion("ok", [
|
|
36
|
+
z.object({
|
|
37
|
+
ok: z.literal(true),
|
|
38
|
+
data: z.unknown(),
|
|
39
|
+
}),
|
|
40
|
+
z.object({
|
|
41
|
+
ok: z.literal(false),
|
|
42
|
+
error: z.string(),
|
|
43
|
+
issues: z.unknown().optional(),
|
|
44
|
+
}),
|
|
45
|
+
]);
|
|
46
|
+
const openTaskInputSchema = z.object({
|
|
47
|
+
id: z.string().optional(),
|
|
48
|
+
kind: z.string(),
|
|
49
|
+
key: z.string(),
|
|
50
|
+
instructions: z.string(),
|
|
51
|
+
context: z.unknown().optional(),
|
|
52
|
+
outcomeKind: z.string().optional(),
|
|
53
|
+
outcomeSchema: storedOutcomeSchema,
|
|
54
|
+
});
|
|
55
|
+
const decideTaskInputSchema = z.object({
|
|
56
|
+
id: z.string(),
|
|
57
|
+
outcome: z.unknown(),
|
|
58
|
+
resumeWorkflow: z.boolean().optional(),
|
|
59
|
+
});
|
|
60
|
+
const cancelTaskInputSchema = z.object({
|
|
61
|
+
id: z.string(),
|
|
62
|
+
reason: z.string().optional(),
|
|
63
|
+
});
|
|
64
|
+
const failTaskInputSchema = z.object({
|
|
65
|
+
id: z.string(),
|
|
66
|
+
errorText: z.string(),
|
|
67
|
+
});
|
|
68
|
+
const getTaskInputSchema = z.object({
|
|
69
|
+
id: z.string(),
|
|
70
|
+
});
|
|
71
|
+
const awaitOutcomeInputSchema = z.object({
|
|
72
|
+
id: z.string(),
|
|
73
|
+
});
|
|
74
|
+
export const tasksSchemaDomain = domain("tasks")
|
|
75
|
+
.withSchema({
|
|
76
|
+
entities: {
|
|
77
|
+
task_tasks: i.entity({
|
|
78
|
+
kind: i.string().indexed(),
|
|
79
|
+
key: i.string().unique().indexed(),
|
|
80
|
+
state: i.string().indexed(),
|
|
81
|
+
instructions: i.string().optional(),
|
|
82
|
+
context: i.json().optional(),
|
|
83
|
+
outcomeKind: i.string().optional().indexed(),
|
|
84
|
+
outcomeSchema: i.json().optional(),
|
|
85
|
+
outcome: i.json().optional(),
|
|
86
|
+
errorText: i.string().optional(),
|
|
87
|
+
createdAt: i.date().indexed(),
|
|
88
|
+
updatedAt: i.date().indexed(),
|
|
89
|
+
resolvedAt: i.date().optional().indexed(),
|
|
90
|
+
}),
|
|
91
|
+
},
|
|
92
|
+
links: {},
|
|
93
|
+
rooms: {},
|
|
94
|
+
});
|
|
95
|
+
export const tasksDomain = tasksSchemaDomain
|
|
96
|
+
.withActions({
|
|
97
|
+
openTask: defineAction({
|
|
98
|
+
name: "tasks.openTask",
|
|
99
|
+
input: openTaskInputSchema,
|
|
100
|
+
output: taskServiceResultSchema,
|
|
101
|
+
execute: openTaskExecute,
|
|
102
|
+
}),
|
|
103
|
+
getTask: defineAction({
|
|
104
|
+
name: "tasks.getTask",
|
|
105
|
+
input: getTaskInputSchema,
|
|
106
|
+
output: taskServiceResultSchema,
|
|
107
|
+
execute: getTaskExecute,
|
|
108
|
+
}),
|
|
109
|
+
awaitOutcome: defineAction({
|
|
110
|
+
name: "tasks.awaitOutcome",
|
|
111
|
+
input: awaitOutcomeInputSchema,
|
|
112
|
+
output: taskOutcomeResultSchema,
|
|
113
|
+
execute: awaitOutcomeExecute,
|
|
114
|
+
}),
|
|
115
|
+
decideTask: defineAction({
|
|
116
|
+
name: "tasks.decideTask",
|
|
117
|
+
input: decideTaskInputSchema,
|
|
118
|
+
output: taskServiceResultSchema,
|
|
119
|
+
execute: decideTaskExecute,
|
|
120
|
+
}),
|
|
121
|
+
cancelTask: defineAction({
|
|
122
|
+
name: "tasks.cancelTask",
|
|
123
|
+
input: cancelTaskInputSchema,
|
|
124
|
+
output: taskServiceResultSchema,
|
|
125
|
+
execute: cancelTaskExecute,
|
|
126
|
+
}),
|
|
127
|
+
failTask: defineAction({
|
|
128
|
+
name: "tasks.failTask",
|
|
129
|
+
input: failTaskInputSchema,
|
|
130
|
+
output: taskServiceResultSchema,
|
|
131
|
+
execute: failTaskExecute,
|
|
132
|
+
}),
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=domain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { tasksDomain } from "./domain.js";
|
|
2
|
+
export { createApprovalOutcome, approvalOutcomeForCommand, approvalOutcomeSchema, type ApprovalCommand, type ApprovalOutcome, } from "./approval.js";
|
|
3
|
+
export { parseTaskOutcome, taskOutcomeToken, toStoredOutcomeSchema, type TaskData, type TaskHandle, type TaskOutcomeSchema, type TaskState, type TaskStoredOutcomeSchema, } from "./task.js";
|
|
4
|
+
export { Task, type TaskApprovalInput, type TaskOpenInput, type TaskOpenOptions, type TaskRecord, type TasksClientRuntime, type TasksRuntime, } from "./service.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,uBAAuB,GAC7B,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,IAAI,EACJ,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { tasksDomain } from "./domain.js";
|
|
2
|
+
export { createApprovalOutcome, approvalOutcomeForCommand, approvalOutcomeSchema, } from "./approval.js";
|
|
3
|
+
export { parseTaskOutcome, taskOutcomeToken, toStoredOutcomeSchema, } from "./task.js";
|
|
4
|
+
export { Task, } from "./service.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,GAGtB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GAMtB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,IAAI,GAOL,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { type TaskData, type TaskHandle, type TaskOutcomeSchema, type TaskStoredOutcomeSchema } from "./task.js";
|
|
2
|
+
export type ServiceResult<T = unknown> = {
|
|
3
|
+
ok: true;
|
|
4
|
+
data: T;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
error: string;
|
|
8
|
+
issues?: unknown;
|
|
9
|
+
};
|
|
10
|
+
export type TasksRuntime = {
|
|
11
|
+
db: any;
|
|
12
|
+
};
|
|
13
|
+
export type TasksClientRuntime = {
|
|
14
|
+
use(domain: unknown): Promise<any>;
|
|
15
|
+
};
|
|
16
|
+
export type TaskRecord<TContext = unknown, TOutcome = unknown> = TaskData<TContext, TOutcome> & {
|
|
17
|
+
errorText?: string;
|
|
18
|
+
};
|
|
19
|
+
export type TaskOpenActionInput = {
|
|
20
|
+
id?: string;
|
|
21
|
+
kind: string;
|
|
22
|
+
key: string;
|
|
23
|
+
instructions: string;
|
|
24
|
+
context?: unknown;
|
|
25
|
+
outcomeKind?: string;
|
|
26
|
+
outcomeSchema: TaskStoredOutcomeSchema;
|
|
27
|
+
};
|
|
28
|
+
export type TaskDecideActionInput = {
|
|
29
|
+
id: string;
|
|
30
|
+
outcome: unknown;
|
|
31
|
+
resumeWorkflow?: boolean;
|
|
32
|
+
};
|
|
33
|
+
export type TaskCancelActionInput = {
|
|
34
|
+
id: string;
|
|
35
|
+
reason?: string;
|
|
36
|
+
};
|
|
37
|
+
export type TaskFailActionInput = {
|
|
38
|
+
id: string;
|
|
39
|
+
errorText: string;
|
|
40
|
+
};
|
|
41
|
+
export type TaskGetActionInput = {
|
|
42
|
+
id: string;
|
|
43
|
+
};
|
|
44
|
+
export type TaskAwaitOutcomeActionInput = {
|
|
45
|
+
id: string;
|
|
46
|
+
};
|
|
47
|
+
export type TaskOpenOptions = {
|
|
48
|
+
id?: string;
|
|
49
|
+
outcomeKind?: string;
|
|
50
|
+
};
|
|
51
|
+
export type TaskOpenInput<TOutcome, TContext = unknown> = {
|
|
52
|
+
id?: string;
|
|
53
|
+
kind: string;
|
|
54
|
+
key: string;
|
|
55
|
+
outcome: TaskOutcomeSchema<TOutcome>;
|
|
56
|
+
instructions: string;
|
|
57
|
+
context: TContext;
|
|
58
|
+
outcomeKind?: string;
|
|
59
|
+
};
|
|
60
|
+
export type TaskApprovalInput<TContext = unknown> = {
|
|
61
|
+
id?: string;
|
|
62
|
+
key: string;
|
|
63
|
+
instructions: string;
|
|
64
|
+
context: TContext;
|
|
65
|
+
};
|
|
66
|
+
export declare class TaskService {
|
|
67
|
+
private readonly runtime;
|
|
68
|
+
constructor(runtime: TasksRuntime);
|
|
69
|
+
private db;
|
|
70
|
+
private getTaskRecord;
|
|
71
|
+
openRaw(input: TaskOpenActionInput): Promise<ServiceResult<TaskRecord>>;
|
|
72
|
+
decide(input: TaskDecideActionInput): Promise<ServiceResult<TaskRecord>>;
|
|
73
|
+
cancel(input: TaskCancelActionInput): Promise<ServiceResult<TaskRecord>>;
|
|
74
|
+
fail(input: TaskFailActionInput): Promise<ServiceResult<TaskRecord>>;
|
|
75
|
+
getRaw(input: TaskGetActionInput): Promise<ServiceResult<TaskRecord>>;
|
|
76
|
+
awaitOutcome(input: TaskAwaitOutcomeActionInput): Promise<ServiceResult<unknown>>;
|
|
77
|
+
}
|
|
78
|
+
export declare class Task {
|
|
79
|
+
static open<TOutcome, TContext = unknown>(runtime: TasksClientRuntime, input: TaskOpenInput<TOutcome, TContext>): Promise<TaskHandle<TOutcome, TContext>>;
|
|
80
|
+
static approval<TContext = unknown>(runtime: TasksClientRuntime, input: TaskApprovalInput<TContext>): Promise<TaskHandle<{
|
|
81
|
+
outcome: "approved";
|
|
82
|
+
approved: true;
|
|
83
|
+
decidedBy?: string | undefined;
|
|
84
|
+
decidedAt?: string | undefined;
|
|
85
|
+
note?: string | undefined;
|
|
86
|
+
} | {
|
|
87
|
+
outcome: "rejected";
|
|
88
|
+
approved: false;
|
|
89
|
+
reason: string;
|
|
90
|
+
decidedBy?: string | undefined;
|
|
91
|
+
decidedAt?: string | undefined;
|
|
92
|
+
}, TContext>>;
|
|
93
|
+
static get<TOutcome, TContext = unknown>(runtime: TasksClientRuntime, id: string, outcomeSchema: TaskOutcomeSchema<TOutcome>): Promise<TaskHandle<TOutcome, TContext>>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import Ajv from "ajv";
|
|
2
|
+
import { id as instantId } from "@instantdb/core";
|
|
3
|
+
import { createHook } from "workflow";
|
|
4
|
+
import { approvalOutcomeSchema } from "./approval.js";
|
|
5
|
+
import { tasksDomain } from "./domain.js";
|
|
6
|
+
import { assertStoredOutcomeSchemaMatches, createTaskHandle, storedOutcomeSchemasEqual, taskOutcomeToken, toStoredOutcomeSchema, } from "./task.js";
|
|
7
|
+
async function runTaskDomainAction(runtime, action, input) {
|
|
8
|
+
const tasks = await tasksDomain(runtime);
|
|
9
|
+
const actions = tasks.actions;
|
|
10
|
+
return await actions[action](input);
|
|
11
|
+
}
|
|
12
|
+
function unwrapTaskResult(result) {
|
|
13
|
+
if (!result.ok)
|
|
14
|
+
throw new Error(result.error);
|
|
15
|
+
return result.data;
|
|
16
|
+
}
|
|
17
|
+
async function getTaskRecordThroughDomain(runtime, id) {
|
|
18
|
+
return unwrapTaskResult(await runTaskDomainAction(runtime, "getTask", { id }));
|
|
19
|
+
}
|
|
20
|
+
function unwrapOutcomeResult(result) {
|
|
21
|
+
if (!result.ok)
|
|
22
|
+
throw new Error(result.error);
|
|
23
|
+
return result.data;
|
|
24
|
+
}
|
|
25
|
+
function createDomainTaskHandle(runtime, record, outcomeSchema) {
|
|
26
|
+
assertStoredOutcomeSchemaMatches(outcomeSchema, record.outcomeSchema);
|
|
27
|
+
return createTaskHandle(record, outcomeSchema, {
|
|
28
|
+
async awaitOutcome() {
|
|
29
|
+
return unwrapOutcomeResult(await runTaskDomainAction(runtime, "awaitOutcome", { id: record.id }));
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
let ajvInstance = null;
|
|
34
|
+
function getAjv() {
|
|
35
|
+
if (!ajvInstance) {
|
|
36
|
+
ajvInstance = new Ajv({ allErrors: true, strict: false });
|
|
37
|
+
}
|
|
38
|
+
return ajvInstance;
|
|
39
|
+
}
|
|
40
|
+
function newEntityId() {
|
|
41
|
+
return instantId();
|
|
42
|
+
}
|
|
43
|
+
function normalizeTaskState(state) {
|
|
44
|
+
if (state === "open" ||
|
|
45
|
+
state === "completed" ||
|
|
46
|
+
state === "cancelled" ||
|
|
47
|
+
state === "failed") {
|
|
48
|
+
return state;
|
|
49
|
+
}
|
|
50
|
+
return "open";
|
|
51
|
+
}
|
|
52
|
+
function rowToTaskRecord(row) {
|
|
53
|
+
return {
|
|
54
|
+
id: String(row.id),
|
|
55
|
+
kind: String(row.kind),
|
|
56
|
+
key: String(row.key),
|
|
57
|
+
state: normalizeTaskState(row.state),
|
|
58
|
+
instructions: String(row.instructions ?? ""),
|
|
59
|
+
context: row.context,
|
|
60
|
+
outcomeKind: typeof row.outcomeKind === "string" ? row.outcomeKind : undefined,
|
|
61
|
+
outcomeSchema: row.outcomeSchema,
|
|
62
|
+
resolvedOutcome: row.outcome,
|
|
63
|
+
errorText: typeof row.errorText === "string" ? row.errorText : undefined,
|
|
64
|
+
createdAt: row.createdAt,
|
|
65
|
+
updatedAt: row.updatedAt,
|
|
66
|
+
resolvedAt: row.resolvedAt,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function validateStoredOutcome(storedSchema, outcome) {
|
|
70
|
+
if (!storedSchema || storedSchema.type !== "json-schema") {
|
|
71
|
+
return { ok: false, error: "task_outcome_schema_missing" };
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const validate = getAjv().compile(storedSchema.schema);
|
|
75
|
+
if (!validate(outcome)) {
|
|
76
|
+
return {
|
|
77
|
+
ok: false,
|
|
78
|
+
error: "task_outcome_invalid",
|
|
79
|
+
issues: validate.errors ?? [],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
return {
|
|
85
|
+
ok: false,
|
|
86
|
+
error: "task_outcome_schema_invalid",
|
|
87
|
+
issues: error instanceof Error ? error.message : String(error),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return { ok: true, data: outcome };
|
|
91
|
+
}
|
|
92
|
+
async function resumeTaskOutcome(id, outcome) {
|
|
93
|
+
const { resumeHook } = await import("workflow/api");
|
|
94
|
+
try {
|
|
95
|
+
await resumeHook(taskOutcomeToken(id), outcome);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (error instanceof Error && error.name === "HookNotFoundError") {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function createTaskOutcomeHook(id) {
|
|
105
|
+
return createHook({
|
|
106
|
+
token: taskOutcomeToken(id),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
export class TaskService {
|
|
110
|
+
constructor(runtime) {
|
|
111
|
+
this.runtime = runtime;
|
|
112
|
+
}
|
|
113
|
+
db() {
|
|
114
|
+
return this.runtime.db;
|
|
115
|
+
}
|
|
116
|
+
async getTaskRecord(id) {
|
|
117
|
+
const db = this.db();
|
|
118
|
+
const result = await db.query({
|
|
119
|
+
task_tasks: {
|
|
120
|
+
$: { where: { id }, limit: 1 },
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
const row = result?.task_tasks?.[0];
|
|
124
|
+
return row?.id ? rowToTaskRecord(row) : null;
|
|
125
|
+
}
|
|
126
|
+
async openRaw(input) {
|
|
127
|
+
if (!input.kind.trim())
|
|
128
|
+
return { ok: false, error: "task_kind_required" };
|
|
129
|
+
if (!input.key.trim())
|
|
130
|
+
return { ok: false, error: "task_key_required" };
|
|
131
|
+
if (!input.outcomeSchema)
|
|
132
|
+
return { ok: false, error: "task_outcome_schema_required" };
|
|
133
|
+
const db = this.db();
|
|
134
|
+
const existing = await db.query({
|
|
135
|
+
task_tasks: {
|
|
136
|
+
$: { where: { key: input.key }, limit: 1 },
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
const existingTask = existing?.task_tasks?.[0];
|
|
140
|
+
if (existingTask?.id) {
|
|
141
|
+
const existingSchema = existingTask.outcomeSchema;
|
|
142
|
+
if (!storedOutcomeSchemasEqual(existingSchema, input.outcomeSchema)) {
|
|
143
|
+
return { ok: false, error: "task_outcome_schema_mismatch" };
|
|
144
|
+
}
|
|
145
|
+
return { ok: true, data: rowToTaskRecord(existingTask) };
|
|
146
|
+
}
|
|
147
|
+
const now = new Date();
|
|
148
|
+
const id = input.id ?? newEntityId();
|
|
149
|
+
await db.transact([
|
|
150
|
+
db.tx.task_tasks[id].update({
|
|
151
|
+
kind: input.kind,
|
|
152
|
+
key: input.key,
|
|
153
|
+
state: "open",
|
|
154
|
+
instructions: input.instructions,
|
|
155
|
+
context: input.context,
|
|
156
|
+
outcomeKind: input.outcomeKind,
|
|
157
|
+
outcomeSchema: input.outcomeSchema,
|
|
158
|
+
createdAt: now,
|
|
159
|
+
updatedAt: now,
|
|
160
|
+
}),
|
|
161
|
+
]);
|
|
162
|
+
const created = await this.getTaskRecord(id);
|
|
163
|
+
if (!created)
|
|
164
|
+
return { ok: false, error: "task_open_failed" };
|
|
165
|
+
return { ok: true, data: created };
|
|
166
|
+
}
|
|
167
|
+
async decide(input) {
|
|
168
|
+
if (!input.id.trim())
|
|
169
|
+
return { ok: false, error: "task_id_required" };
|
|
170
|
+
const task = await this.getTaskRecord(input.id);
|
|
171
|
+
if (!task)
|
|
172
|
+
return { ok: false, error: "task_not_found" };
|
|
173
|
+
if (task.state !== "open") {
|
|
174
|
+
return { ok: false, error: `task_not_open:${task.state}` };
|
|
175
|
+
}
|
|
176
|
+
const validation = validateStoredOutcome(task.outcomeSchema, input.outcome);
|
|
177
|
+
if (!validation.ok)
|
|
178
|
+
return validation;
|
|
179
|
+
const db = this.db();
|
|
180
|
+
const now = new Date();
|
|
181
|
+
await db.transact([
|
|
182
|
+
db.tx.task_tasks[input.id].update({
|
|
183
|
+
state: "completed",
|
|
184
|
+
outcome: validation.data,
|
|
185
|
+
resolvedAt: now,
|
|
186
|
+
updatedAt: now,
|
|
187
|
+
}),
|
|
188
|
+
]);
|
|
189
|
+
if (input.resumeWorkflow !== false) {
|
|
190
|
+
await resumeTaskOutcome(input.id, validation.data);
|
|
191
|
+
}
|
|
192
|
+
const completed = await this.getTaskRecord(input.id);
|
|
193
|
+
if (!completed)
|
|
194
|
+
return { ok: false, error: "task_not_found_after_decide" };
|
|
195
|
+
return { ok: true, data: completed };
|
|
196
|
+
}
|
|
197
|
+
async cancel(input) {
|
|
198
|
+
if (!input.id.trim())
|
|
199
|
+
return { ok: false, error: "task_id_required" };
|
|
200
|
+
const task = await this.getTaskRecord(input.id);
|
|
201
|
+
if (!task)
|
|
202
|
+
return { ok: false, error: "task_not_found" };
|
|
203
|
+
if (task.state !== "open") {
|
|
204
|
+
return { ok: false, error: `task_not_open:${task.state}` };
|
|
205
|
+
}
|
|
206
|
+
const db = this.db();
|
|
207
|
+
const now = new Date();
|
|
208
|
+
await db.transact([
|
|
209
|
+
db.tx.task_tasks[input.id].update({
|
|
210
|
+
state: "cancelled",
|
|
211
|
+
errorText: input.reason,
|
|
212
|
+
resolvedAt: now,
|
|
213
|
+
updatedAt: now,
|
|
214
|
+
}),
|
|
215
|
+
]);
|
|
216
|
+
const cancelled = await this.getTaskRecord(input.id);
|
|
217
|
+
if (!cancelled)
|
|
218
|
+
return { ok: false, error: "task_not_found_after_cancel" };
|
|
219
|
+
return { ok: true, data: cancelled };
|
|
220
|
+
}
|
|
221
|
+
async fail(input) {
|
|
222
|
+
if (!input.id.trim())
|
|
223
|
+
return { ok: false, error: "task_id_required" };
|
|
224
|
+
if (!input.errorText.trim())
|
|
225
|
+
return { ok: false, error: "task_error_text_required" };
|
|
226
|
+
const task = await this.getTaskRecord(input.id);
|
|
227
|
+
if (!task)
|
|
228
|
+
return { ok: false, error: "task_not_found" };
|
|
229
|
+
if (task.state !== "open") {
|
|
230
|
+
return { ok: false, error: `task_not_open:${task.state}` };
|
|
231
|
+
}
|
|
232
|
+
const db = this.db();
|
|
233
|
+
const now = new Date();
|
|
234
|
+
await db.transact([
|
|
235
|
+
db.tx.task_tasks[input.id].update({
|
|
236
|
+
state: "failed",
|
|
237
|
+
errorText: input.errorText,
|
|
238
|
+
resolvedAt: now,
|
|
239
|
+
updatedAt: now,
|
|
240
|
+
}),
|
|
241
|
+
]);
|
|
242
|
+
const failed = await this.getTaskRecord(input.id);
|
|
243
|
+
if (!failed)
|
|
244
|
+
return { ok: false, error: "task_not_found_after_fail" };
|
|
245
|
+
return { ok: true, data: failed };
|
|
246
|
+
}
|
|
247
|
+
async getRaw(input) {
|
|
248
|
+
if (!input.id.trim())
|
|
249
|
+
return { ok: false, error: "task_id_required" };
|
|
250
|
+
const task = await this.getTaskRecord(input.id);
|
|
251
|
+
if (!task)
|
|
252
|
+
return { ok: false, error: "task_not_found" };
|
|
253
|
+
return { ok: true, data: task };
|
|
254
|
+
}
|
|
255
|
+
async awaitOutcome(input) {
|
|
256
|
+
if (!input.id.trim())
|
|
257
|
+
return { ok: false, error: "task_id_required" };
|
|
258
|
+
const task = await this.getTaskRecord(input.id);
|
|
259
|
+
if (!task)
|
|
260
|
+
return { ok: false, error: "task_not_found" };
|
|
261
|
+
if (task.state === "completed") {
|
|
262
|
+
return validateStoredOutcome(task.outcomeSchema, task.resolvedOutcome);
|
|
263
|
+
}
|
|
264
|
+
if (task.state !== "open") {
|
|
265
|
+
return { ok: false, error: `task_not_open:${task.state}` };
|
|
266
|
+
}
|
|
267
|
+
const hook = createTaskOutcomeHook(input.id);
|
|
268
|
+
try {
|
|
269
|
+
return validateStoredOutcome(task.outcomeSchema, await hook);
|
|
270
|
+
}
|
|
271
|
+
finally {
|
|
272
|
+
hook.dispose();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
export class Task {
|
|
277
|
+
static async open(runtime, input) {
|
|
278
|
+
const opened = unwrapTaskResult(await runTaskDomainAction(runtime, "openTask", {
|
|
279
|
+
id: input.id,
|
|
280
|
+
kind: input.kind,
|
|
281
|
+
key: input.key,
|
|
282
|
+
instructions: input.instructions,
|
|
283
|
+
context: input.context,
|
|
284
|
+
outcomeKind: input.outcomeKind,
|
|
285
|
+
outcomeSchema: toStoredOutcomeSchema(input.outcome),
|
|
286
|
+
}));
|
|
287
|
+
return createDomainTaskHandle(runtime, opened, input.outcome);
|
|
288
|
+
}
|
|
289
|
+
static async approval(runtime, input) {
|
|
290
|
+
return await Task.open(runtime, {
|
|
291
|
+
id: input.id,
|
|
292
|
+
kind: "approval",
|
|
293
|
+
key: input.key,
|
|
294
|
+
outcome: approvalOutcomeSchema,
|
|
295
|
+
instructions: input.instructions,
|
|
296
|
+
context: input.context,
|
|
297
|
+
outcomeKind: "approval",
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
static async get(runtime, id, outcomeSchema) {
|
|
301
|
+
const task = await getTaskRecordThroughDomain(runtime, id);
|
|
302
|
+
return createDomainTaskHandle(runtime, task, outcomeSchema);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/dist/task.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export type TaskState = "open" | "completed" | "cancelled" | "failed";
|
|
3
|
+
export type TaskStoredOutcomeSchema = {
|
|
4
|
+
type: "json-schema";
|
|
5
|
+
schema: unknown;
|
|
6
|
+
};
|
|
7
|
+
export type TaskData<TContext = unknown, TOutcome = unknown> = {
|
|
8
|
+
id: string;
|
|
9
|
+
kind: string;
|
|
10
|
+
key: string;
|
|
11
|
+
state: TaskState;
|
|
12
|
+
instructions: string;
|
|
13
|
+
context: TContext;
|
|
14
|
+
outcomeKind?: string;
|
|
15
|
+
outcomeSchema?: TaskStoredOutcomeSchema;
|
|
16
|
+
resolvedOutcome?: TOutcome;
|
|
17
|
+
createdAt?: Date | string;
|
|
18
|
+
updatedAt?: Date | string;
|
|
19
|
+
resolvedAt?: Date | string;
|
|
20
|
+
};
|
|
21
|
+
export type TaskHandle<TOutcome, TContext = unknown> = TaskData<TContext, TOutcome> & {
|
|
22
|
+
outcome(): Promise<TOutcome>;
|
|
23
|
+
};
|
|
24
|
+
export type TaskOutcomeSchema<TOutcome> = z.ZodType<TOutcome>;
|
|
25
|
+
export declare function taskOutcomeToken(id: string): string;
|
|
26
|
+
export declare function parseTaskOutcome<TOutcome>(outcomeSchema: TaskOutcomeSchema<TOutcome>, outcome: unknown): TOutcome;
|
|
27
|
+
export declare function toStoredOutcomeSchema<TOutcome>(outcomeSchema: TaskOutcomeSchema<TOutcome>): TaskStoredOutcomeSchema;
|
|
28
|
+
export declare function storedOutcomeSchemaMatches<TOutcome>(outcomeSchema: TaskOutcomeSchema<TOutcome>, storedSchema: TaskStoredOutcomeSchema | undefined): boolean;
|
|
29
|
+
export declare function storedOutcomeSchemasEqual(left: TaskStoredOutcomeSchema | undefined, right: TaskStoredOutcomeSchema | undefined): boolean;
|
|
30
|
+
export declare function assertStoredOutcomeSchemaMatches<TOutcome>(outcomeSchema: TaskOutcomeSchema<TOutcome>, storedSchema: TaskStoredOutcomeSchema | undefined): void;
|
|
31
|
+
type TaskHandleOptions<TOutcome, TContext> = {
|
|
32
|
+
awaitOutcome?: () => Promise<unknown>;
|
|
33
|
+
};
|
|
34
|
+
export declare function createTaskHandle<TOutcome, TContext = unknown>(data: TaskData<TContext, TOutcome>, outcomeSchema: TaskOutcomeSchema<TOutcome>, options?: TaskHandleOptions<TOutcome, TContext>): TaskHandle<TOutcome, TContext>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAA;AAErE,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,QAAQ,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,GAAG,OAAO,IAAI;IAC7D,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,SAAS,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,QAAQ,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,uBAAuB,CAAA;IACvC,eAAe,CAAC,EAAE,QAAQ,CAAA;IAC1B,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,IAC/C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAC5B;IACA,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC7B,CAAA;AAEH,MAAM,MAAM,iBAAiB,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AAQ7D,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,UAG1C;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EACvC,aAAa,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAC1C,OAAO,EAAE,OAAO,GACf,QAAQ,CAEV;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAC5C,aAAa,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GACzC,uBAAuB,CAKzB;AAiBD,wBAAgB,0BAA0B,CAAC,QAAQ,EACjD,aAAa,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAC1C,YAAY,EAAE,uBAAuB,GAAG,SAAS,GAChD,OAAO,CAET;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,uBAAuB,GAAG,SAAS,EACzC,KAAK,EAAE,uBAAuB,GAAG,SAAS,GACzC,OAAO,CAMT;AAED,wBAAgB,gCAAgC,CAAC,QAAQ,EACvD,aAAa,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAC1C,YAAY,EAAE,uBAAuB,GAAG,SAAS,QAKlD;AAED,KAAK,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,IAAI;IAC3C,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CACtC,CAAA;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAC3D,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAClC,aAAa,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAC1C,OAAO,GAAE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAM,GAClD,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAmBhC"}
|
package/dist/task.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
function assertNonEmpty(value, name) {
|
|
3
|
+
if (!value.trim()) {
|
|
4
|
+
throw new Error(`${name} is required.`);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export function taskOutcomeToken(id) {
|
|
8
|
+
assertNonEmpty(id, "Task id");
|
|
9
|
+
return `ekairos_task:outcome:${id}`;
|
|
10
|
+
}
|
|
11
|
+
export function parseTaskOutcome(outcomeSchema, outcome) {
|
|
12
|
+
return outcomeSchema.parse(outcome);
|
|
13
|
+
}
|
|
14
|
+
export function toStoredOutcomeSchema(outcomeSchema) {
|
|
15
|
+
return {
|
|
16
|
+
type: "json-schema",
|
|
17
|
+
schema: z.toJSONSchema(outcomeSchema, { target: "draft-7" }),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function sortJson(value) {
|
|
21
|
+
if (Array.isArray(value))
|
|
22
|
+
return value.map(sortJson);
|
|
23
|
+
if (!value || typeof value !== "object")
|
|
24
|
+
return value;
|
|
25
|
+
return Object.fromEntries(Object.entries(value)
|
|
26
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
27
|
+
.map(([key, entry]) => [key, sortJson(entry)]));
|
|
28
|
+
}
|
|
29
|
+
function schemaFingerprint(schema) {
|
|
30
|
+
return JSON.stringify(sortJson(schema));
|
|
31
|
+
}
|
|
32
|
+
export function storedOutcomeSchemaMatches(outcomeSchema, storedSchema) {
|
|
33
|
+
return storedOutcomeSchemasEqual(toStoredOutcomeSchema(outcomeSchema), storedSchema);
|
|
34
|
+
}
|
|
35
|
+
export function storedOutcomeSchemasEqual(left, right) {
|
|
36
|
+
if (!left || !right || left.type !== "json-schema" || right.type !== "json-schema") {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
return schemaFingerprint(left.schema) === schemaFingerprint(right.schema);
|
|
40
|
+
}
|
|
41
|
+
export function assertStoredOutcomeSchemaMatches(outcomeSchema, storedSchema) {
|
|
42
|
+
if (!storedOutcomeSchemaMatches(outcomeSchema, storedSchema)) {
|
|
43
|
+
throw new Error("Task outcome schema does not match the stored task outcome schema.");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function createTaskHandle(data, outcomeSchema, options = {}) {
|
|
47
|
+
assertNonEmpty(data.id, "Task id");
|
|
48
|
+
assertNonEmpty(data.kind, "Task kind");
|
|
49
|
+
assertNonEmpty(data.key, "Task key");
|
|
50
|
+
return {
|
|
51
|
+
...data,
|
|
52
|
+
async outcome() {
|
|
53
|
+
if (options.awaitOutcome) {
|
|
54
|
+
return parseTaskOutcome(outcomeSchema, await options.awaitOutcome());
|
|
55
|
+
}
|
|
56
|
+
if (data.state === "completed") {
|
|
57
|
+
return parseTaskOutcome(outcomeSchema, data.resolvedOutcome);
|
|
58
|
+
}
|
|
59
|
+
throw new Error(`Task ${data.id} cannot resolve an outcome without an awaitOutcome action.`);
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=task.js.map
|
package/dist/task.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ekairos/tasks",
|
|
3
|
+
"version": "1.22.83-beta.development.0",
|
|
4
|
+
"description": "Ekairos Tasks - durable tasks with typed outcomes",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/e-kairos/ekairos.git",
|
|
19
|
+
"directory": "packages/tasks"
|
|
20
|
+
},
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"import": "./dist/index.js",
|
|
25
|
+
"default": "./dist/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./domain": {
|
|
28
|
+
"types": "./dist/domain.d.ts",
|
|
29
|
+
"import": "./dist/domain.js",
|
|
30
|
+
"default": "./dist/domain.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc -p tsconfig.json",
|
|
35
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
36
|
+
"clean": "node -e \"require('fs').rmSync('dist', {recursive:true, force:true})\"",
|
|
37
|
+
"typecheck": "tsc --noEmit",
|
|
38
|
+
"typecheck:tests": "tsc --noEmit -p tsconfig.typecheck.json",
|
|
39
|
+
"test": "vitest run -c vitest.config.mts",
|
|
40
|
+
"test:workflow": "vitest run -c vitest.workflow.config.mts"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@ekairos/domain": "^1.22.83-beta.development.0",
|
|
44
|
+
"@instantdb/core": "0.22.142",
|
|
45
|
+
"ajv": "^8.17.1",
|
|
46
|
+
"workflow": "5.0.0-beta.5",
|
|
47
|
+
"zod": "^4.3.6"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@ekairos/tsconfig": "workspace:*",
|
|
51
|
+
"@types/node": "^24.5.0",
|
|
52
|
+
"@workflow/serde": "5.0.0-beta.1",
|
|
53
|
+
"@workflow/vitest": "5.0.0-beta.5",
|
|
54
|
+
"typescript": "^5.9.2",
|
|
55
|
+
"vitest": "^4.0.8"
|
|
56
|
+
}
|
|
57
|
+
}
|