@flowrensic/node 0.6.20 → 0.6.21
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 +35 -2
- package/dist/cjs/client-interceptor.d.ts +19 -8
- package/dist/cjs/client-interceptor.d.ts.map +1 -1
- package/dist/cjs/client-interceptor.js +47 -23
- package/dist/cjs/client-interceptor.js.map +1 -1
- package/dist/cjs/client.d.ts +3 -1
- package/dist/cjs/client.d.ts.map +1 -1
- package/dist/cjs/client.js +2 -0
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/gen/flowrensic/v1/client_calls_pb.d.ts +87 -3
- package/dist/cjs/gen/flowrensic/v1/client_calls_pb.d.ts.map +1 -1
- package/dist/cjs/gen/flowrensic/v1/client_calls_pb.js +17 -2
- package/dist/cjs/gen/flowrensic/v1/client_calls_pb.js.map +1 -1
- package/dist/cjs/gen/flowrensic/v1/remediation_pb.d.ts +317 -0
- package/dist/cjs/gen/flowrensic/v1/remediation_pb.d.ts.map +1 -0
- package/dist/cjs/gen/flowrensic/v1/remediation_pb.js +97 -0
- package/dist/cjs/gen/flowrensic/v1/remediation_pb.js.map +1 -0
- package/dist/cjs/gen/flowrensic/v1/replay_pb.d.ts +94 -0
- package/dist/cjs/gen/flowrensic/v1/replay_pb.d.ts.map +1 -1
- package/dist/cjs/gen/flowrensic/v1/replay_pb.js +17 -2
- package/dist/cjs/gen/flowrensic/v1/replay_pb.js.map +1 -1
- package/dist/cjs/gen/flowrensic/v1/reset_pb.d.ts +154 -0
- package/dist/cjs/gen/flowrensic/v1/reset_pb.d.ts.map +1 -0
- package/dist/cjs/gen/flowrensic/v1/reset_pb.js +78 -0
- package/dist/cjs/gen/flowrensic/v1/reset_pb.js.map +1 -0
- package/dist/cjs/gen/flowrensic/v1/services_pb.d.ts +100 -2
- package/dist/cjs/gen/flowrensic/v1/services_pb.d.ts.map +1 -1
- package/dist/cjs/gen/flowrensic/v1/services_pb.js +19 -2
- package/dist/cjs/gen/flowrensic/v1/services_pb.js.map +1 -1
- package/dist/cjs/gen/flowrensic/v1/workflow_types_pb.d.ts +279 -0
- package/dist/cjs/gen/flowrensic/v1/workflow_types_pb.d.ts.map +1 -0
- package/dist/cjs/gen/flowrensic/v1/workflow_types_pb.js +50 -0
- package/dist/cjs/gen/flowrensic/v1/workflow_types_pb.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +7 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/query-sink.d.ts +33 -0
- package/dist/cjs/query-sink.d.ts.map +1 -0
- package/dist/cjs/query-sink.js +59 -0
- package/dist/cjs/query-sink.js.map +1 -0
- package/dist/cjs/sink.d.ts +26 -11
- package/dist/cjs/sink.d.ts.map +1 -1
- package/dist/cjs/sink.js +87 -32
- package/dist/cjs/sink.js.map +1 -1
- package/dist/cjs/workflow.d.ts +11 -0
- package/dist/cjs/workflow.d.ts.map +1 -0
- package/dist/cjs/workflow.js +25 -0
- package/dist/cjs/workflow.js.map +1 -0
- package/dist/esm/client-interceptor.d.ts +19 -8
- package/dist/esm/client-interceptor.d.ts.map +1 -1
- package/dist/esm/client-interceptor.js +47 -23
- package/dist/esm/client-interceptor.js.map +1 -1
- package/dist/esm/client.d.ts +3 -1
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +3 -1
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/gen/flowrensic/v1/client_calls_pb.d.ts +87 -3
- package/dist/esm/gen/flowrensic/v1/client_calls_pb.d.ts.map +1 -1
- package/dist/esm/gen/flowrensic/v1/client_calls_pb.js +16 -1
- package/dist/esm/gen/flowrensic/v1/client_calls_pb.js.map +1 -1
- package/dist/esm/gen/flowrensic/v1/remediation_pb.d.ts +317 -0
- package/dist/esm/gen/flowrensic/v1/remediation_pb.d.ts.map +1 -0
- package/dist/esm/gen/flowrensic/v1/remediation_pb.js +94 -0
- package/dist/esm/gen/flowrensic/v1/remediation_pb.js.map +1 -0
- package/dist/esm/gen/flowrensic/v1/replay_pb.d.ts +94 -0
- package/dist/esm/gen/flowrensic/v1/replay_pb.d.ts.map +1 -1
- package/dist/esm/gen/flowrensic/v1/replay_pb.js +16 -1
- package/dist/esm/gen/flowrensic/v1/replay_pb.js.map +1 -1
- package/dist/esm/gen/flowrensic/v1/reset_pb.d.ts +154 -0
- package/dist/esm/gen/flowrensic/v1/reset_pb.d.ts.map +1 -0
- package/dist/esm/gen/flowrensic/v1/reset_pb.js +75 -0
- package/dist/esm/gen/flowrensic/v1/reset_pb.js.map +1 -0
- package/dist/esm/gen/flowrensic/v1/services_pb.d.ts +100 -2
- package/dist/esm/gen/flowrensic/v1/services_pb.d.ts.map +1 -1
- package/dist/esm/gen/flowrensic/v1/services_pb.js +18 -1
- package/dist/esm/gen/flowrensic/v1/services_pb.js.map +1 -1
- package/dist/esm/gen/flowrensic/v1/workflow_types_pb.d.ts +279 -0
- package/dist/esm/gen/flowrensic/v1/workflow_types_pb.d.ts.map +1 -0
- package/dist/esm/gen/flowrensic/v1/workflow_types_pb.js +47 -0
- package/dist/esm/gen/flowrensic/v1/workflow_types_pb.js.map +1 -0
- package/dist/esm/index.d.ts +8 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/query-sink.d.ts +33 -0
- package/dist/esm/query-sink.d.ts.map +1 -0
- package/dist/esm/query-sink.js +56 -0
- package/dist/esm/query-sink.js.map +1 -0
- package/dist/esm/sink.d.ts +26 -11
- package/dist/esm/sink.d.ts.map +1 -1
- package/dist/esm/sink.js +86 -32
- package/dist/esm/sink.js.map +1 -1
- package/dist/esm/workflow.d.ts +11 -0
- package/dist/esm/workflow.d.ts.map +1 -0
- package/dist/esm/workflow.js +21 -0
- package/dist/esm/workflow.js.map +1 -0
- package/package.json +15 -3
package/dist/esm/sink.js
CHANGED
|
@@ -10,15 +10,15 @@ function add(counts, env, n) {
|
|
|
10
10
|
else
|
|
11
11
|
counts.set(env, now);
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
// The waiting
|
|
13
|
+
/** True when Flowrensic did not answer or answered try again later, so the batch is sent again. */
|
|
14
|
+
function sendAgain(error) {
|
|
15
|
+
if (!(error instanceof ConnectError))
|
|
16
|
+
return false;
|
|
17
|
+
return error.code === Code.Unavailable || error.code === Code.DeadlineExceeded || error.code === Code.ResourceExhausted;
|
|
18
|
+
}
|
|
19
|
+
export function createRecordBuffer(target, options = {}) {
|
|
20
|
+
const { batchSize = 64, flushIntervalMs = 1000, sendTimeoutMs = 5000, maxWaiting = 10_000, maxBatchSize = 500, } = options;
|
|
21
|
+
// The waiting records, oldest first, from head on.
|
|
22
22
|
let queue = [];
|
|
23
23
|
let head = 0;
|
|
24
24
|
const waitingByEnv = new Map();
|
|
@@ -32,6 +32,9 @@ export function createAttemptSink(options) {
|
|
|
32
32
|
let sending;
|
|
33
33
|
let reporting;
|
|
34
34
|
let scheduled = false;
|
|
35
|
+
// Set while the last send went back to waiting. Until a send is answered,
|
|
36
|
+
// only the tick starts one.
|
|
37
|
+
let failing = false;
|
|
35
38
|
const waitingCount = () => queue.length - head;
|
|
36
39
|
const drop = (env, n) => {
|
|
37
40
|
add(dropped, env, n);
|
|
@@ -45,7 +48,7 @@ export function createAttemptSink(options) {
|
|
|
45
48
|
head += 1;
|
|
46
49
|
if (one === undefined)
|
|
47
50
|
continue;
|
|
48
|
-
add(waitingByEnv, one
|
|
51
|
+
add(waitingByEnv, target.envOf(one), -1);
|
|
49
52
|
out.push(one);
|
|
50
53
|
}
|
|
51
54
|
return out;
|
|
@@ -58,37 +61,61 @@ export function createAttemptSink(options) {
|
|
|
58
61
|
head = 0;
|
|
59
62
|
}
|
|
60
63
|
};
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
const dropOldest = () => {
|
|
65
|
+
const excess = waitingCount() - maxWaiting;
|
|
66
|
+
if (excess <= 0)
|
|
67
|
+
return;
|
|
68
|
+
for (const one of take(excess))
|
|
69
|
+
drop(target.envOf(one), 1);
|
|
70
|
+
};
|
|
71
|
+
// A batch with no answer goes back in front of the waiting records, oldest
|
|
72
|
+
// first.
|
|
73
|
+
const putBack = (records) => {
|
|
74
|
+
queue = [...records, ...queue.slice(head)];
|
|
75
|
+
head = 0;
|
|
76
|
+
for (const one of records)
|
|
77
|
+
add(waitingByEnv, target.envOf(one), 1);
|
|
78
|
+
dropOldest();
|
|
79
|
+
};
|
|
80
|
+
// One send at a time. Once it is answered the next starts right away while
|
|
81
|
+
// records wait. A send with no answer, or answered try again later, goes
|
|
82
|
+
// back and is tried again at the next tick. A send refused for any other
|
|
83
|
+
// reason is dropped.
|
|
63
84
|
const startSend = () => {
|
|
64
85
|
if (sending !== undefined || waitingCount() === 0)
|
|
65
86
|
return;
|
|
66
|
-
const
|
|
87
|
+
const records = take(Math.min(maxBatchSize, waitingCount()));
|
|
67
88
|
compact();
|
|
68
89
|
sending = (async () => {
|
|
69
90
|
try {
|
|
70
|
-
await
|
|
91
|
+
await target.send(records, sendTimeoutMs);
|
|
92
|
+
failing = false;
|
|
71
93
|
}
|
|
72
94
|
catch (error) {
|
|
73
|
-
const envs = new Set();
|
|
74
|
-
for (const one of events) {
|
|
75
|
-
drop(one.env, 1);
|
|
76
|
-
envs.add(one.env);
|
|
77
|
-
}
|
|
95
|
+
const envs = new Set(records.map((one) => target.envOf(one)));
|
|
78
96
|
if (error instanceof ConnectError && error.code === Code.DeadlineExceeded) {
|
|
79
97
|
for (const env of envs)
|
|
80
98
|
add(timedOut, env, 1);
|
|
81
99
|
timedOutTotal += 1;
|
|
82
100
|
}
|
|
101
|
+
if (sendAgain(error)) {
|
|
102
|
+
failing = true;
|
|
103
|
+
putBack(records);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
for (const one of records)
|
|
107
|
+
drop(target.envOf(one), 1);
|
|
108
|
+
}
|
|
83
109
|
}
|
|
84
110
|
finally {
|
|
85
111
|
sending = undefined;
|
|
86
|
-
|
|
112
|
+
if (!failing)
|
|
113
|
+
startSend();
|
|
87
114
|
}
|
|
88
115
|
})();
|
|
89
116
|
};
|
|
90
117
|
const schedule = () => {
|
|
91
|
-
if (scheduled || sending !== undefined)
|
|
118
|
+
if (scheduled || failing || sending !== undefined)
|
|
92
119
|
return;
|
|
93
120
|
scheduled = true;
|
|
94
121
|
setImmediate(() => {
|
|
@@ -99,7 +126,8 @@ export function createAttemptSink(options) {
|
|
|
99
126
|
// At most one report at a time, and only when a count changed since the
|
|
100
127
|
// last report that was answered.
|
|
101
128
|
const report = () => {
|
|
102
|
-
|
|
129
|
+
const sendReport = target.report?.bind(target);
|
|
130
|
+
if (sendReport === undefined || reporting !== undefined)
|
|
103
131
|
return;
|
|
104
132
|
const envs = new Set([...dropped.keys(), ...timedOut.keys(), ...waitingByEnv.keys(), ...reportedWaiting.keys()]);
|
|
105
133
|
const changed = [...envs].some((env) => dropped.has(env) || timedOut.has(env) || (waitingByEnv.get(env) ?? 0) !== (reportedWaiting.get(env) ?? 0));
|
|
@@ -117,7 +145,7 @@ export function createAttemptSink(options) {
|
|
|
117
145
|
}));
|
|
118
146
|
reporting = (async () => {
|
|
119
147
|
try {
|
|
120
|
-
await
|
|
148
|
+
await sendReport(reports, sendTimeoutMs);
|
|
121
149
|
for (const [env, n] of sentDropped)
|
|
122
150
|
add(dropped, env, -n);
|
|
123
151
|
for (const [env, n] of sentTimedOut)
|
|
@@ -137,12 +165,18 @@ export function createAttemptSink(options) {
|
|
|
137
165
|
report();
|
|
138
166
|
}, flushIntervalMs);
|
|
139
167
|
timer.unref();
|
|
168
|
+
// Sends what waits. A send that goes back ends it, after one more try when
|
|
169
|
+
// the sends were already going back.
|
|
140
170
|
const flush = async () => {
|
|
171
|
+
let tried = false;
|
|
141
172
|
for (;;) {
|
|
142
173
|
if (sending !== undefined)
|
|
143
174
|
await sending;
|
|
144
|
-
else if (waitingCount() > 0)
|
|
175
|
+
else if (waitingCount() > 0 && (!failing || !tried)) {
|
|
176
|
+
tried = true;
|
|
177
|
+
failing = false;
|
|
145
178
|
startSend();
|
|
179
|
+
}
|
|
146
180
|
else
|
|
147
181
|
break;
|
|
148
182
|
}
|
|
@@ -153,14 +187,10 @@ export function createAttemptSink(options) {
|
|
|
153
187
|
await reporting;
|
|
154
188
|
};
|
|
155
189
|
return {
|
|
156
|
-
record(
|
|
157
|
-
queue.push(
|
|
158
|
-
add(waitingByEnv,
|
|
159
|
-
|
|
160
|
-
const [oldest] = take(1);
|
|
161
|
-
if (oldest !== undefined)
|
|
162
|
-
drop(oldest.env, 1);
|
|
163
|
-
}
|
|
190
|
+
record(one) {
|
|
191
|
+
queue.push(one);
|
|
192
|
+
add(waitingByEnv, target.envOf(one), 1);
|
|
193
|
+
dropOldest();
|
|
164
194
|
if (waitingCount() >= batchSize)
|
|
165
195
|
schedule();
|
|
166
196
|
},
|
|
@@ -168,10 +198,34 @@ export function createAttemptSink(options) {
|
|
|
168
198
|
async close() {
|
|
169
199
|
clearInterval(timer);
|
|
170
200
|
await flush();
|
|
201
|
+
// What still waits will not be sent.
|
|
202
|
+
for (const one of take(waitingCount()))
|
|
203
|
+
drop(target.envOf(one), 1);
|
|
204
|
+
compact();
|
|
205
|
+
report();
|
|
206
|
+
if (reporting !== undefined)
|
|
207
|
+
await reporting;
|
|
171
208
|
},
|
|
172
209
|
counts() {
|
|
173
210
|
return { dropped: droppedTotal, timedOut: timedOutTotal, waiting: waitingCount() };
|
|
174
211
|
},
|
|
175
212
|
};
|
|
176
213
|
}
|
|
214
|
+
export function createAttemptSink(options) {
|
|
215
|
+
const workerId = options.workerId ?? `${hostname()}-${String(process.pid)}`;
|
|
216
|
+
const ingest = createClient(IngestService, createConnectTransport({
|
|
217
|
+
baseUrl: options.baseUrl,
|
|
218
|
+
httpVersion: '1.1',
|
|
219
|
+
interceptors: options.envKey === undefined ? [] : [envKeyInterceptor(options.envKey)],
|
|
220
|
+
}));
|
|
221
|
+
return createRecordBuffer({
|
|
222
|
+
async send(events, timeoutMs) {
|
|
223
|
+
await ingest.ingestActivityEvents({ events, workerId }, { timeoutMs });
|
|
224
|
+
},
|
|
225
|
+
envOf: (one) => one.env,
|
|
226
|
+
async report(reports, timeoutMs) {
|
|
227
|
+
await ingest.ingestActivityEvents({ workerId, reports }, { timeoutMs });
|
|
228
|
+
},
|
|
229
|
+
}, options);
|
|
230
|
+
}
|
|
177
231
|
//# sourceMappingURL=sink.js.map
|
package/dist/esm/sink.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../../src/sink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../../src/sink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Sinks, type WorkflowInterceptorsFactory } from '@temporalio/workflow';
|
|
2
|
+
/** The sink flowrensicQuerySinks fills in on the worker. */
|
|
3
|
+
export interface FlowrensicSinks extends Sinks {
|
|
4
|
+
flowrensic: {
|
|
5
|
+
/** One query the workflow answered, ok when the handler returned. */
|
|
6
|
+
query(name: string, ok: boolean): void;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
/** Tells the sink about every query a workflow answers. */
|
|
10
|
+
export declare const interceptors: WorkflowInterceptorsFactory;
|
|
11
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,KAAK,EAAE,KAAK,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAKhG,4DAA4D;AAC5D,MAAM,WAAW,eAAgB,SAAQ,KAAK;IAC5C,UAAU,EAAE;QACV,qEAAqE;QACrE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;KACxC,CAAC;CACH;AAID,2DAA2D;AAC3D,eAAO,MAAM,YAAY,EAAE,2BAezB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { proxySinks } from '@temporalio/workflow';
|
|
2
|
+
const { flowrensic } = proxySinks();
|
|
3
|
+
/** Tells the sink about every query a workflow answers. */
|
|
4
|
+
export const interceptors = () => ({
|
|
5
|
+
inbound: [
|
|
6
|
+
{
|
|
7
|
+
async handleQuery(input, next) {
|
|
8
|
+
try {
|
|
9
|
+
const result = await next(input);
|
|
10
|
+
flowrensic.query(input.queryName, true);
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
flowrensic.query(input.queryName, false);
|
|
15
|
+
throw err;
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgD,MAAM,sBAAsB,CAAC;AAahG,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,EAAmB,CAAC;AAErD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAgC,GAAG,EAAE,CAAC,CAAC;IAC9D,OAAO,EAAE;QACP;YACE,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI;gBAC3B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBACxC,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBACzC,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;SACF;KACF;CACF,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowrensic/node",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.21",
|
|
4
4
|
"description": "Replay history fetch and activity interceptor for Temporal workers, for use with Flowrensic.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -14,6 +14,16 @@
|
|
|
14
14
|
"types": "./dist/cjs/index.d.ts",
|
|
15
15
|
"default": "./dist/cjs/index.js"
|
|
16
16
|
}
|
|
17
|
+
},
|
|
18
|
+
"./workflow": {
|
|
19
|
+
"import": {
|
|
20
|
+
"types": "./dist/esm/workflow.d.ts",
|
|
21
|
+
"default": "./dist/esm/workflow.js"
|
|
22
|
+
},
|
|
23
|
+
"require": {
|
|
24
|
+
"types": "./dist/cjs/workflow.d.ts",
|
|
25
|
+
"default": "./dist/cjs/workflow.js"
|
|
26
|
+
}
|
|
17
27
|
}
|
|
18
28
|
},
|
|
19
29
|
"scripts": {
|
|
@@ -30,12 +40,14 @@
|
|
|
30
40
|
"@temporalio/client": ">=1.24",
|
|
31
41
|
"@temporalio/common": ">=1.24",
|
|
32
42
|
"@temporalio/proto": ">=1.24",
|
|
33
|
-
"@temporalio/worker": ">=1.24"
|
|
43
|
+
"@temporalio/worker": ">=1.24",
|
|
44
|
+
"@temporalio/workflow": ">=1.24"
|
|
34
45
|
},
|
|
35
46
|
"devDependencies": {
|
|
36
47
|
"@temporalio/proto": "^1.24.0",
|
|
37
48
|
"@types/node": "^26.6.4",
|
|
38
|
-
"typescript": "^7.0.2"
|
|
49
|
+
"typescript": "^7.0.2",
|
|
50
|
+
"@temporalio/workflow": "^1.24.0"
|
|
39
51
|
},
|
|
40
52
|
"license": "Apache-2.0",
|
|
41
53
|
"repository": {
|