@sussudio/platform
Version:
Internal APIs for VS Code's service injection the base services.
96 lines (95 loc) • 4.48 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { isLinuxSnap, platform, PlatformToString } from '@sussudio/base/common/platform.mjs';
import { env, platform as nodePlatform } from '@sussudio/base/common/process.mjs';
import { URI } from '@sussudio/base/common/uri.mjs';
import { generateUuid } from '@sussudio/base/common/uuid.mjs';
function getPlatformDetail(hostname) {
if (platform === 2 /* Platform.Linux */ && /^penguin(\.|$)/i.test(hostname)) {
return 'chromebook';
}
return undefined;
}
export async function resolveCommonProperties(
fileService,
release,
hostname,
arch,
commit,
version,
machineId,
isInternalTelemetry,
installSourcePath,
product,
) {
const result = Object.create(null);
// __GDPR__COMMON__ "common.machineId" : { "endPoint": "MacAddressHash", "classification": "EndUserPseudonymizedInformation", "purpose": "FeatureInsight" }
result['common.machineId'] = machineId;
// __GDPR__COMMON__ "sessionID" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['sessionID'] = generateUuid() + Date.now();
// __GDPR__COMMON__ "commitHash" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }
result['commitHash'] = commit;
// __GDPR__COMMON__ "version" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['version'] = version;
// __GDPR__COMMON__ "common.platformVersion" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['common.platformVersion'] = (release || '').replace(/^(\d+)(\.\d+)?(\.\d+)?(.*)/, '$1$2$3');
// __GDPR__COMMON__ "common.platform" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['common.platform'] = PlatformToString(platform);
// __GDPR__COMMON__ "common.nodePlatform" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }
result['common.nodePlatform'] = nodePlatform;
// __GDPR__COMMON__ "common.nodeArch" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }
result['common.nodeArch'] = arch;
// __GDPR__COMMON__ "common.product" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }
result['common.product'] = product || 'desktop';
if (isInternalTelemetry) {
// __GDPR__COMMON__ "common.msftInternal" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }
result['common.msftInternal'] = isInternalTelemetry;
}
// dynamic properties which value differs on each call
let seq = 0;
const startTime = Date.now();
Object.defineProperties(result, {
// __GDPR__COMMON__ "timestamp" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
timestamp: {
get: () => new Date(),
enumerable: true,
},
// __GDPR__COMMON__ "common.timesincesessionstart" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }
'common.timesincesessionstart': {
get: () => Date.now() - startTime,
enumerable: true,
},
// __GDPR__COMMON__ "common.sequence" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }
'common.sequence': {
get: () => seq++,
enumerable: true,
},
});
if (isLinuxSnap) {
// __GDPR__COMMON__ "common.snap" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['common.snap'] = 'true';
}
const platformDetail = getPlatformDetail(hostname);
if (platformDetail) {
// __GDPR__COMMON__ "common.platformDetail" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['common.platformDetail'] = platformDetail;
}
try {
const contents = await fileService.readFile(URI.file(installSourcePath));
// __GDPR__COMMON__ "common.source" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['common.source'] = contents.value.toString().slice(0, 30);
} catch (error) {
// ignore error
}
return result;
}
export function verifyMicrosoftInternalDomain(domainList) {
const userDnsDomain = env['USERDNSDOMAIN'];
if (!userDnsDomain) {
return false;
}
const domain = userDnsDomain.toLowerCase();
return domainList.some((msftDomain) => domain === msftDomain);
}