diff --git a/src/background.html b/src/background.html index 9703a9aa67..f4ce8c2398 100644 --- a/src/background.html +++ b/src/background.html @@ -14,7 +14,6 @@ - diff --git a/src/background.js b/src/background.js index 64a61e8bb2..bb90c02631 100644 --- a/src/background.js +++ b/src/background.js @@ -1,4 +1,5 @@ // Service imports +import AppIdService from './services/appId.service'; import ConstantsService from './services/constants.service'; import i18nService from './services/i18nService.js'; import LockService from './services/lockService.js'; @@ -73,9 +74,9 @@ var bg_isBackground = true, window.bg_utilsService = bg_utilsService = new UtilsService(); window.bg_i18nService = bg_i18nService = new i18nService(bg_utilsService); window.bg_constantsService = bg_constantsService = new ConstantsService(bg_i18nService); - window.bg_cryptoService = bg_cryptoService = new CryptoService(bg_utilsService); + window.bg_cryptoService = bg_cryptoService = new CryptoService(); window.bg_tokenService = bg_tokenService = new TokenService(bg_utilsService); - window.bg_appIdService = bg_appIdService = new AppIdService(bg_utilsService); + window.bg_appIdService = bg_appIdService = new AppIdService(); window.bg_apiService = bg_apiService = new ApiService(bg_tokenService, bg_appIdService, bg_utilsService, bg_constantsService, logout); window.bg_environmentService = bg_environmentService = new EnvironmentService(bg_constantsService, bg_apiService); window.bg_userService = bg_userService = new UserService(bg_tokenService, bg_apiService, bg_cryptoService, bg_utilsService); diff --git a/src/services/appId.service.ts b/src/services/appId.service.ts new file mode 100644 index 0000000000..4e51d7c9ff --- /dev/null +++ b/src/services/appId.service.ts @@ -0,0 +1,31 @@ +import UtilsService from './utils.service'; + +export default class AppIdService { + static getAppId(): Promise { + return AppIdService.makeAndGetAppId('appId'); + } + + static getAnonymousAppId(): Promise { + return AppIdService.makeAndGetAppId('anonymousAppId'); + } + + private static async makeAndGetAppId(key: string) { + const existingId = await UtilsService.getObjFromStorage(key); + if(existingId != null) { + return existingId; + } + + const guid = UtilsService.newGuid(); + await UtilsService.saveObjToStorage(key, guid); + return guid; + } + + // TODO: remove these in favor of static methods + getAppId(): Promise { + return AppIdService.getAppId(); + } + + getAnonymousAppId(): Promise { + return AppIdService.getAnonymousAppId(); + } +} diff --git a/src/services/utils.service.ts b/src/services/utils.service.ts index 73381c6710..7580c2bb43 100644 --- a/src/services/utils.service.ts +++ b/src/services/utils.service.ts @@ -8,6 +8,15 @@ const AnalyticsIds = { }; export default class UtilsService { + // ref: http://stackoverflow.com/a/2117523/1090359 + static newGuid(): string { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { + const r = Math.random() * 16 | 0; + const v = c === 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + } + static extendObject(...objects: any[]): any { for (let i = 1; i < objects.length; i++) { for (const key in objects[i]) {