@microsoft/applicationinsights-offlinechannel-js 0.3.5-nightly3.2411-11 → 0.3.5-nightly3.2411-13
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.
- package/dist/es5/applicationinsights-offlinechannel-js.js +3 -3
- package/dist/es5/applicationinsights-offlinechannel-js.js.map +1 -1
- package/dist/es5/applicationinsights-offlinechannel-js.min.js +2 -2
- package/dist/es5/applicationinsights-offlinechannel-js.min.js.map +1 -1
- package/dist-es5/Helpers/Utils.js +4 -4
- package/dist-es5/Helpers/Utils.js.map +1 -1
- package/dist-es5/InMemoryBatch.js +1 -1
- package/dist-es5/Interfaces/IInMemoryBatch.js +1 -1
- package/dist-es5/Interfaces/IOfflineBatch.js +1 -1
- package/dist-es5/Interfaces/IOfflineIndexDb.js +1 -1
- package/dist-es5/Interfaces/IOfflineProvider.js +1 -1
- package/dist-es5/Interfaces/ISender.js +1 -1
- package/dist-es5/OfflineBatchHandler.js +1 -1
- package/dist-es5/OfflineChannel.js +2 -2
- package/dist-es5/OfflineChannel.js.map +1 -1
- package/dist-es5/PayloadHelper.js +1 -1
- package/dist-es5/Providers/IndexDbHelper.js +1 -1
- package/dist-es5/Providers/IndexDbProvider.js +1 -1
- package/dist-es5/Providers/WebStorageProvider.js +1 -1
- package/dist-es5/Sender.js +1 -1
- package/dist-es5/__DynamicConstants.js +1 -1
- package/dist-es5/applicationinsights-offlinechannel-js.js +1 -1
- package/package.json +3 -3
- package/types/applicationinsights-offlinechannel-js.d.ts +4 -4
- package/types/applicationinsights-offlinechannel-js.namespaced.d.ts +9 -9
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Offline Channel, 0.3.5-nightly3.2411-
|
|
2
|
+
* Application Insights JavaScript SDK - Offline Channel, 0.3.5-nightly3.2411-13
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -11,7 +11,7 @@ import { _DYN_CHAR_AT, _DYN_CHAR_CODE_AT, _DYN_DATA, _DYN_FROM_CHAR_CODE, _DYN_G
|
|
|
11
11
|
/**
|
|
12
12
|
* Checks if the value is a valid EventPersistence.
|
|
13
13
|
* @param {enum} value - The value that needs to be checked.
|
|
14
|
-
* @
|
|
14
|
+
* @returns {boolean} True if the value is in EventPersistence, false otherwise.
|
|
15
15
|
*/
|
|
16
16
|
export function isValidPersistenceLevel(value) {
|
|
17
17
|
return (isNumber(value) && value >= 0 /* eLoggingSeverity.DISABLED */ && value <= EventPersistence[_DYN__CRITICAL /* @min:%2eCritical */]);
|
|
@@ -58,7 +58,7 @@ var _base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
|
|
|
58
58
|
*
|
|
59
59
|
* @param data the Uint8Array or string to encode.
|
|
60
60
|
*
|
|
61
|
-
* @
|
|
61
|
+
* @returns the base64-encoded output string.
|
|
62
62
|
*/
|
|
63
63
|
export function base64Encode(data) {
|
|
64
64
|
var line = "";
|
|
@@ -94,7 +94,7 @@ export function base64Encode(data) {
|
|
|
94
94
|
/**
|
|
95
95
|
* Base64-decodes an encoded string and transforms it back to a Uint8Array.
|
|
96
96
|
* @param input the encoded string to decode
|
|
97
|
-
* @
|
|
97
|
+
* @returns Uint8Array
|
|
98
98
|
*/
|
|
99
99
|
export function base64Decode(input) {
|
|
100
100
|
var output = "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js.map","sources":["Utils.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { EventPersistence } from \"@microsoft/applicationinsights-common\";\r\nimport { generateW3CId } from \"@microsoft/applicationinsights-core-js\";\r\nimport { isNumber, isString, objKeys, strSubstr } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CHAR_AT, _DYN_CHAR_CODE_AT, _DYN_DATA, _DYN_FROM_CHAR_CODE, _DYN_GET_TIME, _DYN_INDEX_OF, _DYN_LENGTH, _DYN_PERSISTENCE, _DYN_SPLIT, _DYN_TO_STRING, _DYN__CRITICAL, _DYN__NORMAL } from \"../__DynamicConstants\";\r\n/**\r\n* Checks if the value is a valid EventPersistence.\r\n* @param {enum} value - The value that needs to be checked.\r\n* @return {boolean} True if the value is in EventPersistence, false otherwise.\r\n*/\r\nexport function isValidPersistenceLevel(value) {\r\n return (isNumber(value) && value >= 0 /* eLoggingSeverity.DISABLED */ && value <= EventPersistence[_DYN__CRITICAL /* @min:%2eCritical */]);\r\n}\r\n// Endpoint schema\r\n// <prefix>.<suffix>\r\n//Prefix: Defines a service.\r\n//Suffix: Defines the common domain name.\r\n/**\r\n * Get domian from an endpoint url.\r\n * for example, https://test.com?auth=true, will return test.com\r\n * @param endpoint endpoint url\r\n * @returns domain string\r\n */\r\nexport function getEndpointDomain(endpoint) {\r\n try {\r\n var url = endpoint.replace(/^https?:\\/\\/|^www\\./, \"\");\r\n url = url.replace(/\\?/, \"/\");\r\n var arr = url[_DYN_SPLIT /* @min:%2esplit */](\"/\");\r\n if (arr && arr[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n return arr[0];\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n // if we can't get domain, entire endpoint will be used\r\n return endpoint;\r\n}\r\n/**\r\n * If current value is equal or greater than zero.\r\n * @param value number\r\n * @returns boolean\r\n */\r\nexport function isGreaterThanZero(value) {\r\n return value >= 0;\r\n}\r\n//Base64 is a binary encoding rather than a text encoding,\r\n// it were added to the web platform before it supported binary data types.\r\n// As a result, the two functions use strings to represent binary data\r\nvar _base64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n/**\r\n * Base64-encodes a Uint8Array.\r\n *\r\n * @param data the Uint8Array or string to encode.\r\n *\r\n * @return the base64-encoded output string.\r\n */\r\nexport function base64Encode(data) {\r\n var line = \"\";\r\n var input = \"\";\r\n if (isString(data)) {\r\n input = data;\r\n }\r\n else {\r\n input = data[_DYN_TO_STRING /* @min:%2etoString */]();\r\n }\r\n var output = \"\";\r\n // tslint:disable-next-line:one-variable-per-declaration\r\n var chr1, chr2, chr3;\r\n var lp = 0;\r\n while (lp < input[_DYN_LENGTH /* @min:%2elength */]) {\r\n chr1 = input[_DYN_CHAR_CODE_AT /* @min:%2echarCodeAt */](lp++);\r\n chr2 = input[_DYN_CHAR_CODE_AT /* @min:%2echarCodeAt */](lp++);\r\n chr3 = input[_DYN_CHAR_CODE_AT /* @min:%2echarCodeAt */](lp++);\r\n // encode 4 character group\r\n line += _base64[_DYN_CHAR_AT /* @min:%2echarAt */](chr1 >> 2);\r\n line += _base64[_DYN_CHAR_AT /* @min:%2echarAt */](((chr1 & 3) << 4) | (chr2 >> 4));\r\n if (isNaN(chr2)) {\r\n line += \"==\";\r\n }\r\n else {\r\n line += _base64[_DYN_CHAR_AT /* @min:%2echarAt */](((chr2 & 15) << 2) | (chr3 >> 6));\r\n line += isNaN(chr3) ? \"=\" : _base64[_DYN_CHAR_AT /* @min:%2echarAt */](chr3 & 63);\r\n }\r\n }\r\n output += line;\r\n return output;\r\n}\r\n/**\r\n * Base64-decodes an encoded string and transforms it back to a Uint8Array.\r\n * @param input the encoded string to decode\r\n * @return Uint8Array\r\n */\r\nexport function base64Decode(input) {\r\n var output = \"\";\r\n var chr1, chr2, chr3;\r\n var enc1, enc2, enc3, enc4;\r\n var i = 0;\r\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\r\n while (i < input[_DYN_LENGTH /* @min:%2elength */]) {\r\n enc1 = _base64[_DYN_INDEX_OF /* @min:%2eindexOf */](input[_DYN_CHAR_AT /* @min:%2echarAt */](i++));\r\n enc2 = _base64[_DYN_INDEX_OF /* @min:%2eindexOf */](input[_DYN_CHAR_AT /* @min:%2echarAt */](i++));\r\n enc3 = _base64[_DYN_INDEX_OF /* @min:%2eindexOf */](input[_DYN_CHAR_AT /* @min:%2echarAt */](i++));\r\n enc4 = _base64[_DYN_INDEX_OF /* @min:%2eindexOf */](input[_DYN_CHAR_AT /* @min:%2echarAt */](i++));\r\n chr1 = (enc1 << 2) | (enc2 >> 4);\r\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n chr3 = ((enc3 & 3) << 6) | enc4;\r\n output = output + String[_DYN_FROM_CHAR_CODE /* @min:%2efromCharCode */](chr1);\r\n if (enc3 != 64) {\r\n output = output + String[_DYN_FROM_CHAR_CODE /* @min:%2efromCharCode */](chr2);\r\n }\r\n if (enc4 != 64) {\r\n output = output + String[_DYN_FROM_CHAR_CODE /* @min:%2efromCharCode */](chr3);\r\n }\r\n }\r\n var arr = output[_DYN_SPLIT /* @min:%2esplit */](\",\").map(function (c) { return Number(c); });\r\n return new Uint8Array(arr);\r\n}\r\n/**\r\n * Get number value of current time and append a random float number.\r\n * For example, if current time value is 12345678, so \"12345678.randomfl\" will be returned\r\n * @returns time id string\r\n */\r\nexport function getTimeId() {\r\n var time = (new Date())[_DYN_GET_TIME /* @min:%2egetTime */]();\r\n // append random digits to avoid same timestamp value\r\n var random = strSubstr(generateW3CId(), 0, 8);\r\n // function to create spanid();\r\n return time + \".\" + random;\r\n}\r\n/**\r\n * Get time value from a time id that is generated from getTimeId() function.\r\n * For example, if time id is \"12345678.randomfl\", 12345678 will be returned\r\n * @param id time id string\r\n * @returns time value number\r\n */\r\nexport function getTimeFromId(id) {\r\n try {\r\n var regex = new RegExp(/\\d+\\./g);\r\n if (id && isString(id) && regex.test(id)) {\r\n var arr = id[_DYN_SPLIT /* @min:%2esplit */](\".\");\r\n return parseInt(arr[0]);\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return 0;\r\n}\r\n/**\r\n * Get persistence level from a telemetry item.\r\n * Persistence level will be get from root, baseData or data in order.\r\n * For example, if persistence level is set both in root and baseData, the root one will be returned.\r\n * If no valid persistence level defined, normal level will be returned.\r\n * @param item telemetry item\r\n * @returns persistent level\r\n */\r\nexport function getPersistence(item) {\r\n var rlt = EventPersistence[_DYN__NORMAL /* @min:%2eNormal */];\r\n // if item is null, return normal level\r\n if (!item) {\r\n return rlt;\r\n }\r\n try {\r\n var iItem = item;\r\n var level = iItem.persistence || (iItem.baseData && iItem.baseData.persistence) || (iItem[_DYN_DATA /* @min:%2edata */] && iItem[_DYN_DATA /* @min:%2edata */][_DYN_PERSISTENCE /* @min:%2epersistence */]);\r\n if (level && isValidPersistenceLevel(level)) {\r\n return level;\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return rlt;\r\n}\r\nexport var EVT_DISCARD_STR = \"eventsDiscarded\";\r\nexport var EVT_STORE_STR = \"offlineEventsStored\";\r\nexport var EVT_SENT_STR = \"offlineBatchSent\";\r\nexport var BATCH_DROP_STR = \"offlineBatchDrop\";\r\nexport function forEachMap(map, callback, ordered) {\r\n if (map) {\r\n var keys = objKeys(map);\r\n if (!!ordered && keys) {\r\n var time_1 = (new Date())[_DYN_GET_TIME /* @min:%2egetTime */]();\r\n keys = keys.sort(function (a, b) {\r\n try {\r\n // if getTimeFromId returns 0, mean the time is not valid\r\n var aTime = getTimeFromId(a) || time_1;\r\n var bTime = getTimeFromId(b) || time_1;\r\n return aTime - bTime;\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return -1;\r\n });\r\n }\r\n for (var lp = 0; lp < keys[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n var key = keys[lp];\r\n if (!callback(map[key], key)) {\r\n break;\r\n }\r\n }\r\n }\r\n}\r\nexport function callNotification(mgr, evtName, theArgs) {\r\n var manager = (mgr || {});\r\n var notifyFunc = manager[evtName];\r\n if (notifyFunc) {\r\n try {\r\n notifyFunc.apply(manager, theArgs);\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }\r\n}\r\nexport function batchDropNotification(mgr, cnt, reason) {\r\n if (mgr && cnt > 0) {\r\n callNotification(mgr, BATCH_DROP_STR, [cnt, reason]);\r\n }\r\n return;\r\n}\r\n// OneCollector:\r\n// 200-OK – Success or partial success.\r\n// 204-NoContent – Success or partial success. Regarding accepting events, identical to 200-OK. If the request header contains NoResponseBody with the value of true and the request was successful/partially successful, 204-NoContent status code is returned instead of 200-OK.\r\n// 400-BadRequest – all events were rejected.\r\n// 403-Forbidden – client is above its quota and all events were throttled.\r\n// 413-RequestEntityTooLarge – the request doesn’t conform to limits described in Request constraints section.\r\n// 415-UnsupportedMediaType – the Content-Type or Content-Encoding header has an unexpected value.\r\n// 429-TooManyRequests – the server decided to throttle given request (no data accepted) as the client (device, client version, …) generates too much traffic.\r\n// 401-Unauthorized – Can occur under two conditions:\r\n// All tenant tokens included in this request are invalid (unauthorized). kill-tokens header indicates which one(s). WWW-Authenticate: Token realm=\"ingestion\" (see: rfc2617 for more details) header is added.\r\n// The client has supplied the “strict” header (see section 3.3), and at least one MSA and/or XAuth event token cannot be used as a source of trusted user or device information. The event failure reason “TokenCrackingFailure” will be present in the response’ JSON body. In this scenario, the client is expected to fix or replace the offending ticket and retry.\r\n// 500-InternalServerError – an unexpected exception while handling the request.\r\n// 503-ServiceUnavailable – a machine serving this request is overloaded or shutting down. The request should be retried to a different machine. The server adds Connection: Close header to enforce TCP connection closing.\r\n// Breeze\r\n// 0 ad blockers\r\n// 200 Success!\r\n// 206 - Partial Accept\r\n// 307/308 - Redirect\r\n// 400 - Invalid\r\n// 400 can also be caused by Azure AD authentication.\r\n// 400 is not retriable and SDK should drop invalid data.\r\n// 401 - Unauthorized\r\n// 401 can be also caused by an AAD outage.\r\n// 401 is retriable.\r\n// 402 - Daily Quota Exceeded, drop the data.\r\n// There is no retry-after in the response header for 402.\r\n// 403 - Forbidden\r\n// 403 can also caused by misconfiguring the access control assigned to the Application Insights resource.\r\n// 403 is retriable.\r\n// 404 - Ingestion is allowed only from stamp specific endpoint\r\n// Telemetry will be dropped and customer must update their connection string.\r\n// 404 is not retriable and SDK should drop the data.\r\n// 408 - Timeout, retry it later. (offline might get this)\r\n// 429 - Too Many Requests, Breeze returns retry-after for status code 429 only.\r\n// 500 - Internal Server Error, retry it later.\r\n// 502 - Bad Gateway, retry it later.\r\n// 503 - Service Unavailable, retry it later. (offline)\r\n// 504 - Gateway timeout, retry it later.\r\n// All other response codes, SDK should drop the data.\r\n//# sourceMappingURL=Utils.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;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"}
|
|
1
|
+
{"version":3,"file":"Utils.js.map","sources":["Utils.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { EventPersistence } from \"@microsoft/applicationinsights-common\";\r\nimport { generateW3CId } from \"@microsoft/applicationinsights-core-js\";\r\nimport { isNumber, isString, objKeys, strSubstr } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CHAR_AT, _DYN_CHAR_CODE_AT, _DYN_DATA, _DYN_FROM_CHAR_CODE, _DYN_GET_TIME, _DYN_INDEX_OF, _DYN_LENGTH, _DYN_PERSISTENCE, _DYN_SPLIT, _DYN_TO_STRING, _DYN__CRITICAL, _DYN__NORMAL } from \"../__DynamicConstants\";\r\n/**\r\n* Checks if the value is a valid EventPersistence.\r\n* @param {enum} value - The value that needs to be checked.\r\n* @returns {boolean} True if the value is in EventPersistence, false otherwise.\r\n*/\r\nexport function isValidPersistenceLevel(value) {\r\n return (isNumber(value) && value >= 0 /* eLoggingSeverity.DISABLED */ && value <= EventPersistence[_DYN__CRITICAL /* @min:%2eCritical */]);\r\n}\r\n// Endpoint schema\r\n// <prefix>.<suffix>\r\n//Prefix: Defines a service.\r\n//Suffix: Defines the common domain name.\r\n/**\r\n * Get domian from an endpoint url.\r\n * for example, https://test.com?auth=true, will return test.com\r\n * @param endpoint endpoint url\r\n * @returns domain string\r\n */\r\nexport function getEndpointDomain(endpoint) {\r\n try {\r\n var url = endpoint.replace(/^https?:\\/\\/|^www\\./, \"\");\r\n url = url.replace(/\\?/, \"/\");\r\n var arr = url[_DYN_SPLIT /* @min:%2esplit */](\"/\");\r\n if (arr && arr[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n return arr[0];\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n // if we can't get domain, entire endpoint will be used\r\n return endpoint;\r\n}\r\n/**\r\n * If current value is equal or greater than zero.\r\n * @param value number\r\n * @returns boolean\r\n */\r\nexport function isGreaterThanZero(value) {\r\n return value >= 0;\r\n}\r\n//Base64 is a binary encoding rather than a text encoding,\r\n// it were added to the web platform before it supported binary data types.\r\n// As a result, the two functions use strings to represent binary data\r\nvar _base64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n/**\r\n * Base64-encodes a Uint8Array.\r\n *\r\n * @param data the Uint8Array or string to encode.\r\n *\r\n * @returns the base64-encoded output string.\r\n */\r\nexport function base64Encode(data) {\r\n var line = \"\";\r\n var input = \"\";\r\n if (isString(data)) {\r\n input = data;\r\n }\r\n else {\r\n input = data[_DYN_TO_STRING /* @min:%2etoString */]();\r\n }\r\n var output = \"\";\r\n // tslint:disable-next-line:one-variable-per-declaration\r\n var chr1, chr2, chr3;\r\n var lp = 0;\r\n while (lp < input[_DYN_LENGTH /* @min:%2elength */]) {\r\n chr1 = input[_DYN_CHAR_CODE_AT /* @min:%2echarCodeAt */](lp++);\r\n chr2 = input[_DYN_CHAR_CODE_AT /* @min:%2echarCodeAt */](lp++);\r\n chr3 = input[_DYN_CHAR_CODE_AT /* @min:%2echarCodeAt */](lp++);\r\n // encode 4 character group\r\n line += _base64[_DYN_CHAR_AT /* @min:%2echarAt */](chr1 >> 2);\r\n line += _base64[_DYN_CHAR_AT /* @min:%2echarAt */](((chr1 & 3) << 4) | (chr2 >> 4));\r\n if (isNaN(chr2)) {\r\n line += \"==\";\r\n }\r\n else {\r\n line += _base64[_DYN_CHAR_AT /* @min:%2echarAt */](((chr2 & 15) << 2) | (chr3 >> 6));\r\n line += isNaN(chr3) ? \"=\" : _base64[_DYN_CHAR_AT /* @min:%2echarAt */](chr3 & 63);\r\n }\r\n }\r\n output += line;\r\n return output;\r\n}\r\n/**\r\n * Base64-decodes an encoded string and transforms it back to a Uint8Array.\r\n * @param input the encoded string to decode\r\n * @returns Uint8Array\r\n */\r\nexport function base64Decode(input) {\r\n var output = \"\";\r\n var chr1, chr2, chr3;\r\n var enc1, enc2, enc3, enc4;\r\n var i = 0;\r\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\r\n while (i < input[_DYN_LENGTH /* @min:%2elength */]) {\r\n enc1 = _base64[_DYN_INDEX_OF /* @min:%2eindexOf */](input[_DYN_CHAR_AT /* @min:%2echarAt */](i++));\r\n enc2 = _base64[_DYN_INDEX_OF /* @min:%2eindexOf */](input[_DYN_CHAR_AT /* @min:%2echarAt */](i++));\r\n enc3 = _base64[_DYN_INDEX_OF /* @min:%2eindexOf */](input[_DYN_CHAR_AT /* @min:%2echarAt */](i++));\r\n enc4 = _base64[_DYN_INDEX_OF /* @min:%2eindexOf */](input[_DYN_CHAR_AT /* @min:%2echarAt */](i++));\r\n chr1 = (enc1 << 2) | (enc2 >> 4);\r\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n chr3 = ((enc3 & 3) << 6) | enc4;\r\n output = output + String[_DYN_FROM_CHAR_CODE /* @min:%2efromCharCode */](chr1);\r\n if (enc3 != 64) {\r\n output = output + String[_DYN_FROM_CHAR_CODE /* @min:%2efromCharCode */](chr2);\r\n }\r\n if (enc4 != 64) {\r\n output = output + String[_DYN_FROM_CHAR_CODE /* @min:%2efromCharCode */](chr3);\r\n }\r\n }\r\n var arr = output[_DYN_SPLIT /* @min:%2esplit */](\",\").map(function (c) { return Number(c); });\r\n return new Uint8Array(arr);\r\n}\r\n/**\r\n * Get number value of current time and append a random float number.\r\n * For example, if current time value is 12345678, so \"12345678.randomfl\" will be returned\r\n * @returns time id string\r\n */\r\nexport function getTimeId() {\r\n var time = (new Date())[_DYN_GET_TIME /* @min:%2egetTime */]();\r\n // append random digits to avoid same timestamp value\r\n var random = strSubstr(generateW3CId(), 0, 8);\r\n // function to create spanid();\r\n return time + \".\" + random;\r\n}\r\n/**\r\n * Get time value from a time id that is generated from getTimeId() function.\r\n * For example, if time id is \"12345678.randomfl\", 12345678 will be returned\r\n * @param id time id string\r\n * @returns time value number\r\n */\r\nexport function getTimeFromId(id) {\r\n try {\r\n var regex = new RegExp(/\\d+\\./g);\r\n if (id && isString(id) && regex.test(id)) {\r\n var arr = id[_DYN_SPLIT /* @min:%2esplit */](\".\");\r\n return parseInt(arr[0]);\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return 0;\r\n}\r\n/**\r\n * Get persistence level from a telemetry item.\r\n * Persistence level will be get from root, baseData or data in order.\r\n * For example, if persistence level is set both in root and baseData, the root one will be returned.\r\n * If no valid persistence level defined, normal level will be returned.\r\n * @param item telemetry item\r\n * @returns persistent level\r\n */\r\nexport function getPersistence(item) {\r\n var rlt = EventPersistence[_DYN__NORMAL /* @min:%2eNormal */];\r\n // if item is null, return normal level\r\n if (!item) {\r\n return rlt;\r\n }\r\n try {\r\n var iItem = item;\r\n var level = iItem.persistence || (iItem.baseData && iItem.baseData.persistence) || (iItem[_DYN_DATA /* @min:%2edata */] && iItem[_DYN_DATA /* @min:%2edata */][_DYN_PERSISTENCE /* @min:%2epersistence */]);\r\n if (level && isValidPersistenceLevel(level)) {\r\n return level;\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return rlt;\r\n}\r\nexport var EVT_DISCARD_STR = \"eventsDiscarded\";\r\nexport var EVT_STORE_STR = \"offlineEventsStored\";\r\nexport var EVT_SENT_STR = \"offlineBatchSent\";\r\nexport var BATCH_DROP_STR = \"offlineBatchDrop\";\r\nexport function forEachMap(map, callback, ordered) {\r\n if (map) {\r\n var keys = objKeys(map);\r\n if (!!ordered && keys) {\r\n var time_1 = (new Date())[_DYN_GET_TIME /* @min:%2egetTime */]();\r\n keys = keys.sort(function (a, b) {\r\n try {\r\n // if getTimeFromId returns 0, mean the time is not valid\r\n var aTime = getTimeFromId(a) || time_1;\r\n var bTime = getTimeFromId(b) || time_1;\r\n return aTime - bTime;\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return -1;\r\n });\r\n }\r\n for (var lp = 0; lp < keys[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n var key = keys[lp];\r\n if (!callback(map[key], key)) {\r\n break;\r\n }\r\n }\r\n }\r\n}\r\nexport function callNotification(mgr, evtName, theArgs) {\r\n var manager = (mgr || {});\r\n var notifyFunc = manager[evtName];\r\n if (notifyFunc) {\r\n try {\r\n notifyFunc.apply(manager, theArgs);\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }\r\n}\r\nexport function batchDropNotification(mgr, cnt, reason) {\r\n if (mgr && cnt > 0) {\r\n callNotification(mgr, BATCH_DROP_STR, [cnt, reason]);\r\n }\r\n return;\r\n}\r\n// OneCollector:\r\n// 200-OK – Success or partial success.\r\n// 204-NoContent – Success or partial success. Regarding accepting events, identical to 200-OK. If the request header contains NoResponseBody with the value of true and the request was successful/partially successful, 204-NoContent status code is returned instead of 200-OK.\r\n// 400-BadRequest – all events were rejected.\r\n// 403-Forbidden – client is above its quota and all events were throttled.\r\n// 413-RequestEntityTooLarge – the request doesn’t conform to limits described in Request constraints section.\r\n// 415-UnsupportedMediaType – the Content-Type or Content-Encoding header has an unexpected value.\r\n// 429-TooManyRequests – the server decided to throttle given request (no data accepted) as the client (device, client version, …) generates too much traffic.\r\n// 401-Unauthorized – Can occur under two conditions:\r\n// All tenant tokens included in this request are invalid (unauthorized). kill-tokens header indicates which one(s). WWW-Authenticate: Token realm=\"ingestion\" (see: rfc2617 for more details) header is added.\r\n// The client has supplied the “strict” header (see section 3.3), and at least one MSA and/or XAuth event token cannot be used as a source of trusted user or device information. The event failure reason “TokenCrackingFailure” will be present in the response’ JSON body. In this scenario, the client is expected to fix or replace the offending ticket and retry.\r\n// 500-InternalServerError – an unexpected exception while handling the request.\r\n// 503-ServiceUnavailable – a machine serving this request is overloaded or shutting down. The request should be retried to a different machine. The server adds Connection: Close header to enforce TCP connection closing.\r\n// Breeze\r\n// 0 ad blockers\r\n// 200 Success!\r\n// 206 - Partial Accept\r\n// 307/308 - Redirect\r\n// 400 - Invalid\r\n// 400 can also be caused by Azure AD authentication.\r\n// 400 is not retriable and SDK should drop invalid data.\r\n// 401 - Unauthorized\r\n// 401 can be also caused by an AAD outage.\r\n// 401 is retriable.\r\n// 402 - Daily Quota Exceeded, drop the data.\r\n// There is no retry-after in the response header for 402.\r\n// 403 - Forbidden\r\n// 403 can also caused by misconfiguring the access control assigned to the Application Insights resource.\r\n// 403 is retriable.\r\n// 404 - Ingestion is allowed only from stamp specific endpoint\r\n// Telemetry will be dropped and customer must update their connection string.\r\n// 404 is not retriable and SDK should drop the data.\r\n// 408 - Timeout, retry it later. (offline might get this)\r\n// 429 - Too Many Requests, Breeze returns retry-after for status code 429 only.\r\n// 500 - Internal Server Error, retry it later.\r\n// 502 - Bad Gateway, retry it later.\r\n// 503 - Service Unavailable, retry it later. (offline)\r\n// 504 - Gateway timeout, retry it later.\r\n// All other response codes, SDK should drop the data.\r\n//# sourceMappingURL=Utils.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Offline Channel, 0.3.5-nightly3.2411-
|
|
2
|
+
* Application Insights JavaScript SDK - Offline Channel, 0.3.5-nightly3.2411-13
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -15,7 +15,7 @@ import { InMemoryBatch } from "./InMemoryBatch";
|
|
|
15
15
|
import { OfflineBatchHandler } from "./OfflineBatchHandler";
|
|
16
16
|
import { Sender } from "./Sender";
|
|
17
17
|
import { _DYN_ADD_EVENT, _DYN_BATCH_HANDLER, _DYN_CANCEL, _DYN_CLEAR, _DYN_CREATE_ONE_DSPAYLOAD, _DYN_CRITICAL_CNT, _DYN_DATA, _DYN_DIAG_LOG, _DYN_GET_ITEMS, _DYN_GET_OFFLINE_SUPPORT, _DYN_INITIALIZE, _DYN_INSTRUMENTATION_KEY, _DYN_IS_COMPLETELY_IDLE, _DYN_IS_ONLINE, _DYN_LENGTH, _DYN_MIN_PERSISTENCE_CACH0, _DYN_ONUNLOAD_FLUSH, _DYN_OVERRIDE_INSTRUMENTA1, _DYN_PERSISTENCE, _DYN_PROCESS_NEXT, _DYN_PUSH, _DYN_REFRESH, _DYN_SEND_NEXT_BATCH, _DYN_STATE, _DYN_TEARDOWN, _DYN__CRITICAL, _DYN__NORMAL } from "./__DynamicConstants";
|
|
18
|
-
var version = '0.3.5-nightly3.2411-
|
|
18
|
+
var version = '0.3.5-nightly3.2411-13';
|
|
19
19
|
var DefaultOfflineIdentifier = "OfflineChannel";
|
|
20
20
|
var DefaultBatchInterval = 15000;
|
|
21
21
|
var DefaultInMemoMaxTime = 15000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OfflineChannel.js.map","sources":["OfflineChannel.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { __extends } from \"tslib\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { BreezeChannelIdentifier, EventPersistence, createOfflineListener } from \"@microsoft/applicationinsights-common\";\r\nimport { BaseTelemetryPlugin, EventsDiscardedReason, _throwInternal, arrForEach, createProcessTelemetryContext, createUniqueNamespace, dateNow, mergeEvtNamespace, onConfigChange, runTargetUnload } from \"@microsoft/applicationinsights-core-js\";\r\nimport { createAsyncPromise, createTaskScheduler } from \"@nevware21/ts-async\";\r\nimport { arrSlice, isFunction, isString, objDeepFreeze, objForEachKey, scheduleTimeout } from \"@nevware21/ts-utils\";\r\nimport { EVT_DISCARD_STR, EVT_SENT_STR, EVT_STORE_STR, batchDropNotification, callNotification, isGreaterThanZero, isValidPersistenceLevel } from \"./Helpers/Utils\";\r\nimport { InMemoryBatch } from \"./InMemoryBatch\";\r\nimport { OfflineBatchHandler } from \"./OfflineBatchHandler\";\r\nimport { Sender } from \"./Sender\";\r\nimport { _DYN_ADD_EVENT, _DYN_BATCH_HANDLER, _DYN_CANCEL, _DYN_CLEAR, _DYN_CREATE_ONE_DSPAYLOAD, _DYN_CRITICAL_CNT, _DYN_DATA, _DYN_DIAG_LOG, _DYN_GET_ITEMS, _DYN_GET_OFFLINE_SUPPORT, _DYN_INITIALIZE, _DYN_INSTRUMENTATION_KEY, _DYN_IS_COMPLETELY_IDLE, _DYN_IS_ONLINE, _DYN_LENGTH, _DYN_MIN_PERSISTENCE_CACH0, _DYN_ONUNLOAD_FLUSH, _DYN_OVERRIDE_INSTRUMENTA1, _DYN_PERSISTENCE, _DYN_PROCESS_NEXT, _DYN_PUSH, _DYN_REFRESH, _DYN_SEND_NEXT_BATCH, _DYN_STATE, _DYN_TEARDOWN, _DYN__CRITICAL, _DYN__NORMAL } from \"./__DynamicConstants\";\r\nvar version = '0.3.5-nightly3.2411-11';\r\nvar DefaultOfflineIdentifier = \"OfflineChannel\";\r\nvar DefaultBatchInterval = 15000;\r\nvar DefaultInMemoMaxTime = 15000;\r\nvar PostChannelIdentifier = \"PostChannel\";\r\nvar PersistenceKeys = [EventPersistence[_DYN__CRITICAL /* @min:%2eCritical */], EventPersistence.Normal];\r\nvar undefValue = undefined;\r\nvar DefaultBatchSizeLimitBytes = 63000; // approx 64kb (the current Edge, Firefox and Chrome max limit)\r\nvar defaultOfflineChannelConfig = objDeepFreeze({\r\n maxStorageSizeInBytes: { isVal: isGreaterThanZero, v: 5000000 },\r\n storageKey: undefValue,\r\n minPersistenceLevel: { isVal: isValidPersistenceLevel, v: EventPersistence[_DYN__NORMAL /* @min:%2eNormal */] },\r\n providers: [1 /* eStorageProviders.LocalStorage */, 3 /* eStorageProviders.IndexedDb */],\r\n indexedDbName: undefValue,\r\n maxStorageItems: { isVal: isGreaterThanZero, v: undefValue },\r\n inMemoMaxTime: { isVal: isGreaterThanZero, v: DefaultInMemoMaxTime },\r\n maxRetry: { isVal: isGreaterThanZero, v: 1 },\r\n maxBatchsize: { isVal: isGreaterThanZero, v: DefaultBatchSizeLimitBytes },\r\n maxSentBatchInterval: { isVal: isGreaterThanZero, v: DefaultBatchInterval },\r\n primaryOnlineChannelId: [BreezeChannelIdentifier, PostChannelIdentifier],\r\n overrideInstrumentationKey: undefValue,\r\n senderCfg: {},\r\n splitEvts: false\r\n});\r\n//TODO: add tests for sharedAnanlytics\r\nvar OfflineChannel = /** @class */ (function (_super) {\r\n __extends(OfflineChannel, _super);\r\n function OfflineChannel() {\r\n var _this = _super.call(this) || this;\r\n _this.identifier = DefaultOfflineIdentifier;\r\n _this.priority = 1000; // before channel (post = 1011 and sender = 1001, teechannel = 999, localstorage: 1009)\r\n _this.version = version;\r\n dynamicProto(OfflineChannel, _this, function (_self, _base) {\r\n // Internal properties used for tracking the current state, these are \"true\" internal/private properties for this instance\r\n var _hasInitialized;\r\n var _paused;\r\n var _sender;\r\n var _urlCfg;\r\n var _offlineListener;\r\n var _inMemoFlushTimer;\r\n var _inMemoTimerOut;\r\n var _diagLogger;\r\n var _endpoint;\r\n var _maxBatchSize;\r\n var _sendNextBatchTimer;\r\n var _convertUndefined;\r\n var _retryAt;\r\n var _maxBatchInterval;\r\n var _consecutiveErrors;\r\n var _senderInst;\r\n var _taskScheduler;\r\n var _offineSupport;\r\n var _primaryChannelId;\r\n var _overrideIkey;\r\n var _evtsLimitInMemo;\r\n var _notificationManager;\r\n var _isLazyInit;\r\n var _dependencyPlugin;\r\n var _splitEvts;\r\n var _inMemoMap;\r\n _initDefaults();\r\n _self[_DYN_INITIALIZE /* @min:%2einitialize */] = function (coreConfig, core, extensions, pluginChain) {\r\n if (!_hasInitialized) {\r\n _base[_DYN_INITIALIZE /* @min:%2einitialize */](coreConfig, core, extensions);\r\n // keep setting hasInitialized status here to avoid re-initialize\r\n _hasInitialized = true;\r\n _diagLogger = _self[_DYN_DIAG_LOG /* @min:%2ediagLog */]();\r\n var evtNamespace = mergeEvtNamespace(createUniqueNamespace(\"OfflineSender\"), core.evtNamespace && core.evtNamespace());\r\n _offlineListener = createOfflineListener(evtNamespace); // TODO: add config to be passed\r\n _taskScheduler = createTaskScheduler(createAsyncPromise, \"offline channel\");\r\n _notificationManager = core.getNotifyMgr();\r\n }\r\n // TODO: add refresh inside timer until dependency plugin is initialized\r\n scheduleTimeout(function () {\r\n try {\r\n var _dependencyPlugin_1 = _getDependencyPlugin(coreConfig, core);\r\n // make sure that online sender is initialized\r\n if (!_isLazyInit && _dependencyPlugin_1 && _dependencyPlugin_1.isInitialized()) {\r\n _isLazyInit = true;\r\n _createUrlConfig(coreConfig, core, extensions, pluginChain);\r\n var ctx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);\r\n _sender[_DYN_INITIALIZE /* @min:%2einitialize */](coreConfig, core, ctx, _diagLogger, _primaryChannelId, _self._unloadHooks);\r\n _senderInst = _sender.getXhrInst();\r\n _offlineListener.addListener(function (val) {\r\n if (!val[_DYN_IS_ONLINE /* @min:%2eisOnline */]) {\r\n _sendNextBatchTimer && _sendNextBatchTimer[_DYN_CANCEL /* @min:%2ecancel */]();\r\n }\r\n else {\r\n _setSendNextTimer();\r\n }\r\n });\r\n // need it for first time to confirm if there are any events\r\n _setSendNextTimer();\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }, 0);\r\n };\r\n _self.processTelemetry = function (evt, itemCtx) {\r\n try {\r\n var onlineStatus = _offlineListener[_DYN_IS_ONLINE /* @min:%2eisOnline */]();\r\n itemCtx = itemCtx || _self._getTelCtx(itemCtx);\r\n if (!!onlineStatus || !_offineSupport || !_endpoint) {\r\n // if we can't get url from online sender or core config, process next\r\n _self[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](evt, itemCtx);\r\n return;\r\n }\r\n if (_hasInitialized && !_paused) {\r\n var shouldProcess = true;\r\n if (isFunction(_offineSupport.shouldProcess)) {\r\n shouldProcess = _offineSupport.shouldProcess(evt);\r\n }\r\n if (!shouldProcess) {\r\n _self[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](evt, itemCtx);\r\n return;\r\n }\r\n var item = evt;\r\n //TODO: add function to better get level\r\n item.persistence = item.persistence || (item.baseData && item.baseData.persistence) || EventPersistence[_DYN__NORMAL /* @min:%2eNormal */]; // in case the level is in baseData\r\n if (_shouldCacheEvent(_urlCfg, item) && _inMemoMap) {\r\n if (_overrideIkey) {\r\n item.iKey = _overrideIkey;\r\n }\r\n var added = _addEvtToMap(item);\r\n // inMemo is full\r\n if (!added) {\r\n _flushInMemoItems(false, item[_DYN_PERSISTENCE /* @min:%2epersistence */]);\r\n var retry = _addEvtToMap(item);\r\n if (!retry) {\r\n _evtDropNotification([evt], EventsDiscardedReason.QueueFull);\r\n _throwInternal(_diagLogger, 2 /* eLoggingSeverity.WARNING */, 105 /* _eInternalMessageId.InMemoryStorageBufferFull */, \"Maximum offline in-memory buffer size reached\", true);\r\n }\r\n }\r\n // start timer when the first should-cache event added\r\n _setupInMemoTimer();\r\n }\r\n else {\r\n // if should not cache,send event drop notification\r\n _evtDropNotification([item], EventsDiscardedReason.InvalidEvent);\r\n }\r\n return;\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n // hand off the telemetry item to the next plugin\r\n _self[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](evt, itemCtx);\r\n };\r\n _self.pause = function () {\r\n _paused = true;\r\n _clearScheduledTimer();\r\n _consecutiveErrors = 0;\r\n _retryAt = null;\r\n };\r\n _self.resume = function () {\r\n _paused = false;\r\n _clearScheduledTimer();\r\n _setupInMemoTimer();\r\n _setSendNextTimer();\r\n };\r\n _self[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */] = function () {\r\n if (!_paused) {\r\n while (_hasEvts()) {\r\n _flushInMemoItems(true);\r\n }\r\n // TODO: unloadprovider might send events out of order\r\n }\r\n };\r\n _self.flush = function (sync, callBack, sendReason) {\r\n // TODO: should we implement normal flush\r\n return _self[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */]();\r\n };\r\n _self.getOfflineListener = function () {\r\n return _offlineListener;\r\n };\r\n _self[_DYN_SEND_NEXT_BATCH /* @min:%2esendNextBatch */] = function () {\r\n // TODO: add callback function\r\n return _offineSupport && _setSendNextTimer();\r\n };\r\n _self._doTeardown = function (unloadCtx, unloadState) {\r\n _self[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */]();\r\n _offlineListener && runTargetUnload(_offlineListener, false);\r\n var handler = _urlCfg && _urlCfg[_DYN_BATCH_HANDLER /* @min:%2ebatchHandler */];\r\n handler && handler[_DYN_TEARDOWN /* @min:%2eteardown */]();\r\n _clearScheduledTimer();\r\n _initDefaults();\r\n };\r\n _self[\"_getDbgPlgTargets\"] = function () {\r\n return [_urlCfg, _inMemoMap, _senderInst, _inMemoFlushTimer, _sendNextBatchTimer];\r\n };\r\n function _initDefaults() {\r\n _hasInitialized = false;\r\n _paused = false;\r\n _sender = new Sender();\r\n _urlCfg = null;\r\n _offlineListener = null;\r\n _diagLogger = null;\r\n _endpoint = null;\r\n _convertUndefined = undefValue;\r\n _maxBatchSize = null;\r\n _sendNextBatchTimer = null;\r\n _consecutiveErrors = null;\r\n _retryAt = null;\r\n _maxBatchInterval = null;\r\n _senderInst = null;\r\n _offineSupport = null;\r\n _primaryChannelId = null;\r\n _overrideIkey = null;\r\n _evtsLimitInMemo = null;\r\n _isLazyInit = false;\r\n _dependencyPlugin = null;\r\n _splitEvts = false;\r\n _inMemoMap = null;\r\n }\r\n function _shouldCacheEvent(urlConfig, item) {\r\n if ((item[_DYN_PERSISTENCE /* @min:%2epersistence */]) < urlConfig[_DYN_MIN_PERSISTENCE_CACH0 /* @min:%2eminPersistenceCacheLevel */]) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n function _setupInMemoTimer() {\r\n if (!_inMemoFlushTimer) {\r\n _inMemoFlushTimer = scheduleTimeout(function () {\r\n _flushInMemoItems();\r\n var hasEvts = _hasEvts();\r\n if (hasEvts && _inMemoFlushTimer) {\r\n _inMemoFlushTimer[_DYN_REFRESH /* @min:%2erefresh */]();\r\n }\r\n _setSendNextTimer();\r\n }, _inMemoTimerOut);\r\n _inMemoFlushTimer.unref();\r\n }\r\n else {\r\n // Restart the timer if not already running https://nevware21.github.io/ts-utils/typedoc/interfaces/ITimerHandler.html#enabled\r\n _inMemoFlushTimer.enabled = true;\r\n }\r\n }\r\n //flush only flush max batch size event, may still have events lefts\r\n function _flushInMemoItems(unload, mapKey) {\r\n try {\r\n // TODO: add while loop to flush everything\r\n var hasEvts_1 = false;\r\n // can use objForEachKey(_inMemoMap, (key)), but keys returned by this function is always string\r\n arrForEach(PersistenceKeys, function (key) {\r\n var inMemoBatch = _inMemoMap[key];\r\n var inMemo = inMemoBatch;\r\n var evts = inMemo && inMemo[_DYN_GET_ITEMS /* @min:%2egetItems */]();\r\n if (!evts || !evts[_DYN_LENGTH /* @min:%2elength */]) {\r\n return;\r\n }\r\n if (_splitEvts && mapKey && mapKey !== key) {\r\n // if split evts is set to true\r\n // specific mapkey is defined\r\n // for key !== mapkey, only check if there are any events left in order to refresh timer\r\n hasEvts_1 = hasEvts_1 || !!evts[_DYN_LENGTH /* @min:%2elength */];\r\n return;\r\n }\r\n var payloadArr = [];\r\n var size = 0;\r\n var idx = -1;\r\n var criticalCnt = 0;\r\n arrForEach(evts, function (evt, index) {\r\n var curEvt = evt;\r\n idx = index;\r\n var payload = _getPayload(curEvt);\r\n size += payload[_DYN_LENGTH /* @min:%2elength */];\r\n if (size > _maxBatchSize) {\r\n return;\r\n }\r\n if (curEvt.persistence == EventPersistence[_DYN__CRITICAL /* @min:%2eCritical */]) {\r\n criticalCnt++;\r\n }\r\n idx = index;\r\n payloadArr[_DYN_PUSH /* @min:%2epush */](payload);\r\n });\r\n if (!payloadArr[_DYN_LENGTH /* @min:%2elength */]) {\r\n return;\r\n }\r\n var sentItems = evts.slice(0, idx + 1);\r\n if (idx + 1 < evts[_DYN_LENGTH /* @min:%2elength */]) {\r\n // keep track if there is any remaining events\r\n hasEvts_1 = true;\r\n }\r\n _inMemoMap[key] = inMemoBatch.createNew(_endpoint, arrSlice(inMemo[_DYN_GET_ITEMS /* @min:%2egetItems */](), idx + 1), _evtsLimitInMemo);\r\n var payloadData = null;\r\n if (_offineSupport && _offineSupport[_DYN_CREATE_ONE_DSPAYLOAD /* @min:%2ecreateOneDSPayload */]) {\r\n payloadData = _offineSupport[_DYN_CREATE_ONE_DSPAYLOAD /* @min:%2ecreateOneDSPayload */](sentItems);\r\n if (payloadData) {\r\n payloadData[_DYN_CRITICAL_CNT /* @min:%2ecriticalCnt */] = criticalCnt;\r\n }\r\n }\r\n else {\r\n payloadData = _constructPayloadData(payloadArr, criticalCnt);\r\n }\r\n var callback = function (res) {\r\n if (!res || !res[_DYN_STATE /* @min:%2estate */]) {\r\n return null;\r\n }\r\n var state = res[_DYN_STATE /* @min:%2estate */];\r\n if (state == 2 /* eBatchStoreStatus.Failure */) {\r\n if (!unload) {\r\n // for unload, just try to add each batch once\r\n arrForEach(sentItems, function (item) {\r\n _addEvtToMap(item);\r\n });\r\n _setupInMemoTimer();\r\n }\r\n else {\r\n // unload, drop events\r\n _evtDropNotification(sentItems, EventsDiscardedReason.NonRetryableStatus);\r\n }\r\n }\r\n else {\r\n // if eBatchStoreStatus is success\r\n _storeNotification(sentItems);\r\n }\r\n };\r\n if (payloadData && _urlCfg && _urlCfg[_DYN_BATCH_HANDLER /* @min:%2ebatchHandler */]) {\r\n var promise = _urlCfg[_DYN_BATCH_HANDLER /* @min:%2ebatchHandler */].storeBatch(payloadData, callback, unload);\r\n _queueStorageEvent(\"storeBatch\", promise);\r\n }\r\n });\r\n // this is outside loop\r\n if (!hasEvts_1) {\r\n _inMemoFlushTimer && _inMemoFlushTimer[_DYN_CANCEL /* @min:%2ecancel */]();\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return null;\r\n }\r\n function _setSendNextTimer() {\r\n var isOnline = _offlineListener && _offlineListener[_DYN_IS_ONLINE /* @min:%2eisOnline */]();\r\n if (!_sendNextBatchTimer) {\r\n var retryInterval = _retryAt ? Math.max(0, _retryAt - dateNow()) : 0;\r\n var timerValue = Math.max(_maxBatchInterval, retryInterval);\r\n _sendNextBatchTimer = scheduleTimeout(function () {\r\n if (isOnline) {\r\n // is no isCompletelyIdle function is available, assume we can send\r\n if (isFunction(_sender[_DYN_IS_COMPLETELY_IDLE /* @min:%2eisCompletelyIdle */]) && !_sender[_DYN_IS_COMPLETELY_IDLE /* @min:%2eisCompletelyIdle */]()) {\r\n _sendNextBatchTimer && _sendNextBatchTimer[_DYN_REFRESH /* @min:%2erefresh */]();\r\n }\r\n else {\r\n var callback = function (res) {\r\n var state = res && res[_DYN_STATE /* @min:%2estate */];\r\n if (state !== 1 /* eBatchSendStatus.Complete */) {\r\n _consecutiveErrors++;\r\n }\r\n var data = res && res[_DYN_DATA /* @min:%2edata */];\r\n if (state === 1 /* eBatchSendStatus.Complete */ && data) {\r\n // if status is complete and data is null, means no data\r\n _sentNotification(data);\r\n _sendNextBatchTimer && _sendNextBatchTimer[_DYN_REFRESH /* @min:%2erefresh */]();\r\n }\r\n if (state === 3 /* eBatchSendStatus.Drop */) {\r\n batchDropNotification(_notificationManager, 1, 1 /* eBatchDiscardedReason.NonRetryableStatus */);\r\n }\r\n };\r\n if (_urlCfg && _urlCfg[_DYN_BATCH_HANDLER /* @min:%2ebatchHandler */]) {\r\n var promise = _urlCfg.batchHandler[_DYN_SEND_NEXT_BATCH /* @min:%2esendNextBatch */](callback, false, _senderInst);\r\n _queueStorageEvent(\"sendNextBatch\", promise);\r\n }\r\n }\r\n }\r\n else {\r\n _sendNextBatchTimer && _sendNextBatchTimer[_DYN_CANCEL /* @min:%2ecancel */]();\r\n }\r\n // if offline, do nothing;\r\n }, timerValue);\r\n _sendNextBatchTimer.unref();\r\n }\r\n else {\r\n // only restart it when online\r\n if (isOnline) {\r\n _sendNextBatchTimer.enabled = true;\r\n _sendNextBatchTimer[_DYN_REFRESH /* @min:%2erefresh */]();\r\n }\r\n // if offline, do noting\r\n }\r\n }\r\n function _clearScheduledTimer() {\r\n _inMemoFlushTimer && _inMemoFlushTimer[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _sendNextBatchTimer && _sendNextBatchTimer[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _inMemoFlushTimer = null;\r\n _sendNextBatchTimer = null;\r\n }\r\n function _queueStorageEvent(taskName, task) {\r\n if (_taskScheduler) {\r\n _taskScheduler.queue(function () {\r\n return task;\r\n }, taskName).catch(function (reason) {\r\n // Just handling any rejection to avoid an unhandled rejection event\r\n });\r\n }\r\n }\r\n function _setRetryTime(linearFactor) {\r\n if (linearFactor === void 0) { linearFactor = 1; }\r\n var SlotDelayInSeconds = 10;\r\n var delayInSeconds;\r\n if (_consecutiveErrors <= 1) {\r\n delayInSeconds = SlotDelayInSeconds;\r\n }\r\n else {\r\n var backOffSlot = (Math.pow(2, _consecutiveErrors) - 1) / 2;\r\n // tslint:disable-next-line:insecure-random\r\n var backOffDelay = Math.floor(Math.random() * backOffSlot * SlotDelayInSeconds) + 1;\r\n backOffDelay = linearFactor * backOffDelay;\r\n delayInSeconds = Math.max(Math.min(backOffDelay, 3600), SlotDelayInSeconds);\r\n }\r\n // TODO: Log the backoff time like the C# version does.\r\n var retryAfterTimeSpan = dateNow() + (delayInSeconds * 1000);\r\n // TODO: Log the retry at time like the C# version does.\r\n _retryAt = retryAfterTimeSpan;\r\n }\r\n function _getCoreItemCtx(coreConfig, core, extensions, pluginChain) {\r\n if (coreConfig) {\r\n // Make sure the extensionConfig exists\r\n coreConfig.extensionConfig = coreConfig.extensionConfig || {};\r\n }\r\n if (!pluginChain && core) {\r\n // Get the first plugin from the core\r\n pluginChain = core.getProcessTelContext().getNext();\r\n }\r\n var nextPlugin = null;\r\n var rootNext = _self._getTelCtx().getNext();\r\n if (rootNext) {\r\n nextPlugin = rootNext.getPlugin();\r\n }\r\n return createProcessTelemetryContext(pluginChain, coreConfig, core, nextPlugin);\r\n }\r\n function _getPayload(evt) {\r\n try {\r\n if (evt) {\r\n return _offineSupport && _offineSupport.serialize(evt, _convertUndefined);\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return null;\r\n }\r\n function _constructPayloadData(payloadArr, criticalCnt) {\r\n try {\r\n if (!_offineSupport) {\r\n return null;\r\n }\r\n var cnt = criticalCnt || 0;\r\n var payload = _offineSupport.batch(payloadArr);\r\n var payloadData = _offineSupport.createPayload && _offineSupport.createPayload(payload);\r\n if (payloadData) {\r\n payloadData[_DYN_CRITICAL_CNT /* @min:%2ecriticalCnt */] = cnt;\r\n return payloadData;\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return null;\r\n }\r\n function _createUrlConfig(coreConfig, core, extensions, pluginChain) {\r\n _self._addHook(onConfigChange(coreConfig, function (details) {\r\n if (!isString(coreConfig[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */]) || !isString(coreConfig.endpointUrl)) {\r\n // if ikey or endpointUrl is promise, delay initialization\r\n _self.pause();\r\n return;\r\n }\r\n if (_paused) {\r\n _self.resume();\r\n }\r\n var storageConfig = null;\r\n var theConfig = details.cfg;\r\n var ctx = createProcessTelemetryContext(null, theConfig, core);\r\n storageConfig = ctx.getExtCfg(_self.identifier, defaultOfflineChannelConfig);\r\n // let channelIds = storageConfig.primaryOnlineChannelId;\r\n var onlineUrl = null;\r\n var channel = _getDependencyPlugin(coreConfig, core);\r\n if (!!channel.isInitialized() && isFunction(channel[_DYN_GET_OFFLINE_SUPPORT /* @min:%2egetOfflineSupport */])) {\r\n _offineSupport = channel[_DYN_GET_OFFLINE_SUPPORT /* @min:%2egetOfflineSupport */]();\r\n onlineUrl = isFunction(_offineSupport && _offineSupport.getUrl) && _offineSupport.getUrl();\r\n }\r\n else {\r\n return;\r\n }\r\n _overrideIkey = storageConfig[_DYN_OVERRIDE_INSTRUMENTA1 /* @min:%2eoverrideInstrumentationKey */];\r\n var urlConfig = _urlCfg;\r\n var curUrl = onlineUrl || coreConfig.endpointUrl || _endpoint;\r\n // NOTE: should add default endpoint value to core as well\r\n if (curUrl !== _endpoint) {\r\n var coreRootCtx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);\r\n var providerContext = {\r\n itemCtx: coreRootCtx,\r\n storageConfig: storageConfig,\r\n id: _self.id,\r\n endpoint: curUrl,\r\n notificationMgr: _notificationManager\r\n };\r\n var oriHandler = _urlCfg && _urlCfg[_DYN_BATCH_HANDLER /* @min:%2ebatchHandler */];\r\n try {\r\n oriHandler && oriHandler[_DYN_TEARDOWN /* @min:%2eteardown */]();\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n var handler = new OfflineBatchHandler(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), _self._unloadHooks);\r\n handler[_DYN_INITIALIZE /* @min:%2einitialize */](providerContext);\r\n urlConfig = {\r\n iKey: coreConfig[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */],\r\n url: curUrl,\r\n minPersistenceCacheLevel: storageConfig.minPersistenceLevel,\r\n coreRootCtx: coreRootCtx,\r\n providerContext: providerContext,\r\n batchHandler: handler\r\n };\r\n _evtsLimitInMemo = storageConfig.eventsLimitInMem;\r\n _inMemoMap = _inMemoMap || {};\r\n var newMap_1 = {};\r\n // transfer previous events to new buffer\r\n arrForEach(PersistenceKeys, function (key) {\r\n // when init map, we will initize a in memo batch for each EventPersistence key\r\n // evts to be transferred to new inMemo map\r\n var evts = null;\r\n if (_inMemoMap && _inMemoMap[key]) {\r\n var inMemoBatch = _inMemoMap[key];\r\n var curEvts = inMemoBatch && inMemoBatch[_DYN_GET_ITEMS /* @min:%2egetItems */]();\r\n if (curEvts && curEvts[_DYN_LENGTH /* @min:%2elength */]) {\r\n evts = arrSlice(curEvts);\r\n inMemoBatch && inMemoBatch[_DYN_CLEAR /* @min:%2eclear */]();\r\n }\r\n }\r\n newMap_1[key] = new InMemoryBatch(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), curUrl, evts, _evtsLimitInMemo);\r\n });\r\n _inMemoMap = newMap_1;\r\n _inMemoTimerOut = storageConfig.inMemoMaxTime;\r\n var onlineConfig = ctx.getExtCfg(_primaryChannelId, {}) || {};\r\n _convertUndefined = onlineConfig.convertUndefined;\r\n _endpoint = curUrl;\r\n _setRetryTime();\r\n _maxBatchInterval = storageConfig.maxSentBatchInterval;\r\n _maxBatchSize = storageConfig.maxBatchsize;\r\n _splitEvts = storageConfig.splitEvts;\r\n }\r\n _urlCfg = urlConfig;\r\n _endpoint = curUrl;\r\n }));\r\n }\r\n function _getDependencyPlugin(coreConfig, core) {\r\n if (!_dependencyPlugin) {\r\n var ctx = createProcessTelemetryContext(null, coreConfig, core);\r\n var storageConfig = ctx.getExtCfg(_self.identifier, defaultOfflineChannelConfig);\r\n var channelIds = storageConfig.primaryOnlineChannelId;\r\n if (channelIds && channelIds[_DYN_LENGTH /* @min:%2elength */]) {\r\n arrForEach(channelIds, function (id) {\r\n var plugin = core.getPlugin(id);\r\n var channel = plugin && plugin.plugin;\r\n if (channel) {\r\n _dependencyPlugin = channel;\r\n return;\r\n }\r\n });\r\n }\r\n }\r\n return _dependencyPlugin;\r\n }\r\n function _hasEvts() {\r\n var hasEvts = false;\r\n objForEachKey(_inMemoMap, function (key) {\r\n var inMemoBatch = _inMemoMap[key];\r\n if (inMemoBatch && inMemoBatch.count()) {\r\n hasEvts = true;\r\n return -1;\r\n }\r\n });\r\n return hasEvts;\r\n }\r\n function _addEvtToMap(item) {\r\n // if split evts is false, all events will be saved into EventPersistence.Normal batch\r\n var mapKey = EventPersistence[_DYN__NORMAL /* @min:%2eNormal */];\r\n if (_splitEvts && item[_DYN_PERSISTENCE /* @min:%2epersistence */]) {\r\n mapKey = item[_DYN_PERSISTENCE /* @min:%2epersistence */];\r\n }\r\n var inMemoBatch = _inMemoMap[mapKey];\r\n return inMemoBatch[_DYN_ADD_EVENT /* @min:%2eaddEvent */](item);\r\n }\r\n function _callNotification(evtName, theArgs) {\r\n callNotification(_notificationManager, evtName, theArgs);\r\n }\r\n function _evtDropNotification(events, reason) {\r\n if (events && events[_DYN_LENGTH /* @min:%2elength */]) {\r\n _callNotification(EVT_DISCARD_STR, [events, reason]);\r\n }\r\n return;\r\n }\r\n function _sentNotification(batch) {\r\n if (batch && batch[_DYN_DATA /* @min:%2edata */]) {\r\n _callNotification(EVT_SENT_STR, [batch]);\r\n }\r\n return;\r\n }\r\n function _storeNotification(events) {\r\n if (events && events[_DYN_LENGTH /* @min:%2elength */]) {\r\n _callNotification(EVT_STORE_STR, [events]);\r\n }\r\n return;\r\n }\r\n });\r\n return _this;\r\n }\r\n /* ================================================================================================================\r\n * DO NOT add any code to these empty implementations as any code defined here will be removed, as\r\n * this class is using @dynamicProto which will implement the methods during the execution of the\r\n * dynamicProto() in the constructor.\r\n *\r\n * The final generated files will also have these implementations removed as part of the packaging process.\r\n *\r\n * These empty definitions exists only to keep the generated TypeScript definition files aligned with the\r\n * actual resulting implementation, this is so that TS is still happy to create extension classes from the\r\n * resulting definitions.\r\n *\r\n * This also keeps the generated *.d.ts files and documentation the same as they where prior to using dynamicProto()\r\n */\r\n /**\r\n * The function does the initial set up. It adds a notification listener to determine which events to remove.\r\n * @param coreConfig - The core configuration.\r\n * @param core - The AppInsights core.\r\n * @param extensions - An array of all the plugins being used.\r\n */\r\n OfflineChannel.prototype.initialize = function (coreConfig, core, extensions, pluginChain) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Process an event to add it to the local storage and then pass it to the next plugin.\r\n * @param event - The event that needs to be stored.\r\n * @param itemCtx - This is the context for the current request, ITelemetryPlugin instances\r\n * can optionally use this to access the current core instance or define / pass additional information\r\n * to later plugins (vs appending items to the telemetry item)\r\n */\r\n OfflineChannel.prototype.processTelemetry = function (evt, itemCtx) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n // ================================================================================================================\r\n /**\r\n * Pauses the adding of new events to the plugin. Also calls pause on the next\r\n * plugin.\r\n */\r\n OfflineChannel.prototype.pause = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Resumes the adding of new events to the plugin. Also calls resume on\r\n * the next plugin. Adds all events in storage to the next plugin.\r\n */\r\n OfflineChannel.prototype.resume = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Get offline listener\r\n * @returns offline listener\r\n */\r\n OfflineChannel.prototype.getOfflineListener = 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 *No op\r\n */\r\n OfflineChannel.prototype.flush = function (sync, callBack, sendReason) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Flush the batched events synchronously (if possible -- based on configuration).\r\n * Will not flush if the Send has been paused.\r\n */\r\n OfflineChannel.prototype.onunloadFlush = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Flush the next stored event batch\r\n */\r\n OfflineChannel.prototype.sendNextBatch = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n return OfflineChannel;\r\n}(BaseTelemetryPlugin));\r\nexport { OfflineChannel };\r\n//# sourceMappingURL=OfflineChannel.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC,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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;8DAkBM;AACN;AACA;;;;;2DAwCM,CAAC;;;;;0BACmB;AAC1B;AACA;AACA"}
|
|
1
|
+
{"version":3,"file":"OfflineChannel.js.map","sources":["OfflineChannel.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { __extends } from \"tslib\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { BreezeChannelIdentifier, EventPersistence, createOfflineListener } from \"@microsoft/applicationinsights-common\";\r\nimport { BaseTelemetryPlugin, EventsDiscardedReason, _throwInternal, arrForEach, createProcessTelemetryContext, createUniqueNamespace, dateNow, mergeEvtNamespace, onConfigChange, runTargetUnload } from \"@microsoft/applicationinsights-core-js\";\r\nimport { createAsyncPromise, createTaskScheduler } from \"@nevware21/ts-async\";\r\nimport { arrSlice, isFunction, isString, objDeepFreeze, objForEachKey, scheduleTimeout } from \"@nevware21/ts-utils\";\r\nimport { EVT_DISCARD_STR, EVT_SENT_STR, EVT_STORE_STR, batchDropNotification, callNotification, isGreaterThanZero, isValidPersistenceLevel } from \"./Helpers/Utils\";\r\nimport { InMemoryBatch } from \"./InMemoryBatch\";\r\nimport { OfflineBatchHandler } from \"./OfflineBatchHandler\";\r\nimport { Sender } from \"./Sender\";\r\nimport { _DYN_ADD_EVENT, _DYN_BATCH_HANDLER, _DYN_CANCEL, _DYN_CLEAR, _DYN_CREATE_ONE_DSPAYLOAD, _DYN_CRITICAL_CNT, _DYN_DATA, _DYN_DIAG_LOG, _DYN_GET_ITEMS, _DYN_GET_OFFLINE_SUPPORT, _DYN_INITIALIZE, _DYN_INSTRUMENTATION_KEY, _DYN_IS_COMPLETELY_IDLE, _DYN_IS_ONLINE, _DYN_LENGTH, _DYN_MIN_PERSISTENCE_CACH0, _DYN_ONUNLOAD_FLUSH, _DYN_OVERRIDE_INSTRUMENTA1, _DYN_PERSISTENCE, _DYN_PROCESS_NEXT, _DYN_PUSH, _DYN_REFRESH, _DYN_SEND_NEXT_BATCH, _DYN_STATE, _DYN_TEARDOWN, _DYN__CRITICAL, _DYN__NORMAL } from \"./__DynamicConstants\";\r\nvar version = '0.3.5-nightly3.2411-13';\r\nvar DefaultOfflineIdentifier = \"OfflineChannel\";\r\nvar DefaultBatchInterval = 15000;\r\nvar DefaultInMemoMaxTime = 15000;\r\nvar PostChannelIdentifier = \"PostChannel\";\r\nvar PersistenceKeys = [EventPersistence[_DYN__CRITICAL /* @min:%2eCritical */], EventPersistence.Normal];\r\nvar undefValue = undefined;\r\nvar DefaultBatchSizeLimitBytes = 63000; // approx 64kb (the current Edge, Firefox and Chrome max limit)\r\nvar defaultOfflineChannelConfig = objDeepFreeze({\r\n maxStorageSizeInBytes: { isVal: isGreaterThanZero, v: 5000000 },\r\n storageKey: undefValue,\r\n minPersistenceLevel: { isVal: isValidPersistenceLevel, v: EventPersistence[_DYN__NORMAL /* @min:%2eNormal */] },\r\n providers: [1 /* eStorageProviders.LocalStorage */, 3 /* eStorageProviders.IndexedDb */],\r\n indexedDbName: undefValue,\r\n maxStorageItems: { isVal: isGreaterThanZero, v: undefValue },\r\n inMemoMaxTime: { isVal: isGreaterThanZero, v: DefaultInMemoMaxTime },\r\n maxRetry: { isVal: isGreaterThanZero, v: 1 },\r\n maxBatchsize: { isVal: isGreaterThanZero, v: DefaultBatchSizeLimitBytes },\r\n maxSentBatchInterval: { isVal: isGreaterThanZero, v: DefaultBatchInterval },\r\n primaryOnlineChannelId: [BreezeChannelIdentifier, PostChannelIdentifier],\r\n overrideInstrumentationKey: undefValue,\r\n senderCfg: {},\r\n splitEvts: false\r\n});\r\n//TODO: add tests for sharedAnanlytics\r\nvar OfflineChannel = /** @class */ (function (_super) {\r\n __extends(OfflineChannel, _super);\r\n function OfflineChannel() {\r\n var _this = _super.call(this) || this;\r\n _this.identifier = DefaultOfflineIdentifier;\r\n _this.priority = 1000; // before channel (post = 1011 and sender = 1001, teechannel = 999, localstorage: 1009)\r\n _this.version = version;\r\n dynamicProto(OfflineChannel, _this, function (_self, _base) {\r\n // Internal properties used for tracking the current state, these are \"true\" internal/private properties for this instance\r\n var _hasInitialized;\r\n var _paused;\r\n var _sender;\r\n var _urlCfg;\r\n var _offlineListener;\r\n var _inMemoFlushTimer;\r\n var _inMemoTimerOut;\r\n var _diagLogger;\r\n var _endpoint;\r\n var _maxBatchSize;\r\n var _sendNextBatchTimer;\r\n var _convertUndefined;\r\n var _retryAt;\r\n var _maxBatchInterval;\r\n var _consecutiveErrors;\r\n var _senderInst;\r\n var _taskScheduler;\r\n var _offineSupport;\r\n var _primaryChannelId;\r\n var _overrideIkey;\r\n var _evtsLimitInMemo;\r\n var _notificationManager;\r\n var _isLazyInit;\r\n var _dependencyPlugin;\r\n var _splitEvts;\r\n var _inMemoMap;\r\n _initDefaults();\r\n _self[_DYN_INITIALIZE /* @min:%2einitialize */] = function (coreConfig, core, extensions, pluginChain) {\r\n if (!_hasInitialized) {\r\n _base[_DYN_INITIALIZE /* @min:%2einitialize */](coreConfig, core, extensions);\r\n // keep setting hasInitialized status here to avoid re-initialize\r\n _hasInitialized = true;\r\n _diagLogger = _self[_DYN_DIAG_LOG /* @min:%2ediagLog */]();\r\n var evtNamespace = mergeEvtNamespace(createUniqueNamespace(\"OfflineSender\"), core.evtNamespace && core.evtNamespace());\r\n _offlineListener = createOfflineListener(evtNamespace); // TODO: add config to be passed\r\n _taskScheduler = createTaskScheduler(createAsyncPromise, \"offline channel\");\r\n _notificationManager = core.getNotifyMgr();\r\n }\r\n // TODO: add refresh inside timer until dependency plugin is initialized\r\n scheduleTimeout(function () {\r\n try {\r\n var _dependencyPlugin_1 = _getDependencyPlugin(coreConfig, core);\r\n // make sure that online sender is initialized\r\n if (!_isLazyInit && _dependencyPlugin_1 && _dependencyPlugin_1.isInitialized()) {\r\n _isLazyInit = true;\r\n _createUrlConfig(coreConfig, core, extensions, pluginChain);\r\n var ctx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);\r\n _sender[_DYN_INITIALIZE /* @min:%2einitialize */](coreConfig, core, ctx, _diagLogger, _primaryChannelId, _self._unloadHooks);\r\n _senderInst = _sender.getXhrInst();\r\n _offlineListener.addListener(function (val) {\r\n if (!val[_DYN_IS_ONLINE /* @min:%2eisOnline */]) {\r\n _sendNextBatchTimer && _sendNextBatchTimer[_DYN_CANCEL /* @min:%2ecancel */]();\r\n }\r\n else {\r\n _setSendNextTimer();\r\n }\r\n });\r\n // need it for first time to confirm if there are any events\r\n _setSendNextTimer();\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }, 0);\r\n };\r\n _self.processTelemetry = function (evt, itemCtx) {\r\n try {\r\n var onlineStatus = _offlineListener[_DYN_IS_ONLINE /* @min:%2eisOnline */]();\r\n itemCtx = itemCtx || _self._getTelCtx(itemCtx);\r\n if (!!onlineStatus || !_offineSupport || !_endpoint) {\r\n // if we can't get url from online sender or core config, process next\r\n _self[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](evt, itemCtx);\r\n return;\r\n }\r\n if (_hasInitialized && !_paused) {\r\n var shouldProcess = true;\r\n if (isFunction(_offineSupport.shouldProcess)) {\r\n shouldProcess = _offineSupport.shouldProcess(evt);\r\n }\r\n if (!shouldProcess) {\r\n _self[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](evt, itemCtx);\r\n return;\r\n }\r\n var item = evt;\r\n //TODO: add function to better get level\r\n item.persistence = item.persistence || (item.baseData && item.baseData.persistence) || EventPersistence[_DYN__NORMAL /* @min:%2eNormal */]; // in case the level is in baseData\r\n if (_shouldCacheEvent(_urlCfg, item) && _inMemoMap) {\r\n if (_overrideIkey) {\r\n item.iKey = _overrideIkey;\r\n }\r\n var added = _addEvtToMap(item);\r\n // inMemo is full\r\n if (!added) {\r\n _flushInMemoItems(false, item[_DYN_PERSISTENCE /* @min:%2epersistence */]);\r\n var retry = _addEvtToMap(item);\r\n if (!retry) {\r\n _evtDropNotification([evt], EventsDiscardedReason.QueueFull);\r\n _throwInternal(_diagLogger, 2 /* eLoggingSeverity.WARNING */, 105 /* _eInternalMessageId.InMemoryStorageBufferFull */, \"Maximum offline in-memory buffer size reached\", true);\r\n }\r\n }\r\n // start timer when the first should-cache event added\r\n _setupInMemoTimer();\r\n }\r\n else {\r\n // if should not cache,send event drop notification\r\n _evtDropNotification([item], EventsDiscardedReason.InvalidEvent);\r\n }\r\n return;\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n // hand off the telemetry item to the next plugin\r\n _self[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](evt, itemCtx);\r\n };\r\n _self.pause = function () {\r\n _paused = true;\r\n _clearScheduledTimer();\r\n _consecutiveErrors = 0;\r\n _retryAt = null;\r\n };\r\n _self.resume = function () {\r\n _paused = false;\r\n _clearScheduledTimer();\r\n _setupInMemoTimer();\r\n _setSendNextTimer();\r\n };\r\n _self[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */] = function () {\r\n if (!_paused) {\r\n while (_hasEvts()) {\r\n _flushInMemoItems(true);\r\n }\r\n // TODO: unloadprovider might send events out of order\r\n }\r\n };\r\n _self.flush = function (sync, callBack, sendReason) {\r\n // TODO: should we implement normal flush\r\n return _self[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */]();\r\n };\r\n _self.getOfflineListener = function () {\r\n return _offlineListener;\r\n };\r\n _self[_DYN_SEND_NEXT_BATCH /* @min:%2esendNextBatch */] = function () {\r\n // TODO: add callback function\r\n return _offineSupport && _setSendNextTimer();\r\n };\r\n _self._doTeardown = function (unloadCtx, unloadState) {\r\n _self[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */]();\r\n _offlineListener && runTargetUnload(_offlineListener, false);\r\n var handler = _urlCfg && _urlCfg[_DYN_BATCH_HANDLER /* @min:%2ebatchHandler */];\r\n handler && handler[_DYN_TEARDOWN /* @min:%2eteardown */]();\r\n _clearScheduledTimer();\r\n _initDefaults();\r\n };\r\n _self[\"_getDbgPlgTargets\"] = function () {\r\n return [_urlCfg, _inMemoMap, _senderInst, _inMemoFlushTimer, _sendNextBatchTimer];\r\n };\r\n function _initDefaults() {\r\n _hasInitialized = false;\r\n _paused = false;\r\n _sender = new Sender();\r\n _urlCfg = null;\r\n _offlineListener = null;\r\n _diagLogger = null;\r\n _endpoint = null;\r\n _convertUndefined = undefValue;\r\n _maxBatchSize = null;\r\n _sendNextBatchTimer = null;\r\n _consecutiveErrors = null;\r\n _retryAt = null;\r\n _maxBatchInterval = null;\r\n _senderInst = null;\r\n _offineSupport = null;\r\n _primaryChannelId = null;\r\n _overrideIkey = null;\r\n _evtsLimitInMemo = null;\r\n _isLazyInit = false;\r\n _dependencyPlugin = null;\r\n _splitEvts = false;\r\n _inMemoMap = null;\r\n }\r\n function _shouldCacheEvent(urlConfig, item) {\r\n if ((item[_DYN_PERSISTENCE /* @min:%2epersistence */]) < urlConfig[_DYN_MIN_PERSISTENCE_CACH0 /* @min:%2eminPersistenceCacheLevel */]) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n function _setupInMemoTimer() {\r\n if (!_inMemoFlushTimer) {\r\n _inMemoFlushTimer = scheduleTimeout(function () {\r\n _flushInMemoItems();\r\n var hasEvts = _hasEvts();\r\n if (hasEvts && _inMemoFlushTimer) {\r\n _inMemoFlushTimer[_DYN_REFRESH /* @min:%2erefresh */]();\r\n }\r\n _setSendNextTimer();\r\n }, _inMemoTimerOut);\r\n _inMemoFlushTimer.unref();\r\n }\r\n else {\r\n // Restart the timer if not already running https://nevware21.github.io/ts-utils/typedoc/interfaces/ITimerHandler.html#enabled\r\n _inMemoFlushTimer.enabled = true;\r\n }\r\n }\r\n //flush only flush max batch size event, may still have events lefts\r\n function _flushInMemoItems(unload, mapKey) {\r\n try {\r\n // TODO: add while loop to flush everything\r\n var hasEvts_1 = false;\r\n // can use objForEachKey(_inMemoMap, (key)), but keys returned by this function is always string\r\n arrForEach(PersistenceKeys, function (key) {\r\n var inMemoBatch = _inMemoMap[key];\r\n var inMemo = inMemoBatch;\r\n var evts = inMemo && inMemo[_DYN_GET_ITEMS /* @min:%2egetItems */]();\r\n if (!evts || !evts[_DYN_LENGTH /* @min:%2elength */]) {\r\n return;\r\n }\r\n if (_splitEvts && mapKey && mapKey !== key) {\r\n // if split evts is set to true\r\n // specific mapkey is defined\r\n // for key !== mapkey, only check if there are any events left in order to refresh timer\r\n hasEvts_1 = hasEvts_1 || !!evts[_DYN_LENGTH /* @min:%2elength */];\r\n return;\r\n }\r\n var payloadArr = [];\r\n var size = 0;\r\n var idx = -1;\r\n var criticalCnt = 0;\r\n arrForEach(evts, function (evt, index) {\r\n var curEvt = evt;\r\n idx = index;\r\n var payload = _getPayload(curEvt);\r\n size += payload[_DYN_LENGTH /* @min:%2elength */];\r\n if (size > _maxBatchSize) {\r\n return;\r\n }\r\n if (curEvt.persistence == EventPersistence[_DYN__CRITICAL /* @min:%2eCritical */]) {\r\n criticalCnt++;\r\n }\r\n idx = index;\r\n payloadArr[_DYN_PUSH /* @min:%2epush */](payload);\r\n });\r\n if (!payloadArr[_DYN_LENGTH /* @min:%2elength */]) {\r\n return;\r\n }\r\n var sentItems = evts.slice(0, idx + 1);\r\n if (idx + 1 < evts[_DYN_LENGTH /* @min:%2elength */]) {\r\n // keep track if there is any remaining events\r\n hasEvts_1 = true;\r\n }\r\n _inMemoMap[key] = inMemoBatch.createNew(_endpoint, arrSlice(inMemo[_DYN_GET_ITEMS /* @min:%2egetItems */](), idx + 1), _evtsLimitInMemo);\r\n var payloadData = null;\r\n if (_offineSupport && _offineSupport[_DYN_CREATE_ONE_DSPAYLOAD /* @min:%2ecreateOneDSPayload */]) {\r\n payloadData = _offineSupport[_DYN_CREATE_ONE_DSPAYLOAD /* @min:%2ecreateOneDSPayload */](sentItems);\r\n if (payloadData) {\r\n payloadData[_DYN_CRITICAL_CNT /* @min:%2ecriticalCnt */] = criticalCnt;\r\n }\r\n }\r\n else {\r\n payloadData = _constructPayloadData(payloadArr, criticalCnt);\r\n }\r\n var callback = function (res) {\r\n if (!res || !res[_DYN_STATE /* @min:%2estate */]) {\r\n return null;\r\n }\r\n var state = res[_DYN_STATE /* @min:%2estate */];\r\n if (state == 2 /* eBatchStoreStatus.Failure */) {\r\n if (!unload) {\r\n // for unload, just try to add each batch once\r\n arrForEach(sentItems, function (item) {\r\n _addEvtToMap(item);\r\n });\r\n _setupInMemoTimer();\r\n }\r\n else {\r\n // unload, drop events\r\n _evtDropNotification(sentItems, EventsDiscardedReason.NonRetryableStatus);\r\n }\r\n }\r\n else {\r\n // if eBatchStoreStatus is success\r\n _storeNotification(sentItems);\r\n }\r\n };\r\n if (payloadData && _urlCfg && _urlCfg[_DYN_BATCH_HANDLER /* @min:%2ebatchHandler */]) {\r\n var promise = _urlCfg[_DYN_BATCH_HANDLER /* @min:%2ebatchHandler */].storeBatch(payloadData, callback, unload);\r\n _queueStorageEvent(\"storeBatch\", promise);\r\n }\r\n });\r\n // this is outside loop\r\n if (!hasEvts_1) {\r\n _inMemoFlushTimer && _inMemoFlushTimer[_DYN_CANCEL /* @min:%2ecancel */]();\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return null;\r\n }\r\n function _setSendNextTimer() {\r\n var isOnline = _offlineListener && _offlineListener[_DYN_IS_ONLINE /* @min:%2eisOnline */]();\r\n if (!_sendNextBatchTimer) {\r\n var retryInterval = _retryAt ? Math.max(0, _retryAt - dateNow()) : 0;\r\n var timerValue = Math.max(_maxBatchInterval, retryInterval);\r\n _sendNextBatchTimer = scheduleTimeout(function () {\r\n if (isOnline) {\r\n // is no isCompletelyIdle function is available, assume we can send\r\n if (isFunction(_sender[_DYN_IS_COMPLETELY_IDLE /* @min:%2eisCompletelyIdle */]) && !_sender[_DYN_IS_COMPLETELY_IDLE /* @min:%2eisCompletelyIdle */]()) {\r\n _sendNextBatchTimer && _sendNextBatchTimer[_DYN_REFRESH /* @min:%2erefresh */]();\r\n }\r\n else {\r\n var callback = function (res) {\r\n var state = res && res[_DYN_STATE /* @min:%2estate */];\r\n if (state !== 1 /* eBatchSendStatus.Complete */) {\r\n _consecutiveErrors++;\r\n }\r\n var data = res && res[_DYN_DATA /* @min:%2edata */];\r\n if (state === 1 /* eBatchSendStatus.Complete */ && data) {\r\n // if status is complete and data is null, means no data\r\n _sentNotification(data);\r\n _sendNextBatchTimer && _sendNextBatchTimer[_DYN_REFRESH /* @min:%2erefresh */]();\r\n }\r\n if (state === 3 /* eBatchSendStatus.Drop */) {\r\n batchDropNotification(_notificationManager, 1, 1 /* eBatchDiscardedReason.NonRetryableStatus */);\r\n }\r\n };\r\n if (_urlCfg && _urlCfg[_DYN_BATCH_HANDLER /* @min:%2ebatchHandler */]) {\r\n var promise = _urlCfg.batchHandler[_DYN_SEND_NEXT_BATCH /* @min:%2esendNextBatch */](callback, false, _senderInst);\r\n _queueStorageEvent(\"sendNextBatch\", promise);\r\n }\r\n }\r\n }\r\n else {\r\n _sendNextBatchTimer && _sendNextBatchTimer[_DYN_CANCEL /* @min:%2ecancel */]();\r\n }\r\n // if offline, do nothing;\r\n }, timerValue);\r\n _sendNextBatchTimer.unref();\r\n }\r\n else {\r\n // only restart it when online\r\n if (isOnline) {\r\n _sendNextBatchTimer.enabled = true;\r\n _sendNextBatchTimer[_DYN_REFRESH /* @min:%2erefresh */]();\r\n }\r\n // if offline, do noting\r\n }\r\n }\r\n function _clearScheduledTimer() {\r\n _inMemoFlushTimer && _inMemoFlushTimer[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _sendNextBatchTimer && _sendNextBatchTimer[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _inMemoFlushTimer = null;\r\n _sendNextBatchTimer = null;\r\n }\r\n function _queueStorageEvent(taskName, task) {\r\n if (_taskScheduler) {\r\n _taskScheduler.queue(function () {\r\n return task;\r\n }, taskName).catch(function (reason) {\r\n // Just handling any rejection to avoid an unhandled rejection event\r\n });\r\n }\r\n }\r\n function _setRetryTime(linearFactor) {\r\n if (linearFactor === void 0) { linearFactor = 1; }\r\n var SlotDelayInSeconds = 10;\r\n var delayInSeconds;\r\n if (_consecutiveErrors <= 1) {\r\n delayInSeconds = SlotDelayInSeconds;\r\n }\r\n else {\r\n var backOffSlot = (Math.pow(2, _consecutiveErrors) - 1) / 2;\r\n // tslint:disable-next-line:insecure-random\r\n var backOffDelay = Math.floor(Math.random() * backOffSlot * SlotDelayInSeconds) + 1;\r\n backOffDelay = linearFactor * backOffDelay;\r\n delayInSeconds = Math.max(Math.min(backOffDelay, 3600), SlotDelayInSeconds);\r\n }\r\n // TODO: Log the backoff time like the C# version does.\r\n var retryAfterTimeSpan = dateNow() + (delayInSeconds * 1000);\r\n // TODO: Log the retry at time like the C# version does.\r\n _retryAt = retryAfterTimeSpan;\r\n }\r\n function _getCoreItemCtx(coreConfig, core, extensions, pluginChain) {\r\n if (coreConfig) {\r\n // Make sure the extensionConfig exists\r\n coreConfig.extensionConfig = coreConfig.extensionConfig || {};\r\n }\r\n if (!pluginChain && core) {\r\n // Get the first plugin from the core\r\n pluginChain = core.getProcessTelContext().getNext();\r\n }\r\n var nextPlugin = null;\r\n var rootNext = _self._getTelCtx().getNext();\r\n if (rootNext) {\r\n nextPlugin = rootNext.getPlugin();\r\n }\r\n return createProcessTelemetryContext(pluginChain, coreConfig, core, nextPlugin);\r\n }\r\n function _getPayload(evt) {\r\n try {\r\n if (evt) {\r\n return _offineSupport && _offineSupport.serialize(evt, _convertUndefined);\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return null;\r\n }\r\n function _constructPayloadData(payloadArr, criticalCnt) {\r\n try {\r\n if (!_offineSupport) {\r\n return null;\r\n }\r\n var cnt = criticalCnt || 0;\r\n var payload = _offineSupport.batch(payloadArr);\r\n var payloadData = _offineSupport.createPayload && _offineSupport.createPayload(payload);\r\n if (payloadData) {\r\n payloadData[_DYN_CRITICAL_CNT /* @min:%2ecriticalCnt */] = cnt;\r\n return payloadData;\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return null;\r\n }\r\n function _createUrlConfig(coreConfig, core, extensions, pluginChain) {\r\n _self._addHook(onConfigChange(coreConfig, function (details) {\r\n if (!isString(coreConfig[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */]) || !isString(coreConfig.endpointUrl)) {\r\n // if ikey or endpointUrl is promise, delay initialization\r\n _self.pause();\r\n return;\r\n }\r\n if (_paused) {\r\n _self.resume();\r\n }\r\n var storageConfig = null;\r\n var theConfig = details.cfg;\r\n var ctx = createProcessTelemetryContext(null, theConfig, core);\r\n storageConfig = ctx.getExtCfg(_self.identifier, defaultOfflineChannelConfig);\r\n // let channelIds = storageConfig.primaryOnlineChannelId;\r\n var onlineUrl = null;\r\n var channel = _getDependencyPlugin(coreConfig, core);\r\n if (!!channel.isInitialized() && isFunction(channel[_DYN_GET_OFFLINE_SUPPORT /* @min:%2egetOfflineSupport */])) {\r\n _offineSupport = channel[_DYN_GET_OFFLINE_SUPPORT /* @min:%2egetOfflineSupport */]();\r\n onlineUrl = isFunction(_offineSupport && _offineSupport.getUrl) && _offineSupport.getUrl();\r\n }\r\n else {\r\n return;\r\n }\r\n _overrideIkey = storageConfig[_DYN_OVERRIDE_INSTRUMENTA1 /* @min:%2eoverrideInstrumentationKey */];\r\n var urlConfig = _urlCfg;\r\n var curUrl = onlineUrl || coreConfig.endpointUrl || _endpoint;\r\n // NOTE: should add default endpoint value to core as well\r\n if (curUrl !== _endpoint) {\r\n var coreRootCtx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);\r\n var providerContext = {\r\n itemCtx: coreRootCtx,\r\n storageConfig: storageConfig,\r\n id: _self.id,\r\n endpoint: curUrl,\r\n notificationMgr: _notificationManager\r\n };\r\n var oriHandler = _urlCfg && _urlCfg[_DYN_BATCH_HANDLER /* @min:%2ebatchHandler */];\r\n try {\r\n oriHandler && oriHandler[_DYN_TEARDOWN /* @min:%2eteardown */]();\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n var handler = new OfflineBatchHandler(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), _self._unloadHooks);\r\n handler[_DYN_INITIALIZE /* @min:%2einitialize */](providerContext);\r\n urlConfig = {\r\n iKey: coreConfig[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */],\r\n url: curUrl,\r\n minPersistenceCacheLevel: storageConfig.minPersistenceLevel,\r\n coreRootCtx: coreRootCtx,\r\n providerContext: providerContext,\r\n batchHandler: handler\r\n };\r\n _evtsLimitInMemo = storageConfig.eventsLimitInMem;\r\n _inMemoMap = _inMemoMap || {};\r\n var newMap_1 = {};\r\n // transfer previous events to new buffer\r\n arrForEach(PersistenceKeys, function (key) {\r\n // when init map, we will initize a in memo batch for each EventPersistence key\r\n // evts to be transferred to new inMemo map\r\n var evts = null;\r\n if (_inMemoMap && _inMemoMap[key]) {\r\n var inMemoBatch = _inMemoMap[key];\r\n var curEvts = inMemoBatch && inMemoBatch[_DYN_GET_ITEMS /* @min:%2egetItems */]();\r\n if (curEvts && curEvts[_DYN_LENGTH /* @min:%2elength */]) {\r\n evts = arrSlice(curEvts);\r\n inMemoBatch && inMemoBatch[_DYN_CLEAR /* @min:%2eclear */]();\r\n }\r\n }\r\n newMap_1[key] = new InMemoryBatch(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), curUrl, evts, _evtsLimitInMemo);\r\n });\r\n _inMemoMap = newMap_1;\r\n _inMemoTimerOut = storageConfig.inMemoMaxTime;\r\n var onlineConfig = ctx.getExtCfg(_primaryChannelId, {}) || {};\r\n _convertUndefined = onlineConfig.convertUndefined;\r\n _endpoint = curUrl;\r\n _setRetryTime();\r\n _maxBatchInterval = storageConfig.maxSentBatchInterval;\r\n _maxBatchSize = storageConfig.maxBatchsize;\r\n _splitEvts = storageConfig.splitEvts;\r\n }\r\n _urlCfg = urlConfig;\r\n _endpoint = curUrl;\r\n }));\r\n }\r\n function _getDependencyPlugin(coreConfig, core) {\r\n if (!_dependencyPlugin) {\r\n var ctx = createProcessTelemetryContext(null, coreConfig, core);\r\n var storageConfig = ctx.getExtCfg(_self.identifier, defaultOfflineChannelConfig);\r\n var channelIds = storageConfig.primaryOnlineChannelId;\r\n if (channelIds && channelIds[_DYN_LENGTH /* @min:%2elength */]) {\r\n arrForEach(channelIds, function (id) {\r\n var plugin = core.getPlugin(id);\r\n var channel = plugin && plugin.plugin;\r\n if (channel) {\r\n _dependencyPlugin = channel;\r\n return;\r\n }\r\n });\r\n }\r\n }\r\n return _dependencyPlugin;\r\n }\r\n function _hasEvts() {\r\n var hasEvts = false;\r\n objForEachKey(_inMemoMap, function (key) {\r\n var inMemoBatch = _inMemoMap[key];\r\n if (inMemoBatch && inMemoBatch.count()) {\r\n hasEvts = true;\r\n return -1;\r\n }\r\n });\r\n return hasEvts;\r\n }\r\n function _addEvtToMap(item) {\r\n // if split evts is false, all events will be saved into EventPersistence.Normal batch\r\n var mapKey = EventPersistence[_DYN__NORMAL /* @min:%2eNormal */];\r\n if (_splitEvts && item[_DYN_PERSISTENCE /* @min:%2epersistence */]) {\r\n mapKey = item[_DYN_PERSISTENCE /* @min:%2epersistence */];\r\n }\r\n var inMemoBatch = _inMemoMap[mapKey];\r\n return inMemoBatch[_DYN_ADD_EVENT /* @min:%2eaddEvent */](item);\r\n }\r\n function _callNotification(evtName, theArgs) {\r\n callNotification(_notificationManager, evtName, theArgs);\r\n }\r\n function _evtDropNotification(events, reason) {\r\n if (events && events[_DYN_LENGTH /* @min:%2elength */]) {\r\n _callNotification(EVT_DISCARD_STR, [events, reason]);\r\n }\r\n return;\r\n }\r\n function _sentNotification(batch) {\r\n if (batch && batch[_DYN_DATA /* @min:%2edata */]) {\r\n _callNotification(EVT_SENT_STR, [batch]);\r\n }\r\n return;\r\n }\r\n function _storeNotification(events) {\r\n if (events && events[_DYN_LENGTH /* @min:%2elength */]) {\r\n _callNotification(EVT_STORE_STR, [events]);\r\n }\r\n return;\r\n }\r\n });\r\n return _this;\r\n }\r\n /* ================================================================================================================\r\n * DO NOT add any code to these empty implementations as any code defined here will be removed, as\r\n * this class is using @dynamicProto which will implement the methods during the execution of the\r\n * dynamicProto() in the constructor.\r\n *\r\n * The final generated files will also have these implementations removed as part of the packaging process.\r\n *\r\n * These empty definitions exists only to keep the generated TypeScript definition files aligned with the\r\n * actual resulting implementation, this is so that TS is still happy to create extension classes from the\r\n * resulting definitions.\r\n *\r\n * This also keeps the generated *.d.ts files and documentation the same as they where prior to using dynamicProto()\r\n */\r\n /**\r\n * The function does the initial set up. It adds a notification listener to determine which events to remove.\r\n * @param coreConfig - The core configuration.\r\n * @param core - The AppInsights core.\r\n * @param extensions - An array of all the plugins being used.\r\n */\r\n OfflineChannel.prototype.initialize = function (coreConfig, core, extensions, pluginChain) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Process an event to add it to the local storage and then pass it to the next plugin.\r\n * @param event - The event that needs to be stored.\r\n * @param itemCtx - This is the context for the current request, ITelemetryPlugin instances\r\n * can optionally use this to access the current core instance or define / pass additional information\r\n * to later plugins (vs appending items to the telemetry item)\r\n */\r\n OfflineChannel.prototype.processTelemetry = function (evt, itemCtx) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n // ================================================================================================================\r\n /**\r\n * Pauses the adding of new events to the plugin. Also calls pause on the next\r\n * plugin.\r\n */\r\n OfflineChannel.prototype.pause = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Resumes the adding of new events to the plugin. Also calls resume on\r\n * the next plugin. Adds all events in storage to the next plugin.\r\n */\r\n OfflineChannel.prototype.resume = function () {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Get offline listener\r\n * @returns offline listener\r\n */\r\n OfflineChannel.prototype.getOfflineListener = 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 *No op\r\n */\r\n OfflineChannel.prototype.flush = function (sync, callBack, sendReason) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Flush the batched events synchronously (if possible -- based on configuration).\r\n * Will not flush if the Send has been paused.\r\n */\r\n OfflineChannel.prototype.onunloadFlush = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Flush the next stored event batch\r\n */\r\n OfflineChannel.prototype.sendNextBatch = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n return OfflineChannel;\r\n}(BaseTelemetryPlugin));\r\nexport { OfflineChannel };\r\n//# sourceMappingURL=OfflineChannel.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC,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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;8DAkBM;AACN;AACA;;;;;2DAwCM,CAAC;;;;;0BACmB;AAC1B;AACA;AACA"}
|
package/dist-es5/Sender.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Offline Channel, 0.3.5-nightly3.2411-
|
|
2
|
+
* Application Insights JavaScript SDK - Offline Channel, 0.3.5-nightly3.2411-13
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
export { BatchSendStatus, BatchStoreStatus, StorageType } from "./Interfaces/IOfflineBatch";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/applicationinsights-offlinechannel-js",
|
|
3
|
-
"version": "0.3.5-nightly3.2411-
|
|
3
|
+
"version": "0.3.5-nightly3.2411-13",
|
|
4
4
|
"description": "Microsoft Application Insights JavaScript SDK Offline Channel",
|
|
5
5
|
"homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme",
|
|
6
6
|
"author": "Microsoft Application Insights Team",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@microsoft/dynamicproto-js": "^2.0.3",
|
|
30
30
|
"@microsoft/applicationinsights-shims": "3.0.1",
|
|
31
|
-
"@microsoft/applicationinsights-core-js": "3.3.5-nightly3.2411-
|
|
32
|
-
"@microsoft/applicationinsights-common": "3.3.5-nightly3.2411-
|
|
31
|
+
"@microsoft/applicationinsights-core-js": "3.3.5-nightly3.2411-13",
|
|
32
|
+
"@microsoft/applicationinsights-common": "3.3.5-nightly3.2411-13",
|
|
33
33
|
"@nevware21/ts-utils": ">= 0.11.3 < 2.x",
|
|
34
34
|
"@nevware21/ts-async": ">= 0.5.2 < 2.x"
|
|
35
35
|
},
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Microsoft Application Insights JavaScript SDK Offline Channel, 0.3.5-nightly3.2411-
|
|
2
|
+
* Microsoft Application Insights JavaScript SDK Offline Channel, 0.3.5-nightly3.2411-13
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* Microsoft Application Insights Team
|
|
@@ -387,7 +387,7 @@ export declare interface IOfflineProvider {
|
|
|
387
387
|
* @param itemCtx - This is the context for the current request, ITelemetryPlugin instances
|
|
388
388
|
* can optionally use this to access the current core instance or define / pass additional information
|
|
389
389
|
* to later plugins (vs appending items to the telemetry item)
|
|
390
|
-
* @
|
|
390
|
+
* @returns Either the added element (for synchronous operation) or a Promise for an asynchronous processing
|
|
391
391
|
*/
|
|
392
392
|
addEvent(key: string, evt: IStorageTelemetryItem, itemCtx: IProcessTelemetryContext): IStorageTelemetryItem | IPromise<IStorageTelemetryItem> | null;
|
|
393
393
|
/**
|
|
@@ -403,12 +403,12 @@ export declare interface IOfflineProvider {
|
|
|
403
403
|
/**
|
|
404
404
|
* Removes the value associated with the provided key
|
|
405
405
|
* @param evts - The events to be removed
|
|
406
|
-
* @
|
|
406
|
+
* @returns Either the removed item array (for synchronous operation) or a Promise for an asynchronous processing
|
|
407
407
|
*/
|
|
408
408
|
removeEvents(evts: IStorageTelemetryItem[]): IStorageTelemetryItem[] | IPromise<IStorageTelemetryItem[]> | null;
|
|
409
409
|
/**
|
|
410
410
|
* Removes all entries from the storage provider, if there are any.
|
|
411
|
-
* @
|
|
411
|
+
* @returns Either the removed item array (for synchronous operation) or a Promise for an asynchronous processing
|
|
412
412
|
*/
|
|
413
413
|
clear(): IStorageTelemetryItem[] | IPromise<IStorageTelemetryItem[]> | null;
|
|
414
414
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Microsoft Application Insights JavaScript SDK Offline Channel, 0.3.5-nightly3.2411-
|
|
2
|
+
* Microsoft Application Insights JavaScript SDK Offline Channel, 0.3.5-nightly3.2411-13
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* Microsoft Application Insights Team
|
|
@@ -441,7 +441,7 @@ declare namespace ApplicationInsights {
|
|
|
441
441
|
* @param unloadComplete - An optional callback that will be called once the unload has completed
|
|
442
442
|
* @param cbTimeout - An optional timeout to wait for any flush operations to complete before proceeding with the
|
|
443
443
|
* unload. Defaults to 5 seconds.
|
|
444
|
-
* @
|
|
444
|
+
* @returns Nothing or if occurring asynchronously a [IPromise](https://nevware21.github.io/ts-async/typedoc/interfaces/IPromise.html)
|
|
445
445
|
* which will be resolved once the unload is complete, the [IPromise](https://nevware21.github.io/ts-async/typedoc/interfaces/IPromise.html)
|
|
446
446
|
* will only be returned when no callback is provided and isAsync is true
|
|
447
447
|
*/
|
|
@@ -1259,7 +1259,7 @@ declare namespace ApplicationInsights {
|
|
|
1259
1259
|
* Unload and remove any state that this ICookieMgr may be holding, this is generally called when the
|
|
1260
1260
|
* owning SDK is being unloaded.
|
|
1261
1261
|
* @param isAsync - Can the unload be performed asynchronously (default)
|
|
1262
|
-
* @
|
|
1262
|
+
* @returns If the unload occurs synchronously then nothing should be returned, if happening asynchronously then
|
|
1263
1263
|
* the function should return an [IPromise](https://nevware21.github.io/ts-async/typedoc/interfaces/IPromise.html)
|
|
1264
1264
|
* / Promise to allow any listeners to wait for the operation to complete.
|
|
1265
1265
|
*/
|
|
@@ -1373,7 +1373,7 @@ declare namespace ApplicationInsights {
|
|
|
1373
1373
|
* Unload and remove any state that this IDiagnosticLogger may be holding, this is generally called when the
|
|
1374
1374
|
* owning SDK is being unloaded.
|
|
1375
1375
|
* @param isAsync - Can the unload be performed asynchronously (default)
|
|
1376
|
-
* @
|
|
1376
|
+
* @returns If the unload occurs synchronously then nothing should be returned, if happening asynchronously then
|
|
1377
1377
|
* the function should return an [IPromise](https://nevware21.github.io/ts-async/typedoc/interfaces/IPromise.html)
|
|
1378
1378
|
* / Promise to allow any listeners to wait for the operation to complete.
|
|
1379
1379
|
*/
|
|
@@ -1750,7 +1750,7 @@ declare namespace ApplicationInsights {
|
|
|
1750
1750
|
* Unload and remove any state that this INotificationListener may be holding, this is generally called when the
|
|
1751
1751
|
* owning Manager is being unloaded.
|
|
1752
1752
|
* @param isAsync - Can the unload be performed asynchronously (default)
|
|
1753
|
-
* @
|
|
1753
|
+
* @returns If the unload occurs synchronously then nothing should be returned, if happening asynchronously then
|
|
1754
1754
|
* the function should return an [IPromise](https://nevware21.github.io/ts-async/typedoc/interfaces/IPromise.html)
|
|
1755
1755
|
* / Promise to allow any listeners to wait for the operation to complete.
|
|
1756
1756
|
*/
|
|
@@ -1819,7 +1819,7 @@ declare namespace ApplicationInsights {
|
|
|
1819
1819
|
* Unload and remove any state that this INotificationManager may be holding, this is generally called when the
|
|
1820
1820
|
* owning SDK is being unloaded.
|
|
1821
1821
|
* @param isAsync - Can the unload be performed asynchronously (default)
|
|
1822
|
-
* @
|
|
1822
|
+
* @returns If the unload occurs synchronously then nothing should be returned, if happening asynchronously then
|
|
1823
1823
|
* the function should return an [IPromise](https://nevware21.github.io/ts-async/typedoc/interfaces/IPromise.html)
|
|
1824
1824
|
* / Promise to allow any listeners to wait for the operation to complete.
|
|
1825
1825
|
*/
|
|
@@ -2028,7 +2028,7 @@ declare namespace ApplicationInsights {
|
|
|
2028
2028
|
* @param itemCtx - This is the context for the current request, ITelemetryPlugin instances
|
|
2029
2029
|
* can optionally use this to access the current core instance or define / pass additional information
|
|
2030
2030
|
* to later plugins (vs appending items to the telemetry item)
|
|
2031
|
-
* @
|
|
2031
|
+
* @returns Either the added element (for synchronous operation) or a Promise for an asynchronous processing
|
|
2032
2032
|
*/
|
|
2033
2033
|
addEvent(key: string, evt: IStorageTelemetryItem, itemCtx: IProcessTelemetryContext): IStorageTelemetryItem | IPromise<IStorageTelemetryItem> | null;
|
|
2034
2034
|
/**
|
|
@@ -2044,12 +2044,12 @@ declare namespace ApplicationInsights {
|
|
|
2044
2044
|
/**
|
|
2045
2045
|
* Removes the value associated with the provided key
|
|
2046
2046
|
* @param evts - The events to be removed
|
|
2047
|
-
* @
|
|
2047
|
+
* @returns Either the removed item array (for synchronous operation) or a Promise for an asynchronous processing
|
|
2048
2048
|
*/
|
|
2049
2049
|
removeEvents(evts: IStorageTelemetryItem[]): IStorageTelemetryItem[] | IPromise<IStorageTelemetryItem[]> | null;
|
|
2050
2050
|
/**
|
|
2051
2051
|
* Removes all entries from the storage provider, if there are any.
|
|
2052
|
-
* @
|
|
2052
|
+
* @returns Either the removed item array (for synchronous operation) or a Promise for an asynchronous processing
|
|
2053
2053
|
*/
|
|
2054
2054
|
clear(): IStorageTelemetryItem[] | IPromise<IStorageTelemetryItem[]> | null;
|
|
2055
2055
|
/**
|