From 21b050b22025f1172803f2ee65e0551455b3bb4f Mon Sep 17 00:00:00 2001 From: Cooldude2606 <25043174+Cooldude2606@users.noreply.github.com> Date: Thu, 28 May 2026 00:38:15 +0100 Subject: [PATCH] Call `subscriptionUpdate` for all update cases --- packages/controller/src/Controller.ts | 28 ++++++++++++++++++++++++++- packages/lib/src/subscriptions.ts | 16 ++++++++------- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/packages/controller/src/Controller.ts b/packages/controller/src/Controller.ts index 49a18ebe..a62cb353 100644 --- a/packages/controller/src/Controller.ts +++ b/packages/controller/src/Controller.ts @@ -875,6 +875,9 @@ export default class Controller { } async handleSystemInfoSubscription(request: lib.SubscriptionRequest) { + if (request.action === "unsubscribe") { + return null; + } const systems = [...this.systems.values()].filter( metric => metric.updatedAtMs > request.lastRequestTimeMs, ); @@ -897,6 +900,9 @@ export default class Controller { } async handleHostSubscription(request: lib.SubscriptionRequest) { + if (request.action === "unsubscribe") { + return null; + } const hosts = [...this.hosts.values()].filter( host => host.updatedAtMs > request.lastRequestTimeMs, ).map(host => host.toHostDetails()); @@ -944,6 +950,9 @@ export default class Controller { } async handleInstanceDetailsSubscription(request: lib.SubscriptionRequest) { + if (request.action === "unsubscribe") { + return null; + } const instances = [...this.instances.values()].filter( instance => instance.updatedAtMs > request.lastRequestTimeMs, ).map(instance => instance.toInstanceDetails()); @@ -955,7 +964,12 @@ export default class Controller { } async handleInstanceSaveDetailsSubscription(request: lib.SubscriptionRequest) { - const saves = [...this.saves.values()].filter(save => save.updatedAtMs > request.lastRequestTimeMs); + if (request.action === "unsubscribe") { + return null; + } + const saves = [...this.saves.values()].filter( + save => save.updatedAtMs > request.lastRequestTimeMs + ); return saves.length ? new lib.InstanceSaveDetailsUpdatesEvent(saves) : null; } @@ -966,6 +980,9 @@ export default class Controller { } async handleModPackSubscription(request: lib.SubscriptionRequest) { + if (request.action === "unsubscribe") { + return null; + } const modPacks = [...this.modPacks.values()].filter( modPack => modPack.updatedAtMs > request.lastRequestTimeMs, ); @@ -979,6 +996,9 @@ export default class Controller { } async handleModSubscription(request: lib.SubscriptionRequest) { + if (request.action === "unsubscribe") { + return null; + } const mods = [...this.modStore.files.values()].filter( mod => mod.updatedAtMs > request.lastRequestTimeMs, ); @@ -990,6 +1010,9 @@ export default class Controller { } async handleUserSubscription(request: lib.SubscriptionRequest) { + if (request.action === "unsubscribe") { + return null; + } const users = [...this.users.records.values()].filter( user => user.updatedAtMs > request.lastRequestTimeMs, ); @@ -1037,6 +1060,9 @@ export default class Controller { } async handleRoleSubscription(request: lib.SubscriptionRequest) { + if (request.action === "unsubscribe") { + return null; + } const roles = [...this.roles.values()].filter( role => role.updatedAtMs > request.lastRequestTimeMs, ); diff --git a/packages/lib/src/subscriptions.ts b/packages/lib/src/subscriptions.ts index 9bf8865d..ef391494 100644 --- a/packages/lib/src/subscriptions.ts +++ b/packages/lib/src/subscriptions.ts @@ -348,13 +348,6 @@ export class SubscriptionController { } else { subscriber.filters.union(request.filters); } - if (eventData.subscriptionUpdate) { - const eventReplay = await eventData.subscriptionUpdate(request, src, dst); - if (eventReplay) { - link.sendTo(src, eventReplay); - return true; - } - } break; case "replace": @@ -372,6 +365,15 @@ export class SubscriptionController { default: throw new Error(`unreachable case: ${String(request.action)}`); } + + if (eventData.subscriptionUpdate) { + const eventReplay = await eventData.subscriptionUpdate(request, src, dst); + if (eventReplay) { + link.sendTo(src, eventReplay); + return true; + } + } + return false; } }