@flowrensic/node 0.6.20 → 0.6.22

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.
Files changed (106) hide show
  1. package/README.md +35 -2
  2. package/dist/cjs/client-interceptor.d.ts +19 -8
  3. package/dist/cjs/client-interceptor.d.ts.map +1 -1
  4. package/dist/cjs/client-interceptor.js +47 -23
  5. package/dist/cjs/client-interceptor.js.map +1 -1
  6. package/dist/cjs/client.d.ts +3 -1
  7. package/dist/cjs/client.d.ts.map +1 -1
  8. package/dist/cjs/client.js +2 -0
  9. package/dist/cjs/client.js.map +1 -1
  10. package/dist/cjs/gen/flowrensic/v1/client_calls_pb.d.ts +87 -3
  11. package/dist/cjs/gen/flowrensic/v1/client_calls_pb.d.ts.map +1 -1
  12. package/dist/cjs/gen/flowrensic/v1/client_calls_pb.js +17 -2
  13. package/dist/cjs/gen/flowrensic/v1/client_calls_pb.js.map +1 -1
  14. package/dist/cjs/gen/flowrensic/v1/finding_pb.d.ts +24 -0
  15. package/dist/cjs/gen/flowrensic/v1/finding_pb.d.ts.map +1 -1
  16. package/dist/cjs/gen/flowrensic/v1/finding_pb.js +1 -1
  17. package/dist/cjs/gen/flowrensic/v1/finding_pb.js.map +1 -1
  18. package/dist/cjs/gen/flowrensic/v1/remediation_pb.d.ts +317 -0
  19. package/dist/cjs/gen/flowrensic/v1/remediation_pb.d.ts.map +1 -0
  20. package/dist/cjs/gen/flowrensic/v1/remediation_pb.js +97 -0
  21. package/dist/cjs/gen/flowrensic/v1/remediation_pb.js.map +1 -0
  22. package/dist/cjs/gen/flowrensic/v1/replay_pb.d.ts +94 -0
  23. package/dist/cjs/gen/flowrensic/v1/replay_pb.d.ts.map +1 -1
  24. package/dist/cjs/gen/flowrensic/v1/replay_pb.js +17 -2
  25. package/dist/cjs/gen/flowrensic/v1/replay_pb.js.map +1 -1
  26. package/dist/cjs/gen/flowrensic/v1/reset_pb.d.ts +154 -0
  27. package/dist/cjs/gen/flowrensic/v1/reset_pb.d.ts.map +1 -0
  28. package/dist/cjs/gen/flowrensic/v1/reset_pb.js +78 -0
  29. package/dist/cjs/gen/flowrensic/v1/reset_pb.js.map +1 -0
  30. package/dist/cjs/gen/flowrensic/v1/services_pb.d.ts +100 -2
  31. package/dist/cjs/gen/flowrensic/v1/services_pb.d.ts.map +1 -1
  32. package/dist/cjs/gen/flowrensic/v1/services_pb.js +19 -2
  33. package/dist/cjs/gen/flowrensic/v1/services_pb.js.map +1 -1
  34. package/dist/cjs/gen/flowrensic/v1/workflow_types_pb.d.ts +279 -0
  35. package/dist/cjs/gen/flowrensic/v1/workflow_types_pb.d.ts.map +1 -0
  36. package/dist/cjs/gen/flowrensic/v1/workflow_types_pb.js +50 -0
  37. package/dist/cjs/gen/flowrensic/v1/workflow_types_pb.js.map +1 -0
  38. package/dist/cjs/index.d.ts +8 -2
  39. package/dist/cjs/index.d.ts.map +1 -1
  40. package/dist/cjs/index.js +7 -1
  41. package/dist/cjs/index.js.map +1 -1
  42. package/dist/cjs/query-sink.d.ts +33 -0
  43. package/dist/cjs/query-sink.d.ts.map +1 -0
  44. package/dist/cjs/query-sink.js +59 -0
  45. package/dist/cjs/query-sink.js.map +1 -0
  46. package/dist/cjs/sink.d.ts +26 -11
  47. package/dist/cjs/sink.d.ts.map +1 -1
  48. package/dist/cjs/sink.js +87 -32
  49. package/dist/cjs/sink.js.map +1 -1
  50. package/dist/cjs/workflow.d.ts +11 -0
  51. package/dist/cjs/workflow.d.ts.map +1 -0
  52. package/dist/cjs/workflow.js +25 -0
  53. package/dist/cjs/workflow.js.map +1 -0
  54. package/dist/esm/client-interceptor.d.ts +19 -8
  55. package/dist/esm/client-interceptor.d.ts.map +1 -1
  56. package/dist/esm/client-interceptor.js +47 -23
  57. package/dist/esm/client-interceptor.js.map +1 -1
  58. package/dist/esm/client.d.ts +3 -1
  59. package/dist/esm/client.d.ts.map +1 -1
  60. package/dist/esm/client.js +3 -1
  61. package/dist/esm/client.js.map +1 -1
  62. package/dist/esm/gen/flowrensic/v1/client_calls_pb.d.ts +87 -3
  63. package/dist/esm/gen/flowrensic/v1/client_calls_pb.d.ts.map +1 -1
  64. package/dist/esm/gen/flowrensic/v1/client_calls_pb.js +16 -1
  65. package/dist/esm/gen/flowrensic/v1/client_calls_pb.js.map +1 -1
  66. package/dist/esm/gen/flowrensic/v1/finding_pb.d.ts +24 -0
  67. package/dist/esm/gen/flowrensic/v1/finding_pb.d.ts.map +1 -1
  68. package/dist/esm/gen/flowrensic/v1/finding_pb.js +1 -1
  69. package/dist/esm/gen/flowrensic/v1/finding_pb.js.map +1 -1
  70. package/dist/esm/gen/flowrensic/v1/remediation_pb.d.ts +317 -0
  71. package/dist/esm/gen/flowrensic/v1/remediation_pb.d.ts.map +1 -0
  72. package/dist/esm/gen/flowrensic/v1/remediation_pb.js +94 -0
  73. package/dist/esm/gen/flowrensic/v1/remediation_pb.js.map +1 -0
  74. package/dist/esm/gen/flowrensic/v1/replay_pb.d.ts +94 -0
  75. package/dist/esm/gen/flowrensic/v1/replay_pb.d.ts.map +1 -1
  76. package/dist/esm/gen/flowrensic/v1/replay_pb.js +16 -1
  77. package/dist/esm/gen/flowrensic/v1/replay_pb.js.map +1 -1
  78. package/dist/esm/gen/flowrensic/v1/reset_pb.d.ts +154 -0
  79. package/dist/esm/gen/flowrensic/v1/reset_pb.d.ts.map +1 -0
  80. package/dist/esm/gen/flowrensic/v1/reset_pb.js +75 -0
  81. package/dist/esm/gen/flowrensic/v1/reset_pb.js.map +1 -0
  82. package/dist/esm/gen/flowrensic/v1/services_pb.d.ts +100 -2
  83. package/dist/esm/gen/flowrensic/v1/services_pb.d.ts.map +1 -1
  84. package/dist/esm/gen/flowrensic/v1/services_pb.js +18 -1
  85. package/dist/esm/gen/flowrensic/v1/services_pb.js.map +1 -1
  86. package/dist/esm/gen/flowrensic/v1/workflow_types_pb.d.ts +279 -0
  87. package/dist/esm/gen/flowrensic/v1/workflow_types_pb.d.ts.map +1 -0
  88. package/dist/esm/gen/flowrensic/v1/workflow_types_pb.js +47 -0
  89. package/dist/esm/gen/flowrensic/v1/workflow_types_pb.js.map +1 -0
  90. package/dist/esm/index.d.ts +8 -2
  91. package/dist/esm/index.d.ts.map +1 -1
  92. package/dist/esm/index.js +3 -0
  93. package/dist/esm/index.js.map +1 -1
  94. package/dist/esm/query-sink.d.ts +33 -0
  95. package/dist/esm/query-sink.d.ts.map +1 -0
  96. package/dist/esm/query-sink.js +56 -0
  97. package/dist/esm/query-sink.js.map +1 -0
  98. package/dist/esm/sink.d.ts +26 -11
  99. package/dist/esm/sink.d.ts.map +1 -1
  100. package/dist/esm/sink.js +86 -32
  101. package/dist/esm/sink.js.map +1 -1
  102. package/dist/esm/workflow.d.ts +11 -0
  103. package/dist/esm/workflow.d.ts.map +1 -0
  104. package/dist/esm/workflow.js +21 -0
  105. package/dist/esm/workflow.js.map +1 -0
  106. 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
