fix(DeesComms): Skip routing hooks for BroadcastChannel-received messages to prevent infinite loops; update typedrequest dependency and bump package version.

This commit is contained in:
2025-12-04 23:52:12 +00:00
parent 10e0c5ca92
commit 6bf7061e84
5 changed files with 23 additions and 14 deletions

View File

@@ -1,5 +1,12 @@
# Changelog # Changelog
## 2025-12-04 - 1.0.30 - fix(DeesComms)
Skip routing hooks for BroadcastChannel-received messages to prevent infinite loops; update typedrequest dependency and bump package version.
- Skip hooks when routing responses for messages received from the BroadcastChannel (prevents infinite loops when global traffic-logging hooks are present).
- Bump dependency @api.global/typedrequest to ^3.2.3.
- Bump package version to 1.0.29.
## 2025-12-04 - 1.0.28 - fix(build) ## 2025-12-04 - 1.0.28 - fix(build)
Upgrade build/test tooling and runtime deps; enable verbose tests Upgrade build/test tooling and runtime deps; enable verbose tests

View File

@@ -1,6 +1,6 @@
{ {
"name": "@design.estate/dees-comms", "name": "@design.estate/dees-comms",
"version": "1.0.28", "version": "1.0.29",
"private": false, "private": false,
"description": "A communications module for enabling DOM-based messaging and synchronization across browser tabs and workers.", "description": "A communications module for enabling DOM-based messaging and synchronization across browser tabs and workers.",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",
@@ -21,7 +21,7 @@
"@types/node": "^24.10.1" "@types/node": "^24.10.1"
}, },
"dependencies": { "dependencies": {
"@api.global/typedrequest": "^3.2.2", "@api.global/typedrequest": "^3.2.3",
"@api.global/typedrequest-interfaces": "^3.0.19", "@api.global/typedrequest-interfaces": "^3.0.19",
"@push.rocks/smartdelay": "^3.0.5", "@push.rocks/smartdelay": "^3.0.5",
"broadcast-channel": "^7.2.0" "broadcast-channel": "^7.2.0"

20
pnpm-lock.yaml generated
View File

@@ -9,8 +9,8 @@ importers:
.: .:
dependencies: dependencies:
'@api.global/typedrequest': '@api.global/typedrequest':
specifier: ^3.2.2 specifier: ^3.2.3
version: 3.2.2 version: 3.2.3
'@api.global/typedrequest-interfaces': '@api.global/typedrequest-interfaces':
specifier: ^3.0.19 specifier: ^3.0.19
version: 3.0.19 version: 3.0.19
@@ -48,8 +48,8 @@ packages:
'@api.global/typedrequest-interfaces@3.0.19': '@api.global/typedrequest-interfaces@3.0.19':
resolution: {integrity: sha512-uuHUXJeOy/inWSDrwD0Cwax2rovpxYllDhM2RWh+6mVpQuNmZ3uw6IVg6dA2G1rOe24Ebs+Y9SzEogo+jYN7vw==} resolution: {integrity: sha512-uuHUXJeOy/inWSDrwD0Cwax2rovpxYllDhM2RWh+6mVpQuNmZ3uw6IVg6dA2G1rOe24Ebs+Y9SzEogo+jYN7vw==}
'@api.global/typedrequest@3.2.2': '@api.global/typedrequest@3.2.3':
resolution: {integrity: sha512-tUmpq+JRcrj8mjb44zLfcWDnArKqqRxPra5oZo4Ghp0P/wf2MhEthZcaD9iz8goJ6PnvBrbmrIz94I7VrfLIcA==} resolution: {integrity: sha512-TK2JfRtd62fWi2HSv5tHxUdm7qIkMkOKuqDoMK7szmHdGauKD4m63OrrF4K1OoCWsMe+gjcat6QIE+ID8muntw==}
'@api.global/typedserver@3.0.80': '@api.global/typedserver@3.0.80':
resolution: {integrity: sha512-dcp0oXsjBL+XdFg1wUUP08uJQid5bQ0Yv3V3Y3lnI2QCbat0FU+Tsb0TZRnZ4+P150Vj/ITBqJUgDzFsF34grA==} resolution: {integrity: sha512-dcp0oXsjBL+XdFg1wUUP08uJQid5bQ0Yv3V3Y3lnI2QCbat0FU+Tsb0TZRnZ4+P150Vj/ITBqJUgDzFsF34grA==}
@@ -4109,7 +4109,7 @@ snapshots:
'@api.global/typedrequest-interfaces@3.0.19': {} '@api.global/typedrequest-interfaces@3.0.19': {}
'@api.global/typedrequest@3.2.2': '@api.global/typedrequest@3.2.3':
dependencies: dependencies:
'@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedrequest-interfaces': 3.0.19
'@push.rocks/isounique': 1.0.5 '@push.rocks/isounique': 1.0.5
@@ -4123,7 +4123,7 @@ snapshots:
'@api.global/typedserver@3.0.80': '@api.global/typedserver@3.0.80':
dependencies: dependencies:
'@api.global/typedrequest': 3.2.2 '@api.global/typedrequest': 3.2.3
'@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedrequest-interfaces': 3.0.19
'@api.global/typedsocket': 3.1.1 '@api.global/typedsocket': 3.1.1
'@cloudflare/workers-types': 4.20251202.0 '@cloudflare/workers-types': 4.20251202.0
@@ -4171,7 +4171,7 @@ snapshots:
'@api.global/typedsocket@3.1.1': '@api.global/typedsocket@3.1.1':
dependencies: dependencies:
'@api.global/typedrequest': 3.2.2 '@api.global/typedrequest': 3.2.3
'@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedrequest-interfaces': 3.0.19
'@push.rocks/isohash': 2.0.1 '@push.rocks/isohash': 2.0.1
'@push.rocks/smartjson': 5.2.0 '@push.rocks/smartjson': 5.2.0
@@ -4694,14 +4694,14 @@ snapshots:
'@design.estate/dees-comms@1.0.27': '@design.estate/dees-comms@1.0.27':
dependencies: dependencies:
'@api.global/typedrequest': 3.2.2 '@api.global/typedrequest': 3.2.3
'@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedrequest-interfaces': 3.0.19
'@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartdelay': 3.0.5
broadcast-channel: 7.2.0 broadcast-channel: 7.2.0
'@design.estate/dees-domtools@2.3.6': '@design.estate/dees-domtools@2.3.6':
dependencies: dependencies:
'@api.global/typedrequest': 3.2.2 '@api.global/typedrequest': 3.2.3
'@design.estate/dees-comms': 1.0.27 '@design.estate/dees-comms': 1.0.27
'@push.rocks/lik': 6.2.2 '@push.rocks/lik': 6.2.2
'@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartdelay': 3.0.5
@@ -5295,7 +5295,7 @@ snapshots:
'@push.rocks/qenv@6.1.3': '@push.rocks/qenv@6.1.3':
dependencies: dependencies:
'@api.global/typedrequest': 3.2.2 '@api.global/typedrequest': 3.2.3
'@configvault.io/interfaces': 1.0.17 '@configvault.io/interfaces': 1.0.17
'@push.rocks/smartfile': 11.2.7 '@push.rocks/smartfile': 11.2.7
'@push.rocks/smartlog': 3.1.10 '@push.rocks/smartlog': 3.1.10

View File

@@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@design.estate/dees-comms', name: '@design.estate/dees-comms',
version: '1.0.28', version: '1.0.30',
description: 'A communications module for enabling DOM-based messaging and synchronization across browser tabs and workers.' description: 'A communications module for enabling DOM-based messaging and synchronization across browser tabs and workers.'
} }

View File

@@ -25,7 +25,9 @@ export class DeesComms {
this.broadcastChannel.onmessage = async (eventArg) => { this.broadcastChannel.onmessage = async (eventArg) => {
const message = (eventArg as any).method ? eventArg : eventArg.data; const message = (eventArg as any).method ? eventArg : eventArg.data;
console.log(JSON.stringify(message)); console.log(JSON.stringify(message));
const response = await this.typedrouter.routeAndAddResponse(message); // Skip hooks for broadcast-received messages to prevent infinite loops
// when traffic logging hooks are set up globally
const response = await this.typedrouter.routeAndAddResponse(message, { skipHooks: true });
if (response && !response.error) { if (response && !response.error) {
this.postMessage(response); this.postMessage(response);
} else { } else {