Skip to content
19 changes: 7 additions & 12 deletions apps/browser/src/background/main.background.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,11 @@ import { ApiService } from "@bitwarden/common/services/api.service";
import { AuditService } from "@bitwarden/common/services/audit.service";
import { EventCollectionService } from "@bitwarden/common/services/event/event-collection.service";
import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service";
import { KeyServiceLegacyEncryptorProvider } from "@bitwarden/common/tools/cryptography/key-service-legacy-encryptor-provider";
import { buildExtensionRegistry } from "@bitwarden/common/tools/extension/factory";
import {
PasswordStrengthService,
PasswordStrengthServiceAbstraction,
} from "@bitwarden/common/tools/password-strength";
import { createSystemServiceProvider } from "@bitwarden/common/tools/providers";
import { DefaultEnvService } from "@bitwarden/common/tools/providers";
import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service";
import { SendApiService as SendApiServiceAbstraction } from "@bitwarden/common/tools/send/services/send-api.service.abstraction";
import { SendStateProvider } from "@bitwarden/common/tools/send/services/send-state.provider";
Expand Down Expand Up @@ -233,6 +231,7 @@ import {
KdfConfigService,
KeyService as KeyServiceAbstraction,
} from "@bitwarden/key-management";
import { enableLogForTypes } from "@bitwarden/logging";
import { BackgroundSyncService } from "@bitwarden/platform/background-sync";
import {
ActiveUserStateProvider,
Expand Down Expand Up @@ -1079,6 +1078,9 @@ export default class MainBackground {

this.importApiService = new ImportApiService(this.apiService);

const envService = new DefaultEnvService(this.configService, this.platformUtilsService);
const logProvider = enableLogForTypes(this.logService, []);

this.importService = new ImportService(
this.cipherService,
this.folderService,
Expand All @@ -1090,15 +1092,8 @@ export default class MainBackground {
this.pinService,
this.accountService,
this.restrictedItemTypesService,
createSystemServiceProvider(
new KeyServiceLegacyEncryptorProvider(this.encryptService, this.keyService),
this.stateProvider,
this.policyService,
buildExtensionRegistry(),
this.logService,
this.platformUtilsService,
this.configService,
),
envService,
logProvider,
);

this.individualVaultExportService = new IndividualVaultExportService(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,18 @@ import { ReplaySubject, Subject, firstValueFrom, map, switchMap, takeUntil } fro
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { Account, AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import {
SemanticLogger,
disabledSemanticLoggerProvider,
ifEnabledSemanticLoggerProvider,
} from "@bitwarden/common/tools/log";
import { UserId } from "@bitwarden/common/types/guid";
import { ButtonModule, DialogService } from "@bitwarden/components";
import {
CredentialGeneratorHistoryComponent as CredentialGeneratorHistoryToolsComponent,
EmptyCredentialHistoryComponent,
} from "@bitwarden/generator-components";
import { GeneratorHistoryService } from "@bitwarden/generator-history";
import {
disabledSemanticLoggerProvider,
ifEnabledSemanticLoggerProvider,
SemanticLogger,
} from "@bitwarden/logging";

import { PopOutComponent } from "../../../platform/popup/components/pop-out.component";
import { PopupFooterComponent } from "../../../platform/popup/layout/popup-footer.component";
Expand Down
19 changes: 7 additions & 12 deletions apps/cli/src/service-container/service-container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,13 +114,11 @@ import { DefaultSyncService } from "@bitwarden/common/platform/sync/internal";
import { AuditService } from "@bitwarden/common/services/audit.service";
import { EventCollectionService } from "@bitwarden/common/services/event/event-collection.service";
import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service";
import { KeyServiceLegacyEncryptorProvider } from "@bitwarden/common/tools/cryptography/key-service-legacy-encryptor-provider";
import { buildExtensionRegistry } from "@bitwarden/common/tools/extension/factory";
import {
PasswordStrengthService,
PasswordStrengthServiceAbstraction,
} from "@bitwarden/common/tools/password-strength";
import { createSystemServiceProvider } from "@bitwarden/common/tools/providers";
import { DefaultEnvService } from "@bitwarden/common/tools/providers";
import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service";
import { SendStateProvider } from "@bitwarden/common/tools/send/services/send-state.provider";
import { SendService } from "@bitwarden/common/tools/send/services/send.service";
Expand Down Expand Up @@ -158,6 +156,7 @@ import {
BiometricStateService,
DefaultBiometricStateService,
} from "@bitwarden/key-management";
import { enableLogForTypes } from "@bitwarden/logging";
import { NodeCryptoFunctionService } from "@bitwarden/node/services/node-crypto-function.service";
import {
ActiveUserStateProvider,
Expand Down Expand Up @@ -823,6 +822,9 @@ export class ServiceContainer {

this.importApiService = new ImportApiService(this.apiService);

const envService = new DefaultEnvService(this.configService, this.platformUtilsService);
const logProvider = enableLogForTypes(this.logService, []);

this.importService = new ImportService(
this.cipherService,
this.folderService,
Expand All @@ -834,15 +836,8 @@ export class ServiceContainer {
this.pinService,
this.accountService,
this.restrictedItemTypesService,
createSystemServiceProvider(
new KeyServiceLegacyEncryptorProvider(this.encryptService, this.keyService),
this.stateProvider,
this.policyService,
buildExtensionRegistry(),
this.logService,
this.platformUtilsService,
this.configService,
),
envService,
logProvider,
);

this.individualExportService = new IndividualVaultExportService(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@ import { Router, UrlTree } from "@angular/router";
import { mock, MockProxy } from "jest-mock-extended";
import { firstValueFrom, NEVER } from "rxjs";

import { LOG_PROVIDER } from "@bitwarden/angular/services/injection-tokens";
import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
import { StateProvider } from "@bitwarden/common/platform/state";
import { mockAccountServiceWith, FakeStateProvider } from "@bitwarden/common/spec";
import { SemanticLogger } from "@bitwarden/common/tools/log";
import { SystemServiceProvider } from "@bitwarden/common/tools/providers";
import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service.abstraction";
import { UserId } from "@bitwarden/common/types/guid";
import { SYSTEM_SERVICE_PROVIDER } from "@bitwarden/generator-components";
import { LogProvider, SemanticLogger } from "@bitwarden/logging";

import { DefaultSendAccessService } from "./default-send-access-service";
import { SEND_RESPONSE_KEY, SEND_CONTEXT_KEY } from "./send-access-memory";
Expand All @@ -21,25 +20,23 @@ describe("DefaultSendAccessService", () => {
let sendApiService: MockProxy<SendApiService>;
let router: MockProxy<Router>;
let logger: MockProxy<SemanticLogger>;
let systemServiceProvider: MockProxy<SystemServiceProvider>;
let logProvider: LogProvider;

beforeEach(() => {
const accountService = mockAccountServiceWith("user-id" as UserId);
stateProvider = new FakeStateProvider(accountService);
sendApiService = mock<SendApiService>();
router = mock<Router>();
logger = mock<SemanticLogger>();
systemServiceProvider = mock<SystemServiceProvider>();

systemServiceProvider.log.mockReturnValue(logger);
logProvider = jest.fn().mockReturnValue(logger) as any;

TestBed.configureTestingModule({
providers: [
DefaultSendAccessService,
{ provide: StateProvider, useValue: stateProvider },
{ provide: SendApiService, useValue: sendApiService },
{ provide: Router, useValue: router },
{ provide: SYSTEM_SERVICE_PROVIDER, useValue: systemServiceProvider },
{ provide: LOG_PROVIDER, useValue: logProvider },
],
});

Expand All @@ -48,7 +45,7 @@ describe("DefaultSendAccessService", () => {

describe("constructor", () => {
it("creates logger with type 'SendAccessAuthenticationService' when initialized", () => {
expect(systemServiceProvider.log).toHaveBeenCalledWith({
expect(logProvider).toHaveBeenCalledWith({
type: "SendAccessAuthenticationService",
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@ import { Injectable, Inject } from "@angular/core";
import { Router, UrlTree } from "@angular/router";
import { map, of, from, catchError, timeout } from "rxjs";

import { LOG_PROVIDER } from "@bitwarden/angular/services/injection-tokens";
import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
import { StateProvider } from "@bitwarden/common/platform/state";
import { SemanticLogger } from "@bitwarden/common/tools/log";
import { SystemServiceProvider } from "@bitwarden/common/tools/providers";
import { SendAccessRequest } from "@bitwarden/common/tools/send/models/request/send-access.request";
import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service.abstraction";
import { SYSTEM_SERVICE_PROVIDER } from "@bitwarden/generator-components";
import { LogProvider, SemanticLogger } from "@bitwarden/logging";

import { SEND_RESPONSE_KEY, SEND_CONTEXT_KEY } from "./send-access-memory";
import { SendAccessService } from "./send-access-service.abstraction";
Expand All @@ -24,9 +23,9 @@ export class DefaultSendAccessService implements SendAccessService {
private readonly state: StateProvider,
private readonly api: SendApiService,
private readonly router: Router,
@Inject(SYSTEM_SERVICE_PROVIDER) system: SystemServiceProvider,
@Inject(LOG_PROVIDER) log: LogProvider,
) {
this.logger = system.log({ type: "SendAccessAuthenticationService" });
this.logger = log({ type: "SendAccessAuthenticationService" });
}

redirect$(sendId: string) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@ import { TestBed } from "@angular/core/testing";
import { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from "@angular/router";
import { firstValueFrom, Observable, of } from "rxjs";

import { SemanticLogger } from "@bitwarden/common/tools/log";
import { SystemServiceProvider } from "@bitwarden/common/tools/providers";
import { SYSTEM_SERVICE_PROVIDER } from "@bitwarden/generator-components";
import { LOG_PROVIDER } from "@bitwarden/angular/services/injection-tokens";
import { LogProvider, SemanticLogger } from "@bitwarden/logging";

import { SendAccessService } from "./send-access-service.abstraction";
import { trySendAccess } from "./try-send-access.guard";
Expand All @@ -22,10 +21,8 @@ function createMockLogger(): SemanticLogger {
} as any as SemanticLogger;
}

function createMockSystemServiceProvider(): SystemServiceProvider {
return {
log: jest.fn().mockReturnValue(createMockLogger()),
} as any as SystemServiceProvider;
function createMockLogProvider(): LogProvider {
return jest.fn().mockReturnValue(createMockLogger()) as any;
}

function createMockSendAccessService() {
Expand All @@ -38,18 +35,18 @@ function createMockSendAccessService() {

describe("trySendAccess", () => {
let mockSendAccessService: ReturnType<typeof createMockSendAccessService>;
let mockSystemServiceProvider: SystemServiceProvider;
let mockLogProvider: LogProvider;
let mockRouterState: RouterStateSnapshot;

beforeEach(() => {
mockSendAccessService = createMockSendAccessService();
mockSystemServiceProvider = createMockSystemServiceProvider();
mockLogProvider = createMockLogProvider();
mockRouterState = {} as RouterStateSnapshot;

TestBed.configureTestingModule({
providers: [
{ provide: SendAccessService, useValue: mockSendAccessService },
{ provide: SYSTEM_SERVICE_PROVIDER, useValue: mockSystemServiceProvider },
{ provide: LOG_PROVIDER, useValue: mockLogProvider },
],
});
});
Expand Down Expand Up @@ -97,7 +94,7 @@ describe("trySendAccess", () => {
await expect(firstValueFrom(guardResult!)).resolves.toEqual(expectedUrlTree);

// Logger methods should not be called for warnings or panics
const mockLogger = (mockSystemServiceProvider.log as jest.Mock).mock.results[0].value;
const mockLogger = (mockLogProvider as jest.Mock).mock.results[0].value;
expect(mockLogger.warn).not.toHaveBeenCalled();
expect(mockLogger.panic).not.toHaveBeenCalled();
});
Expand All @@ -116,7 +113,7 @@ describe("trySendAccess", () => {
sendIdValue === undefined ? { key } : { sendId: sendIdValue, key },
);
const mockLogger = createMockLogger();
(mockSystemServiceProvider.log as jest.Mock).mockReturnValue(mockLogger);
(mockLogProvider as jest.Mock).mockReturnValue(mockLogger);

await expect(async () => {
const result$ = TestBed.runInInjectionContext(() =>
Expand All @@ -125,7 +122,7 @@ describe("trySendAccess", () => {
await firstValueFrom(result$);
}).rejects.toThrow("Logger panic called");

expect(mockSystemServiceProvider.log).toHaveBeenCalledWith({
expect(mockLogProvider).toHaveBeenCalledWith({
function: "trySendAccess",
});
expect(mockLogger.warn).toHaveBeenCalledWith(
Expand All @@ -142,7 +139,7 @@ describe("trySendAccess", () => {
const key = "valid-key";
const mockRoute = createMockRoute({ sendId: value, key });
const mockLogger = createMockLogger();
(mockSystemServiceProvider.log as jest.Mock).mockReturnValue(mockLogger);
(mockLogProvider as jest.Mock).mockReturnValue(mockLogger);

await expect(async () => {
const result$ = TestBed.runInInjectionContext(() =>
Expand All @@ -151,7 +148,7 @@ describe("trySendAccess", () => {
await firstValueFrom(result$);
}).rejects.toThrow("Logger panic called");

expect(mockSystemServiceProvider.log).toHaveBeenCalledWith({ function: "trySendAccess" });
expect(mockLogProvider).toHaveBeenCalledWith({ function: "trySendAccess" });
expect(mockLogger.panic).toHaveBeenCalledWith(
{ expected: "string", actual: type },
"sendId has invalid type",
Expand All @@ -167,7 +164,7 @@ describe("trySendAccess", () => {
invalidSendId === undefined ? { key } : { sendId: invalidSendId, key },
);
const mockLogger = createMockLogger();
(mockSystemServiceProvider.log as jest.Mock).mockReturnValue(mockLogger);
(mockLogProvider as jest.Mock).mockReturnValue(mockLogger);

await expect(async () => {
const result$ = TestBed.runInInjectionContext(() =>
Expand All @@ -189,7 +186,7 @@ describe("trySendAccess", () => {
keyValue === undefined ? { sendId } : { sendId, key: keyValue },
);
const mockLogger = createMockLogger();
(mockSystemServiceProvider.log as jest.Mock).mockReturnValue(mockLogger);
(mockLogProvider as jest.Mock).mockReturnValue(mockLogger);

await expect(async () => {
const result$ = TestBed.runInInjectionContext(() =>
Expand All @@ -198,7 +195,7 @@ describe("trySendAccess", () => {
await firstValueFrom(result$);
}).rejects.toThrow("Logger panic called");

expect(mockSystemServiceProvider.log).toHaveBeenCalledWith({ function: "trySendAccess" });
expect(mockLogProvider).toHaveBeenCalledWith({ function: "trySendAccess" });
expect(mockLogger.panic).toHaveBeenCalledWith("key missing from the route parameters");
});

Expand All @@ -210,7 +207,7 @@ describe("trySendAccess", () => {
const sendId = "valid-send-id";
const mockRoute = createMockRoute({ sendId, key: value });
const mockLogger = createMockLogger();
(mockSystemServiceProvider.log as jest.Mock).mockReturnValue(mockLogger);
(mockLogProvider as jest.Mock).mockReturnValue(mockLogger);

await expect(async () => {
const result$ = TestBed.runInInjectionContext(() =>
Expand All @@ -219,7 +216,7 @@ describe("trySendAccess", () => {
await firstValueFrom(result$);
}).rejects.toThrow("Logger panic called");

expect(mockSystemServiceProvider.log).toHaveBeenCalledWith({ function: "trySendAccess" });
expect(mockLogProvider).toHaveBeenCalledWith({ function: "trySendAccess" });
expect(mockLogger.panic).toHaveBeenCalledWith(
{ expected: "string", actual: type },
"key has invalid type",
Expand All @@ -235,7 +232,7 @@ describe("trySendAccess", () => {
invalidKey === undefined ? { sendId } : { sendId, key: invalidKey },
);
const mockLogger = createMockLogger();
(mockSystemServiceProvider.log as jest.Mock).mockReturnValue(mockLogger);
(mockLogProvider as jest.Mock).mockReturnValue(mockLogger);

await expect(async () => {
const result$ = TestBed.runInInjectionContext(() =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import { inject } from "@angular/core";
import { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from "@angular/router";
import { from, ignoreElements, concat } from "rxjs";

import { SystemServiceProvider } from "@bitwarden/common/tools/providers";
import { SYSTEM_SERVICE_PROVIDER } from "@bitwarden/generator-components";
import { LOG_PROVIDER } from "@bitwarden/angular/services/injection-tokens";
import { LogProvider } from "@bitwarden/logging";

import { SendAccessService } from "./send-access-service.abstraction";

Expand All @@ -12,8 +12,8 @@ export const trySendAccess: CanActivateFn = (
_state: RouterStateSnapshot,
) => {
const sendAccess = inject(SendAccessService);
const system = inject<SystemServiceProvider>(SYSTEM_SERVICE_PROVIDER);
const logger = system.log({ function: "trySendAccess" });
const log = inject<LogProvider>(LOG_PROVIDER);
const logger = log({ function: "trySendAccess" });

const { sendId, key } = route.params;
if (!sendId) {
Expand Down
2 changes: 2 additions & 0 deletions libs/angular/src/services/injection-tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ import {
import { Theme } from "@bitwarden/common/platform/enums";
import { Message } from "@bitwarden/common/platform/messaging";
import { HttpOperations } from "@bitwarden/common/services/api.service";
import { LogProvider } from "@bitwarden/logging";
import { SafeInjectionToken } from "@bitwarden/ui-common";
// Re-export the SafeInjectionToken from ui-common
export { SafeInjectionToken } from "@bitwarden/ui-common";

export const LOG_PROVIDER = new SafeInjectionToken<LogProvider>("LogProvider");
export const WINDOW = new SafeInjectionToken<Window>("WINDOW");
export const DOCUMENT = new SafeInjectionToken<Document>("DOCUMENT");
export const OBSERVABLE_MEMORY_STORAGE = new SafeInjectionToken<
Expand Down
Loading
Loading