@microsoft/applicationinsights-offlinechannel-js 0.1.1-nightly3.2402-20 → 0.1.1-nightly3.2403-01

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +1 -1
  2. package/dist/es5/applicationinsights-offlinechannel-js.js +1506 -1382
  3. package/dist/es5/applicationinsights-offlinechannel-js.js.map +1 -1
  4. package/dist/es5/applicationinsights-offlinechannel-js.min.js +2 -2
  5. package/dist/es5/applicationinsights-offlinechannel-js.min.js.map +1 -1
  6. package/dist-es5/Helpers/Utils.js +79 -3
  7. package/dist-es5/Helpers/Utils.js.map +1 -1
  8. package/dist-es5/InMemoryBatch.js +3 -3
  9. package/dist-es5/InMemoryBatch.js.map +1 -1
  10. package/dist-es5/Interfaces/IInMemoryBatch.js +1 -1
  11. package/dist-es5/Interfaces/IOfflineBatch.js +1 -1
  12. package/dist-es5/Interfaces/IOfflineIndexDb.js +1 -1
  13. package/dist-es5/Interfaces/IOfflineProvider.js +1 -1
  14. package/dist-es5/Interfaces/ISender.js +1 -1
  15. package/dist-es5/OfflineBatchHandler.js +3 -3
  16. package/dist-es5/OfflineBatchHandler.js.map +1 -1
  17. package/dist-es5/OfflineChannel.js +107 -39
  18. package/dist-es5/OfflineChannel.js.map +1 -1
  19. package/dist-es5/PayloadHelper.js +1 -1
  20. package/dist-es5/Providers/IndexDbHelper.js +1 -1
  21. package/dist-es5/Providers/IndexDbProvider.js +18 -12
  22. package/dist-es5/Providers/IndexDbProvider.js.map +1 -1
  23. package/dist-es5/Providers/WebStorageProvider.js +35 -33
  24. package/dist-es5/Providers/WebStorageProvider.js.map +1 -1
  25. package/dist-es5/Sender.js +1 -1
  26. package/dist-es5/__DynamicConstants.js +16 -13
  27. package/dist-es5/__DynamicConstants.js.map +1 -1
  28. package/dist-es5/applicationinsights-offlinechannel-js.js +1 -1
  29. package/package.json +3 -3
  30. package/types/applicationinsights-offlinechannel-js.d.ts +8 -4
  31. package/types/applicationinsights-offlinechannel-js.namespaced.d.ts +45 -4
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Application Insights JavaScript SDK - Offline Channel, 0.1.1-nightly3.2402-20
2
+ * Application Insights JavaScript SDK - Offline Channel, 0.1.1-nightly3.2403-01
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  */
5
5
  (function (global, factory) {
@@ -1030,6 +1030,15 @@
1030
1030
 
1031
1031
  var createEnumStyle = createEnum;
1032
1032
 
1033
+ var EventsDiscardedReason = createEnumStyle({
1034
+ Unknown: 0 ,
1035
+ NonRetryableStatus: 1 ,
1036
+ InvalidEvent: 2 ,
1037
+ SizeLimitExceeded: 3 ,
1038
+ KillSwitch: 4 ,
1039
+ QueueFull: 5
1040
+ });
1041
+
1033
1042
  var _DYN_TO_LOWER_CASE = "toLowerCase";
1034
1043
  var _DYN_BLK_VAL = "blkVal";
1035
1044
  var _DYN_LENGTH$1 = "length";
@@ -3643,11 +3652,139 @@
3643
3652
  }
3644
3653
  }
3645
3654
 
3655
+ var DisabledPropertyName = "Microsoft_ApplicationInsights_BypassAjaxInstrumentation";
3656
+
3657
+ var _DYN_PUSH$1 = "push";
3658
+
3659
+ var EventPersistence = createEnumStyle({
3660
+ Normal: 1 ,
3661
+ Critical: 2
3662
+ });
3663
+
3664
+ function _disableEvents(target, evtNamespace) {
3665
+ eventOff(target, null, null, evtNamespace);
3666
+ }
3667
+ function createOfflineListener(parentEvtNamespace) {
3668
+ var _document = getDocument();
3669
+ var _navigator = getNavigator();
3670
+ var _isListening = false;
3671
+ var listenerList = [];
3672
+ var rState = 1 ;
3673
+ if (_navigator && !isNullOrUndefined(_navigator.onLine) && !_navigator.onLine) {
3674
+ rState = 2 ;
3675
+ }
3676
+ var uState = 0 ;
3677
+ var _currentState = calCurrentState();
3678
+ var _evtNamespace = mergeEvtNamespace(createUniqueNamespace("OfflineListener"), parentEvtNamespace);
3679
+ try {
3680
+ if (_enableEvents(getWindow())) {
3681
+ _isListening = true;
3682
+ }
3683
+ if (_document) {
3684
+ var target = _document.body || _document;
3685
+ if (target.ononline) {
3686
+ if (_enableEvents(target)) {
3687
+ _isListening = true;
3688
+ }
3689
+ }
3690
+ }
3691
+ }
3692
+ catch (e) {
3693
+ _isListening = false;
3694
+ }
3695
+ function _enableEvents(target) {
3696
+ var enabled = false;
3697
+ if (target) {
3698
+ enabled = eventOn(target, "online", _setOnline, _evtNamespace);
3699
+ if (enabled) {
3700
+ eventOn(target, "offline", _setOffline, _evtNamespace);
3701
+ }
3702
+ }
3703
+ return enabled;
3704
+ }
3705
+ function _isOnline() {
3706
+ return _currentState;
3707
+ }
3708
+ function calCurrentState() {
3709
+ if (uState === 2 || rState === 2 ) {
3710
+ return false;
3711
+ }
3712
+ return true;
3713
+ }
3714
+ function listnerNoticeCheck() {
3715
+ var newState = calCurrentState();
3716
+ if (_currentState !== newState) {
3717
+ _currentState = newState;
3718
+ arrForEach(listenerList, function (callback) {
3719
+ var offlineState = {
3720
+ isOnline: _currentState,
3721
+ rState: rState,
3722
+ uState: uState
3723
+ };
3724
+ try {
3725
+ callback(offlineState);
3726
+ }
3727
+ catch (e) {
3728
+ }
3729
+ });
3730
+ }
3731
+ }
3732
+ function setOnlineState(newState) {
3733
+ uState = newState;
3734
+ listnerNoticeCheck();
3735
+ }
3736
+ function _setOnline() {
3737
+ rState = 1 ;
3738
+ listnerNoticeCheck();
3739
+ }
3740
+ function _setOffline() {
3741
+ rState = 2 ;
3742
+ listnerNoticeCheck();
3743
+ }
3744
+ function _unload() {
3745
+ var win = getWindow();
3746
+ if (win && _isListening) {
3747
+ _disableEvents(win, _evtNamespace);
3748
+ if (_document) {
3749
+ var target = _document.body || _document;
3750
+ if (!isUndefined(target.ononline)) {
3751
+ _disableEvents(target, _evtNamespace);
3752
+ }
3753
+ }
3754
+ _isListening = false;
3755
+ }
3756
+ }
3757
+ function addListener(callback) {
3758
+ listenerList[_DYN_PUSH$1 ](callback);
3759
+ return {
3760
+ rm: function () {
3761
+ var index = listenerList.indexOf(callback);
3762
+ if (index > -1) {
3763
+ return listenerList.splice(index, 1);
3764
+ }
3765
+ else {
3766
+ return;
3767
+ }
3768
+ }
3769
+ };
3770
+ }
3771
+ return {
3772
+ isOnline: _isOnline,
3773
+ isListening: function () { return _isListening; },
3774
+ unload: _unload,
3775
+ addListener: addListener,
3776
+ setOnlineState: setOnlineState
3777
+ };
3778
+ }
3779
+
3780
+ var BreezeChannelIdentifier = "AppInsightsChannelPlugin";
3781
+
3646
3782
  var _DYN_ENDPOINT = "endpoint";
3647
3783
  var _DYN_ADD_EVENT = "addEvent";
3648
3784
  var _DYN_COUNT = "count";
3649
- var _DYN_PUSH$1 = "push";
3785
+ var _DYN_PUSH = "push";
3650
3786
  var _DYN_LENGTH = "length";
3787
+ var _DYN_CLEAR = "clear";
3651
3788
  var _DYN_GET_ITEMS = "getItems";
3652
3789
  var _DYN_SPLIT = "split";
3653
3790
  var _DYN_SPLICE = "splice";
@@ -3669,15 +3806,18 @@
3669
3806
  var _DYN_INDEX_OF = "indexOf";
3670
3807
  var _DYN_IS_ONLINE = "isOnline";
3671
3808
  var _DYN_CANCEL = "cancel";
3672
- var _DYN_REFRESH = "refresh";
3673
3809
  var _DYN_PROCESS_NEXT = "processNext";
3674
3810
  var _DYN_PERSISTENCE = "persistence";
3811
+ var _DYN_ONUNLOAD_FLUSH = "onunloadFlush";
3812
+ var _DYN_BATCH_HANDLER = "batchHandler";
3675
3813
  var _DYN_MIN_PERSISTENCE_CACH0 = "minPersistenceCacheLevel";
3814
+ var _DYN_REFRESH = "refresh";
3676
3815
  var _DYN_IS_COMPLETELY_IDLE = "isCompletelyIdle";
3677
3816
  var _DYN_CRITICAL_CNT = "criticalCnt";
3678
3817
  var _DYN_GET_OFFLINE_SUPPORT = "getOfflineSupport";
3679
3818
  var _DYN_OVERRIDE_INSTRUMENTA1 = "overrideInstrumentationKey";
3680
3819
  var _DYN_INSTRUMENTATION_KEY = "instrumentationKey";
3820
+ var _DYN_NOTIFICATION_MGR = "notificationMgr";
3681
3821
  var _DYN_TO_STRING = "toString";
3682
3822
  var _DYN_URL_STRING = "urlString";
3683
3823
  var _DYN_SET_REQUEST_HEADER = "setRequestHeader";
@@ -3703,1515 +3843,1438 @@
3703
3843
  var _DYN_SUBSTRING = "substring";
3704
3844
  var _DYN_STORAGE_KEY_PREFIX = "storageKeyPrefix";
3705
3845
  var _DYN_IN_STORAGE_MAX_TIME = "inStorageMaxTime";
3706
- var _DYN_MAX_STORAGE_SIZE_IN_2 = "maxStorageSizeInBytes";
3707
- var _DYN__EVENTS_TO_DROP_PER_3 = "EventsToDropPerTime";
3708
- var _DYN_MAX_CRITICAL_EVTS_DR4 = "maxCriticalEvtsDropCnt";
3709
- var _DYN_SUPPORTS_SYNC_REQUES5 = "supportsSyncRequests";
3846
+ var _DYN__EVENTS_TO_DROP_PER_2 = "EventsToDropPerTime";
3847
+ var _DYN_MAX_CRITICAL_EVTS_DR3 = "maxCriticalEvtsDropCnt";
3848
+ var _DYN_SUPPORTS_SYNC_REQUES4 = "supportsSyncRequests";
3710
3849
  var _DYN_REMOVE_ITEM = "removeItem";
3711
3850
  var _DYN_EVTS = "evts";
3712
3851
  var _DYN_LAST_ACCESS_TIME = "lastAccessTime";
3713
3852
 
