@microsoft/applicationinsights-cfgsync-js 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/browser/es5/ai.cfgsync.0.0.2.cjs.js +3678 -0
  2. package/browser/es5/ai.cfgsync.0.0.2.cjs.js.map +1 -0
  3. package/browser/es5/ai.cfgsync.0.0.2.cjs.min.js +6 -0
  4. package/browser/es5/ai.cfgsync.0.0.2.cjs.min.js.map +1 -0
  5. package/browser/es5/ai.cfgsync.0.0.2.gbl.js +3701 -0
  6. package/browser/es5/ai.cfgsync.0.0.2.gbl.js.map +1 -0
  7. package/browser/es5/ai.cfgsync.0.0.2.gbl.min.js +6 -0
  8. package/browser/es5/ai.cfgsync.0.0.2.gbl.min.js.map +1 -0
  9. package/browser/es5/ai.cfgsync.0.0.2.integrity.json +66 -0
  10. package/browser/es5/ai.cfgsync.0.0.2.js +3705 -0
  11. package/browser/es5/ai.cfgsync.0.0.2.js.map +1 -0
  12. package/browser/es5/ai.cfgsync.0.0.2.min.js +6 -0
  13. package/browser/es5/ai.cfgsync.0.0.2.min.js.map +1 -0
  14. package/browser/es5/ai.cfgsync.0.cjs.js +3678 -0
  15. package/browser/es5/ai.cfgsync.0.cjs.js.map +1 -0
  16. package/browser/es5/ai.cfgsync.0.cjs.min.js +6 -0
  17. package/browser/es5/ai.cfgsync.0.cjs.min.js.map +1 -0
  18. package/browser/es5/ai.cfgsync.0.gbl.js +3701 -0
  19. package/browser/es5/ai.cfgsync.0.gbl.js.map +1 -0
  20. package/browser/es5/ai.cfgsync.0.gbl.min.js +6 -0
  21. package/browser/es5/ai.cfgsync.0.gbl.min.js.map +1 -0
  22. package/browser/es5/ai.cfgsync.0.integrity.json +66 -0
  23. package/browser/es5/ai.cfgsync.0.js +3705 -0
  24. package/browser/es5/ai.cfgsync.0.js.map +1 -0
  25. package/browser/es5/ai.cfgsync.0.min.js +6 -0
  26. package/browser/es5/ai.cfgsync.0.min.js.map +1 -0
  27. package/dist/es5/applicationinsights-cfgsync-js.js +3683 -0
  28. package/dist/es5/applicationinsights-cfgsync-js.js.map +1 -0
  29. package/dist/es5/applicationinsights-cfgsync-js.min.js +6 -0
  30. package/dist/es5/applicationinsights-cfgsync-js.min.js.map +1 -0
  31. package/dist-es5/CfgSyncHelperFuncs.js +170 -0
  32. package/dist-es5/CfgSyncHelperFuncs.js.map +1 -0
  33. package/dist-es5/CfgSyncPlugin.js +385 -0
  34. package/dist-es5/CfgSyncPlugin.js.map +1 -0
  35. package/dist-es5/Interfaces/ICfgSyncCdnConfig.js +6 -0
  36. package/dist-es5/Interfaces/ICfgSyncCdnConfig.js.map +1 -0
  37. package/dist-es5/Interfaces/ICfgSyncConfig.js +6 -0
  38. package/dist-es5/Interfaces/ICfgSyncConfig.js.map +1 -0
  39. package/dist-es5/Interfaces/ICfgSyncPlugin.js +6 -0
  40. package/dist-es5/Interfaces/ICfgSyncPlugin.js.map +1 -0
  41. package/dist-es5/__DynamicConstants.js +18 -0
  42. package/dist-es5/__DynamicConstants.js.map +1 -0
  43. package/dist-es5/applicationinsights-cfgsync-js.js +7 -0
  44. package/dist-es5/applicationinsights-cfgsync-js.js.map +1 -0
  45. package/package.json +64 -0
  46. package/tsconfig.json +28 -0
  47. package/types/applicationinsights-cfgsync-js.d.ts +176 -0
  48. package/types/applicationinsights-cfgsync-js.namespaced.d.ts +172 -0
