[Main][Task]27080650: Initialization Should Handle Offline Support Dependency (#2358)
* expose send next batch * update * channel init * update * update * update * update * update * update * update * udpate * update * update * update
This commit is contained in:
Родитель
04e33d6345
Коммит
46ce9075be
|
@ -6,6 +6,7 @@ import { IDependencyTelemetry, ContextTagKeys, Event, Trace, Exception, Metric,
|
|||
import { ITelemetryItem, getGlobal, newId, dumpObj, BaseTelemetryPlugin, IProcessTelemetryContext, __getRegisteredEvents, arrForEach, IConfiguration, FeatureOptInMode } from "@microsoft/applicationinsights-core-js";
|
||||
import { TelemetryContext } from '@microsoft/applicationinsights-properties-js';
|
||||
import { CONFIG_ENDPOINT_URL } from '../../../src/InternalConstants';
|
||||
import { OfflineChannel } from '@microsoft/applicationinsights-offlinechannel-js';
|
||||
|
||||
|
||||
export class ApplicationInsightsTests extends AITestClass {
|
||||
|
@ -44,6 +45,7 @@ export class ApplicationInsightsTests extends AITestClass {
|
|||
private tagKeys = new ContextTagKeys();
|
||||
private _config;
|
||||
private _appId: string;
|
||||
private _ctx: any;
|
||||
|
||||
constructor(testName?: string) {
|
||||
super(testName || "ApplicationInsightsTests");
|
||||
|
@ -79,6 +81,7 @@ export class ApplicationInsightsTests extends AITestClass {
|
|||
this.isFetchPolyfill = fetch["polyfill"];
|
||||
this.useFakeServer = false;
|
||||
this._config = this._getTestConfig(this._sessionPrefix);
|
||||
this._ctx = {};
|
||||
|
||||
const init = new ApplicationInsights({
|
||||
config: this._config
|
||||
|
@ -285,8 +288,123 @@ export class ApplicationInsightsTests extends AITestClass {
|
|||
extConfig = ai.config.extensionConfig["AppInsightsCfgSyncPlugin"];
|
||||
Assert.equal(extConfig.scheduleFetchTimeout, expectedTimeout, "timeout should be changes dynamically");
|
||||
ai.unload(false);
|
||||
if (ai && ai["dependencies"]) {
|
||||
ai["dependencies"].teardown();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.testCase({
|
||||
name: "CfgSync DynamicConfigTests: Offline Support can be added and initialized with endpoint url",
|
||||
useFakeTimers: true,
|
||||
test: () => {
|
||||
this.clock.tick(1);
|
||||
// if fake timer is turned on, session data will return 0 and will throw sesson not renew error
|
||||
let offlineChannel = new OfflineChannel();
|
||||
let config = {
|
||||
instrumentationKey: "testIKey",
|
||||
endpointUrl: "testUrl",
|
||||
extensionConfig:{
|
||||
["AppInsightsCfgSyncPlugin"]: {
|
||||
cfgUrl: ""
|
||||
}
|
||||
|
||||
},
|
||||
extensions:[offlineChannel]
|
||||
} as IConfiguration & IConfig;
|
||||
let ai = new ApplicationInsights({config: config});
|
||||
ai.loadAppInsights();
|
||||
this.clock.tick(1);
|
||||
|
||||
let sendChannel = ai.getPlugin(BreezeChannelIdentifier);
|
||||
let offlineChannelPlugin = ai.getPlugin("OfflineChannel").plugin;
|
||||
Assert.equal(sendChannel.plugin.isInitialized(), true, "sender is initialized");
|
||||
Assert.equal(offlineChannelPlugin.isInitialized(), true, "offline channel is initialized");
|
||||
let urlConfig = offlineChannelPlugin["_getDbgPlgTargets"]()[0];
|
||||
Assert.ok(urlConfig, "offline url config is initialized");
|
||||
|
||||
ai.unload(false);
|
||||
if (ai && ai["dependencies"]) {
|
||||
ai["dependencies"].teardown();
|
||||
}
|
||||
offlineChannel.teardown();
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
this.testCase({
|
||||
name: "CfgSync DynamicConfigTests: Offline Support can be added and initialized with channels",
|
||||
useFakeTimers: true,
|
||||
test: () => {
|
||||
this.clock.tick(1);
|
||||
let offlineChannel = new OfflineChannel();
|
||||
let config = {
|
||||
instrumentationKey: "testIKey",
|
||||
endpointUrl: "testUrl",
|
||||
extensionConfig:{
|
||||
["AppInsightsCfgSyncPlugin"]: {
|
||||
cfgUrl: ""
|
||||
}
|
||||
|
||||
},
|
||||
channels:[[offlineChannel]]
|
||||
} as IConfiguration & IConfig;
|
||||
let ai = new ApplicationInsights({config: config});
|
||||
ai.loadAppInsights();
|
||||
this.clock.tick(1);
|
||||
|
||||
let sendChannel = ai.getPlugin(BreezeChannelIdentifier);
|
||||
let offlineChannelPlugin = ai.getPlugin("OfflineChannel").plugin;
|
||||
Assert.equal(sendChannel.plugin.isInitialized(), true, "sender is initialized");
|
||||
Assert.equal(offlineChannelPlugin.isInitialized(), true, "offline channel is initialized");
|
||||
let urlConfig = offlineChannelPlugin["_getDbgPlgTargets"]()[0];
|
||||
Assert.ok(urlConfig, "offline url config is initialized");
|
||||
|
||||
|
||||
ai.unload(false);
|
||||
if (ai && ai["dependencies"]) {
|
||||
ai["dependencies"].teardown();
|
||||
}
|
||||
offlineChannel.teardown();
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
this.testCase({
|
||||
name: "CfgSync DynamicConfigTests: Offline Support can be added and initialized without endpoint url",
|
||||
useFakeTimers: true,
|
||||
test: () => {
|
||||
this.clock.tick(1);
|
||||
let offlineChannel = new OfflineChannel();
|
||||
let config = {
|
||||
instrumentationKey: "testIKey",
|
||||
extensionConfig:{
|
||||
["AppInsightsCfgSyncPlugin"]: {
|
||||
cfgUrl: ""
|
||||
}
|
||||
|
||||
},
|
||||
channels:[[offlineChannel]]
|
||||
} as IConfiguration & IConfig;
|
||||
let ai = new ApplicationInsights({config: config});
|
||||
ai.loadAppInsights();
|
||||
this.clock.tick(1);
|
||||
|
||||
let sendChannel = ai.getPlugin(BreezeChannelIdentifier);
|
||||
let offlineChannelPlugin = ai.getPlugin("OfflineChannel").plugin;
|
||||
Assert.equal(sendChannel.plugin.isInitialized(), true, "sender is initialized");
|
||||
Assert.equal(offlineChannelPlugin.isInitialized(), true, "offline channel is initialized");
|
||||
let urlConfig = offlineChannelPlugin["_getDbgPlgTargets"]()[0];
|
||||
Assert.ok(urlConfig, "offline url config is initialized");
|
||||
|
||||
ai.unload(false);
|
||||
if (ai && ai["dependencies"]) {
|
||||
ai["dependencies"].teardown();
|
||||
}
|
||||
offlineChannel.teardown();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public addCDNOverrideTests(): void {
|
||||
|
@ -318,6 +436,52 @@ export class ApplicationInsightsTests extends AITestClass {
|
|||
}
|
||||
|
||||
public addAsyncTests(): void {
|
||||
this.testCaseAsync({
|
||||
name: "E2E.GenericTests: Send events with offline support",
|
||||
stepDelay: 1,
|
||||
steps: [() => {
|
||||
let offlineChannel = new OfflineChannel();
|
||||
this._ai.addPlugin(offlineChannel);
|
||||
this._ctx.offlineChannel = offlineChannel;
|
||||
|
||||
}].concat(PollingAssert.createPollingAssert(() => {
|
||||
let offlineChannel = this._ctx.offlineChannel;
|
||||
if (offlineChannel && offlineChannel.isInitialized()) {
|
||||
let urlConfig = offlineChannel["_getDbgPlgTargets"]()[0];
|
||||
Assert.ok(urlConfig, "offline url config is initialized");
|
||||
|
||||
let offlineListener = offlineChannel.getOfflineListener() as any;
|
||||
Assert.ok(offlineListener, "offlineListener should be initialized");
|
||||
|
||||
// online
|
||||
offlineListener.setOnlineState(1);
|
||||
let inMemoTimer = offlineChannel["_getDbgPlgTargets"]()[3];
|
||||
Assert.ok(!inMemoTimer, "offline in memo timer should be null");
|
||||
this._ai.trackEvent({ name: "online event", properties: { "prop1": "value1" }, measurements: { "measurement1": 200 } });
|
||||
|
||||
// set to offline status right way
|
||||
offlineListener.setOnlineState(2);
|
||||
this._ai.trackEvent({ name: "offline event", properties: { "prop2": "value2" }, measurements: { "measurement2": 200 } });
|
||||
inMemoTimer = offlineChannel["_getDbgPlgTargets"]()[3];
|
||||
Assert.ok(inMemoTimer, "in memo timer should not be null");
|
||||
let inMemoBatch = offlineChannel["_getDbgPlgTargets"]()[1];
|
||||
Assert.equal(inMemoBatch && inMemoBatch.count(), 1, "should have one event");
|
||||
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}, "Wait for init" + new Date().toISOString(), 60, 1000) as any).concat(this.asserts(1)).concat(() => {
|
||||
const payloadStr: string[] = this.getPayloadMessages(this.successSpy);
|
||||
if (payloadStr.length > 0) {
|
||||
const payload = JSON.parse(payloadStr[0]);
|
||||
const data = payload.data;
|
||||
Assert.ok( payload && payload.iKey);
|
||||
Assert.equal( ApplicationInsightsTests._instrumentationKey,payload.iKey,"payload ikey is not set correctly" );
|
||||
Assert.ok(data && data.baseData && data.baseData.properties["prop1"]);
|
||||
Assert.ok(data && data.baseData && data.baseData.measurements["measurement1"]);
|
||||
}
|
||||
})
|
||||
});
|
||||
this.testCaseAsync({
|
||||
name: 'E2E.GenericTests: trackEvent sends to backend',
|
||||
stepDelay: 1,
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
modules.add("qunit");
|
||||
modules.add("sinon");
|
||||
modules.add("pako","./node_modules/pako/dist/pako");
|
||||
modules.add("@microsoft/applicationinsights-offlinechannel-js"); // Load offline plugin
|
||||
|
||||
loadFetchModule(modules, "whatwg-fetch");
|
||||
loadCommonModules(modules, function () {
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"@microsoft/ai-test-framework": "0.0.1",
|
||||
"@microsoft/applicationinsights-offlinechannel-js": "0.2.1",
|
||||
"@microsoft/applicationinsights-rollup-plugin-uglify3-js": "1.0.0",
|
||||
"@microsoft/applicationinsights-rollup-es5": "1.0.2",
|
||||
"sinon": "^7.3.1",
|
||||
|
|
|
@ -6,6 +6,9 @@ export class TestChannel extends BaseTelemetryPlugin implements IChannelControls
|
|||
public priority: number = 1001;
|
||||
public endpoint: string = DEFAULT_BREEZE_ENDPOINT + DEFAULT_BREEZE_PATH;
|
||||
public isIdle: boolean = true;
|
||||
public isInitialized = () => {
|
||||
return true;
|
||||
}
|
||||
|
||||
lastEventAdded: ITelemetryItem;
|
||||
eventsAdded: ITelemetryItem[] = [];
|
||||
|
|
|
@ -60,9 +60,11 @@ export class ChannelTests extends AITestClass {
|
|||
|
||||
this.testCase({
|
||||
name: "Channel: Init from core",
|
||||
useFakeTimers: true,
|
||||
test: () => {
|
||||
let channel = new OfflineChannel();
|
||||
this.core.initialize(this.coreConfig,[channel]);
|
||||
let onlineChannel = new TestChannel();
|
||||
this.core.initialize(this.coreConfig,[channel, onlineChannel]);
|
||||
this.core.addNotificationListener({
|
||||
eventsDiscarded: (evts, reason) => {
|
||||
this.evtDiscard += 1;
|
||||
|
@ -79,6 +81,8 @@ export class ChannelTests extends AITestClass {
|
|||
}
|
||||
});
|
||||
|
||||
this.clock.tick(1);
|
||||
|
||||
let offlineListener = channel.getOfflineListener() as any;
|
||||
offlineListener.setOnlineState(1);
|
||||
let evt = mockTelemetryItem();
|
||||
|
@ -99,10 +103,12 @@ export class ChannelTests extends AITestClass {
|
|||
|
||||
this.testCase({
|
||||
name: "Channel: Init from core indexed db",
|
||||
useFakeTimers: true,
|
||||
test: () => {
|
||||
let channel = new OfflineChannel();
|
||||
let onlineChannel = new TestChannel();
|
||||
this.coreConfig.extensionConfig = {["OfflineChannel"]: {providers:[eStorageProviders.IndexedDb], inMemoMaxTime: 2000} as IOfflineChannelConfiguration};
|
||||
this.core.initialize(this.coreConfig,[channel]);
|
||||
this.core.initialize(this.coreConfig,[channel, onlineChannel]);
|
||||
this.core.addNotificationListener({
|
||||
eventsDiscarded: (evts, reason) => {
|
||||
this.evtDiscard += 1;
|
||||
|
@ -118,7 +124,7 @@ export class ChannelTests extends AITestClass {
|
|||
this.batchDrop += 1;
|
||||
}
|
||||
});
|
||||
|
||||
this.clock.tick(1);
|
||||
let offlineListener = channel.getOfflineListener() as any;
|
||||
offlineListener.setOnlineState(1);
|
||||
let evt = mockTelemetryItem();
|
||||
|
@ -171,6 +177,8 @@ export class ChannelTests extends AITestClass {
|
|||
this.onDone(() => {
|
||||
channel.teardown();
|
||||
});
|
||||
|
||||
this.clock.tick(1);
|
||||
let offlineListener = channel.getOfflineListener() as any;
|
||||
offlineListener.setOnlineState(1);
|
||||
let evt = mockTelemetryItem();
|
||||
|
@ -295,6 +303,8 @@ export class ChannelTests extends AITestClass {
|
|||
let channel = new OfflineChannel();
|
||||
this.coreConfig.extensionConfig = {["OfflineChannel"]: {providers:[eStorageProviders.IndexedDb], inMemoMaxTime: 2000} as IOfflineChannelConfiguration};
|
||||
channel.initialize(this.coreConfig, this.core,[]);
|
||||
|
||||
this.clock.tick(1);
|
||||
let senderInst = channel["_getDbgPlgTargets"]()[2];
|
||||
let sender1 = (payload: any, oncomplete: any, sync?: boolean) => {
|
||||
oncomplete(200, {});
|
||||
|
@ -392,6 +402,8 @@ export class ChannelTests extends AITestClass {
|
|||
}
|
||||
});
|
||||
|
||||
this.clock.tick(1);
|
||||
|
||||
Assert.equal(this.evtDiscard, 0, "discard listener notification should not be called");
|
||||
Assert.equal(this.evtStore, 0, "store listener notification should not be called");
|
||||
Assert.equal(this.evtSent, 0, "sent listener notification should not be called");
|
||||
|
@ -460,6 +472,8 @@ export class ChannelTests extends AITestClass {
|
|||
this.batchDrop += 1;
|
||||
}
|
||||
});
|
||||
|
||||
this.clock.tick(1);
|
||||
let inMemoBatch = channel["_getDbgPlgTargets"]()[1];
|
||||
this.sandbox.stub((inMemoBatch) as any, "addEvent").callsFake((evt) => {
|
||||
return false;
|
||||
|
@ -517,6 +531,7 @@ export class ChannelTests extends AITestClass {
|
|||
this.batchDrop += 1;
|
||||
}
|
||||
});
|
||||
this.clock.tick(1);
|
||||
|
||||
let senderInst = channel["_getDbgPlgTargets"]()[2];
|
||||
let sender1 = (payload: any, oncomplete: any, sync?: boolean) => {
|
||||
|
@ -581,6 +596,8 @@ export class ChannelTests extends AITestClass {
|
|||
// make sure in memo time is long enough
|
||||
this.coreConfig.extensionConfig = {["OfflineChannel"]: {providers:[eStorageProviders.LocalStorage], inMemoMaxTime: 200000} as IOfflineChannelConfiguration};
|
||||
this.core.initialize(this.coreConfig,[channel, sendChannel]);
|
||||
|
||||
this.clock.tick(1);
|
||||
|
||||
let offlineListener = channel.getOfflineListener() as any;
|
||||
offlineListener.setOnlineState(2);
|
||||
|
|
|
@ -13,7 +13,7 @@ export function runTests() {
|
|||
new OfflineWebProviderTests().registerTests();
|
||||
new OfflineDbProviderTests().registerTests();
|
||||
new OfflineInMemoryBatchTests().registerTests();
|
||||
new OfflineBatchHandlerTests().registerTests();
|
||||
new ChannelTests().registerTests();
|
||||
new OfflineBatchHandlerTests().registerTests();
|
||||
new Offlinetimer().registerTests();
|
||||
}
|
|
@ -43,6 +43,8 @@ export class Offlinetimer extends AITestClass {
|
|||
let channel = new OfflineChannel();
|
||||
let onlineChannel = new TestChannel();
|
||||
this.core.initialize(this.coreConfig,[channel, onlineChannel]);
|
||||
|
||||
this.clock.tick(1);
|
||||
let offlineListener = channel.getOfflineListener() as any;
|
||||
|
||||
// online, processTelemetry is not called
|
||||
|
@ -153,6 +155,7 @@ export class Offlinetimer extends AITestClass {
|
|||
let channel = new OfflineChannel();
|
||||
let onlineChannel = new TestChannel();
|
||||
this.core.initialize(this.coreConfig,[channel, onlineChannel]);
|
||||
this.clock.tick(1);
|
||||
let offlineListener = channel.getOfflineListener() as any;
|
||||
|
||||
// online, processTelemetry is not called
|
||||
|
|
|
@ -5,7 +5,8 @@ import { EventPersistence } from "@microsoft/applicationinsights-common";
|
|||
import { INotificationManager, ITelemetryItem, NotificationManager, generateW3CId } from "@microsoft/applicationinsights-core-js";
|
||||
import { isString, objKeys, strSubstr } from "@nevware21/ts-utils";
|
||||
import { isValidPersistenceLevel } from "../Providers/IndexDbProvider";
|
||||
import { IPostTransmissionTelemetryItem } from "../applicationinsights-offlinechannel-js";
|
||||
import { IPostTransmissionTelemetryItem } from "../Interfaces/IInMemoryBatch";
|
||||
|
||||
|
||||
// Endpoint schema
|
||||
// <prefix>.<suffix>
|
||||
|
|
|
@ -102,6 +102,9 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
let _overrideIkey: string;
|
||||
let _evtsLimitInMemo: number;
|
||||
let _notificationManager: INotificationManager | undefined;
|
||||
let _isLazyInit: boolean;
|
||||
let _dependencyPlugin: IChannelControls;
|
||||
|
||||
|
||||
_initDefaults();
|
||||
|
||||
|
@ -111,6 +114,7 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
|
||||
_base.initialize(coreConfig, core, extensions);
|
||||
|
||||
// keep setting hasInitialized status here to avoid re-initialize
|
||||
_hasInitialized = true;
|
||||
|
||||
_diagLogger = _self.diagLog();
|
||||
|
@ -119,31 +123,37 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
_taskScheduler = createTaskScheduler(createAsyncPromise, "offline channel");
|
||||
_notificationManager = core.getNotifyMgr();
|
||||
}
|
||||
try {
|
||||
_createUrlConfig(coreConfig, core, extensions, pluginChain);
|
||||
let ctx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);
|
||||
_sender.initialize(coreConfig, core, ctx, _diagLogger, _primaryChannelId, _self._unloadHooks);
|
||||
if (_sender) {
|
||||
_senderInst = _sender.getXhrInst();
|
||||
_offlineListener.addListener((val)=> {
|
||||
if (!val.isOnline) {
|
||||
_sendNextBatchTimer && _sendNextBatchTimer.cancel();
|
||||
} else {
|
||||
_setSendNextTimer();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// need it for first time to confirm if there are any events
|
||||
_setSendNextTimer();
|
||||
// TODO: add refresh inside timer until dependency plugin is initialized
|
||||
scheduleTimeout(() => {
|
||||
try {
|
||||
let _dependencyPlugin = _getDependencyPlugin(coreConfig, core);
|
||||
// make sure that online sender is initialized
|
||||
if (!_isLazyInit && _dependencyPlugin && _dependencyPlugin.isInitialized()) {
|
||||
_isLazyInit = true;
|
||||
_createUrlConfig(coreConfig, core, extensions, pluginChain);
|
||||
let ctx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);
|
||||
_sender.initialize(coreConfig, core, ctx, _diagLogger, _primaryChannelId, _self._unloadHooks);
|
||||
_senderInst = _sender.getXhrInst();
|
||||
_offlineListener.addListener((val)=> {
|
||||
if (!val.isOnline) {
|
||||
_sendNextBatchTimer && _sendNextBatchTimer.cancel();
|
||||
} else {
|
||||
_setSendNextTimer();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// need it for first time to confirm if there are any events
|
||||
_setSendNextTimer();
|
||||
|
||||
}
|
||||
} catch (e) {
|
||||
// eslint-disable-next-line no-empty
|
||||
|
||||
}
|
||||
|
||||
}, 0);
|
||||
|
||||
} catch (e) {
|
||||
// eslint-disable-next-line no-empty
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
_self.processTelemetry = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
|
||||
|
@ -231,7 +241,7 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
|
||||
_self.onunloadFlush = () => {
|
||||
if (!_paused) {
|
||||
while (_inMemoBatch.count()) {
|
||||
while (_inMemoBatch && _inMemoBatch.count()) {
|
||||
_flushInMemoItems(true);
|
||||
}
|
||||
// TODO: unloadprovider might send events out of order
|
||||
|
@ -250,13 +260,13 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
|
||||
_self.sendNextBatch = () => {
|
||||
// TODO: add callback function
|
||||
return _setSendNextTimer();
|
||||
return _offineSupport && _setSendNextTimer();
|
||||
};
|
||||
|
||||
_self._doTeardown = (unloadCtx?: IProcessTelemetryUnloadContext, unloadState?: ITelemetryUnloadState) => {
|
||||
_self.onunloadFlush();
|
||||
_offlineListener && runTargetUnload(_offlineListener, false);
|
||||
let handler = _urlCfg.batchHandler;
|
||||
let handler = _urlCfg && _urlCfg.batchHandler;
|
||||
handler && handler.teardown();
|
||||
_clearScheduledTimer();
|
||||
_initDefaults();
|
||||
|
@ -288,6 +298,8 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
_primaryChannelId = null;
|
||||
_overrideIkey = null;
|
||||
_evtsLimitInMemo = null;
|
||||
_isLazyInit = false;
|
||||
_dependencyPlugin = null;
|
||||
}
|
||||
|
||||
|
||||
|
@ -322,7 +334,7 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
try {
|
||||
// TODO: add while loop to flush everything
|
||||
let inMemo = _inMemoBatch;
|
||||
let evts = inMemo.getItems();
|
||||
let evts = inMemo && inMemo.getItems();
|
||||
if (!evts || !evts.length) {
|
||||
return;
|
||||
}
|
||||
|
@ -524,7 +536,7 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
try {
|
||||
|
||||
if (evt) {
|
||||
return _offineSupport.serialize(evt, _convertUndefined);
|
||||
return _offineSupport && _offineSupport.serialize(evt, _convertUndefined);
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
|
@ -563,23 +575,16 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
|
||||
let ctx = createProcessTelemetryContext(null, theConfig, core);
|
||||
storageConfig = ctx.getExtCfg<IOfflineChannelConfiguration>(_self.identifier, defaultOfflineChannelConfig);
|
||||
let channelIds = storageConfig.primaryOnlineChannelId;
|
||||
// let channelIds = storageConfig.primaryOnlineChannelId;
|
||||
let onlineUrl = null;
|
||||
if (channelIds && channelIds.length) {
|
||||
arrForEach(channelIds, (id) => {
|
||||
let plugin = _self.core.getPlugin<IChannelControls>(id);
|
||||
let channel = plugin && plugin.plugin;
|
||||
if (channel) {
|
||||
_primaryChannelId = id;
|
||||
if (isFunction(channel.getOfflineSupport)) {
|
||||
_offineSupport = channel.getOfflineSupport();
|
||||
onlineUrl = isFunction(_offineSupport && _offineSupport.getUrl) && _offineSupport.getUrl();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
});
|
||||
let channel = _getDependencyPlugin(coreConfig, core);
|
||||
if (!!channel.isInitialized() && isFunction(channel.getOfflineSupport)) {
|
||||
_offineSupport = channel.getOfflineSupport();
|
||||
onlineUrl = isFunction(_offineSupport && _offineSupport.getUrl) && _offineSupport.getUrl();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
_overrideIkey = storageConfig.overrideInstrumentationKey;
|
||||
|
||||
let urlConfig: IUrlLocalStorageConfig = _urlCfg;
|
||||
|
@ -639,6 +644,28 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
}));
|
||||
}
|
||||
|
||||
function _getDependencyPlugin(coreConfig: IConfiguration & IConfig, core: IAppInsightsCore) {
|
||||
if (!_dependencyPlugin) {
|
||||
let ctx = createProcessTelemetryContext(null, coreConfig, core);
|
||||
let storageConfig = ctx.getExtCfg<IOfflineChannelConfiguration>(_self.identifier, defaultOfflineChannelConfig);
|
||||
let channelIds = storageConfig.primaryOnlineChannelId;
|
||||
if (channelIds && channelIds.length) {
|
||||
arrForEach(channelIds, (id) => {
|
||||
let plugin = core.getPlugin<IChannelControls>(id);
|
||||
let channel = plugin && plugin.plugin;
|
||||
if (channel) {
|
||||
_dependencyPlugin = channel;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return _dependencyPlugin;
|
||||
}
|
||||
|
||||
|
||||
function _callNotification(evtName: string, theArgs: any[]) {
|
||||
callNotification(_notificationManager, evtName, theArgs);
|
||||
|
@ -752,4 +779,5 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
|
|||
public sendNextBatch() {
|
||||
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -565,7 +565,7 @@
|
|||
"node_modules/@rush-temp/1ds-core-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/1ds-core-js.tgz",
|
||||
"integrity": "sha512-wqTWM5FfPlt1VaWHtPrfJsWhwtHO0f0JgkM2O7kPNosZHB4/h6oUT2/8wrQMa9kht8BXujZe0mgSArIY2fTX5A==",
|
||||
"integrity": "sha512-/Yn79SncrgzhGMHlOl/nGgScwGVo7fDzp21tAHDsb+3iZgfGiwRrDZP43qwzqWDtP4Bb52QN4gv1Ho0hvukd6g==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -593,7 +593,7 @@
|
|||
"node_modules/@rush-temp/1ds-post-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/1ds-post-js.tgz",
|
||||
"integrity": "sha512-Tv2PCInJemZ7aZqFuAmbLOv1cqIgz4yuyjI2WTJ1k1ybrraRUNQd2e/ZYc3cw3dqNQvBDYT9QfHHmo+/4s2rSA==",
|
||||
"integrity": "sha512-hB2tfsRGZPlfqUUu+MJW0am1S/IryLmiS2XOtFBIcMTl9Y7+9Cj+8Cv8aDat4jGMphVHrTKuEsjatVe0m3+X/A==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -615,7 +615,7 @@
|
|||
"node_modules/@rush-temp/ai-test-framework": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/ai-test-framework.tgz",
|
||||
"integrity": "sha512-Bg6MiDIoWkKtTwDm8A66wZZ1t+09mx8u8SVJyFHcHZB0DptQQ1HoQamfkOA0JzS4oT3cd3bYYjTNJkE5cpYC1w==",
|
||||
"integrity": "sha512-i8L9al7YfV205G5UQttp7Do21ziq98plr92VSnkVOOmz2dtB0kXtOdLtlVxtDvtZIoiGvo1wpU0j9mPUuLNdBw==",
|
||||
"dependencies": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-ts-plugin": "^0.4.3",
|
||||
|
@ -641,7 +641,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-analytics-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-analytics-js.tgz",
|
||||
"integrity": "sha512-i2CZyUTYgDZ+B2rhSMhHaUYEhFWBDwhHqUbh9n1Dy77S+ZxFi6+nmC6VmW5Z8nM/I5QZ24lKTkrCiI+xRuzuAg==",
|
||||
"integrity": "sha512-KtNJ0vXfw47B6ORqA1wtgXfSIWA7LQ2LUNMAokNDr6vC/lLjLWPveg8adZo5ptFh5beffzt5n3yQWllvJVGV/A==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -669,7 +669,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-cfgsync-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-cfgsync-js.tgz",
|
||||
"integrity": "sha512-ZaF4qcLxoRQEL3q8YsNgjKLXNjk9crt8eOueSfD3yRpxzSIavkxWPkKqE2eMIKoGrXX+Pg4pL9e7rEx3e3pWUw==",
|
||||
"integrity": "sha512-TVH5b9aeaKtBgp/afYUHE+2vYuVbuA4Cqewaqu6r/Qds3eQOvUzAfKlur1T+N54gVhcdKkC2aUXUaba23PPRcg==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -698,7 +698,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-channel-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-channel-js.tgz",
|
||||
"integrity": "sha512-vygsnOvKJS3Io+Ewp+mt2Bqhl8Rg9de77w3epIX14kuwRI0QUUxZud176RGoetOZwBFActvbh0Nk36gKkiY/xA==",
|
||||
"integrity": "sha512-Egx+Qwpb56RzxVSkcB4xR2FvgbJ55gTCzGN6tSOAUz1n34sWlTdV2zBqJjzrTYrhy/7Y/W6Q/VVuocwH9XzubA==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -725,7 +725,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-chrome-debug-extension": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-chrome-debug-extension.tgz",
|
||||
"integrity": "sha512-30AR1ZiaoNfwF8CjbkcWh2g8w8ECYRFNFhnNmJAjhTcqFyUbdBTifTNBKb4AOeog6DDkN6NWZx9qojQLGoFYbg==",
|
||||
"integrity": "sha512-RCdFP4mjd5pIjglQIfWH8Yls+QiEdioYS5ziHDEZWyIbd+fYx7iHHRVaqKutMb7/T/LqCDUur0Rm/Ah+do+yYw==",
|
||||
"dependencies": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
|
@ -759,7 +759,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-clickanalytics-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-clickanalytics-js.tgz",
|
||||
"integrity": "sha512-aXu0vdb+HNR6M+X5JoefcwwMFiQ03DE0St6cM1MEVONpvBC0s17rk245opy65aIulc/7wCPSLYMl4RLSWu+Q0w==",
|
||||
"integrity": "sha512-AUkKc2bEuPomktpadeO/7nHAww9m+0bDefWkbEZZHvK+KgrG97ZhxzRpl/GGrnb43GujFyl0Hzot0OaPHtYBOA==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -784,7 +784,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-common": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-common.tgz",
|
||||
"integrity": "sha512-8m3iJe1Aa8lPzAJoDiyALTrDh4m89HcoGXGkjrq47wQ1d+GxIF0x/qPO6YvcRErPYDlBO9IzcWRQojCcH0IIlA==",
|
||||
"integrity": "sha512-d0f4wTojw+nPN+xTB38NH6M6q4xhIVOH15t+HxRLRlWiR/mCxUa/Dsy1dnsRiAZRtNqxD+iFfGYLA9LEDZlwwg==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -810,7 +810,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-core-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-core-js.tgz",
|
||||
"integrity": "sha512-CFC50QjPVur2gnlZxwcZ2Trd6pwxegt8ndiqTRYK6eGsskVcAeDvMi94hZjmh3LLDPSbUbjmw0TBoTM/+F7bJQ==",
|
||||
"integrity": "sha512-5ixW1SnUFE3DhOPw5YudR3FXG/iKsa6GBEDFlsdiAVV5pkWUkJtfNfg8MBhJRfak8qOt3x/cIPq6RUmxRJyMcg==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -839,7 +839,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-debugplugin-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-debugplugin-js.tgz",
|
||||
"integrity": "sha512-7wOjfBVjhxxmCvj3zF63fqCkqGdKTY8xsjomMRBYpM33NM7rN872gqScYWPMvIzxJsw/o996pfWF51upKc2Ojw==",
|
||||
"integrity": "sha512-Tqm3AbMzBpweY1J7oDz8NKU1kfVLw73rS4hHsVkAIECepRsrCQVwHjk1H6N1Yf+08H2pdeXmBRGQ90CFX4SEvQ==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -864,7 +864,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-dependencies-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-dependencies-js.tgz",
|
||||
"integrity": "sha512-Jrqd+HFn/DhAlQGvBp4xHnBg/sPj6dcJshUCKs9uoqIitA0rRS9W4D27kJ+GpzAfTe+eDFY3NfkYOj4+ON3nMg==",
|
||||
"integrity": "sha512-vUGGj1dW27capHkHArIKwz79gnpLZaRtW11Tf9OZj6odeP/2wiH+zZzyS09/NPvcQrA1bUjE+npc5Nj4Sm+1Bg==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -892,7 +892,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-example-aisku": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-example-aisku.tgz",
|
||||
"integrity": "sha512-nC6XEmHj3+zwP9lfg0SG7U6K38THNl7v1NRJlb9KKjWWy1PptK4kJrAxpezF3ttkid9TFHkUdbXafJPHPXEcGA==",
|
||||
"integrity": "sha512-gC6YuoTK9qfasA5LcgZXNmqkKBxbRFqENuJEkGC8GLh/ooC/02BDei+31deefPQNVPw6cP9V+kDrlLfRwMVCtQ==",
|
||||
"dependencies": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/ts-utils": ">= 0.11.1 < 2.x",
|
||||
|
@ -910,7 +910,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-example-cfgsync": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-example-cfgsync.tgz",
|
||||
"integrity": "sha512-VxuKglaA0xhHc18AYgFDotTve6vPc0Zx2f1dPD+Gc6WXFDKOS6XOQyoG1tyjJ+UUXrwVxz+WGJCFKOtK92W1tw==",
|
||||
"integrity": "sha512-782hbmCrD723J2N8X5CtJR5bVuivwCzaKaYe/zn23WvuciexMgu5FpbbnpSfbOERlQ9ONN8yZMcjWf/jjj2t/g==",
|
||||
"dependencies": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
|
@ -936,7 +936,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-example-dependencies": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-example-dependencies.tgz",
|
||||
"integrity": "sha512-VjBR3vTtdeL2xYAkhJstxsvBaCjjLSX66JngFZd9Shb5OKVQvq9mDlTjqAVPNlJsA9l4mY7zpLdvqjdhopgERg==",
|
||||
"integrity": "sha512-urNbNsZocNRYLyxGWjsclCReYj77rspXuwlmlEbcPPDG17B/b/G5oSpMX+LLE9OeLWgiWWTjnZ75txcCN1YhVA==",
|
||||
"dependencies": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/ts-utils": ">= 0.11.1 < 2.x",
|
||||
|
@ -954,7 +954,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-example-shared-worker": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-example-shared-worker.tgz",
|
||||
"integrity": "sha512-fgmYRe9TyA102FTrq1/RC1bniA6BTBLNxD5nmQArbjBOCQjuLBDa+m0Y8jxeLS3EznS8w94+P4Dio4H/0ehnxA==",
|
||||
"integrity": "sha512-vQ7vS5mfy2666gOjFCAVlq0xvu6WGD0/gXO0yfD8UFOmmQVFtQDIYZHQut19xOXbEiEts4nRIpttd7bb5mOuag==",
|
||||
"dependencies": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
|
@ -980,7 +980,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-js-release-tools": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-js-release-tools.tgz",
|
||||
"integrity": "sha512-e9jw61D/jeRuLlSL+dQ2bFp8iqw6Q9ZMeboqX0CX0iYwjAPRiN/59ZK66D0UOgggNkqYgSEqgDi+ycw9XRtGnA==",
|
||||
"integrity": "sha512-6sVB5NMzKj/P9v9UvZlA/IjQSkGeupaDliSt2IZqy+SlR59Hv335Ekz/5f54xMHu+QiARXJATbjX7lDfCMG8qw==",
|
||||
"dependencies": {
|
||||
"globby": "^11.0.0",
|
||||
"grunt": "^1.5.3"
|
||||
|
@ -989,7 +989,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-offlinechannel-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-offlinechannel-js.tgz",
|
||||
"integrity": "sha512-2BKj2pwDwoosAH1HKMT9qtYLWEWacTNlYXS2esaw0AbQmfgOWkqU7r5SJ1UuX3elQxjqvwLRMCinzsSL5D98KQ==",
|
||||
"integrity": "sha512-19H5/5rpWyCkvQ0VAAm5i8DM4K8AyiXdzYlH1TtzgnPquOUxMrnWXEU2evMmTRgOOrbHBi1h6yPe39CpWQbWBA==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -1016,7 +1016,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-osplugin-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-osplugin-js.tgz",
|
||||
"integrity": "sha512-JI1bAUBrqo8lPhUw2GA4+5ZIx9MSfE47+E6S9e4FE+RiPfbXnJ0GnRLOClfqhqYLktl+1k7AFR1JXBtOyACOew==",
|
||||
"integrity": "sha512-dBwAyZkE0XuRSYaVrqUP2yEDeysqU+2PgMJHXxQeM2yfiET+mtP7ufFAkXt/ug3+spyS43Ds2E5af+1JGp09+A==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -1037,7 +1037,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-perfmarkmeasure-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-perfmarkmeasure-js.tgz",
|
||||
"integrity": "sha512-9XvAQfbB2UmBBn3SRA4Ze+kp8OXLROmH5rHPQsZwOirC7Nu/THzsd3ByvvVuz4WwoRXnm8zCbHPhNVaCT+ep+A==",
|
||||
"integrity": "sha512-4IsPweGTnoCgjAr5uhng81pPT/g1vAG35Lw6vKVBtAliEAt0JlFpGg5IpB8pMjKJXEY9SkDtV8QKgCw/O5u11Q==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -1062,7 +1062,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-properties-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-properties-js.tgz",
|
||||
"integrity": "sha512-DUUFwf4dwjNjMGYnYfBHrWNGccl9nuwmipWuADtvEfEjRDSX7wC7+ZAuJKTGmaUe6z58sRL+fv03WTK85S4Osg==",
|
||||
"integrity": "sha512-ZLaIPMK/oaABTzNZGdIjJHNyToOvB3gbkXsyhfZ0fVCS9kXvnhRa06kxuD8oiWUYP5PaOnhW4MGpB6CrWO6MQQ==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -1090,7 +1090,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-rollup-es5": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-rollup-es5.tgz",
|
||||
"integrity": "sha512-1Yw2QKlul+WlTRAHhchUxteaSDaeZjskW1H4R3BT7xv7yGZPi0dp4KtKdKAJZQ+/Z+Zxg4XXOWpuDmv/FYmFtQ==",
|
||||
"integrity": "sha512-pZV3ytRYW9T6XrXLTRqAt5c23vrywlwfWQ1rrGVh78hlig+Ns/ZJw+jM4JwgSyvce8hcZiR+z1rm0xpKju+oJA==",
|
||||
"dependencies": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
|
@ -1114,7 +1114,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-rollup-plugin-uglify3-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-rollup-plugin-uglify3-js.tgz",
|
||||
"integrity": "sha512-gp8gJ52kIbJpkT406+PBS7rtyCSUnc72otGxnwywqWCuBJvO1O+qaOCIJBYL/wYk1lDpMKejDqG94vPSSQtnFg==",
|
||||
"integrity": "sha512-WtYrHtc+6IgVGmHIahhl2aYUGuloDq9xCX6VuwObLmccrAqmYq0LYbCanjHi8ugorx/zwwQB37yY3y2WfaDGmw==",
|
||||
"dependencies": {
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
"@nevware21/grunt-ts-plugin": "^0.4.3",
|
||||
|
@ -1135,7 +1135,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-shims": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-shims.tgz",
|
||||
"integrity": "sha512-z9owAp7EJeQwsnWQTjZPV9eEs/8r0w0kqx9YqUK5KmH+8qYOlMnw+Aaw/pQgW2JeMybLSzkRrL4DmIUTxRivew==",
|
||||
"integrity": "sha512-zKaWFb12Vr+Vi6EiPsHKp+dyQIkbGDptjL9BxVjZviwFHWYdVyZCRDwihi2DuKhWCnsXs1k4cE0fyQAPb+0Qaw==",
|
||||
"dependencies": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
|
@ -1157,7 +1157,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-teechannel-js": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-teechannel-js.tgz",
|
||||
"integrity": "sha512-YmUVgNnGCZp/Xi/6MMfhUSX0O4pnRZeQcKlZHlVieBUlQC0hgzNFnft0reOISROi8JYlr9tuRbXP3TCzt/1vzw==",
|
||||
"integrity": "sha512-hRYwJycPiRggIiGwWHmKDWaWouV09B6ee5Vpdeqr/dFKdgA7s6ezaJwynziWrjKBuuyMW+rLIi3rdOaWSDDjLw==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -1184,7 +1184,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-test-module-type-check": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-test-module-type-check.tgz",
|
||||
"integrity": "sha512-8Oa38KhNm/nQDfJtUeOc5itb2WDLJDin8pEygF+ct6u+bBaf20gJcRHayEL1kE+xqAyiZVBkuHagUXfD9nUALA==",
|
||||
"integrity": "sha512-Dmp/qykXtLR3sMzRIE/qlbolEvpZpWfGH/2jakzqEc/jlB98IFMjqxmj4wPhIj0upPSdxrBek4WKNtuasl91gA==",
|
||||
"dependencies": {
|
||||
"tslib": "*",
|
||||
"typescript": "^4.9.3"
|
||||
|
@ -1193,7 +1193,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-web": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-web.tgz",
|
||||
"integrity": "sha512-oGvg1xTmeV5N3Rwb05IWs0UvgvB1wMXVbk+nb1+CKJkwzbRv29qkz7louDAA0mu/uh//yGsZPE/72uysBkmJmA==",
|
||||
"integrity": "sha512-tB9XhhQiAKks15DLzrRGBtu8ojH78COeefbqBUQEFDOfUYVF3tP1xnmvI1iWdQlX4vgpPQBjQs2UgGZxPfVReQ==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -1225,7 +1225,7 @@
|
|||
"node_modules/@rush-temp/applicationinsights-web-basic": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-web-basic.tgz",
|
||||
"integrity": "sha512-ThqfxrDC9icmMwShueGd5TbNSb3hoUT1747h+YVSWS0RtAPcfEzWciQbA2v8M5njrRIbuPpcAC/WFtvSR/kMpg==",
|
||||
"integrity": "sha512-jkN5S684ogV45t3FnA9nuy0jO3n8J7tz2OQtqLuoIOLqsIG/bkw5piezq5ppKFMhbXpsDNcWj4DX7i/2YCuPSA==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -1252,12 +1252,12 @@
|
|||
"node_modules/@rush-temp/applicationinsights-web-config": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-web-config.tgz",
|
||||
"integrity": "sha512-FwPOZ+esirRqdKg9s7VTxtWqGJ9CQ/gIJ0PfUvTolAF9JZCVw5wQeHD4Tv/KiziZhB50CNaGshnPmLpWGVzo9g=="
|
||||
"integrity": "sha512-WwlTM/noixyLMqKFBLKa9o88N/2Z3dA9m0R6Qc9UvBNseZqPIpvl1vRMDnmwjMMV6lV3FsmeSmjD7LCJphXF2Q=="
|
||||
},
|
||||
"node_modules/@rush-temp/applicationinsights-web-snippet": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:projects/applicationinsights-web-snippet.tgz",
|
||||
"integrity": "sha512-i3Pey5xpQ9I89tUduEeqEddndOPC9aatmIx94yPhgDdMek3S8hydq9qJNCA3Ql4B52JvHi881rrSCQnVwp6/SQ==",
|
||||
"integrity": "sha512-CwWhN4T+KwfgP5b2ZVkGz4EGS73Lsxf7lcb4CWxcG0V9m8Cfi1z0HO5C458vxSrZkj/G7YAnBggiMi0p4MsIhw==",
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -2639,9 +2639,9 @@
|
|||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.4.795",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.795.tgz",
|
||||
"integrity": "sha512-hHo4lK/8wb4NUa+NJYSFyJ0xedNHiR6ylilDtb8NUW9d4dmBFmGiecYEKCEbti1wTNzbKXLfl4hPWEkAFbHYlw=="
|
||||
"version": "1.4.796",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.796.tgz",
|
||||
"integrity": "sha512-NglN/xprcM+SHD2XCli4oC6bWe6kHoytcyLKCWXmRL854F0qhPhaYgUswUsglnPxYaNQIg2uMY4BvaomIf3kLA=="
|
||||
},
|
||||
"node_modules/encodeurl": {
|
||||
"version": "1.0.2",
|
||||
|
@ -3262,6 +3262,19 @@
|
|||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
||||
"hasInstallScript": true,
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/function-bind": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||
|
@ -6710,7 +6723,7 @@
|
|||
},
|
||||
"@rush-temp/1ds-core-js": {
|
||||
"version": "file:projects\\1ds-core-js.tgz",
|
||||
"integrity": "sha512-wqTWM5FfPlt1VaWHtPrfJsWhwtHO0f0JgkM2O7kPNosZHB4/h6oUT2/8wrQMa9kht8BXujZe0mgSArIY2fTX5A==",
|
||||
"integrity": "sha512-/Yn79SncrgzhGMHlOl/nGgScwGVo7fDzp21tAHDsb+3iZgfGiwRrDZP43qwzqWDtP4Bb52QN4gv1Ho0hvukd6g==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -6737,7 +6750,7 @@
|
|||
},
|
||||
"@rush-temp/1ds-post-js": {
|
||||
"version": "file:projects\\1ds-post-js.tgz",
|
||||
"integrity": "sha512-Tv2PCInJemZ7aZqFuAmbLOv1cqIgz4yuyjI2WTJ1k1ybrraRUNQd2e/ZYc3cw3dqNQvBDYT9QfHHmo+/4s2rSA==",
|
||||
"integrity": "sha512-hB2tfsRGZPlfqUUu+MJW0am1S/IryLmiS2XOtFBIcMTl9Y7+9Cj+8Cv8aDat4jGMphVHrTKuEsjatVe0m3+X/A==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -6758,7 +6771,7 @@
|
|||
},
|
||||
"@rush-temp/ai-test-framework": {
|
||||
"version": "file:projects\\ai-test-framework.tgz",
|
||||
"integrity": "sha512-Bg6MiDIoWkKtTwDm8A66wZZ1t+09mx8u8SVJyFHcHZB0DptQQ1HoQamfkOA0JzS4oT3cd3bYYjTNJkE5cpYC1w==",
|
||||
"integrity": "sha512-i8L9al7YfV205G5UQttp7Do21ziq98plr92VSnkVOOmz2dtB0kXtOdLtlVxtDvtZIoiGvo1wpU0j9mPUuLNdBw==",
|
||||
"requires": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-ts-plugin": "^0.4.3",
|
||||
|
@ -6783,7 +6796,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-analytics-js": {
|
||||
"version": "file:projects\\applicationinsights-analytics-js.tgz",
|
||||
"integrity": "sha512-i2CZyUTYgDZ+B2rhSMhHaUYEhFWBDwhHqUbh9n1Dy77S+ZxFi6+nmC6VmW5Z8nM/I5QZ24lKTkrCiI+xRuzuAg==",
|
||||
"integrity": "sha512-KtNJ0vXfw47B6ORqA1wtgXfSIWA7LQ2LUNMAokNDr6vC/lLjLWPveg8adZo5ptFh5beffzt5n3yQWllvJVGV/A==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -6810,7 +6823,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-cfgsync-js": {
|
||||
"version": "file:projects\\applicationinsights-cfgsync-js.tgz",
|
||||
"integrity": "sha512-ZaF4qcLxoRQEL3q8YsNgjKLXNjk9crt8eOueSfD3yRpxzSIavkxWPkKqE2eMIKoGrXX+Pg4pL9e7rEx3e3pWUw==",
|
||||
"integrity": "sha512-TVH5b9aeaKtBgp/afYUHE+2vYuVbuA4Cqewaqu6r/Qds3eQOvUzAfKlur1T+N54gVhcdKkC2aUXUaba23PPRcg==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -6838,7 +6851,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-channel-js": {
|
||||
"version": "file:projects\\applicationinsights-channel-js.tgz",
|
||||
"integrity": "sha512-vygsnOvKJS3Io+Ewp+mt2Bqhl8Rg9de77w3epIX14kuwRI0QUUxZud176RGoetOZwBFActvbh0Nk36gKkiY/xA==",
|
||||
"integrity": "sha512-Egx+Qwpb56RzxVSkcB4xR2FvgbJ55gTCzGN6tSOAUz1n34sWlTdV2zBqJjzrTYrhy/7Y/W6Q/VVuocwH9XzubA==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -6864,7 +6877,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-chrome-debug-extension": {
|
||||
"version": "file:projects\\applicationinsights-chrome-debug-extension.tgz",
|
||||
"integrity": "sha512-30AR1ZiaoNfwF8CjbkcWh2g8w8ECYRFNFhnNmJAjhTcqFyUbdBTifTNBKb4AOeog6DDkN6NWZx9qojQLGoFYbg==",
|
||||
"integrity": "sha512-RCdFP4mjd5pIjglQIfWH8Yls+QiEdioYS5ziHDEZWyIbd+fYx7iHHRVaqKutMb7/T/LqCDUur0Rm/Ah+do+yYw==",
|
||||
"requires": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
|
@ -6897,7 +6910,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-clickanalytics-js": {
|
||||
"version": "file:projects\\applicationinsights-clickanalytics-js.tgz",
|
||||
"integrity": "sha512-aXu0vdb+HNR6M+X5JoefcwwMFiQ03DE0St6cM1MEVONpvBC0s17rk245opy65aIulc/7wCPSLYMl4RLSWu+Q0w==",
|
||||
"integrity": "sha512-AUkKc2bEuPomktpadeO/7nHAww9m+0bDefWkbEZZHvK+KgrG97ZhxzRpl/GGrnb43GujFyl0Hzot0OaPHtYBOA==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -6921,7 +6934,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-common": {
|
||||
"version": "file:projects\\applicationinsights-common.tgz",
|
||||
"integrity": "sha512-8m3iJe1Aa8lPzAJoDiyALTrDh4m89HcoGXGkjrq47wQ1d+GxIF0x/qPO6YvcRErPYDlBO9IzcWRQojCcH0IIlA==",
|
||||
"integrity": "sha512-d0f4wTojw+nPN+xTB38NH6M6q4xhIVOH15t+HxRLRlWiR/mCxUa/Dsy1dnsRiAZRtNqxD+iFfGYLA9LEDZlwwg==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -6946,7 +6959,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-core-js": {
|
||||
"version": "file:projects\\applicationinsights-core-js.tgz",
|
||||
"integrity": "sha512-CFC50QjPVur2gnlZxwcZ2Trd6pwxegt8ndiqTRYK6eGsskVcAeDvMi94hZjmh3LLDPSbUbjmw0TBoTM/+F7bJQ==",
|
||||
"integrity": "sha512-5ixW1SnUFE3DhOPw5YudR3FXG/iKsa6GBEDFlsdiAVV5pkWUkJtfNfg8MBhJRfak8qOt3x/cIPq6RUmxRJyMcg==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -6974,7 +6987,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-debugplugin-js": {
|
||||
"version": "file:projects\\applicationinsights-debugplugin-js.tgz",
|
||||
"integrity": "sha512-7wOjfBVjhxxmCvj3zF63fqCkqGdKTY8xsjomMRBYpM33NM7rN872gqScYWPMvIzxJsw/o996pfWF51upKc2Ojw==",
|
||||
"integrity": "sha512-Tqm3AbMzBpweY1J7oDz8NKU1kfVLw73rS4hHsVkAIECepRsrCQVwHjk1H6N1Yf+08H2pdeXmBRGQ90CFX4SEvQ==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -6998,7 +7011,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-dependencies-js": {
|
||||
"version": "file:projects\\applicationinsights-dependencies-js.tgz",
|
||||
"integrity": "sha512-Jrqd+HFn/DhAlQGvBp4xHnBg/sPj6dcJshUCKs9uoqIitA0rRS9W4D27kJ+GpzAfTe+eDFY3NfkYOj4+ON3nMg==",
|
||||
"integrity": "sha512-vUGGj1dW27capHkHArIKwz79gnpLZaRtW11Tf9OZj6odeP/2wiH+zZzyS09/NPvcQrA1bUjE+npc5Nj4Sm+1Bg==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -7025,7 +7038,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-example-aisku": {
|
||||
"version": "file:projects\\applicationinsights-example-aisku.tgz",
|
||||
"integrity": "sha512-nC6XEmHj3+zwP9lfg0SG7U6K38THNl7v1NRJlb9KKjWWy1PptK4kJrAxpezF3ttkid9TFHkUdbXafJPHPXEcGA==",
|
||||
"integrity": "sha512-gC6YuoTK9qfasA5LcgZXNmqkKBxbRFqENuJEkGC8GLh/ooC/02BDei+31deefPQNVPw6cP9V+kDrlLfRwMVCtQ==",
|
||||
"requires": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/ts-utils": ">= 0.11.1 < 2.x",
|
||||
|
@ -7042,7 +7055,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-example-cfgsync": {
|
||||
"version": "file:projects\\applicationinsights-example-cfgsync.tgz",
|
||||
"integrity": "sha512-VxuKglaA0xhHc18AYgFDotTve6vPc0Zx2f1dPD+Gc6WXFDKOS6XOQyoG1tyjJ+UUXrwVxz+WGJCFKOtK92W1tw==",
|
||||
"integrity": "sha512-782hbmCrD723J2N8X5CtJR5bVuivwCzaKaYe/zn23WvuciexMgu5FpbbnpSfbOERlQ9ONN8yZMcjWf/jjj2t/g==",
|
||||
"requires": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
|
@ -7067,7 +7080,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-example-dependencies": {
|
||||
"version": "file:projects\\applicationinsights-example-dependencies.tgz",
|
||||
"integrity": "sha512-VjBR3vTtdeL2xYAkhJstxsvBaCjjLSX66JngFZd9Shb5OKVQvq9mDlTjqAVPNlJsA9l4mY7zpLdvqjdhopgERg==",
|
||||
"integrity": "sha512-urNbNsZocNRYLyxGWjsclCReYj77rspXuwlmlEbcPPDG17B/b/G5oSpMX+LLE9OeLWgiWWTjnZ75txcCN1YhVA==",
|
||||
"requires": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/ts-utils": ">= 0.11.1 < 2.x",
|
||||
|
@ -7084,7 +7097,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-example-shared-worker": {
|
||||
"version": "file:projects\\applicationinsights-example-shared-worker.tgz",
|
||||
"integrity": "sha512-fgmYRe9TyA102FTrq1/RC1bniA6BTBLNxD5nmQArbjBOCQjuLBDa+m0Y8jxeLS3EznS8w94+P4Dio4H/0ehnxA==",
|
||||
"integrity": "sha512-vQ7vS5mfy2666gOjFCAVlq0xvu6WGD0/gXO0yfD8UFOmmQVFtQDIYZHQut19xOXbEiEts4nRIpttd7bb5mOuag==",
|
||||
"requires": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
|
@ -7109,7 +7122,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-js-release-tools": {
|
||||
"version": "file:projects\\applicationinsights-js-release-tools.tgz",
|
||||
"integrity": "sha512-e9jw61D/jeRuLlSL+dQ2bFp8iqw6Q9ZMeboqX0CX0iYwjAPRiN/59ZK66D0UOgggNkqYgSEqgDi+ycw9XRtGnA==",
|
||||
"integrity": "sha512-6sVB5NMzKj/P9v9UvZlA/IjQSkGeupaDliSt2IZqy+SlR59Hv335Ekz/5f54xMHu+QiARXJATbjX7lDfCMG8qw==",
|
||||
"requires": {
|
||||
"globby": "^11.0.0",
|
||||
"grunt": "^1.5.3"
|
||||
|
@ -7117,7 +7130,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-offlinechannel-js": {
|
||||
"version": "file:projects\\applicationinsights-offlinechannel-js.tgz",
|
||||
"integrity": "sha512-2BKj2pwDwoosAH1HKMT9qtYLWEWacTNlYXS2esaw0AbQmfgOWkqU7r5SJ1UuX3elQxjqvwLRMCinzsSL5D98KQ==",
|
||||
"integrity": "sha512-19H5/5rpWyCkvQ0VAAm5i8DM4K8AyiXdzYlH1TtzgnPquOUxMrnWXEU2evMmTRgOOrbHBi1h6yPe39CpWQbWBA==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -7143,7 +7156,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-osplugin-js": {
|
||||
"version": "file:projects\\applicationinsights-osplugin-js.tgz",
|
||||
"integrity": "sha512-JI1bAUBrqo8lPhUw2GA4+5ZIx9MSfE47+E6S9e4FE+RiPfbXnJ0GnRLOClfqhqYLktl+1k7AFR1JXBtOyACOew==",
|
||||
"integrity": "sha512-dBwAyZkE0XuRSYaVrqUP2yEDeysqU+2PgMJHXxQeM2yfiET+mtP7ufFAkXt/ug3+spyS43Ds2E5af+1JGp09+A==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -7163,7 +7176,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-perfmarkmeasure-js": {
|
||||
"version": "file:projects\\applicationinsights-perfmarkmeasure-js.tgz",
|
||||
"integrity": "sha512-9XvAQfbB2UmBBn3SRA4Ze+kp8OXLROmH5rHPQsZwOirC7Nu/THzsd3ByvvVuz4WwoRXnm8zCbHPhNVaCT+ep+A==",
|
||||
"integrity": "sha512-4IsPweGTnoCgjAr5uhng81pPT/g1vAG35Lw6vKVBtAliEAt0JlFpGg5IpB8pMjKJXEY9SkDtV8QKgCw/O5u11Q==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -7187,7 +7200,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-properties-js": {
|
||||
"version": "file:projects\\applicationinsights-properties-js.tgz",
|
||||
"integrity": "sha512-DUUFwf4dwjNjMGYnYfBHrWNGccl9nuwmipWuADtvEfEjRDSX7wC7+ZAuJKTGmaUe6z58sRL+fv03WTK85S4Osg==",
|
||||
"integrity": "sha512-ZLaIPMK/oaABTzNZGdIjJHNyToOvB3gbkXsyhfZ0fVCS9kXvnhRa06kxuD8oiWUYP5PaOnhW4MGpB6CrWO6MQQ==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -7214,7 +7227,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-rollup-es5": {
|
||||
"version": "file:projects\\applicationinsights-rollup-es5.tgz",
|
||||
"integrity": "sha512-1Yw2QKlul+WlTRAHhchUxteaSDaeZjskW1H4R3BT7xv7yGZPi0dp4KtKdKAJZQ+/Z+Zxg4XXOWpuDmv/FYmFtQ==",
|
||||
"integrity": "sha512-pZV3ytRYW9T6XrXLTRqAt5c23vrywlwfWQ1rrGVh78hlig+Ns/ZJw+jM4JwgSyvce8hcZiR+z1rm0xpKju+oJA==",
|
||||
"requires": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
|
@ -7237,7 +7250,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-rollup-plugin-uglify3-js": {
|
||||
"version": "file:projects\\applicationinsights-rollup-plugin-uglify3-js.tgz",
|
||||
"integrity": "sha512-gp8gJ52kIbJpkT406+PBS7rtyCSUnc72otGxnwywqWCuBJvO1O+qaOCIJBYL/wYk1lDpMKejDqG94vPSSQtnFg==",
|
||||
"integrity": "sha512-WtYrHtc+6IgVGmHIahhl2aYUGuloDq9xCX6VuwObLmccrAqmYq0LYbCanjHi8ugorx/zwwQB37yY3y2WfaDGmw==",
|
||||
"requires": {
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
"@nevware21/grunt-ts-plugin": "^0.4.3",
|
||||
|
@ -7257,7 +7270,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-shims": {
|
||||
"version": "file:projects\\applicationinsights-shims.tgz",
|
||||
"integrity": "sha512-z9owAp7EJeQwsnWQTjZPV9eEs/8r0w0kqx9YqUK5KmH+8qYOlMnw+Aaw/pQgW2JeMybLSzkRrL4DmIUTxRivew==",
|
||||
"integrity": "sha512-zKaWFb12Vr+Vi6EiPsHKp+dyQIkbGDptjL9BxVjZviwFHWYdVyZCRDwihi2DuKhWCnsXs1k4cE0fyQAPb+0Qaw==",
|
||||
"requires": {
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
"@nevware21/grunt-eslint-ts": "^0.2.2",
|
||||
|
@ -7278,7 +7291,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-teechannel-js": {
|
||||
"version": "file:projects\\applicationinsights-teechannel-js.tgz",
|
||||
"integrity": "sha512-YmUVgNnGCZp/Xi/6MMfhUSX0O4pnRZeQcKlZHlVieBUlQC0hgzNFnft0reOISROi8JYlr9tuRbXP3TCzt/1vzw==",
|
||||
"integrity": "sha512-hRYwJycPiRggIiGwWHmKDWaWouV09B6ee5Vpdeqr/dFKdgA7s6ezaJwynziWrjKBuuyMW+rLIi3rdOaWSDDjLw==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -7304,7 +7317,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-test-module-type-check": {
|
||||
"version": "file:projects\\applicationinsights-test-module-type-check.tgz",
|
||||
"integrity": "sha512-8Oa38KhNm/nQDfJtUeOc5itb2WDLJDin8pEygF+ct6u+bBaf20gJcRHayEL1kE+xqAyiZVBkuHagUXfD9nUALA==",
|
||||
"integrity": "sha512-Dmp/qykXtLR3sMzRIE/qlbolEvpZpWfGH/2jakzqEc/jlB98IFMjqxmj4wPhIj0upPSdxrBek4WKNtuasl91gA==",
|
||||
"requires": {
|
||||
"tslib": "*",
|
||||
"typescript": "^4.9.3"
|
||||
|
@ -7312,7 +7325,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-web": {
|
||||
"version": "file:projects\\applicationinsights-web.tgz",
|
||||
"integrity": "sha512-oGvg1xTmeV5N3Rwb05IWs0UvgvB1wMXVbk+nb1+CKJkwzbRv29qkz7louDAA0mu/uh//yGsZPE/72uysBkmJmA==",
|
||||
"integrity": "sha512-tB9XhhQiAKks15DLzrRGBtu8ojH78COeefbqBUQEFDOfUYVF3tP1xnmvI1iWdQlX4vgpPQBjQs2UgGZxPfVReQ==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -7343,7 +7356,7 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-web-basic": {
|
||||
"version": "file:projects\\applicationinsights-web-basic.tgz",
|
||||
"integrity": "sha512-ThqfxrDC9icmMwShueGd5TbNSb3hoUT1747h+YVSWS0RtAPcfEzWciQbA2v8M5njrRIbuPpcAC/WFtvSR/kMpg==",
|
||||
"integrity": "sha512-jkN5S684ogV45t3FnA9nuy0jO3n8J7tz2OQtqLuoIOLqsIG/bkw5piezq5ppKFMhbXpsDNcWj4DX7i/2YCuPSA==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -7369,11 +7382,11 @@
|
|||
},
|
||||
"@rush-temp/applicationinsights-web-config": {
|
||||
"version": "file:projects\\applicationinsights-web-config.tgz",
|
||||
"integrity": "sha512-FwPOZ+esirRqdKg9s7VTxtWqGJ9CQ/gIJ0PfUvTolAF9JZCVw5wQeHD4Tv/KiziZhB50CNaGshnPmLpWGVzo9g=="
|
||||
"integrity": "sha512-WwlTM/noixyLMqKFBLKa9o88N/2Z3dA9m0R6Qc9UvBNseZqPIpvl1vRMDnmwjMMV6lV3FsmeSmjD7LCJphXF2Q=="
|
||||
},
|
||||
"@rush-temp/applicationinsights-web-snippet": {
|
||||
"version": "file:projects\\applicationinsights-web-snippet.tgz",
|
||||
"integrity": "sha512-i3Pey5xpQ9I89tUduEeqEddndOPC9aatmIx94yPhgDdMek3S8hydq9qJNCA3Ql4B52JvHi881rrSCQnVwp6/SQ==",
|
||||
"integrity": "sha512-CwWhN4T+KwfgP5b2ZVkGz4EGS73Lsxf7lcb4CWxcG0V9m8Cfi1z0HO5C458vxSrZkj/G7YAnBggiMi0p4MsIhw==",
|
||||
"requires": {
|
||||
"@microsoft/api-extractor": "^7.40.0",
|
||||
"@microsoft/dynamicproto-js": "^2.0.3",
|
||||
|
@ -8382,9 +8395,9 @@
|
|||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.4.795",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.795.tgz",
|
||||
"integrity": "sha512-hHo4lK/8wb4NUa+NJYSFyJ0xedNHiR6ylilDtb8NUW9d4dmBFmGiecYEKCEbti1wTNzbKXLfl4hPWEkAFbHYlw=="
|
||||
"version": "1.4.796",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.796.tgz",
|
||||
"integrity": "sha512-NglN/xprcM+SHD2XCli4oC6bWe6kHoytcyLKCWXmRL854F0qhPhaYgUswUsglnPxYaNQIg2uMY4BvaomIf3kLA=="
|
||||
},
|
||||
"encodeurl": {
|
||||
"version": "1.0.2",
|
||||
|
@ -8870,6 +8883,12 @@
|
|||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
|
||||
},
|
||||
"fsevents": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
||||
"optional": true
|
||||
},
|
||||
"function-bind": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||
|
|
|
@ -2,8 +2,8 @@ import { Assert, AITestClass } from "@microsoft/ai-test-framework";
|
|||
import * as pako from "pako";
|
||||
|
||||
export class AppInsightsCoreSizeCheck extends AITestClass {
|
||||
private readonly MAX_RAW_SIZE = 63;
|
||||
private readonly MAX_BUNDLE_SIZE = 63;
|
||||
private readonly MAX_RAW_SIZE = 64;
|
||||
private readonly MAX_BUNDLE_SIZE = 64;
|
||||
private readonly MAX_RAW_DEFLATE_SIZE = 27;
|
||||
private readonly MAX_BUNDLE_DEFLATE_SIZE = 27;
|
||||
private readonly rawFilePath = "../dist/es5/applicationinsights-core-js.min.js";
|
||||
|
|
|
@ -338,6 +338,49 @@ export class ApplicationInsightsCoreTests extends AITestClass {
|
|||
}
|
||||
});
|
||||
|
||||
this.testCase({
|
||||
name: "Initialization: channels adds and initialize with offline channel with channel config",
|
||||
useFakeTimers: true,
|
||||
test: () => {
|
||||
let offlineChannelPlugin = new TestOfflineChannelPlugin();
|
||||
|
||||
let channelPlugin = new TestChannelPlugin();
|
||||
|
||||
|
||||
const appInsightsCore = new AppInsightsCore();
|
||||
appInsightsCore.initialize(
|
||||
{ instrumentationKey: "testIkey", channels: [[offlineChannelPlugin, channelPlugin]] },
|
||||
[]);
|
||||
this.clock.tick(1);
|
||||
|
||||
const channelQueues = appInsightsCore.getChannels();
|
||||
Assert.equal(2, channelQueues.length, "Total number of channel queues");
|
||||
Assert.equal(offlineChannelPlugin._isInit, true, "offline channel is initialized");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
this.testCase({
|
||||
name: "Initialization: channels adds and initialize with offline channel with extension config",
|
||||
useFakeTimers: true,
|
||||
test: () => {
|
||||
let offlineChannelPlugin = new TestOfflineChannelPlugin();
|
||||
|
||||
let channelPlugin = new TestChannelPlugin();
|
||||
|
||||
|
||||
const appInsightsCore = new AppInsightsCore();
|
||||
appInsightsCore.initialize(
|
||||
{ instrumentationKey: "testIkey", channels: [[channelPlugin]] },
|
||||
[offlineChannelPlugin]);
|
||||
|
||||
const channelQueues = appInsightsCore.getChannels();
|
||||
this.clock.tick(1);
|
||||
Assert.equal(2, channelQueues.length, "Total number of channel queues");
|
||||
Assert.equal(offlineChannelPlugin._isInit, true, "offline channel is initialized");
|
||||
}
|
||||
});
|
||||
|
||||
this.testCase({
|
||||
name: 'ApplicationInsightsCore: track adds required default fields if missing',
|
||||
useFakeTimers: true,
|
||||
|
@ -1183,3 +1226,143 @@ class TrackPlugin implements IPlugin {
|
|||
this._nextPlugin?.processTelemetry(evt);
|
||||
}
|
||||
}
|
||||
|
||||
class TestOfflineChannelPlugin implements IChannelControls {
|
||||
public _nextPlugin: ITelemetryPlugin;
|
||||
public isFlushInvoked = false;
|
||||
public isUnloadInvoked = false;
|
||||
public isTearDownInvoked = false;
|
||||
public isResumeInvoked = false;
|
||||
public isPauseInvoked = false;
|
||||
public version: string = "1.0.33-Beta";
|
||||
|
||||
public processTelemetry;
|
||||
|
||||
public identifier = "OfflineChannel";
|
||||
|
||||
public priority: number = 1000;
|
||||
public events: ITelemetryItem[] = [];
|
||||
|
||||
public _isInit: boolean = false;
|
||||
|
||||
|
||||
constructor() {
|
||||
this.processTelemetry = this._processTelemetry.bind(this);
|
||||
}
|
||||
public pause(): void {
|
||||
this.isPauseInvoked = true;
|
||||
}
|
||||
|
||||
public resume(): void {
|
||||
this.isResumeInvoked = true;
|
||||
}
|
||||
|
||||
public teardown(): void {
|
||||
this.isTearDownInvoked = true;
|
||||
}
|
||||
|
||||
flush(async?: boolean, callBack?: () => void): void {
|
||||
this.isFlushInvoked = true;
|
||||
if (callBack) {
|
||||
callBack();
|
||||
}
|
||||
}
|
||||
|
||||
onunloadFlush(async?: boolean) {
|
||||
this.isUnloadInvoked = true;
|
||||
}
|
||||
|
||||
setNextPlugin(next: ITelemetryPlugin) {
|
||||
this._nextPlugin = next;
|
||||
}
|
||||
|
||||
public initialize = (config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[], pluginChain?: any) => {
|
||||
|
||||
setTimeout(() => {
|
||||
let plugin = core.getPlugin<IChannelControls>("Sender");
|
||||
let channel = plugin && plugin.plugin;
|
||||
this._isInit = channel && channel.isInitialized();
|
||||
}, 0);
|
||||
|
||||
}
|
||||
|
||||
public isInitialized = () => {
|
||||
return this._isInit;
|
||||
|
||||
}
|
||||
|
||||
public _processTelemetry(env: ITelemetryItem) {
|
||||
this.events.push(env);
|
||||
|
||||
// Just calling processTelemetry as this is the original design of the Plugins (as opposed to the newer processNext())
|
||||
this._nextPlugin?.processTelemetry(env);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class TestChannelPlugin implements IChannelControls {
|
||||
public _nextPlugin: ITelemetryPlugin;
|
||||
public isFlushInvoked = false;
|
||||
public isUnloadInvoked = false;
|
||||
public isTearDownInvoked = false;
|
||||
public isResumeInvoked = false;
|
||||
public isPauseInvoked = false;
|
||||
public version: string = "1.0.33-Beta";
|
||||
|
||||
public processTelemetry;
|
||||
|
||||
public identifier = "Sender";
|
||||
|
||||
public priority: number = 1001;
|
||||
public events: ITelemetryItem[] = [];
|
||||
public _isInitialized: boolean = false;
|
||||
|
||||
constructor() {
|
||||
this.processTelemetry = this._processTelemetry.bind(this);
|
||||
}
|
||||
public pause(): void {
|
||||
this.isPauseInvoked = true;
|
||||
}
|
||||
|
||||
public resume(): void {
|
||||
this.isResumeInvoked = true;
|
||||
}
|
||||
|
||||
public teardown(): void {
|
||||
this.isTearDownInvoked = true;
|
||||
}
|
||||
|
||||
flush(async?: boolean, callBack?: () => void): void {
|
||||
this.isFlushInvoked = true;
|
||||
if (callBack) {
|
||||
callBack();
|
||||
}
|
||||
}
|
||||
|
||||
onunloadFlush(async?: boolean) {
|
||||
this.isUnloadInvoked = true;
|
||||
}
|
||||
|
||||
setNextPlugin(next: ITelemetryPlugin) {
|
||||
this._nextPlugin = next;
|
||||
}
|
||||
|
||||
public initialize = (config: IConfiguration) => {
|
||||
this._isInitialized = true
|
||||
}
|
||||
|
||||
|
||||
public isInitialized = () => {
|
||||
return this._isInitialized
|
||||
|
||||
}
|
||||
|
||||
|
||||
public _processTelemetry(env: ITelemetryItem) {
|
||||
this.events.push(env);
|
||||
|
||||
// Just calling processTelemetry as this is the original design of the Plugins (as opposed to the newer processNext())
|
||||
this._nextPlugin?.processTelemetry(env);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -910,7 +910,7 @@ export class AppInsightsCore<CfgType extends IConfiguration = IConfiguration> im
|
|||
arrAppend(cfgExtensions, _extensions);
|
||||
|
||||
let rootCtx = _createTelCtx();
|
||||
|
||||
|
||||
// Initializing the channels first
|
||||
if (_channels && _channels.length > 0) {
|
||||
initializePlugins(rootCtx.createNew(_channels), allExtensions);
|
||||
|
|
Загрузка…
Ссылка в новой задаче