diff --git a/src/config-response.ts b/src/config-response.ts index 255aae5..df7631e 100644 --- a/src/config-response.ts +++ b/src/config-response.ts @@ -31,6 +31,7 @@ export function buildConfigResponse(origin: string) { communication: null, settings: { disableUserRegistration: false, + suppressOnboardingInterstitials: false, }, _icon_service_url: buildIconServiceTemplate(origin), _icon_service_csp: buildIconServiceCsp(origin), diff --git a/src/config/limits.ts b/src/config/limits.ts index 077b5e7..1d855e1 100644 --- a/src/config/limits.ts +++ b/src/config/limits.ts @@ -156,7 +156,9 @@ compatibility: { // Single source of truth for /config.version and /api/version. // /config.version 与 /api/version 的统一版本号来源。 - bitwardenServerVersion: '2026.4.1', + // Vaultwarden 1.37.0 advertises 2026.6.0 after aligning its API response + // with the response contract required by Bitwarden 2026.7.x clients. + bitwardenServerVersion: '2026.6.0', // Official 2026.4.x clients need this flag to receive and use cipher.key. // Hiding existing item keys makes item-key encrypted vault data unreadable. // 官方 2026.4.x 客户端需要该开关来接收并使用 cipher.key。 diff --git a/src/handlers/identity.ts b/src/handlers/identity.ts index 69d3e1c..f97036b 100644 --- a/src/handlers/identity.ts +++ b/src/handlers/identity.ts @@ -206,6 +206,16 @@ function buildPreloginResponse( kdfIterations, kdfMemory, kdfParallelism, + // Current official servers expose the consolidated KDF model alongside + // the legacy flat fields. Keep both shapes while clients migrate. + kdfSettings: { + kdfType, + iterations: kdfIterations, + memory: kdfMemory, + parallelism: kdfParallelism, + }, + salt: null, + // Preserve the historic NodeWarden aliases for older integrations. KdfSettings: { KdfType: kdfType, Iterations: kdfIterations, diff --git a/src/utils/user-decryption.ts b/src/utils/user-decryption.ts index 379ba50..598f50d 100644 --- a/src/utils/user-decryption.ts +++ b/src/utils/user-decryption.ts @@ -17,8 +17,12 @@ export function buildAccountKeys(user: Pick): wrappedPrivateKey: user.privateKey, publicKey, signedPublicKey: null, + object: 'publicKeyEncryptionKeyPair', Object: 'publicKeyEncryptionKeyPair', }, + securityState: null, + signatureKeyPair: null, + object: 'privateKeys', Object: 'privateKeys', }; }