3714
- function getEndpointDomain(endpoint) {
3715
- try {
3716
- var url = endpoint[_DYN_REPLACE ](/^https?:\/\/|^www\./, "");
3717
- url = url[_DYN_REPLACE ](/\?/, "/");
3718
- var arr = url[_DYN_SPLIT ]("/");
3719
- if (arr && arr[_DYN_LENGTH ] > 0) {
3720
- return arr[0];
3853
+ var IndexedDBNames = ["indexedDB" ];
3854
+ var DbReadWrite = "readwrite";
3855
+ var Result = "result";
3856
+ var ErrorMessageUnableToOpenDb = "DBError: Unable to open database";
3857
+ var ErrorMessageDbUpgradeRequired = "DBError: Database upgrade required";
3858
+ var ErrorMessageDbNotOpen = "Database is not open";
3859
+ var ErrorMessageDbDoesNotExist = "DBError: Database does not exist";
3860
+ var ErrorMessageFailedToDeleteDatabase = "DBError: Failed to delete the database";
3861
+ var ErrorMessageDbNotSupported = "DBError: Feature not supported";
3862
+ var ErrorMessageFailedToOpenCursor = "DBError: Failed to Open Cursor";
3863
+ var _dbContext = [];
3864
+ function _getDbContext(dbName, diagLog) {
3865
+ var _a;
3866
+ var dbCtx = null;
3867
+ for (var lp = 0; lp < _dbContext[_DYN_LENGTH ]; lp++) {
3868
+ dbCtx = _dbContext[lp];
3869
+ if (dbCtx[_DYN_NAME ] === dbName) {
3870
+ return dbCtx;
3721
3871
  }
3722
3872
  }
3723
- catch (e) {
3724
- }
3725
- return endpoint;
3873
+ dbCtx = (_a = {},
3874
+ _a[_DYN_NAME ] = dbName,
3875
+ _a.sch = createTaskScheduler(createAsyncPromise, "IndexedDbHelper[" + dbName + "]"),
3876
+ _a.dbHdl = [],
3877
+ _a.add = function (db) {
3878
+ dbCtx.dbHdl[_DYN_PUSH ](db);
3879
+ _debugLog(dbName, "- dbOpened (add) -- hdls [" + dbCtx.dbHdl[_DYN_LENGTH ] + "]");
3880
+ },
3881
+ _a[_DYN_REMOVE ] = function (db) {
3882
+ var hdls = dbCtx[_DYN_DB_HDL ];
3883
+ for (var lp = 0; lp < hdls[_DYN_LENGTH ]; lp++) {
3884
+ if (hdls[lp] === db) {
3885
+ hdls[_DYN_SPLICE ](lp, 1);
3886
+ break;
3887
+ }
3888
+ }
3889
+ _debugLog(dbName, "- dbClosed (remove) -- hdls [" + dbCtx.dbHdl[_DYN_LENGTH ] + "]");
3890
+ },
3891
+ _a.isOpen = function () {
3892
+ return dbCtx.dbHdl[_DYN_LENGTH ] > 0;
3893
+ },
3894
+ _a.openHdl = function () {
3895
+ if (dbCtx.dbHdl[_DYN_LENGTH ] > 0) {
3896
+ return dbCtx[_DYN_DB_HDL ][0];
3897
+ }
3898
+ return null;
3899
+ },
3900
+ _a);
3901
+ _dbContext[_DYN_PUSH ](dbCtx);
3902
+ return dbCtx;
3726
3903
  }
3727
- function isGreaterThanZero(value) {
3728
- return value >= 0;
3904
+ function _scheduleEvent(dbName, actionName, startEvent, evtTimeOut) {
3905
+ var dbCtx = _getDbContext(dbName);
3906
+ return dbCtx.sch.queue(startEvent, actionName, evtTimeOut);
3729
3907
  }
3730
- var _base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
3731
- function base64Encode(data) {
3732
- var line = "";
3733
- var input = "";
3734
- if (isString(data)) {
3735
- input = data;
3736
- }
3737
- else {
3738
- input = data[_DYN_TO_STRING ]();
3739
- }
3740
- var output = "";
3741
- var chr1, chr2, chr3;
3742
- var lp = 0;
3743
- while (lp < input[_DYN_LENGTH ]) {
3744
- chr1 = input[_DYN_CHAR_CODE_AT ](lp++);
3745
- chr2 = input[_DYN_CHAR_CODE_AT ](lp++);
3746
- chr3 = input[_DYN_CHAR_CODE_AT ](lp++);
3747
- line += _base64[_DYN_CHAR_AT ](chr1 >> 2);
3748
- line += _base64[_DYN_CHAR_AT ](((chr1 & 3) << 4) | (chr2 >> 4));
3749
- if (isNaN(chr2)) {
3750
- line += "==";
3908
+ function getDbFactory() {
3909
+ var global = getGlobal() || {};
3910
+ var dbFactory = null;
3911
+ if (global) {
3912
+ try {
3913
+ for (var lp = 0; lp < IndexedDBNames[_DYN_LENGTH ]; lp++) {
3914
+ dbFactory = global[IndexedDBNames[lp]];
3915
+ if (dbFactory && isFunction(dbFactory.open)) {
3916
+ return dbFactory;
3917
+ }
3918
+ }
3751
3919
  }
3752
- else {
3753
- line += _base64[_DYN_CHAR_AT ](((chr2 & 15) << 2) | (chr3 >> 6));
3754
- line += isNaN(chr3) ? "=" : _base64[_DYN_CHAR_AT ](chr3 & 63);
3920
+ catch (e) {
3921
+ dbFactory = null;
3755
3922
  }
3756
3923
  }
3757
- output += line;
3758
- return output;
3924
+ return dbFactory;
3759
3925
  }
3760
- function base64Decode(input) {
3761
- var output = "";
3762
- var chr1, chr2, chr3;
3763
- var enc1, enc2, enc3, enc4;
3764
- var i = 0;
3765
- input = input[_DYN_REPLACE ](/[^A-Za-z0-9\+\/\=]/g, "");
3766
- while (i < input[_DYN_LENGTH ]) {
3767
- enc1 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
3768
- enc2 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
3769
- enc3 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
3770
- enc4 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
3771
- chr1 = (enc1 << 2) | (enc2 >> 4);
3772
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
3773
- chr3 = ((enc3 & 3) << 6) | enc4;
3774
- output = output + String[_DYN_FROM_CHAR_CODE ](chr1);
3775
- if (enc3 != 64) {
3776
- output = output + String[_DYN_FROM_CHAR_CODE ](chr2);
3777
- }
3778
- if (enc4 != 64) {
3779
- output = output + String[_DYN_FROM_CHAR_CODE ](chr3);
3780
- }
3781
- }
3782
- var arr = output[_DYN_SPLIT ](",").map(function (c) { return Number(c); });
3783
- return new Uint8Array(arr);
3784
- }
3785
- function getTimeId() {
3786
- var time = (new Date())[_DYN_GET_TIME ]();
3787
- var random = strSubstr(generateW3CId(), 0, 8);
3788
- return time + "." + random;
3789
- }
3790
- function getTimeFromId(id) {
3791
- try {
3792
- var regex = new RegExp(/\d+\./g);
3793
- if (id && isString(id) && regex.test(id)) {
3794
- var arr = id[_DYN_SPLIT ](".");
3795
- return parseInt(arr[0]);
3796
- }
3797
- }
3798
- catch (e) {
3799
- }
3800
- return 0;
3801
- }
3802
-
3803
- var PayloadHelper = /** @class */ (function () {
3804
- function PayloadHelper(logger) {
3805
- dynamicProto(PayloadHelper, this, function (_self) {
3806
- _self.base64ToArr = function (input) {
3807
- if (!input || !input[_DYN_IS_ARR ]) {
3808
- return input;
3809
- }
3810
- try {
3811
- var data = input[_DYN_DATA ];
3812
- if (data) {
3813
- input[_DYN_DATA ] = base64Decode(data);
3814
- }
3815
- return input;
3816
- }
3817
- catch (e) {
3818
- _throwInternal(logger, 1 , 48 , (e && isFunction(e[_DYN_TO_STRING ])) ? e[_DYN_TO_STRING ]() : "Error serializing object", null, true);
3819
- }
3820
- return null;
3821
- };
3822
- _self.base64ToStr = function (item) {
3823
- if (!item || !item[_DYN_IS_ARR ]) {
3824
- return item;
3825
- }
3826
- try {
3827
- var data = item[_DYN_DATA ];
3828
- if (data) {
3829
- item[_DYN_DATA ] = base64Encode(data);
3830
- }
3831
- return item;
3832
- }
3833
- catch (e) {
3834
- _throwInternal(logger, 1 , 48 , (e && isFunction(e[_DYN_TO_STRING ])) ? e[_DYN_TO_STRING ]() : "Error serializing object", null, true);
3835
- }
3836
- return null;
3837
- };
3838
- });
3839
- }
3840
- PayloadHelper.__ieDyn=1;
3841
- return PayloadHelper;
3842
- }());
3843
-
3844
- var EventsToDropAtOneTime$1 = 10;
3845
- var Version = "1";
3846
- var DefaultStorageKey = "AIOffline";
3847
- var DefaultMaxStorageSizeInBytes = 5000000;
3848
- var MaxCriticalEvtsDropCnt$1 = 2;
3849
- var DefaultMaxInStorageTime = 10080000;
3850
- function _isQuotaExceeded(storage, e) {
3851
- var result = false;
3852
- if (e instanceof DOMException) {
3853
- if (e.code === 22 || e[_DYN_NAME ] === "QuotaExceededError" ||
3854
- e.code === 1014 || e[_DYN_NAME ] === "NS_ERROR_DOM_QUOTA_REACHED") {
3855
- if (storage && storage[_DYN_LENGTH ] !== 0) {
3856
- result = true;
3857
- }
3858
- }
3859
- }
3860
- return result;
3861
- }
3862
- function _getAvailableStorage(type) {
3863
- var global = getGlobal() || {};
3864
- var storage = null;
3865
- try {
3866
- storage = (global[type]);
3867
- if (storage) {
3868
- var x = "__storage_test__";
3869
- storage.setItem(x, x);
3870
- storage[_DYN_REMOVE_ITEM ](x);
3871
- }
3872
- }
3873
- catch (e) {
3874
- if (!_isQuotaExceeded(storage, e)) {
3875
- storage = null;
3876
- }
3877
- }
3878
- return storage;
3879
- }
3880
- function _forEachMap(map, callback) {
3881
- if (map) {
3882
- var keys = objKeys(map);
3883
- for (var lp = 0; lp < keys[_DYN_LENGTH ]; lp++) {
3884
- var key = keys[lp];
3885
- if (!callback(map[key], key)) {
3886
- break;
3887
- }
3888
- }
3889
- }
3890
- }
3891
- function _dropEventsUpToPersistence$1(maxCnt, events, eventsToDropAtOneTime) {
3892
- var dropKeys = [];
3893
- var persistenceCnt = 0;
3894
- var droppedEvents = 0;
3895
- while (persistenceCnt <= maxCnt && droppedEvents < eventsToDropAtOneTime) {
3896
- _forEachMap(events, function (evt, key) {
3897
- if (evt[_DYN_CRITICAL_CNT ] === persistenceCnt) {
3898
- dropKeys[_DYN_PUSH$1 ](key);
3899
- droppedEvents++;
3900
- }
3901
- return (droppedEvents < eventsToDropAtOneTime);
3902
- });
3903
- if (droppedEvents > 0) {
3904
- for (var lp = 0; lp < dropKeys[_DYN_LENGTH ]; lp++) {
3905
- delete events[dropKeys[lp]];
3906
- }
3907
- return true;
3908
- }
3909
- persistenceCnt++;
3926
+ function _debugLog(dbName, message) {
3927
+ if (getInst("QUnit")) {
3928
+ console && console.log("IndexedDbHelper [" + dbName + "] " + message);
3910
3929
  }
3911
- return droppedEvents > 0;
3912
3930
  }
3913
- function _dropMaxTimeEvents$1(maxStorageTime, events, eventsToDropAtOneTime) {
3914
- var dropKeys = [];
3915
- var droppedEvents = 0;
3916
- var currentTime = (new Date())[_DYN_GET_TIME ]() + 1;
3917
- var minStartTime = (currentTime - maxStorageTime);
3918
- try {
3919
- _forEachMap(events, function (evt, key) {
3920
- var id = getTimeFromId(key);
3921
- if (id <= minStartTime) {
3922
- dropKeys[_DYN_PUSH$1 ](key);
3923
- droppedEvents++;
3924
- }
3925
- return (droppedEvents < eventsToDropAtOneTime);
3926
- });
3927
- if (droppedEvents > 0) {
3928
- for (var lp = 0; lp < dropKeys[_DYN_LENGTH ]; lp++) {
3929
- delete events[dropKeys[lp]];
3930
- }
3931
- return true;
3932
- }
3933
- }
3934
- catch (e) {
3935
- }
3936
- return droppedEvents > 0;
3931
+ function _eventReject(dbName, rejectMessage, rejectFunc, evtName) {
3932
+ return function (evt) {
3933
+ rejectFunc(new Error(rejectMessage));
3934
+ _debugLog(dbName, "[" + evtName + "] event rejected");
3935
+ };
3937
3936
  }
3938
- var WebStorageProvider = /** @class */ (function () {
3939
- function WebStorageProvider(storageType, id, unloadHookContainer) {
3940
- dynamicProto(WebStorageProvider, this, function (_this) {
3941
- var _storage = null;
3942
- var _storageKeyPrefix = DefaultStorageKey;
3943
- var _maxStorageSizeInBytes = DefaultMaxStorageSizeInBytes;
3944
- var _payloadHelper = null;
3945
- var _storageKey = null;
3946
- var _endpoint = null;
3947
- var _maxStorageTime = null;
3948
- var _eventDropPerTime = null;
3949
- var _maxCriticalCnt = null;
3950
- _this.id = id;
3951
- _storage = _getAvailableStorage(storageType) || null;
3952
- _this["_getDbgPlgTargets"] = function () {
3953
- return [_storageKey, _maxStorageSizeInBytes, _maxStorageTime];
3954
- };
3955
- _this[_DYN_INITIALIZE ] = function (providerContext, endpointUrl) {
3956
- if (!_storage) {
3957
- return false;
3958
- }
3959
- var storageConfig = providerContext[_DYN_STORAGE_CONFIG ];
3960
- var itemCtx = providerContext[_DYN_ITEM_CTX ];
3961
- _payloadHelper = new PayloadHelper(itemCtx[_DYN_DIAG_LOG ]());
3962
- _endpoint = getEndpointDomain(endpointUrl || providerContext[_DYN_ENDPOINT ]);
3963
- var autoClean = !!storageConfig.autoClean;
3964
- var unloadHook = onConfigChange(storageConfig, function () {
3965
- _maxStorageSizeInBytes = storageConfig[_DYN_MAX_STORAGE_SIZE_IN_2 ] || DefaultMaxStorageSizeInBytes;
3966
- _maxStorageTime = storageConfig[_DYN_IN_STORAGE_MAX_TIME ] || DefaultMaxInStorageTime;
3967
- var dropNum = storageConfig[_DYN__EVENTS_TO_DROP_PER_3 ];
3968
- _eventDropPerTime = isNotNullOrUndefined(dropNum) ? dropNum : EventsToDropAtOneTime$1;
3969
- _maxCriticalCnt = storageConfig[_DYN_MAX_CRITICAL_EVTS_DR4 ] || MaxCriticalEvtsDropCnt$1;
3970
- });
3971
- unloadHookContainer && unloadHookContainer.add(unloadHook);
3972
- _storageKeyPrefix = storageConfig[_DYN_STORAGE_KEY_PREFIX ] || DefaultStorageKey;
3973
- _storageKey = _storageKeyPrefix + "_" + Version + "_" + _endpoint;
3974
- if (autoClean) {
3975
- _this.clean();
3976
- }
3977
- return true;
3978
- };
3979
- _this[_DYN_SUPPORTS_SYNC_REQUES5 ] = function () {
3980
- return true;
3937
+ var IndexedDbHelper = /** @class */ (function () {
3938
+ function IndexedDbHelper(diagLog) {
3939
+ var _dbFactory = getDbFactory() || null;
3940
+ dynamicProto(IndexedDbHelper, this, function (_this) {
3941
+ _this[_DYN_IS_AVAILABLE ] = function () {
3942
+ return !!_dbFactory;
3981
3943
  };
3982
- _this.getAllEvents = function (cnt) {
3983
- try {
3984
- if (!_storage) {
3985
- return;
3986
- }
3987
- return _getEvts(cnt);
3988
- }
3989
- catch (e) {
3990
- return createAsyncRejectedPromise(e);
3991
- }
3944
+ _this.openDb = function (dbName, dbVersion, processFunc, versionChangeFunc) {
3945
+ return _scheduleEvent(dbName, "openDb", function (evtName) {
3946
+ return createAsyncPromise(function (openResolve, openReject) {
3947
+ var createdNewDb = false;
3948
+ function _createDbCtx(dbContext, db, dbOpenRequest, isNew, isUpgrade) {
3949
+ var _a;
3950
+ var crDbCtx = (_a = {
3951
+ db: db
3952
+ },
3953
+ _a[_DYN_DB_NAME ] = dbName,
3954
+ _a.dbVersion = dbVersion,
3955
+ _a.ctx = null,
3956
+ _a.isNew = isNew,
3957
+ _a.txn = dbOpenRequest ? dbOpenRequest[_DYN_TRANSACTION ] : null
3958
+ ,
3959
+ _a);
3960
+ if (!isUpgrade) {
3961
+ crDbCtx[_DYN_OPEN_STORE ] = function (eventTable, doAction) {
3962
+ return _openStore(crDbCtx, eventTable, doAction);
3963
+ };
3964
+ crDbCtx[_DYN_OPEN_CURSOR ] = function (eventTable, query, cursorFunc) {
3965
+ return _openCursor(crDbCtx, eventTable, query, cursorFunc);
3966
+ };
3967
+ }
3968
+ return crDbCtx;
3969
+ }
3970
+ function _databaseUpgrade(db, dbOpenRequest, ev) {
3971
+ _debugLog(dbName, "db upgrade called");
3972
+ var upgDbCtx = _createDbCtx(null, db, dbOpenRequest, true, true);
3973
+ if (!versionChangeFunc) {
3974
+ try {
3975
+ dbOpenRequest[_DYN_TRANSACTION ] && dbOpenRequest[_DYN_TRANSACTION ].abort();
3976
+ dbOpenRequest.result && dbOpenRequest.result.close();
3977
+ }
3978
+ finally {
3979
+ openReject(new Error(ErrorMessageDbUpgradeRequired));
3980
+ }
3981
+ return;
3982
+ }
3983
+ createdNewDb = true;
3984
+ doAwaitResponse(versionChangeFunc(upgDbCtx), function (response) {
3985
+ if (!response[_DYN_REJECTED ]) {
3986
+ _debugLog(upgDbCtx[_DYN_DB_NAME ], "on version change success");
3987
+ if (!upgDbCtx.txn) {
3988
+ upgDbCtx.txn = dbOpenRequest[_DYN_TRANSACTION ];
3989
+ _debugLog(upgDbCtx[_DYN_DB_NAME ], "added open request");
3990
+ }
3991
+ }
3992
+ else {
3993
+ try {
3994
+ dbOpenRequest[_DYN_TRANSACTION ] && dbOpenRequest[_DYN_TRANSACTION ].abort();
3995
+ }
3996
+ finally {
3997
+ openReject(response[_DYN_REASON ]);
3998
+ }
3999
+ }
4000
+ });
4001
+ }
4002
+ function _databaseOpen(db, dbOpenRequest) {
4003
+ var opDbCtx = _getDbContext(dbName);
4004
+ opDbCtx.add(db);
4005
+ db.onabort = function (evt) {
4006
+ _debugLog(dbName, "onabort -- closing the Db");
4007
+ opDbCtx[_DYN_REMOVE ](db);
4008
+ };
4009
+ db[_DYN_ONERROR ] = function (evt) {
4010
+ _debugLog(dbName, "onerror -- closing the Db");
4011
+ opDbCtx[_DYN_REMOVE ](db);
4012
+ };
4013
+ db.onclose = function (evt) {
4014
+ _debugLog(dbName, "onclose -- closing the Db");
4015
+ opDbCtx[_DYN_REMOVE ](db);
4016
+ };
4017
+ db.onversionchange = function (evt) {
4018
+ _debugLog(dbName, "onversionchange -- force closing the Db");
4019
+ db.close();
4020
+ opDbCtx[_DYN_REMOVE ](db);
4021
+ };
4022
+ var openDbCtx = null;
4023
+ var dbHdl = null;
4024
+ if (opDbCtx.dbHdl[_DYN_LENGTH ] > 0) {
4025
+ dbHdl = opDbCtx[_DYN_DB_HDL ][0];
4026
+ }
4027
+ openDbCtx = _createDbCtx(opDbCtx, dbHdl, dbOpenRequest, createdNewDb);
4028
+ try {
4029
+ doAwait(processFunc(openDbCtx), openResolve, openReject);
4030
+ }
4031
+ catch (e) {
4032
+ openReject(e);
4033
+ }
4034
+ }
4035
+ var dbCtx = _getDbContext(dbName);
4036
+ if (_dbFactory == null) {
4037
+ openReject(new Error("No available storage factory"));
4038
+ }
4039
+ else if (dbCtx.isOpen()) {
4040
+ var openDbCtx = _createDbCtx(dbCtx, dbCtx.openHdl(), null, false);
4041
+ doAwait(processFunc(openDbCtx), openResolve, openReject);
4042
+ }
4043
+ else {
4044
+ var dbOpenRequest_1 = _dbFactory.open(dbName, dbVersion);
4045
+ if (!dbOpenRequest_1) {
4046
+ throw new Error("missing API");
4047
+ }
4048
+ dbOpenRequest_1.onblocked = function (evt) {
4049
+ _debugLog(dbName, "Db Open Blocked event [" + evtName + "] - " + (dbOpenRequest_1.error || ""));
4050
+ openReject(new Error(ErrorMessageUnableToOpenDb));
4051
+ };
4052
+ dbOpenRequest_1[_DYN_ONERROR ] = function (evt) {
4053
+ _debugLog(dbName, "Db Open Error event [" + evtName + "] - " + (dbOpenRequest_1.error || ""));
4054
+ openReject(new Error(ErrorMessageUnableToOpenDb));
4055
+ };
4056
+ dbOpenRequest_1.onupgradeneeded = function (evt) {
4057
+ _debugLog(dbName, "Db Open Create/Upgrade needed event [" + evtName + "]");
4058
+ try {
4059
+ var db = evt.target[Result] || dbOpenRequest_1.result;
4060
+ if (!db) {
4061
+ _debugLog(dbName, "no db");
4062
+ openReject(new Error(ErrorMessageUnableToOpenDb));
4063
+ return;
4064
+ }
4065
+ _databaseUpgrade(db, dbOpenRequest_1);
4066
+ }
4067
+ catch (e) {
4068
+ _eventReject(dbName, ErrorMessageUnableToOpenDb, openReject, evtName)(e);
4069
+ }
4070
+ };
4071
+ dbOpenRequest_1[_DYN_ONSUCCESS ] = function (evt) {
4072
+ _debugLog(dbName, "Db Open sucess [" + evtName + "]");
4073
+ var db = evt.target[Result];
4074
+ if (!db) {
4075
+ openReject(new Error(ErrorMessageUnableToOpenDb));
4076
+ return;
4077
+ }
4078
+ _databaseOpen(db, dbOpenRequest_1);
4079
+ };
4080
+ }
4081
+ });
4082
+ });
3992
4083
  };
3993
- _this[_DYN_GET_NEXT_BATCH ] = function () {
3994
- try {
3995
- if (!_storage) {
3996
- return;
4084
+ _this.closeDb = function (dbName) {
4085
+ _debugLog(dbName, "close db");
4086
+ _scheduleEvent(dbName, "closeDb", function (evtName) {
4087
+ var dbCtx = _getDbContext(dbName);
4088
+ var dbHdls = dbCtx[_DYN_DB_HDL ];
4089
+ var len = dbHdls[_DYN_LENGTH ];
4090
+ if (len > 0) {
4091
+ for (var lp = 0; lp < len; lp++) {
4092
+ dbHdls[lp].close();
4093
+ }
4094
+ dbCtx[_DYN_DB_HDL ] = [];
3997
4095
  }
3998
- return _getEvts(1);
3999
- }
4000
- catch (e) {
4001
- return createAsyncRejectedPromise(e);
4002
- }
4096
+ return 1;
4097
+ }).catch(function (reason) {
4098
+ });
4003
4099
  };
4004
- function _getEvts(cnt) {
4005
- var allItems = [];
4006
- var theStore = _fetchStoredDb(_storageKey).db;
4007
- if (theStore) {
4008
- var events = theStore[_DYN_EVTS ];
4009
- _forEachMap(events, function (evt) {
4010
- if (evt) {
4011
- if (evt[_DYN_IS_ARR ]) {
4012
- evt = _payloadHelper.base64ToArr(evt);
4013
- }
4014
- allItems[_DYN_PUSH$1 ](evt);
4015
- }
4016
- if (cnt && allItems && allItems[_DYN_LENGTH ] == cnt) {
4017
- return false;
4018
- }
4019
- return true;
4020
- });
4100
+ _this.deleteDb = function (dbName) {
4101
+ if (_dbFactory == null) {
4102
+ return false;
4021
4103
  }
4022
- return allItems;
4023
- }
4024
- _this[_DYN_ADD_EVENT ] = function (key, evt, itemCtx) {
4025
- try {
4026
- var theStore = _fetchStoredDb(_storageKey);
4027
- evt.id = evt.id || getTimeId();
4028
- evt[_DYN_CRITICAL_CNT ] = evt[_DYN_CRITICAL_CNT ] || 0;
4029
- var events = theStore.db[_DYN_EVTS ];
4030
- var id_1 = evt.id;
4031
- if (evt && evt[_DYN_IS_ARR ]) {
4032
- evt = _payloadHelper.base64ToStr(evt);
4033
- }
4034
- while (evt) {
4035
- events[id_1] = evt;
4036
- if (_updateStoredDb(theStore)) {
4037
- return evt;
4038
- }
4039
- delete events[id_1];
4040
- if (!_dropEventsUpToPersistence$1(_maxCriticalCnt, events, _eventDropPerTime)) {
4041
- return createAsyncRejectedPromise(new Error("Unable to free up event space"));
4104
+ return _scheduleEvent(dbName, "deleteDb", function (evtName) {
4105
+ var dbCtx = _getDbContext(dbName);
4106
+ var dbHdls = dbCtx[_DYN_DB_HDL ];
4107
+ var len = dbHdls[_DYN_LENGTH ];
4108
+ if (len > 0) {
4109
+ _debugLog(dbName, "Db is open [" + len + "] force closing");
4110
+ for (var lp = 0; lp < len; lp++) {
4111
+ dbHdls[lp].close();
4042
4112
  }
4113
+ dbCtx[_DYN_DB_HDL ] = [];
4043
4114
  }
4044
- }
4045
- catch (e) {
4046
- return createAsyncRejectedPromise(e);
4047
- }
4048
- };
4049
- _this[_DYN_REMOVE_EVENTS ] = function (evts) {
4050
- try {
4051
- var theStore = _fetchStoredDb(_storageKey, false);
4052
- var currentDb = theStore.db;
4053
- if (currentDb) {
4054
- var events = currentDb[_DYN_EVTS ];
4055
- try {
4056
- for (var i = 0; i < evts[_DYN_LENGTH ]; ++i) {
4057
- var evt = evts[i];
4058
- delete events[evt.id];
4115
+ return createAsyncPromise(function (deleteResolve, deleteReject) {
4116
+ setTimeout(function () {
4117
+ try {
4118
+ _debugLog(dbName, "[" + evtName + "] starting");
4119
+ var dbRequest = _dbFactory.deleteDatabase(dbName);
4120
+ dbRequest[_DYN_ONERROR ] = function (evt) {
4121
+ deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
4122
+ };
4123
+ dbRequest.onblocked = function (evt) {
4124
+ deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
4125
+ };
4126
+ dbRequest.onupgradeneeded = function (evt) {
4127
+ deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
4128
+ };
4129
+ dbRequest[_DYN_ONSUCCESS ] = function (evt) {
4130
+ _debugLog(dbName, "[" + evtName + "] complete");
4131
+ deleteResolve(true);
4132
+ };
4133
+ _debugLog(dbName, "[" + evtName + "] started");
4059
4134
  }
4060
- if (_updateStoredDb(theStore)) {
4061
- return evts;
4135
+ catch (e) {
4136
+ deleteReject(new Error(ErrorMessageFailedToDeleteDatabase + " - " + e));
4062
4137
  }
4063
- }
4064
- catch (e) {
4065
- }
4066
- evts = _clearDatabase(theStore.key);
4067
- }
4068
- return evts;
4069
- }
4070
- catch (e) {
4071
- return createAsyncRejectedPromise(e);
4072
- }
4138
+ }, 0);
4139
+ });
4140
+ });
4073
4141
  };
4074
- _this.clear = function () {
4075
- try {
4076
- var removedItems_1 = [];
4077
- var theStore = _fetchStoredDb(_storageKey, false);
4078
- var storedDb = theStore.db;
4079
- if (storedDb) {
4080
- var events_1 = storedDb[_DYN_EVTS ];
4081
- _forEachMap(events_1, function (evt) {
4082
- if (evt) {
4083
- delete events_1[evt.id];
4084
- removedItems_1[_DYN_PUSH$1 ](evt);
4085
- }
4086
- return true;
4087
- });
4088
- _updateStoredDb(theStore);
4142
+ _this.getDbDetails = function (dbName) {
4143
+ return _scheduleEvent(dbName, "getDbDetails", function (evtName) {
4144
+ if (_dbFactory == null || !_dbFactory.databases) {
4145
+ return createAsyncRejectedPromise(new Error(ErrorMessageDbNotSupported));
4089
4146
  }
4090
- return removedItems_1;
4091
- }
4092
- catch (e) {
4093
- return createAsyncRejectedPromise(e);
4094
- }
4147
+ return createAsyncPromise(function (databasesResolve, databasesReject) {
4148
+ var dbPromise = _dbFactory.databases();
4149
+ dbPromise[_DYN_THEN ](function (databases) {
4150
+ for (var lp = 0; lp < databases[_DYN_LENGTH ]; lp++) {
4151
+ if (databases[lp][_DYN_NAME ] === dbName) {
4152
+ databasesResolve(databases[lp]);
4153
+ return;
4154
+ }
4155
+ }
4156
+ databasesReject(new Error(ErrorMessageDbDoesNotExist));
4157
+ }, databasesReject);
4158
+ });
4159
+ }, 2000);
4095
4160
  };
4096
- _this.clean = function () {
4097
- var storeDetails = _fetchStoredDb(_storageKey, false);
4098
- var currentDb = storeDetails.db;
4099
- if (currentDb) {
4100
- var events = currentDb[_DYN_EVTS ];
4101
- try {
4102
- var isDropped = _dropMaxTimeEvents$1(_maxStorageTime, events, _eventDropPerTime);
4103
- if (isDropped) {
4104
- return _updateStoredDb(storeDetails);
4161
+ function _createStoreContext(openDbCtx, eventTable) {
4162
+ var dbHdl = openDbCtx.db || null;
4163
+ var tx = dbHdl && dbHdl[_DYN_TRANSACTION ](eventTable, DbReadWrite);
4164
+ if (tx) {
4165
+ tx.onabort = function () {
4166
+ };
4167
+ tx[_DYN_ONERROR ] = function () {
4168
+ };
4169
+ tx.oncomplete = function () {
4170
+ _debugLog(openDbCtx[_DYN_DB_NAME ], "txn.oncomplete");
4171
+ };
4172
+ return {
4173
+ db: openDbCtx,
4174
+ store: tx.objectStore(eventTable),
4175
+ tx: tx,
4176
+ tbl: eventTable,
4177
+ openCursor: function (query, processFunc) {
4178
+ return _openCursor(openDbCtx, eventTable, query, processFunc);
4179
+ },
4180
+ newTransaction: function (doAction) {
4181
+ return _openStore(openDbCtx, eventTable, doAction);
4105
4182
  }
4106
- return true;
4107
- }
4108
- catch (e) {
4109
- }
4110
- return false;
4183
+ };
4184
+ }
4185
+ return null;
4186
+ }
4187
+ function _openStore(openDbCtx, eventTable, doAction) {
4188
+ if (!openDbCtx || !openDbCtx.db) {
4189
+ return createAsyncRejectedPromise(new Error(ErrorMessageDbNotOpen));
4111
4190
  }
4112
- };
4113
- _this[_DYN_TEARDOWN ] = function () {
4114
4191
  try {
4115
- var theStore = _fetchStoredDb(_storageKey, false);
4116
- var storedDb = theStore.db;
4117
- if (storedDb) {
4118
- storedDb[_DYN_LAST_ACCESS_TIME ] = 0;
4119
- _updateStoredDb(theStore, false);
4192
+ var result = doAction(_createStoreContext(openDbCtx, eventTable));
4193
+ if (isPromiseLike(result)) {
4194
+ return result;
4120
4195
  }
4196
+ return createAsyncResolvedPromise(result);
4121
4197
  }
4122
4198
  catch (e) {
4199
+ return createAsyncRejectedPromise(e);
4123
4200
  }
4124
- };
4125
- function _newStore(dbKey, db) {
4126
- return {
4127
- key: dbKey,
4128
- db: db
4129
- };
4130
- }
4131
- function _fetchStoredDb(dbKey, returnDefault) {
4132
- var _a;
4133
- if (returnDefault === void 0) { returnDefault = true; }
4134
- var dbToStore = null;
4135
- if (_storage) {
4136
- var previousDb = _storage.getItem(dbKey);
4137
- if (previousDb) {
4138
- try {
4139
- dbToStore = getJSON().parse(previousDb);
4140
- }
4141
- catch (e) {
4142
- _storage[_DYN_REMOVE_ITEM ](dbKey);
4143
- }
4144
- }
4145
- if (returnDefault && !dbToStore) {
4146
- dbToStore = (_a = {
4147
- evts: {}
4148
- },
4149
- _a[_DYN_LAST_ACCESS_TIME ] = 0,
4150
- _a);
4151
- }
4152
- }
4153
- return _newStore(dbKey, dbToStore);
4154
4201
  }
4155
- function _updateStoredDb(jsonStore, updateLastAccessTime) {
4156
- if (updateLastAccessTime === void 0) { updateLastAccessTime = true; }
4157
- var dbToStore = jsonStore.db;
4158
- if (dbToStore) {
4159
- if (updateLastAccessTime) {
4160
- dbToStore.lastAccessTime = (new Date())[_DYN_GET_TIME ]();
4161
- }
4202
+ function _openCursor(openDbCtx, eventTable, query, processFunc) {
4203
+ if (!openDbCtx || !openDbCtx.db) {
4204
+ return createAsyncRejectedPromise(new Error(ErrorMessageDbNotOpen));
4162
4205
  }
4163
- try {
4164
- var jsonString = getJSON().stringify(dbToStore);
4165
- if (jsonString[_DYN_LENGTH ] > _maxStorageSizeInBytes) {
4166
- return false;
4167
- }
4168
- _storage && _storage.setItem(jsonStore.key, jsonString);
4206
+ var simpleQuery = null;
4207
+ if (query && isString(query)) {
4208
+ simpleQuery = new SimpleQuery(query);
4169
4209
  }
4170
- catch (e) {
4171
- return false;
4210
+ else if (query && query.isMatch) {
4211
+ simpleQuery = query;
4172
4212
  }
4173
- return true;
4174
- }
4175
- function _clearDatabase(dbKey) {
4176
- var removedItems = [];
4177
- var storeDetails = _fetchStoredDb(dbKey, false);
4178
- var currentDb = storeDetails.db;
4179
- if (currentDb) {
4180
- var events = currentDb[_DYN_EVTS ];
4181
- try {
4182
- _forEachMap(events, function (evt) {
4183
- if (evt) {
4184
- removedItems[_DYN_PUSH$1 ](evt);
4185
- }
4186
- return true;
4187
- });
4213
+ return createAsyncPromise(function (openCursorResolve, openCursorReject) {
4214
+ var values = [];
4215
+ var cursorRequest = null;
4216
+ var queryKeyRange = null;
4217
+ if (simpleQuery && simpleQuery[_DYN_KEY_RANGE ]) {
4218
+ queryKeyRange = simpleQuery[_DYN_KEY_RANGE ]();
4188
4219
  }
4189
- catch (e) {
4220
+ var storeCtx = _createStoreContext(openDbCtx, eventTable);
4221
+ if (queryKeyRange) {
4222
+ cursorRequest = storeCtx.store[_DYN_OPEN_CURSOR ](queryKeyRange);
4190
4223
  }
4191
- _storage && _storage[_DYN_REMOVE_ITEM ](storeDetails.key);
4192
- }
4193
- return removedItems;
4224
+ else {
4225
+ cursorRequest = storeCtx.store[_DYN_OPEN_CURSOR ]();
4226
+ }
4227
+ cursorRequest[_DYN_ONERROR ] = _eventReject(storeCtx.db[_DYN_DB_NAME ], ErrorMessageFailedToOpenCursor, openCursorReject, "openCursor");
4228
+ cursorRequest[_DYN_ONSUCCESS ] = function (evt) {
4229
+ var _a;
4230
+ var cursor = evt.target[Result];
4231
+ if (!cursor) {
4232
+ openCursorResolve(values);
4233
+ return;
4234
+ }
4235
+ var processCursorState = (_a = {
4236
+ store: storeCtx,
4237
+ cursor: cursor
4238
+ },
4239
+ _a[_DYN_CONTINUE ] = function () {
4240
+ cursor[_DYN_CONTINUE ]();
4241
+ },
4242
+ _a.done = function () {
4243
+ openCursorResolve(values);
4244
+ }
4245
+ ,
4246
+ _a);
4247
+ var value = cursor[_DYN_VALUE ];
4248
+ if (simpleQuery && !simpleQuery.isMatch(value)) {
4249
+ processCursorState[_DYN_CONTINUE ]();
4250
+ return;
4251
+ }
4252
+ if (processFunc) {
4253
+ try {
4254
+ switch (processFunc(processCursorState, value, values)) {
4255
+ case 2 :
4256
+ openCursorResolve(values);
4257
+ break;
4258
+ case 1 :
4259
+ break;
4260
+ case 0 :
4261
+ default:
4262
+ processCursorState[_DYN_CONTINUE ]();
4263
+ break;
4264
+ }
4265
+ }
4266
+ catch (ex) {
4267
+ openCursorReject(ex);
4268
+ }
4269
+ }
4270
+ else {
4271
+ values[_DYN_PUSH ](value);
4272
+ processCursorState[_DYN_CONTINUE ]();
4273
+ }
4274
+ };
4275
+ });
4194
4276
  }
4195
4277
  });
4196
4278
  }
4197
- WebStorageProvider.__ieDyn=1;
4198
- return WebStorageProvider;
4279
+ IndexedDbHelper.__ieDyn=1;
4280
+ return IndexedDbHelper;
4199
4281
  }());
4200
-
4201
- var DisabledPropertyName = "Microsoft_ApplicationInsights_BypassAjaxInstrumentation";
4202
-
4203
- var _DYN_PUSH = "push";
4204
-
4205
- var EventPersistence = createEnumStyle({
4206
- Normal: 1 ,
4207
- Critical: 2
4208
- });
4209
-
4210
- function _disableEvents(target, evtNamespace) {
4211
- eventOff(target, null, null, evtNamespace);
4212
- }
4213
- function createOfflineListener(parentEvtNamespace) {
4214
- var _document = getDocument();
4215
- var _navigator = getNavigator();
4216
- var _isListening = false;
4217
- var listenerList = [];
4218
- var rState = 1 ;
4219
- if (_navigator && !isNullOrUndefined(_navigator.onLine) && !_navigator.onLine) {
4220
- rState = 2 ;
4221
- }
4222
- var uState = 0 ;
4223
- var _currentState = calCurrentState();
4224
- var _evtNamespace = mergeEvtNamespace(createUniqueNamespace("OfflineListener"), parentEvtNamespace);
4225
- try {
4226
- if (_enableEvents(getWindow())) {
4227
- _isListening = true;
4228
- }
4229
- if (_document) {
4230
- var target = _document.body || _document;
4231
- if (target.ononline) {
4232
- if (_enableEvents(target)) {
4233
- _isListening = true;
4234
- }
4235
- }
4236
- }
4237
- }
4238
- catch (e) {
4239
- _isListening = false;
4240
- }
4241
- function _enableEvents(target) {
4242
- var enabled = false;
4243
- if (target) {
4244
- enabled = eventOn(target, "online", _setOnline, _evtNamespace);
4245
- if (enabled) {
4246
- eventOn(target, "offline", _setOffline, _evtNamespace);
4247
- }
4248
- }
4249
- return enabled;
4250
- }
4251
- function _isOnline() {
4252
- return _currentState;
4253
- }
4254
- function calCurrentState() {
4255
- if (uState === 2 || rState === 2 ) {
4256
- return false;
4257
- }
4258
- return true;
4259
- }
4260
- function listnerNoticeCheck() {
4261
- var newState = calCurrentState();
4262
- if (_currentState !== newState) {
4263
- _currentState = newState;
4264
- arrForEach(listenerList, function (callback) {
4265
- var offlineState = {
4266
- isOnline: _currentState,
4267
- rState: rState,
4268
- uState: uState
4269
- };
4270
- try {
4271
- callback(offlineState);
4272
- }
4273
- catch (e) {
4282
+ var SimpleQuery = /** @class */ (function () {
4283
+ function SimpleQuery(theQuery) {
4284
+ var _queryCols = [];
4285
+ var _keyRange = null;
4286
+ dynamicProto(SimpleQuery, this, function (_this) {
4287
+ _this[_DYN_KEY_RANGE ] = function () {
4288
+ return _keyRange;
4289
+ };
4290
+ _this.parseQuery = function (query) {
4291
+ _queryCols = [];
4292
+ if (query) {
4293
+ var items = query[_DYN_SPLIT ](";");
4294
+ for (var lp = 0; lp < items[_DYN_LENGTH ]; lp++) {
4295
+ var item = items[lp];
4296
+ var idx = item[_DYN_INDEX_OF ]("=");
4297
+ if (idx !== -1) {
4298
+ var key = item[_DYN_SUBSTRING ](0, idx);
4299
+ var value = item[_DYN_SUBSTRING ](idx + 1);
4300
+ if (key[_DYN_INDEX_OF ]("#") === 0) {
4301
+ key = key[_DYN_SUBSTRING ](1);
4302
+ if (!_keyRange) {
4303
+ _keyRange = IDBKeyRange.bound(value, value + "\uffff");
4304
+ }
4305
+ }
4306
+ _this.startsWith(key, value);
4307
+ }
4308
+ }
4274
4309
  }
4275
- });
4276
- }
4277
- }
4278
- function setOnlineState(newState) {
4279
- uState = newState;
4280
- listnerNoticeCheck();
4281
- }
4282
- function _setOnline() {
4283
- rState = 1 ;
4284
- listnerNoticeCheck();
4285
- }
4286
- function _setOffline() {
4287
- rState = 2 ;
4288
- listnerNoticeCheck();
4289
- }
4290
- function _unload() {
4291
- var win = getWindow();
4292
- if (win && _isListening) {
4293
- _disableEvents(win, _evtNamespace);
4294
- if (_document) {
4295
- var target = _document.body || _document;
4296
- if (!isUndefined(target.ononline)) {
4297
- _disableEvents(target, _evtNamespace);
4310
+ };
4311
+ _this.startsWith = function (columnName, value) {
4312
+ var _a;
4313
+ _queryCols[_DYN_PUSH ]((_a = {},
4314
+ _a[_DYN_NAME ] = columnName,
4315
+ _a[_DYN_VALUE ] = value,
4316
+ _a.type = 0 ,
4317
+ _a));
4318
+ };
4319
+ _this.contains = function (columnName, value) {
4320
+ var _a;
4321
+ _queryCols[_DYN_PUSH ]((_a = {},
4322
+ _a[_DYN_NAME ] = columnName,
4323
+ _a[_DYN_VALUE ] = value,
4324
+ _a.type = 1 ,
4325
+ _a));
4326
+ };
4327
+ _this.isMatch = function (value) {
4328
+ if (!_queryCols || _queryCols[_DYN_LENGTH ] === 0) {
4329
+ return true;
4298
4330
  }
4299
- }
4300
- _isListening = false;
4301
- }
4302
- }
4303
- function addListener(callback) {
4304
- listenerList[_DYN_PUSH ](callback);
4305
- return {
4306
- rm: function () {
4307
- var index = listenerList.indexOf(callback);
4308
- if (index > -1) {
4309
- return listenerList.splice(index, 1);
4331
+ if (!value) {
4332
+ return false;
4310
4333
  }
4311
- else {
4312
- return;
4334
+ for (var lp = 0; lp < _queryCols[_DYN_LENGTH ]; lp++) {
4335
+ var query = _queryCols[lp];
4336
+ var chkValue = value[query.name];
4337
+ if (chkValue) {
4338
+ if (query.type === 0 ) {
4339
+ if (chkValue.indexOf(query[_DYN_VALUE ]) !== 0) {
4340
+ return false;
4341
+ }
4342
+ }
4343
+ else if (query.type === 1 ) {
4344
+ if (chkValue.indexOf(query[_DYN_VALUE ]) === -1) {
4345
+ return false;
4346
+ }
4347
+ }
4348
+ }
4313
4349
  }
4350
+ return true;
4351
+ };
4352
+ if (theQuery) {
4353
+ _this.parseQuery(theQuery);
4314
4354
  }
4315
- };
4355
+ });
4316
4356
  }
4317
- return {
4318
- isOnline: _isOnline,
4319
- isListening: function () { return _isListening; },
4320
- unload: _unload,
4321
- addListener: addListener,
4322
- setOnlineState: setOnlineState
4323
- };
4324
- }
4325
-
4326
- var BreezeChannelIdentifier = "AppInsightsChannelPlugin";
4357
+ SimpleQuery.__ieDyn=1;
4358
+ return SimpleQuery;
4359
+ }());
4327
4360
 
4328
- var IndexedDBNames = ["indexedDB" ];
4329
- var DbReadWrite = "readwrite";
4330
- var Result = "result";
4331
- var ErrorMessageUnableToOpenDb = "DBError: Unable to open database";
4332
- var ErrorMessageDbUpgradeRequired = "DBError: Database upgrade required";
4333
- var ErrorMessageDbNotOpen = "Database is not open";
4334
- var ErrorMessageDbDoesNotExist = "DBError: Database does not exist";
4335
- var ErrorMessageFailedToDeleteDatabase = "DBError: Failed to delete the database";
4336
- var ErrorMessageDbNotSupported = "DBError: Feature not supported";
4337
- var ErrorMessageFailedToOpenCursor = "DBError: Failed to Open Cursor";
4338
- var _dbContext = [];
4339
- function _getDbContext(dbName, diagLog) {
4340
- var _a;
4341
- var dbCtx = null;
4342
- for (var lp = 0; lp < _dbContext[_DYN_LENGTH ]; lp++) {
4343
- dbCtx = _dbContext[lp];
4344
- if (dbCtx[_DYN_NAME ] === dbName) {
4345
- return dbCtx;
4346
- }
4347
- }
4348
- dbCtx = (_a = {},
4349
- _a[_DYN_NAME ] = dbName,
4350
- _a.sch = createTaskScheduler(createAsyncPromise, "IndexedDbHelper[" + dbName + "]"),
4351
- _a.dbHdl = [],
4352
- _a.add = function (db) {
4353
- dbCtx.dbHdl[_DYN_PUSH$1 ](db);
4354
- _debugLog(dbName, "- dbOpened (add) -- hdls [" + dbCtx.dbHdl[_DYN_LENGTH ] + "]");
4355
- },
4356
- _a[_DYN_REMOVE ] = function (db) {
4357
- var hdls = dbCtx[_DYN_DB_HDL ];
4358
- for (var lp = 0; lp < hdls[_DYN_LENGTH ]; lp++) {
4359
- if (hdls[lp] === db) {
4360
- hdls[_DYN_SPLICE ](lp, 1);
4361
- break;
4362
- }
4363
- }
4364
- _debugLog(dbName, "- dbClosed (remove) -- hdls [" + dbCtx.dbHdl[_DYN_LENGTH ] + "]");
4365
- },
4366
- _a.isOpen = function () {
4367
- return dbCtx.dbHdl[_DYN_LENGTH ] > 0;
4368
- },
4369
- _a.openHdl = function () {
4370
- if (dbCtx.dbHdl[_DYN_LENGTH ] > 0) {
4371
- return dbCtx[_DYN_DB_HDL ][0];
4372
- }
4373
- return null;
4374
- },
4375
- _a);
4376
- _dbContext[_DYN_PUSH$1 ](dbCtx);
4377
- return dbCtx;
4361
+ var EventsToDropAtOneTime$1 = 10;
4362
+ var StoreVersion = 1;
4363
+ var OrhpanedEventThresholdInMs = 10080000;
4364
+ var UnknowniKey = "Unknown";
4365
+ var ErrorMessageUnableToAddEvent = "DBError: Unable to add event";
4366
+ var MaxCriticalEvtsDropCnt$1 = 2;
4367
+ var DefaultDbName = "AIOffline";
4368
+ var DbVersion = 1;
4369
+ var EventObjectStoreName = "Evts";
4370
+ function isValidPersistenceLevel(value) {
4371
+ return (isNumber(value) && value >= 0 && value <= EventPersistence.Critical);
4378
4372
  }
4379
- function _scheduleEvent(dbName, actionName, startEvent, evtTimeOut) {
4380
- var dbCtx = _getDbContext(dbName);
4381
- return dbCtx.sch.queue(startEvent, actionName, evtTimeOut);
4373
+ function _getTime() {
4374
+ return new Date()[_DYN_GET_TIME ]();
4382
4375
  }
4383
- function getDbFactory() {
4384
- var global = getGlobal() || {};
4385
- var dbFactory = null;
4386
- if (global) {
4387
- try {
4388
- for (var lp = 0; lp < IndexedDBNames[_DYN_LENGTH ]; lp++) {
4389
- dbFactory = global[IndexedDBNames[lp]];
4390
- if (dbFactory && isFunction(dbFactory.open)) {
4391
- return dbFactory;
4392
- }
4393
- }
4376
+ function _createDb(db) {
4377
+ if (!db.objectStoreNames.contains(EventObjectStoreName)) {
4378
+ var evtStore = db.createObjectStore(EventObjectStoreName, { keyPath: "id" });
4379
+ evtStore.createIndex("criticalCnt", "criticalCnt", { unique: false });
4380
+ }
4381
+ }
4382
+ function _getEvents(values) {
4383
+ var events = [];
4384
+ for (var lp = 0; lp < values[_DYN_LENGTH ]; lp++) {
4385
+ var item = values[lp];
4386
+ if (item && item.evt) {
4387
+ events[_DYN_PUSH ](item.evt);
4394
4388
  }
4395
- catch (e) {
4396
- dbFactory = null;
4389
+ }
4390
+ return events;
4391
+ }
4392
+ function _addEventByTime(values, newValue) {
4393
+ for (var idx = 0; idx < values[_DYN_LENGTH ]; idx++) {
4394
+ if (newValue.tm < values[idx].tm) {
4395
+ values[_DYN_SPLICE ](idx, 0, newValue);
4396
+ return;
4397
4397
  }
4398
4398
  }
4399
- return dbFactory;
4399
+ values[_DYN_PUSH ](newValue);
4400
4400
  }
4401
- function _debugLog(dbName, message) {
4402
- if (getInst("QUnit")) {
4403
- console && console.log("IndexedDbHelper [" + dbName + "] " + message);
4401
+ function _getId(key, values) {
4402
+ var len = values[_DYN_LENGTH ];
4403
+ for (var lp = 0; lp < len; lp++) {
4404
+ if (key === values[lp].id) {
4405
+ return lp;
4406
+ }
4404
4407
  }
4408
+ return -1;
4405
4409
  }
4406
- function _eventReject(dbName, rejectMessage, rejectFunc, evtName) {
4410
+ function _cursorContinueEvent(cursorState, value) {
4407
4411
  return function (evt) {
4408
- rejectFunc(new Error(rejectMessage));
4409
- _debugLog(dbName, "[" + evtName + "] event rejected");
4412
+ return cursorState[_DYN_CONTINUE ]();
4410
4413
  };
4411
4414
  }
4412
- var IndexedDbHelper = /** @class */ (function () {
4413
- function IndexedDbHelper(diagLog) {
4414
- var _dbFactory = getDbFactory() || null;
4415
- dynamicProto(IndexedDbHelper, this, function (_this) {
4416
- _this[_DYN_IS_AVAILABLE ] = function () {
4417
- return !!_dbFactory;
4415
+ function _cursorDeleteAndContinue(cursorState, value) {
4416
+ var deleteRequest = cursorState.cursor.delete();
4417
+ deleteRequest[_DYN_ONERROR ] = _cursorContinueEvent(cursorState);
4418
+ deleteRequest[_DYN_ONSUCCESS ] = _cursorContinueEvent(cursorState);
4419
+ return 1 ;
4420
+ }
4421
+ function _getAllEvents(dbCtx, cursorQuery, cnt) {
4422
+ return dbCtx.openCursor(EventObjectStoreName, cursorQuery, function (cursorState, value, values) {
4423
+ values[_DYN_PUSH ](value);
4424
+ if (cnt && values && values[_DYN_LENGTH ] == cnt) {
4425
+ return 2 ;
4426
+ }
4427
+ return 0 ;
4428
+ });
4429
+ }
4430
+ function _deleteEvents(dbCtx, eventPrefixQuery, shouldDelete) {
4431
+ return dbCtx.openCursor(EventObjectStoreName, eventPrefixQuery, function (deleteCursorState, value, values) {
4432
+ if (shouldDelete(value)) {
4433
+ values[_DYN_PUSH ](value);
4434
+ return _cursorDeleteAndContinue(deleteCursorState);
4435
+ }
4436
+ return 0 ;
4437
+ });
4438
+ }
4439
+ function _dropMaxTimeEvents$1(dbCtx, maxTime) {
4440
+ return createAsyncPromise(function (deleteEvtsResolve, deleteEvtsReject) {
4441
+ return _deleteEvents(dbCtx, null, function (value) {
4442
+ if (!value || !value.evt) {
4443
+ return true;
4444
+ }
4445
+ var addedTime = getTimeFromId(value.id);
4446
+ var minStartTime = _getTime() + 1 - maxTime;
4447
+ if (addedTime <= minStartTime) {
4448
+ return true;
4449
+ }
4450
+ return false;
4451
+ })[_DYN_THEN ](function (values) {
4452
+ deleteEvtsResolve(values);
4453
+ }, deleteEvtsReject);
4454
+ });
4455
+ }
4456
+ function _dropEventsUpToPersistence$1(dbCtx, maxpriorityCnt, maxDropCnt) {
4457
+ return createAsyncPromise(function (dropEventsResolve, dropEventsReject) {
4458
+ var droppedEvents = 0;
4459
+ function _resolveWithDroppedEvents() {
4460
+ dropEventsResolve(droppedEvents);
4461
+ }
4462
+ function _dropEvent(deleteStoreCtx, dropItem) {
4463
+ return createAsyncPromise(function (deleteResolve) {
4464
+ var deleteRequest = deleteStoreCtx.store.delete(dropItem.key);
4465
+ deleteRequest[_DYN_ONSUCCESS ] = function (evt) {
4466
+ droppedEvents++;
4467
+ deleteResolve();
4468
+ };
4469
+ deleteRequest[_DYN_ONERROR ] = function (evt) {
4470
+ deleteResolve();
4471
+ };
4472
+ });
4473
+ }
4474
+ function _processCandidates(dropCandidates) {
4475
+ if (dropCandidates[_DYN_LENGTH ] === 0) {
4476
+ _resolveWithDroppedEvents();
4477
+ return;
4478
+ }
4479
+ dbCtx[_DYN_OPEN_STORE ](EventObjectStoreName, function (deleteStoreCtx) {
4480
+ var deleteEvts = [];
4481
+ for (var lp = 0; lp < dropCandidates[_DYN_LENGTH ]; lp++) {
4482
+ deleteEvts[_DYN_PUSH ](_dropEvent(deleteStoreCtx, dropCandidates[lp]));
4483
+ }
4484
+ return createAsyncAllPromise(deleteEvts)[_DYN_THEN ](_resolveWithDroppedEvents, _resolveWithDroppedEvents);
4485
+ });
4486
+ }
4487
+ var cursorPromise = dbCtx.openCursor(EventObjectStoreName, null, function (cursorState, value, values) {
4488
+ if (value.evt[_DYN_CRITICAL_CNT ] <= maxpriorityCnt) {
4489
+ _addEventByTime(values, value);
4490
+ if (values[_DYN_LENGTH ] > maxDropCnt) {
4491
+ values.splice(values[_DYN_LENGTH ] - 1, 1);
4492
+ }
4493
+ }
4494
+ return 0 ;
4495
+ });
4496
+ cursorPromise[_DYN_THEN ](_processCandidates, function () {
4497
+ dropEventsResolve(0);
4498
+ });
4499
+ });
4500
+ }
4501
+ var IndexedDbProvider = /** @class */ (function () {
4502
+ function IndexedDbProvider(id, unloadHookContainer) {
4503
+ dynamicProto(IndexedDbProvider, this, function (_this) {
4504
+ var _indexedDb = null;
4505
+ var _dbName = null;
4506
+ var _iKey = UnknowniKey;
4507
+ var _storageId = null;
4508
+ var _autoClean = null;
4509
+ var _endpoint = null;
4510
+ var _storageKeyPrefix = null;
4511
+ var _maxStorageTime = null;
4512
+ var _eventDropPerTime = null;
4513
+ var _maxCriticalCnt = null;
4514
+ var _notificationManager = null;
4515
+ _this.id = id;
4516
+ _this[_DYN_INITIALIZE ] = function (providerContext) {
4517
+ var diagLog = providerContext.itemCtx[_DYN_DIAG_LOG ]();
4518
+ _indexedDb = new IndexedDbHelper(diagLog);
4519
+ if (!_indexedDb[_DYN_IS_AVAILABLE ]()) {
4520
+ _indexedDb = null;
4521
+ return false;
4522
+ }
4523
+ var coreConfig = providerContext[_DYN_ITEM_CTX ].getCfg();
4524
+ var itemCtx = providerContext[_DYN_ITEM_CTX ];
4525
+ _iKey = itemCtx.getCfg()[_DYN_INSTRUMENTATION_KEY ] || coreConfig[_DYN_INSTRUMENTATION_KEY ];
4526
+ var storageConfig = providerContext[_DYN_STORAGE_CONFIG ];
4527
+ _storageId = _this.id || providerContext.id || newGuid();
4528
+ _notificationManager = providerContext[_DYN_NOTIFICATION_MGR ];
4529
+ _endpoint = getEndpointDomain(providerContext[_DYN_ENDPOINT ]);
4530
+ _autoClean = !!storageConfig.autoClean;
4531
+ _storageKeyPrefix = storageConfig[_DYN_STORAGE_KEY_PREFIX ] || DefaultDbName;
4532
+ _dbName = _storageKeyPrefix + "_" + DbVersion + "_" + _endpoint;
4533
+ var unloadHook = onConfigChange(storageConfig, function () {
4534
+ _maxStorageTime = storageConfig[_DYN_IN_STORAGE_MAX_TIME ] || OrhpanedEventThresholdInMs;
4535
+ var dropNum = storageConfig[_DYN__EVENTS_TO_DROP_PER_2 ];
4536
+ _eventDropPerTime = isNotNullOrUndefined(dropNum) ? dropNum : EventsToDropAtOneTime$1;
4537
+ _maxCriticalCnt = storageConfig[_DYN_MAX_CRITICAL_EVTS_DR3 ] || MaxCriticalEvtsDropCnt$1;
4538
+ });
4539
+ unloadHookContainer && unloadHookContainer.add(unloadHook);
4540
+ if (_dbName) {
4541
+ doAwaitResponse(_this.clean(!_autoClean), function (response) {
4542
+ _openDb(function (dbCtx) {
4543
+ return true;
4544
+ })[_DYN_THEN ](function (value) {
4545
+ }, function (reason) {
4546
+ diagLog.warnToConsole("IndexedDbProvider failed to initialize - " + (reason || "<unknown>"));
4547
+ _indexedDb = null;
4548
+ });
4549
+ });
4550
+ }
4551
+ return true;
4418
4552
  };
4419
- _this.openDb = function (dbName, dbVersion, processFunc, versionChangeFunc) {
4420
- return _scheduleEvent(dbName, "openDb", function (evtName) {
4421
- return createAsyncPromise(function (openResolve, openReject) {
4422
- var createdNewDb = false;
4423
- function _createDbCtx(dbContext, db, dbOpenRequest, isNew, isUpgrade) {
4424
- var _a;
4425
- var crDbCtx = (_a = {
4426
- db: db
4427
- },
4428
- _a[_DYN_DB_NAME ] = dbName,
4429
- _a.dbVersion = dbVersion,
4430
- _a.ctx = null,
4431
- _a.isNew = isNew,
4432
- _a.txn = dbOpenRequest ? dbOpenRequest[_DYN_TRANSACTION ] : null
4433
- ,
4434
- _a);
4435
- if (!isUpgrade) {
4436
- crDbCtx[_DYN_OPEN_STORE ] = function (eventTable, doAction) {
4437
- return _openStore(crDbCtx, eventTable, doAction);
4438
- };
4439
- crDbCtx[_DYN_OPEN_CURSOR ] = function (eventTable, query, cursorFunc) {
4440
- return _openCursor(crDbCtx, eventTable, query, cursorFunc);
4441
- };
4442
- }
4443
- return crDbCtx;
4444
- }
4445
- function _databaseUpgrade(db, dbOpenRequest, ev) {
4446
- _debugLog(dbName, "db upgrade called");
4447
- var upgDbCtx = _createDbCtx(null, db, dbOpenRequest, true, true);
4448
- if (!versionChangeFunc) {
4449
- try {
4450
- dbOpenRequest[_DYN_TRANSACTION ] && dbOpenRequest[_DYN_TRANSACTION ].abort();
4451
- dbOpenRequest.result && dbOpenRequest.result.close();
4452
- }
4453
- finally {
4454
- openReject(new Error(ErrorMessageDbUpgradeRequired));
4455
- }
4456
- return;
4457
- }
4458
- createdNewDb = true;
4459
- doAwaitResponse(versionChangeFunc(upgDbCtx), function (response) {
4460
- if (!response[_DYN_REJECTED ]) {
4461
- _debugLog(upgDbCtx[_DYN_DB_NAME ], "on version change success");
4462
- if (!upgDbCtx.txn) {
4463
- upgDbCtx.txn = dbOpenRequest[_DYN_TRANSACTION ];
4464
- _debugLog(upgDbCtx[_DYN_DB_NAME ], "added open request");
4465
- }
4466
- }
4467
- else {
4468
- try {
4469
- dbOpenRequest[_DYN_TRANSACTION ] && dbOpenRequest[_DYN_TRANSACTION ].abort();
4470
- }
4471
- finally {
4472
- openReject(response[_DYN_REASON ]);
4473
- }
4474
- }
4475
- });
4476
- }
4477
- function _databaseOpen(db, dbOpenRequest) {
4478
- var opDbCtx = _getDbContext(dbName);
4479
- opDbCtx.add(db);
4480
- db.onabort = function (evt) {
4481
- _debugLog(dbName, "onabort -- closing the Db");
4482
- opDbCtx[_DYN_REMOVE ](db);
4483
- };
4484
- db[_DYN_ONERROR ] = function (evt) {
4485
- _debugLog(dbName, "onerror -- closing the Db");
4486
- opDbCtx[_DYN_REMOVE ](db);
4487
- };
4488
- db.onclose = function (evt) {
4489
- _debugLog(dbName, "onclose -- closing the Db");
4490
- opDbCtx[_DYN_REMOVE ](db);
4491
- };
4492
- db.onversionchange = function (evt) {
4493
- _debugLog(dbName, "onversionchange -- force closing the Db");
4494
- db.close();
4495
- opDbCtx[_DYN_REMOVE ](db);
4496
- };
4497
- var openDbCtx = null;
4498
- var dbHdl = null;
4499
- if (opDbCtx.dbHdl[_DYN_LENGTH ] > 0) {
4500
- dbHdl = opDbCtx[_DYN_DB_HDL ][0];
4501
- }
4502
- openDbCtx = _createDbCtx(opDbCtx, dbHdl, dbOpenRequest, createdNewDb);
4503
- try {
4504
- doAwait(processFunc(openDbCtx), openResolve, openReject);
4505
- }
4506
- catch (e) {
4507
- openReject(e);
4508
- }
4509
- }
4510
- var dbCtx = _getDbContext(dbName);
4511
- if (_dbFactory == null) {
4512
- openReject(new Error("No available storage factory"));
4513
- }
4514
- else if (dbCtx.isOpen()) {
4515
- var openDbCtx = _createDbCtx(dbCtx, dbCtx.openHdl(), null, false);
4516
- doAwait(processFunc(openDbCtx), openResolve, openReject);
4517
- }
4518
- else {
4519
- var dbOpenRequest_1 = _dbFactory.open(dbName, dbVersion);
4520
- if (!dbOpenRequest_1) {
4521
- throw new Error("missing API");
4522
- }
4523
- dbOpenRequest_1.onblocked = function (evt) {
4524
- _debugLog(dbName, "Db Open Blocked event [" + evtName + "] - " + (dbOpenRequest_1.error || ""));
4525
- openReject(new Error(ErrorMessageUnableToOpenDb));
4526
- };
4527
- dbOpenRequest_1[_DYN_ONERROR ] = function (evt) {
4528
- _debugLog(dbName, "Db Open Error event [" + evtName + "] - " + (dbOpenRequest_1.error || ""));
4529
- openReject(new Error(ErrorMessageUnableToOpenDb));
4530
- };
4531
- dbOpenRequest_1.onupgradeneeded = function (evt) {
4532
- _debugLog(dbName, "Db Open Create/Upgrade needed event [" + evtName + "]");
4533
- try {
4534
- var db = evt.target[Result] || dbOpenRequest_1.result;
4535
- if (!db) {
4536
- _debugLog(dbName, "no db");
4537
- openReject(new Error(ErrorMessageUnableToOpenDb));
4538
- return;
4539
- }
4540
- _databaseUpgrade(db, dbOpenRequest_1);
4541
- }
4542
- catch (e) {
4543
- _eventReject(dbName, ErrorMessageUnableToOpenDb, openReject, evtName)(e);
4544
- }
4545
- };
4546
- dbOpenRequest_1[_DYN_ONSUCCESS ] = function (evt) {
4547
- _debugLog(dbName, "Db Open sucess [" + evtName + "]");
4548
- var db = evt.target[Result];
4549
- if (!db) {
4550
- openReject(new Error(ErrorMessageUnableToOpenDb));
4551
- return;
4552
- }
4553
- _databaseOpen(db, dbOpenRequest_1);
4554
- };
4555
- }
4553
+ _this["_getDbgPlgTargets"] = function () {
4554
+ return [_dbName, _endpoint, _maxStorageTime, _indexedDb];
4555
+ };
4556
+ _this[_DYN_SUPPORTS_SYNC_REQUES4 ] = function () {
4557
+ return false;
4558
+ };
4559
+ _this.getAllEvents = function (cnt) {
4560
+ if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
4561
+ return [];
4562
+ }
4563
+ return _openDb(function (dbCtx) {
4564
+ return createAsyncPromise(function (allEventsResolve, allEventsReject) {
4565
+ _getAllEvents(dbCtx, null, cnt)[_DYN_THEN ](function (values) {
4566
+ allEventsResolve(_getEvents(values));
4567
+ }, allEventsReject);
4556
4568
  });
4557
4569
  });
4558
4570
  };
4559
- _this.closeDb = function (dbName) {
4560
- _debugLog(dbName, "close db");
4561
- _scheduleEvent(dbName, "closeDb", function (evtName) {
4562
- var dbCtx = _getDbContext(dbName);
4563
- var dbHdls = dbCtx[_DYN_DB_HDL ];
4564
- var len = dbHdls[_DYN_LENGTH ];
4565
- if (len > 0) {
4566
- for (var lp = 0; lp < len; lp++) {
4567
- dbHdls[lp].close();
4568
- }
4569
- dbCtx[_DYN_DB_HDL ] = [];
4570
- }
4571
- return 1;
4572
- }).catch(function (reason) {
4571
+ _this[_DYN_GET_NEXT_BATCH ] = function () {
4572
+ if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
4573
+ return [];
4574
+ }
4575
+ return _openDb(function (dbCtx) {
4576
+ return createAsyncPromise(function (allEventsResolve, allEventsReject) {
4577
+ _getAllEvents(dbCtx, null, 1)[_DYN_THEN ](function (values) {
4578
+ allEventsResolve(_getEvents(values));
4579
+ }, allEventsReject);
4580
+ });
4573
4581
  });
4574
4582
  };
4575
- _this.deleteDb = function (dbName) {
4576
- if (_dbFactory == null) {
4577
- return false;
4583
+ _this[_DYN_ADD_EVENT ] = function (key, item, itemCtx) {
4584
+ if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
4585
+ return item;
4578
4586
  }
4579
- return _scheduleEvent(dbName, "deleteDb", function (evtName) {
4580
- var dbCtx = _getDbContext(dbName);
4581
- var dbHdls = dbCtx[_DYN_DB_HDL ];
4582
- var len = dbHdls[_DYN_LENGTH ];
4583
- if (len > 0) {
4584
- _debugLog(dbName, "Db is open [" + len + "] force closing");
4585
- for (var lp = 0; lp < len; lp++) {
4586
- dbHdls[lp].close();
4587
- }
4588
- dbCtx[_DYN_DB_HDL ] = [];
4589
- }
4590
- return createAsyncPromise(function (deleteResolve, deleteReject) {
4591
- setTimeout(function () {
4592
- try {
4593
- _debugLog(dbName, "[" + evtName + "] starting");
4594
- var dbRequest = _dbFactory.deleteDatabase(dbName);
4595
- dbRequest[_DYN_ONERROR ] = function (evt) {
4596
- deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
4597
- };
4598
- dbRequest.onblocked = function (evt) {
4599
- deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
4600
- };
4601
- dbRequest.onupgradeneeded = function (evt) {
4602
- deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
4603
- };
4604
- dbRequest[_DYN_ONSUCCESS ] = function (evt) {
4605
- _debugLog(dbName, "[" + evtName + "] complete");
4606
- deleteResolve(true);
4587
+ item.id = item.id || getTimeId();
4588
+ item[_DYN_CRITICAL_CNT ] = item[_DYN_CRITICAL_CNT ] || 0;
4589
+ return _openDb(function (dbCtx) {
4590
+ var eventKey = key || item.id;
4591
+ var dbItem = {
4592
+ id: eventKey,
4593
+ evt: item,
4594
+ tm: _getTime(),
4595
+ v: StoreVersion
4596
+ };
4597
+ return _addDbEvent(dbCtx, dbItem, true);
4598
+ });
4599
+ };
4600
+ _this[_DYN_REMOVE_EVENTS ] = function (evts) {
4601
+ if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
4602
+ return [];
4603
+ }
4604
+ var removedEvents = [];
4605
+ return createAsyncPromise(function (removeEventsResolve, removeEventsReject) {
4606
+ _openDb(function (dbCtx) {
4607
+ return dbCtx.openCursor(EventObjectStoreName, null, function (cursorState, value, values) {
4608
+ if (_getId(value.id, evts) !== -1) {
4609
+ var deleteRequest = cursorState.cursor.delete();
4610
+ deleteRequest[_DYN_ONERROR ] = _cursorContinueEvent(cursorState);
4611
+ deleteRequest[_DYN_ONSUCCESS ] = function () {
4612
+ removedEvents[_DYN_PUSH ](value.evt);
4613
+ cursorState[_DYN_CONTINUE ]();
4607
4614
  };
4608
- _debugLog(dbName, "[" + evtName + "] started");
4609
- }
4610
- catch (e) {
4611
- deleteReject(new Error(ErrorMessageFailedToDeleteDatabase + " - " + e));
4615
+ return 1 ;
4612
4616
  }
4613
- }, 0);
4617
+ return 0 ;
4618
+ });
4619
+ })[_DYN_THEN ](function () {
4620
+ removeEventsResolve(removedEvents);
4621
+ }, function (reason) {
4622
+ removeEventsResolve(removedEvents);
4614
4623
  });
4615
4624
  });
4616
4625
  };
4617
- _this.getDbDetails = function (dbName) {
4618
- return _scheduleEvent(dbName, "getDbDetails", function (evtName) {
4619
- if (_dbFactory == null || !_dbFactory.databases) {
4620
- return createAsyncRejectedPromise(new Error(ErrorMessageDbNotSupported));
4621
- }
4622
- return createAsyncPromise(function (databasesResolve, databasesReject) {
4623
- var dbPromise = _dbFactory.databases();
4624
- dbPromise[_DYN_THEN ](function (databases) {
4625
- for (var lp = 0; lp < databases[_DYN_LENGTH ]; lp++) {
4626
- if (databases[lp][_DYN_NAME ] === dbName) {
4627
- databasesResolve(databases[lp]);
4628
- return;
4629
- }
4630
- }
4631
- databasesReject(new Error(ErrorMessageDbDoesNotExist));
4632
- }, databasesReject);
4626
+ _this[_DYN_CLEAR ] = function (disable) {
4627
+ if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]() || !!disable) {
4628
+ return [];
4629
+ }
4630
+ return createAsyncPromise(function (clearResolve, clearReject) {
4631
+ _openDb(function (dbCtx) {
4632
+ return _deleteEvents(dbCtx, null, function (value) {
4633
+ return true;
4634
+ });
4635
+ })[_DYN_THEN ](function (values) {
4636
+ clearResolve(_getEvents(values));
4637
+ }, function (reason) {
4638
+ clearResolve([]);
4633
4639
  });
4634
- }, 2000);
4640
+ });
4635
4641
  };
4636
- function _createStoreContext(openDbCtx, eventTable) {
4637
- var dbHdl = openDbCtx.db || null;
4638
- var tx = dbHdl && dbHdl[_DYN_TRANSACTION ](eventTable, DbReadWrite);
4639
- if (tx) {
4640
- tx.onabort = function () {
4641
- };
4642
- tx[_DYN_ONERROR ] = function () {
4643
- };
4644
- tx.oncomplete = function () {
4645
- _debugLog(openDbCtx[_DYN_DB_NAME ], "txn.oncomplete");
4646
- };
4647
- return {
4648
- db: openDbCtx,
4649
- store: tx.objectStore(eventTable),
4650
- tx: tx,
4651
- tbl: eventTable,
4652
- openCursor: function (query, processFunc) {
4653
- return _openCursor(openDbCtx, eventTable, query, processFunc);
4654
- },
4655
- newTransaction: function (doAction) {
4656
- return _openStore(openDbCtx, eventTable, doAction);
4657
- }
4658
- };
4659
- }
4660
- return null;
4661
- }
4662
- function _openStore(openDbCtx, eventTable, doAction) {
4663
- if (!openDbCtx || !openDbCtx.db) {
4664
- return createAsyncRejectedPromise(new Error(ErrorMessageDbNotOpen));
4665
- }
4666
- try {
4667
- var result = doAction(_createStoreContext(openDbCtx, eventTable));
4668
- if (isPromiseLike(result)) {
4669
- return result;
4670
- }
4671
- return createAsyncResolvedPromise(result);
4672
- }
4673
- catch (e) {
4674
- return createAsyncRejectedPromise(e);
4675
- }
4676
- }
4677
- function _openCursor(openDbCtx, eventTable, query, processFunc) {
4678
- if (!openDbCtx || !openDbCtx.db) {
4679
- return createAsyncRejectedPromise(new Error(ErrorMessageDbNotOpen));
4680
- }
4681
- var simpleQuery = null;
4682
- if (query && isString(query)) {
4683
- simpleQuery = new SimpleQuery(query);
4684
- }
4685
- else if (query && query.isMatch) {
4686
- simpleQuery = query;
4642
+ _this.clean = function (disable) {
4643
+ if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]() || !!disable) {
4644
+ return false;
4687
4645
  }
4688
- return createAsyncPromise(function (openCursorResolve, openCursorReject) {
4689
- var values = [];
4690
- var cursorRequest = null;
4691
- var queryKeyRange = null;
4692
- if (simpleQuery && simpleQuery[_DYN_KEY_RANGE ]) {
4693
- queryKeyRange = simpleQuery[_DYN_KEY_RANGE ]();
4694
- }
4695
- var storeCtx = _createStoreContext(openDbCtx, eventTable);
4696
- if (queryKeyRange) {
4697
- cursorRequest = storeCtx.store[_DYN_OPEN_CURSOR ](queryKeyRange);
4698
- }
4699
- else {
4700
- cursorRequest = storeCtx.store[_DYN_OPEN_CURSOR ]();
4701
- }
4702
- cursorRequest[_DYN_ONERROR ] = _eventReject(storeCtx.db[_DYN_DB_NAME ], ErrorMessageFailedToOpenCursor, openCursorReject, "openCursor");
4703
- cursorRequest[_DYN_ONSUCCESS ] = function (evt) {
4704
- var _a;
4705
- var cursor = evt.target[Result];
4706
- if (!cursor) {
4707
- openCursorResolve(values);
4708
- return;
4709
- }
4710
- var processCursorState = (_a = {
4711
- store: storeCtx,
4712
- cursor: cursor
4713
- },
4714
- _a[_DYN_CONTINUE ] = function () {
4715
- cursor[_DYN_CONTINUE ]();
4716
- },
4717
- _a.done = function () {
4718
- openCursorResolve(values);
4719
- }
4720
- ,
4721
- _a);
4722
- var value = cursor[_DYN_VALUE ];
4723
- if (simpleQuery && !simpleQuery.isMatch(value)) {
4724
- processCursorState[_DYN_CONTINUE ]();
4725
- return;
4726
- }
4727
- if (processFunc) {
4728
- try {
4729
- switch (processFunc(processCursorState, value, values)) {
4730
- case 2 :
4731
- openCursorResolve(values);
4732
- break;
4733
- case 1 :
4734
- break;
4735
- case 0 :
4736
- default:
4737
- processCursorState[_DYN_CONTINUE ]();
4738
- break;
4739
- }
4740
- }
4741
- catch (ex) {
4742
- openCursorReject(ex);
4743
- }
4646
+ return createAsyncPromise(function (cleanResolve, cleanReject) {
4647
+ _openDb(function (dbCtx) {
4648
+ if (dbCtx.isNew) {
4649
+ return [];
4744
4650
  }
4745
- else {
4746
- values[_DYN_PUSH$1 ](value);
4747
- processCursorState[_DYN_CONTINUE ]();
4651
+ return _dropMaxTimeEvents$1(dbCtx, _maxStorageTime);
4652
+ })[_DYN_THEN ](function (value) {
4653
+ var cnt = value && value[_DYN_LENGTH ];
4654
+ if (_notificationManager && cnt) {
4655
+ batchDropNotification(_notificationManager, cnt, 3 );
4748
4656
  }
4749
- };
4657
+ cleanResolve(cnt && cnt > 0);
4658
+ }, function (reason) {
4659
+ cleanResolve(false);
4660
+ });
4750
4661
  });
4751
- }
4752
- });
4753
- }
4754
- IndexedDbHelper.__ieDyn=1;
4755
- return IndexedDbHelper;
4756
- }());
4757
- var SimpleQuery = /** @class */ (function () {
4758
- function SimpleQuery(theQuery) {
4759
- var _queryCols = [];
4760
- var _keyRange = null;
4761
- dynamicProto(SimpleQuery, this, function (_this) {
4762
- _this[_DYN_KEY_RANGE ] = function () {
4763
- return _keyRange;
4764
4662
  };
4765
- _this.parseQuery = function (query) {
4766
- _queryCols = [];
4767
- if (query) {
4768
- var items = query[_DYN_SPLIT ](";");
4769
- for (var lp = 0; lp < items[_DYN_LENGTH ]; lp++) {
4770
- var item = items[lp];
4771
- var idx = item[_DYN_INDEX_OF ]("=");
4772
- if (idx !== -1) {
4773
- var key = item[_DYN_SUBSTRING ](0, idx);
4774
- var value = item[_DYN_SUBSTRING ](idx + 1);
4775
- if (key[_DYN_INDEX_OF ]("#") === 0) {
4776
- key = key[_DYN_SUBSTRING ](1);
4777
- if (!_keyRange) {
4778
- _keyRange = IDBKeyRange.bound(value, value + "\uffff");
4779
- }
4780
- }
4781
- _this.startsWith(key, value);
4782
- }
4783
- }
4663
+ _this[_DYN_TEARDOWN ] = function () {
4664
+ if (_indexedDb) {
4665
+ _indexedDb.closeDb(_dbName);
4784
4666
  }
4785
4667
  };
4786
- _this.startsWith = function (columnName, value) {
4787
- var _a;
4788
- _queryCols[_DYN_PUSH$1 ]((_a = {},
4789
- _a[_DYN_NAME ] = columnName,
4790
- _a[_DYN_VALUE ] = value,
4791
- _a.type = 0 ,
4792
- _a));
4793
- };
4794
- _this.contains = function (columnName, value) {
4795
- var _a;
4796
- _queryCols[_DYN_PUSH$1 ]((_a = {},
4797
- _a[_DYN_NAME ] = columnName,
4798
- _a[_DYN_VALUE ] = value,
4799
- _a.type = 1 ,
4800
- _a));
4801
- };
4802
- _this.isMatch = function (value) {
4803
- if (!_queryCols || _queryCols[_DYN_LENGTH ] === 0) {
4804
- return true;
4668
+ function _openDb(processFunc) {
4669
+ function _handleDbUpgrade(dbCtx) {
4670
+ return createAsyncPromise(function (createResolve, createReject) {
4671
+ try {
4672
+ _createDb(dbCtx.db);
4673
+ }
4674
+ catch (e) {
4675
+ createReject(e);
4676
+ }
4677
+ createResolve();
4678
+ });
4805
4679
  }
4806
- if (!value) {
4807
- return false;
4680
+ function _handleDbOpen(dbCtx) {
4681
+ return createAsyncPromise(function (openResolve, openReject) {
4682
+ var providerCtx = {
4683
+ iKey: _iKey,
4684
+ id: _endpoint,
4685
+ storageId: _storageId
4686
+ };
4687
+ dbCtx.ctx = providerCtx;
4688
+ doAwait(processFunc(dbCtx), openResolve, openReject);
4689
+ });
4808
4690
  }
4809
- for (var lp = 0; lp < _queryCols[_DYN_LENGTH ]; lp++) {
4810
- var query = _queryCols[lp];
4811
- var chkValue = value[query.name];
4812
- if (chkValue) {
4813
- if (query.type === 0 ) {
4814
- if (chkValue.indexOf(query[_DYN_VALUE ]) !== 0) {
4815
- return false;
4816
- }
4817
- }
4818
- else if (query.type === 1 ) {
4819
- if (chkValue.indexOf(query[_DYN_VALUE ]) === -1) {
4820
- return false;
4691
+ return _indexedDb.openDb(_dbName, DbVersion, _handleDbOpen, _handleDbUpgrade);
4692
+ }
4693
+ function _addDbEvent(dbCtx, dbItem, doRetry) {
4694
+ return createAsyncPromise(function (addEventResolve, addEventReject) {
4695
+ function dropEvents(droppedFunc) {
4696
+ _dropEventsUpToPersistence$1(dbCtx, _maxCriticalCnt, _eventDropPerTime)[_DYN_THEN ](function (droppedCount) {
4697
+ if (_notificationManager && droppedCount) {
4698
+ batchDropNotification(_notificationManager, droppedCount, 2 );
4821
4699
  }
4822
- }
4700
+ droppedFunc(droppedCount);
4701
+ }, function (reason) {
4702
+ droppedFunc(0);
4703
+ });
4704
+ }
4705
+ function _insertNewEvent() {
4706
+ dbCtx[_DYN_OPEN_STORE ](EventObjectStoreName, function (storeCtx) {
4707
+ var request = storeCtx.store.put(dbItem);
4708
+ request[_DYN_ONSUCCESS ] = function (evt) {
4709
+ addEventResolve(dbItem.evt);
4710
+ };
4711
+ request[_DYN_ONERROR ] = function (evt) {
4712
+ if (!doRetry) {
4713
+ addEventReject(new Error(ErrorMessageUnableToAddEvent));
4714
+ return;
4715
+ }
4716
+ function _retryAddEvent(dropCount) {
4717
+ if (dropCount === 0) {
4718
+ addEventReject(new Error(ErrorMessageUnableToAddEvent));
4719
+ }
4720
+ _addDbEvent(dbCtx, dbItem, false)[_DYN_THEN ](function (theItem) {
4721
+ addEventResolve(dbItem.evt);
4722
+ }, function () {
4723
+ addEventReject(new Error(ErrorMessageUnableToAddEvent));
4724
+ });
4725
+ }
4726
+ dropEvents(function (droppedCount) {
4727
+ if (droppedCount > 0) {
4728
+ _retryAddEvent(droppedCount);
4729
+ }
4730
+ else {
4731
+ addEventReject(new Error(ErrorMessageUnableToAddEvent));
4732
+ }
4733
+ });
4734
+ };
4735
+ }).catch(function (e) {
4736
+ addEventReject(e);
4737
+ });
4823
4738
  }
4824
- }
4825
- return true;
4826
- };
4827
- if (theQuery) {
4828
- _this.parseQuery(theQuery);
4739
+ _insertNewEvent();
4740
+ });
4829
4741
  }
4830
4742
  });
4831
4743
  }
4832
- SimpleQuery.__ieDyn=1;
4833
- return SimpleQuery;
4744
+ IndexedDbProvider.__ieDyn=1;
4745
+ return IndexedDbProvider;
4834
4746
  }());
4835
4747
 
4836
- var EventsToDropAtOneTime = 10;
4837
- var StoreVersion = 1;
4838
- var OrhpanedEventThresholdInMs = 10080000;
4839
- var MaxSizeLimit = 5000000;
4840
- var UnknowniKey = "Unknown";
4841
- var ErrorMessageUnableToAddEvent = "DBError: Unable to add event";
4842
- var MaxCriticalEvtsDropCnt = 2;
4843
- var DefaultDbName = "AIOffline";
4844
- var DbVersion = 1;
4845
- var EventObjectStoreName = "Evts";
4846
- function isValidPersistenceLevel(value) {
4847
- return (isNumber(value) && value >= 0 && value <= EventPersistence.Critical);
4748
+ function getEndpointDomain(endpoint) {
4749
+ try {
4750
+ var url = endpoint[_DYN_REPLACE ](/^https?:\/\/|^www\./, "");
4751
+ url = url[_DYN_REPLACE ](/\?/, "/");
4752
+ var arr = url[_DYN_SPLIT ]("/");
4753
+ if (arr && arr[_DYN_LENGTH ] > 0) {
4754
+ return arr[0];
4755
+ }
4756
+ }
4757
+ catch (e) {
4758
+ }
4759
+ return endpoint;
4848
4760
  }
4849
- function _getTime() {
4850
- return new Date()[_DYN_GET_TIME ]();
4761
+ function isGreaterThanZero(value) {
4762
+ return value >= 0;
4851
4763
  }
4852
- function _createDb(db) {
4853
- if (!db.objectStoreNames.contains(EventObjectStoreName)) {
4854
- var evtStore = db.createObjectStore(EventObjectStoreName, { keyPath: "id" });
4855
- evtStore.createIndex("criticalCnt", "criticalCnt", { unique: false });
4764
+ var _base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
4765
+ function base64Encode(data) {
4766
+ var line = "";
4767
+ var input = "";
4768
+ if (isString(data)) {
4769
+ input = data;
4856
4770
  }
4857
- }
4858
- function _getEvents(values) {
4859
- var events = [];
4860
- for (var lp = 0; lp < values[_DYN_LENGTH ]; lp++) {
4861
- var item = values[lp];
4862
- if (item && item.evt) {
4863
- events[_DYN_PUSH$1 ](item.evt);
4864
- }
4771
+ else {
4772
+ input = data[_DYN_TO_STRING ]();
4865
4773
  }
4866
- return events;
4867
- }
4868
- function _addEventByTime(values, newValue) {
4869
- for (var idx = 0; idx < values[_DYN_LENGTH ]; idx++) {
4870
- if (newValue.tm < values[idx].tm) {
4871
- values[_DYN_SPLICE ](idx, 0, newValue);
4872
- return;
4774
+ var output = "";
4775
+ var chr1, chr2, chr3;
4776
+ var lp = 0;
4777
+ while (lp < input[_DYN_LENGTH ]) {
4778
+ chr1 = input[_DYN_CHAR_CODE_AT ](lp++);
4779
+ chr2 = input[_DYN_CHAR_CODE_AT ](lp++);
4780
+ chr3 = input[_DYN_CHAR_CODE_AT ](lp++);
4781
+ line += _base64[_DYN_CHAR_AT ](chr1 >> 2);
4782
+ line += _base64[_DYN_CHAR_AT ](((chr1 & 3) << 4) | (chr2 >> 4));
4783
+ if (isNaN(chr2)) {
4784
+ line += "==";
4785
+ }
4786
+ else {
4787
+ line += _base64[_DYN_CHAR_AT ](((chr2 & 15) << 2) | (chr3 >> 6));
4788
+ line += isNaN(chr3) ? "=" : _base64[_DYN_CHAR_AT ](chr3 & 63);
4873
4789
  }
4874
4790
  }
4875
- values[_DYN_PUSH$1 ](newValue);
4791
+ output += line;
4792
+ return output;
4876
4793
  }
4877
- function _getId(key, values) {
4878
- var len = values[_DYN_LENGTH ];
4879
- for (var lp = 0; lp < len; lp++) {
4880
- if (key === values[lp].id) {
4881
- return lp;
4794
+ function base64Decode(input) {
4795
+ var output = "";
4796
+ var chr1, chr2, chr3;
4797
+ var enc1, enc2, enc3, enc4;
4798
+ var i = 0;
4799
+ input = input[_DYN_REPLACE ](/[^A-Za-z0-9\+\/\=]/g, "");
4800
+ while (i < input[_DYN_LENGTH ]) {
4801
+ enc1 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
4802
+ enc2 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
4803
+ enc3 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
4804
+ enc4 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
4805
+ chr1 = (enc1 << 2) | (enc2 >> 4);
4806
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
4807
+ chr3 = ((enc3 & 3) << 6) | enc4;
4808
+ output = output + String[_DYN_FROM_CHAR_CODE ](chr1);
4809
+ if (enc3 != 64) {
4810
+ output = output + String[_DYN_FROM_CHAR_CODE ](chr2);
4811
+ }
4812
+ if (enc4 != 64) {
4813
+ output = output + String[_DYN_FROM_CHAR_CODE ](chr3);
4882
4814
  }
4883
4815
  }
4884
- return -1;
4816
+ var arr = output[_DYN_SPLIT ](",").map(function (c) { return Number(c); });
4817
+ return new Uint8Array(arr);
4885
4818
  }
4886
- function _cursorContinueEvent(cursorState, value) {
4887
- return function (evt) {
4888
- return cursorState[_DYN_CONTINUE ]();
4889
- };
4819
+ function getTimeId() {
4820
+ var time = (new Date())[_DYN_GET_TIME ]();
4821
+ var random = strSubstr(generateW3CId(), 0, 8);
4822
+ return time + "." + random;
4890
4823
  }
4891
- function _cursorDeleteAndContinue(cursorState, value) {
4892
- var deleteRequest = cursorState.cursor.delete();
4893
- deleteRequest[_DYN_ONERROR ] = _cursorContinueEvent(cursorState);
4894
- deleteRequest[_DYN_ONSUCCESS ] = _cursorContinueEvent(cursorState);
4895
- return 1 ;
4824
+ function getTimeFromId(id) {
4825
+ try {
4826
+ var regex = new RegExp(/\d+\./g);
4827
+ if (id && isString(id) && regex.test(id)) {
4828
+ var arr = id[_DYN_SPLIT ](".");
4829
+ return parseInt(arr[0]);
4830
+ }
4831
+ }
4832
+ catch (e) {
4833
+ }
4834
+ return 0;
4896
4835
  }
4897
- function _getAllEvents(dbCtx, cursorQuery, cnt) {
4898
- return dbCtx.openCursor(EventObjectStoreName, cursorQuery, function (cursorState, value, values) {
4899
- values[_DYN_PUSH$1 ](value);
4900
- if (cnt && values && values[_DYN_LENGTH ] == cnt) {
4901
- return 2 ;
4836
+ var EVT_DISCARD_STR = "eventsDiscarded";
4837
+ var EVT_STORE_STR = "offlineEventsStored";
4838
+ var EVT_SENT_STR = "offlineBatchSent";
4839
+ var BATCH_DROP_STR = "offlineBatchDrop";
4840
+ function forEachMap(map, callback, ordered) {
4841
+ if (map) {
4842
+ var keys = objKeys(map);
4843
+ if (!!ordered && keys) {
4844
+ var time_1 = (new Date())[_DYN_GET_TIME ]();
4845
+ keys = keys.sort(function (a, b) {
4846
+ try {
4847
+ var aTime = getTimeFromId(a) || time_1;
4848
+ var bTime = getTimeFromId(b) || time_1;
4849
+ return aTime - bTime;
4850
+ }
4851
+ catch (e) {
4852
+ }
4853
+ return -1;
4854
+ });
4902
4855
  }
4903
- return 0 ;
4904
- });
4856
+ for (var lp = 0; lp < keys[_DYN_LENGTH ]; lp++) {
4857
+ var key = keys[lp];
4858
+ if (!callback(map[key], key)) {
4859
+ break;
4860
+ }
4861
+ }
4862
+ }
4905
4863
  }
4906
- function _deleteEvents(dbCtx, eventPrefixQuery, shouldDelete) {
4907
- return dbCtx.openCursor(EventObjectStoreName, eventPrefixQuery, function (deleteCursorState, value, values) {
4908
- if (shouldDelete(value)) {
4909
- values[_DYN_PUSH$1 ](value);
4910
- return _cursorDeleteAndContinue(deleteCursorState);
4864
+ function callNotification(mgr, evtName, theArgs) {
4865
+ var manager = (mgr || {});
4866
+ var notifyFunc = manager[evtName];
4867
+ if (notifyFunc) {
4868
+ try {
4869
+ notifyFunc.apply(manager, theArgs);
4911
4870
  }
4912
- return 0 ;
4913
- });
4871
+ catch (e) {
4872
+ }
4873
+ }
4914
4874
  }
4915
- function _dropMaxTimeEvents(dbCtx, maxTime) {
4916
- return createAsyncPromise(function (deleteEvtsResolve, deleteEvtsReject) {
4917
- return _deleteEvents(dbCtx, null, function (value) {
4918
- if (!value || !value.evt) {
4919
- return true;
4920
- }
4921
- var addedTime = getTimeFromId(value.id);
4922
- var minStartTime = _getTime() + 1 - maxTime;
4923
- if (addedTime <= minStartTime) {
4924
- return true;
4875
+ function batchDropNotification(mgr, cnt, reason) {
4876
+ if (mgr && cnt > 0) {
4877
+ callNotification(mgr, BATCH_DROP_STR, [cnt, reason]);
4878
+ }
4879
+ return;
4880
+ }
4881
+
4882
+ var PayloadHelper = /** @class */ (function () {
4883
+ function PayloadHelper(logger) {
4884
+ dynamicProto(PayloadHelper, this, function (_self) {
4885
+ _self.base64ToArr = function (input) {
4886
+ if (!input || !input[_DYN_IS_ARR ]) {
4887
+ return input;
4888
+ }
4889
+ try {
4890
+ var data = input[_DYN_DATA ];
4891
+ if (data) {
4892
+ input[_DYN_DATA ] = base64Decode(data);
4893
+ }
4894
+ return input;
4895
+ }
4896
+ catch (e) {
4897
+ _throwInternal(logger, 1 , 48 , (e && isFunction(e[_DYN_TO_STRING ])) ? e[_DYN_TO_STRING ]() : "Error serializing object", null, true);
4898
+ }
4899
+ return null;
4900
+ };
4901
+ _self.base64ToStr = function (item) {
4902
+ if (!item || !item[_DYN_IS_ARR ]) {
4903
+ return item;
4904
+ }
4905
+ try {
4906
+ var data = item[_DYN_DATA ];
4907
+ if (data) {
4908
+ item[_DYN_DATA ] = base64Encode(data);
4909
+ }
4910
+ return item;
4911
+ }
4912
+ catch (e) {
4913
+ _throwInternal(logger, 1 , 48 , (e && isFunction(e[_DYN_TO_STRING ])) ? e[_DYN_TO_STRING ]() : "Error serializing object", null, true);
4914
+ }
4915
+ return null;
4916
+ };
4917
+ });
4918
+ }
4919
+ PayloadHelper.__ieDyn=1;
4920
+ return PayloadHelper;
4921
+ }());
4922
+
4923
+ var EventsToDropAtOneTime = 10;
4924
+ var Version = "1";
4925
+ var DefaultStorageKey = "AIOffline";
4926
+ var DefaultMaxStorageSizeInBytes = 5000000;
4927
+ var MaxCriticalEvtsDropCnt = 2;
4928
+ var DefaultMaxInStorageTime = 10080000;
4929
+ function _isQuotaExceeded(storage, e) {
4930
+ var result = false;
4931
+ if (e instanceof DOMException) {
4932
+ if (e.code === 22 || e[_DYN_NAME ] === "QuotaExceededError" ||
4933
+ e.code === 1014 || e[_DYN_NAME ] === "NS_ERROR_DOM_QUOTA_REACHED") {
4934
+ if (storage && storage[_DYN_LENGTH ] !== 0) {
4935
+ result = true;
4925
4936
  }
4926
- return false;
4927
- })[_DYN_THEN ](function (values) {
4928
- deleteEvtsResolve(values);
4929
- }, deleteEvtsReject);
4930
- });
4937
+ }
4938
+ }
4939
+ return result;
4931
4940
  }
4932
- function _dropEventsUpToPersistence(dbCtx, maxpriorityCnt, maxDropCnt) {
4933
- return createAsyncPromise(function (dropEventsResolve, dropEventsReject) {
4934
- var droppedEvents = 0;
4935
- function _resolveWithDroppedEvents() {
4936
- dropEventsResolve(droppedEvents);
4941
+ function _getAvailableStorage(type) {
4942
+ var global = getGlobal() || {};
4943
+ var storage = null;
4944
+ try {
4945
+ storage = (global[type]);
4946
+ if (storage) {
4947
+ var x = "__storage_test__";
4948
+ storage.setItem(x, x);
4949
+ storage[_DYN_REMOVE_ITEM ](x);
4937
4950
  }
4938
- function _dropEvent(deleteStoreCtx, dropItem) {
4939
- return createAsyncPromise(function (deleteResolve) {
4940
- var deleteRequest = deleteStoreCtx.store.delete(dropItem.key);
4941
- deleteRequest[_DYN_ONSUCCESS ] = function (evt) {
4942
- droppedEvents++;
4943
- deleteResolve();
4944
- };
4945
- deleteRequest[_DYN_ONERROR ] = function (evt) {
4946
- deleteResolve();
4947
- };
4948
- });
4951
+ }
4952
+ catch (e) {
4953
+ if (!_isQuotaExceeded(storage, e)) {
4954
+ storage = null;
4949
4955
  }
4950
- function _processCandidates(dropCandidates) {
4951
- if (dropCandidates[_DYN_LENGTH ] === 0) {
4952
- _resolveWithDroppedEvents();
4953
- return;
4956
+ }
4957
+ return storage;
4958
+ }
4959
+ function _dropEventsUpToPersistence(maxCnt, events, eventsToDropAtOneTime) {
4960
+ var dropKeys = [];
4961
+ var persistenceCnt = 0;
4962
+ var droppedEvents = 0;
4963
+ while (persistenceCnt <= maxCnt && droppedEvents < eventsToDropAtOneTime) {
4964
+ forEachMap(events, function (evt, key) {
4965
+ if (evt[_DYN_CRITICAL_CNT ] === persistenceCnt) {
4966
+ dropKeys[_DYN_PUSH ](key);
4967
+ droppedEvents++;
4954
4968
  }
4955
- dbCtx[_DYN_OPEN_STORE ](EventObjectStoreName, function (deleteStoreCtx) {
4956
- var deleteEvts = [];
4957
- for (var lp = 0; lp < dropCandidates[_DYN_LENGTH ]; lp++) {
4958
- deleteEvts[_DYN_PUSH$1 ](_dropEvent(deleteStoreCtx, dropCandidates[lp]));
4959
- }
4960
- return createAsyncAllPromise(deleteEvts)[_DYN_THEN ](_resolveWithDroppedEvents, _resolveWithDroppedEvents);
4961
- });
4969
+ return (droppedEvents < eventsToDropAtOneTime);
4970
+ });
4971
+ if (droppedEvents > 0) {
4972
+ for (var lp = 0; lp < dropKeys[_DYN_LENGTH ]; lp++) {
4973
+ delete events[dropKeys[lp]];
4974
+ }
4975
+ return droppedEvents;
4962
4976
  }
4963
- var cursorPromise = dbCtx.openCursor(EventObjectStoreName, null, function (cursorState, value, values) {
4964
- if (value.evt[_DYN_CRITICAL_CNT ] <= maxpriorityCnt) {
4965
- _addEventByTime(values, value);
4966
- if (values[_DYN_LENGTH ] > maxDropCnt) {
4967
- values.splice(values[_DYN_LENGTH ] - 1, 1);
4968
- }
4977
+ persistenceCnt++;
4978
+ }
4979
+ return droppedEvents;
4980
+ }
4981
+ function _dropMaxTimeEvents(maxStorageTime, events, eventsToDropAtOneTime, mgr) {
4982
+ var dropKeys = [];
4983
+ var droppedEvents = 0;
4984
+ var currentTime = (new Date())[_DYN_GET_TIME ]() + 1;
4985
+ var minStartTime = (currentTime - maxStorageTime);
4986
+ try {
4987
+ forEachMap(events, function (evt, key) {
4988
+ var id = getTimeFromId(key);
4989
+ if (id <= minStartTime) {
4990
+ dropKeys[_DYN_PUSH ](key);
4991
+ droppedEvents++;
4969
4992
  }
4970
- return 0 ;
4971
- });
4972
- cursorPromise[_DYN_THEN ](_processCandidates, function () {
4973
- dropEventsResolve(0);
4993
+ return (droppedEvents < eventsToDropAtOneTime);
4974
4994
  });
4975
- });
4995
+ if (droppedEvents > 0) {
4996
+ for (var lp = 0; lp < dropKeys[_DYN_LENGTH ]; lp++) {
4997
+ delete events[dropKeys[lp]];
4998
+ }
4999
+ if (mgr) {
5000
+ batchDropNotification(mgr, droppedEvents, 3 );
5001
+ }
5002
+ return true;
5003
+ }
5004
+ }
5005
+ catch (e) {
5006
+ }
5007
+ return droppedEvents > 0;
4976
5008
  }
4977
- var IndexedDbProvider = /** @class */ (function () {
4978
- function IndexedDbProvider(id, unloadHookContainer) {
4979
- dynamicProto(IndexedDbProvider, this, function (_this) {
4980
- var _indexedDb = null;
4981
- var _dbName = null;
4982
- var _iKey = UnknowniKey;
4983
- var _storageId = null;
4984
- var _autoClean = null;
5009
+ var WebStorageProvider = /** @class */ (function () {
5010
+ function WebStorageProvider(storageType, id, unloadHookContainer) {
5011
+ dynamicProto(WebStorageProvider, this, function (_this) {
5012
+ var _storage = null;
5013
+ var _storageKeyPrefix = DefaultStorageKey;
5014
+ var _maxStorageSizeInBytes = DefaultMaxStorageSizeInBytes;
5015
+ var _payloadHelper = null;
5016
+ var _storageKey = null;
4985
5017
  var _endpoint = null;
4986
- var _storageKeyPrefix = null;
4987
5018
  var _maxStorageTime = null;
4988
5019
  var _eventDropPerTime = null;
4989
5020
  var _maxCriticalCnt = null;
4990
- var _maxStorageSizeInBytes = null;
5021
+ var _notificationManager = null;
4991
5022
  _this.id = id;
4992
- _this[_DYN_INITIALIZE ] = function (providerContext) {
4993
- var diagLog = providerContext.itemCtx[_DYN_DIAG_LOG ]();
4994
- _indexedDb = new IndexedDbHelper(diagLog);
4995
- if (!_indexedDb[_DYN_IS_AVAILABLE ]()) {
4996
- _indexedDb = null;
5023
+ _storage = _getAvailableStorage(storageType) || null;
5024
+ _this["_getDbgPlgTargets"] = function () {
5025
+ return [_storageKey, _maxStorageSizeInBytes, _maxStorageTime];
5026
+ };
5027
+ _this[_DYN_INITIALIZE ] = function (providerContext, endpointUrl) {
5028
+ if (!_storage) {
4997
5029
  return false;
4998
5030
  }
4999
- var coreConfig = providerContext[_DYN_ITEM_CTX ].getCfg();
5000
- var itemCtx = providerContext[_DYN_ITEM_CTX ];
5001
- _iKey = itemCtx.getCfg()[_DYN_INSTRUMENTATION_KEY ] || coreConfig[_DYN_INSTRUMENTATION_KEY ];
5002
5031
  var storageConfig = providerContext[_DYN_STORAGE_CONFIG ];
5003
- _storageId = _this.id || providerContext.id || newGuid();
5004
- _endpoint = getEndpointDomain(providerContext[_DYN_ENDPOINT ]);
5005
- _autoClean = !!storageConfig.autoClean;
5006
- _storageKeyPrefix = storageConfig[_DYN_STORAGE_KEY_PREFIX ] || DefaultDbName;
5007
- _dbName = _storageKeyPrefix + "_" + DbVersion + "_" + _endpoint;
5032
+ var itemCtx = providerContext[_DYN_ITEM_CTX ];
5033
+ _payloadHelper = new PayloadHelper(itemCtx[_DYN_DIAG_LOG ]());
5034
+ _endpoint = getEndpointDomain(endpointUrl || providerContext[_DYN_ENDPOINT ]);
5035
+ var autoClean = !!storageConfig.autoClean;
5036
+ _notificationManager = providerContext[_DYN_NOTIFICATION_MGR ];
5008
5037
  var unloadHook = onConfigChange(storageConfig, function () {
5009
- _maxStorageTime = storageConfig[_DYN_IN_STORAGE_MAX_TIME ] || OrhpanedEventThresholdInMs;
5010
- _maxStorageSizeInBytes = storageConfig[_DYN_MAX_STORAGE_SIZE_IN_2 ] || MaxSizeLimit;
5011
- var dropNum = storageConfig[_DYN__EVENTS_TO_DROP_PER_3 ];
5038
+ _maxStorageSizeInBytes = storageConfig.maxStorageSizeInBytes || DefaultMaxStorageSizeInBytes;
5039
+ _maxStorageTime = storageConfig[_DYN_IN_STORAGE_MAX_TIME ] || DefaultMaxInStorageTime;
5040
+ var dropNum = storageConfig[_DYN__EVENTS_TO_DROP_PER_2 ];
5012
5041
  _eventDropPerTime = isNotNullOrUndefined(dropNum) ? dropNum : EventsToDropAtOneTime;
5013
- _maxCriticalCnt = storageConfig[_DYN_MAX_CRITICAL_EVTS_DR4 ] || MaxCriticalEvtsDropCnt;
5042
+ _maxCriticalCnt = storageConfig[_DYN_MAX_CRITICAL_EVTS_DR3 ] || MaxCriticalEvtsDropCnt;
5014
5043
  });
5015
5044
  unloadHookContainer && unloadHookContainer.add(unloadHook);
5016
- if (_dbName) {
5017
- doAwaitResponse(_this.clean(!_autoClean), function (response) {
5018
- _openDb(function (dbCtx) {
5019
- return true;
5020
- })[_DYN_THEN ](function (value) {
5021
- }, function (reason) {
5022
- diagLog.warnToConsole("IndexedDbProvider failed to initialize - " + (reason || "<unknown>"));
5023
- _indexedDb = null;
5024
- });
5025
- });
5045
+ _storageKeyPrefix = storageConfig[_DYN_STORAGE_KEY_PREFIX ] || DefaultStorageKey;
5046
+ _storageKey = _storageKeyPrefix + "_" + Version + "_" + _endpoint;
5047
+ if (autoClean) {
5048
+ _this.clean();
5026
5049
  }
5027
5050
  return true;
5028
5051
  };
5029
- _this["_getDbgPlgTargets"] = function () {
5030
- return [_dbName, _maxStorageSizeInBytes, _maxStorageTime, _indexedDb];
5031
- };
5032
- _this[_DYN_SUPPORTS_SYNC_REQUES5 ] = function () {
5033
- return false;
5052
+ _this[_DYN_SUPPORTS_SYNC_REQUES4 ] = function () {
5053
+ return true;
5034
5054
  };
5035
5055
  _this.getAllEvents = function (cnt) {
5036
- if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
5037
- return [];
5056
+ try {
5057
+ if (!_storage) {
5058
+ return;
5059
+ }
5060
+ return _getEvts(cnt);
5061
+ }
5062
+ catch (e) {
5063
+ return createAsyncRejectedPromise(e);
5038
5064
  }
5039
- return _openDb(function (dbCtx) {
5040
- return createAsyncPromise(function (allEventsResolve, allEventsReject) {
5041
- _getAllEvents(dbCtx, null, cnt)[_DYN_THEN ](function (values) {
5042
- allEventsResolve(_getEvents(values));
5043
- }, allEventsReject);
5044
- });
5045
- });
5046
5065
  };
5047
5066
  _this[_DYN_GET_NEXT_BATCH ] = function () {
5048
- if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
5049
- return [];
5067
+ try {
5068
+ if (!_storage) {
5069
+ return;
5070
+ }
5071
+ return _getEvts(1, true);
5050
5072
  }
5051
- return _openDb(function (dbCtx) {
5052
- return createAsyncPromise(function (allEventsResolve, allEventsReject) {
5053
- _getAllEvents(dbCtx, null, 1)[_DYN_THEN ](function (values) {
5054
- allEventsResolve(_getEvents(values));
5055
- }, allEventsReject);
5056
- });
5057
- });
5058
- };
5059
- _this[_DYN_ADD_EVENT ] = function (key, item, itemCtx) {
5060
- if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
5061
- return item;
5073
+ catch (e) {
5074
+ return createAsyncRejectedPromise(e);
5062
5075
  }
5063
- item.id = item.id || getTimeId();
5064
- item[_DYN_CRITICAL_CNT ] = item[_DYN_CRITICAL_CNT ] || 0;
5065
- return _openDb(function (dbCtx) {
5066
- var eventKey = key || item.id;
5067
- var dbItem = {
5068
- id: eventKey,
5069
- evt: item,
5070
- tm: _getTime(),
5071
- v: StoreVersion
5072
- };
5073
- return _addDbEvent(dbCtx, dbItem, true);
5074
- });
5075
5076
  };
5076
- _this[_DYN_REMOVE_EVENTS ] = function (evts) {
5077
- if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
5078
- return [];
5077
+ function _getEvts(cnt, ordered) {
5078
+ var allItems = [];
5079
+ var theStore = _fetchStoredDb(_storageKey).db;
5080
+ if (theStore) {
5081
+ var events = theStore[_DYN_EVTS ];
5082
+ forEachMap(events, function (evt) {
5083
+ if (evt) {
5084
+ if (evt[_DYN_IS_ARR ]) {
5085
+ evt = _payloadHelper.base64ToArr(evt);
5086
+ }
5087
+ allItems[_DYN_PUSH ](evt);
5088
+ }
5089
+ if (cnt && allItems && allItems[_DYN_LENGTH ] == cnt) {
5090
+ return false;
5091
+ }
5092
+ return true;
5093
+ }, ordered);
5079
5094
  }
5080
- var removedEvents = [];
5081
- return createAsyncPromise(function (removeEventsResolve, removeEventsReject) {
5082
- _openDb(function (dbCtx) {
5083
- return dbCtx.openCursor(EventObjectStoreName, null, function (cursorState, value, values) {
5084
- if (_getId(value.id, evts) !== -1) {
5085
- var deleteRequest = cursorState.cursor.delete();
5086
- deleteRequest[_DYN_ONERROR ] = _cursorContinueEvent(cursorState);
5087
- deleteRequest[_DYN_ONSUCCESS ] = function () {
5088
- removedEvents[_DYN_PUSH$1 ](value.evt);
5089
- cursorState[_DYN_CONTINUE ]();
5090
- };
5091
- return 1 ;
5095
+ return allItems;
5096
+ }
5097
+ _this[_DYN_ADD_EVENT ] = function (key, evt, itemCtx) {
5098
+ try {
5099
+ var theStore = _fetchStoredDb(_storageKey);
5100
+ evt.id = evt.id || getTimeId();
5101
+ evt[_DYN_CRITICAL_CNT ] = evt[_DYN_CRITICAL_CNT ] || 0;
5102
+ var events = theStore.db[_DYN_EVTS ];
5103
+ var id_1 = evt.id;
5104
+ if (evt && evt[_DYN_IS_ARR ]) {
5105
+ evt = _payloadHelper.base64ToStr(evt);
5106
+ }
5107
+ var preDroppedCnt = 0;
5108
+ while (evt) {
5109
+ events[id_1] = evt;
5110
+ if (_updateStoredDb(theStore)) {
5111
+ if (preDroppedCnt && _notificationManager) {
5112
+ batchDropNotification(_notificationManager, preDroppedCnt, 2 );
5092
5113
  }
5093
- return 0 ;
5094
- });
5095
- })[_DYN_THEN ](function () {
5096
- removeEventsResolve(removedEvents);
5097
- }, function (reason) {
5098
- removeEventsResolve(removedEvents);
5099
- });
5100
- });
5114
+ return evt;
5115
+ }
5116
+ delete events[id_1];
5117
+ var droppedCnt = _dropEventsUpToPersistence(_maxCriticalCnt, events, _eventDropPerTime);
5118
+ preDroppedCnt += droppedCnt;
5119
+ if (!droppedCnt) {
5120
+ return createAsyncRejectedPromise(new Error("Unable to free up event space"));
5121
+ }
5122
+ }
5123
+ }
5124
+ catch (e) {
5125
+ return createAsyncRejectedPromise(e);
5126
+ }
5101
5127
  };
5102
- _this.clear = function (disable) {
5103
- if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]() || !!disable) {
5104
- return [];
5128
+ _this[_DYN_REMOVE_EVENTS ] = function (evts) {
5129
+ try {
5130
+ var theStore = _fetchStoredDb(_storageKey, false);
5131
+ var currentDb = theStore.db;
5132
+ if (currentDb) {
5133
+ var events = currentDb[_DYN_EVTS ];
5134
+ try {
5135
+ for (var i = 0; i < evts[_DYN_LENGTH ]; ++i) {
5136
+ var evt = evts[i];
5137
+ delete events[evt.id];
5138
+ }
5139
+ if (_updateStoredDb(theStore)) {
5140
+ return evts;
5141
+ }
5142
+ }
5143
+ catch (e) {
5144
+ }
5145
+ evts = _clearDatabase(theStore.key);
5146
+ }
5147
+ return evts;
5105
5148
  }
5106
- return createAsyncPromise(function (clearResolve, clearReject) {
5107
- _openDb(function (dbCtx) {
5108
- return _deleteEvents(dbCtx, null, function (value) {
5149
+ catch (e) {
5150
+ return createAsyncRejectedPromise(e);
5151
+ }
5152
+ };
5153
+ _this[_DYN_CLEAR ] = function () {
5154
+ try {
5155
+ var removedItems_1 = [];
5156
+ var theStore = _fetchStoredDb(_storageKey, false);
5157
+ var storedDb = theStore.db;
5158
+ if (storedDb) {
5159
+ var events_1 = storedDb[_DYN_EVTS ];
5160
+ forEachMap(events_1, function (evt) {
5161
+ if (evt) {
5162
+ delete events_1[evt.id];
5163
+ removedItems_1[_DYN_PUSH ](evt);
5164
+ }
5109
5165
  return true;
5110
5166
  });
5111
- })[_DYN_THEN ](function (values) {
5112
- clearResolve(_getEvents(values));
5113
- }, function (reason) {
5114
- clearResolve([]);
5115
- });
5116
- });
5167
+ _updateStoredDb(theStore);
5168
+ }
5169
+ return removedItems_1;
5170
+ }
5171
+ catch (e) {
5172
+ return createAsyncRejectedPromise(e);
5173
+ }
5117
5174
  };
5118
- _this.clean = function (disable) {
5119
- if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]() || !!disable) {
5175
+ _this.clean = function () {
5176
+ var storeDetails = _fetchStoredDb(_storageKey, false);
5177
+ var currentDb = storeDetails.db;
5178
+ if (currentDb) {
5179
+ var events = currentDb[_DYN_EVTS ];
5180
+ try {
5181
+ var isDropped = _dropMaxTimeEvents(_maxStorageTime, events, _eventDropPerTime, _notificationManager);
5182
+ if (isDropped) {
5183
+ return _updateStoredDb(storeDetails);
5184
+ }
5185
+ return true;
5186
+ }
5187
+ catch (e) {
5188
+ }
5120
5189
  return false;
5121
5190
  }
5122
- return createAsyncPromise(function (cleanResolve, cleanReject) {
5123
- _openDb(function (dbCtx) {
5124
- if (dbCtx.isNew) {
5125
- return [];
5126
- }
5127
- return _dropMaxTimeEvents(dbCtx, _maxStorageTime);
5128
- })[_DYN_THEN ](function (value) {
5129
- cleanResolve(value && value[_DYN_LENGTH ] > 0);
5130
- }, function (reason) {
5131
- cleanResolve(false);
5132
- });
5133
- });
5134
5191
  };
5135
5192
  _this[_DYN_TEARDOWN ] = function () {
5136
- if (_indexedDb) {
5137
- _indexedDb.closeDb(_dbName);
5193
+ try {
5194
+ var theStore = _fetchStoredDb(_storageKey, false);
5195
+ var storedDb = theStore.db;
5196
+ if (storedDb) {
5197
+ storedDb[_DYN_LAST_ACCESS_TIME ] = 0;
5198
+ _updateStoredDb(theStore, false);
5199
+ }
5200
+ }
5201
+ catch (e) {
5138
5202
  }
5139
5203
  };
5140
- function _openDb(processFunc) {
5141
- function _handleDbUpgrade(dbCtx) {
5142
- return createAsyncPromise(function (createResolve, createReject) {
5204
+ function _newStore(dbKey, db) {
5205
+ return {
5206
+ key: dbKey,
5207
+ db: db
5208
+ };
5209
+ }
5210
+ function _fetchStoredDb(dbKey, returnDefault) {
5211
+ var _a;
5212
+ if (returnDefault === void 0) { returnDefault = true; }
5213
+ var dbToStore = null;
5214
+ if (_storage) {
5215
+ var previousDb = _storage.getItem(dbKey);
5216
+ if (previousDb) {
5143
5217
  try {
5144
- _createDb(dbCtx.db);
5218
+ dbToStore = getJSON().parse(previousDb);
5145
5219
  }
5146
5220
  catch (e) {
5147
- createReject(e);
5221
+ _storage[_DYN_REMOVE_ITEM ](dbKey);
5148
5222
  }
5149
- createResolve();
5150
- });
5223
+ }
5224
+ if (returnDefault && !dbToStore) {
5225
+ dbToStore = (_a = {
5226
+ evts: {}
5227
+ },
5228
+ _a[_DYN_LAST_ACCESS_TIME ] = 0,
5229
+ _a);
5230
+ }
5151
5231
  }
5152
- function _handleDbOpen(dbCtx) {
5153
- return createAsyncPromise(function (openResolve, openReject) {
5154
- var providerCtx = {
5155
- iKey: _iKey,
5156
- id: _endpoint,
5157
- storageId: _storageId
5158
- };
5159
- dbCtx.ctx = providerCtx;
5160
- doAwait(processFunc(dbCtx), openResolve, openReject);
5161
- });
5232
+ return _newStore(dbKey, dbToStore);
5233
+ }
5234
+ function _updateStoredDb(jsonStore, updateLastAccessTime) {
5235
+ if (updateLastAccessTime === void 0) { updateLastAccessTime = true; }
5236
+ var dbToStore = jsonStore.db;
5237
+ if (dbToStore) {
5238
+ if (updateLastAccessTime) {
5239
+ dbToStore.lastAccessTime = (new Date())[_DYN_GET_TIME ]();
5240
+ }
5162
5241
  }
5163
- return _indexedDb.openDb(_dbName, DbVersion, _handleDbOpen, _handleDbUpgrade);
5242
+ try {
5243
+ var jsonString = getJSON().stringify(dbToStore);
5244
+ if (jsonString[_DYN_LENGTH ] > _maxStorageSizeInBytes) {
5245
+ return false;
5246
+ }
5247
+ _storage && _storage.setItem(jsonStore.key, jsonString);
5248
+ }
5249
+ catch (e) {
5250
+ return false;
5251
+ }
5252
+ return true;
5164
5253
  }
5165
- function _addDbEvent(dbCtx, dbItem, doRetry) {
5166
- return createAsyncPromise(function (addEventResolve, addEventReject) {
5167
- function dropEvents(droppedFunc) {
5168
- _dropEventsUpToPersistence(dbCtx, _maxCriticalCnt, _eventDropPerTime)[_DYN_THEN ](function (droppedCount) {
5169
- droppedFunc(droppedCount);
5170
- }, function (reason) {
5171
- droppedFunc(0);
5254
+ function _clearDatabase(dbKey) {
5255
+ var removedItems = [];
5256
+ var storeDetails = _fetchStoredDb(dbKey, false);
5257
+ var currentDb = storeDetails.db;
5258
+ if (currentDb) {
5259
+ var events = currentDb[_DYN_EVTS ];
5260
+ try {
5261
+ forEachMap(events, function (evt) {
5262
+ if (evt) {
5263
+ removedItems[_DYN_PUSH ](evt);
5264
+ }
5265
+ return true;
5172
5266
  });
5173
5267
  }
5174
- function _insertNewEvent() {
5175
- dbCtx[_DYN_OPEN_STORE ](EventObjectStoreName, function (storeCtx) {
5176
- var request = storeCtx.store.put(dbItem);
5177
- request[_DYN_ONSUCCESS ] = function (evt) {
5178
- addEventResolve(dbItem.evt);
5179
- };
5180
- request[_DYN_ONERROR ] = function (evt) {
5181
- if (!doRetry) {
5182
- addEventReject(new Error(ErrorMessageUnableToAddEvent));
5183
- return;
5184
- }
5185
- function _retryAddEvent(dropCount) {
5186
- if (dropCount === 0) {
5187
- addEventReject(new Error(ErrorMessageUnableToAddEvent));
5188
- }
5189
- _addDbEvent(dbCtx, dbItem, false)[_DYN_THEN ](function (theItem) {
5190
- addEventResolve(dbItem.evt);
5191
- }, function () {
5192
- addEventReject(new Error(ErrorMessageUnableToAddEvent));
5193
- });
5194
- }
5195
- dropEvents(function (droppedCount) {
5196
- if (droppedCount > 0) {
5197
- _retryAddEvent(droppedCount);
5198
- }
5199
- else {
5200
- addEventReject(new Error(ErrorMessageUnableToAddEvent));
5201
- }
5202
- });
5203
- };
5204
- }).catch(function (e) {
5205
- addEventReject(e);
5206
- });
5268
+ catch (e) {
5207
5269
  }
5208
- _insertNewEvent();
5209
- });
5270
+ _storage && _storage[_DYN_REMOVE_ITEM ](storeDetails.key);
5271
+ }
5272
+ return removedItems;
5210
5273
  }
5211
5274
  });
5212
5275
  }
5213
- IndexedDbProvider.__ieDyn=1;
5214
- return IndexedDbProvider;
5276
+ WebStorageProvider.__ieDyn=1;
5277
+ return WebStorageProvider;
5215
5278
  }());
5216
5279
 
5217
5280
  var MaxStorageProviderConfig = 2;
@@ -5412,7 +5475,7 @@
5412
5475
  if (!_provider) {
5413
5476
  reject(new Error(NoProviderErrMsg));
5414
5477
  }
5415
- return doAwaitResponse(_provider.clear(), function (response) {
5478
+ return doAwaitResponse(_provider[_DYN_CLEAR ](), function (response) {
5416
5479
  try {
5417
5480
  var cnt = 0;
5418
5481
  if (!response[_DYN_REJECTED ]) {
@@ -5524,13 +5587,13 @@
5524
5587
  if (!isNullOrUndefined(evtsLimitInMem) && _self[_DYN_COUNT ]() >= evtsLimitInMem) {
5525
5588
  return false;
5526
5589
  }
5527
- _buffer[_DYN_PUSH$1 ](payload);
5590
+ _buffer[_DYN_PUSH ](payload);
5528
5591
  return true;
5529
5592
  };
5530
5593
  _self[_DYN_COUNT ] = function () {
5531
5594
  return _buffer[_DYN_LENGTH ];
5532
5595
  };
5533
- _self.clear = function () {
5596
+ _self[_DYN_CLEAR ] = function () {
5534
5597
  _buffer = [];
5535
5598
  };
5536
5599
  _self[_DYN_GET_ITEMS ] = function () {
@@ -5983,7 +6046,7 @@
5983
6046
  return Sender;
5984
6047
  }());
5985
6048
 
5986
- var version = '0.1.1-nightly3.2402-20';
6049
+ var version = '0.1.1-nightly3.2403-01';
5987
6050
  var DefaultOfflineIdentifier = "OfflineChannel";
5988
6051
  var DefaultBatchInterval = 15000;
5989
6052
  var DefaultInMemoMaxTime = 15000;
@@ -6035,6 +6098,7 @@
6035
6098
  var _primaryChannelId;
6036
6099
  var _overrideIkey;
6037
6100
  var _evtsLimitInMemo;
6101
+ var _notificationManager;
6038
6102
  _initDefaults();
6039
6103
  _self[_DYN_INITIALIZE ] = function (coreConfig, core, extensions, pluginChain) {
6040
6104
  if (!_hasInitialized) {
@@ -6044,21 +6108,26 @@
6044
6108
  var evtNamespace = mergeEvtNamespace(createUniqueNamespace("OfflineSender"), core.evtNamespace && core.evtNamespace());
6045
6109
  _offlineListener = createOfflineListener(evtNamespace);
6046
6110
  _taskScheduler = createTaskScheduler(createAsyncPromise, "offline channel");
6111
+ _notificationManager = core.getNotifyMgr();
6047
6112
  }
6048
- _createUrlConfig(coreConfig, core, extensions, pluginChain);
6049
- var ctx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);
6050
- _sender[_DYN_INITIALIZE ](coreConfig, core, ctx, _diagLogger, _primaryChannelId, _self._unloadHooks);
6051
- if (_sender) {
6052
- _senderInst = _sender.getXhrInst();
6053
- _offlineListener.addListener(function (val) {
6054
- if (!val[_DYN_IS_ONLINE ]) {
6055
- _sendNextBatchTimer && _sendNextBatchTimer[_DYN_CANCEL ]();
6056
- }
6057
- else {
6058
- _sendNextBatchTimer && _sendNextBatchTimer[_DYN_REFRESH ]();
6059
- }
6060
- });
6061
- _setSendNextTimer();
6113
+ try {
6114
+ _createUrlConfig(coreConfig, core, extensions, pluginChain);
6115
+ var ctx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);
6116
+ _sender[_DYN_INITIALIZE ](coreConfig, core, ctx, _diagLogger, _primaryChannelId, _self._unloadHooks);
6117
+ if (_sender) {
6118
+ _senderInst = _sender.getXhrInst();
6119
+ _offlineListener.addListener(function (val) {
6120
+ if (!val[_DYN_IS_ONLINE ]) {
6121
+ _sendNextBatchTimer && _sendNextBatchTimer[_DYN_CANCEL ]();
6122
+ }
6123
+ else {
6124
+ _setSendNextTimer();
6125
+ }
6126
+ });
6127
+ _setSendNextTimer();
6128
+ }
6129
+ }
6130
+ catch (e) {
6062
6131
  }
6063
6132
  };
6064
6133
  _self.processTelemetry = function (evt, itemCtx) {
@@ -6089,11 +6158,15 @@
6089
6158
  _flushInMemoItems();
6090
6159
  var retry = _inMemoBatch[_DYN_ADD_EVENT ](evt);
6091
6160
  if (!retry) {
6161
+ _evtDropNotification([evt], EventsDiscardedReason.QueueFull);
6092
6162
  _throwInternal(_diagLogger, 2 , 105 , "Maximum offline in-memory buffer size reached", true);
6093
6163
  }
6094
6164
  }
6095
6165
  _setupInMemoTimer();
6096
6166
  }
6167
+ else {
6168
+ _evtDropNotification([item], EventsDiscardedReason.InvalidEvent);
6169
+ }
6097
6170
  return;
6098
6171
  }
6099
6172
  }
@@ -6113,23 +6186,23 @@
6113
6186
  _setupInMemoTimer();
6114
6187
  _setSendNextTimer();
6115
6188
  };
6116
- _self.onunloadFlush = function () {
6189
+ _self[_DYN_ONUNLOAD_FLUSH ] = function () {
6117
6190
  if (!_paused) {
6118
- var shouldContinue = true;
6119
- while (_inMemoBatch[_DYN_COUNT ]() && shouldContinue) {
6120
- shouldContinue = _flushInMemoItems(true);
6191
+ while (_inMemoBatch[_DYN_COUNT ]()) {
6192
+ _flushInMemoItems(true);
6121
6193
  }
6122
6194
  }
6123
6195
  };
6124
6196
  _self.flush = function (sync, callBack, sendReason) {
6197
+ return _self[_DYN_ONUNLOAD_FLUSH ]();
6125
6198
  };
6126
6199
  _self.getOfflineListener = function () {
6127
6200
  return _offlineListener;
6128
6201
  };
6129
6202
  _self._doTeardown = function (unloadCtx, unloadState) {
6130
- _self.onunloadFlush();
6203
+ _self[_DYN_ONUNLOAD_FLUSH ]();
6131
6204
  _offlineListener && runTargetUnload(_offlineListener, false);
6132
- var handler = _urlCfg.batchHandler;
6205
+ var handler = _urlCfg[_DYN_BATCH_HANDLER ];
6133
6206
  handler && handler[_DYN_TEARDOWN ]();
6134
6207
  _clearScheduledTimer();
6135
6208
  _initDefaults();
@@ -6202,7 +6275,7 @@
6202
6275
  criticalCnt_1++;
6203
6276
  }
6204
6277
  idx_1 = index;
6205
- payloadArr_1[_DYN_PUSH$1 ](payload);
6278
+ payloadArr_1[_DYN_PUSH ](payload);
6206
6279
  });
6207
6280
  if (!payloadArr_1[_DYN_LENGTH ]) {
6208
6281
  return;
@@ -6211,15 +6284,27 @@
6211
6284
  _inMemoBatch = _inMemoBatch.createNew(_endpoint, inMemo[_DYN_GET_ITEMS ]().slice(idx_1 + 1), _evtsLimitInMemo);
6212
6285
  var payloadData = _constructPayloadData(payloadArr_1, criticalCnt_1);
6213
6286
  var callback = function (res) {
6214
- if (res[_DYN_STATE ] == 2 ) {
6215
- arrForEach(sentItems_1, function (item) {
6216
- _inMemoBatch[_DYN_ADD_EVENT ](item);
6217
- });
6218
- _setupInMemoTimer();
6287
+ if (!res || !res[_DYN_STATE ]) {
6288
+ return null;
6289
+ }
6290
+ var state = res[_DYN_STATE ];
6291
+ if (state == 2 ) {
6292
+ if (!unload) {
6293
+ arrForEach(sentItems_1, function (item) {
6294
+ _inMemoBatch[_DYN_ADD_EVENT ](item);
6295
+ });
6296
+ _setupInMemoTimer();
6297
+ }
6298
+ else {
6299
+ _evtDropNotification(sentItems_1, EventsDiscardedReason.NonRetryableStatus);
6300
+ }
6301
+ }
6302
+ else {
6303
+ _storeNotification(sentItems_1);
6219
6304
  }
6220
6305
  };
6221
6306
  if (payloadData) {
6222
- var promise = _urlCfg.batchHandler.storeBatch(payloadData, callback, unload);
6307
+ var promise = _urlCfg[_DYN_BATCH_HANDLER ].storeBatch(payloadData, callback, unload);
6223
6308
  _queueStorageEvent("storeBatch", promise);
6224
6309
  }
6225
6310
  if (!_inMemoBatch[_DYN_COUNT ]()) {
@@ -6248,10 +6333,14 @@
6248
6333
  }
6249
6334
  var data = res && res[_DYN_DATA ];
6250
6335
  if (state === 1 && data) {
6336
+ _sentNotification(data);
6251
6337
  _sendNextBatchTimer && _sendNextBatchTimer[_DYN_REFRESH ]();
6252
6338
  }
6339
+ if (state === 3 ) {
6340
+ batchDropNotification(_notificationManager, 1, 1 );
6341
+ }
6253
6342
  };
6254
- var promise = _urlCfg.batchHandler.sendNextBatch(callback, false, _senderInst);
6343
+ var promise = _urlCfg[_DYN_BATCH_HANDLER ].sendNextBatch(callback, false, _senderInst);
6255
6344
  _queueStorageEvent("sendNextBatch", promise);
6256
6345
  }
6257
6346
  }
@@ -6346,7 +6435,7 @@
6346
6435
  var ctx = createProcessTelemetryContext(null, theConfig, core);
6347
6436
  storageConfig = ctx.getExtCfg(_self.identifier, defaultOfflineChannelConfig);
6348
6437
  var channelIds = storageConfig.primaryOnlineChannelId;
6349
- var onlineUrl = _endpoint;
6438
+ var onlineUrl = null;
6350
6439
  if (channelIds && channelIds[_DYN_LENGTH ]) {
6351
6440
  arrForEach(channelIds, function (id) {
6352
6441
  var plugin = _self.core.getPlugin(id);
@@ -6363,15 +6452,22 @@
6363
6452
  }
6364
6453
  _overrideIkey = storageConfig[_DYN_OVERRIDE_INSTRUMENTA1 ];
6365
6454
  var urlConfig = _urlCfg;
6366
- var curUrl = onlineUrl || coreConfig.endpointUrl;
6455
+ var curUrl = onlineUrl || coreConfig.endpointUrl || _endpoint;
6367
6456
  if (curUrl !== _endpoint) {
6368
6457
  var coreRootCtx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);
6369
6458
  var providerContext = {
6370
6459
  itemCtx: coreRootCtx,
6371
6460
  storageConfig: storageConfig,
6372
6461
  id: _self.id,
6373
- endpoint: curUrl
6462
+ endpoint: curUrl,
6463
+ notificationMgr: _notificationManager
6374
6464
  };
6465
+ var oriHandler = _urlCfg && _urlCfg[_DYN_BATCH_HANDLER ];
6466
+ try {
6467
+ oriHandler && oriHandler[_DYN_TEARDOWN ]();
6468
+ }
6469
+ catch (e) {
6470
+ }
6375
6471
  var handler = new OfflineBatchHandler(_self[_DYN_DIAG_LOG ](), _self._unloadHooks);
6376
6472
  handler[_DYN_INITIALIZE ](providerContext);
6377
6473
  urlConfig = {
@@ -6383,7 +6479,13 @@
6383
6479
  batchHandler: handler
6384
6480
  };
6385
6481
  _evtsLimitInMemo = storageConfig.eventsLimitInMem;
6386
- _inMemoBatch = new InMemoryBatch(_self[_DYN_DIAG_LOG ](), curUrl, null, _evtsLimitInMemo);
6482
+ var evts = null;
6483
+ var curEvts = _inMemoBatch && _inMemoBatch[_DYN_GET_ITEMS ]();
6484
+ if (curEvts && curEvts[_DYN_LENGTH ]) {
6485
+ evts = curEvts.slice(0);
6486
+ _inMemoBatch[_DYN_CLEAR ]();
6487
+ }
6488
+ _inMemoBatch = new InMemoryBatch(_self[_DYN_DIAG_LOG ](), curUrl, evts, _evtsLimitInMemo);
6387
6489
  _inMemoTimerOut = storageConfig.inMemoMaxTime;
6388
6490
  var onlineConfig = ctx.getExtCfg(_primaryChannelId, {}) || {};
6389
6491
  _convertUndefined = onlineConfig.convertUndefined;
@@ -6393,8 +6495,30 @@
6393
6495
  _maxBatchSize = storageConfig.maxBatchsize;
6394
6496
  }
6395
6497
  _urlCfg = urlConfig;
6498
+ _endpoint = curUrl;
6396
6499
  }));
6397
6500
  }
6501
+ function _callNotification(evtName, theArgs) {
6502
+ callNotification(_notificationManager, evtName, theArgs);
6503
+ }
6504
+ function _evtDropNotification(events, reason) {
6505
+ if (events && events[_DYN_LENGTH ]) {
6506
+ _callNotification(EVT_DISCARD_STR, [events, reason]);
6507
+ }
6508
+ return;
6509
+ }
6510
+ function _sentNotification(batch) {
6511
+ if (batch && batch[_DYN_DATA ]) {
6512
+ _callNotification(EVT_SENT_STR, [batch]);
6513
+ }
6514
+ return;
6515
+ }
6516
+ function _storeNotification(events) {
6517
+ if (events && events[_DYN_LENGTH ]) {
6518
+ _callNotification(EVT_STORE_STR, [events]);
6519
+ }
6520
+ return;
6521
+ }
6398
6522
  });
6399
6523
  return _this;
6400
6524
  }