1
0
mirror of https://github.com/bitwarden/browser synced 2026-01-28 15:23:53 +00:00
Commit Graph

6095 Commits

Author SHA1 Message Date
Tom
5832065e96 Revert "[PM-30319] [BLOCKER] phish cache freeze (#18157)" (#18245)
This reverts commit fcc2844a16.
2026-01-07 19:25:10 +00:00
neuronull
196db093b2 Desktop autotype remove SHIFT from valid modifier keys (#17347)
Removal of SHIFT from valid modifier keys. As it stands, we allow [SHIFT + `<a-z>`] , which would prevent users from capitalizing letters. As a result, the default shortcut has to change (because it included SHIFT). Changed to CONTROL + ALT + b
2026-01-07 11:54:46 -07:00
neuronull
9ba9c89ee6 Allow unmaintained crates in transient deps (#18241) 2026-01-07 18:00:31 +00:00
Thomas Avery
0e2748784b [PM-25385] Remove unlock-with-master-password-unlock-data flag (#18010)
* remove feature flag from lock component

* Add missing windowHidden desktop feature

* Remove the flag from CLI unlock

* Remove the flag from enum file
2026-01-07 11:29:12 -06:00
Stephon Brown
fa45110420 [PM-29061] Remove Feature Flag 24996 (#18009)
* refactor(billing): remove FF from vault banner

* refactor(billing): remove from prompt service

* chore(billing): remove feature flag

* fix(billing): remove premium banner

* tests(billing): remove premium banner tests

* chore(vault): clean up premium banner dependencies

* fix(billing): revert formatting

* fix(billing): revert formatting

* fix(billing): remove old FF

* fix(billling): revert formatting
2026-01-07 12:19:54 -05:00
Alex Morask
1f763f470a [PM-29608] [PM-29609] Premium subscription redesign cards (#18145)
* refactor(pricing): misc

- Remove unused test file

* refactor(pricing): discount-badge.component

- Introduce new Discount union type
- Introduce Maybe type helper for T | null | undefined
- Use Discount type in the discount-badge.component
- Update the user-subscription.component to pass Discount type into the discount-badge.component
- Update spec, stories and mdx

* refactor(pricing): pricing-card.component

- Support changeDetection: ChangeDetectionStrategy.OnPush
- Update spec and mdx files

* refactor(pricing): cart-summary.component

- Introduce new Cart type
- Use Cart type as main input in cart-summary.component
- Support optional custom header template in cart-summary.component
- Support optional cart-level Discount type in cart-summary.component
- Update upgrade-payment.component to pass in new Cart type to cart-summary.component
- Update spec file, stories and mdx file

* feat(subscription): misc

- Remove unused test file
- Update jest.config.js
- Add test.setup.ts

* feat(subscription): subscription-card.component

- Add BitwardenSubscription type
- Add subscription-card.component
- Add translations
- Add spec file, stories and MDX file

* feat(subscription): storage-card.component

- Add standalone Storage type
- Add storage-card.component
- Add spec file, stories and MDX file

* feat(subscription): additional-options-card.component

- Add additional-options-card.component
- Add spec file, stories and MDX file

* fix(pricing): cart-summary.component.stories.ts lint

* fix(pricing): discount-badge.component.stories.ts lint

* fix(web): Resolve estimatedTax$ toSignal for use in cart on upgrade-payment.component

* feedback(design): Fix design issues

* Kyle's feedback

* Kyle's feedback

* cleanup: Use SubscriptionStatuses instead of string values

* feat: Add CTA disabling input to storage-card.component

* feat: Add CTA disabling input to additional-options-card.component
2026-01-07 10:54:32 -06:00
Daniel Riera
ba89a3dd70 make abortController optional to match the handler (#18143) 2026-01-07 11:04:04 -05:00
bw-ghapp[bot]
15efacaae9 Autosync the updated translations (#18234)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2026-01-07 16:55:06 +01:00
neuronull
b644cca91e Desktop Autotype add service unit tests (#17678) 2026-01-07 08:54:28 -07:00
bw-ghapp[bot]
9ff3540406 Autosync the updated translations (#18235)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2026-01-07 15:54:15 +00:00
bw-ghapp[bot]
2e7e9671a6 Autosync the updated translations (#18233)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2026-01-07 15:53:15 +00:00
Alex
fcc2844a16 [PM-30319] [BLOCKER] phish cache freeze (#18157)
* prevent redundant cache updates on account switch

Remove automatic cache update triggering that caused UI freezes when
switching to accounts with phishing detection access.

Root cause: The update$ observable used startWith(undefined) which
triggered an immediate cache refresh whenever a new subscription was
created. On account switch, phishingDetectionSettingsService.on$ emits
true, creating a new subscription and triggering a full ~800K entry
fetch that blocks the UI thread.

Fix:
- Remove startWith(undefined) to prevent auto-triggering on subscription
- Add MIN_UPDATE_INTERVAL (5 min) constant for cache freshness checks
- Add _updateInProgress flag to prevent concurrent updates
- Add filter() to skip updates when one is already in progress
- Add cache freshness check (skip if updated within 5 minutes)
- Add finalize() to reliably reset _updateInProgress flag (per ADR)
- Replace share() with shareReplay() to prevent duplicate work
- Add triggerUpdateIfNeeded() public method for explicit update requests

The scheduled 24-hour update interval is unaffected - it still calls
_triggerUpdate$.next() via the task scheduler.

* trigger cache updates asynchronously on account switch

Update PhishingDetectionService to explicitly trigger cache updates
when phishing detection becomes active for an account, using a
non-blocking pattern.

Changes:
- Add call to phishingDataService.triggerUpdateIfNeeded() when on$ emits true
- Use of(null).pipe(delay(0)) to defer update to next event loop tick
- This prevents the update from blocking the account switch UI flow

The delay(0) pattern is preferred over setTimeout per codebase conventions
(RxJS over native JS). The subscription auto-completes since of() emits
once and completes, so no manual cleanup is needed.

Combined with the previous commit's safeguards (cache freshness check,
concurrent update prevention), this ensures:
1. Account switch completes immediately (non-blocking trigger)
2. Cache updates only run when actually needed (< 5 min freshness)
3. Concurrent updates are prevented (_updateInProgress flag)

Fixes: PM-30319

* decouple cache update subscription from UI event merge

Move phishingDataService.update$ to a separate subscription outside the
merge() stream to prevent blocking the service worker during critical
initialization and account switch flows.

Background:
The service worker is single-threaded. When the phishing cache update
runs, it downloads a 25MB file and parses 800K entries using .split(),
which is CPU-intensive synchronous work. During this parsing, the
service worker cannot respond to popup requests, causing the extension
UI to appear frozen when the user clicks the extension icon.

Previously, update$ was included in the merge() alongside UI event
handlers (onTabUpdated$, onContinueCommand$, onCancelCommand$). When
on$ emitted true (user has phishing access), the merge subscription
was created as part of the same synchronous flow, coupling the heavy
cache work with the UI event setup.

Changes:
- Create separate updateSub subscription at initialization
- Remove update$ from merge() - now only contains UI event streams
- Keep delay(0) trigger for triggerUpdateIfNeeded()

How delay(0) works:
JavaScript's event loop must complete all synchronous code before
processing async callbacks. delay(0) schedules the trigger for the
next event loop tick, meaning:
1. initialize() completes and returns
2. Service worker is 'free' to handle other tasks
3. Next tick: triggerUpdateIfNeeded() fires
4. Cache update runs in background

The cache parsing will still block the thread when it eventually runs,
but this is now decoupled from the critical initialization path. The
window where blocking can affect user interaction is minimized.

PM-30319

* comment

* account for new changes in spec file

* prevent UI blocking during cache updates

Problem:
- Switching accounts caused 5+ second UI freeze
- Even when data unchanged, 789K entries were rewritten to IndexedDB
- Set was rebuilt from 789K entries on every state emission

Solution:
- Skip state update when checksum matches (return null instead of full data)
- Cache Set in memory, only rebuild when checksum changes
- Track last check time in memory instead of state
- Use streaming fetch to prevent Firefox memory explosion
- Add comprehensive logging for debugging

Performance improvement:
- Checksum match: ~5 seconds → ~10ms (no blocking)
- Full update: Still required when data changes, but with streaming

* pre-populate cache on install/update and optimize Set building

Problem:
Premium users experienced a 5+ second UI freeze on first login after
install because the phishing list (~63MB, 789K entries) was downloaded
synchronously when phishing detection was enabled.

Solution:
1. Pre-populate cache on extension install/update
   - Added triggerPhishingCacheUpdate() to MainBackground
   - RuntimeBackground calls this on "install" and "update" events
   - Cache is ready before user logs in, eliminating first-login lag

2. Chunked Set building for UI responsiveness
   - Build Set in 50K-entry chunks with event loop yields
   - Changed from synchronous map() to async switchMap() + buildSetInChunks()
   - Prevents UI blocking when Set is rebuilt from cached data

3. Streaming with yields
   - Added yield after each network chunk during streaming fetch
   - Keeps service worker responsive to popup messages during download

4. Log cleanup for production
   - Converted verbose debugging logs from info → debug level
   - Kept important operational events (daily/full updates) at info
   - Removed timing logs and progress banners
   - Fixed comment accuracy: 100MB → 63MB uncompressed

Performance impact:
- First login after install: 5+ seconds → near-instant (cache pre-populated)
- Set rebuild: non-blocking via chunked processing
- Subsequent updates: already optimized via checksum matching

* spec

* add allowlist for bare amazon.com domain

Problem:
The upstream Phishing.Database contains a false positive entry
`https://www.Amazon.com` (line 666495), causing the real Amazon
website to be incorrectly blocked.

Solution:
Add BARE_DOMAIN_ALLOWLIST that skips blocking for exact hostname
matches (amazon.com, www.amazon.com) when the URL has no path,
query, or hash. This protects users from false positives while
still detecting phishing URLs that use Amazon in paths or
subdomain tricks.

Allowed:
- https://amazon.com
- https://www.amazon.com

Still blocked:
- https://amazon.com/phishing/path
- https://amazon.com-malicious.xyz
- https://fake.com/amazon.com/steal

* logging

* update our links source url

* Fix Chrome memory leak in phishing detection service

* reduce memory leaks

* optimize phishing detection performance and fix memory leaks

This commit addresses critical performance issues and memory leaks in the
phishing detection feature, particularly for non-premium users and during
extension reloads.

Storage Isolation:
- Created BrowserIndexedDbStorageService for large data storage
- Separated PHISHING_DATA_DISK (60MB+ phishing URLs) from PHISHING_DETECTION_DISK
- Prevents popup from loading large dataset when accessing small settings
- Fixed UI freeze when navigating to Settings -> Account security -> back arrow

Lazy Loading Optimizations:
- Converted _cachedState, _webAddresses$, and update$ to lazy getters
- Only accesses IndexedDB when phishing detection is actually used
- Prevents blocking service worker initialization on extension reload
- Added guard in triggerUpdateIfNeeded() to skip if no observers

Performance Improvements:
- Modified buildEnabledPipeline$() to check available$ first
- Uses startWith(true) to emit immediately, preventing on$ from blocking
- Skips IndexedDB reads for non-premium users during unlock/account switch
- Prevents 3+ second UI freezes for non-premium users

Memory Leak Fixes:
- Added static interval cleanup to prevent accumulation on service recreation
- Fixed tab listener cleanup by storing bound handler reference
- Fixed triggerUpdateSub subscription cleanup on account switches
- Prevents exponential memory growth from undestroyed subscriptions

Test Fixes:
- Updated tests to set up available$ prerequisites before testing enabled$
- Fixed tests to wait for actual state values after startWith(true) emission
- Uses filter() to wait for expected state values in async tests

Files Changed:
- apps/browser/src/platform/services/browser-indexed-db-storage.service.ts (new)
- apps/browser/src/platform/storage/browser-storage-service.provider.ts
- apps/browser/src/dirt/phishing-detection/services/phishing-data.service.ts
- apps/browser/src/dirt/phishing-detection/services/phishing-detection.service.ts
- apps/browser/src/background/runtime.background.ts
- libs/common/src/dirt/services/phishing-detection/phishing-detection-settings.service.ts
- libs/common/src/dirt/services/phishing-detection/phishing-detection-settings.service.spec.ts
- libs/state/src/core/state-definitions.ts
- libs/storage-core/src/client-locations.ts

* fix test type errors

* remove allowlist

* storage isolation revert

The initial implementation of storage isolation was used to fix a specific navigation scenario that lead to freezing of the ui ("Settings → Account Security" and clicking the back button)

Why disk-large instead of memory-large-object:

- **Problem**: Users experienced infinite loading (2+ minute freezes) when navigating to "Settings → Account Security" and clicking the back button. The Popup would freeze because `chrome.storage.local` broadcasts 60MB writes to all contexts, causing the Popup to deserialize data it never requested.
- **Fix**: Created `disk-large` storage location using native IndexedDB, which persists data (unlike `memory-large-object`) and doesn't broadcast events (unlike `chrome.storage.local`), isolating large datasets from the Popup context.

**Key Difference:**
- `memory-large-object`: **Non-persistent** in-memory storage. Data is lost when the service worker restarts or the extension reloads.
- `disk-large`: **Persistent** storage using native IndexedDB. Data survives service worker restarts and extension reloads.

**Why We Need Persistence:**
The phishing dataset (~60MB, 780K entries) must persist across:
- Service worker restarts (Chrome terminates service workers after inactivity)
- Extension reloads/updates
- Browser restarts

If we used `memory-large-object`, the extension would need to re-download the entire 60MB dataset every time the service worker restarts, which happens frequently in Chrome. This would:
1. Waste bandwidth (60MB downloads on every restart)
2. Cause UI freezes on every restart (same problem we're trying to fix)
3. Fail offline scenarios

**Why Not Use Existing `disk` Location:**
The existing `"disk"` location uses `chrome.storage.local`, which has a critical flaw for large datasets:
- **Event Broadcasting**: Any write to `chrome.storage.local` triggers `onChanged` events broadcast to **all** extension contexts (Background, Popup, Sidebar)
- **The UI/UX Problem**:
  - Users experienced **infinite loading** or **2+ minute freezes** when navigating to "Settings → Account Security" and clicking the back button
  - When Background writes 60MB, Chrome serializes and IPCs it to Popup, causing Popup's main thread to freeze while deserializing this massive object, even if Popup never requested the data
  - The Popup would become completely unresponsive, showing a spinning cursor or blank screen
- **The Fix**: Native IndexedDB doesn't broadcast events across processes, isolating the storage so Background can write 60MB without disturbing the Popup

* remove implementation comments from jsdoc

* renaming

* new domains source

* remove unnecessary complexity from buildEnabledPipeline and remove all IndexedDB references

* fix pre-population on install/update

* handle null webAddresses

---------

Co-authored-by: maxkpower <mpower@bitwarden.com>
2026-01-07 07:21:19 -08:00
Daniel Riera
c85e66f563 [PM-29516] Remove ts strict ignore in utils index (#18047)
* use type safe generics for throttle and debounce, account for the change were event isn't passed

* read gloabl once

* check for styles before setting

* narrow keywords index

* narrow bitwardenAutofillInit for callback

* nullish coalescing operator on value for prop attributes
2026-01-07 09:59:33 -05:00
renovate[bot]
867f5727ca [deps]: Update Rust crate cc to v1.2.51 (#18230)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-07 12:41:09 +00:00
cd-bitwarden
2a0a89a77e [SM-1570] Adding DisableSMAdsForUsers - Front end changes to disable SM ads for users (#17000)
* Front end changes to disable SM ads for users

* fixing failing tests

* Update libs/common/src/admin-console/models/response/organization.response.ts

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>

* fixing merge conflicts

* claude suggestion

* adding feature flag for disable sm ads on clients

* fixing tests

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
2026-01-07 04:02:41 +00:00
rr-bw
d6b23670aa feat(auth-request-answering): [Auth / PM-26209] Use AuthRequestAnsweringService on Desktop (#16906)
Update Desktop to use the AuthRequestAnsweringService, bringing it into feature parity with the Extension.
2026-01-06 13:48:07 -08:00
Jason Ng
a4b5192bd8 [PM-26516] Archive Vault Updates Non Premium (#18068)
* add callout to vault-items for non premium users, add upgrade premium flow
* add archive badge to item details only for desktop
* update desktop edit item save for unarchive
* updated success toast for edited archive item non premium
2026-01-06 16:34:52 -05:00
Jordan Aasen
9c8a92c8ac [PM-29214] - update at-risk launch link (#18093)
* update at-risk launch link

* use bit-hint

* remove getter
2026-01-06 10:22:06 -08:00
Oscar Hinton
7d496febb7 [PM-30473] Add links to tools in the sidebar (#18217)
* Add links to tools in the sidebar

* Fix test
2026-01-06 16:41:36 +01:00
gitclonebrian
98d0960c2a added commands to pack:lin and pack:lin:arm64 scripts to include icons and .desktop file in tar.gz. (#18170) 2026-01-06 10:33:01 -05:00
Jason Ng
e344d342be [PM-30135] deleted archived items restored to archive (#18212) 2026-01-06 10:29:15 -05:00
Jordan Aasen
e25dd785a6 open help links in new tab (#18109) 2026-01-05 15:18:56 -08:00
Jordan Aasen
1cb5d5ce7a [PM-30249] - allow org ciphers to be archived (#18214)
* allow org ciphers to be archived

* fix title in item footer unarchive
2026-01-05 15:18:00 -08:00
Vincent Salucci
86764d807a [PM-22434] Remove CreateDefaultLocation feature flag references and definition (#18057)
* chore: remove ff from vault-popup-list-filters.service, refs PM-22434

* chore: remove ff from confirm.command, refs PM-22434

* chore: remove ff from bulk-confirm-dialog.component, refs PM-22434

* chore: remove ff from member-actions.service and clean up leftover imports, refs PM-22434

* chore: remove ff from policy-edit-dialog.component, refs PM-22434

* chore: remove ff from organization-data-ownership.component, refs PM-22434

* chore: remove ff from vnext-organization-data-ownership.component, refs PM-22434

* chore: remove ff from vault-filter.service, refs PM-22434

* chore: remove ff from vault-filter.service (libs), refs PM-22434

* chore: remove ff from export.component, refs PM-22434

* chore: update observeMyItemsExclusionCriteria method documentation comments, refs PM-22434

* chore: remove ff from item-details-section.component, refs PM-22434

* chore: remove ff definition, refs PM-22434

* fix: remove configService from superclasses, refs PM-22434

* chore: update injection for VaultPopupListFilters service instantiation, refs PM-22434

* chore: update ConfirmCommand instantiation, refs PM-22434

* chore: update import order in member-actions.service, refs PM-22434

* fix: constructor argument update to amend merge conflict, refs PM-22434

* chore: remove unnecessary feature flag related tests for confirm user, refs PM-22434

* fix: remove unused services from member-actions.service.spec, refs PM-22434
2026-01-05 16:25:57 -06:00
Isaac Ivins
cf285abd3d Feature/pm 25865 migrate send list desktop migration (#18008)
This PR moves the Desktop Send list UI into a shared library component and updates the Desktop Send v2 component to use modern Angular patterns (Signals, OnPush, no manual subscriptions)
2026-01-05 15:37:24 +01:00
bw-ghapp[bot]
f3d34ad9c1 Autosync the updated translations (#18180)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2026-01-05 10:53:22 +00:00
bw-ghapp[bot]
6bc8cfcd72 Autosync the updated translations (#18178)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2026-01-05 04:40:53 -06:00
bw-ghapp[bot]
899e1ba77f Autosync the updated translations (#18179)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2026-01-05 10:16:03 +00:00
Derek Nance
6183492b8f Fix skipped memory storage tests (#18168)
This commit fixes the tests that were skipped as part of #17245.
2026-01-05 11:12:31 +01:00
Robyn MacCallum
3558db0e0c Revert "[PM-29418] Fix SSH list not working while locked (#17866)" (#18171)
This reverts commit 24dcbb48c6.
2026-01-02 09:48:39 -05:00
Thomas Avery
966f9a0c52 [PM-29928] Fix biometrics status check when native messaging permission is missing (#18154)
* Dont check biometrics status when nativeMessaging permission isn't granted

* Increase polling interval and add unit tests
2025-12-31 12:53:57 -06:00
Maciej Zieniuk
7fa1a6f07f [PM-27236] account registration v2 for key connector (#17951)
* account registration v2 for key connector

* explicit naming

* test coverage

* missing AccountCryptographicStateService and DI dependencies

* redundant SdkLoadService.Ready

* update sdk version
2025-12-31 11:04:54 +01:00
Maciej Zieniuk
2b5f474bf0 incorrectly serialized symmetric crypto key in session storage (#18150) 2025-12-31 08:31:26 +01:00
Alex Morask
11b5342df7 Remove circular invocation / have Account menu use new premium dialog (#17980) 2025-12-30 13:03:51 -06:00
Leslie Tilton
800a21d8a3 [PM-28548] Phishing Blocker support links (#18070)
* Change domain terminology to web addresses

* Added phishing resource file

* Finish renaming and adding runtime configuration for domains vs links setting

* Update reference

* Add matching functions per resource

* correct URL matching logic for links-based detection

Problem:
The phishing link matcher was failing to detect known phishing URLs due to
two issues:

1. Protocol mismatch: Entries in the phishing list use `http://` but users
   typically visit `https://` versions. The matcher was comparing full URLs
   including protocol, causing legitimate matches to fail.
   - List entry: `http://smartdapptradxx.pages.dev`
   - User visits: `https://smartdapptradxx.pages.dev/`
   - Result: No match (incorrect)

2. Hostname-only matching would have caused false positives: An earlier
   attempt to fix #1 included hostname-only comparison, which defeats the
   purpose of links-based detection. The goal of PM-28548 is precise URL
   matching to avoid blocking entire domains (like pages.dev, github.io)
   when only specific paths are malicious.

Solution:
- Always strip protocol (http:// or https://) from both entry and URL
  before comparison, treating them as equivalent
- Remove hostname-only matching to maintain precision
- Keep prefix matching for subpaths, query strings, and fragments

---------

Co-authored-by: Alex <adewitt@bitwarden.com>
2025-12-30 09:06:30 -08:00
Ben Brooks
cee69f85c0 [pm-28077] Add input types to ignoredInputTypes (#17870)
* [pm-28077] Add input types to ignoredInputTypes

Signed-off-by: Ben Brooks <bbrooks@bitwarden.com>

* Merge branch 'main' of github.com:bitwarden/clients into pm-28077-more-ignoredInputTypes-in-CollectAutofillContentService

Signed-off-by: Ben Brooks <bbrooks@bitwarden.com>

* [pm-28077] Remove month input type from ignored types

Signed-off-by: Ben Brooks <bbrooks@bitwarden.com>

* [pm-28077] Remove month radio and checkbox types from ignored types

Signed-off-by: Ben Brooks <bbrooks@bitwarden.com>

* Merge branch 'main' of github.com:bitwarden/clients into pm-28077-more-ignoredInputTypes-in-CollectAutofillContentService

Signed-off-by: Ben Brooks <bbrooks@bitwarden.com>

* [pm-28077] Fix prettier issues/conflicts

Signed-off-by: Ben Brooks <bbrooks@bitwarden.com>

* [pm-28077] Add comment regarding datetime depcrecation

Signed-off-by: Ben Brooks <bbrooks@bitwarden.com>

---------

Signed-off-by: Ben Brooks <bbrooks@bitwarden.com>
2025-12-30 08:21:10 -08:00
Daniel Riera
8a6f9bfaeb [PM-29515] Remove ts strict ignore in overlay inline menu iframe content autofill inline menu iframe service (#18030)
* use optional chaining and make portkey optional to match the AutofillInlineMenuIframeExtensionMessage

* make ariaAlertElement optional

* tiemouts are set to null for clearing, updated type to match this

* border color is conditionally applied, undefined is acceptable here

* check if aria alerts exist before calling

* return early if no styles exist for updateElementStyles or no position for updateIframePosition

* initilaize timers to null

* non null assert iframe since it is initialized in initMenuIframe which makes it safe to assert non null by lifecycle

* remove optional chainning
2025-12-30 10:36:08 -05:00
Shane Melton
696c53fac7 [PM-29209] Fix persistent browser settings berry (#18113)
* [PM-29209] Introduce new autofill nudge service specific to the Browser client

* [PM-29209] Cleanup redundant browser setting checks

* [PM-29209] Ensure nudge is dismissed on nudge button click

* [PM-29209] Add spec file for browser autofill nudge service

* [PM-29209] Cleanup settings-v2 spec file
2025-12-29 16:41:42 -08:00
Daniel Riera
7853ac3d9f PM-29509 [LO IMPACT] Remove @ts-strict-ignore in fido2/content/messaging/messenger.ts (#17913)
* PM-29509   [LO IMPACT] Remove @ts-strict-ignore in fido2/content/messaging/messenger.ts - 1 err, 137 LOC, 11.4

* strip metadata from message

* preserve one way handler
2025-12-29 21:16:58 +00:00
Daniel Riera
32e0152cda [PM-29514] Remove ts strict ignore in overlay notifications content overlay notifications content service (#17947)
* early return on typedata if it is not present

* use optional chaining on null checks

* nullish coallescing operator on potentially undefined type

* optional chaining to check both that the element exists and that contentWindow is not null before calling postMessage

* add null check for this.currentNotificationBarType before calling

* add a null check before appending notificationBarRootElement, ts cant track we set the iframe across method calls

* added null checks before calling setElementStyles
2025-12-29 19:46:17 +00:00
Mark Youssef
ccb9a0b8a1 [CL-132] Implement resizable side nav (#16533)
Co-authored-by: Vicki League <vleague@bitwarden.com>
2025-12-29 14:08:33 -05:00
shivam
1c16b8edb9 fix(ui): clean up unintended character on login page (#18101) 2025-12-29 17:31:31 +00:00
Bernd Schoolmann
f689fd88b7 [PM-30285] Add soundness check to cipher and folder recovery step (#18120)
* Add soundness check to cipher and folder recovery step

* fix tests

---------

Co-authored-by: Maciej Zieniuk <mzieniuk@bitwarden.com>
2025-12-29 17:31:15 +00:00
Dave
2707811de8 feat(2fa-webauthn) [PM-20109]: Increase 2FA WebAuthn Security Key Limit (#18040)
* feat(2fa-webauthn) [PM-20109]: Update WebAuthN credential handling.

* feat(messages) [PM-20109]: Add 'Unnamed key' translation.

* refactor(2fa-webauthn) [PM-20109]: Refactor nextId for type safety.

* refactor(2fa-webauthn) [PM-20109]: Clean up template comments.

* fix(webauthn-2fa) [PM-3611]: Key name is required.
2025-12-29 12:19:37 -05:00
Jason Ng
e2a1cfcbe8 [PM29951] add archive flag check to desktop vault-v2 (#18056) 2025-12-29 10:11:12 -05:00
Daniel James Smith
4e1cca132d Bump year in copyright (#18132)
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
2025-12-29 09:10:34 -06:00
neuronull
d3701c38d1 Desktop Autotype introduce strict type for keyboard input (#17141)
* Desktop Autotype introduce strict type for keyboard input

* cleanup

* fix doc typo

* unecessary into()

* use str

* propagate error

* better var name

* pass a slice

* doc comment

* napi fix

* add ownership renovate for new dep

* add code comment about modifier keys being released

* fmt

* remove keytar

* fix input struct size compute

* improve debug comment
2025-12-29 08:10:18 -07:00
Github Actions
47eb28be34 Bumped client version(s) 2025-12-29 14:59:06 +00:00
bw-ghapp[bot]
d4a276f1de Autosync the updated translations (#18130)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2025-12-28 09:57:37 +00:00
bw-ghapp[bot]
00b5329430 Autosync the updated translations (#18129)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2025-12-28 09:57:05 +00:00