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

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.945
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.945';
23
23
 
24
24
  /**
25
25
  * Fame protocol specific error classes with WebSocket close codes and proper inheritance.
@@ -36444,6 +36444,29 @@ class BroadcastChannelListener extends TransportListener {
36444
36444
  inboxCapacity: this._inboxCapacity,
36445
36445
  };
36446
36446
  }
36447
+ // Automatically configure transport frame multiplexing:
36448
+ // Use node IDs (not connector IDs) for node-to-node targeting
36449
+ const broadcastConfig = connectorConfig;
36450
+ if (!broadcastConfig.localNodeId) {
36451
+ broadcastConfig.localNodeId = routingNode.id;
36452
+ }
36453
+ if (!broadcastConfig.remoteNodeId) {
36454
+ broadcastConfig.remoteNodeId = systemId;
36455
+ logger$a.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
36456
+ sender_id: params.senderId,
36457
+ system_id: systemId,
36458
+ remote_node_id: systemId,
36459
+ local_node_id: broadcastConfig.localNodeId,
36460
+ });
36461
+ }
36462
+ else {
36463
+ logger$a.debug('broadcast_channel_listener_using_provided_remote_node_id', {
36464
+ sender_id: params.senderId,
36465
+ system_id: systemId,
36466
+ remote_node_id: broadcastConfig.remoteNodeId,
36467
+ local_node_id: broadcastConfig.localNodeId,
36468
+ });
36469
+ }
36447
36470
  try {
36448
36471
  const connector = await routingNode.createOriginConnector({
36449
36472
  originType,
@@ -36513,6 +36536,21 @@ class BroadcastChannelListener extends TransportListener {
36513
36536
  inboxCandidate > 0) {
36514
36537
  config.inboxCapacity = Math.floor(inboxCandidate);
36515
36538
  }
36539
+ // Extract transport frame multiplexing node IDs
36540
+ const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
36541
+ if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
36542
+ config.localNodeId = localNodeIdCandidate.trim();
36543
+ logger$a.debug('broadcast_channel_listener_extracted_local_node_id', {
36544
+ local_node_id: config.localNodeId,
36545
+ });
36546
+ }
36547
+ const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
36548
+ if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
36549
+ config.remoteNodeId = remoteNodeIdCandidate.trim();
36550
+ logger$a.debug('broadcast_channel_listener_extracted_remote_node_id', {
36551
+ remote_node_id: config.remoteNodeId,
36552
+ });
36553
+ }
36516
36554
  return config;
36517
36555
  }
36518
36556
  _monitorConnectorLifecycle(senderId, systemId, connector) {
@@ -37235,6 +37273,7 @@ class InPageListener extends TransportListener {
37235
37273
  this._busHandler = null;
37236
37274
  this._senderRegistry = new Map();
37237
37275
  this._systemToSender = new Map();
37276
+ this._flowIdToSender = new Map();
37238
37277
  this._pendingAttachments = new Map();
37239
37278
  ensureBrowserEnvironment();
37240
37279
  const channelCandidate = options?.channelName;
@@ -37301,6 +37340,7 @@ class InPageListener extends TransportListener {
37301
37340
  this._unregisterBusListener();
37302
37341
  this._senderRegistry.clear();
37303
37342
  this._systemToSender.clear();
37343
+ this._flowIdToSender.clear();
37304
37344
  this._pendingAttachments.clear();
37305
37345
  logger$7.debug('inpage_listener_stopped', {
37306
37346
  channel: this._channelName,
@@ -37354,10 +37394,25 @@ class InPageListener extends TransportListener {
37354
37394
  await this._handleAttachFrame(senderId, envelope);
37355
37395
  return;
37356
37396
  }
37357
- const entry = this._senderRegistry.get(senderId);
37397
+ // Try to find connector by sender ID first
37398
+ let entry = this._senderRegistry.get(senderId);
37399
+ // If not found and we have a flowId, try to route based on flow
37400
+ if (!entry && envelope.flowId) {
37401
+ const originalSenderId = this._flowIdToSender.get(envelope.flowId);
37402
+ if (originalSenderId) {
37403
+ entry = this._senderRegistry.get(originalSenderId);
37404
+ logger$7.debug('inpage_listener_routed_by_flow_id', {
37405
+ sender_id: senderId,
37406
+ original_sender_id: originalSenderId,
37407
+ flow_id: envelope.flowId,
37408
+ frame_type: envelope.frame?.type ?? 'unknown',
37409
+ });
37410
+ }
37411
+ }
37358
37412
  if (!entry) {
37359
37413
  logger$7.debug('inpage_listener_no_connector_for_sender', {
37360
37414
  sender_id: senderId,
37415
+ flow_id: envelope.flowId,
37361
37416
  frame_type: envelope.frame?.type ?? 'unknown',
37362
37417
  });
37363
37418
  return;
@@ -37434,6 +37489,15 @@ class InPageListener extends TransportListener {
37434
37489
  }
37435
37490
  this._senderRegistry.set(senderId, entry);
37436
37491
  this._systemToSender.set(entry.systemId, senderId);
37492
+ // Track the flowId if present so we can route responses back
37493
+ if (envelope.flowId) {
37494
+ this._flowIdToSender.set(envelope.flowId, senderId);
37495
+ logger$7.debug('inpage_listener_registered_flow_id', {
37496
+ sender_id: senderId,
37497
+ system_id: entry.systemId,
37498
+ flow_id: envelope.flowId,
37499
+ });
37500
+ }
37437
37501
  await this._deliverEnvelope(entry, envelope);
37438
37502
  }
37439
37503
  async _createConnectorForAttach(params) {
@@ -37481,7 +37545,7 @@ class InPageListener extends TransportListener {
37481
37545
  origin_type: originType,
37482
37546
  connector_type: connector.constructor?.name ?? 'unknown',
37483
37547
  });
37484
- return { connector, systemId, originType };
37548
+ return { connector, systemId, originType, senderId: params.senderId };
37485
37549
  }
37486
37550
  catch (error) {
37487
37551
  logger$7.error('inpage_listener_connector_creation_failed', {
@@ -37535,6 +37599,12 @@ class InPageListener extends TransportListener {
37535
37599
  if (this._systemToSender.get(systemId) === senderId) {
37536
37600
  this._systemToSender.delete(systemId);
37537
37601
  }
37602
+ // Clean up flowId mappings for this sender
37603
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
37604
+ if (sid === senderId) {
37605
+ this._flowIdToSender.delete(flowId);
37606
+ }
37607
+ }
37538
37608
  })
37539
37609
  .catch((error) => {
37540
37610
  logger$7.debug('inpage_listener_wait_until_closed_failed', {
@@ -37546,9 +37616,24 @@ class InPageListener extends TransportListener {
37546
37616
  if (this._systemToSender.get(systemId) === senderId) {
37547
37617
  this._systemToSender.delete(systemId);
37548
37618
  }
37619
+ // Clean up flowId mappings for this sender
37620
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
37621
+ if (sid === senderId) {
37622
+ this._flowIdToSender.delete(flowId);
37623
+ }
37624
+ }
37549
37625
  });
37550
37626
  }
37551
37627
  async _deliverEnvelope(entry, envelope) {
37628
+ // Track flowId for routing responses back
37629
+ if (envelope.flowId && !this._flowIdToSender.has(envelope.flowId)) {
37630
+ this._flowIdToSender.set(envelope.flowId, entry.senderId);
37631
+ logger$7.debug('inpage_listener_registered_flow_id_on_delivery', {
37632
+ sender_id: entry.senderId,
37633
+ system_id: entry.systemId,
37634
+ flow_id: envelope.flowId,
37635
+ });
37636
+ }
37552
37637
  const message = this._buildChannelMessage({
37553
37638
  envelope,
37554
37639
  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.945
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.945';
22
22
 
23
23
  /**
24
24
  * Fame protocol specific error classes with WebSocket close codes and proper inheritance.
@@ -36443,6 +36443,29 @@ class BroadcastChannelListener extends TransportListener {
36443
36443
  inboxCapacity: this._inboxCapacity,
36444
36444
  };
36445
36445
  }
36446
+ // Automatically configure transport frame multiplexing:
36447
+ // Use node IDs (not connector IDs) for node-to-node targeting
36448
+ const broadcastConfig = connectorConfig;
36449
+ if (!broadcastConfig.localNodeId) {
36450
+ broadcastConfig.localNodeId = routingNode.id;
36451
+ }
36452
+ if (!broadcastConfig.remoteNodeId) {
36453
+ broadcastConfig.remoteNodeId = systemId;
36454
+ logger$a.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
36455
+ sender_id: params.senderId,
36456
+ system_id: systemId,
36457
+ remote_node_id: systemId,
36458
+ local_node_id: broadcastConfig.localNodeId,
36459
+ });
36460
+ }
36461
+ else {
36462
+ logger$a.debug('broadcast_channel_listener_using_provided_remote_node_id', {
36463
+ sender_id: params.senderId,
36464
+ system_id: systemId,
36465
+ remote_node_id: broadcastConfig.remoteNodeId,
36466
+ local_node_id: broadcastConfig.localNodeId,
36467
+ });
36468
+ }
36446
36469
  try {
36447
36470
  const connector = await routingNode.createOriginConnector({
36448
36471
  originType,
@@ -36512,6 +36535,21 @@ class BroadcastChannelListener extends TransportListener {
36512
36535
  inboxCandidate > 0) {
36513
36536
  config.inboxCapacity = Math.floor(inboxCandidate);
36514
36537
  }
36538
+ // Extract transport frame multiplexing node IDs
36539
+ const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
36540
+ if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
36541
+ config.localNodeId = localNodeIdCandidate.trim();
36542
+ logger$a.debug('broadcast_channel_listener_extracted_local_node_id', {
36543
+ local_node_id: config.localNodeId,
36544
+ });
36545
+ }
36546
+ const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
36547
+ if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
36548
+ config.remoteNodeId = remoteNodeIdCandidate.trim();
36549
+ logger$a.debug('broadcast_channel_listener_extracted_remote_node_id', {
36550
+ remote_node_id: config.remoteNodeId,
36551
+ });
36552
+ }
36515
36553
  return config;
36516
36554
  }
36517
36555
  _monitorConnectorLifecycle(senderId, systemId, connector) {
@@ -37234,6 +37272,7 @@ class InPageListener extends TransportListener {
37234
37272
  this._busHandler = null;
37235
37273
  this._senderRegistry = new Map();
37236
37274
  this._systemToSender = new Map();
37275
+ this._flowIdToSender = new Map();
37237
37276
  this._pendingAttachments = new Map();
37238
37277
  ensureBrowserEnvironment();
37239
37278
  const channelCandidate = options?.channelName;
@@ -37300,6 +37339,7 @@ class InPageListener extends TransportListener {
37300
37339
  this._unregisterBusListener();
37301
37340
  this._senderRegistry.clear();
37302
37341
  this._systemToSender.clear();
37342
+ this._flowIdToSender.clear();
37303
37343
  this._pendingAttachments.clear();
37304
37344
  logger$7.debug('inpage_listener_stopped', {
37305
37345
  channel: this._channelName,
@@ -37353,10 +37393,25 @@ class InPageListener extends TransportListener {
37353
37393
  await this._handleAttachFrame(senderId, envelope);
37354
37394
  return;
37355
37395
  }
37356
- const entry = this._senderRegistry.get(senderId);
37396
+ // Try to find connector by sender ID first
37397
+ let entry = this._senderRegistry.get(senderId);
37398
+ // If not found and we have a flowId, try to route based on flow
37399
+ if (!entry && envelope.flowId) {
37400
+ const originalSenderId = this._flowIdToSender.get(envelope.flowId);
37401
+ if (originalSenderId) {
37402
+ entry = this._senderRegistry.get(originalSenderId);
37403
+ logger$7.debug('inpage_listener_routed_by_flow_id', {
37404
+ sender_id: senderId,
37405
+ original_sender_id: originalSenderId,
37406
+ flow_id: envelope.flowId,
37407
+ frame_type: envelope.frame?.type ?? 'unknown',
37408
+ });
37409
+ }
37410
+ }
37357
37411
  if (!entry) {
37358
37412
  logger$7.debug('inpage_listener_no_connector_for_sender', {
37359
37413
  sender_id: senderId,
37414
+ flow_id: envelope.flowId,
37360
37415
  frame_type: envelope.frame?.type ?? 'unknown',
37361
37416
  });
37362
37417
  return;
@@ -37433,6 +37488,15 @@ class InPageListener extends TransportListener {
37433
37488
  }
37434
37489
  this._senderRegistry.set(senderId, entry);
37435
37490
  this._systemToSender.set(entry.systemId, senderId);
37491
+ // Track the flowId if present so we can route responses back
37492
+ if (envelope.flowId) {
37493
+ this._flowIdToSender.set(envelope.flowId, senderId);
37494
+ logger$7.debug('inpage_listener_registered_flow_id', {
37495
+ sender_id: senderId,
37496
+ system_id: entry.systemId,
37497
+ flow_id: envelope.flowId,
37498
+ });
37499
+ }
37436
37500
  await this._deliverEnvelope(entry, envelope);
37437
37501
  }
37438
37502
  async _createConnectorForAttach(params) {
@@ -37480,7 +37544,7 @@ class InPageListener extends TransportListener {
37480
37544
  origin_type: originType,
37481
37545
  connector_type: connector.constructor?.name ?? 'unknown',
37482
37546
  });
37483
- return { connector, systemId, originType };
37547
+ return { connector, systemId, originType, senderId: params.senderId };
37484
37548
  }
37485
37549
  catch (error) {
37486
37550
  logger$7.error('inpage_listener_connector_creation_failed', {
@@ -37534,6 +37598,12 @@ class InPageListener extends TransportListener {
37534
37598
  if (this._systemToSender.get(systemId) === senderId) {
37535
37599
  this._systemToSender.delete(systemId);
37536
37600
  }
37601
+ // Clean up flowId mappings for this sender
37602
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
37603
+ if (sid === senderId) {
37604
+ this._flowIdToSender.delete(flowId);
37605
+ }
37606
+ }
37537
37607
  })
37538
37608
  .catch((error) => {
37539
37609
  logger$7.debug('inpage_listener_wait_until_closed_failed', {
@@ -37545,9 +37615,24 @@ class InPageListener extends TransportListener {
37545
37615
  if (this._systemToSender.get(systemId) === senderId) {
37546
37616
  this._systemToSender.delete(systemId);
37547
37617
  }
37618
+ // Clean up flowId mappings for this sender
37619
+ for (const [flowId, sid] of this._flowIdToSender.entries()) {
37620
+ if (sid === senderId) {
37621
+ this._flowIdToSender.delete(flowId);
37622
+ }
37623
+ }
37548
37624
  });
37549
37625
  }
37550
37626
  async _deliverEnvelope(entry, envelope) {
37627
+ // Track flowId for routing responses back
37628
+ if (envelope.flowId && !this._flowIdToSender.has(envelope.flowId)) {
37629
+ this._flowIdToSender.set(envelope.flowId, entry.senderId);
37630
+ logger$7.debug('inpage_listener_registered_flow_id_on_delivery', {
37631
+ sender_id: entry.senderId,
37632
+ system_id: entry.systemId,
37633
+ flow_id: envelope.flowId,
37634
+ });
37635
+ }
37551
37636
  const message = this._buildChannelMessage({
37552
37637
  envelope,
37553
37638
  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.945
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.945';
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,29 @@ class BroadcastChannelListener extends TransportListener {
32973
33020
  inboxCapacity: this._inboxCapacity,
32974
33021
  };
32975
33022
  }
33023
+ // Automatically configure transport frame multiplexing:
33024
+ // Use node IDs (not connector IDs) for node-to-node targeting
33025
+ const broadcastConfig = connectorConfig;
33026
+ if (!broadcastConfig.localNodeId) {
33027
+ broadcastConfig.localNodeId = routingNode.id;
33028
+ }
33029
+ if (!broadcastConfig.remoteNodeId) {
33030
+ broadcastConfig.remoteNodeId = systemId;
33031
+ logger$n.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
33032
+ sender_id: params.senderId,
33033
+ system_id: systemId,
33034
+ remote_node_id: systemId,
33035
+ local_node_id: broadcastConfig.localNodeId,
33036
+ });
33037
+ }
33038
+ else {
33039
+ logger$n.debug('broadcast_channel_listener_using_provided_remote_node_id', {
33040
+ sender_id: params.senderId,
33041
+ system_id: systemId,
33042
+ remote_node_id: broadcastConfig.remoteNodeId,
33043
+ local_node_id: broadcastConfig.localNodeId,
33044
+ });
33045
+ }
32976
33046
  try {
32977
33047
  const connector = await routingNode.createOriginConnector({
32978
33048
  originType,
@@ -33042,6 +33112,21 @@ class BroadcastChannelListener extends TransportListener {
33042
33112
  inboxCandidate > 0) {
33043
33113
  config.inboxCapacity = Math.floor(inboxCandidate);
33044
33114
  }
33115
+ // Extract transport frame multiplexing node IDs
33116
+ const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
33117
+ if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
33118
+ config.localNodeId = localNodeIdCandidate.trim();
33119
+ logger$n.debug('broadcast_channel_listener_extracted_local_node_id', {
33120
+ local_node_id: config.localNodeId,
33121
+ });
33122
+ }
33123
+ const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
33124
+ if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
33125
+ config.remoteNodeId = remoteNodeIdCandidate.trim();
33126
+ logger$n.debug('broadcast_channel_listener_extracted_remote_node_id', {
33127
+ remote_node_id: config.remoteNodeId,
33128
+ });
33129
+ }
33045
33130
  return config;
33046
33131
  }
33047
33132
  _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.945
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.945';
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,29 @@ class BroadcastChannelListener extends TransportListener {
32972
33019
  inboxCapacity: this._inboxCapacity,
32973
33020
  };
32974
33021
  }
33022
+ // Automatically configure transport frame multiplexing:
33023
+ // Use node IDs (not connector IDs) for node-to-node targeting
33024
+ const broadcastConfig = connectorConfig;
33025
+ if (!broadcastConfig.localNodeId) {
33026
+ broadcastConfig.localNodeId = routingNode.id;
33027
+ }
33028
+ if (!broadcastConfig.remoteNodeId) {
33029
+ broadcastConfig.remoteNodeId = systemId;
33030
+ logger$n.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
33031
+ sender_id: params.senderId,
33032
+ system_id: systemId,
33033
+ remote_node_id: systemId,
33034
+ local_node_id: broadcastConfig.localNodeId,
33035
+ });
33036
+ }
33037
+ else {
33038
+ logger$n.debug('broadcast_channel_listener_using_provided_remote_node_id', {
33039
+ sender_id: params.senderId,
33040
+ system_id: systemId,
33041
+ remote_node_id: broadcastConfig.remoteNodeId,
33042
+ local_node_id: broadcastConfig.localNodeId,
33043
+ });
33044
+ }
32975
33045
  try {
32976
33046
  const connector = await routingNode.createOriginConnector({
32977
33047
  originType,
@@ -33041,6 +33111,21 @@ class BroadcastChannelListener extends TransportListener {
33041
33111
  inboxCandidate > 0) {
33042
33112
  config.inboxCapacity = Math.floor(inboxCandidate);
33043
33113
  }
33114
+ // Extract transport frame multiplexing node IDs
33115
+ const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
33116
+ if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
33117
+ config.localNodeId = localNodeIdCandidate.trim();
33118
+ logger$n.debug('broadcast_channel_listener_extracted_local_node_id', {
33119
+ local_node_id: config.localNodeId,
33120
+ });
33121
+ }
33122
+ const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
33123
+ if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
33124
+ config.remoteNodeId = remoteNodeIdCandidate.trim();
33125
+ logger$n.debug('broadcast_channel_listener_extracted_remote_node_id', {
33126
+ remote_node_id: config.remoteNodeId,
33127
+ });
33128
+ }
33044
33129
  return config;
33045
33130
  }
33046
33131
  _monitorConnectorLifecycle(senderId, systemId, connector) {