mirror of
https://github.com/bitwarden/browser
synced 2025-12-19 01:33:33 +00:00
* WIP: safer state migrations Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com> * Add min version check and remove old migrations Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com> * Add rollback and version checking * Add state version move migration * Expand tests and improve typing for Migrations * Remove StateMigration Service * Rewrite version 5 and 6 migrations * Add all but initial migration to supported migrations * Handle stateVersion location in migrator update versions * Move to unique migrations directory * Disallow imports outside of state-migrations * Lint and test fixes * Do not run migrations if we cannot determine state * Fix desktop background StateService build * Document Migration builder class * Add debug logging to migrations * Comment on migrator overrides * Use specific property names * `npm run prettier` 🤖 * Insert new migration * Set stateVersion when creating new globals object * PR comments * Fix migrate imports * Move migration building into `migrate` function * Export current version from migration definitions * Move file version concerns to migrator * Update migrate spec to reflect new version requirements * Fix import paths * Prefer unique state data * Remove unnecessary async * Prefer to not use `any` --------- Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com> Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
// eslint-disable-next-line import/no-restricted-paths -- Needed to print log messages
|
|
import { LogService } from "../platform/abstractions/log.service";
|
|
// eslint-disable-next-line import/no-restricted-paths -- Needed to interface with storage locations
|
|
import { AbstractStorageService } from "../platform/abstractions/storage.service";
|
|
|
|
export class MigrationHelper {
|
|
constructor(
|
|
public currentVersion: number,
|
|
private storageService: AbstractStorageService,
|
|
public logService: LogService
|
|
) {}
|
|
|
|
get<T>(key: string): Promise<T> {
|
|
return this.storageService.get<T>(key);
|
|
}
|
|
|
|
set<T>(key: string, value: T): Promise<void> {
|
|
this.logService.info(`Setting ${key}`);
|
|
return this.storageService.save(key, value);
|
|
}
|
|
|
|
info(message: string): void {
|
|
this.logService.info(message);
|
|
}
|
|
|
|
async getAccounts<ExpectedAccountType>(): Promise<
|
|
{ userId: string; account: ExpectedAccountType }[]
|
|
> {
|
|
const userIds = (await this.get<string[]>("authenticatedAccounts")) ?? [];
|
|
return Promise.all(
|
|
userIds.map(async (userId) => ({
|
|
userId,
|
|
account: await this.get<ExpectedAccountType>(userId),
|
|
}))
|
|
);
|
|
}
|
|
}
|