* feat(accept-emergency) [PM-33437]: Add guid boundary detection to component.
* refactor(accept-emergency) [PM-33437]: Re-group and re-name id validation for readability.
* added cherry-pick workflow
* removed hotfix-rc branch from dest_branch options and added the standard hotfix branches
* added cherry-pick workflow to codeowners and set ownership to team-platform-dev
* adds changePasswordUrl as the href target
* passes changePasswordUrl to subcomponent
* updates href logic
* allows changePasswordUrl to be null without error
* changes banner from a link to just text if there is no http(s) uri
* removes change me link under the password field if there is no http(s) uri
* update vulnerable password copy
* changes backend services calls to only when at risk password link needs to be shown
* show full urls for autofill confirmation dialog
* add tooltip for autofill confirmation dialog
* add word-break for tooltips
* update tests
* update functionality to account for startsWith and Regular expression
* fix typings
* fix test types that were breaking build
* feat: add full middleware pipeline support
* Retrieve cookies from storage and attach cookies using Electron session
* Register middleware to act on fetch redirect to acquire cookie for SSO
* Add missing tests
* fix: acquireCookies call
* fix: cookies not getting set
* feat: add vaultUrl to server communication config
* feat: adapt to receiving vaultUrl in acquireCookies
* fix: remove localhost connector override
* Fix requests can't be re-used
* Add small delay to ensure cookies are saved before retrying requests
* Fix vaultUrl being set twice
* Add mock clone method
* Fix sso-cookie.main tests
* Remove old FIXME
* Re-use request and fix test
* Add missing coverage checking that needsBootsrap is called
* In case the hostname can't be extracted, the response is returned
* Only check the responseType instead of also checking statuscodes for redirects
* Bump the sdk-version
* Prepend https:// if necessary before launching the connector url
* Add dialog to cookie acquisition
* Fix tests
* Add handling the user choosing cancel, which will now cancel the cookie acquisition
* Do not retry if needsBootstrap returns false
* Fix tests that hadn't been updated seen https:// was appended
* Move the sso cookie feature fully into desktop
* Move prompt to acquire cookie into ServerCommunicationConfigPlatformApiService and ensures that concurrent calls are dedupes during the callback await and when the dialog is open but no option has been chosen yet
* Fix broken import on sso-cookie.main.spec
* Update test suite, due to moving the dialog into the ServerCommunicationConfigPlatformApiService
* Fix import, that I missed from the move
* feat: move subscription into init function
---------
Co-authored-by: Andreas Coroiu <andreas.coroiu@gmail.com>
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* Show more descriptive error on expired tokens
* Separate org invitation acceptance from others
* Adjust variable names
* Account for additional invitation-accept error
* feat: add full middleware pipeline support
* Retrieve cookies from storage and attach cookies using Electron session
* Register middleware to act on fetch redirect to acquire cookie for SSO
* Add missing tests
* fix: acquireCookies call
* fix: cookies not getting set
* feat: add vaultUrl to server communication config
* feat: adapt to receiving vaultUrl in acquireCookies
* fix: remove localhost connector override
* Fix requests can't be re-used
* Add small delay to ensure cookies are saved before retrying requests
* Fix vaultUrl being set twice
* Add mock clone method
* Fix sso-cookie.main tests
* Remove old FIXME
* Re-use request and fix test
* Add missing coverage checking that needsBootsrap is called
* In case the hostname can't be extracted, the response is returned
* Only check the responseType instead of also checking statuscodes for redirects
* Bump the sdk-version
* Prepend https:// if necessary before launching the connector url
* Do not retry if needsBootstrap returns false
---------
Co-authored-by: Andreas Coroiu <andreas.coroiu@gmail.com>
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
Updates the `ChangePasswordService` (`changePassword()` and `changePasswordForAccountRecovery()`) to use the new KM data types :
- `MasterPasswordAuthenticationData`
- `MasterPasswordUnlockData`
This allows us to move away from the deprecated `makeMasterKey()` method (which takes email as salt) as we seek to eventually separate the email from the salt.
Also moves current password validation into the default and web change password services.
Behind feature flag: `pm-27086-update-authentication-apis-for-input-password`
* Refactor user self-revocation message in event service and update localization string. The message now provides a clearer context for the action taken by the user.
* Update user self-revocation message in event service and add corresponding localization string. The new message enhances clarity regarding the user's action of declining organization ownership transfer.
* Update user self-revocation message to include user ID placeholder for improved clarity in localization. This change enhances the context of the user's action when self-revoking from an organization.
* [PM-31696] Add reverse proxy emulator for load balancer cookie testing
Adds a local dev/QA tool that emulates AWS ELB authentication without
real AWS infrastructure. It gates all traffic behind a
BitwardenLoadBalancerCookie and serves a simple auth page to issue it,
enabling testing of the load balancer cookie bootstrap flow (PM-27124).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* [PM-31696] Replace http-proxy with Node.js built-ins
http-proxy has not been published in 6 years and uses the deprecated
util._extend API. Replace it with https.request + piping for HTTP and
tls.connect + socket piping for WebSocket, removing the dependency and
the --no-deprecation workaround entirely.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* [PM-31696] Fix TLS verification for public backends
Extend the default CA bundle with the self-signed cert instead of
replacing it, so both localhost dev servers and public backends
(e.g. vault.bitwarden.com) are trusted without --insecure.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* [PM-31696] Add cookie rotation via R keypress
Press R while the proxy is running to increment the cookie generation,
immediately invalidating all existing session cookies and forcing
clients to re-authenticate on their next request.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs: tweak docs
* feat: improve error messages
* docs: update readme
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix bug causing ciphers not to load under certain circumstances.
* Don't set admin flag for non-admin cipher attachment operations
* Use the same flag for getCipherAdmin as for calling Admin API
* Set 'edit' flag on admin
* [PM-27772] Add TrendWidget component with Chart.js implementation (#19078)
Add reusable TrendWidget component with Chart.js line chart for displaying risk trends over time in Access Intelligence.
- Configurable datetime/linear x-axis scales
- Theme-aware colors from design system (brand-700/400, gray-200/600)
- Full i18n support (10 new translation keys)
- Loading spinner and error state handling
- Proper Chart.js lifecycle management
* [PM-28530] Implement period selector UI component (#19162)
* feat(dirt): define TimePeriod type for risk-over-time period selector
Add const object type for 5 time periods (month, 3mo, 6mo, 12mo, all)
following ADR-0025 no-enum pattern. Includes PeriodOption interface
and PERIOD_OPTIONS config for rendering.
[PM-28530]
* feat(dirt): create PeriodSelectorComponent using bit-menu
Custom trigger button with bit-menu dropdown for risk-over-time
time period selection. No clear button, neutral styling matching
Figma design. Check icon marks current selection.
[PM-28530]
* feat(dirt): add barrel export for period selector
[PM-28530]
* feat(dirt): add i18n strings for period selector options
Add translation keys for time period labels: pastMonth, last3Months,
last6Months, last12Months, and timePeriod placeholder.
[PM-28530]
* feat(dirt): add Storybook stories for PeriodSelectorComponent
Stories for default state, pre-selected 3 months, and disabled state.
[PM-28530]
* test(dirt): add unit tests for PeriodSelectorComponent
Tests cover default state, period options with pre-translated labels,
selection changes, and selected label reactivity.
[PM-28530]
* feat(dirt): integrate PeriodSelector into TrendWidget component
Replace placeholder with dirt-period-selector dropdown. Add TimePeriod
to TrendWidgetTimespan mapping layer to bridge the two type systems.
Remove standalone Storybook story and disabled input per review feedback
— component now lives inside TrendWidget, not standalone.
[PM-28530]
* refactor(dirt): replace model() with signal() + output() for PeriodSelector
Switch from Angular's model() API to the signal() + output() pattern
used throughout the Access Intelligence module. This matches the
existing convention in TrendWidget (selectedTimespan/timespanChanged),
app-table-row-scrollable (checkboxChange/selectAllChange), and
review-applications-view (onToggleSelection/onToggleAll).
Changes:
- Replace model<TimePeriod>() with signal<TimePeriod>() for internal state
- Add explicit selectedPeriodChange output for parent notification
- Manual .emit() in selectPeriod() to match module convention
- Update test to verify output emission via subscribe spy
No functional change — both patterns emit selectedPeriodChange events.
The template binding (selectedPeriodChange)="..." is unchanged.
* refactor(dirt): update labels to match Figma and unify type system
Update period selector labels per Figma design:
- "Last 3 months" → "Past 3 months" (past3Months)
- "Last 6 months" → "Past 6 months" (past6Months)
- "Last 12 months" → "Past year" (pastYear)
- "All" → "All time" (allTime, new key — pre-existing "all" key untouched)
Rename TimePeriod const keys to match labels:
- Last3Months → Past3Months
- Last6Months → Past6Months
- Last12Months → PastYear
- All → AllTime
Wire values unchanged ("month", "3mo", "6mo", "12mo", "all") to
preserve server API compatibility.
Remove TrendWidgetTimespan entirely — TrendWidget now uses TimePeriod
directly for signals, outputs, and data model. Eliminates the temporary
mapping layer (timePeriodMap + onPeriodSelectorChange). Period selector
wires directly to onTimespanChange().
[PM-28530]
* [PM-28533] Add view selector to TrendWidget component (#19163)
Adds the view selector button group to the TrendWidget component. Hooks up to existing signal and emits events when the view mode is changed. In future development, the parent component of TrendWidget will need to handle these events to fetch updated chart data from the API.
View options are:
Applications
Passwords
Members
* Fix TimePeriod type errors in TrendWidget stories (#19239)
Replace invalid "past-month" string literals with TimePeriod.PastMonth
constant to match the TimePeriod type definition. The TimePeriod const
object uses "month" as the value for PastMonth, not "past-month".
* [PM-32056] Add feature flag for access intelligence trend chart (#19164)
* feat(dirt): add feature flag for access intelligence trend chart
Register the `pm-26961-access-intelligence-trend-chart` feature flag
to gate the upcoming TrendChart widget in the Activity tab. Default
is FALSE (disabled). PM-32057 will consume this flag when wiring up
the widget component.
[PM-32056]
* feat(dirt): read trend chart feature flag in activity component
Inject ConfigService into AllActivityComponent and read the
AccessIntelligenceTrendChart flag on init. This prepares the
component for the TrendChart widget to be conditionally rendered.
[PM-32056]
* feat(dirt): add conditional wrapper for trend chart widget
Add an @if block gated by the AccessIntelligenceTrendChart feature
flag in the Activity tab template. The TrendChart widget will be
placed inside this block when wired up.
[PM-32056]
* reset package files to main
* install chartjs using node v22
* add chartjs to dirt team deps (#19244)
* [PM-32055] Download TrendWidget chart to PNG and CSV (#19245)
This PR adds a download button to the TrendWidget component that supports downloading the "Risk over time" chart data as a PNG or in CSV format.
Logic to dynamically add a chart title and x/y axis labels is included. This required creating a service that recreates a copy of the chart with title and axis labels applied, in an off screen canvas element, and then exporting to blob for file download. This logic is owned by the ChartExportService.
* Fix readonly variables. Update chart variable to use signal
* Fix any type in test file
---------
Co-authored-by: Brad <44413459+lastbestdev@users.noreply.github.com>
Co-authored-by: Alex <55413326+AlexRubik@users.noreply.github.com>
Co-authored-by: Brad Deibert <bdeibert@bitwarden.com>
* feat(platform): extract vaultUrl from /api/config response
Updates DefaultConfigService to extract the vault URL from the server's
/api/config response and populate it in the ServerCommunicationConfig that
gets passed to the SDK.
The vaultUrl field is extracted from response.environment.vault using
optional chaining to safely handle cases where the environment field may
be undefined. This follows the TypeScript camelCase naming convention and
integrates with the SDK's vault_url parameter added in the previous SDK
commits.
This enables the SDK to receive an explicit vault URL for SSO cookie
acquisition redirects, which fixes two critical issues:
1. Port preservation: Prevents localhost:8000 being stripped to localhost
in local development environments
2. Multi-subdomain routing: Ensures redirects use vault.bitwarden.com
instead of api.bitwarden.com when the cookie domain differs from the
vault hostname
The TypeScript interface definition will be added in the next commit to
complete type safety.
Refs: PM-33352
* fix(platform): add vaultUrl parameter to noop acquireCookies
Updates the NoopServerCommunicationConfigPlatformApiService implementation
to match the SDK's ServerCommunicationConfigPlatformApi trait interface
change from SDK PR #832.
The SDK's acquire_cookies() method now requires both hostname and
vault_url parameters. This commit adds the vaultUrl parameter to the
noop implementation's method signature to maintain TypeScript type
compatibility.
The noop service remains a no-op - it continues to return undefined
but now accepts the additional parameter that the SDK interface expects.
This prevents TypeScript compilation errors when the clients repo updates
to SDK version 0.2.0-main.580 or later.
Refs: PM-33352
* feat: update sdk
* fix: add missing vault_url to tests
* review: guard ssoCookieVendor on vaultUrl
Passing undefined for vaultUrl into the SDK's Rust
SsoCookieVendorConfig struct causes a panic at the WASM
boundary. Extract vaultUrl into a local variable and add a
null guard so that configs missing a vault URL fall back to
{ bootstrap: { type: "direct" } } instead of reaching the
SDK with an incomplete struct.
Update the existing ssoCookieVendor test to assert vaultUrl
in the expected output, and add a new case verifying the
direct fallback when environment is absent.
---------
Co-authored-by: Andreas Coroiu <andreas.coroiu@gmail.com>