@naylence/runtime 0.3.5-test.943 → 0.3.5-test.944

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.
@@ -14,12 +14,12 @@ var fastify = require('fastify');
14
14
  var websocketPlugin = require('@fastify/websocket');
15
15
 
16
16
  // This file is auto-generated during build - do not edit manually
17
- // Generated from package.json version: 0.3.5-test.943
17
+ // Generated from package.json version: 0.3.5-test.944
18
18
  /**
19
19
  * The package version, injected at build time.
20
20
  * @internal
21
21
  */
22
- const VERSION = '0.3.5-test.943';
22
+ const VERSION = '0.3.5-test.944';
23
23
 
24
24
  /**
25
25
  * Fame protocol specific error classes with WebSocket close codes and proper inheritance.
@@ -36444,6 +36444,26 @@ class BroadcastChannelListener extends TransportListener {
36444
36444
  inboxCapacity: this._inboxCapacity,
36445
36445
  };
36446
36446
  }
36447
+ // Automatically configure transport frame multiplexing:
36448
+ // Set remoteNodeId to the incoming senderId to target responses back to the specific client/agent
36449
+ const broadcastConfig = connectorConfig;
36450
+ if (!broadcastConfig.remoteNodeId) {
36451
+ broadcastConfig.remoteNodeId = params.senderId;
36452
+ logger$a.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
36453
+ sender_id: params.senderId,
36454
+ system_id: systemId,
36455
+ remote_node_id: params.senderId,
36456
+ local_node_id: broadcastConfig.localNodeId ?? '<not set>',
36457
+ });
36458
+ }
36459
+ else {
36460
+ logger$a.debug('broadcast_channel_listener_using_provided_remote_node_id', {
36461
+ sender_id: params.senderId,
36462
+ system_id: systemId,
36463
+ remote_node_id: broadcastConfig.remoteNodeId,
36464
+ local_node_id: broadcastConfig.localNodeId ?? '<not set>',
36465
+ });
36466
+ }
36447
36467
  try {
36448
36468
  const connector = await routingNode.createOriginConnector({
36449
36469
  originType,
@@ -36513,6 +36533,21 @@ class BroadcastChannelListener extends TransportListener {
36513
36533
  inboxCandidate > 0) {
36514
36534
  config.inboxCapacity = Math.floor(inboxCandidate);
36515
36535
  }
36536
+ // Extract transport frame multiplexing node IDs
36537
+ const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
36538
+ if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
36539
+ config.localNodeId = localNodeIdCandidate.trim();
36540
+ logger$a.debug('broadcast_channel_listener_extracted_local_node_id', {
36541
+ local_node_id: config.localNodeId,
36542
+ });
36543
+ }
36544
+ const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
36545
+ if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
36546
+ config.remoteNodeId = remoteNodeIdCandidate.trim();
36547
+ logger$a.debug('broadcast_channel_listener_extracted_remote_node_id', {
36548
+ remote_node_id: config.remoteNodeId,
36549
+ });
36550
+ }
36516
36551
  return config;
36517
36552
  }
36518
36553
  _monitorConnectorLifecycle(senderId, systemId, connector) {
@@ -37235,6 +37270,7 @@ class InPageListener extends TransportListener {
37235
37270
  this._busHandler = null;
37236
37271
  this._senderRegistry = new Map();
37237
37272
  this._systemToSender = new Map();
37273
+ this._flowIdToSender = new Map();
37238
37274
  this._pendingAttachments = new Map();
37239
37275
  ensureBrowserEnvironment();
37240
37276
  const channelCandidate = options?.channelName;
@@ -37301,6 +37337,7 @@ class InPageListener extends TransportListener {
37301
37337
  this._unregisterBusListener();
37302
37338
  this._senderRegistry.clear();
37303
37339
  this._systemToSender.clear();
37340
+ this._flowIdToSender.clear();
37304
37341
  this._pendingAttachments.clear();
37305
37342
  logger$7.debug('inpage_listener_stopped', {
37306
37343
  channel: this._channelName,
@@ -37354,10 +37391,25 @@ class InPageListener extends TransportListener {
37354
37391
  await this._handleAttachFrame(senderId, envelope);
37355
37392
  return;
37356
37393
  }
37357
- const entry = this._senderRegistry.get(senderId);
37394
+ // Try to find connector by sender ID first
37395
+ let entry = this._senderRegistry.get(senderId);
37396
+ // If not found and we have a flowId, try to route based on flow
37397
+ if (!entry && envelope.flowId) {
37398
+ const originalSenderId = this._flowIdToSender.get(envelope.flowId);
37399
+ if (originalSenderId) {
37400
+ entry = this._senderRegistry.get(originalSenderId);
37401
+ logger$7.debug('inpage_listener_routed_by_flow_id', {
37402
+ sender_id: senderId,
37403
+ original_sender_id: originalSenderId,
37404
+ flow_id: envelope.flowId,
37405
+ frame_type: envelope.frame?.type ?? 'unknown',
37406
+ });
37407
+ }
37408
+ }
37358
37409
  if (!entry) {
37359
37410
  logger$7.debug('inpage_listener_no_connector_for_sender', {
37360
37411
  sender_id: senderId,
37412
+ flow_id: envelope.flowId,
37361
37413
  frame_type: envelope.frame?.type ?? 'unknown',
37362
37414
  });
37363
37415
  return;
@@ -37434,6 +37486,15 @@ class InPageListener extends TransportListener {
37434
37486
  }
37435
37487
  this._senderRegistry.set(senderId, entry);
37436
37488
  this._systemToSender.set(entry.systemId, senderId);
37489
+ // Track the flowId if present so we can route responses back
37490
+ if (envelope.flowId) {
37491
+ this._flowIdToSender.set(envelope.flowId, senderId);
37492
+ logger$7.debug('inpage_listener_registered_flow_id', {
37493
+ sender_id: senderId,
37494
+ system_id: entry.systemId,
37495
+ flow_id: envelope.flowId,
37496
+ });
37497
+ }
37437
37498
  await this._deliverEnvelope(entry, envelope);
37438
37499
  }
37439
37500
  async _createConnectorForAttach(params) {
@@ -37481,7 +37542,7 @@ class InPageListener extends TransportListener {
37481
37542
  origin_type: originType,
37482
37543
  connector_type: connector.constructor?.name ?? 'unknown',
37483
37544
  });
37484
- return { connector, systemId, originType };
37545
+ return { connector, systemId, originType, senderId: params.senderId };
37485
37546
  }
37486
37547
  catch (error) {
37487
37548
  logger$7.error('inpage_listener_connector_creation_failed', {
@@ -37535,6 +37596,12 @@ class InPageListener extends TransportListener {
37535
37596
  if (this._systemToSender.get(systemId) === senderId) {
37536
37597
  this._systemToSender.delete(systemId);
37537
37598
  }
37599
+ // Clean up flowId mappings for this sender
37600
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
37601
+ if (sid === senderId) {
37602
+ this._flowIdToSender.delete(flowId);
37603
+ }
37604
+ }
37538
37605
  })
37539
37606
  .catch((error) => {
37540
37607
  logger$7.debug('inpage_listener_wait_until_closed_failed', {
@@ -37546,9 +37613,24 @@ class InPageListener extends TransportListener {
37546
37613
  if (this._systemToSender.get(systemId) === senderId) {
37547
37614
  this._systemToSender.delete(systemId);
37548
37615
  }
37616
+ // Clean up flowId mappings for this sender
37617
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
37618
+ if (sid === senderId) {
37619
+ this._flowIdToSender.delete(flowId);
37620
+ }
37621
+ }
37549
37622
  });
37550
37623
  }
37551
37624
  async _deliverEnvelope(entry, envelope) {
37625
+ // Track flowId for routing responses back
37626
+ if (envelope.flowId && !this._flowIdToSender.has(envelope.flowId)) {
37627
+ this._flowIdToSender.set(envelope.flowId, entry.senderId);
37628
+ logger$7.debug('inpage_listener_registered_flow_id_on_delivery', {
37629
+ sender_id: entry.senderId,
37630
+ system_id: entry.systemId,
37631
+ flow_id: envelope.flowId,
37632
+ });
37633
+ }
37552
37634
  const message = this._buildChannelMessage({
37553
37635
  envelope,
37554
37636
  connector: entry.connector,
@@ -13,12 +13,12 @@ import fastify from 'fastify';
13
13
  import websocketPlugin from '@fastify/websocket';
14
14
 
15
15
  // This file is auto-generated during build - do not edit manually
16
- // Generated from package.json version: 0.3.5-test.943
16
+ // Generated from package.json version: 0.3.5-test.944
17
17
  /**
18
18
  * The package version, injected at build time.
19
19
  * @internal
20
20
  */
