diff --git a/package-lock.json b/package-lock.json index 39608abef..ec2067ed7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@mongodb-js/compass-components": "^1.37.0", "@mongodb-js/connection-form": "1.51.0", "@mongodb-js/connection-info": "^0.14.0", - "@mongodb-js/device-id": "^0.2.0", + "@mongodb-js/device-id": "^0.2.1", "@mongodb-js/mongodb-constants": "^0.11.1", "@mongosh/browser-runtime-electron": "^3.10.3", "@mongosh/i18n": "^2.9.1", @@ -7615,9 +7615,9 @@ } }, "node_modules/@mongodb-js/device-id": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/device-id/-/device-id-0.2.0.tgz", - "integrity": "sha512-auEMkQc6hpSQSQziK5AbeuJeVnI7OQvWmaoMIWcXrMm+RA6pF0ADXZPS6kBtBIrRhWElV6PVYiq+Gfzsss2RYQ==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/device-id/-/device-id-0.2.1.tgz", + "integrity": "sha512-kC/F1/ryJMNeIt+n7CATAf9AL/X5Nz1Tju8VseyViL2DF640dmF/JQwWmjakpsSTy5X9TVNOkG9ye4Mber8GHQ==", "license": "Apache-2.0" }, "node_modules/@mongodb-js/devtools-connect": { diff --git a/package.json b/package.json index 4e4b5e9a8..1007f6657 100644 --- a/package.json +++ b/package.json @@ -1318,7 +1318,7 @@ "@mongodb-js/compass-components": "^1.37.0", "@mongodb-js/connection-form": "1.51.0", "@mongodb-js/connection-info": "^0.14.0", - "@mongodb-js/device-id": "^0.2.0", + "@mongodb-js/device-id": "^0.2.1", "@mongodb-js/mongodb-constants": "^0.11.1", "@mongosh/browser-runtime-electron": "^3.10.3", "@mongosh/i18n": "^2.9.1", diff --git a/src/telemetry/telemetryService.ts b/src/telemetry/telemetryService.ts index 8336b9ea2..5fb5c16bf 100644 --- a/src/telemetry/telemetryService.ts +++ b/src/telemetry/telemetryService.ts @@ -46,8 +46,9 @@ export class TelemetryService { private readonly _context: vscode.ExtensionContext; private readonly _shouldTrackTelemetry: boolean; // When tests run the extension, we don't want to track telemetry. + private readonly _deviceIdAbortController = new AbortController(); + public deviceId: string | undefined; - private resolveDeviceId: ((value: string) => void) | undefined; constructor( storageController: StorageController, @@ -119,7 +120,7 @@ export class TelemetryService { } deactivate(): void { - this.resolveDeviceId?.('unknown'); + this._deviceIdAbortController.abort(); // Flush on demand to make sure that nothing is left in the queue. void this._segmentAnalytics?.closeAndFlush(); } @@ -189,17 +190,6 @@ export class TelemetryService { this.track(new NewConnectionTelemetryEvent(connectionTelemetryProperties)); } - private async getDeviceId(): Promise { - const { value: deviceId, resolve: resolveDeviceId } = getDeviceId({ - getMachineId: (): Promise => nodeMachineId.machineId(true), - isNodeMachineId: true, - }); - - this.resolveDeviceId = resolveDeviceId; - - return deviceId; - } - trackParticipantError(err: any, command: ParticipantResponseType): void { let errorCode: string | undefined; let errorName: ParticipantErrorTypes; @@ -244,4 +234,11 @@ export class TelemetryService { 5000, { leading: true, trailing: false }, ); + + private getDeviceId(): Promise { + return getDeviceId({ + getMachineId: (): Promise => nodeMachineId.machineId(true), + abortSignal: this._deviceIdAbortController.signal, + }); + } }