callman-core 1.8.3 → 1.8.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"kafka-executor.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/kafka-executor.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAOvE,eAAO,MAAM,kBAAkB,GAC7B,SAAS,oCAAoC,MAEtC,OAAO,2BAA2B,KAAG,OAAO,CAAC,4BAA4B,CA2B/E,CAAC"}
1
+ {"version":3,"file":"kafka-executor.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/kafka-executor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,2BAA2B,EAC3B,4BAA4B,EAE7B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAmBvE,eAAO,MAAM,kBAAkB,GAC7B,SAAS,oCAAoC,MAEtC,OAAO,2BAA2B,KAAG,OAAO,CAAC,4BAA4B,CA4D/E,CAAC"}
@@ -1,16 +1,31 @@
1
1
  // Canonical Kafka executor — orchestrates a standalone Kafka scenario node.
2
- // (Request-prefetch Kafka capture is handled inside request-executor.ts
3
- // where it is composed with the HTTP call.)
2
+ // Dispatches between consume (capture + matcher) and publish (produce) modes
3
+ // based on `node.data.config.mode`. Request-prefetch Kafka capture is handled
4
+ // inside request-executor.ts where it composes with the HTTP call.
4
5
  //
5
- // The actual Kafka consumer + matcher logic lives in the host-supplied
6
- // `kafkaExecutor` driver (kafkajs or equivalent). We resolve the
7
- // connection, validate the topic, and delegate.
6
+ // The actual Kafka consumer/producer logic lives in host-supplied driver
7
+ // callbacks (kafkajs in the backend). We resolve the connection, validate
8
+ // the topic, and delegate.
8
9
  const KAFKA_DEFAULT_CAPTURE_TIMEOUT_MS = 5000;
9
10
  const buildKafkaCaptureTimeoutMs = (nodeTimeoutMs) => Math.min(nodeTimeoutMs, KAFKA_DEFAULT_CAPTURE_TIMEOUT_MS);