21
- const VERSION = '0.3.5-test.943';
21
+ const VERSION = '0.3.5-test.944';
22
22
 
23
23
  /**
24
24
  * Fame protocol specific error classes with WebSocket close codes and proper inheritance.
@@ -36443,6 +36443,26 @@ class BroadcastChannelListener extends TransportListener {
36443
36443
  inboxCapacity: this._inboxCapacity,
36444
36444
  };
36445
36445
  }
36446
+ // Automatically configure transport frame multiplexing:
36447
+ // Set remoteNodeId to the incoming senderId to target responses back to the specific client/agent
36448
+ const broadcastConfig = connectorConfig;
36449
+ if (!broadcastConfig.remoteNodeId) {
36450
+ broadcastConfig.remoteNodeId = params.senderId;
36451
+ logger$a.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
36452
+ sender_id: params.senderId,
36453
+ system_id: systemId,
36454
+ remote_node_id: params.senderId,
36455
+ local_node_id: broadcastConfig.localNodeId ?? '<not set>',
36456
+ });
36457
+ }
36458
+ else {
36459
+ logger$a.debug('broadcast_channel_listener_using_provided_remote_node_id', {
36460
+ sender_id: params.senderId,
36461
+ system_id: systemId,
36462
+ remote_node_id: broadcastConfig.remoteNodeId,
36463
+ local_node_id: broadcastConfig.localNodeId ?? '<not set>',
36464
+ });
36465
+ }
36446
36466
  try {
36447
36467
  const connector = await routingNode.createOriginConnector({
36448
36468
  originType,
@@ -36512,6 +36532,21 @@ class BroadcastChannelListener extends TransportListener {
36512
36532
  inboxCandidate > 0) {
36513
36533
  config.inboxCapacity = Math.floor(inboxCandidate);
36514
36534
  }
36535
+ // Extract transport frame multiplexing node IDs
36536
+ const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
36537
+ if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
36538
+ config.localNodeId = localNodeIdCandidate.trim();
36539
+ logger$a.debug('broadcast_channel_listener_extracted_local_node_id', {
36540
+ local_node_id: config.localNodeId,
36541
+ });
36542
+ }
36543
+ const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
36544
+ if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
36545
+ config.remoteNodeId = remoteNodeIdCandidate.trim();
36546
+ logger$a.debug('broadcast_channel_listener_extracted_remote_node_id', {
36547
+ remote_node_id: config.remoteNodeId,
36548
+ });
36549
+ }
36515
36550
  return config;
36516
36551
  }
36517
36552
  _monitorConnectorLifecycle(senderId, systemId, connector) {
@@ -37234,6 +37269,7 @@ class InPageListener extends TransportListener {
37234
37269
  this._busHandler = null;
37235
37270
  this._senderRegistry = new Map();
37236
37271
  this._systemToSender = new Map();
37272
+ this._flowIdToSender = new Map();
37237
37273
  this._pendingAttachments = new Map();
37238
37274
  ensureBrowserEnvironment();
37239
37275
  const channelCandidate = options?.channelName;
@@ -37300,6 +37336,7 @@ class InPageListener extends TransportListener {
37300
37336
  this._unregisterBusListener();
37301
37337
  this._senderRegistry.clear();
37302
37338
  this._systemToSender.clear();
37339
+ this._flowIdToSender.clear();
37303
37340
  this._pendingAttachments.clear();
37304
37341
  logger$7.debug('inpage_listener_stopped', {
37305
37342
  channel: this._channelName,
@@ -37353,10 +37390,25 @@ class InPageListener extends TransportListener {
37353
37390
  await this._handleAttachFrame(senderId, envelope);
37354
37391
  return;
37355
37392
  }
37356
- const entry = this._senderRegistry.get(senderId);
37393
+ // Try to find connector by sender ID first
37394
+ let entry = this._senderRegistry.get(senderId);
37395
+ // If not found and we have a flowId, try to route based on flow
37396
+ if (!entry && envelope.flowId) {
37397
+ const originalSenderId = this._flowIdToSender.get(envelope.flowId);
37398
+ if (originalSenderId) {
37399
+ entry = this._senderRegistry.get(originalSenderId);
37400
+ logger$7.debug('inpage_listener_routed_by_flow_id', {
37401
+ sender_id: senderId,
37402
+ original_sender_id: originalSenderId,
37403
+ flow_id: envelope.flowId,
37404
+ frame_type: envelope.frame?.type ?? 'unknown',
37405
+ });
37406
+ }
37407
+ }
37357
37408
  if (!entry) {
37358
37409
  logger$7.debug('inpage_listener_no_connector_for_sender', {
37359
37410
  sender_id: senderId,
37411
+ flow_id: envelope.flowId,
37360
37412
  frame_type: envelope.frame?.type ?? 'unknown',
37361
37413
  });
37362
37414
  return;
@@ -37433,6 +37485,15 @@ class InPageListener extends TransportListener {
37433
37485
  }
37434
37486
  this._senderRegistry.set(senderId, entry);
37435
37487
  this._systemToSender.set(entry.systemId, senderId);
37488
+ // Track the flowId if present so we can route responses back
37489
+ if (envelope.flowId) {
37490
+ this._flowIdToSender.set(envelope.flowId, senderId);
37491
+ logger$7.debug('inpage_listener_registered_flow_id', {
37492
+ sender_id: senderId,
37493
+ system_id: entry.systemId,
37494
+ flow_id: envelope.flowId,
37495
+ });
37496
+ }
37436
37497
  await this._deliverEnvelope(entry, envelope);
37437
37498
  }
37438
37499
  async _createConnectorForAttach(params) {
@@ -37480,7 +37541,7 @@ class InPageListener extends TransportListener {
37480
37541
  origin_type: originType,
37481
37542
  connector_type: connector.constructor?.name ?? 'unknown',
37482
37543
  });
37483
- return { connector, systemId, originType };
37544
+ return { connector, systemId, originType, senderId: params.senderId };
37484
37545
  }
37485
37546
  catch (error) {
37486
37547
  logger$7.error('inpage_listener_connector_creation_failed', {
@@ -37534,6 +37595,12 @@ class InPageListener extends TransportListener {
37534
37595
  if (this._systemToSender.get(systemId) === senderId) {
37535
37596
  this._systemToSender.delete(systemId);
37536
37597
  }
37598
+ // Clean up flowId mappings for this sender
37599
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
37600
+ if (sid === senderId) {
37601
+ this._flowIdToSender.delete(flowId);
37602
+ }
37603
+ }
37537
37604
  })
37538
37605
  .catch((error) => {
37539
37606
  logger$7.debug('inpage_listener_wait_until_closed_failed', {
@@ -37545,9 +37612,24 @@ class InPageListener extends TransportListener {
37545
37612
  if (this._systemToSender.get(systemId) === senderId) {
37546
37613
  this._systemToSender.delete(systemId);
37547
37614
  }
37615
+ // Clean up flowId mappings for this sender
37616
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
37617
+ if (sid === senderId) {
37618
+ this._flowIdToSender.delete(flowId);
37619
+ }
37620
+ }
37548
37621
  });
37549
37622
  }
37550
37623
  async _deliverEnvelope(entry, envelope) {
37624
+ // Track flowId for routing responses back
37625
+ if (envelope.flowId && !this._flowIdToSender.has(envelope.flowId)) {
37626
+ this._flowIdToSender.set(envelope.flowId, entry.senderId);
37627
+ logger$7.debug('inpage_listener_registered_flow_id_on_delivery', {
37628
+ sender_id: entry.senderId,
37629
+ system_id: entry.systemId,
37630
+ flow_id: envelope.flowId,
37631
+ });
37632
+ }
37551
37633
  const message = this._buildChannelMessage({
37552
37634
  envelope,
37553
37635
  connector: entry.connector,
@@ -5478,12 +5478,12 @@ for (const [name, config] of Object.entries(SQLITE_PROFILES)) {
5478
5478
  }
5479
5479
 
5480
5480
  // This file is auto-generated during build - do not edit manually
5481
- // Generated from package.json version: 0.3.5-test.943
5481
+ // Generated from package.json version: 0.3.5-test.944
5482
5482
  /**
5483
5483
  * The package version, injected at build time.
5484
5484
  * @internal
5485
5485
  */
