From 5df7bc42a0904d14930209b5353baad5f7ad3807 Mon Sep 17 00:00:00 2001 From: Andreas Coroiu Date: Mon, 10 Nov 2025 14:49:03 +0100 Subject: [PATCH] fix: using undecorated service in jslib module directly --- .../src/services/jslib-services.module.ts | 6 ++- .../ipc/ipc-session-repository.spec.ts | 40 +++++++++++++++++++ .../platform/ipc/ipc-session-repository.ts | 5 +++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 libs/common/src/platform/ipc/ipc-session-repository.spec.ts diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 3c9062d5787..4063a40a9fa 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -1744,7 +1744,11 @@ const safeProviders: SafeProvider[] = [ useClass: DefaultNewDeviceVerificationComponentService, deps: [], }), - safeProvider(IpcSessionRepository), + safeProvider({ + provide: IpcSessionRepository, + useClass: IpcSessionRepository, + deps: [StateProvider], + }), safeProvider({ provide: PremiumInterestStateService, useClass: NoopPremiumInterestStateService, diff --git a/libs/common/src/platform/ipc/ipc-session-repository.spec.ts b/libs/common/src/platform/ipc/ipc-session-repository.spec.ts new file mode 100644 index 00000000000..c3f960a2a86 --- /dev/null +++ b/libs/common/src/platform/ipc/ipc-session-repository.spec.ts @@ -0,0 +1,40 @@ +import { FakeActiveUserAccessor, FakeStateProvider } from "../../../spec"; +import { UserId } from "../../types/guid"; + +import { IpcSessionRepository } from "./ipc-session-repository"; + +describe("IpcSessionRepository", () => { + const userId = "user-id" as UserId; + let stateProvider!: FakeStateProvider; + let repository!: IpcSessionRepository; + + beforeEach(() => { + stateProvider = new FakeStateProvider(new FakeActiveUserAccessor(userId)); + repository = new IpcSessionRepository(stateProvider); + }); + + it("returns undefined when empty", async () => { + const result = await repository.get("BrowserBackground"); + + expect(result).toBeUndefined(); + }); + + it("saves and retrieves a session", async () => { + const session = { some: "data" }; + await repository.save("BrowserBackground", session); + + const result = await repository.get("BrowserBackground"); + + expect(result).toEqual(session); + }); + + it("removes a session", async () => { + const session = { some: "data" }; + await repository.save("BrowserBackground", session); + + await repository.remove("BrowserBackground"); + const result = await repository.get("BrowserBackground"); + + expect(result).toBeUndefined(); + }); +}); diff --git a/libs/common/src/platform/ipc/ipc-session-repository.ts b/libs/common/src/platform/ipc/ipc-session-repository.ts index 8c0752ed2fb..12e06b214c9 100644 --- a/libs/common/src/platform/ipc/ipc-session-repository.ts +++ b/libs/common/src/platform/ipc/ipc-session-repository.ts @@ -8,6 +8,11 @@ const IPC_SESSIONS = KeyDefinition.record(IPC_MEMORY, "ipcSessio deserializer: (value: object) => value, }); +/** + * Implementation of SDK-defined repository interface/trait. Do not use directly. + * All error handling is done by the caller (the SDK). + * For more information see IPC docs. + */ export class IpcSessionRepository implements SdkIpcSessionRepository { private states: GlobalState>;