From 0ad90d6f7d52258aaf871f089495c4625c01a8ca Mon Sep 17 00:00:00 2001 From: Shane Date: Tue, 24 Feb 2026 12:04:17 -0800 Subject: [PATCH] [PM-25688] Remove ts-strict-ignore from FolderWithIdRequest and update importer service to use FolderRequest instead --- .../src/models/request/import-ciphers.request.ts | 4 ++-- .../models/request/folder-with-id.request.ts | 15 +-------------- libs/importer/src/services/import.service.spec.ts | 5 ----- libs/importer/src/services/import.service.ts | 5 ++--- 4 files changed, 5 insertions(+), 24 deletions(-) diff --git a/libs/common/src/models/request/import-ciphers.request.ts b/libs/common/src/models/request/import-ciphers.request.ts index 14103751b86..065f1b28388 100644 --- a/libs/common/src/models/request/import-ciphers.request.ts +++ b/libs/common/src/models/request/import-ciphers.request.ts @@ -1,10 +1,10 @@ import { CipherRequest } from "../../vault/models/request/cipher.request"; -import { FolderWithIdRequest } from "../../vault/models/request/folder-with-id.request"; +import { FolderRequest } from "../../vault/models/request/folder.request"; import { KvpRequest } from "./kvp.request"; export class ImportCiphersRequest { ciphers: CipherRequest[] = []; - folders: FolderWithIdRequest[] = []; + folders: FolderRequest[] = []; folderRelationships: KvpRequest[] = []; } diff --git a/libs/common/src/vault/models/request/folder-with-id.request.ts b/libs/common/src/vault/models/request/folder-with-id.request.ts index aecb12a05fc..9d8078c12c1 100644 --- a/libs/common/src/vault/models/request/folder-with-id.request.ts +++ b/libs/common/src/vault/models/request/folder-with-id.request.ts @@ -1,25 +1,12 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { Folder } from "../domain/folder"; import { FolderRequest } from "./folder.request"; export class FolderWithIdRequest extends FolderRequest { - /** - * Declared as `string` (not `string | null`) to satisfy the - * {@link UserKeyRotationDataProvider}`` - * constraint on `FolderService`. - * - * At runtime this is `null` for new import folders. PR #17077 enforced strict type-checking on - * folder models, changing this assignment to `folder.id ?? ""` — causing the importer to send - * `{"id":""}` instead of `{"id":null}`, which the server rejected. - * The `|| null` below restores the pre-migration behavior while `@ts-strict-ignore` above - * allows the `null` assignment against the `string` declaration. - */ id: string; constructor(folder: Folder) { super(folder); - this.id = folder.id || null; + this.id = folder.id; } } diff --git a/libs/importer/src/services/import.service.spec.ts b/libs/importer/src/services/import.service.spec.ts index 5f9b3c4b085..ce87bc6ab88 100644 --- a/libs/importer/src/services/import.service.spec.ts +++ b/libs/importer/src/services/import.service.spec.ts @@ -294,11 +294,6 @@ describe("FolderWithIdRequest", () => { const request = new FolderWithIdRequest(makeFolder(guid)); expect(request.id).toBe(guid); }); - - it("sends null when folder id is empty string (new import folder)", () => { - const request = new FolderWithIdRequest(makeFolder("")); - expect(request.id).toBeNull(); - }); }); function createCipher(options: Partial = {}) { diff --git a/libs/importer/src/services/import.service.ts b/libs/importer/src/services/import.service.ts index 38c399eb200..7fba280ba30 100644 --- a/libs/importer/src/services/import.service.ts +++ b/libs/importer/src/services/import.service.ts @@ -24,7 +24,7 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { CipherType, toCipherTypeName } from "@bitwarden/common/vault/enums"; import { CipherRequest } from "@bitwarden/common/vault/models/request/cipher.request"; -import { FolderWithIdRequest } from "@bitwarden/common/vault/models/request/folder-with-id.request"; +import { FolderRequest } from "@bitwarden/common/vault/models/request/folder.request"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; import { RestrictedItemTypesService } from "@bitwarden/common/vault/services/restricted-item-types.service"; @@ -56,7 +56,6 @@ import { KeePass2XmlImporter, KeePassXCsvImporter, KeeperCsvImporter, - // KeeperJsonImporter, LastPassCsvImporter, LogMeOnceCsvImporter, MSecureCsvImporter, @@ -388,7 +387,7 @@ export class ImportService implements ImportServiceAbstraction { if (importResult.folders != null) { for (let i = 0; i < importResult.folders.length; i++) { const f = await this.folderService.encrypt(importResult.folders[i], userKey); - request.folders.push(new FolderWithIdRequest(f)); + request.folders.push(new FolderRequest(f)); } } if (importResult.folderRelationships != null) {