From 71bef25a96c999cf22eb0b7a270c914e9cfc0841 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Mon, 7 Jul 2025 17:49:29 +0200 Subject: [PATCH] Resolve breaking changes in the SDK (#15472) --- libs/common/spec/jest-sdk-client-factory.ts | 6 ++++-- .../services/sdk/default-sdk.service.ts | 19 +++++++++++++++++-- .../vault/models/view/attachment.view.spec.ts | 1 + .../src/vault/models/view/attachment.view.ts | 1 + .../default-cipher-encryption.service.spec.ts | 6 ++++-- .../metadata/password/sdk-eff-word-list.ts | 2 +- .../metadata/password/sdk-random-password.ts | 2 +- package-lock.json | 8 ++++---- package.json | 2 +- 9 files changed, 34 insertions(+), 13 deletions(-) diff --git a/libs/common/spec/jest-sdk-client-factory.ts b/libs/common/spec/jest-sdk-client-factory.ts index ff120ccd78..8e5e1c9d3f 100644 --- a/libs/common/spec/jest-sdk-client-factory.ts +++ b/libs/common/spec/jest-sdk-client-factory.ts @@ -1,9 +1,11 @@ -import { ClientSettings, LogLevel, BitwardenClient } from "@bitwarden/sdk-internal"; +import { BitwardenClient } from "@bitwarden/sdk-internal"; import { SdkClientFactory } from "../src/platform/abstractions/sdk/sdk-client-factory"; export class DefaultSdkClientFactory implements SdkClientFactory { - createSdkClient(settings?: ClientSettings, log_level?: LogLevel): Promise { + createSdkClient( + ...args: ConstructorParameters + ): Promise { throw new Error("Method not implemented."); } } diff --git a/libs/common/src/platform/services/sdk/default-sdk.service.ts b/libs/common/src/platform/services/sdk/default-sdk.service.ts index e874dae346..a0d00b5eef 100644 --- a/libs/common/src/platform/services/sdk/default-sdk.service.ts +++ b/libs/common/src/platform/services/sdk/default-sdk.service.ts @@ -21,6 +21,7 @@ import { BitwardenClient, ClientSettings, DeviceType as SdkDeviceType, + TokenProvider, } from "@bitwarden/sdk-internal"; import { EncryptedOrganizationKeyData } from "../../../admin-console/models/data/encrypted-organization-key.data"; @@ -41,6 +42,17 @@ import { EncryptedString } from "../../models/domain/enc-string"; // blocking the creation of an internal client for that user. const UnsetClient = Symbol("UnsetClient"); +/** + * A token provider that exposes the access token to the SDK. + */ +class JsTokenProvider implements TokenProvider { + constructor() {} + + async get_access_token(): Promise { + return undefined; + } +} + export class DefaultSdkService implements SdkService { private sdkClientOverrides = new BehaviorSubject<{ [userId: UserId]: Rc | typeof UnsetClient; @@ -51,7 +63,7 @@ export class DefaultSdkService implements SdkService { concatMap(async (env) => { await SdkLoadService.Ready; const settings = this.toSettings(env); - return await this.sdkClientFactory.createSdkClient(settings); + return await this.sdkClientFactory.createSdkClient(new JsTokenProvider(), settings); }), shareReplay({ refCount: true, bufferSize: 1 }), ); @@ -151,7 +163,10 @@ export class DefaultSdkService implements SdkService { } const settings = this.toSettings(env); - const client = await this.sdkClientFactory.createSdkClient(settings); + const client = await this.sdkClientFactory.createSdkClient( + new JsTokenProvider(), + settings, + ); await this.initializeClient( userId, diff --git a/libs/common/src/vault/models/view/attachment.view.spec.ts b/libs/common/src/vault/models/view/attachment.view.spec.ts index 8ae836e126..bc7a54062e 100644 --- a/libs/common/src/vault/models/view/attachment.view.spec.ts +++ b/libs/common/src/vault/models/view/attachment.view.spec.ts @@ -67,6 +67,7 @@ describe("AttachmentView", () => { sizeName: "sizeName", fileName: "fileName", key: "encKeyB64", + decryptedKey: null, }); }); }); diff --git a/libs/common/src/vault/models/view/attachment.view.ts b/libs/common/src/vault/models/view/attachment.view.ts index 2ef4280d97..28bfc9f12b 100644 --- a/libs/common/src/vault/models/view/attachment.view.ts +++ b/libs/common/src/vault/models/view/attachment.view.ts @@ -59,6 +59,7 @@ export class AttachmentView implements View { sizeName: this.sizeName, fileName: this.fileName, key: this.encryptedKey?.toJSON(), + decryptedKey: null, }; } diff --git a/libs/common/src/vault/services/default-cipher-encryption.service.spec.ts b/libs/common/src/vault/services/default-cipher-encryption.service.spec.ts index c0b3d3be85..4d05a5197f 100644 --- a/libs/common/src/vault/services/default-cipher-encryption.service.spec.ts +++ b/libs/common/src/vault/services/default-cipher-encryption.service.spec.ts @@ -7,7 +7,7 @@ import { CipherType as SdkCipherType, CipherView as SdkCipherView, CipherListView, - Attachment as SdkAttachment, + AttachmentView as SdkAttachmentView, } from "@bitwarden/sdk-internal"; import { mockEnc } from "../../../spec"; @@ -311,7 +311,9 @@ describe("DefaultCipherEncryptionService", () => { const expectedDecryptedContent = new Uint8Array([5, 6, 7, 8]); jest.spyOn(cipher, "toSdkCipher").mockReturnValue({ id: "id" } as SdkCipher); - jest.spyOn(attachment, "toSdkAttachmentView").mockReturnValue({ id: "a1" } as SdkAttachment); + jest + .spyOn(attachment, "toSdkAttachmentView") + .mockReturnValue({ id: "a1" } as SdkAttachmentView); mockSdkClient.vault().attachments().decrypt_buffer.mockReturnValue(expectedDecryptedContent); const result = await cipherEncryptionService.decryptAttachmentContent( diff --git a/libs/tools/generator/core/src/metadata/password/sdk-eff-word-list.ts b/libs/tools/generator/core/src/metadata/password/sdk-eff-word-list.ts index 8892016b60..9a653f88ed 100644 --- a/libs/tools/generator/core/src/metadata/password/sdk-eff-word-list.ts +++ b/libs/tools/generator/core/src/metadata/password/sdk-eff-word-list.ts @@ -31,7 +31,7 @@ const sdkPassphrase: GeneratorMetadata = { create( dependencies: GeneratorDependencyProvider, ): CredentialGenerator { - return new SdkPasswordRandomizer(new BitwardenClient(), Date.now); // @TODO hook up a real SDK client + return new SdkPasswordRandomizer(new BitwardenClient(null), Date.now); // @TODO hook up a real SDK client }, }, profiles: { diff --git a/libs/tools/generator/core/src/metadata/password/sdk-random-password.ts b/libs/tools/generator/core/src/metadata/password/sdk-random-password.ts index d6544fa115..d9e06408d1 100644 --- a/libs/tools/generator/core/src/metadata/password/sdk-random-password.ts +++ b/libs/tools/generator/core/src/metadata/password/sdk-random-password.ts @@ -31,7 +31,7 @@ const sdkPassword: GeneratorMetadata = deepFreeze({ create( dependencies: GeneratorDependencyProvider, ): CredentialGenerator { - return new SdkPasswordRandomizer(new BitwardenClient(), Date.now); // @TODO hook up a real SDK client + return new SdkPasswordRandomizer(new BitwardenClient(null), Date.now); // @TODO hook up a real SDK client }, }, profiles: { diff --git a/package-lock.json b/package-lock.json index 900dc0d0b0..6b18b6f8af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "@angular/platform-browser": "19.2.14", "@angular/platform-browser-dynamic": "19.2.14", "@angular/router": "19.2.14", - "@bitwarden/sdk-internal": "0.2.0-main.213", + "@bitwarden/sdk-internal": "0.2.0-main.225", "@electron/fuses": "1.8.0", "@emotion/css": "11.13.5", "@koa/multer": "3.1.0", @@ -4610,9 +4610,9 @@ "link": true }, "node_modules/@bitwarden/sdk-internal": { - "version": "0.2.0-main.213", - "resolved": "https://registry.npmjs.org/@bitwarden/sdk-internal/-/sdk-internal-0.2.0-main.213.tgz", - "integrity": "sha512-/AUpdQQ++tLsH9dJDFQcIDihCpsI+ikdZuYwbztSXPp7piCnLk71f7r10yMPGQ8OEOF49mMEbLCG+dJKpBqeRg==", + "version": "0.2.0-main.225", + "resolved": "https://registry.npmjs.org/@bitwarden/sdk-internal/-/sdk-internal-0.2.0-main.225.tgz", + "integrity": "sha512-bhSFNX584GPJ9wMBYff1d18/Hfj+o+D4E1l3uDLZNXRI9s7w919AQWqJ0xUy1vh8gpkLJovkf64HQGqs0OiQQA==", "license": "GPL-3.0", "dependencies": { "type-fest": "^4.41.0" diff --git a/package.json b/package.json index f45b04c06e..8cd2e0991b 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,7 @@ "@angular/platform-browser": "19.2.14", "@angular/platform-browser-dynamic": "19.2.14", "@angular/router": "19.2.14", - "@bitwarden/sdk-internal": "0.2.0-main.213", + "@bitwarden/sdk-internal": "0.2.0-main.225", "@electron/fuses": "1.8.0", "@emotion/css": "11.13.5", "@koa/multer": "3.1.0",