From 6f8f049b01bdc4609c749fed9f05765c4010948b Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Sun, 29 Mar 2026 01:07:21 +0800 Subject: [PATCH] fix(server-*): should export more types, and for module:announced should ignore self --- packages/plugin-protocol/src/types/events.ts | 4 ++-- packages/server-runtime/src/index.ts | 5 ++++- .../server-runtime/src/middlewares/route/match-expression.ts | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/plugin-protocol/src/types/events.ts b/packages/plugin-protocol/src/types/events.ts index 81216ff45..1ac700b74 100644 --- a/packages/plugin-protocol/src/types/events.ts +++ b/packages/plugin-protocol/src/types/events.ts @@ -574,7 +574,7 @@ interface ModuleCompatibilityResultEvent { reason?: string } -interface RegistryModulesSyncEvent { +export interface RegistryModulesSyncEvent { modules: Array<{ name: string index?: number @@ -599,7 +599,7 @@ interface ModuleAnnounceEvent { configSchema?: ModuleConfigSchema dependencies?: ModuleDependency[] } -interface ModuleAnnouncedEvent { +export interface ModuleAnnouncedEvent { name: string index?: number identity: ModuleIdentity diff --git a/packages/server-runtime/src/index.ts b/packages/server-runtime/src/index.ts index e433859a9..c3a867c98 100644 --- a/packages/server-runtime/src/index.ts +++ b/packages/server-runtime/src/index.ts @@ -426,7 +426,10 @@ export function setupApp(options?: AppOptions): { app: H3, closeAllPeers: () => // broadcast module:announced to all authenticated peers for (const other of peers.values()) { - if (other.authenticated) { + // only send to + // 1. authenticated peers + // 2. other peers except the announcing peer itself + if (other.authenticated && !(other.peer.id === peer.id)) { send(other.peer, { type: 'module:announced', data: { name, index, identity }, diff --git a/packages/server-runtime/src/middlewares/route/match-expression.ts b/packages/server-runtime/src/middlewares/route/match-expression.ts index a1d6201fb..6ceccd8b0 100644 --- a/packages/server-runtime/src/middlewares/route/match-expression.ts +++ b/packages/server-runtime/src/middlewares/route/match-expression.ts @@ -3,7 +3,9 @@ import type { RouteTargetExpression } from '@proj-airi/server-shared/types' import type { AuthenticatedPeer } from '../../types' function globToRegExp(glob: string) { + // eslint-disable-next-line e18e/prefer-static-regex const escaped = glob.replace(/[.+^${}()|[\]\\]/g, '\\$&') + // eslint-disable-next-line e18e/prefer-static-regex const pattern = `^${escaped.replace(/\*/g, '.*')}$` return new RegExp(pattern) }