in channels/applicationinsights-channel-js/src/EnvelopeCreator.ts [29:124]
function _extractPartAExtensions(logger: IDiagnosticLogger, item: ITelemetryItem, env: IEnvelope) {
// todo: switch to keys from common in this method
let envTags = env.tags = env.tags || {};
let itmExt = item.ext = item.ext || {};
let itmTags = item.tags = item.tags || [];
let extUser = itmExt.user;
if (extUser) {
_setValueIf(envTags, CtxTagKeys.userAuthUserId, extUser.authId);
_setValueIf(envTags, CtxTagKeys.userId, extUser.id || extUser.localId);
}
let extApp = itmExt.app;
if (extApp) {
_setValueIf(envTags, CtxTagKeys.sessionId, extApp.sesId);
}
let extDevice = itmExt.device;
if (extDevice) {
_setValueIf(envTags, CtxTagKeys.deviceId, extDevice.id || extDevice.localId);
_setValueIf(envTags, CtxTagKeys.deviceType, extDevice.deviceClass);
_setValueIf(envTags, CtxTagKeys.deviceIp, extDevice.ip);
_setValueIf(envTags, CtxTagKeys.deviceModel, extDevice.model);
_setValueIf(envTags, CtxTagKeys.deviceType, extDevice.deviceType);
}
const web: IWeb = item.ext.web as IWeb;
if (web) {
_setValueIf(envTags, CtxTagKeys.deviceLanguage, web.browserLang);
_setValueIf(envTags, CtxTagKeys.deviceBrowserVersion, web.browserVer);
_setValueIf(envTags, CtxTagKeys.deviceBrowser, web.browser);
let envData = env.data = env.data || {};
let envBaseData = envData[strBaseData] = envData[strBaseData] || {};
let envProps = envBaseData[strProperties] = envBaseData[strProperties] || {};
_setValueIf(envProps, "domain", web.domain);
_setValueIf(envProps, "isManual", web.isManual ? strTrue : null);
_setValueIf(envProps, "screenRes", web.screenRes);
_setValueIf(envProps, "userConsent", web.userConsent ? strTrue : null);
}
let extOs = itmExt.os;
if (extOs) {
_setValueIf(envTags, CtxTagKeys.deviceOS, extOs.name);
}
// No support for mapping Trace.traceState to 2.0 as it is currently empty
let extTrace = itmExt.trace;
if (extTrace) {
_setValueIf(envTags, CtxTagKeys.operationParentId, extTrace.parentID);
_setValueIf(envTags, CtxTagKeys.operationName, dataSanitizeString(logger, extTrace.name));
_setValueIf(envTags, CtxTagKeys.operationId, extTrace.traceID);
}
// Sample 4.0 schema
// {
// "time" : "2018-09-05T22:51:22.4936Z",
// "name" : "MetricWithNamespace",
// "iKey" : "ABC-5a4cbd20-e601-4ef5-a3c6-5d6577e4398e",
// "ext": { "cloud": {
// "role": "WATSON3",
// "roleInstance": "CO4AEAP00000260"
// },
// "device": {}, "correlation": {} },
// "tags": [
// { "amazon.region" : "east2" },
// { "os.expid" : "wp:02df239" }
// ]
// }
const tgs = {};
// deals with tags.push({object})
for(let i = itmTags.length - 1; i >= 0; i--){
const tg = itmTags[i];
objForEachKey(tg, (key, value) => {
tgs[key] = value;
});
itmTags.splice(i, 1);
}
// deals with tags[key]=value (and handles hasOwnProperty)
objForEachKey(itmTags, (tg, value) => {
tgs[tg] = value;
});
let theTags = { ...envTags, ...tgs };
if(!theTags[CtxTagKeys.internalSdkVersion]) {
// Append a version in case it is not already set
theTags[CtxTagKeys.internalSdkVersion] = `javascript:${EnvelopeCreator.Version}`;
}
env.tags = optimizeObject(theTags);
}