@@ -0,0 +1,170 @@
1
+ /*
2
+ * Application Insights JavaScript SDK - Properties Plugin, 0.0.2
3
+ * Copyright (c) Microsoft and contributors. All rights reserved.
4
+ */
5
+ import { isNullOrUndefined, isObject, objExtend, objForEachKey, setValueByKey } from "@nevware21/ts-utils";
6
+ import { _DYN_FEATURE_OPT_IN } from "./__DynamicConstants";
7
+ /**
8
+ * Delete a config key in the given cfg, if the config key exists in nonOverrideConfigs and its value is set to true
9
+ * @param cfg cfg to modify
10
+ * @param nonOverrideConfigs nonOverrideConfigs
11
+ * @param curLevel cur config level, starting at 0
12
+ * @param maxLevel max config level
13
+ * @returns new copy of modified configs
14
+ */
15
+ export function replaceByNonOverrideCfg(cfg, nonOverrideConfigs, curLevel, maxLevel) {
16
+ try {
17
+ var exceedMaxLevel = curLevel > maxLevel;
18
+ if (exceedMaxLevel) {
19
+ cfg = null;
20
+ }
21
+ var curCfg_1 = curLevel == 0 ? objExtend({}, cfg) : cfg; // only copy cfg at the begining level
22
+ if (curCfg_1 && nonOverrideConfigs && !exceedMaxLevel) {
23
+ objForEachKey(curCfg_1, function (key) {
24
+ var nonOverrideVal = nonOverrideConfigs[key];
25
+ if (!!nonOverrideVal) {
26
+ if (isObject(curCfg_1[key]) && isObject(nonOverrideVal)) {
27
+ curCfg_1[key] = replaceByNonOverrideCfg(curCfg_1[key], nonOverrideVal, ++curLevel, maxLevel);
28
+ }
29
+ else {
30
+ delete curCfg_1[key];
31
+ }
32
+ }
33
+ });
34
+ }
35
+ return curCfg_1;
36
+ }
37
+ catch (e) {
38
+ // eslint-disable-next-line no-empty
39
+ }
40
+ // if errors happen, do nothing
41
+ return cfg;
42
+ }
43
+ // CDN Mode, value = B (CDN value = B)
44
+ // |--------------------------------------------------------------------------|-----------|
45
+ // | | none | disabled | enabled | forceOn | forceOff |
46
+ // | ------------------ | ----------- | ----------- | ----------- | --------- | --------- |
47
+ // | User Mode, value = A | none | none | disabled | enabled | enabled | disabled |
48
+ // (user Value = A) | disabled | disabled | disabled | disabled | enabled | disabled |
49
+ // | enabled | enabled | disabled | enabled | enabled | disabled |
50
+ // | none(blockCdn) | none | none | none | none | none |
51
+ // | disabled(blockCdn) | disabled | disabled | disabled | disabled | disabled |
52
+ // | enabled(blockCdn) | enabled | enabled | enabled | enabled | enabled |
53
+ // This matrix identifies how feature based overrides are selected (if present)
54
+ // cdn Mode (cdn Value = B)
55
+ // |---------------------------------------------------------------------------|
56
+ // | | none | disabled | enabled | forceOn | forceOff |
57
+ // | ------------------ | ---------| ---------| ---------| ---------|----------|
58
+ // | User Mode | none | A | A | A || B | B || A | B || A |
59
+ // (user Value = A) | disabled | A | A | A | B || A | B || A |
60
+ // | enabled | A | A | A || B | B || A | B || A |
61
+ // | none(blockCdn) | A | A | A | A | A |
62
+ // | disabled(blockCdn) | A | A | A | A | A |
63
+ // | enabled(blockCdn) | A | A | A | A | A |
64
+ // Note:
65
+ // Where the "value" is an object (map) of encoded key/values which will be used to override the real configuration
66
+ // A = either the user supplied enable/disable value (via the `config.featureOptIn[name]`) or if not defined by the user the SDK defaults of the same.
67
+ // B = The enable/disable value obtained from the CDN for the named feature
68
+ // These are evaluated based on the above matrix to either
69
+ // - A (Always the user/sdk value)
70
+ // - B (Always the value from the CDN)
71
+ // - A || B (If A is null or undefined use the value from the CDN (B) otherwise A)
72
+ // - B || A (If B is null or undefined use the user/SDK value otherwise use the value from the CDN)
73
+ //
74
+ // The result of the value may also be null / undefined, which means there are no overrides to apply when the feature is enabled
75
+ var F = "featureOptIn.";
76
+ var M = ".mode";
77
+ var ON = ".onCfg";
78
+ var OFF = ".offCfg";
79
+ export function resolveCdnFeatureCfg(field, cdnCfg, userOptInDetails) {
80
+ var _a;
81
+ // cdn conifg value
82
+ if (!cdnCfg || !cdnCfg.enabled) {
83
+ return null;
84
+ }
85
+ var cdnFt = (cdnCfg[_DYN_FEATURE_OPT_IN /* @min:%2efeatureOptIn */] || {})[field] || { mode: 1 /* CdnFeatureMode.none */ };
86
+ var cdnM = cdnFt.mode;
87
+ var cdnOnV = cdnFt.onCfg;
88
+ var cdnOffV = cdnFt.offCfg;
89
+ var userFt = (userOptInDetails || {})[field] || { mode: 2 /* FeatureOptInMode.disable */ }; // default user mode is disable
90
+ var userM = userFt.mode;
91
+ var userOnV = userFt.onCfg;
92
+ var userOffV = userFt.offCfg;
93
+ var blockCdn = !!userFt.blockCdnCfg;
94
+ var mFld = F + field + M;
95
+ var onFld = F + field + ON;
96
+ var offFld = F + field + OFF;
97
+ var mode = userM;
98
+ var onV = userOnV;
99
+ var offV = userOffV;
100
+ if (!blockCdn) {
101
+ if (cdnM === 4 /* CdnFeatureMode.forceOn */ || cdnM === 5 /* CdnFeatureMode.forceOff */) {
102
+ mode = (cdnM == 4 /* CdnFeatureMode.forceOn */ ? 3 /* FeatureOptInMode.enable */ : 2 /* FeatureOptInMode.disable */);
103
+ onV = cdnOnV || userOnV;
104
+ offV = cdnOffV || userOffV;
105
+ }
106
+ else if (cdnM === 2 /* CdnFeatureMode.disable */ || userM === 2 /* FeatureOptInMode.disable */) {
107
+ mode = 2 /* FeatureOptInMode.disable */;
108
+ onV = userOnV || cdnOnV;
109
+ offV = userOffV || cdnOffV;
110
+ }
111
+ else if (cdnM === 3 /* CdnFeatureMode.enable */) {
112
+ mode = 3 /* FeatureOptInMode.enable */;
113
+ onV = userOnV || cdnOnV;
114
+ offV = userOffV || cdnOffV;
115
+ }
116
+ else if (cdnM === 1 /* CdnFeatureMode.none */ && userM === 1 /* FeatureOptInMode.none */) {
117
+ mode = 1 /* FeatureOptInMode.none */;
118
+ }
119
+ }
120
+ return _a = {},
121
+ _a[mFld] = mode,
122
+ _a[onFld] = onV,
123
+ _a[offFld] = offV,
124
+ _a;
125
+ }
126
+ // helper function to get cdn config with opt-in features
127
+ export function applyCdnfeatureCfg(cdnCfg, core) {
128
+ try {
129
+ if (!cdnCfg || !cdnCfg.enabled) {
130
+ return null;
131
+ }
132
+ if (!cdnCfg[_DYN_FEATURE_OPT_IN /* @min:%2efeatureOptIn */]) {
133
+ return cdnCfg.config;
134
+ }
135
+ var optInMap = cdnCfg[_DYN_FEATURE_OPT_IN /* @min:%2efeatureOptIn */];
136
+ var cdnConfig_1 = cdnCfg.config || {};
137
+ objForEachKey(optInMap, function (key) {
138
+ var featureVal = resolveCdnFeatureCfg(key, cdnCfg, core.config[_DYN_FEATURE_OPT_IN /* @min:%2efeatureOptIn */]);
139
+ if (!isNullOrUndefined(featureVal)) {
140
+ objForEachKey(featureVal, function (config, val) {
141
+ setValueByKey(cdnConfig_1, config, val);
142
+ });
143
+ _overrideCdnCfgByFeature(key, featureVal, cdnConfig_1);
144
+ }
145
+ });
146
+ return cdnConfig_1;
147
+ }
148
+ catch (e) {
149
+ // eslint-disable-next-line no-empty
150
+ }
151
+ return null;
152
+ }
153
+ function _overrideCdnCfgByFeature(field, ftVal, config) {
154
+ var mode = ftVal[F + field + M];
155
+ var val = ftVal[F + field + ON];
156
+ var dVal = ftVal[F + field + OFF];
157
+ var target = null;
158
+ if (mode === 3 /* FeatureOptInMode.enable */) {
159
+ target = val;
160
+ }
161
+ if (mode === 2 /* FeatureOptInMode.disable */) {
162
+ target = dVal;
163
+ }
164
+ if (target) {
165
+ objForEachKey(target, function (key, cfg) {
166
+ setValueByKey(config, key, cfg);
167
+ });
168
+ }
169
+ }
170
+ //# sourceMappingURL=CfgSyncHelperFuncs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CfgSyncHelperFuncs.js.map","sources":["CfgSyncHelperFuncs.js"],"sourcesContent":["import { isNullOrUndefined, isObject, objExtend, objForEachKey, setValueByKey } from \"@nevware21/ts-utils\";\r\nimport { _DYN_FEATURE_OPT_IN } from \"./__DynamicConstants\";\r\n/**\r\n * Delete a config key in the given cfg, if the config key exists in nonOverrideConfigs and its value is set to true\r\n * @param cfg cfg to modify\r\n * @param nonOverrideConfigs nonOverrideConfigs\r\n * @param curLevel cur config level, starting at 0\r\n * @param maxLevel max config level\r\n * @returns new copy of modified configs\r\n */\r\nexport function replaceByNonOverrideCfg(cfg, nonOverrideConfigs, curLevel, maxLevel) {\r\n try {\r\n var exceedMaxLevel = curLevel > maxLevel;\r\n if (exceedMaxLevel) {\r\n cfg = null;\r\n }\r\n var curCfg_1 = curLevel == 0 ? objExtend({}, cfg) : cfg; // only copy cfg at the begining level\r\n if (curCfg_1 && nonOverrideConfigs && !exceedMaxLevel) {\r\n objForEachKey(curCfg_1, function (key) {\r\n var nonOverrideVal = nonOverrideConfigs[key];\r\n if (!!nonOverrideVal) {\r\n if (isObject(curCfg_1[key]) && isObject(nonOverrideVal)) {\r\n curCfg_1[key] = replaceByNonOverrideCfg(curCfg_1[key], nonOverrideVal, ++curLevel, maxLevel);\r\n }\r\n else {\r\n delete curCfg_1[key];\r\n }\r\n }\r\n });\r\n }\r\n return curCfg_1;\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n // if errors happen, do nothing\r\n return cfg;\r\n}\r\n// CDN Mode, value = B (CDN value = B)\r\n// |--------------------------------------------------------------------------|-----------|\r\n// | | none | disabled | enabled | forceOn | forceOff |\r\n// | ------------------ | ----------- | ----------- | ----------- | --------- | --------- |\r\n// | User Mode, value = A | none | none | disabled | enabled | enabled | disabled |\r\n// (user Value = A) | disabled | disabled | disabled | disabled | enabled | disabled |\r\n// | enabled | enabled | disabled | enabled | enabled | disabled |\r\n// | none(blockCdn) | none | none | none | none | none |\r\n// | disabled(blockCdn) | disabled | disabled | disabled | disabled | disabled |\r\n// | enabled(blockCdn) | enabled | enabled | enabled | enabled | enabled |\r\n// This matrix identifies how feature based overrides are selected (if present)\r\n// cdn Mode (cdn Value = B)\r\n// |---------------------------------------------------------------------------|\r\n// | | none | disabled | enabled | forceOn | forceOff |\r\n// | ------------------ | ---------| ---------| ---------| ---------|----------|\r\n// | User Mode | none | A | A | A || B | B || A | B || A |\r\n// (user Value = A) | disabled | A | A | A | B || A | B || A |\r\n// | enabled | A | A | A || B | B || A | B || A |\r\n// | none(blockCdn) | A | A | A | A | A |\r\n// | disabled(blockCdn) | A | A | A | A | A |\r\n// | enabled(blockCdn) | A | A | A | A | A |\r\n// Note:\r\n// Where the \"value\" is an object (map) of encoded key/values which will be used to override the real configuration\r\n// A = either the user supplied enable/disable value (via the `config.featureOptIn[name]`) or if not defined by the user the SDK defaults of the same.\r\n// B = The enable/disable value obtained from the CDN for the named feature\r\n// These are evaluated based on the above matrix to either\r\n// - A (Always the user/sdk value)\r\n// - B (Always the value from the CDN)\r\n// - A || B (If A is null or undefined use the value from the CDN (B) otherwise A)\r\n// - B || A (If B is null or undefined use the user/SDK value otherwise use the value from the CDN)\r\n//\r\n// The result of the value may also be null / undefined, which means there are no overrides to apply when the feature is enabled\r\nvar F = \"featureOptIn.\";\r\nvar M = \".mode\";\r\nvar ON = \".onCfg\";\r\nvar OFF = \".offCfg\";\r\nexport function resolveCdnFeatureCfg(field, cdnCfg, userOptInDetails) {\r\n var _a;\r\n // cdn conifg value\r\n if (!cdnCfg || !cdnCfg.enabled) {\r\n return null;\r\n }\r\n var cdnFt = (cdnCfg[_DYN_FEATURE_OPT_IN /* @min:%2efeatureOptIn */] || {})[field] || { mode: 1 /* CdnFeatureMode.none */ };\r\n var cdnM = cdnFt.mode;\r\n var cdnOnV = cdnFt.onCfg;\r\n var cdnOffV = cdnFt.offCfg;\r\n var userFt = (userOptInDetails || {})[field] || { mode: 2 /* FeatureOptInMode.disable */ }; // default user mode is disable\r\n var userM = userFt.mode;\r\n var userOnV = userFt.onCfg;\r\n var userOffV = userFt.offCfg;\r\n var blockCdn = !!userFt.blockCdnCfg;\r\n var mFld = F + field + M;\r\n var onFld = F + field + ON;\r\n var offFld = F + field + OFF;\r\n var mode = userM;\r\n var onV = userOnV;\r\n var offV = userOffV;\r\n if (!blockCdn) {\r\n if (cdnM === 4 /* CdnFeatureMode.forceOn */ || cdnM === 5 /* CdnFeatureMode.forceOff */) {\r\n mode = (cdnM == 4 /* CdnFeatureMode.forceOn */ ? 3 /* FeatureOptInMode.enable */ : 2 /* FeatureOptInMode.disable */);\r\n onV = cdnOnV || userOnV;\r\n offV = cdnOffV || userOffV;\r\n }\r\n else if (cdnM === 2 /* CdnFeatureMode.disable */ || userM === 2 /* FeatureOptInMode.disable */) {\r\n mode = 2 /* FeatureOptInMode.disable */;\r\n onV = userOnV || cdnOnV;\r\n offV = userOffV || cdnOffV;\r\n }\r\n else if (cdnM === 3 /* CdnFeatureMode.enable */) {\r\n mode = 3 /* FeatureOptInMode.enable */;\r\n onV = userOnV || cdnOnV;\r\n offV = userOffV || cdnOffV;\r\n }\r\n else if (cdnM === 1 /* CdnFeatureMode.none */ && userM === 1 /* FeatureOptInMode.none */) {\r\n mode = 1 /* FeatureOptInMode.none */;\r\n }\r\n }\r\n return _a = {},\r\n _a[mFld] = mode,\r\n _a[onFld] = onV,\r\n _a[offFld] = offV,\r\n _a;\r\n}\r\n// helper function to get cdn config with opt-in features\r\nexport function applyCdnfeatureCfg(cdnCfg, core) {\r\n try {\r\n if (!cdnCfg || !cdnCfg.enabled) {\r\n return null;\r\n }\r\n if (!cdnCfg[_DYN_FEATURE_OPT_IN /* @min:%2efeatureOptIn */]) {\r\n return cdnCfg.config;\r\n }\r\n var optInMap = cdnCfg[_DYN_FEATURE_OPT_IN /* @min:%2efeatureOptIn */];\r\n var cdnConfig_1 = cdnCfg.config || {};\r\n objForEachKey(optInMap, function (key) {\r\n var featureVal = resolveCdnFeatureCfg(key, cdnCfg, core.config[_DYN_FEATURE_OPT_IN /* @min:%2efeatureOptIn */]);\r\n if (!isNullOrUndefined(featureVal)) {\r\n objForEachKey(featureVal, function (config, val) {\r\n setValueByKey(cdnConfig_1, config, val);\r\n });\r\n _overrideCdnCfgByFeature(key, featureVal, cdnConfig_1);\r\n }\r\n });\r\n return cdnConfig_1;\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return null;\r\n}\r\nfunction _overrideCdnCfgByFeature(field, ftVal, config) {\r\n var mode = ftVal[F + field + M];\r\n var val = ftVal[F + field + ON];\r\n var dVal = ftVal[F + field + OFF];\r\n var target = null;\r\n if (mode === 3 /* FeatureOptInMode.enable */) {\r\n target = val;\r\n }\r\n if (mode === 2 /* FeatureOptInMode.disable */) {\r\n target = dVal;\r\n }\r\n if (target) {\r\n objForEachKey(target, function (key, cfg) {\r\n setValueByKey(config, key, cfg);\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=CfgSyncHelperFuncs.js.map"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1,385 @@
1
+ /*
2
+ * Application Insights JavaScript SDK - Properties Plugin, 0.0.2
3
+ * Copyright (c) Microsoft and contributors. All rights reserved.
4
+ */
5
+ /**
6
+ * CfgSyncPlugin.ts
7
+ * @copyright Microsoft 2018
8
+ */
9
+ var _a;
10
+ import { __extendsFn as __extends } from "@microsoft/applicationinsights-shims";
11
+ import dynamicProto from "@microsoft/dynamicproto-js";
12
+ import { BaseTelemetryPlugin, createProcessTelemetryContext, createUniqueNamespace, eventOff, eventOn, getGlobal, getJSON, isFetchSupported, isXhrSupported, mergeEvtNamespace, onConfigChange, sendCustomEvent } from "@microsoft/applicationinsights-core-js";
13
+ import { doAwaitResponse } from "@nevware21/ts-async";
14
+ import { isFunction, isNullOrUndefined, isPlainObject, objDeepFreeze, scheduleTimeout } from "@nevware21/ts-utils";
15
+ import { applyCdnfeatureCfg, replaceByNonOverrideCfg } from "./CfgSyncHelperFuncs";
16
+ import { _DYN_NON_OVERRIDE_CONFIGS, _DYN_ON_CFG_CHANGE_RECEIV0, _DYN_SCHEDULE_FETCH_TIMEO1 } from "./__DynamicConstants";
17
+ var EVENT_NAME = "ai_cfgsync";
18
+ var STR_GET_METHOD = "GET";
19
+ var FETCH_TIMEOUT = 1800000; // 30 minutes
20
+ var udfVal = undefined;
21
+ var defaultNonOverrideCfg = { instrumentationKey: true, connectionString: true, endpointUrl: true };
22
+ var _defaultConfig = objDeepFreeze((_a = {
23
+ syncMode: 1 /* ICfgSyncMode.Broadcast */,
24
+ blkCdnCfg: udfVal,
25
+ customEvtName: udfVal,
26
+ cfgUrl: udfVal,
27
+ overrideSyncFn: udfVal,
28
+ overrideFetchFn: udfVal
29
+ },
30
+ _a[_DYN_ON_CFG_CHANGE_RECEIV0 /* @min:onCfgChangeReceive */] = udfVal,
31
+ _a[_DYN_SCHEDULE_FETCH_TIMEO1 /* @min:scheduleFetchTimeout */] = FETCH_TIMEOUT,
32
+ _a[_DYN_NON_OVERRIDE_CONFIGS /* @min:nonOverrideConfigs */] = defaultNonOverrideCfg,
33
+ _a));
34
+ var CfgSyncPlugin = /** @class */ (function (_super) {
35
+ __extends(CfgSyncPlugin, _super);
36
+ function CfgSyncPlugin() {
37
+ var _this = _super.call(this) || this;
38
+ _this.priority = 198;
39
+ _this.identifier = "AppInsightsCfgSyncPlugin";
40
+ var _extensionConfig;
41
+ var _mainConfig; // throttle config should be wrapped in IConfiguration
42
+ var _evtName;
43
+ var _evtNamespace;
44
+ var _cfgUrl;
45
+ var _timeoutHandle;
46
+ var _receiveChanges;
47
+ var _broadcastChanges;
48
+ var _blkCdnCfg;
49
+ var _fetchTimeout;
50
+ var _retryCnt;
51
+ var _onCfgChangeReceive;
52
+ var _nonOverrideConfigs;
53
+ var _fetchFn;
54
+ var _overrideFetchFn;
55
+ var _overrideSyncFn;
56
+ var _paused = false;
57
+ dynamicProto(CfgSyncPlugin, _this, function (_self, _base) {
58
+ _initDefaults();
59
+ _self.initialize = function (config, core, extensions, pluginChain) {
60
+ _base.initialize(config, core, extensions, pluginChain);
61
+ _evtNamespace = mergeEvtNamespace(createUniqueNamespace(_self.identifier), core.evtNamespace && core.evtNamespace());
62
+ _populateDefaults(config);
63
+ };
64
+ _self.getCfg = function () {
65
+ return _mainConfig;
66
+ };
67
+ _self.pause = function () {
68
+ _paused = true;
69
+ _clearScheduledTimer();
70
+ };
71
+ _self.resume = function () {
72
+ _paused = false;
73
+ _setupTimer();
74
+ };
75
+ // used for V2 to manaully trigger config udpate
76
+ _self.setCfg = function (config) {
77
+ return _setCfg(config);
78
+ };
79
+ _self.sync = function (customDetails) {
80
+ return _sendCfgsyncEvents(customDetails);
81
+ };
82
+ _self.updateEventListenerName = function (eventName) {
83
+ return _updateEventListenerName(eventName);
84
+ };
85
+ _self._doTeardown = function (unloadCtx, unloadState) {
86
+ _eventOff();
87
+ _clearScheduledTimer();
88
+ _initDefaults();
89
+ };
90
+ _self["_getDbgPlgTargets"] = function () {
91
+ return [_broadcastChanges, _receiveChanges, _evtName, _blkCdnCfg];
92
+ };
93
+ function _initDefaults() {
94
+ _mainConfig = null;
95
+ _evtName = null;
96
+ _evtNamespace = null;
97
+ _cfgUrl = null;
98
+ _receiveChanges = null;
99
+ _broadcastChanges = null;
100
+ _nonOverrideConfigs = null;
101
+ _timeoutHandle = null;
102
+ _fetchTimeout = null;
103
+ _retryCnt = null;
104
+ _blkCdnCfg = null;
105
+ _overrideFetchFn = null;
106
+ _overrideSyncFn = null;
107
+ _onCfgChangeReceive = null;
108
+ }
109
+ function _populateDefaults(config) {
110
+ var identifier = _self.identifier;
111
+ var core = _self.core;
112
+ _self._addHook(onConfigChange(config, function () {
113
+ var ctx = createProcessTelemetryContext(null, config, core);
114
+ _extensionConfig = ctx.getExtCfg(identifier, _defaultConfig);
115
+ var preBlkCdn = _blkCdnCfg;
116
+ _blkCdnCfg = !!_extensionConfig.blkCdnCfg;
117
+ // avoid initial call
118
+ if (!isNullOrUndefined(preBlkCdn) && preBlkCdn !== _blkCdnCfg) {
119
+ if (!_blkCdnCfg && _cfgUrl) {
120
+ _fetchFn && _fetchFn(_cfgUrl, _onFetchComplete, _broadcastChanges);
121
+ }
122
+ else {
123
+ _clearScheduledTimer();
124
+ }
125
+ }
126
+ if (isNullOrUndefined(_receiveChanges)) {
127
+ _receiveChanges = _extensionConfig.syncMode === 2 /* ICfgSyncMode.Receive */;
128
+ }
129
+ if (isNullOrUndefined(_broadcastChanges)) {
130
+ _broadcastChanges = _extensionConfig.syncMode === 1 /* ICfgSyncMode.Broadcast */;
131
+ }
132
+ var newEvtName = _extensionConfig.customEvtName || EVENT_NAME;
133
+ if (_evtName !== newEvtName) {
134
+ if (_receiveChanges) {
135
+ _updateEventListenerName(newEvtName);
136
+ }
137
+ else {
138
+ _eventOff();
139
+ _evtName = newEvtName;
140
+ }
141
+ }
142
+ if (isNullOrUndefined(_cfgUrl)) {
143
+ _cfgUrl = _extensionConfig.cfgUrl;
144
+ }
145
+ // if cfgUrl is set, we will ignore core config change
146
+ if (!_cfgUrl) {
147
+ _mainConfig = config;
148
+ if (_broadcastChanges) {
149
+ _sendCfgsyncEvents();
150
+ }
151
+ }
152
+ }));
153
+ _overrideSyncFn = _extensionConfig.overrideSyncFn;
154
+ _overrideFetchFn = _extensionConfig.overrideFetchFn;
155
+ _onCfgChangeReceive = _extensionConfig[_DYN_ON_CFG_CHANGE_RECEIV0 /* @min:%2eonCfgChangeReceive */];
156
+ _nonOverrideConfigs = _extensionConfig[_DYN_NON_OVERRIDE_CONFIGS /* @min:%2enonOverrideConfigs */];
157
+ _fetchTimeout = _extensionConfig[_DYN_SCHEDULE_FETCH_TIMEO1 /* @min:%2escheduleFetchTimeout */];
158
+ _fetchFn = _getFetchFnInterface();
159
+ _retryCnt = 0;
160
+ // NOT support cfgURL change to avoid mutiple fetch calls
161
+ if (_cfgUrl && !_blkCdnCfg) {
162
+ _fetchFn && _fetchFn(_cfgUrl, _onFetchComplete, _broadcastChanges);
163
+ }
164
+ }
165
+ function _setCfg(config, isAutoSync) {
166
+ if (config) {
167
+ _mainConfig = config;
168
+ if (!!isAutoSync && !_paused) {
169
+ return _sendCfgsyncEvents();
170
+ }
171
+ if (_receiveChanges && !_paused) {
172
+ _self.core.updateCfg(config);
173
+ return true;
174
+ }
175
+ }
176
+ return false;
177
+ }
178
+ function _eventOff() {
179
+ try {
180
+ var global_1 = getGlobal();
181
+ if (global_1) {
182
+ eventOff(global_1, null, null, _evtNamespace);
183
+ }
184
+ }
185
+ catch (e) {
186
+ // eslint-disable-next-line no-empty
187
+ }
188
+ }
189
+ function _sendCfgsyncEvents(customDetails) {
190
+ try {
191
+ if (!!_overrideSyncFn && isFunction(_overrideSyncFn)) {
192
+ return _overrideSyncFn(_mainConfig, customDetails);
193
+ }
194
+ return sendCustomEvent(_evtName, _mainConfig, customDetails);
195
+ }
196
+ catch (e) {
197
+ // eslint-disable-next-line no-empty
198
+ }
199
+ return false;
200
+ }
201
+ function _updateEventListenerName(name) {
202
+ try {
203
+ _eventOff();
204
+ if (name) {
205
+ _evtName = name;
206
+ _addEventListener();
207
+ }
208
+ return true;
209
+ }
210
+ catch (e) {
211
+ // eslint-disable-next-line no-empty
212
+ }
213
+ return false;
214
+ }
215
+ function _getFetchFnInterface() {
216
+ var _fetchFn = _overrideFetchFn;
217
+ if (isNullOrUndefined(_fetchFn)) {
218
+ if (isFetchSupported()) {
219
+ _fetchFn = _fetchSender;
220
+ }
221
+ else if (isXhrSupported()) {
222
+ _fetchFn = _xhrSender;
223
+ }
224
+ }
225
+ return _fetchFn;
226
+ }
227
+ function _fetchSender(url, oncomplete, isAutoSync) {
228
+ var global = getGlobal();
229
+ var fetchFn = (global && global.fetch) || null;
230
+ if (url && fetchFn && isFunction(fetchFn)) {
231
+ try {
232
+ var init = {
233
+ method: STR_GET_METHOD
234
+ };
235
+ var request = new Request(url, init);
236
+ doAwaitResponse(fetch(request), function (result) {
237
+ var response = result.value;
238
+ if (!result.rejected) {
239
+ if (response.ok) {
240
+ doAwaitResponse(response.text(), function (res) {
241
+ _doOnComplete(oncomplete, response.status, res.value, isAutoSync);
242
+ });
243
+ }
244
+ else {
245
+ _doOnComplete(oncomplete, response.status, null, isAutoSync);
246
+ }
247
+ }
248
+ else {
249
+ _doOnComplete(oncomplete, 400);
250
+ }
251
+ });
252
+ }
253
+ catch (e) {
254
+ // eslint-disable-next-line no-empty
255
+ }
256
+ }
257
+ }
258
+ function _xhrSender(url, oncomplete, isAutoSync) {
259
+ try {
260
+ var xhr_1 = new XMLHttpRequest();
261
+ xhr_1.open(STR_GET_METHOD, url);
262
+ xhr_1.onreadystatechange = function () {
263
+ if (xhr_1.readyState === XMLHttpRequest.DONE) {
264
+ _doOnComplete(oncomplete, xhr_1.status, xhr_1.responseText, isAutoSync);
265
+ }
266
+ };
267
+ xhr_1.onerror = function () {
268
+ _doOnComplete(oncomplete, 400);
269
+ };
270
+ xhr_1.ontimeout = function () {
271
+ _doOnComplete(oncomplete, 400);
272
+ };
273
+ xhr_1.send();
274
+ }
275
+ catch (e) {
276
+ // eslint-disable-next-line no-empty
277
+ }
278
+ }
279
+ function _onFetchComplete(status, response, isAutoSync) {
280
+ try {
281
+ if (status >= 200 && status < 400 && response) {
282
+ _retryCnt = 0; // any successful response will reset retry count to 0
283
+ var JSON_1 = getJSON();
284
+ if (JSON_1) {
285
+ var cdnCfg = JSON_1.parse(response); //comments are not allowed
286
+ var cfg = applyCdnfeatureCfg(cdnCfg, _self.core);
287
+ cfg && _setCfg(cfg, isAutoSync);
288
+ }
289
+ }
290
+ else {
291
+ _retryCnt++;
292
+ }
293
+ if (_retryCnt < 3) {
294
+ _setupTimer();
295
+ }
296
+ }
297
+ catch (e) {
298
+ // eslint-disable-next-line no-empty
299
+ }
300
+ }
301
+ function _doOnComplete(oncomplete, status, response, isAutoSync) {
302
+ try {
303
+ oncomplete(status, response, isAutoSync);
304
+ }
305
+ catch (e) {
306
+ // eslint-disable-next-line no-empty
307
+ }
308
+ }
309
+ function _addEventListener() {
310
+ if (_receiveChanges) {
311
+ var global_2 = getGlobal();
312
+ if (global_2) {
313
+ try {
314
+ eventOn(global_2, _evtName, function (event) {
315
+ // TODO: add more validation here
316
+ // may include a "name" or some other features to check
317
+ var cfgEvent = event && event.detail;
318
+ if (_onCfgChangeReceive && cfgEvent) {
319
+ _onCfgChangeReceive(cfgEvent);
320
+ }
321
+ else {
322
+ var cfg = cfgEvent && cfgEvent.cfg;
323
+ var newCfg = cfg && isPlainObject(cfg) && _replaceTartgetByKeys(cfg);
324
+ newCfg && _setCfg(newCfg);
325
+ }
326
+ }, _evtNamespace, true);
327
+ }
328
+ catch (e) {
329
+ // eslint-disable-next-line no-empty
330
+ }
331
+ }
332
+ }
333
+ }
334
+ // 4 levels
335
+ function _replaceTartgetByKeys(cfg, level) {
336
+ var _cfg = null;
337
+ try {
338
+ if (cfg) {
339
+ _cfg = replaceByNonOverrideCfg(cfg, _nonOverrideConfigs, 0, 5);
340
+ }
341
+ }
342
+ catch (e) {
343
+ // eslint-disable-next-line no-empty
344
+ }
345
+ return _cfg;
346
+ }
347
+ /**
348
+ * Sets up the timer which triggers fetching cdn every 30mins after inital call
349
+ */
350
+ function _setupTimer() {
351
+ if (!_timeoutHandle && _fetchTimeout) {
352
+ _timeoutHandle = scheduleTimeout(function () {
353
+ _timeoutHandle = null;
354
+ _fetchFn(_cfgUrl, _onFetchComplete, _broadcastChanges);
355
+ }, _fetchTimeout);
356
+ _timeoutHandle.unref();
357
+ }
358
+ }
359
+ function _clearScheduledTimer() {
360
+ _timeoutHandle && _timeoutHandle.cancel();
361
+ _timeoutHandle = null;
362
+ _retryCnt = 0;
363
+ }
364
+ _self.processTelemetry = function (env, itemCtx) {
365
+ _self.processNext(env, itemCtx);
366
+ };
367
+ });
368
+ return _this;
369
+ }
370
+ // Removed Stub for CfgSyncPlugin.prototype.initialize.
371
+ // Removed Stub for CfgSyncPlugin.prototype.getCfg.
372
+ // Removed Stub for CfgSyncPlugin.prototype.setCfg.
373
+ // Removed Stub for CfgSyncPlugin.prototype.sync.
374
+ // Removed Stub for CfgSyncPlugin.prototype.updateEventListenerName.
375
+ // Removed Stub for CfgSyncPlugin.prototype.pause.
376
+ // Removed Stub for CfgSyncPlugin.prototype.resume.
377
+ //// Removed Stub for CfgSyncPlugin.prototype.processTelemetry.
378
+ // This is a workaround for an IE bug when using dynamicProto() with classes that don't have any
379
+ // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.
380
+ CfgSyncPlugin.__ieDyn=1;
381
+
382
+ return CfgSyncPlugin;
383
+ }(BaseTelemetryPlugin));
384
+ export { CfgSyncPlugin };
385
+ //# sourceMappingURL=CfgSyncPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CfgSyncPlugin.js.map","sources":["CfgSyncPlugin.js"],"sourcesContent":["/**\r\n* CfgSyncPlugin.ts\r\n* @copyright Microsoft 2018\r\n*/\r\nvar _a;\r\nimport { __extends } from \"tslib\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { BaseTelemetryPlugin, createProcessTelemetryContext, createUniqueNamespace, eventOff, eventOn, getGlobal, getJSON, isFetchSupported, isXhrSupported, mergeEvtNamespace, onConfigChange, sendCustomEvent } from \"@microsoft/applicationinsights-core-js\";\r\nimport { doAwaitResponse } from \"@nevware21/ts-async\";\r\nimport { isFunction, isNullOrUndefined, isPlainObject, objDeepFreeze, scheduleTimeout } from \"@nevware21/ts-utils\";\r\nimport { applyCdnfeatureCfg, replaceByNonOverrideCfg } from \"./CfgSyncHelperFuncs\";\r\nimport { _DYN_NON_OVERRIDE_CONFIGS, _DYN_ON_CFG_CHANGE_RECEIV0, _DYN_SCHEDULE_FETCH_TIMEO1 } from \"./__DynamicConstants\";\r\nvar EVENT_NAME = \"ai_cfgsync\";\r\nvar STR_GET_METHOD = \"GET\";\r\nvar FETCH_TIMEOUT = 1800000; // 30 minutes\r\nvar udfVal = undefined;\r\nvar defaultNonOverrideCfg = { instrumentationKey: true, connectionString: true, endpointUrl: true };\r\nvar _defaultConfig = objDeepFreeze((_a = {\r\n syncMode: 1 /* ICfgSyncMode.Broadcast */,\r\n blkCdnCfg: udfVal,\r\n customEvtName: udfVal,\r\n cfgUrl: udfVal,\r\n overrideSyncFn: udfVal,\r\n overrideFetchFn: udfVal\r\n },\r\n _a[_DYN_ON_CFG_CHANGE_RECEIV0 /* @min:onCfgChangeReceive */] = udfVal,\r\n _a[_DYN_SCHEDULE_FETCH_TIMEO1 /* @min:scheduleFetchTimeout */] = FETCH_TIMEOUT,\r\n _a[_DYN_NON_OVERRIDE_CONFIGS /* @min:nonOverrideConfigs */] = defaultNonOverrideCfg,\r\n _a));\r\nvar CfgSyncPlugin = /** @class */ (function (_super) {\r\n __extends(CfgSyncPlugin, _super);\r\n function CfgSyncPlugin() {\r\n var _this = _super.call(this) || this;\r\n _this.priority = 198;\r\n _this.identifier = \"AppInsightsCfgSyncPlugin\";\r\n var _extensionConfig;\r\n var _mainConfig; // throttle config should be wrapped in IConfiguration\r\n var _evtName;\r\n var _evtNamespace;\r\n var _cfgUrl;\r\n var _timeoutHandle;\r\n var _receiveChanges;\r\n var _broadcastChanges;\r\n var _blkCdnCfg;\r\n var _fetchTimeout;\r\n var _retryCnt;\r\n var _onCfgChangeReceive;\r\n var _nonOverrideConfigs;\r\n var _fetchFn;\r\n var _overrideFetchFn;\r\n var _overrideSyncFn;\r\n var _paused = false;\r\n dynamicProto(CfgSyncPlugin, _this, function (_self, _base) {\r\n _initDefaults();\r\n _self.initialize = function (config, core, extensions, pluginChain) {\r\n _base.initialize(config, core, extensions, pluginChain);\r\n _evtNamespace = mergeEvtNamespace(createUniqueNamespace(_self.identifier), core.evtNamespace && core.evtNamespace());\r\n _populateDefaults(config);\r\n };\r\n _self.getCfg = function () {\r\n return _mainConfig;\r\n };\r\n _self.pause = function () {\r\n _paused = true;\r\n _clearScheduledTimer();\r\n };\r\n _self.resume = function () {\r\n _paused = false;\r\n _setupTimer();\r\n };\r\n // used for V2 to manaully trigger config udpate\r\n _self.setCfg = function (config) {\r\n return _setCfg(config);\r\n };\r\n _self.sync = function (customDetails) {\r\n return _sendCfgsyncEvents(customDetails);\r\n };\r\n _self.updateEventListenerName = function (eventName) {\r\n return _updateEventListenerName(eventName);\r\n };\r\n _self._doTeardown = function (unloadCtx, unloadState) {\r\n _eventOff();\r\n _clearScheduledTimer();\r\n _initDefaults();\r\n };\r\n _self[\"_getDbgPlgTargets\"] = function () {\r\n return [_broadcastChanges, _receiveChanges, _evtName, _blkCdnCfg];\r\n };\r\n function _initDefaults() {\r\n _mainConfig = null;\r\n _evtName = null;\r\n _evtNamespace = null;\r\n _cfgUrl = null;\r\n _receiveChanges = null;\r\n _broadcastChanges = null;\r\n _nonOverrideConfigs = null;\r\n _timeoutHandle = null;\r\n _fetchTimeout = null;\r\n _retryCnt = null;\r\n _blkCdnCfg = null;\r\n _overrideFetchFn = null;\r\n _overrideSyncFn = null;\r\n _onCfgChangeReceive = null;\r\n }\r\n function _populateDefaults(config) {\r\n var identifier = _self.identifier;\r\n var core = _self.core;\r\n _self._addHook(onConfigChange(config, function () {\r\n var ctx = createProcessTelemetryContext(null, config, core);\r\n _extensionConfig = ctx.getExtCfg(identifier, _defaultConfig);\r\n var preBlkCdn = _blkCdnCfg;\r\n _blkCdnCfg = !!_extensionConfig.blkCdnCfg;\r\n // avoid initial call\r\n if (!isNullOrUndefined(preBlkCdn) && preBlkCdn !== _blkCdnCfg) {\r\n if (!_blkCdnCfg && _cfgUrl) {\r\n _fetchFn && _fetchFn(_cfgUrl, _onFetchComplete, _broadcastChanges);\r\n }\r\n else {\r\n _clearScheduledTimer();\r\n }\r\n }\r\n if (isNullOrUndefined(_receiveChanges)) {\r\n _receiveChanges = _extensionConfig.syncMode === 2 /* ICfgSyncMode.Receive */;\r\n }\r\n if (isNullOrUndefined(_broadcastChanges)) {\r\n _broadcastChanges = _extensionConfig.syncMode === 1 /* ICfgSyncMode.Broadcast */;\r\n }\r\n var newEvtName = _extensionConfig.customEvtName || EVENT_NAME;\r\n if (_evtName !== newEvtName) {\r\n if (_receiveChanges) {\r\n _updateEventListenerName(newEvtName);\r\n }\r\n else {\r\n _eventOff();\r\n _evtName = newEvtName;\r\n }\r\n }\r\n if (isNullOrUndefined(_cfgUrl)) {\r\n _cfgUrl = _extensionConfig.cfgUrl;\r\n }\r\n // if cfgUrl is set, we will ignore core config change\r\n if (!_cfgUrl) {\r\n _mainConfig = config;\r\n if (_broadcastChanges) {\r\n _sendCfgsyncEvents();\r\n }\r\n }\r\n }));\r\n _overrideSyncFn = _extensionConfig.overrideSyncFn;\r\n _overrideFetchFn = _extensionConfig.overrideFetchFn;\r\n _onCfgChangeReceive = _extensionConfig[_DYN_ON_CFG_CHANGE_RECEIV0 /* @min:%2eonCfgChangeReceive */];\r\n _nonOverrideConfigs = _extensionConfig[_DYN_NON_OVERRIDE_CONFIGS /* @min:%2enonOverrideConfigs */];\r\n _fetchTimeout = _extensionConfig[_DYN_SCHEDULE_FETCH_TIMEO1 /* @min:%2escheduleFetchTimeout */];\r\n _fetchFn = _getFetchFnInterface();\r\n _retryCnt = 0;\r\n // NOT support cfgURL change to avoid mutiple fetch calls\r\n if (_cfgUrl && !_blkCdnCfg) {\r\n _fetchFn && _fetchFn(_cfgUrl, _onFetchComplete, _broadcastChanges);\r\n }\r\n }\r\n function _setCfg(config, isAutoSync) {\r\n if (config) {\r\n _mainConfig = config;\r\n if (!!isAutoSync && !_paused) {\r\n return _sendCfgsyncEvents();\r\n }\r\n if (_receiveChanges && !_paused) {\r\n _self.core.updateCfg(config);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n function _eventOff() {\r\n try {\r\n var global_1 = getGlobal();\r\n if (global_1) {\r\n eventOff(global_1, null, null, _evtNamespace);\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }\r\n function _sendCfgsyncEvents(customDetails) {\r\n try {\r\n if (!!_overrideSyncFn && isFunction(_overrideSyncFn)) {\r\n return _overrideSyncFn(_mainConfig, customDetails);\r\n }\r\n return sendCustomEvent(_evtName, _mainConfig, customDetails);\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return false;\r\n }\r\n function _updateEventListenerName(name) {\r\n try {\r\n _eventOff();\r\n if (name) {\r\n _evtName = name;\r\n _addEventListener();\r\n }\r\n return true;\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return false;\r\n }\r\n function _getFetchFnInterface() {\r\n var _fetchFn = _overrideFetchFn;\r\n if (isNullOrUndefined(_fetchFn)) {\r\n if (isFetchSupported()) {\r\n _fetchFn = _fetchSender;\r\n }\r\n else if (isXhrSupported()) {\r\n _fetchFn = _xhrSender;\r\n }\r\n }\r\n return _fetchFn;\r\n }\r\n function _fetchSender(url, oncomplete, isAutoSync) {\r\n var global = getGlobal();\r\n var fetchFn = (global && global.fetch) || null;\r\n if (url && fetchFn && isFunction(fetchFn)) {\r\n try {\r\n var init = {\r\n method: STR_GET_METHOD\r\n };\r\n var request = new Request(url, init);\r\n doAwaitResponse(fetch(request), function (result) {\r\n var response = result.value;\r\n if (!result.rejected) {\r\n if (response.ok) {\r\n doAwaitResponse(response.text(), function (res) {\r\n _doOnComplete(oncomplete, response.status, res.value, isAutoSync);\r\n });\r\n }\r\n else {\r\n _doOnComplete(oncomplete, response.status, null, isAutoSync);\r\n }\r\n }\r\n else {\r\n _doOnComplete(oncomplete, 400);\r\n }\r\n });\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }\r\n }\r\n function _xhrSender(url, oncomplete, isAutoSync) {\r\n try {\r\n var xhr_1 = new XMLHttpRequest();\r\n xhr_1.open(STR_GET_METHOD, url);\r\n xhr_1.onreadystatechange = function () {\r\n if (xhr_1.readyState === XMLHttpRequest.DONE) {\r\n _doOnComplete(oncomplete, xhr_1.status, xhr_1.responseText, isAutoSync);\r\n }\r\n };\r\n xhr_1.onerror = function () {\r\n _doOnComplete(oncomplete, 400);\r\n };\r\n xhr_1.ontimeout = function () {\r\n _doOnComplete(oncomplete, 400);\r\n };\r\n xhr_1.send();\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }\r\n function _onFetchComplete(status, response, isAutoSync) {\r\n try {\r\n if (status >= 200 && status < 400 && response) {\r\n _retryCnt = 0; // any successful response will reset retry count to 0\r\n var JSON_1 = getJSON();\r\n if (JSON_1) {\r\n var cdnCfg = JSON_1.parse(response); //comments are not allowed\r\n var cfg = applyCdnfeatureCfg(cdnCfg, _self.core);\r\n cfg && _setCfg(cfg, isAutoSync);\r\n }\r\n }\r\n else {\r\n _retryCnt++;\r\n }\r\n if (_retryCnt < 3) {\r\n _setupTimer();\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }\r\n function _doOnComplete(oncomplete, status, response, isAutoSync) {\r\n try {\r\n oncomplete(status, response, isAutoSync);\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }\r\n function _addEventListener() {\r\n if (_receiveChanges) {\r\n var global_2 = getGlobal();\r\n if (global_2) {\r\n try {\r\n eventOn(global_2, _evtName, function (event) {\r\n // TODO: add more validation here\r\n // may include a \"name\" or some other features to check\r\n var cfgEvent = event && event.detail;\r\n if (_onCfgChangeReceive && cfgEvent) {\r\n _onCfgChangeReceive(cfgEvent);\r\n }\r\n else {\r\n var cfg = cfgEvent && cfgEvent.cfg;\r\n var newCfg = cfg && isPlainObject(cfg) && _replaceTartgetByKeys(cfg);\r\n newCfg && _setCfg(newCfg);\r\n }\r\n }, _evtNamespace, true);\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }\r\n }\r\n }\r\n // 4 levels\r\n function _replaceTartgetByKeys(cfg, level) {\r\n var _cfg = null;\r\n try {\r\n if (cfg) {\r\n _cfg = replaceByNonOverrideCfg(cfg, _nonOverrideConfigs, 0, 5);\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return _cfg;\r\n }\r\n /**\r\n * Sets up the timer which triggers fetching cdn every 30mins after inital call\r\n */\r\n function _setupTimer() {\r\n if (!_timeoutHandle && _fetchTimeout) {\r\n _timeoutHandle = scheduleTimeout(function () {\r\n _timeoutHandle = null;\r\n _fetchFn(_cfgUrl, _onFetchComplete, _broadcastChanges);\r\n }, _fetchTimeout);\r\n _timeoutHandle.unref();\r\n }\r\n }\r\n function _clearScheduledTimer() {\r\n _timeoutHandle && _timeoutHandle.cancel();\r\n _timeoutHandle = null;\r\n _retryCnt = 0;\r\n }\r\n _self.processTelemetry = function (env, itemCtx) {\r\n _self.processNext(env, itemCtx);\r\n };\r\n });\r\n return _this;\r\n }\r\n CfgSyncPlugin.prototype.initialize = function (config, core, extensions, pluginChain) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Get current configs of current instance.\r\n * @param config current configs\r\n */\r\n CfgSyncPlugin.prototype.getCfg = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n /**\r\n * Manually set configs of current instance.\r\n * @param config new configs\r\n */\r\n CfgSyncPlugin.prototype.setCfg = function (config) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n /**\r\n * Manually broadcast configs of current instance to all other instances.\r\n * @param customDetails additional details should also be sent out to other instances\r\n */\r\n CfgSyncPlugin.prototype.sync = function (customDetails) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n /**\r\n * Manually update event name.\r\n * If current instance is the main instance, then following config changes will be sent out under this new event name.\r\n * If current instance is listener instances, it will listen to event details under this new name.\r\n * @param eventName new event name\r\n */\r\n CfgSyncPlugin.prototype.updateEventListenerName = function (eventName) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n /**\r\n * Pause the sending/receiving of events\r\n */\r\n CfgSyncPlugin.prototype.pause = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Resume the sending/receiving of events\r\n */\r\n CfgSyncPlugin.prototype.resume = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n // /**\r\n // * Add Part A fields to the event\r\n // * @param event - The event that needs to be processed\r\n // */\r\n CfgSyncPlugin.prototype.processTelemetry = function (event, itemCtx) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n return CfgSyncPlugin;\r\n}(BaseTelemetryPlugin));\r\nexport { CfgSyncPlugin };\r\n//# sourceMappingURL=CfgSyncPlugin.js.map"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA,gFAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;mEAuDM,CAAC;;;;;yBACkB;AACzB;AACA;AACA"}
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Application Insights JavaScript SDK - Properties Plugin, 0.0.2
3
+ * Copyright (c) Microsoft and contributors. All rights reserved.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=ICfgSyncCdnConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICfgSyncCdnConfig.js.map","sources":["ICfgSyncCdnConfig.js"],"sourcesContent":["export {};\r\n//# sourceMappingURL=ICfgSyncCdnConfig.js.map"],"names":[],"mappings":";;;;AAAA;AACA"}
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Application Insights JavaScript SDK - Properties Plugin, 0.0.2
3
+ * Copyright (c) Microsoft and contributors. All rights reserved.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=ICfgSyncConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICfgSyncConfig.js.map","sources":["ICfgSyncConfig.js"],"sourcesContent":["export {};\r\n//# sourceMappingURL=ICfgSyncConfig.js.map"],"names":[],"mappings":";;;;AAAA;AACA"}
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Application Insights JavaScript SDK - Properties Plugin, 0.0.2
3
+ * Copyright (c) Microsoft and contributors. All rights reserved.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=ICfgSyncPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICfgSyncPlugin.js.map","sources":["ICfgSyncPlugin.js"],"sourcesContent":["export {};\r\n//# sourceMappingURL=ICfgSyncPlugin.js.map"],"names":[],"mappings":";;;;AAAA;AACA"}