@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.
- package/dist/browser/index.cjs +89 -4
- package/dist/browser/index.mjs +89 -4
- package/dist/cjs/naylence/fame/connector/broadcast-channel-listener.js +38 -0
- package/dist/cjs/naylence/fame/connector/inpage-listener.js +49 -2
- package/dist/cjs/version.js +2 -2
- package/dist/esm/naylence/fame/connector/broadcast-channel-listener.js +38 -0
- package/dist/esm/naylence/fame/connector/inpage-listener.js +49 -2
- package/dist/esm/version.js +2 -2
- package/dist/node/index.cjs +89 -4
- package/dist/node/index.mjs +89 -4
- package/dist/node/node.cjs +89 -4
- package/dist/node/node.mjs +89 -4
- package/dist/types/naylence/fame/connector/inpage-listener.d.ts +1 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
package/dist/browser/index.cjs
CHANGED
|
@@ -98,12 +98,12 @@ installProcessEnvShim();
|
|
|
98
98
|
// --- END ENV SHIM ---
|
|
99
99
|
|
|
100
100
|
// This file is auto-generated during build - do not edit manually
|
|
101
|
-
// Generated from package.json version: 0.3.5-test.
|
|
101
|
+
// Generated from package.json version: 0.3.5-test.945
|
|
102
102
|
/**
|
|
103
103
|
* The package version, injected at build time.
|
|
104
104
|
* @internal
|
|
105
105
|
*/
|
|
106
|
-
const VERSION = '0.3.5-test.
|
|
106
|
+
const VERSION = '0.3.5-test.945';
|
|
107
107
|
|
|
108
108
|
/**
|
|
109
109
|
* Fame protocol specific error classes with WebSocket close codes and proper inheritance.
|
|
@@ -29460,6 +29460,7 @@ class InPageListener extends TransportListener {
|
|
|
29460
29460
|
this._busHandler = null;
|
|
29461
29461
|
this._senderRegistry = new Map();
|
|
29462
29462
|
this._systemToSender = new Map();
|
|
29463
|
+
this._flowIdToSender = new Map();
|
|
29463
29464
|
this._pendingAttachments = new Map();
|
|
29464
29465
|
ensureBrowserEnvironment$1();
|
|
29465
29466
|
const channelCandidate = options?.channelName;
|
|
@@ -29526,6 +29527,7 @@ class InPageListener extends TransportListener {
|
|
|
29526
29527
|
this._unregisterBusListener();
|
|
29527
29528
|
this._senderRegistry.clear();
|
|
29528
29529
|
this._systemToSender.clear();
|
|
29530
|
+
this._flowIdToSender.clear();
|
|
29529
29531
|
this._pendingAttachments.clear();
|
|
29530
29532
|
logger$p.debug('inpage_listener_stopped', {
|
|
29531
29533
|
channel: this._channelName,
|
|
@@ -29579,10 +29581,25 @@ class InPageListener extends TransportListener {
|
|
|
29579
29581
|
await this._handleAttachFrame(senderId, envelope);
|
|
29580
29582
|
return;
|
|
29581
29583
|
}
|
|
29582
|
-
|
|
29584
|
+
// Try to find connector by sender ID first
|
|
29585
|
+
let entry = this._senderRegistry.get(senderId);
|
|
29586
|
+
// If not found and we have a flowId, try to route based on flow
|
|
29587
|
+
if (!entry && envelope.flowId) {
|
|
29588
|
+
const originalSenderId = this._flowIdToSender.get(envelope.flowId);
|
|
29589
|
+
if (originalSenderId) {
|
|
29590
|
+
entry = this._senderRegistry.get(originalSenderId);
|
|
29591
|
+
logger$p.debug('inpage_listener_routed_by_flow_id', {
|
|
29592
|
+
sender_id: senderId,
|
|
29593
|
+
original_sender_id: originalSenderId,
|
|
29594
|
+
flow_id: envelope.flowId,
|
|
29595
|
+
frame_type: envelope.frame?.type ?? 'unknown',
|
|
29596
|
+
});
|
|
29597
|
+
}
|
|
29598
|
+
}
|
|
29583
29599
|
if (!entry) {
|
|
29584
29600
|
logger$p.debug('inpage_listener_no_connector_for_sender', {
|
|
29585
29601
|
sender_id: senderId,
|
|
29602
|
+
flow_id: envelope.flowId,
|
|
29586
29603
|
frame_type: envelope.frame?.type ?? 'unknown',
|
|
29587
29604
|
});
|
|
29588
29605
|
return;
|
|
@@ -29659,6 +29676,15 @@ class InPageListener extends TransportListener {
|
|
|
29659
29676
|
}
|
|
29660
29677
|
this._senderRegistry.set(senderId, entry);
|
|
29661
29678
|
this._systemToSender.set(entry.systemId, senderId);
|
|
29679
|
+
// Track the flowId if present so we can route responses back
|
|
29680
|
+
if (envelope.flowId) {
|
|
29681
|
+
this._flowIdToSender.set(envelope.flowId, senderId);
|
|
29682
|
+
logger$p.debug('inpage_listener_registered_flow_id', {
|
|
29683
|
+
sender_id: senderId,
|
|
29684
|
+
system_id: entry.systemId,
|
|
29685
|
+
flow_id: envelope.flowId,
|
|
29686
|
+
});
|
|
29687
|
+
}
|
|
29662
29688
|
await this._deliverEnvelope(entry, envelope);
|
|
29663
29689
|
}
|
|
29664
29690
|
async _createConnectorForAttach(params) {
|
|
@@ -29706,7 +29732,7 @@ class InPageListener extends TransportListener {
|
|
|
29706
29732
|
origin_type: originType,
|
|
29707
29733
|
connector_type: connector.constructor?.name ?? 'unknown',
|
|
29708
29734
|
});
|
|
29709
|
-
return { connector, systemId, originType };
|
|
29735
|
+
return { connector, systemId, originType, senderId: params.senderId };
|
|
29710
29736
|
}
|
|
29711
29737
|
catch (error) {
|
|
29712
29738
|
logger$p.error('inpage_listener_connector_creation_failed', {
|
|
@@ -29760,6 +29786,12 @@ class InPageListener extends TransportListener {
|
|
|
29760
29786
|
if (this._systemToSender.get(systemId) === senderId) {
|
|
29761
29787
|
this._systemToSender.delete(systemId);
|
|
29762
29788
|
}
|
|
29789
|
+
// Clean up flowId mappings for this sender
|
|
29790
|
+
for (const [flowId, sid] of this._flowIdToSender.entries()) {
|
|
29791
|
+
if (sid === senderId) {
|
|
29792
|
+
this._flowIdToSender.delete(flowId);
|
|
29793
|
+
}
|
|
29794
|
+
}
|
|
29763
29795
|
})
|
|
29764
29796
|
.catch((error) => {
|
|
29765
29797
|
logger$p.debug('inpage_listener_wait_until_closed_failed', {
|
|
@@ -29771,9 +29803,24 @@ class InPageListener extends TransportListener {
|
|
|
29771
29803
|
if (this._systemToSender.get(systemId) === senderId) {
|
|
29772
29804
|
this._systemToSender.delete(systemId);
|
|
29773
29805
|
}
|
|
29806
|
+
// Clean up flowId mappings for this sender
|
|
29807
|
+
for (const [flowId, sid] of this._flowIdToSender.entries()) {
|
|
29808
|
+
if (sid === senderId) {
|
|
29809
|
+
this._flowIdToSender.delete(flowId);
|
|
29810
|
+
}
|
|
29811
|
+
}
|
|
29774
29812
|
});
|
|
29775
29813
|
}
|
|
29776
29814
|
async _deliverEnvelope(entry, envelope) {
|
|
29815
|
+
// Track flowId for routing responses back
|
|
29816
|
+
if (envelope.flowId && !this._flowIdToSender.has(envelope.flowId)) {
|
|
29817
|
+
this._flowIdToSender.set(envelope.flowId, entry.senderId);
|
|
29818
|
+
logger$p.debug('inpage_listener_registered_flow_id_on_delivery', {
|
|
29819
|
+
sender_id: entry.senderId,
|
|
29820
|
+
system_id: entry.systemId,
|
|
29821
|
+
flow_id: envelope.flowId,
|
|
29822
|
+
});
|
|
29823
|
+
}
|
|
29777
29824
|
const message = this._buildChannelMessage({
|
|
29778
29825
|
envelope,
|
|
29779
29826
|
connector: entry.connector,
|
|
@@ -30216,6 +30263,29 @@ class BroadcastChannelListener extends TransportListener {
|
|
|
30216
30263
|
inboxCapacity: this._inboxCapacity,
|
|
30217
30264
|
};
|
|
30218
30265
|
}
|
|
30266
|
+
// Automatically configure transport frame multiplexing:
|
|
30267
|
+
// Use node IDs (not connector IDs) for node-to-node targeting
|
|
30268
|
+
const broadcastConfig = connectorConfig;
|
|
30269
|
+
if (!broadcastConfig.localNodeId) {
|
|
30270
|
+
broadcastConfig.localNodeId = routingNode.id;
|
|
30271
|
+
}
|
|
30272
|
+
if (!broadcastConfig.remoteNodeId) {
|
|
30273
|
+
broadcastConfig.remoteNodeId = systemId;
|
|
30274
|
+
logger$o.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
|
|
30275
|
+
sender_id: params.senderId,
|
|
30276
|
+
system_id: systemId,
|
|
30277
|
+
remote_node_id: systemId,
|
|
30278
|
+
local_node_id: broadcastConfig.localNodeId,
|
|
30279
|
+
});
|
|
30280
|
+
}
|
|
30281
|
+
else {
|
|
30282
|
+
logger$o.debug('broadcast_channel_listener_using_provided_remote_node_id', {
|
|
30283
|
+
sender_id: params.senderId,
|
|
30284
|
+
system_id: systemId,
|
|
30285
|
+
remote_node_id: broadcastConfig.remoteNodeId,
|
|
30286
|
+
local_node_id: broadcastConfig.localNodeId,
|
|
30287
|
+
});
|
|
30288
|
+
}
|
|
30219
30289
|
try {
|
|
30220
30290
|
const connector = await routingNode.createOriginConnector({
|
|
30221
30291
|
originType,
|
|
@@ -30285,6 +30355,21 @@ class BroadcastChannelListener extends TransportListener {
|
|
|
30285
30355
|
inboxCandidate > 0) {
|
|
30286
30356
|
config.inboxCapacity = Math.floor(inboxCandidate);
|
|
30287
30357
|
}
|
|
30358
|
+
// Extract transport frame multiplexing node IDs
|
|
30359
|
+
const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
|
|
30360
|
+
if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
|
|
30361
|
+
config.localNodeId = localNodeIdCandidate.trim();
|
|
30362
|
+
logger$o.debug('broadcast_channel_listener_extracted_local_node_id', {
|
|
30363
|
+
local_node_id: config.localNodeId,
|
|
30364
|
+
});
|
|
30365
|
+
}
|
|
30366
|
+
const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
|
|
30367
|
+
if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
|
|
30368
|
+
config.remoteNodeId = remoteNodeIdCandidate.trim();
|
|
30369
|
+
logger$o.debug('broadcast_channel_listener_extracted_remote_node_id', {
|
|
30370
|
+
remote_node_id: config.remoteNodeId,
|
|
30371
|
+
});
|
|
30372
|
+
}
|
|
30288
30373
|
return config;
|
|
30289
30374
|
}
|
|
30290
30375
|
_monitorConnectorLifecycle(senderId, systemId, connector) {
|
package/dist/browser/index.mjs
CHANGED
|
@@ -96,12 +96,12 @@ installProcessEnvShim();
|
|
|
96
96
|
// --- END ENV SHIM ---
|
|
97
97
|
|
|
98
98
|
// This file is auto-generated during build - do not edit manually
|
|
99
|
-
// Generated from package.json version: 0.3.5-test.
|
|
99
|
+
// Generated from package.json version: 0.3.5-test.945
|
|
100
100
|
/**
|
|
101
101
|
* The package version, injected at build time.
|
|
102
102
|
* @internal
|
|
103
103
|
*/
|
|
104
|
-
const VERSION = '0.3.5-test.
|
|
104
|
+
const VERSION = '0.3.5-test.945';
|
|
105
105
|
|
|
106
106
|
/**
|
|
107
107
|
* Fame protocol specific error classes with WebSocket close codes and proper inheritance.
|
|
@@ -29458,6 +29458,7 @@ class InPageListener extends TransportListener {
|
|
|
29458
29458
|
this._busHandler = null;
|
|
29459
29459
|
this._senderRegistry = new Map();
|
|
29460
29460
|
this._systemToSender = new Map();
|
|
29461
|
+
this._flowIdToSender = new Map();
|
|
29461
29462
|
this._pendingAttachments = new Map();
|
|
29462
29463
|
ensureBrowserEnvironment$1();
|
|
29463
29464
|
const channelCandidate = options?.channelName;
|
|
@@ -29524,6 +29525,7 @@ class InPageListener extends TransportListener {
|
|
|
29524
29525
|
this._unregisterBusListener();
|
|
29525
29526
|
this._senderRegistry.clear();
|
|
29526
29527
|
this._systemToSender.clear();
|
|
29528
|
+
this._flowIdToSender.clear();
|
|
29527
29529
|
this._pendingAttachments.clear();
|
|
29528
29530
|
logger$p.debug('inpage_listener_stopped', {
|
|
29529
29531
|
channel: this._channelName,
|
|
@@ -29577,10 +29579,25 @@ class InPageListener extends TransportListener {
|
|
|
29577
29579
|
await this._handleAttachFrame(senderId, envelope);
|
|
29578
29580
|
return;
|
|
29579
29581
|
}
|
|
29580
|
-
|
|
29582
|
+
// Try to find connector by sender ID first
|
|
29583
|
+
let entry = this._senderRegistry.get(senderId);
|
|
29584
|
+
// If not found and we have a flowId, try to route based on flow
|
|
29585
|
+
if (!entry && envelope.flowId) {
|
|
29586
|
+
const originalSenderId = this._flowIdToSender.get(envelope.flowId);
|
|
29587
|
+
if (originalSenderId) {
|
|
29588
|
+
entry = this._senderRegistry.get(originalSenderId);
|
|
29589
|
+
logger$p.debug('inpage_listener_routed_by_flow_id', {
|
|
29590
|
+
sender_id: senderId,
|
|
29591
|
+
original_sender_id: originalSenderId,
|
|
29592
|
+
flow_id: envelope.flowId,
|
|
29593
|
+
frame_type: envelope.frame?.type ?? 'unknown',
|
|
29594
|
+
});
|
|
29595
|
+
}
|
|
29596
|
+
}
|
|
29581
29597
|
if (!entry) {
|
|
29582
29598
|
logger$p.debug('inpage_listener_no_connector_for_sender', {
|
|
29583
29599
|
sender_id: senderId,
|
|
29600
|
+
flow_id: envelope.flowId,
|
|
29584
29601
|
frame_type: envelope.frame?.type ?? 'unknown',
|
|
29585
29602
|
});
|
|
29586
29603
|
return;
|
|
@@ -29657,6 +29674,15 @@ class InPageListener extends TransportListener {
|
|
|
29657
29674
|
}
|
|
29658
29675
|
this._senderRegistry.set(senderId, entry);
|
|
29659
29676
|
this._systemToSender.set(entry.systemId, senderId);
|
|
29677
|
+
// Track the flowId if present so we can route responses back
|
|
29678
|
+
if (envelope.flowId) {
|
|
29679
|
+
this._flowIdToSender.set(envelope.flowId, senderId);
|
|
29680
|
+
logger$p.debug('inpage_listener_registered_flow_id', {
|
|
29681
|
+
sender_id: senderId,
|
|
29682
|
+
system_id: entry.systemId,
|
|
29683
|
+
flow_id: envelope.flowId,
|
|
29684
|
+
});
|
|
29685
|
+
}
|
|
29660
29686
|
await this._deliverEnvelope(entry, envelope);
|
|
29661
29687
|
}
|
|
29662
29688
|
async _createConnectorForAttach(params) {
|
|
@@ -29704,7 +29730,7 @@ class InPageListener extends TransportListener {
|
|
|
29704
29730
|
origin_type: originType,
|
|
29705
29731
|
connector_type: connector.constructor?.name ?? 'unknown',
|
|
29706
29732
|
});
|
|
29707
|
-
return { connector, systemId, originType };
|
|
29733
|
+
return { connector, systemId, originType, senderId: params.senderId };
|
|
29708
29734
|
}
|
|
29709
29735
|
catch (error) {
|
|
29710
29736
|
logger$p.error('inpage_listener_connector_creation_failed', {
|
|
@@ -29758,6 +29784,12 @@ class InPageListener extends TransportListener {
|
|
|
29758
29784
|
if (this._systemToSender.get(systemId) === senderId) {
|
|
29759
29785
|
this._systemToSender.delete(systemId);
|
|
29760
29786
|
}
|
|
29787
|
+
// Clean up flowId mappings for this sender
|
|
29788
|
+
for (const [flowId, sid] of this._flowIdToSender.entries()) {
|
|
29789
|
+
if (sid === senderId) {
|
|
29790
|
+
this._flowIdToSender.delete(flowId);
|
|
29791
|
+
}
|
|
29792
|
+
}
|
|
29761
29793
|
})
|
|
29762
29794
|
.catch((error) => {
|
|
29763
29795
|
logger$p.debug('inpage_listener_wait_until_closed_failed', {
|
|
@@ -29769,9 +29801,24 @@ class InPageListener extends TransportListener {
|
|
|
29769
29801
|
if (this._systemToSender.get(systemId) === senderId) {
|
|
29770
29802
|
this._systemToSender.delete(systemId);
|
|
29771
29803
|
}
|
|
29804
|
+
// Clean up flowId mappings for this sender
|
|
29805
|
+
for (const [flowId, sid] of this._flowIdToSender.entries()) {
|
|
29806
|
+
if (sid === senderId) {
|
|
29807
|
+
this._flowIdToSender.delete(flowId);
|
|
29808
|
+
}
|
|
29809
|
+
}
|
|
29772
29810
|
});
|
|
29773
29811
|
}
|
|
29774
29812
|
async _deliverEnvelope(entry, envelope) {
|
|
29813
|
+
// Track flowId for routing responses back
|
|
29814
|
+
if (envelope.flowId && !this._flowIdToSender.has(envelope.flowId)) {
|
|
29815
|
+
this._flowIdToSender.set(envelope.flowId, entry.senderId);
|
|
29816
|
+
logger$p.debug('inpage_listener_registered_flow_id_on_delivery', {
|
|
29817
|
+
sender_id: entry.senderId,
|
|
29818
|
+
system_id: entry.systemId,
|
|
29819
|
+
flow_id: envelope.flowId,
|
|
29820
|
+
});
|
|
29821
|
+
}
|
|
29775
29822
|
const message = this._buildChannelMessage({
|
|
29776
29823
|
envelope,
|
|
29777
29824
|
connector: entry.connector,
|
|
@@ -30214,6 +30261,29 @@ class BroadcastChannelListener extends TransportListener {
|
|
|
30214
30261
|
inboxCapacity: this._inboxCapacity,
|
|
30215
30262
|
};
|
|
30216
30263
|
}
|
|
30264
|
+
// Automatically configure transport frame multiplexing:
|
|
30265
|
+
// Use node IDs (not connector IDs) for node-to-node targeting
|
|
30266
|
+
const broadcastConfig = connectorConfig;
|
|
30267
|
+
if (!broadcastConfig.localNodeId) {
|
|
30268
|
+
broadcastConfig.localNodeId = routingNode.id;
|
|
30269
|
+
}
|
|
30270
|
+
if (!broadcastConfig.remoteNodeId) {
|
|
30271
|
+
broadcastConfig.remoteNodeId = systemId;
|
|
30272
|
+
logger$o.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
|
|
30273
|
+
sender_id: params.senderId,
|
|
30274
|
+
system_id: systemId,
|
|
30275
|
+
remote_node_id: systemId,
|
|
30276
|
+
local_node_id: broadcastConfig.localNodeId,
|
|
30277
|
+
});
|
|
30278
|
+
}
|
|
30279
|
+
else {
|
|
30280
|
+
logger$o.debug('broadcast_channel_listener_using_provided_remote_node_id', {
|
|
30281
|
+
sender_id: params.senderId,
|
|
30282
|
+
system_id: systemId,
|
|
30283
|
+
remote_node_id: broadcastConfig.remoteNodeId,
|
|
30284
|
+
local_node_id: broadcastConfig.localNodeId,
|
|
30285
|
+
});
|
|
30286
|
+
}
|
|
30217
30287
|
try {
|
|
30218
30288
|
const connector = await routingNode.createOriginConnector({
|
|
30219
30289
|
originType,
|
|
@@ -30283,6 +30353,21 @@ class BroadcastChannelListener extends TransportListener {
|
|
|
30283
30353
|
inboxCandidate > 0) {
|
|
30284
30354
|
config.inboxCapacity = Math.floor(inboxCandidate);
|
|
30285
30355
|
}
|
|
30356
|
+
// Extract transport frame multiplexing node IDs
|
|
30357
|
+
const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
|
|
30358
|
+
if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
|
|
30359
|
+
config.localNodeId = localNodeIdCandidate.trim();
|
|
30360
|
+
logger$o.debug('broadcast_channel_listener_extracted_local_node_id', {
|
|
30361
|
+
local_node_id: config.localNodeId,
|
|
30362
|
+
});
|
|
30363
|
+
}
|
|
30364
|
+
const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
|
|
30365
|
+
if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
|
|
30366
|
+
config.remoteNodeId = remoteNodeIdCandidate.trim();
|
|
30367
|
+
logger$o.debug('broadcast_channel_listener_extracted_remote_node_id', {
|
|
30368
|
+
remote_node_id: config.remoteNodeId,
|
|
30369
|
+
});
|
|
30370
|
+
}
|
|
30286
30371
|
return config;
|
|
30287
30372
|
}
|
|
30288
30373
|
_monitorConnectorLifecycle(senderId, systemId, connector) {
|
|
@@ -344,6 +344,29 @@ class BroadcastChannelListener extends transport_listener_js_1.TransportListener
|
|
|
344
344
|
inboxCapacity: this._inboxCapacity,
|
|
345
345
|
};
|
|
346
346
|
}
|
|
347
|
+
// Automatically configure transport frame multiplexing:
|
|
348
|
+
// Use node IDs (not connector IDs) for node-to-node targeting
|
|
349
|
+
const broadcastConfig = connectorConfig;
|
|
350
|
+
if (!broadcastConfig.localNodeId) {
|
|
351
|
+
broadcastConfig.localNodeId = routingNode.id;
|
|
352
|
+
}
|
|
353
|
+
if (!broadcastConfig.remoteNodeId) {
|
|
354
|
+
broadcastConfig.remoteNodeId = systemId;
|
|
355
|
+
logger.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
|
|
356
|
+
sender_id: params.senderId,
|
|
357
|
+
system_id: systemId,
|
|
358
|
+
remote_node_id: systemId,
|
|
359
|
+
local_node_id: broadcastConfig.localNodeId,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
logger.debug('broadcast_channel_listener_using_provided_remote_node_id', {
|
|
364
|
+
sender_id: params.senderId,
|
|
365
|
+
system_id: systemId,
|
|
366
|
+
remote_node_id: broadcastConfig.remoteNodeId,
|
|
367
|
+
local_node_id: broadcastConfig.localNodeId,
|
|
368
|
+
});
|
|
369
|
+
}
|
|
347
370
|
try {
|
|
348
371
|
const connector = await routingNode.createOriginConnector({
|
|
349
372
|
originType,
|
|
@@ -413,6 +436,21 @@ class BroadcastChannelListener extends transport_listener_js_1.TransportListener
|
|
|
413
436
|
inboxCandidate > 0) {
|
|
414
437
|
config.inboxCapacity = Math.floor(inboxCandidate);
|
|
415
438
|
}
|
|
439
|
+
// Extract transport frame multiplexing node IDs
|
|
440
|
+
const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
|
|
441
|
+
if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
|
|
442
|
+
config.localNodeId = localNodeIdCandidate.trim();
|
|
443
|
+
logger.debug('broadcast_channel_listener_extracted_local_node_id', {
|
|
444
|
+
local_node_id: config.localNodeId,
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
|
|
448
|
+
if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
|
|
449
|
+
config.remoteNodeId = remoteNodeIdCandidate.trim();
|
|
450
|
+
logger.debug('broadcast_channel_listener_extracted_remote_node_id', {
|
|
451
|
+
remote_node_id: config.remoteNodeId,
|
|
452
|
+
});
|
|
453
|
+
}
|
|
416
454
|
return config;
|
|
417
455
|
}
|
|
418
456
|
_monitorConnectorLifecycle(senderId, systemId, connector) {
|
|
@@ -65,6 +65,7 @@ class InPageListener extends transport_listener_js_1.TransportListener {
|
|
|
65
65
|
this._busHandler = null;
|
|
66
66
|
this._senderRegistry = new Map();
|
|
67
67
|
this._systemToSender = new Map();
|
|
68
|
+
this._flowIdToSender = new Map();
|
|
68
69
|
this._pendingAttachments = new Map();
|
|
69
70
|
ensureBrowserEnvironment();
|
|
70
71
|
const channelCandidate = options?.channelName;
|
|
@@ -131,6 +132,7 @@ class InPageListener extends transport_listener_js_1.TransportListener {
|
|
|
131
132
|
this._unregisterBusListener();
|
|
132
133
|
this._senderRegistry.clear();
|
|
133
134
|
this._systemToSender.clear();
|
|
135
|
+
this._flowIdToSender.clear();
|
|
134
136
|
this._pendingAttachments.clear();
|
|
135
137
|
logger.debug('inpage_listener_stopped', {
|
|
136
138
|
channel: this._channelName,
|
|
@@ -184,10 +186,25 @@ class InPageListener extends transport_listener_js_1.TransportListener {
|
|
|
184
186
|
await this._handleAttachFrame(senderId, envelope);
|
|
185
187
|
return;
|
|
186
188
|
}
|
|
187
|
-
|
|
189
|
+
// Try to find connector by sender ID first
|
|
190
|
+
let entry = this._senderRegistry.get(senderId);
|
|
191
|
+
// If not found and we have a flowId, try to route based on flow
|
|
192
|
+
if (!entry && envelope.flowId) {
|
|
193
|
+
const originalSenderId = this._flowIdToSender.get(envelope.flowId);
|
|
194
|
+
if (originalSenderId) {
|
|
195
|
+
entry = this._senderRegistry.get(originalSenderId);
|
|
196
|
+
logger.debug('inpage_listener_routed_by_flow_id', {
|
|
197
|
+
sender_id: senderId,
|
|
198
|
+
original_sender_id: originalSenderId,
|
|
199
|
+
flow_id: envelope.flowId,
|
|
200
|
+
frame_type: envelope.frame?.type ?? 'unknown',
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
188
204
|
if (!entry) {
|
|
189
205
|
logger.debug('inpage_listener_no_connector_for_sender', {
|
|
190
206
|
sender_id: senderId,
|
|
207
|
+
flow_id: envelope.flowId,
|
|
191
208
|
frame_type: envelope.frame?.type ?? 'unknown',
|
|
192
209
|
});
|
|
193
210
|
return;
|
|
@@ -264,6 +281,15 @@ class InPageListener extends transport_listener_js_1.TransportListener {
|
|
|
264
281
|
}
|
|
265
282
|
this._senderRegistry.set(senderId, entry);
|
|
266
283
|
this._systemToSender.set(entry.systemId, senderId);
|
|
284
|
+
// Track the flowId if present so we can route responses back
|
|
285
|
+
if (envelope.flowId) {
|
|
286
|
+
this._flowIdToSender.set(envelope.flowId, senderId);
|
|
287
|
+
logger.debug('inpage_listener_registered_flow_id', {
|
|
288
|
+
sender_id: senderId,
|
|
289
|
+
system_id: entry.systemId,
|
|
290
|
+
flow_id: envelope.flowId,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
267
293
|
await this._deliverEnvelope(entry, envelope);
|
|
268
294
|
}
|
|
269
295
|
async _createConnectorForAttach(params) {
|
|
@@ -311,7 +337,7 @@ class InPageListener extends transport_listener_js_1.TransportListener {
|
|
|
311
337
|
origin_type: originType,
|
|
312
338
|
connector_type: connector.constructor?.name ?? 'unknown',
|
|
313
339
|
});
|
|
314
|
-
return { connector, systemId, originType };
|
|
340
|
+
return { connector, systemId, originType, senderId: params.senderId };
|
|
315
341
|
}
|
|
316
342
|
catch (error) {
|
|
317
343
|
logger.error('inpage_listener_connector_creation_failed', {
|
|
@@ -365,6 +391,12 @@ class InPageListener extends transport_listener_js_1.TransportListener {
|
|
|
365
391
|
if (this._systemToSender.get(systemId) === senderId) {
|
|
366
392
|
this._systemToSender.delete(systemId);
|
|
367
393
|
}
|
|
394
|
+
// Clean up flowId mappings for this sender
|
|
395
|
+
for (const [flowId, sid] of this._flowIdToSender.entries()) {
|
|
396
|
+
if (sid === senderId) {
|
|
397
|
+
this._flowIdToSender.delete(flowId);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
368
400
|
})
|
|
369
401
|
.catch((error) => {
|
|
370
402
|
logger.debug('inpage_listener_wait_until_closed_failed', {
|
|
@@ -376,9 +408,24 @@ class InPageListener extends transport_listener_js_1.TransportListener {
|
|
|
376
408
|
if (this._systemToSender.get(systemId) === senderId) {
|
|
377
409
|
this._systemToSender.delete(systemId);
|
|
378
410
|
}
|
|
411
|
+
// Clean up flowId mappings for this sender
|
|
412
|
+
for (const [flowId, sid] of this._flowIdToSender.entries()) {
|
|
413
|
+
if (sid === senderId) {
|
|
414
|
+
this._flowIdToSender.delete(flowId);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
379
417
|
});
|
|
380
418
|
}
|
|
381
419
|
async _deliverEnvelope(entry, envelope) {
|
|
420
|
+
// Track flowId for routing responses back
|
|
421
|
+
if (envelope.flowId && !this._flowIdToSender.has(envelope.flowId)) {
|
|
422
|
+
this._flowIdToSender.set(envelope.flowId, entry.senderId);
|
|
423
|
+
logger.debug('inpage_listener_registered_flow_id_on_delivery', {
|
|
424
|
+
sender_id: entry.senderId,
|
|
425
|
+
system_id: entry.systemId,
|
|
426
|
+
flow_id: envelope.flowId,
|
|
427
|
+
});
|
|
428
|
+
}
|
|
382
429
|
const message = this._buildChannelMessage({
|
|
383
430
|
envelope,
|
|
384
431
|
connector: entry.connector,
|
package/dist/cjs/version.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// This file is auto-generated during build - do not edit manually
|
|
3
|
-
// Generated from package.json version: 0.3.5-test.
|
|
3
|
+
// Generated from package.json version: 0.3.5-test.945
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.VERSION = void 0;
|
|
6
6
|
/**
|
|
7
7
|
* The package version, injected at build time.
|
|
8
8
|
* @internal
|
|
9
9
|
*/
|
|
10
|
-
exports.VERSION = '0.3.5-test.
|
|
10
|
+
exports.VERSION = '0.3.5-test.945';
|
|
@@ -340,6 +340,29 @@ export class BroadcastChannelListener extends TransportListener {
|
|
|
340
340
|
inboxCapacity: this._inboxCapacity,
|
|
341
341
|
};
|
|
342
342
|
}
|
|
343
|
+
// Automatically configure transport frame multiplexing:
|
|
344
|
+
// Use node IDs (not connector IDs) for node-to-node targeting
|
|
345
|
+
const broadcastConfig = connectorConfig;
|
|
346
|
+
if (!broadcastConfig.localNodeId) {
|
|
347
|
+
broadcastConfig.localNodeId = routingNode.id;
|
|
348
|
+
}
|
|
349
|
+
if (!broadcastConfig.remoteNodeId) {
|
|
350
|
+
broadcastConfig.remoteNodeId = systemId;
|
|
351
|
+
logger.debug('broadcast_channel_listener_auto_configured_remote_node_id', {
|
|
352
|
+
sender_id: params.senderId,
|
|
353
|
+
system_id: systemId,
|
|
354
|
+
remote_node_id: systemId,
|
|
355
|
+
local_node_id: broadcastConfig.localNodeId,
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
logger.debug('broadcast_channel_listener_using_provided_remote_node_id', {
|
|
360
|
+
sender_id: params.senderId,
|
|
361
|
+
system_id: systemId,
|
|
362
|
+
remote_node_id: broadcastConfig.remoteNodeId,
|
|
363
|
+
local_node_id: broadcastConfig.localNodeId,
|
|
364
|
+
});
|
|
365
|
+
}
|
|
343
366
|
try {
|
|
344
367
|
const connector = await routingNode.createOriginConnector({
|
|
345
368
|
originType,
|
|
@@ -409,6 +432,21 @@ export class BroadcastChannelListener extends TransportListener {
|
|
|
409
432
|
inboxCandidate > 0) {
|
|
410
433
|
config.inboxCapacity = Math.floor(inboxCandidate);
|
|
411
434
|
}
|
|
435
|
+
// Extract transport frame multiplexing node IDs
|
|
436
|
+
const localNodeIdCandidate = candidate.localNodeId ?? candidate['local_node_id'];
|
|
437
|
+
if (typeof localNodeIdCandidate === 'string' && localNodeIdCandidate.trim().length > 0) {
|
|
438
|
+
config.localNodeId = localNodeIdCandidate.trim();
|
|
439
|
+
logger.debug('broadcast_channel_listener_extracted_local_node_id', {
|
|
440
|
+
local_node_id: config.localNodeId,
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
const remoteNodeIdCandidate = candidate.remoteNodeId ?? candidate['remote_node_id'];
|
|
444
|
+
if (typeof remoteNodeIdCandidate === 'string' && remoteNodeIdCandidate.trim().length > 0) {
|
|
445
|
+
config.remoteNodeId = remoteNodeIdCandidate.trim();
|
|
446
|
+
logger.debug('broadcast_channel_listener_extracted_remote_node_id', {
|
|
447
|
+
remote_node_id: config.remoteNodeId,
|
|
448
|
+
});
|
|
449
|
+
}
|
|
412
450
|
return config;
|
|
413
451
|
}
|
|
414
452
|
_monitorConnectorLifecycle(senderId, systemId, connector) {
|
|
@@ -61,6 +61,7 @@ export class InPageListener extends TransportListener {
|
|
|
61
61
|
this._busHandler = null;
|
|
62
62
|
this._senderRegistry = new Map();
|
|
63
63
|
this._systemToSender = new Map();
|
|
64
|
+
this._flowIdToSender = new Map();
|
|
64
65
|
this._pendingAttachments = new Map();
|
|
65
66
|
ensureBrowserEnvironment();
|
|
66
67
|
const channelCandidate = options?.channelName;
|
|
@@ -127,6 +128,7 @@ export class InPageListener extends TransportListener {
|
|
|
127
128
|
this._unregisterBusListener();
|
|
128
129
|
this._senderRegistry.clear();
|
|
129
130
|
this._systemToSender.clear();
|
|
131
|
+
this._flowIdToSender.clear();
|
|
130
132
|
this._pendingAttachments.clear();
|
|
131
133
|
logger.debug('inpage_listener_stopped', {
|
|
132
134
|
channel: this._channelName,
|
|
@@ -180,10 +182,25 @@ export class InPageListener extends TransportListener {
|
|
|
180
182
|
await this._handleAttachFrame(senderId, envelope);
|
|
181
183
|
return;
|
|
182
184
|
}
|
|
183
|
-
|
|
185
|
+
// Try to find connector by sender ID first
|
|
186
|
+
let entry = this._senderRegistry.get(senderId);
|
|
187
|
+
// If not found and we have a flowId, try to route based on flow
|
|
188
|
+
if (!entry && envelope.flowId) {
|
|
189
|
+
const originalSenderId = this._flowIdToSender.get(envelope.flowId);
|
|
190
|
+
if (originalSenderId) {
|
|
191
|
+
entry = this._senderRegistry.get(originalSenderId);
|
|
192
|
+
logger.debug('inpage_listener_routed_by_flow_id', {
|
|
193
|
+
sender_id: senderId,
|
|
194
|
+
original_sender_id: originalSenderId,
|
|
195
|
+
flow_id: envelope.flowId,
|
|
196
|
+
frame_type: envelope.frame?.type ?? 'unknown',
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
184
200
|
if (!entry) {
|
|
185
201
|
logger.debug('inpage_listener_no_connector_for_sender', {
|
|
186
202
|
sender_id: senderId,
|
|
203
|
+
flow_id: envelope.flowId,
|
|
187
204
|
frame_type: envelope.frame?.type ?? 'unknown',
|
|
188
205
|
});
|
|
189
206
|
return;
|
|
@@ -260,6 +277,15 @@ export class InPageListener extends TransportListener {
|
|
|
260
277
|
}
|
|
261
278
|
this._senderRegistry.set(senderId, entry);
|
|
262
279
|
this._systemToSender.set(entry.systemId, senderId);
|
|
280
|
+
// Track the flowId if present so we can route responses back
|
|
281
|
+
if (envelope.flowId) {
|
|
282
|
+
this._flowIdToSender.set(envelope.flowId, senderId);
|
|
283
|
+
logger.debug('inpage_listener_registered_flow_id', {
|
|
284
|
+
sender_id: senderId,
|
|
285
|
+
system_id: entry.systemId,
|
|
286
|
+
flow_id: envelope.flowId,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
263
289
|
await this._deliverEnvelope(entry, envelope);
|
|
264
290
|
}
|
|
265
291
|
async _createConnectorForAttach(params) {
|
|
@@ -307,7 +333,7 @@ export class InPageListener extends TransportListener {
|
|
|
307
333
|
origin_type: originType,
|
|
308
334
|
connector_type: connector.constructor?.name ?? 'unknown',
|
|
309
335
|
});
|
|
310
|
-
return { connector, systemId, originType };
|
|
336
|
+
return { connector, systemId, originType, senderId: params.senderId };
|
|
311
337
|
}
|
|
312
338
|
catch (error) {
|
|
313
339
|
logger.error('inpage_listener_connector_creation_failed', {
|
|
@@ -361,6 +387,12 @@ export class InPageListener extends TransportListener {
|
|
|
361
387
|
if (this._systemToSender.get(systemId) === senderId) {
|
|
362
388
|
this._systemToSender.delete(systemId);
|
|
363
389
|
}
|
|
390
|
+
// Clean up flowId mappings for this sender
|
|
391
|
+
for (const [flowId, sid] of this._flowIdToSender.entries()) {
|
|
392
|
+
if (sid === senderId) {
|
|
393
|
+
this._flowIdToSender.delete(flowId);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
364
396
|
})
|
|
365
397
|
.catch((error) => {
|
|
366
398
|
logger.debug('inpage_listener_wait_until_closed_failed', {
|
|
@@ -372,9 +404,24 @@ export class InPageListener extends TransportListener {
|
|
|
372
404
|
if (this._systemToSender.get(systemId) === senderId) {
|
|
373
405
|
this._systemToSender.delete(systemId);
|
|
374
406
|
}
|
|
407
|
+
// Clean up flowId mappings for this sender
|
|
408
|
+
for (const [flowId, sid] of this._flowIdToSender.entries()) {
|
|
409
|
+
if (sid === senderId) {
|
|
410
|
+
this._flowIdToSender.delete(flowId);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
375
413
|
});
|
|
376
414
|
}
|
|
377
415
|
async _deliverEnvelope(entry, envelope) {
|
|
416
|
+
// Track flowId for routing responses back
|
|
417
|
+
if (envelope.flowId && !this._flowIdToSender.has(envelope.flowId)) {
|
|
418
|
+
this._flowIdToSender.set(envelope.flowId, entry.senderId);
|
|
419
|
+
logger.debug('inpage_listener_registered_flow_id_on_delivery', {
|
|
420
|
+
sender_id: entry.senderId,
|
|
421
|
+
system_id: entry.systemId,
|
|
422
|
+
flow_id: envelope.flowId,
|
|
423
|
+
});
|
|
424
|
+
}
|
|
378
425
|
const message = this._buildChannelMessage({
|
|
379
426
|
envelope,
|
|
380
427
|
connector: entry.connector,
|
package/dist/esm/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// This file is auto-generated during build - do not edit manually
|
|
2
|
-
// Generated from package.json version: 0.3.5-test.
|
|
2
|
+
// Generated from package.json version: 0.3.5-test.945
|
|
3
3
|
/**
|
|
4
4
|
* The package version, injected at build time.
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
7
|
-
export const VERSION = '0.3.5-test.
|
|
7
|
+
export const VERSION = '0.3.5-test.945';
|