11
+ const buildEmptyPublishResult = (topic, errorMessage) => ({
12
+ topic,
13
+ partition: -1,
14
+ offset: "",
15
+ timestamp: new Date().toISOString(),
16
+ durationMs: 0,
17
+ errorMessage,
18
+ });
10
19
  export const buildKafkaExecutor = (options) => async (input) => {
11
20
  const topic = input.resolvedTopic.trim();
12
21
  const timeoutMs = buildKafkaCaptureTimeoutMs(options.nodeTimeoutMs);
22
+ const mode = input.node.data.config.mode ?? "consume";
13
23
  if (!topic) {
24
+ if (mode === "publish") {
25
+ return {
26
+ publishResult: buildEmptyPublishResult("", "Kafka topic is required"),
27
+ };
28
+ }
14
29
  const captureResult = {
15
30
  topic: "",
16
31
  durationMs: 0,
@@ -24,11 +39,33 @@ export const buildKafkaExecutor = (options) => async (input) => {
24
39
  return { captureResult };
25
40
  }
26
41
  const connection = await options.resolveConnection(input.node.data.config.connectionId);
42
+ if (mode === "publish") {
43
+ if (!options.drivers.kafkaPublishExecutor) {
44
+ return {
45
+ publishResult: buildEmptyPublishResult(topic, "Kafka publish driver is not configured in this host"),
46
+ };
47
+ }
48
+ if (!input.publishRequest) {
49
+ return {
50
+ publishResult: buildEmptyPublishResult(topic, "Kafka publish payload is missing"),
51
+ };
52
+ }
53
+ const publishResult = await options.drivers.kafkaPublishExecutor({
54
+ connection,
55
+ topic,
56
+ key: input.publishRequest.key,
57
+ value: input.publishRequest.value,
58
+ headers: input.publishRequest.headers,
59
+ timeoutMs,
60
+ });
61
+ return { publishResult };
62
+ }
27
63
  const outcome = await options.drivers.kafkaExecutor({
28
64
  connection,
29
65
  topic,
30
66
  matcher: input.matcher,
31
67
  timeoutMs,
68
+ captureFromTimestampMs: input.captureFromTimestampMs,
32
69
  });
33
70
  return { captureResult: outcome.capture };
34
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"kafka-executor.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/kafka-executor.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wEAAwE;AACxE,4CAA4C;AAC5C,EAAE;AACF,uEAAuE;AACvE,iEAAiE;AACjE,gDAAgD;AAUhD,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAE9C,MAAM,0BAA0B,GAAG,CAAC,aAAqB,EAAU,EAAE,CACnE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,gCAAgC,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAA6C,EAC7C,EAAE,CACF,KAAK,EAAE,KAAkC,EAAyC,EAAE;IAClF,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,0BAA0B,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEpE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,aAAa,GAA+B;YAChD,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,CAAC;YACb,SAAS;YACT,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,yBAAyB;SACxC,CAAC;QACF,OAAO,EAAE,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAClD,UAAU;QACV,KAAK;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS;KACV,CAAC,CAAC;IAEH,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;AAC5C,CAAC,CAAC"}
1
+ {"version":3,"file":"kafka-executor.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/kafka-executor.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,mEAAmE;AACnE,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,2BAA2B;AAW3B,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAE9C,MAAM,0BAA0B,GAAG,CAAC,aAAqB,EAAU,EAAE,CACnE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,gCAAgC,CAAC,CAAC;AAE5D,MAAM,uBAAuB,GAAG,CAC9B,KAAa,EACb,YAAoB,EACQ,EAAE,CAAC,CAAC;IAChC,KAAK;IACL,SAAS,EAAE,CAAC,CAAC;IACb,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACnC,UAAU,EAAE,CAAC;IACb,YAAY;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAA6C,EAC7C,EAAE,CACF,KAAK,EAAE,KAAkC,EAAyC,EAAE;IAClF,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,0BAA0B,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;IAEtD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO;gBACL,aAAa,EAAE,uBAAuB,CAAC,EAAE,EAAE,yBAAyB,CAAC;aACtE,CAAC;QACJ,CAAC;QACD,MAAM,aAAa,GAA+B;YAChD,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,CAAC;YACb,SAAS;YACT,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,yBAAyB;SACxC,CAAC;QACF,OAAO,EAAE,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAExF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAC1C,OAAO;gBACL,aAAa,EAAE,uBAAuB,CACpC,KAAK,EACL,qDAAqD,CACtD;aACF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO;gBACL,aAAa,EAAE,uBAAuB,CAAC,KAAK,EAAE,kCAAkC,CAAC;aAClF,CAAC;QACJ,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC;YAC/D,UAAU;YACV,KAAK;YACL,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG;YAC7B,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK;YACjC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO;YACrC,SAAS;SACV,CAAC,CAAC;QACH,OAAO,EAAE,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAClD,UAAU;QACV,KAAK;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS;QACT,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;KACrD,CAAC,CAAC;IAEH,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;AAC5C,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"request-executor.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/request-executor.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,6BAA6B,EAC7B,8BAA8B,EAE/B,MAAM,aAAa,CAAC;AAuBrB,OAAO,KAAK,EAEV,oCAAoC,EACrC,MAAM,YAAY,CAAC;AAiBpB,eAAO,MAAM,oBAAoB,GAC/B,SAAS,oCAAoC,MAEtC,OAAO,6BAA6B,KAAG,OAAO,CAAC,8BAA8B,CA8OnF,CAAC"}
1
+ {"version":3,"file":"request-executor.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/request-executor.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,6BAA6B,EAC7B,8BAA8B,EAE/B,MAAM,aAAa,CAAC;AAuBrB,OAAO,KAAK,EAEV,oCAAoC,EACrC,MAAM,YAAY,CAAC;AAiBpB,eAAO,MAAM,oBAAoB,GAC/B,SAAS,oCAAoC,MAEtC,OAAO,6BAA6B,KAAG,OAAO,CAAC,8BAA8B,CA+OnF,CAAC"}
@@ -135,6 +135,7 @@ export const buildRequestExecutor = (options) => async (input) => {
135
135
  topic: transientCapture.topic.trim(),
136
136
  matcher: null,
137
137
  timeoutMs: options.nodeTimeoutMs,
138
+ captureFromTimestampMs: input.captureFromTimestampMs,
138
139
  operation: async () => {
139
140
  const er = await runHttp();
140
141
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"request-executor.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/request-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-executor.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/request-executor.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { DatabaseConnectionConfig, KafkaConnectionConfig, NotificationConnectionConfig, RedisConnectionConfig } from "./connection-config.js";
2
- import type { ScenarioKafkaCaptureResult, ScenarioKafkaCapturedMessage } from "../types.js";
2
+ import type { ScenarioKafkaCaptureResult, ScenarioKafkaCapturedMessage, ScenarioKafkaPublishResult } from "../types.js";
3
3
  export type ScenarioConnectionType = "database" | "redis" | "kafka" | "notification";
4
4
  export type ScenarioConnectionProvider = "oracle" | "mongodb" | "postgresql" | "mysql" | "redis" | "kafka" | "slack";
5
5
  export interface ScenarioConnectionRuntime {
@@ -51,6 +51,7 @@ export interface KafkaCaptureInput {
51
51
  templateValues: Record<string, string>;
52
52
  } | null;
53
53
  timeoutMs: number;
54
+ captureFromTimestampMs?: number;
54
55
  operation?: () => Promise<HttpExecuteResult>;
55
56
  }
56
57
  export interface KafkaCaptureOutcome {
@@ -58,11 +59,20 @@ export interface KafkaCaptureOutcome {
58
59
  matched: ScenarioKafkaCapturedMessage | null;
59
60
  operationResult?: HttpExecuteResult;
60
61
  }
62
+ export interface KafkaPublishInput {
63
+ connection: ScenarioConnectionRuntime;
64
+ topic: string;
65
+ key: string | null;
66
+ value: string;
67
+ headers: Record<string, string>;
68
+ timeoutMs: number;
69
+ }
61
70
  export interface ScenarioRuntimeAdapterDrivers {
62
71
  httpExecutor: (input: HttpExecuteInput) => Promise<HttpExecuteResult>;
63
72
  databaseExecutor: (input: DatabaseExecuteInput) => Promise<DatabaseExecuteResult>;
64
73
  redisExecutor: (input: RedisExecuteInput) => Promise<RedisExecuteResult>;
65
74
  kafkaExecutor: (input: KafkaCaptureInput) => Promise<KafkaCaptureOutcome>;
75
+ kafkaPublishExecutor?: (input: KafkaPublishInput) => Promise<ScenarioKafkaPublishResult>;
66
76
  }
67
77
  export interface ScenarioRuntimeAdapterFactoryOptions {
68
78
  workspaceId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runScenario.d.ts","sourceRoot":"","sources":["../../src/scenario-runner/runScenario.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAGV,kBAAkB,EAUlB,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AAwrBpB,eAAO,MAAM,WAAW,GAAU,mGAQ/B,kBAAkB,KAAG,OAAO,CAAC,iBAAiB,CAgvChD,CAAC"}
1
+ {"version":3,"file":"runScenario.d.ts","sourceRoot":"","sources":["../../src/scenario-runner/runScenario.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAGV,kBAAkB,EAUlB,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AAorBpB,eAAO,MAAM,WAAW,GAAU,mGAQ/B,kBAAkB,KAAG,OAAO,CAAC,iBAAiB,CAwzChD,CAAC"}
@@ -30,7 +30,6 @@ const buildTitle = (node) => {
30
30
  }
31
31
  return `${node.type[0]?.toUpperCase() ?? ""}${node.type.slice(1)}`;
32
32
  };
33
- const isKafkaNode = (node) => node?.type === "kafka";
34
33
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
35
34
  const RESERVED_WORKFLOW_ROOT_LABELS = new Set(["workflow", "__meta"]);
36
35
  const cloneNodeExecutionMeta = (meta) => ({
@@ -770,33 +769,27 @@ export const runScenario = async ({ scenario, environment = {}, globals = {}, ru
770
769
  });
771
770
  try {
772
771
  if (node.type === "request") {
773
- const kafkaCapturePlans = (scope.graph.outgoingMap.get(nodeId) ?? [])
774
- .map((edge) => scope.graph.nodeMap.get(edge.target))
775
- .filter(isKafkaNode)
776
- .map((kafkaNode) => {
777
- const refreshedTemplateValues = buildScenarioTemplateValues({
778
- environment: runtimeContext.environment,
779
- globals: runtimeContext.globals,
780
- workflowContext: runtimeContext.workflowContext,
781
- nodeMetaByLabel: runtimeContext.nodeMetaByLabel,
782
- responseRoot: runtimeContext.responseRoot,
783
- dbResult: runtimeContext.dbResult,
784
- kafkaEvent: runtimeContext.kafkaEvent,
785
- redisResult: runtimeContext.redisResult,
786
- });
787
- return {
788
- stepId: scope.stepIdForNode(kafkaNode.id),
789
- connectionId: kafkaNode.data.config.connectionId || null,
790
- topic: resolveScenarioTemplateString(kafkaNode.data.config.topic, refreshedTemplateValues).trim(),
791
- };
792
- })
793
- .filter((entry) => entry.connectionId && entry.topic);
772
+ // Inline Kafka prefetch (Request wraps the HTTP call inside the
773
+ // Kafka consumer's listening window) used to be necessary because
774
+ // the consume node's high-water-mark snapshot would otherwise jump
775
+ // past the message produced by the HTTP request. The trade-off was
776
+ // that the Request node stayed "running" until the full 5s capture
777
+ // window elapsed — even when the HTTP itself returned in ms.
778
+ //
779
+ // The runtime now anchors every Kafka consume snapshot at scenario
780
+ // start (`captureFromTimestampMs` → fetchTopicOffsetsByTimestamp),
781
+ // so the downstream consume node can rewind back to the produced
782
+ // message on its own. We therefore skip the prefetch path so the
783
+ // Request node completes as soon as HTTP returns, and the consume
784
+ // node owns its own wait window.
785
+ const kafkaCapturePlans = [];
794
786
  const requestResult = await runtimeAdapters.requestExecutor({
795
787
  runId,
796
788
  stepId,
797
789
  node,
798
790
  context: createContextSnapshot(runtimeContext),
799
791
  kafkaCapturePlans,
792
+ captureFromTimestampMs: startedAtMs,
800
793
  signal,
801
794
  });
802
795
  if (requestResult.cancelled) {
@@ -938,58 +931,119 @@ export const runScenario = async ({ scenario, environment = {}, globals = {}, ru
938
931
  };
939
932
  }
940
933
  if (node.type === "kafka") {
934
+ const kafkaMode = node.data.config.mode ?? "consume";
941
935
  const resolvedTopic = resolveScenarioTemplateString(node.data.config.topic, templateValues);
942
- const rules = node.data.config.rules?.filter((rule) => rule.trim()) ?? [];
943
- const prefetchedCaptureResult = prefetchedKafkaResults.get(stepId);
944
- const captureResult = prefetchedCaptureResult ??
945
- (await runtimeAdapters.kafkaExecutor({
936
+ if (kafkaMode === "publish") {
937
+ const valueFormat = node.data.config.publishValueFormat ?? "json";
938
+ const resolvedKeyRaw = node.data.config.messageKey
939
+ ? resolveScenarioTemplateString(node.data.config.messageKey, templateValues)
940
+ : "";
941
+ const resolvedKey = resolvedKeyRaw.length > 0 ? resolvedKeyRaw : null;
942
+ const resolvedValue = resolveScenarioTemplateString(node.data.config.messageValue ?? "", templateValues);
943
+ if (valueFormat === "json" && resolvedValue.trim().length > 0) {
944
+ try {
945
+ JSON.parse(resolvedValue);
946
+ }
947
+ catch (jsonError) {
948
+ outputData = {
949
+ topic: resolvedTopic,
950
+ errorMessage: `Kafka publish payload is not valid JSON: ${jsonError instanceof Error ? jsonError.message : String(jsonError)}`,
951
+ };
952
+ throw new ScenarioNodeFailureError(`Kafka publish payload is not valid JSON for topic "${resolvedTopic}"`);
953
+ }
954
+ }
955
+ const resolvedHeaders = {};
956
+ for (const header of node.data.config.messageHeaders ?? []) {
957
+ if (header.enabled === false)
958
+ continue;
959
+ const headerKey = resolveScenarioTemplateString(header.key, templateValues).trim();
960
+ if (!headerKey)
961
+ continue;
962
+ resolvedHeaders[headerKey] = resolveScenarioTemplateString(header.value, templateValues);
963
+ }
964
+ const { publishResult } = await runtimeAdapters.kafkaExecutor({
946
965
  runId,
947
966
  stepId,
948
967
  node,
949
968
  resolvedTopic,
950
- matcher: rules.length > 0
951
- ? {
952
- mode: node.data.config.matchMode,
953
- rules,
954
- templateValues,
955
- }
956
- : null,
969
+ matcher: null,
970
+ publishRequest: {
971
+ key: resolvedKey,
972
+ value: resolvedValue,
973
+ headers: resolvedHeaders,
974
+ },
957
975
  signal,
958
- })).captureResult;
959
- throwIfStopped(signal);
960
- let matchedMessage = captureResult.messages[0] ?? null;
961
- if (node.data.config.matchMode === "regex" && rules[0]) {
962
- const regex = buildScenarioRegex(rules[0]);
963
- matchedMessage =
964
- captureResult.messages.find((message) => {
965
- regex.lastIndex = 0;
966
- return regex.test(safeStringifyKafkaMessage(message));
967
- }) ?? null;
968
- }
969
- if (node.data.config.matchMode === "rules" && rules.length > 0) {
970
- matchedMessage =
971
- captureResult.messages.find((message) => {
972
- const kafkaEventValue = buildKafkaEventValue(message);
973
- const scopedValues = buildScenarioTemplateValues({
974
- environment: runtimeContext.environment,
975
- globals: runtimeContext.globals,
976
- workflowContext: runtimeContext.workflowContext,
977
- nodeMetaByLabel: runtimeContext.nodeMetaByLabel,
978
- responseRoot: runtimeContext.responseRoot,
979
- dbResult: runtimeContext.dbResult,
980
- kafkaEvent: kafkaEventValue,
981
- redisResult: runtimeContext.redisResult,
982
- });
983
- return rules.every((rule) => evaluateScenarioExpression(rule, scopedValues).result);
984
- }) ?? null;
976
+ });
977
+ throwIfStopped(signal);
978
+ if (!publishResult) {
979
+ throw new ScenarioNodeFailureError("Kafka publish executor returned no result");
980
+ }
981
+ outputData = publishResult;
982
+ if (publishResult.errorMessage) {
983
+ throw new ScenarioNodeFailureError(`Kafka publish failed for topic "${publishResult.topic}": ${publishResult.errorMessage}`);
984
+ }
985
985
  }
986
- if (!matchedMessage) {
987
- outputData = captureResult;
988
- throw new ScenarioNodeFailureError(buildKafkaFailureMessage(captureResult, Boolean(rules.length)));
986
+ else {
987
+ const rules = node.data.config.rules?.filter((rule) => rule.trim()) ?? [];
988
+ const resolvedMatchMode = node.data.config.matchMode ?? "regex";
989
+ const prefetchedCaptureResult = prefetchedKafkaResults.get(stepId);
990
+ const captureResult = prefetchedCaptureResult ??
991
+ (await runtimeAdapters.kafkaExecutor({
992
+ runId,
993
+ stepId,
994
+ node,
995
+ resolvedTopic,
996
+ matcher: rules.length > 0
997
+ ? {
998
+ mode: resolvedMatchMode,
999
+ rules,
1000
+ templateValues,
1001
+ }
1002
+ : null,
1003
+ // Anchor the offset snapshot at scenario start so messages
1004
+ // produced earlier in this run (e.g. by an upstream publish)
1005
+ // are still visible — fixes the publish→consume race.
1006
+ captureFromTimestampMs: startedAtMs,
1007
+ signal,
1008
+ })).captureResult;
1009
+ throwIfStopped(signal);
1010
+ if (!captureResult) {
1011
+ throw new ScenarioNodeFailureError("Kafka executor returned no capture result");
1012
+ }
1013
+ let matchedMessage = captureResult.messages[0] ?? null;
1014
+ if (resolvedMatchMode === "regex" && rules[0]) {
1015
+ const regex = buildScenarioRegex(rules[0]);
1016
+ matchedMessage =
1017
+ captureResult.messages.find((message) => {
1018
+ regex.lastIndex = 0;
1019
+ return regex.test(safeStringifyKafkaMessage(message));
1020
+ }) ?? null;
1021
+ }
1022
+ if (resolvedMatchMode === "rules" && rules.length > 0) {
1023
+ matchedMessage =
1024
+ captureResult.messages.find((message) => {
1025
+ const kafkaEventValue = buildKafkaEventValue(message);
1026
+ const scopedValues = buildScenarioTemplateValues({
1027
+ environment: runtimeContext.environment,
1028
+ globals: runtimeContext.globals,
1029
+ workflowContext: runtimeContext.workflowContext,
1030
+ nodeMetaByLabel: runtimeContext.nodeMetaByLabel,
1031
+ responseRoot: runtimeContext.responseRoot,
1032
+ dbResult: runtimeContext.dbResult,
1033
+ kafkaEvent: kafkaEventValue,
1034
+ redisResult: runtimeContext.redisResult,
1035
+ });
1036
+ return rules.every((rule) => evaluateScenarioExpression(rule, scopedValues).result);
1037
+ }) ?? null;
1038
+ }
1039
+ if (!matchedMessage) {
1040
+ outputData = captureResult;
1041
+ throw new ScenarioNodeFailureError(buildKafkaFailureMessage(captureResult, Boolean(rules.length)));
1042
+ }
1043
+ runtimeContext.kafkaCapture = captureResult;
1044
+ runtimeContext.kafkaEvent = buildKafkaEventValue(matchedMessage);
1045
+ outputData = runtimeContext.kafkaEvent;
989
1046
  }
990
- runtimeContext.kafkaCapture = captureResult;
991
- runtimeContext.kafkaEvent = buildKafkaEventValue(matchedMessage);
992
- outputData = runtimeContext.kafkaEvent;
993
1047
  }
994
1048
  if (node.type === "condition") {
995
1049
  const conditionIssues = validateConditionConfig(node.data.config);