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