mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-25 11:28:51 +01:00
9bbabd4868
* Add AppMetadataController so current and previous application and migration version can be captured in sentry * Add currentAppVersion, previousAppVersion, previousMigrationVersion, currentMigrationVersion to SENTRY_OBJECT * Update app/scripts/controllers/app-metadata.ts Co-authored-by: Mark Stacey <markjstacey@gmail.com> * Update app/scripts/controllers/app-metadata.ts Co-authored-by: Mark Stacey <markjstacey@gmail.com> * Update app/scripts/controllers/app-metadata.ts Co-authored-by: Mark Stacey <markjstacey@gmail.com> * Fix types * Add tests for app-metadata.test.ts * Lint fixes * Modify loadStateFromPersistence to return the whole versionData object, so that the migration version can be passed to the metamask-controller on instantiation * Remove reference to implementation details in test descriptions in app/scripts/controllers/app-metadata.test.ts * Reset all mocks afterEach in AppMetadataController * Refactor AppMetadataController to be passed version instead of calling platform.version directly (for ease of unit testing the MetaMask Controller) * Make maybeUpdateAppVersion and maybeUpdateMigrationVersion private, and remove unit tests of those specific functions --------- Co-authored-by: Mark Stacey <markjstacey@gmail.com>
100 lines
2.6 KiB
TypeScript
100 lines
2.6 KiB
TypeScript
import EventEmitter from 'events';
|
|
import { ObservableStore } from '@metamask/obs-store';
|
|
|
|
/**
|
|
* The state of the AppMetadataController
|
|
*/
|
|
export type AppMetadataControllerState = {
|
|
currentAppVersion: string;
|
|
previousAppVersion: string;
|
|
previousMigrationVersion: number;
|
|
currentMigrationVersion: number;
|
|
};
|
|
|
|
/**
|
|
* The options that NetworkController takes.
|
|
*/
|
|
export type AppMetadataControllerOptions = {
|
|
currentMigrationVersion?: number;
|
|
currentAppVersion?: string;
|
|
state?: Partial<AppMetadataControllerState>;
|
|
};
|
|
|
|
const defaultState: AppMetadataControllerState = {
|
|
currentAppVersion: '',
|
|
previousAppVersion: '',
|
|
previousMigrationVersion: 0,
|
|
currentMigrationVersion: 0,
|
|
};
|
|
|
|
/**
|
|
* The AppMetadata controller stores metadata about the current extension instance,
|
|
* including the currently and previously installed versions, and the most recently
|
|
* run migration.
|
|
*
|
|
*/
|
|
export default class AppMetadataController extends EventEmitter {
|
|
/**
|
|
* Observable store containing controller data.
|
|
*/
|
|
store: ObservableStore<AppMetadataControllerState>;
|
|
|
|
/**
|
|
* Constructs a AppMetadata controller.
|
|
*
|
|
* @param options - the controller options
|
|
* @param options.state - Initial controller state.
|
|
* @param options.currentMigrationVersion
|
|
* @param options.currentAppVersion
|
|
*/
|
|
constructor({
|
|
currentAppVersion = '',
|
|
currentMigrationVersion = 0,
|
|
state = {},
|
|
}: AppMetadataControllerOptions) {
|
|
super();
|
|
|
|
this.store = new ObservableStore({
|
|
...defaultState,
|
|
...state,
|
|
});
|
|
|
|
this.#maybeUpdateAppVersion(currentAppVersion);
|
|
|
|
this.#maybeUpdateMigrationVersion(currentMigrationVersion);
|
|
}
|
|
|
|
/**
|
|
* Updates the currentAppVersion in state, and sets the previousAppVersion to the old currentAppVersion.
|
|
*
|
|
* @param maybeNewAppVersion
|
|
*/
|
|
#maybeUpdateAppVersion(maybeNewAppVersion: string): void {
|
|
const oldCurrentAppVersion = this.store.getState().currentAppVersion;
|
|
|
|
if (maybeNewAppVersion !== oldCurrentAppVersion) {
|
|
this.store.updateState({
|
|
currentAppVersion: maybeNewAppVersion,
|
|
previousAppVersion: oldCurrentAppVersion,
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updates the migrationVersion in state.
|
|
*
|
|
* @param maybeNewMigrationVersion
|
|
*/
|
|
#maybeUpdateMigrationVersion(maybeNewMigrationVersion: number): void {
|
|
const oldCurrentMigrationVersion =
|
|
this.store.getState().currentMigrationVersion;
|
|
|
|
if (maybeNewMigrationVersion !== oldCurrentMigrationVersion) {
|
|
this.store.updateState({
|
|
previousMigrationVersion: oldCurrentMigrationVersion,
|
|
currentMigrationVersion: maybeNewMigrationVersion,
|
|
});
|
|
}
|
|
}
|
|
}
|