mirror of
https://github.com/bitwarden/browser
synced 2025-12-06 00:13:28 +00:00
[PM-17479] Load-sdk-once (#12764)
* create service to load sdk on application init * Eagerly load CLI SDK * Remove wasm logging to api * Fix imports * Eagerly load Desktop renderer SDK Note: If the main process ever requires an SDK, we'll need to load it there, too. In that event, it's probably a good idea to move to IPC for all SDK functions to avoid loading the SDK for every window. * init wasm module from sdk load service * Use default client factory * Fix type imports * Resolve jest module import errors A CLI sdk load service that async imports our wasm binary doesn't seem to be needed to run, but jest isn't dealing with the ESM import properly. * Fix linting * remove example code
This commit is contained in:
@@ -4,6 +4,10 @@ import type { BitwardenClient } from "@bitwarden/sdk-internal";
|
||||
* Factory for creating SDK clients.
|
||||
*/
|
||||
export abstract class SdkClientFactory {
|
||||
/**
|
||||
* Creates a new BitwardenClient. Assumes the SDK is already loaded.
|
||||
* @param args Bitwarden client constructor parameters
|
||||
*/
|
||||
abstract createSdkClient(
|
||||
...args: ConstructorParameters<typeof BitwardenClient>
|
||||
): Promise<BitwardenClient>;
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
export abstract class SdkLoadService {
|
||||
abstract load(): Promise<void>;
|
||||
}
|
||||
@@ -1,19 +1,19 @@
|
||||
import * as sdk from "@bitwarden/sdk-internal";
|
||||
import * as module from "@bitwarden/sdk-internal/bitwarden_wasm_internal_bg.wasm";
|
||||
|
||||
import { SdkClientFactory } from "../../abstractions/sdk/sdk-client-factory";
|
||||
|
||||
/**
|
||||
* Directly imports the Bitwarden SDK and initializes it.
|
||||
*
|
||||
* **Warning**: This requires WASM support and will fail if the environment does not support it.
|
||||
* Default SDK client factory.
|
||||
*/
|
||||
export class DefaultSdkClientFactory implements SdkClientFactory {
|
||||
/**
|
||||
* Initializes a Bitwarden client. Assumes the SDK is already loaded.
|
||||
* @param args Bitwarden client constructor parameters
|
||||
* @returns A BitwardenClient
|
||||
*/
|
||||
async createSdkClient(
|
||||
...args: ConstructorParameters<typeof sdk.BitwardenClient>
|
||||
): Promise<sdk.BitwardenClient> {
|
||||
(sdk as any).init(module);
|
||||
|
||||
return Promise.resolve(new sdk.BitwardenClient(...args));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
import * as sdk from "@bitwarden/sdk-internal";
|
||||
import * as bitwardenModule from "@bitwarden/sdk-internal/bitwarden_wasm_internal_bg.wasm";
|
||||
|
||||
import { SdkLoadService } from "../../abstractions/sdk/sdk-load.service";
|
||||
|
||||
/**
|
||||
* Directly imports the Bitwarden SDK and initializes it.
|
||||
*
|
||||
* **Warning**: This requires WASM support and will fail if the environment does not support it.
|
||||
*/
|
||||
export class DefaultSdkLoadService implements SdkLoadService {
|
||||
async load(): Promise<void> {
|
||||
(sdk as any).init(bitwardenModule);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import { SdkLoadService } from "../../abstractions/sdk/sdk-load.service";
|
||||
|
||||
export class NoopSdkLoadService extends SdkLoadService {
|
||||
async load() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user