44 */
55
66import * as vscode from 'vscode'
7- import { env , Memento , version } from 'vscode'
7+ import { env , version } from 'vscode'
88import * as os from 'os'
99import { getLogger } from '../logger'
1010import { fromExtensionManifest , migrateSetting , Settings } from '../settings'
@@ -26,11 +26,9 @@ const legacySettingsTelemetryValueDisable = 'Disable'
2626const legacySettingsTelemetryValueEnable = 'Enable'
2727
2828const TelemetryFlag = addTypeName ( 'boolean' , convertLegacy )
29- const telemetryClientIdGlobalStatekey = 'telemetryClientId'
3029const telemetryClientIdEnvKey = '__TELEMETRY_CLIENT_ID'
3130
3231export class TelemetryConfig {
33- private readonly amazonQSettingMigratedKey = 'amazonq.telemetry.migrated'
3432 private readonly _toolkitConfig
3533 private readonly _amazonQConfig
3634
@@ -60,13 +58,13 @@ export class TelemetryConfig {
6058 }
6159
6260 public async initAmazonQSetting ( ) {
63- if ( ! isAmazonQ ( ) || globals . context . globalState . get < boolean > ( this . amazonQSettingMigratedKey ) ) {
61+ if ( ! isAmazonQ ( ) || globals . globalState . tryGet ( 'amazonq.telemetry.migrated' , Boolean , false ) ) {
6462 return
6563 }
6664 // aws.telemetry isn't deprecated, we are just initializing amazonQ.telemetry with its value.
6765 // This is also why we need to check that we only try this migration once.
6866 await migrateSetting ( { key : 'aws.telemetry' , type : Boolean } , { key : 'amazonQ.telemetry' } )
69- await globals . context . globalState . update ( this . amazonQSettingMigratedKey , true )
67+ await globals . globalState . update ( 'amazonq.telemetry.migrated' , true )
7068 }
7169}
7270
@@ -89,20 +87,23 @@ export const getClientId = memoize(
8987 /**
9088 * @param nonce Dummy parameter to allow tests to defeat memoize().
9189 */
92- ( globalState : Memento , isTelemetryEnabled = new TelemetryConfig ( ) . isEnabled ( ) , isTest ?: false , nonce ?: string ) => {
90+ (
91+ globalState : typeof globals . globalState ,
92+ isTelemetryEnabled = new TelemetryConfig ( ) . isEnabled ( ) ,
93+ isTest ?: false ,
94+ nonce ?: string
95+ ) => {
9396 if ( isTest ?? isAutomation ( ) ) {
9497 return 'ffffffff-ffff-ffff-ffff-ffffffffffff'
9598 }
9699 if ( ! isTelemetryEnabled ) {
97100 return '11111111-1111-1111-1111-111111111111'
98101 }
99102 try {
100- let clientId = globalState . get < string > ( telemetryClientIdGlobalStatekey )
103+ let clientId = globalState . tryGet ( 'telemetryClientId' , String )
101104 if ( ! clientId ) {
102105 clientId = randomUUID ( )
103- globalState . update ( telemetryClientIdGlobalStatekey , clientId ) . then ( undefined , ( e ) => {
104- getLogger ( ) . error ( 'getClientId: globalState.update failed: %O' , e )
105- } )
106+ globalState . tryUpdate ( 'telemetryClientId' , clientId )
106107 }
107108 return clientId
108109 } catch ( e ) {
@@ -122,7 +123,7 @@ export const platformPair = () => `${env.appName.replace(/\s/g, '-')}/${version}
122123 */
123124export function getUserAgent (
124125 opt ?: { includePlatform ?: boolean ; includeClientId ?: boolean } ,
125- globalState = globals . context . globalState
126+ globalState = globals . globalState
126127) : string {
127128 const pairs = isAmazonQ ( )
128129 ? [ `AmazonQ-For-VSCode/${ extensionVersion } ` ]
@@ -212,9 +213,9 @@ export function validateMetricEvent(event: MetricDatum, fatal: boolean) {
212213export async function setupTelemetryId ( extensionContext : vscode . ExtensionContext ) {
213214 try {
214215 if ( isWeb ( ) ) {
215- await globals . context . globalState . update ( telemetryClientIdGlobalStatekey , vscode . env . machineId )
216+ await globals . globalState . update ( 'telemetryClientId' , vscode . env . machineId )
216217 } else {
217- const currentClientId = globals . context . globalState . get < string > ( telemetryClientIdGlobalStatekey )
218+ const currentClientId = globals . globalState . tryGet ( 'telemetryClientId' , String )
218219 const storedClientId = process . env [ telemetryClientIdEnvKey ]
219220 if ( currentClientId && storedClientId ) {
220221 if ( extensionContext . extension . id === VSCODE_EXTENSION_ID . awstoolkit ) {
@@ -230,13 +231,13 @@ export async function setupTelemetryId(extensionContext: vscode.ExtensionContext
230231 }
231232 } else if ( isAmazonQ ( ) ) {
232233 getLogger ( ) . debug ( `telemetry: Set telemetry client id to ${ storedClientId } ` )
233- await globals . context . globalState . update ( telemetryClientIdGlobalStatekey , storedClientId )
234+ await globals . globalState . update ( 'telemetryClientId' , storedClientId )
234235 } else {
235236 getLogger ( ) . error ( `Unexpected extension id ${ extensionContext . extension . id } ` )
236237 }
237238 } else if ( ! currentClientId && storedClientId ) {
238239 getLogger ( ) . debug ( `telemetry: Write telemetry client id to global state ${ storedClientId } ` )
239- await globals . context . globalState . update ( telemetryClientIdGlobalStatekey , storedClientId )
240+ await globals . globalState . update ( 'telemetryClientId' , storedClientId )
240241 } else if ( currentClientId && ! storedClientId ) {
241242 getLogger ( ) . debug ( `telemetry: Write telemetry client id to env ${ currentClientId } ` )
242243 process . env [ telemetryClientIdEnvKey ] = currentClientId
0 commit comments