From 1b27368f54be31ebcd54945ddf08f7aa0dcf923e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:50:34 +0100 Subject: [PATCH] `unsubscribeFromAllEvents` is not safe to be called in every module (#446) * fix: call unsubscribeFromAllEvents internally for every module * refactor: do not call unsubscribeFromAllEvents manually in every module * fix: add override * fix: test --- packages/app-runtime/src/modules/AppSyncModule.ts | 2 +- .../src/modules/PushNotificationModule.ts | 4 ---- packages/app-runtime/src/modules/SSEModule.ts | 2 +- .../src/modules/appEvents/MailReceivedModule.ts | 4 ---- .../appEvents/OnboardingChangeReceivedModule.ts | 4 ---- .../RelationshipTemplateProcessedModule.ts | 4 ---- .../IdentityDeletionProcessStatusChangedModule.ts | 4 ---- .../modules/runtimeEvents/MessageReceivedModule.ts | 4 ---- .../runtimeEvents/RelationshipChangedModule.ts | 4 ---- .../test/runtime/RuntimeModuleLoadingTest.test.ts | 2 +- .../src/extensibility/modules/RuntimeModule.ts | 14 +++++++++++--- .../runtime/src/modules/AttributeListenerModule.ts | 4 ---- packages/runtime/src/modules/DeciderModule.ts | 4 ---- packages/runtime/src/modules/MessageModule.ts | 4 ---- packages/runtime/src/modules/NotificationModule.ts | 4 ---- packages/runtime/src/modules/RequestModule.ts | 4 ---- 16 files changed, 14 insertions(+), 54 deletions(-) diff --git a/packages/app-runtime/src/modules/AppSyncModule.ts b/packages/app-runtime/src/modules/AppSyncModule.ts index 5425f6cd8..bb62c647b 100644 --- a/packages/app-runtime/src/modules/AppSyncModule.ts +++ b/packages/app-runtime/src/modules/AppSyncModule.ts @@ -36,7 +36,7 @@ export class AppSyncModule extends AppRuntimeModule } } - public stop(): void { + public override stop(): void { this.started = false; clearTimeout(this.syncTimeout); } diff --git a/packages/app-runtime/src/modules/PushNotificationModule.ts b/packages/app-runtime/src/modules/PushNotificationModule.ts index 13848765b..4c747748f 100644 --- a/packages/app-runtime/src/modules/PushNotificationModule.ts +++ b/packages/app-runtime/src/modules/PushNotificationModule.ts @@ -141,8 +141,4 @@ export class PushNotificationModule extends AppRuntimeModule { } } - public stop(): void { + public override stop(): void { for (const eventsource of Object.values(this.eventSource).filter((eventsource) => typeof eventsource !== "undefined")) { eventsource.close(); } diff --git a/packages/app-runtime/src/modules/appEvents/MailReceivedModule.ts b/packages/app-runtime/src/modules/appEvents/MailReceivedModule.ts index 480bc08d8..cb88ba1fe 100644 --- a/packages/app-runtime/src/modules/appEvents/MailReceivedModule.ts +++ b/packages/app-runtime/src/modules/appEvents/MailReceivedModule.ts @@ -28,8 +28,4 @@ export class MailReceivedModule extends AppRuntimeModule | void { - this.unsubscribeFromAllEvents(); - } } diff --git a/packages/app-runtime/src/modules/runtimeEvents/MessageReceivedModule.ts b/packages/app-runtime/src/modules/runtimeEvents/MessageReceivedModule.ts index dbe223aa4..17156a186 100644 --- a/packages/app-runtime/src/modules/runtimeEvents/MessageReceivedModule.ts +++ b/packages/app-runtime/src/modules/runtimeEvents/MessageReceivedModule.ts @@ -28,8 +28,4 @@ export class MessageReceivedModule extends AppRuntimeModule { + await originalStopMethod.call(this); + this.#unsubscribeFromAllEvents(); + }; + } public get name(): string { return this.configuration.name; @@ -26,7 +32,9 @@ export abstract class RuntimeModule | void; public abstract start(): Promise | void; - public abstract stop(): Promise | void; + public stop(): Promise | void { + // Nothing to do here + } private readonly subscriptionIds: number[] = []; @@ -35,7 +43,7 @@ export abstract class RuntimeModule this.runtime.eventBus.unsubscribe(id)); this.subscriptionIds.splice(0); } diff --git a/packages/runtime/src/modules/AttributeListenerModule.ts b/packages/runtime/src/modules/AttributeListenerModule.ts index c483da51a..3990bf485 100644 --- a/packages/runtime/src/modules/AttributeListenerModule.ts +++ b/packages/runtime/src/modules/AttributeListenerModule.ts @@ -160,8 +160,4 @@ export class AttributeListenerModule extends RuntimeModule { } } } - - public stop(): void { - this.unsubscribeFromAllEvents(); - } } diff --git a/packages/runtime/src/modules/DeciderModule.ts b/packages/runtime/src/modules/DeciderModule.ts index 60fdca051..b5c74b5e6 100644 --- a/packages/runtime/src/modules/DeciderModule.ts +++ b/packages/runtime/src/modules/DeciderModule.ts @@ -239,10 +239,6 @@ export class DeciderModule extends RuntimeModule { break; } } - - public stop(): void { - this.unsubscribeFromAllEvents(); - } } function containsItem(objectWithItems: { items: any[] }, callback: (element: any) => boolean): boolean { diff --git a/packages/runtime/src/modules/MessageModule.ts b/packages/runtime/src/modules/MessageModule.ts index d457fe0f6..a06f68c81 100644 --- a/packages/runtime/src/modules/MessageModule.ts +++ b/packages/runtime/src/modules/MessageModule.ts @@ -45,8 +45,4 @@ export class MessageModule extends RuntimeModule { this.runtime.eventBus.publish(new RelationshipEvent(messageReceivedEvent.eventTargetAddress, event, relationship)); this.logger.trace(`Published RelationshipEvent for ${message.id} to ${relationship.id}`); } - - public stop(): void { - this.unsubscribeFromAllEvents(); - } } diff --git a/packages/runtime/src/modules/NotificationModule.ts b/packages/runtime/src/modules/NotificationModule.ts index a5da641f6..923a7380a 100644 --- a/packages/runtime/src/modules/NotificationModule.ts +++ b/packages/runtime/src/modules/NotificationModule.ts @@ -43,8 +43,4 @@ export class NotificationModule extends RuntimeModule { return; } } - - public stop(): void { - this.unsubscribeFromAllEvents(); - } } diff --git a/packages/runtime/src/modules/RequestModule.ts b/packages/runtime/src/modules/RequestModule.ts index fa28c74a3..befc85684 100644 --- a/packages/runtime/src/modules/RequestModule.ts +++ b/packages/runtime/src/modules/RequestModule.ts @@ -354,8 +354,4 @@ export class RequestModule extends RuntimeModule { return; } } - - public stop(): void { - this.unsubscribeFromAllEvents(); - } }