1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-21 10:43:35 +00:00

ActiveUserState Update should return the userId of the impacted user. (#7869)

This allows us to ensure that linked updates all go to the same user without risking active account changes in the middle of an operation.
This commit is contained in:
Matt Gibson
2024-02-08 14:54:15 -05:00
committed by GitHub
parent 78730ff18a
commit 4c051f8d7f
7 changed files with 63 additions and 31 deletions

View File

@@ -19,6 +19,28 @@ export interface UserState<T> {
* Emits a stream of data alongside the user id the data corresponds to.
*/
readonly combinedState$: Observable<CombinedState<T>>;
}
export const activeMarker: unique symbol = Symbol("active");
export interface ActiveUserState<T> extends UserState<T> {
readonly [activeMarker]: true;
/**
* Updates backing stores for the active user.
* @param configureState function that takes the current state and returns the new state
* @param options Defaults to @see {module:state-update-options#DEFAULT_OPTIONS}
* @param options.shouldUpdate A callback for determining if you want to update state. Defaults to () => true
* @param options.combineLatestWith An observable that you want to combine with the current state for callbacks. Defaults to null
* @param options.msTimeout A timeout for how long you are willing to wait for a `combineLatestWith` option to complete. Defaults to 1000ms. Only applies if `combineLatestWith` is set.
* @returns The new state
*/
readonly update: <TCombine>(
configureState: (state: T, dependencies: TCombine) => T,
options?: StateUpdateOptions<T, TCombine>,
) => Promise<[UserId, T]>;
}
export interface SingleUserState<T> extends UserState<T> {
readonly userId: UserId;
/**
* Updates backing stores for the active user.
@@ -35,11 +57,3 @@ export interface UserState<T> {
options?: StateUpdateOptions<T, TCombine>,
) => Promise<T>;
}
export const activeMarker: unique symbol = Symbol("active");
export interface ActiveUserState<T> extends UserState<T> {
readonly [activeMarker]: true;
}
export interface SingleUserState<T> extends UserState<T> {
readonly userId: UserId;
}