@temporal-contract/worker 0.0.7 → 0.1.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 CHANGED
@@ -14,43 +14,50 @@ pnpm add @temporal-contract/worker @temporal-contract/contract @temporalio/workf
14
14
 
15
15
  ```typescript
16
16
  // activities.ts
17
- import { declareActivitiesHandler } from '@temporal-contract/worker/activity';
17
+ import { declareActivitiesHandler, ActivityError } from "@temporal-contract/worker/activity";
18
+ import { Future, Result } from "@swan-io/boxed";
18
19
 
19
20
  export const activities = declareActivitiesHandler({
20
21
  contract: myContract,
21
22
  activities: {
22
- sendEmail: async ({ to, body }) => ({ sent: true })
23
- }
23
+ sendEmail: ({ to, body }) => {
24
+ return Future.fromPromise(emailService.send({ to, body }))
25
+ .mapError(
26
+ (error) =>
27
+ new ActivityError(
28
+ "EMAIL_FAILED",
29
+ error instanceof Error ? error.message : "Failed to send email",
30
+ error,
31
+ ),
32
+ )
33
+ .mapOk(() => ({ sent: true }));
34
+ },
35
+ },
24
36
  });
25
37
 
26
38
  // workflows.ts
27
- import { declareWorkflow } from '@temporal-contract/worker/workflow';
39
+ import { declareWorkflow } from "@temporal-contract/worker/workflow";
28
40
 
29
41
  export const processOrder = declareWorkflow({
30
- workflowName: 'processOrder',
42
+ workflowName: "processOrder",
31
43
  contract: myContract,
32
- implementation: async (context, input) => {
33
- await context.activities.sendEmail({ to: 'user@example.com', body: 'Done!' });
44
+ implementation: async ({ activities }, input) => {
45
+ // Activities return plain values (Result is unwrapped internally)
46
+ await activities.sendEmail({ to: "user@example.com", body: "Done!" });
34
47
  return { success: true };
35
- }
48
+ },
36
49
  });
37
50
 
38
51
  // worker.ts
39
- import { NativeConnection } from '@temporalio/worker';
40
- import { createWorker } from '@temporal-contract/worker/worker';
41
- import { activities } from './activities';
42
- import myContract from './contract';
52
+ import { Worker } from "@temporalio/worker";
53
+ import { activities } from "./activities";
54
+ import myContract from "./contract";
43
55
 
44
56
  async function run() {
45
- const connection = await NativeConnection.connect({
46
- address: 'localhost:7233',
47
- });
48
-
49
- const worker = await createWorker({
50
- contract: myContract,
51
- connection,
52
- workflowsPath: require.resolve('./workflows'),
57
+ const worker = await Worker.create({
58
+ workflowsPath: require.resolve("./workflows"),
53
59
  activities,
60
+ taskQueue: myContract.taskQueue,
54
61
  });
55
62
 
56
63
  await worker.run();
@@ -65,33 +72,37 @@ Execute child workflows with type-safe Future/Result pattern. Supports both same
65
72
 
66
73
  ```typescript
67
74
  // workflows.ts
68
- import { declareWorkflow } from '@temporal-contract/worker/workflow';
75
+ import { declareWorkflow } from "@temporal-contract/worker/workflow";
69
76
 