5486
- const VERSION = '0.3.5-test.943';
5486
+ const VERSION = '0.3.5-test.944';
5487
5487
 
5488
5488
  /**
5489
5489
  * Fame errors module - Fame protocol specific error classes
@@ -32279,6 +32279,7 @@ class InPageListener extends TransportListener {
32279
32279
  this._busHandler = null;
32280
32280
  this._senderRegistry = new Map();
32281
32281
  this._systemToSender = new Map();
32282
+ this._flowIdToSender = new Map();
32282
32283
  this._pendingAttachments = new Map();
32283
32284
  ensureBrowserEnvironment$1();
32284
32285
  const channelCandidate = options?.channelName;
@@ -32345,6 +32346,7 @@ class InPageListener extends TransportListener {
32345
32346
  this._unregisterBusListener();
32346
32347
  this._senderRegistry.clear();
32347
32348
  this._systemToSender.clear();
32349
+ this._flowIdToSender.clear();
32348
32350
  this._pendingAttachments.clear();
32349
32351
  logger$o.debug('inpage_listener_stopped', {
32350
32352
  channel: this._channelName,
@@ -32398,10 +32400,25 @@ class InPageListener extends TransportListener {
32398
32400
  await this._handleAttachFrame(senderId, envelope);
32399
32401
  return;
32400
32402
  }
32401
- const entry = this._senderRegistry.get(senderId);
32403
+ // Try to find connector by sender ID first
32404
+ let entry = this._senderRegistry.get(senderId);
32405
+ // If not found and we have a flowId, try to route based on flow
32406
+ if (!entry && envelope.flowId) {
32407
+ const originalSenderId = this._flowIdToSender.get(envelope.flowId);
32408
+ if (originalSenderId) {
32409
+ entry = this._senderRegistry.get(originalSenderId);
32410
+ logger$o.debug('inpage_listener_routed_by_flow_id', {
32411
+ sender_id: senderId,
32412
+ original_sender_id: originalSenderId,
32413
+ flow_id: envelope.flowId,
32414
+ frame_type: envelope.frame?.type ?? 'unknown',
32415
+ });
32416
+ }
32417
+ }
32402
32418
  if (!entry) {
32403
32419
  logger$o.debug('inpage_listener_no_connector_for_sender', {
32404
32420
  sender_id: senderId,
32421
+ flow_id: envelope.flowId,
32405
32422
  frame_type: envelope.frame?.type ?? 'unknown',
32406
32423
  });
32407
32424
  return;
@@ -32478,6 +32495,15 @@ class InPageListener extends TransportListener {
32478
32495
  }
32479
32496
  this._senderRegistry.set(senderId, entry);
32480
32497
  this._systemToSender.set(entry.systemId, senderId);
32498
+ // Track the flowId if present so we can route responses back
32499
+ if (envelope.flowId) {
32500
+ this._flowIdToSender.set(envelope.flowId, senderId);
32501
+ logger$o.debug('inpage_listener_registered_flow_id', {
32502
+ sender_id: senderId,
32503
+ system_id: entry.systemId,
32504
+ flow_id: envelope.flowId,
32505
+ });
32506
+ }
32481
32507
  await this._deliverEnvelope(entry, envelope);
32482
32508
  }
32483
32509
  async _createConnectorForAttach(params) {
@@ -32525,7 +32551,7 @@ class InPageListener extends TransportListener {
32525
32551
  origin_type: originType,
32526
32552
  connector_type: connector.constructor?.name ?? 'unknown',
32527
32553
  });
32528
- return { connector, systemId, originType };
32554
+ return { connector, systemId, originType, senderId: params.senderId };
32529
32555
  }
32530
32556
  catch (error) {
32531
32557
  logger$o.error('inpage_listener_connector_creation_failed', {
@@ -32579,6 +32605,12 @@ class InPageListener extends TransportListener {
32579
32605
  if (this._systemToSender.get(systemId) === senderId) {
32580
32606
  this._systemToSender.delete(systemId);
32581
32607
  }
32608
+ // Clean up flowId mappings for this sender
32609
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
32610
+ if (sid === senderId) {
32611
+ this._flowIdToSender.delete(flowId);
32612
+ }
32613
+ }
32582
32614
  })
32583
32615
  .catch((error) => {
32584
32616
  logger$o.debug('inpage_listener_wait_until_closed_failed', {
@@ -32590,9 +32622,24 @@ class InPageListener extends TransportListener {
32590
32622
  if (this._systemToSender.get(systemId) === senderId) {
32591
32623
  this._systemToSender.delete(systemId);
32592
32624
  }
32625
+ // Clean up flowId mappings for this sender
32626
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
32627
+ if (sid === senderId) {
32628
+ this._flowIdToSender.delete(flowId);
32629
+ }
32630
+ }
32593
32631
  });
32594
32632
  }
32595
32633
  async _deliverEnvelope(entry, envelope) {
32634
+ // Track flowId for routing responses back
32635
+ if (envelope.flowId && !this._flowIdToSender.has(envelope.flowId)) {
32636
+ this._flowIdToSender.set(envelope.flowId, entry.senderId);
32637
+ logger$o.debug('inpage_listener_registered_flow_id_on_delivery', {
32638
+ sender_id: entry.senderId,
32639
+ system_id: entry.systemId,
32640
+ flow_id: envelope.flowId,
32641
+ });
32642
+ }
32596
32643
  const message = this._buildChannelMessage({
32597
32644
  envelope,
32598
32645
  connector: entry.connector,
@@ -32973,6 +33020,26 @@ class BroadcastChannelListener extends TransportListener {
32973
33020
  inboxCapacity: this._inboxCapacity,
32974
33021
  };
32975
33022
  }
33023
+ // Automatically configure transport frame multiplexing:
33024
+ // Set remoteNodeId to the incoming senderId to target responses back to the specific client/agent
33025
+ const broadcastConfig = connectorConfig;
33026
+ if (!broadcastConfig.remoteNodeId) {
33027
+ broadcastConfig.remoteNodeId = params.senderId;
33028
+ logger$n.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
33029
+ sender_id: params.senderId,
33030
+ system_id: systemId,
33031
+ remote_node_id: params.senderId,
33032
+ local_node_id: broadcastConfig.localNodeId ?? '<not set>',
33033
+ });
33034
+ }
33035
+ else {
33036
+ logger$n.debug('broadcast_channel_listener_using_provided_remote_node_id', {
33037
+ sender_id: params.senderId,
33038
+ system_id: systemId,
33039
+ remote_node_id: broadcastConfig.remoteNodeId,
33040
+ local_node_id: broadcastConfig.localNodeId ?? '<not set>',
33041
+ });
33042
+ }
32976
33043
  try {
32977
33044
  const connector = await routingNode.createOriginConnector({
32978
33045
  originType,
@@ -33042,6 +33109,21 @@ class BroadcastChannelListener extends TransportListener {
33042
33109
  inboxCandidate > 0) {
33043
33110
  config.inboxCapacity = Math.floor(inboxCandidate);
33044
33111
  }
33112
+ // Extract transport frame multiplexing node IDs
33113
+ const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
33114
+ if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
33115
+ config.localNodeId = localNodeIdCandidate.trim();
33116
+ logger$n.debug('broadcast_channel_listener_extracted_local_node_id', {
33117
+ local_node_id: config.localNodeId,
33118
+ });
33119
+ }
33120
+ const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
33121
+ if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
33122
+ config.remoteNodeId = remoteNodeIdCandidate.trim();
33123
+ logger$n.debug('broadcast_channel_listener_extracted_remote_node_id', {
33124
+ remote_node_id: config.remoteNodeId,
33125
+ });
33126
+ }
33045
33127
  return config;
33046
33128
  }
33047
33129
  _monitorConnectorLifecycle(senderId, systemId, connector) {
@@ -5477,12 +5477,12 @@ for (const [name, config] of Object.entries(SQLITE_PROFILES)) {
5477
5477
  }
5478
5478
 
5479
5479
  // This file is auto-generated during build - do not edit manually
5480
- // Generated from package.json version: 0.3.5-test.943
5480
+ // Generated from package.json version: 0.3.5-test.944
5481
5481
  /**
5482
5482
  * The package version, injected at build time.
5483
5483
  * @internal
5484
5484
  */
