From 6bf7061e845585817b17ec18b6a301520d1555af Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Thu, 4 Dec 2025 23:52:12 +0000 Subject: [PATCH] fix(DeesComms): Skip routing hooks for BroadcastChannel-received messages to prevent infinite loops; update typedrequest dependency and bump package version. --- changelog.md | 7 +++++++ package.json | 4 ++-- pnpm-lock.yaml | 20 ++++++++++---------- ts/00_commitinfo_data.ts | 2 +- ts/dees-comms.classes.deescomms.ts | 4 +++- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/changelog.md b/changelog.md index c893d85..659dc2f 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # 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) Upgrade build/test tooling and runtime deps; enable verbose tests diff --git a/package.json b/package.json index 640b19d..ed369ae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@design.estate/dees-comms", - "version": "1.0.28", + "version": "1.0.29", "private": false, "description": "A communications module for enabling DOM-based messaging and synchronization across browser tabs and workers.", "main": "dist_ts/index.js", @@ -21,7 +21,7 @@ "@types/node": "^24.10.1" }, "dependencies": { - "@api.global/typedrequest": "^3.2.2", + "@api.global/typedrequest": "^3.2.3", "@api.global/typedrequest-interfaces": "^3.0.19", "@push.rocks/smartdelay": "^3.0.5", "broadcast-channel": "^7.2.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e51df3b..b0c7269 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@api.global/typedrequest': - specifier: ^3.2.2 - version: 3.2.2 + specifier: ^3.2.3 + version: 3.2.3 '@api.global/typedrequest-interfaces': specifier: ^3.0.19 version: 3.0.19 @@ -48,8 +48,8 @@ packages: '@api.global/typedrequest-interfaces@3.0.19': resolution: {integrity: sha512-uuHUXJeOy/inWSDrwD0Cwax2rovpxYllDhM2RWh+6mVpQuNmZ3uw6IVg6dA2G1rOe24Ebs+Y9SzEogo+jYN7vw==} - '@api.global/typedrequest@3.2.2': - resolution: {integrity: sha512-tUmpq+JRcrj8mjb44zLfcWDnArKqqRxPra5oZo4Ghp0P/wf2MhEthZcaD9iz8goJ6PnvBrbmrIz94I7VrfLIcA==} + '@api.global/typedrequest@3.2.3': + resolution: {integrity: sha512-TK2JfRtd62fWi2HSv5tHxUdm7qIkMkOKuqDoMK7szmHdGauKD4m63OrrF4K1OoCWsMe+gjcat6QIE+ID8muntw==} '@api.global/typedserver@3.0.80': resolution: {integrity: sha512-dcp0oXsjBL+XdFg1wUUP08uJQid5bQ0Yv3V3Y3lnI2QCbat0FU+Tsb0TZRnZ4+P150Vj/ITBqJUgDzFsF34grA==} @@ -4109,7 +4109,7 @@ snapshots: '@api.global/typedrequest-interfaces@3.0.19': {} - '@api.global/typedrequest@3.2.2': + '@api.global/typedrequest@3.2.3': dependencies: '@api.global/typedrequest-interfaces': 3.0.19 '@push.rocks/isounique': 1.0.5 @@ -4123,7 +4123,7 @@ snapshots: '@api.global/typedserver@3.0.80': dependencies: - '@api.global/typedrequest': 3.2.2 + '@api.global/typedrequest': 3.2.3 '@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedsocket': 3.1.1 '@cloudflare/workers-types': 4.20251202.0 @@ -4171,7 +4171,7 @@ snapshots: '@api.global/typedsocket@3.1.1': dependencies: - '@api.global/typedrequest': 3.2.2 + '@api.global/typedrequest': 3.2.3 '@api.global/typedrequest-interfaces': 3.0.19 '@push.rocks/isohash': 2.0.1 '@push.rocks/smartjson': 5.2.0 @@ -4694,14 +4694,14 @@ snapshots: '@design.estate/dees-comms@1.0.27': dependencies: - '@api.global/typedrequest': 3.2.2 + '@api.global/typedrequest': 3.2.3 '@api.global/typedrequest-interfaces': 3.0.19 '@push.rocks/smartdelay': 3.0.5 broadcast-channel: 7.2.0 '@design.estate/dees-domtools@2.3.6': dependencies: - '@api.global/typedrequest': 3.2.2 + '@api.global/typedrequest': 3.2.3 '@design.estate/dees-comms': 1.0.27 '@push.rocks/lik': 6.2.2 '@push.rocks/smartdelay': 3.0.5 @@ -5295,7 +5295,7 @@ snapshots: '@push.rocks/qenv@6.1.3': dependencies: - '@api.global/typedrequest': 3.2.2 + '@api.global/typedrequest': 3.2.3 '@configvault.io/interfaces': 1.0.17 '@push.rocks/smartfile': 11.2.7 '@push.rocks/smartlog': 3.1.10 diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 15b4603..cba35a8 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { 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.' } diff --git a/ts/dees-comms.classes.deescomms.ts b/ts/dees-comms.classes.deescomms.ts index b39fd40..2c6ad18 100644 --- a/ts/dees-comms.classes.deescomms.ts +++ b/ts/dees-comms.classes.deescomms.ts @@ -25,7 +25,9 @@ export class DeesComms { this.broadcastChannel.onmessage = async (eventArg) => { const message = (eventArg as any).method ? eventArg : eventArg.data; 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) { this.postMessage(response); } else {