@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/node/index.cjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
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,
|
package/dist/node/index.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
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,
|
package/dist/node/node.cjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
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) {
|
package/dist/node/node.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
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) {
|