5485
- const VERSION = '0.3.5-test.943';
5485
+ const VERSION = '0.3.5-test.944';
5486
5486
 
5487
5487
  /**
5488
5488
  * Fame errors module - Fame protocol specific error classes
@@ -32278,6 +32278,7 @@ class InPageListener extends TransportListener {
32278
32278
  this._busHandler = null;
32279
32279
  this._senderRegistry = new Map();
32280
32280
  this._systemToSender = new Map();
32281
+ this._flowIdToSender = new Map();
32281
32282
  this._pendingAttachments = new Map();
32282
32283
  ensureBrowserEnvironment$1();
32283
32284
  const channelCandidate = options?.channelName;
@@ -32344,6 +32345,7 @@ class InPageListener extends TransportListener {
32344
32345
  this._unregisterBusListener();
32345
32346
  this._senderRegistry.clear();
32346
32347
  this._systemToSender.clear();
32348
+ this._flowIdToSender.clear();
32347
32349
  this._pendingAttachments.clear();
32348
32350
  logger$o.debug('inpage_listener_stopped', {
32349
32351
  channel: this._channelName,
@@ -32397,10 +32399,25 @@ class InPageListener extends TransportListener {
32397
32399
  await this._handleAttachFrame(senderId, envelope);
32398
32400
  return;
32399
32401
  }
32400
- const entry = this._senderRegistry.get(senderId);
32402
+ // Try to find connector by sender ID first
32403
+ let entry = this._senderRegistry.get(senderId);
32404
+ // If not found and we have a flowId, try to route based on flow
32405
+ if (!entry && envelope.flowId) {
32406
+ const originalSenderId = this._flowIdToSender.get(envelope.flowId);
32407
+ if (originalSenderId) {
32408
+ entry = this._senderRegistry.get(originalSenderId);
32409
+ logger$o.debug('inpage_listener_routed_by_flow_id', {
32410
+ sender_id: senderId,
32411
+ original_sender_id: originalSenderId,
32412
+ flow_id: envelope.flowId,
32413
+ frame_type: envelope.frame?.type ?? 'unknown',
32414
+ });
32415
+ }
32416
+ }
32401
32417
  if (!entry) {
32402
32418
  logger$o.debug('inpage_listener_no_connector_for_sender', {
32403
32419
  sender_id: senderId,
32420
+ flow_id: envelope.flowId,
32404
32421
  frame_type: envelope.frame?.type ?? 'unknown',
32405
32422
  });
32406
32423
  return;
@@ -32477,6 +32494,15 @@ class InPageListener extends TransportListener {
32477
32494
  }
32478
32495
  this._senderRegistry.set(senderId, entry);
32479
32496
  this._systemToSender.set(entry.systemId, senderId);
32497
+ // Track the flowId if present so we can route responses back
32498
+ if (envelope.flowId) {
32499
+ this._flowIdToSender.set(envelope.flowId, senderId);
32500
+ logger$o.debug('inpage_listener_registered_flow_id', {
32501
+ sender_id: senderId,
32502
+ system_id: entry.systemId,
32503
+ flow_id: envelope.flowId,
32504
+ });
32505
+ }
32480
32506
  await this._deliverEnvelope(entry, envelope);
32481
32507
  }
32482
32508
  async _createConnectorForAttach(params) {
@@ -32524,7 +32550,7 @@ class InPageListener extends TransportListener {
32524
32550
  origin_type: originType,
32525
32551
  connector_type: connector.constructor?.name ?? 'unknown',
32526
32552
  });
32527
- return { connector, systemId, originType };
32553
+ return { connector, systemId, originType, senderId: params.senderId };
32528
32554
  }
32529
32555
  catch (error) {
32530
32556
  logger$o.error('inpage_listener_connector_creation_failed', {
@@ -32578,6 +32604,12 @@ class InPageListener extends TransportListener {
32578
32604
  if (this._systemToSender.get(systemId) === senderId) {
32579
32605
  this._systemToSender.delete(systemId);
32580
32606
  }
32607
+ // Clean up flowId mappings for this sender
32608
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
32609
+ if (sid === senderId) {
32610
+ this._flowIdToSender.delete(flowId);
32611
+ }
32612
+ }
32581
32613
  })
32582
32614
  .catch((error) => {
32583
32615
  logger$o.debug('inpage_listener_wait_until_closed_failed', {
@@ -32589,9 +32621,24 @@ class InPageListener extends TransportListener {
32589
32621
  if (this._systemToSender.get(systemId) === senderId) {
32590
32622
  this._systemToSender.delete(systemId);
32591
32623
  }
32624
+ // Clean up flowId mappings for this sender
32625
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
32626
+ if (sid === senderId) {
32627
+ this._flowIdToSender.delete(flowId);
32628
+ }
32629
+ }
32592
32630
  });
32593
32631
  }
32594
32632
  async _deliverEnvelope(entry, envelope) {
32633
+ // Track flowId for routing responses back
32634
+ if (envelope.flowId && !this._flowIdToSender.has(envelope.flowId)) {
32635
+ this._flowIdToSender.set(envelope.flowId, entry.senderId);
32636
+ logger$o.debug('inpage_listener_registered_flow_id_on_delivery', {
32637
+ sender_id: entry.senderId,
32638
+ system_id: entry.systemId,
32639
+ flow_id: envelope.flowId,
32640
+ });
32641
+ }
32595
32642
  const message = this._buildChannelMessage({
32596
32643
  envelope,
32597
32644
  connector: entry.connector,
@@ -32972,6 +33019,26 @@ class BroadcastChannelListener extends TransportListener {
32972
33019
  inboxCapacity: this._inboxCapacity,
32973
33020
  };
32974
33021
  }
33022
+ // Automatically configure transport frame multiplexing:
33023
+ // Set remoteNodeId to the incoming senderId to target responses back to the specific client/agent
33024
+ const broadcastConfig = connectorConfig;
33025
+ if (!broadcastConfig.remoteNodeId) {
33026
+ broadcastConfig.remoteNodeId = params.senderId;
33027
+ logger$n.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
33028
+ sender_id: params.senderId,
33029
+ system_id: systemId,
33030
+ remote_node_id: params.senderId,
33031
+ local_node_id: broadcastConfig.localNodeId ?? '<not set>',
33032
+ });
33033
+ }
33034
+ else {
33035
+ logger$n.debug('broadcast_channel_listener_using_provided_remote_node_id', {
33036
+ sender_id: params.senderId,
33037
+ system_id: systemId,
33038
+ remote_node_id: broadcastConfig.remoteNodeId,
33039
+ local_node_id: broadcastConfig.localNodeId ?? '<not set>',
33040
+ });
33041
+ }
32975
33042
  try {
32976
33043
  const connector = await routingNode.createOriginConnector({
32977
33044
  originType,
@@ -33041,6 +33108,21 @@ class BroadcastChannelListener extends TransportListener {
33041
33108
  inboxCandidate > 0) {
33042
33109
  config.inboxCapacity = Math.floor(inboxCandidate);
33043
33110
  }
33111
+ // Extract transport frame multiplexing node IDs
33112
+ const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
33113
+ if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
33114
+ config.localNodeId = localNodeIdCandidate.trim();
33115
+ logger$n.debug('broadcast_channel_listener_extracted_local_node_id', {
33116
+ local_node_id: config.localNodeId,
33117
+ });
33118
+ }
33119
+ const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
33120
+ if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
33121
+ config.remoteNodeId = remoteNodeIdCandidate.trim();
33122
+ logger$n.debug('broadcast_channel_listener_extracted_remote_node_id', {
33123
+ remote_node_id: config.remoteNodeId,
33124
+ });
33125
+ }
33044
33126
  return config;
33045
33127
  }
33046
33128
  _monitorConnectorLifecycle(senderId, systemId, connector) {
@@ -14,6 +14,7 @@ export declare class InPageListener extends TransportListener {
14
14
  private _busHandler;
15
15
  private readonly _senderRegistry;
16
16
  private readonly _systemToSender;
17
+ private readonly _flowIdToSender;
17
18
  private readonly _pendingAttachments;
18
19
  constructor(options?: InPageListenerOptions);
19
20
  get channelName(): string;