- export function createAttemptSink(options) {
14
- const { baseUrl, batchSize = 64, flushIntervalMs = 1000, sendTimeoutMs = 5000, maxWaiting = 10_000, maxBatchSize = 500, } = options;
15
- const workerId = options.workerId ?? `${hostname()}-${String(process.pid)}`;
16
- const ingest = createClient(IngestService, createConnectTransport({
17
- baseUrl,
18
- httpVersion: '1.1',
19
- interceptors: options.envKey === undefined ? [] : [envKeyInterceptor(options.envKey)],
20
- }));
21
- // The waiting attempts, oldest first, from head on.
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.env, -1);
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
- // One send at a time. Once it ends the next starts right away while records
62
- // wait. A send that fails or times out is not sent again.
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 events = take(Math.min(maxBatchSize, waitingCount()));
87
+ const records = take(Math.min(maxBatchSize, waitingCount()));
67
88
  compact();
68
89
  sending = (async () => {
69
90
  try {
70
- await ingest.ingestActivityEvents({ events, workerId }, { timeoutMs: sendTimeoutMs });
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
- startSend();
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
- if (reporting !== undefined)
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 ingest.ingestActivityEvents({ workerId, reports }, { timeoutMs: sendTimeoutMs });
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(attempt) {
157
- queue.push(attempt);
158
- add(waitingByEnv, attempt.env, 1);
159
- if (waitingCount() > maxWaiting) {
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
@@ -1 +1 @@
1
- {"version":3,"file":"sink.js","sourceRoot":"","sources":["../../src/sink.ts"],"names":[],"mappings":"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"}
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.20",
3
+ "version": "0.6.22",
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": {