@hatchet-dev/typescript-sdk 1.9.4 → 1.9.6
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/clients/admin/admin-client.d.ts +3 -3
- package/clients/dispatcher/action-listener.d.ts +1 -0
- package/clients/dispatcher/action-listener.js +16 -0
- package/clients/listeners/durable-listener/pooled-durable-listener-client.js +3 -3
- package/clients/rest/generated/Api.d.ts +124 -124
- package/clients/worker/worker.d.ts +1 -1
- package/package.json +1 -1
- package/v1/client/features/runs.d.ts +2 -2
- package/v1/client/worker/worker-internal.d.ts +1 -1
- package/v1/client/worker/worker-internal.js +6 -2
- package/v1/client/worker/worker.d.ts +1 -1
- package/v1/declaration.d.ts +1 -1
- package/v1/examples/affinity/affinity-workers.d.ts +1 -0
- package/v1/examples/affinity/affinity-workers.js +89 -0
- package/v1/examples/child_workflows/workflow.d.ts +6 -0
- package/v1/examples/child_workflows/workflow.js +31 -1
- package/v1/examples/dag/run.js +2 -0
- package/v1/examples/dag/workflow.js +18 -1
- package/v1/examples/hatchet-client.js +2 -0
- package/v1/examples/logging/byo-logger.d.ts +1 -0
- package/v1/examples/logging/byo-logger.js +73 -0
- package/v1/examples/logging/logger.d.ts +1 -0
- package/v1/examples/logging/logger.js +46 -0
- package/v1/examples/on_event/event.js +26 -0
- package/v1/examples/simple/replay-cancel.d.ts +1 -0
- package/v1/examples/simple/replay-cancel.js +34 -0
- package/v1/examples/simple/run.js +9 -0
- package/v1/examples/simple/typed-run-methods.d.ts +1 -0
- package/v1/examples/simple/typed-run-methods.js +37 -0
- package/v1/examples/with_timeouts/workflow.js +0 -1
- package/v1/task.d.ts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
|
@@ -59,7 +59,7 @@ export declare class AdminClient {
|
|
|
59
59
|
* @deprecated use hatchet.ratelimits.upsert instead
|
|
60
60
|
*/
|
|
61
61
|
putRateLimit(key: string, limit: number, duration?: RateLimitDuration): Promise<void>;
|
|
62
|
-
registerWebhook(data: WebhookWorkerCreateRequest): Promise<import("axios").AxiosResponse<import("../rest/generated/data-contracts").WebhookWorkerCreated, any>>;
|
|
62
|
+
registerWebhook(data: WebhookWorkerCreateRequest): Promise<import("axios").AxiosResponse<import("../rest/generated/data-contracts").WebhookWorkerCreated, any, {}>>;
|
|
63
63
|
/**
|
|
64
64
|
* @deprecated use runWorkflow instead
|
|
65
65
|
*/
|
|
@@ -195,7 +195,7 @@ export declare class AdminClient {
|
|
|
195
195
|
/**
|
|
196
196
|
* @deprecated use getWorkflowMetrics instead
|
|
197
197
|
*/
|
|
198
|
-
get_workflow_metrics(data: WorkflowMetricsQuery): Promise<import("axios").AxiosResponse<import("../rest/generated/data-contracts").WorkflowMetrics, any>>;
|
|
198
|
+
get_workflow_metrics(data: WorkflowMetricsQuery): Promise<import("axios").AxiosResponse<import("../rest/generated/data-contracts").WorkflowMetrics, any, {}>>;
|
|
199
199
|
/**
|
|
200
200
|
* Get the metrics for a workflow.
|
|
201
201
|
*
|
|
@@ -203,6 +203,6 @@ export declare class AdminClient {
|
|
|
203
203
|
* @param workflowName the name of the workflow to get metrics for
|
|
204
204
|
* @param query an object containing query parameters to filter the metrics
|
|
205
205
|
*/
|
|
206
|
-
getWorkflowMetrics({ workflowId, workflowName, status, groupKey }: WorkflowMetricsQuery): Promise<import("axios").AxiosResponse<import("../rest/generated/data-contracts").WorkflowMetrics, any>>;
|
|
206
|
+
getWorkflowMetrics({ workflowId, workflowName, status, groupKey }: WorkflowMetricsQuery): Promise<import("axios").AxiosResponse<import("../rest/generated/data-contracts").WorkflowMetrics, any, {}>>;
|
|
207
207
|
}
|
|
208
208
|
export {};
|
|
@@ -23,6 +23,7 @@ export declare class ActionListener {
|
|
|
23
23
|
done: boolean;
|
|
24
24
|
listenStrategy: ListenStrategy;
|
|
25
25
|
heartbeat: Heartbeat;
|
|
26
|
+
abortController?: AbortController;
|
|
26
27
|
constructor(client: DispatcherClient, workerId: string, retryInterval?: number, retryCount?: number);
|
|
27
28
|
actions: () => AsyncGenerator<Action, void, unknown>;
|
|
28
29
|
setListenStrategy(strategy: ListenStrategy): Promise<void>;
|
|
@@ -36,6 +36,7 @@ exports.ActionListener = void 0;
|
|
|
36
36
|
exports.createActionKey = createActionKey;
|
|
37
37
|
const dispatcher_1 = require("../../protoc/dispatcher");
|
|
38
38
|
const nice_grpc_1 = require("nice-grpc");
|
|
39
|
+
const abort_controller_x_1 = require("abort-controller-x");
|
|
39
40
|
const sleep_1 = __importDefault(require("../../util/sleep"));
|
|
40
41
|
const hatchet_error_1 = __importDefault(require("../../util/errors/hatchet-error"));
|
|
41
42
|
const heartbeat_controller_1 = require("./heartbeat/heartbeat-controller");
|
|
@@ -96,6 +97,11 @@ class ActionListener {
|
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
99
|
catch (e) {
|
|
100
|
+
// If the stream was aborted (e.g., during worker shutdown), exit gracefully
|
|
101
|
+
if ((0, abort_controller_x_1.isAbortError)(e)) {
|
|
102
|
+
client.logger.info('Listener aborted, exiting generator');
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
99
105
|
client.logger.info('Listener error');
|
|
100
106
|
// if this is a HatchetError, we should throw this error
|
|
101
107
|
if (e instanceof hatchet_error_1.default) {
|
|
@@ -157,15 +163,21 @@ class ActionListener {
|
|
|
157
163
|
yield (0, sleep_1.default)(DEFAULT_ACTION_LISTENER_RETRY_INTERVAL);
|
|
158
164
|
}
|
|
159
165
|
try {
|
|
166
|
+
// Create a new AbortController for this connection
|
|
167
|
+
this.abortController = new AbortController();
|
|
160
168
|
if (this.listenStrategy === ListenStrategy.LISTEN_STRATEGY_V1) {
|
|
161
169
|
const result = this.client.listen({
|
|
162
170
|
workerId: this.workerId,
|
|
171
|
+
}, {
|
|
172
|
+
signal: this.abortController.signal,
|
|
163
173
|
});
|
|
164
174
|
this.logger.green('Connection established using LISTEN_STRATEGY_V1');
|
|
165
175
|
return result;
|
|
166
176
|
}
|
|
167
177
|
const res = this.client.listenV2({
|
|
168
178
|
workerId: this.workerId,
|
|
179
|
+
}, {
|
|
180
|
+
signal: this.abortController.signal,
|
|
169
181
|
});
|
|
170
182
|
yield this.heartbeat.start();
|
|
171
183
|
this.logger.green('Connection established using LISTEN_STRATEGY_V2');
|
|
@@ -187,6 +199,10 @@ class ActionListener {
|
|
|
187
199
|
return __awaiter(this, void 0, void 0, function* () {
|
|
188
200
|
this.done = true;
|
|
189
201
|
this.heartbeat.stop();
|
|
202
|
+
// Abort the gRPC stream to immediately cancel the generator
|
|
203
|
+
if (this.abortController) {
|
|
204
|
+
this.abortController.abort('Worker stopping');
|
|
205
|
+
}
|
|
190
206
|
try {
|
|
191
207
|
return yield this.client.unsubscribe({
|
|
192
208
|
workerId: this.workerId,
|
|
@@ -193,7 +193,7 @@ class DurableEventGrpcPooledListener {
|
|
|
193
193
|
const subscriptionEntries = Object.entries(this.taskSignalKeyToSubscriptionIds);
|
|
194
194
|
this.client.logger.debug(`Replaying ${subscriptionEntries.length} requests...`);
|
|
195
195
|
for (const [key, _] of subscriptionEntries) {
|
|
196
|
-
const [taskId, signalKey] = key.split('
|
|
196
|
+
const [taskId, signalKey] = key.split('|');
|
|
197
197
|
this.requestEmitter.emit('subscribe', { taskId, signalKey });
|
|
198
198
|
}
|
|
199
199
|
}
|
|
@@ -205,7 +205,7 @@ class DurableEventGrpcPooledListener {
|
|
|
205
205
|
const existingSubscriptions = new Set();
|
|
206
206
|
for (const key in this.taskSignalKeyToSubscriptionIds) {
|
|
207
207
|
if (this.taskSignalKeyToSubscriptionIds[key].length > 0) {
|
|
208
|
-
const [taskId, signalKey] = key.split('
|
|
208
|
+
const [taskId, signalKey] = key.split('|');
|
|
209
209
|
existingSubscriptions.add(key);
|
|
210
210
|
yield yield __await({ taskId, signalKey });
|
|
211
211
|
}
|
|
@@ -238,4 +238,4 @@ class DurableEventGrpcPooledListener {
|
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
240
|
exports.DurableEventGrpcPooledListener = DurableEventGrpcPooledListener;
|
|
241
|
-
const keyHelper = (taskId, signalKey) => `${taskId}
|
|
241
|
+
const keyHelper = (taskId, signalKey) => `${taskId}|${signalKey}`;
|