70
77
  export const parentWorkflow = declareWorkflow({
71
- workflowName: 'parentWorkflow',
78
+ workflowName: "parentWorkflow",
72
79
  contract: myContract,
73
- implementation: async (context, input) => {
80
+ implementation: async ({ executeChildWorkflow }, input) => {
74
81
  // Execute child workflow from same contract and wait for result
75
- const childResult = await context.executeChildWorkflow(myContract, 'processPayment', {
82
+ const childResult = await executeChildWorkflow(myContract, "processPayment", {
76
83
  workflowId: `payment-${input.orderId}`,
77
- args: { amount: input.totalAmount }
84
+ args: { amount: input.totalAmount },
78
85
  });
79
86
 
80
87
  childResult.match({
81
- Ok: (output) => console.log('Payment processed:', output),
82
- Error: (error) => console.error('Payment failed:', error),
88
+ Ok: (output) => console.log("Payment processed:", output),
89
+ Error: (error) => console.error("Payment failed:", error),
83
90
  });
84
91
 
85
92
  // Execute child workflow from another contract (another worker)
86
- const notificationResult = await context.executeChildWorkflow(notificationContract, 'sendNotification', {
87
- workflowId: `notification-${input.orderId}`,
88
- args: { message: 'Order received' }
89
- });
93
+ const notificationResult = await executeChildWorkflow(
94
+ notificationContract,
95
+ "sendNotification",
96
+ {
97
+ workflowId: `notification-${input.orderId}`,
98
+ args: { message: "Order received" },
99
+ },
100
+ );
90
101
 
91
102
  // Or start child workflow without waiting
92
- const handleResult = await context.startChildWorkflow(myContract, 'sendEmail', {
103
+ const handleResult = await startChildWorkflow(myContract, "sendEmail", {
93
104
  workflowId: `email-${input.orderId}`,
94
- args: { to: 'user@example.com', body: 'Order received' }
105
+ args: { to: "user@example.com", body: "Order received" },
95
106
  });
96
107
 
97
108
  handleResult.match({
@@ -100,11 +111,11 @@ export const parentWorkflow = declareWorkflow({
100
111
  const result = await handle.result();
101
112
  // ...
102
113
  },
103
- Error: (error) => console.error('Failed to start:', error),
114
+ Error: (error) => console.error("Failed to start:", error),
104
115
  });
105
116
 
106
117
  return { success: true };
107
- }
118
+ },
108
119
  });
109
120
  ```
110
121
 
@@ -1,9 +1,8 @@
1
- import { g as WorkerInferOutput, h as WorkerInferInput } from "./errors-BqYWpdvd.cjs";
1
+ import { g as WorkerInferOutput, h as WorkerInferInput } from "./errors-CXpHOFmk.cjs";
2
2
  import { ActivityDefinition, ContractDefinition } from "@temporal-contract/contract";
3
3
  import { Future, Result } from "@swan-io/boxed";
4
4
 
5
5
  //#region src/activity-utils.d.ts
6
-
7
6
  /**
8
7
  * Extract activity definitions for a specific workflow from a contract
9
8
  *
@@ -1,9 +1,8 @@
1
- import { g as WorkerInferOutput, h as WorkerInferInput } from "./errors-C1RFkCuD.mjs";
1
+ import { g as WorkerInferOutput, h as WorkerInferInput } from "./errors-Vr-sKdW7.mjs";
2
2
  import { ActivityDefinition, ContractDefinition } from "@temporal-contract/contract";
3
3
  import { Future, Result } from "@swan-io/boxed";
4
4
 
5
5
  //#region src/activity-utils.d.ts
6
-
7
6
  /**
8
7
  * Extract activity definitions for a specific workflow from a contract
9
8
  *
@@ -1,3 +1,3 @@
1
- import { n as ActivityInputValidationError, r as ActivityOutputValidationError, t as ActivityDefinitionNotFoundError } from "./errors-BqYWpdvd.cjs";
2
- import { a as getWorkflowActivityNames, i as getWorkflowActivities, n as ActivityError, o as getWorkflowNames, r as declareActivitiesHandler, s as isWorkflowActivity, t as ActivitiesHandler } from "./activity-Csptpwgf.cjs";
1
+ import { n as ActivityInputValidationError, r as ActivityOutputValidationError, t as ActivityDefinitionNotFoundError } from "./errors-CXpHOFmk.cjs";
2
+ import { a as getWorkflowActivityNames, i as getWorkflowActivities, n as ActivityError, o as getWorkflowNames, r as declareActivitiesHandler, s as isWorkflowActivity, t as ActivitiesHandler } from "./activity-5pVNjW7l.cjs";
3
3
  export { ActivitiesHandler, ActivityDefinitionNotFoundError, ActivityError, ActivityInputValidationError, ActivityOutputValidationError, declareActivitiesHandler, getWorkflowActivities, getWorkflowActivityNames, getWorkflowNames, isWorkflowActivity };
@@ -1,3 +1,3 @@
1
- import { n as ActivityInputValidationError, r as ActivityOutputValidationError, t as ActivityDefinitionNotFoundError } from "./errors-C1RFkCuD.mjs";
2
- import { a as getWorkflowActivityNames, i as getWorkflowActivities, n as ActivityError, o as getWorkflowNames, r as declareActivitiesHandler, s as isWorkflowActivity, t as ActivitiesHandler } from "./activity-UOnp_bSX.mjs";
1
+ import { n as ActivityInputValidationError, r as ActivityOutputValidationError, t as ActivityDefinitionNotFoundError } from "./errors-Vr-sKdW7.mjs";
2
+ import { a as getWorkflowActivityNames, i as getWorkflowActivities, n as ActivityError, o as getWorkflowNames, r as declareActivitiesHandler, s as isWorkflowActivity, t as ActivitiesHandler } from "./activity-BUEBZ7SL.mjs";
3
3
  export { ActivitiesHandler, ActivityDefinitionNotFoundError, ActivityError, ActivityInputValidationError, ActivityOutputValidationError, declareActivitiesHandler, getWorkflowActivities, getWorkflowActivityNames, getWorkflowNames, isWorkflowActivity };
@@ -2,7 +2,6 @@ import { AnySchema } from "@temporal-contract/contract";
2
2
  import { StandardSchemaV1 } from "@standard-schema/spec";
3
3
 
4
4
  //#region src/types.d.ts
5
-
6
5
  /**
7
6
  * Infer input type from a definition (worker perspective)
8
7
  * Worker receives the output type (after input schema parsing/transformation)
@@ -2,7 +2,6 @@ import { AnySchema } from "@temporal-contract/contract";
2
2
  import { StandardSchemaV1 } from "@standard-schema/spec";
3
3
 
4
4
  //#region src/types.d.ts
5
-
6
5
  /**
7
6
  * Infer input type from a definition (worker perspective)
8
7
  * Worker receives the output type (after input schema parsing/transformation)
package/dist/worker.d.cts CHANGED
@@ -1,9 +1,8 @@
1
- import { t as ActivitiesHandler } from "./activity-Csptpwgf.cjs";
1
+ import { t as ActivitiesHandler } from "./activity-5pVNjW7l.cjs";
2
2
  import { ContractDefinition } from "@temporal-contract/contract";
3
3
  import { Worker, WorkerOptions } from "@temporalio/worker";
4
4
 
5
5
  //#region src/worker.d.ts
6
-
7
6
  /**
8
7
  * Options for creating a Temporal worker
9
8
  */
package/dist/worker.d.mts CHANGED
@@ -1,9 +1,8 @@
1
- import { t as ActivitiesHandler } from "./activity-UOnp_bSX.mjs";
1
+ import { t as ActivitiesHandler } from "./activity-BUEBZ7SL.mjs";
2
2
  import { Worker, WorkerOptions } from "@temporalio/worker";
3
3
  import { ContractDefinition } from "@temporal-contract/contract";
4
4
 
5
5
  //#region src/worker.d.ts
6
-
7
6
  /**
8
7
  * Options for creating a Temporal worker
9
8
  */
@@ -1,10 +1,9 @@
1
- import { a as ChildWorkflowNotFoundError, c as SignalInputValidationError, d as WorkflowInputValidationError, f as WorkflowOutputValidationError, g as WorkerInferOutput, h as WorkerInferInput, i as ChildWorkflowError, l as UpdateInputValidationError, m as ClientInferOutput, n as ActivityInputValidationError, o as QueryInputValidationError, p as ClientInferInput, r as ActivityOutputValidationError, s as QueryOutputValidationError, u as UpdateOutputValidationError } from "./errors-BqYWpdvd.cjs";
1
+ import { a as ChildWorkflowNotFoundError, c as SignalInputValidationError, d as WorkflowInputValidationError, f as WorkflowOutputValidationError, g as WorkerInferOutput, h as WorkerInferInput, i as ChildWorkflowError, l as UpdateInputValidationError, m as ClientInferOutput, n as ActivityInputValidationError, o as QueryInputValidationError, p as ClientInferInput, r as ActivityOutputValidationError, s as QueryOutputValidationError, u as UpdateOutputValidationError } from "./errors-CXpHOFmk.cjs";
2
2
  import { ActivityDefinition, ContractDefinition, QueryDefinition, SignalDefinition, UpdateDefinition, WorkflowDefinition } from "@temporal-contract/contract";
3
3
  import { Future, Result } from "@temporal-contract/boxed";
4
4
  import { ActivityOptions, ChildWorkflowOptions, WorkflowInfo } from "@temporalio/workflow";
5
5
 
6
6
  //#region src/workflow.d.ts
7
-
8
7
  /**
9
8
  * Create a typed workflow implementation with automatic validation
10
9
  *
@@ -158,7 +157,7 @@ interface WorkflowContext<TContract extends ContractDefinition, TWorkflowName ex
158
157
  * }
159
158
  * ```
160
159
  */
161
- defineSignal: <K$1 extends keyof TContract["workflows"][TWorkflowName]["signals"]>(signalName: K$1, handler: SignalHandlerImplementation<TContract["workflows"][TWorkflowName]["signals"][K$1] extends SignalDefinition ? TContract["workflows"][TWorkflowName]["signals"][K$1] : never>) => void;
160
+ defineSignal: <K extends keyof TContract["workflows"][TWorkflowName]["signals"]>(signalName: K, handler: SignalHandlerImplementation<TContract["workflows"][TWorkflowName]["signals"][K] extends SignalDefinition ? TContract["workflows"][TWorkflowName]["signals"][K] : never>) => void;
162
161
  /**
163
162
  * Define a query handler within the workflow implementation
164
163
  * Allows the query handler to access workflow state
@@ -176,7 +175,7 @@ interface WorkflowContext<TContract extends ContractDefinition, TWorkflowName ex
176
175
  * }
177
176
  * ```
178
177
  */
179
- defineQuery: <K$1 extends keyof TContract["workflows"][TWorkflowName]["queries"]>(queryName: K$1, handler: QueryHandlerImplementation<TContract["workflows"][TWorkflowName]["queries"][K$1] extends QueryDefinition ? TContract["workflows"][TWorkflowName]["queries"][K$1] : never>) => void;
178
+ defineQuery: <K extends keyof TContract["workflows"][TWorkflowName]["queries"]>(queryName: K, handler: QueryHandlerImplementation<TContract["workflows"][TWorkflowName]["queries"][K] extends QueryDefinition ? TContract["workflows"][TWorkflowName]["queries"][K] : never>) => void;
180
179
  /**
181
180
  * Define an update handler within the workflow implementation
182
181
  * Allows the update handler to access and modify workflow state
@@ -195,7 +194,7 @@ interface WorkflowContext<TContract extends ContractDefinition, TWorkflowName ex
195
194
  * }
196
195
  * ```
197
196
  */
198
- defineUpdate: <K$1 extends keyof TContract["workflows"][TWorkflowName]["updates"]>(updateName: K$1, handler: UpdateHandlerImplementation<TContract["workflows"][TWorkflowName]["updates"][K$1] extends UpdateDefinition ? TContract["workflows"][TWorkflowName]["updates"][K$1] : never>) => void;
197
+ defineUpdate: <K extends keyof TContract["workflows"][TWorkflowName]["updates"]>(updateName: K, handler: UpdateHandlerImplementation<TContract["workflows"][TWorkflowName]["updates"][K] extends UpdateDefinition ? TContract["workflows"][TWorkflowName]["updates"][K] : never>) => void;
199
198
  /**
200
199
  * Start a child workflow and return a typed handle with Future/Result pattern
201
200
  *
@@ -1,10 +1,9 @@
1
- import { a as ChildWorkflowNotFoundError, c as SignalInputValidationError, d as WorkflowInputValidationError, f as WorkflowOutputValidationError, g as WorkerInferOutput, h as WorkerInferInput, i as ChildWorkflowError, l as UpdateInputValidationError, m as ClientInferOutput, n as ActivityInputValidationError, o as QueryInputValidationError, p as ClientInferInput, r as ActivityOutputValidationError, s as QueryOutputValidationError, u as UpdateOutputValidationError } from "./errors-C1RFkCuD.mjs";
1
+ import { a as ChildWorkflowNotFoundError, c as SignalInputValidationError, d as WorkflowInputValidationError, f as WorkflowOutputValidationError, g as WorkerInferOutput, h as WorkerInferInput, i as ChildWorkflowError, l as UpdateInputValidationError, m as ClientInferOutput, n as ActivityInputValidationError, o as QueryInputValidationError, p as ClientInferInput, r as ActivityOutputValidationError, s as QueryOutputValidationError, u as UpdateOutputValidationError } from "./errors-Vr-sKdW7.mjs";
2
2
  import { Future, Result } from "@temporal-contract/boxed";
3
3
  import { ActivityOptions, ChildWorkflowOptions, WorkflowInfo } from "@temporalio/workflow";
4
4
  import { ActivityDefinition, ContractDefinition, QueryDefinition, SignalDefinition, UpdateDefinition, WorkflowDefinition } from "@temporal-contract/contract";
5
5
 
6
6
  //#region src/workflow.d.ts
7
-
8
7
  /**
9
8
  * Create a typed workflow implementation with automatic validation
10
9
  *
@@ -158,7 +157,7 @@ interface WorkflowContext<TContract extends ContractDefinition, TWorkflowName ex
158
157
  * }
159
158
  * ```
160
159
  */
161
- defineSignal: <K$1 extends keyof TContract["workflows"][TWorkflowName]["signals"]>(signalName: K$1, handler: SignalHandlerImplementation<TContract["workflows"][TWorkflowName]["signals"][K$1] extends SignalDefinition ? TContract["workflows"][TWorkflowName]["signals"][K$1] : never>) => void;
160
+ defineSignal: <K extends keyof TContract["workflows"][TWorkflowName]["signals"]>(signalName: K, handler: SignalHandlerImplementation<TContract["workflows"][TWorkflowName]["signals"][K] extends SignalDefinition ? TContract["workflows"][TWorkflowName]["signals"][K] : never>) => void;
162
161
  /**
163
162
  * Define a query handler within the workflow implementation
164
163
  * Allows the query handler to access workflow state
@@ -176,7 +175,7 @@ interface WorkflowContext<TContract extends ContractDefinition, TWorkflowName ex
176
175
  * }
177
176
  * ```
178
177
  */
179
- defineQuery: <K$1 extends keyof TContract["workflows"][TWorkflowName]["queries"]>(queryName: K$1, handler: QueryHandlerImplementation<TContract["workflows"][TWorkflowName]["queries"][K$1] extends QueryDefinition ? TContract["workflows"][TWorkflowName]["queries"][K$1] : never>) => void;
178
+ defineQuery: <K extends keyof TContract["workflows"][TWorkflowName]["queries"]>(queryName: K, handler: QueryHandlerImplementation<TContract["workflows"][TWorkflowName]["queries"][K] extends QueryDefinition ? TContract["workflows"][TWorkflowName]["queries"][K] : never>) => void;
180
179
  /**
181
180
  * Define an update handler within the workflow implementation
182
181
  * Allows the update handler to access and modify workflow state
@@ -195,7 +194,7 @@ interface WorkflowContext<TContract extends ContractDefinition, TWorkflowName ex
195
194
  * }
196
195
  * ```
197
196
  */
198
- defineUpdate: <K$1 extends keyof TContract["workflows"][TWorkflowName]["updates"]>(updateName: K$1, handler: UpdateHandlerImplementation<TContract["workflows"][TWorkflowName]["updates"][K$1] extends UpdateDefinition ? TContract["workflows"][TWorkflowName]["updates"][K$1] : never>) => void;
197
+ defineUpdate: <K extends keyof TContract["workflows"][TWorkflowName]["updates"]>(updateName: K, handler: UpdateHandlerImplementation<TContract["workflows"][TWorkflowName]["updates"][K] extends UpdateDefinition ? TContract["workflows"][TWorkflowName]["updates"][K] : never>) => void;
199
198
  /**
200
199
  * Start a child workflow and return a typed handle with Future/Result pattern
201
200
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@temporal-contract/worker",
3
- "version": "0.0.7",
3
+ "version": "0.1.0",
4
4
  "description": "Worker utilities with Result/Future pattern for implementing temporal-contract workflows and activities",
5
5
  "keywords": [
6
6
  "contract",
@@ -64,22 +64,23 @@
64
64
  "dependencies": {
65
65
  "@standard-schema/spec": "1.1.0",
66
66
  "@swan-io/boxed": "3.2.1",
67
- "@temporal-contract/boxed": "0.0.7",
68
- "@temporal-contract/contract": "0.0.7"
67
+ "@temporal-contract/boxed": "0.1.0",
68
+ "@temporal-contract/contract": "0.1.0"
69
69
  },
70
70
  "devDependencies": {
71
- "@temporalio/client": "1.14.0",
72
- "@temporalio/worker": "1.14.0",
73
- "@temporalio/workflow": "1.14.0",
74
- "@types/node": "25.0.3",
75
- "@vitest/coverage-v8": "4.0.16",
76
- "tsdown": "0.18.1",
71
+ "@temporalio/client": "1.14.1",
72
+ "@temporalio/worker": "1.14.1",
73
+ "@temporalio/workflow": "1.14.1",
74
+ "@types/node": "25.0.9",
75
+ "@vitest/coverage-v8": "4.0.17",
76
+ "tsdown": "0.20.0-beta.4",
77
77
  "typescript": "5.9.3",
78
- "vitest": "4.0.16",
79
- "zod": "4.2.1",
80
- "@temporal-contract/client": "0.0.7",
81
- "@temporal-contract/testing": "0.0.7",
82
- "@temporal-contract/tsconfig": "0.0.7"
78
+ "vitest": "4.0.17",
79
+ "zod": "4.3.5",
80
+ "@temporal-contract/client": "0.1.0",
81
+ "@temporal-contract/testing": "0.1.0",
82
+ "@temporal-contract/tsconfig": "0.1.0",
83
+ "@temporal-contract/typedoc": "0.1.0"
83
84
  },
84
85
  "peerDependencies": {
85
86
  "@temporalio/worker": "^1",
@@ -87,6 +88,7 @@
87
88
  },
88
89
  "scripts": {
89
90
  "build": "tsdown src/activity.ts src/worker.ts src/workflow.ts --format cjs,esm --dts --clean",
91
+ "build:docs": "typedoc",
90
92
  "dev": "tsdown src/activity.ts src/worker.ts src/workflow.ts --format cjs,esm --dts --watch",
91
93
  "test": "vitest run --project unit",
92
94
  "test:integration": "vitest run --project integration",