@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.
- package/README.md +1 -1
- package/dist/es5/applicationinsights-offlinechannel-js.js +1506 -1382
- package/dist/es5/applicationinsights-offlinechannel-js.js.map +1 -1
- package/dist/es5/applicationinsights-offlinechannel-js.min.js +2 -2
- package/dist/es5/applicationinsights-offlinechannel-js.min.js.map +1 -1
- package/dist-es5/Helpers/Utils.js +79 -3
- package/dist-es5/Helpers/Utils.js.map +1 -1
- package/dist-es5/InMemoryBatch.js +3 -3
- package/dist-es5/InMemoryBatch.js.map +1 -1
- package/dist-es5/Interfaces/IInMemoryBatch.js +1 -1
- package/dist-es5/Interfaces/IOfflineBatch.js +1 -1
- package/dist-es5/Interfaces/IOfflineIndexDb.js +1 -1
- package/dist-es5/Interfaces/IOfflineProvider.js +1 -1
- package/dist-es5/Interfaces/ISender.js +1 -1
- package/dist-es5/OfflineBatchHandler.js +3 -3
- package/dist-es5/OfflineBatchHandler.js.map +1 -1
- package/dist-es5/OfflineChannel.js +107 -39
- package/dist-es5/OfflineChannel.js.map +1 -1
- package/dist-es5/PayloadHelper.js +1 -1
- package/dist-es5/Providers/IndexDbHelper.js +1 -1
- package/dist-es5/Providers/IndexDbProvider.js +18 -12
- package/dist-es5/Providers/IndexDbProvider.js.map +1 -1
- package/dist-es5/Providers/WebStorageProvider.js +35 -33
- package/dist-es5/Providers/WebStorageProvider.js.map +1 -1
- package/dist-es5/Sender.js +1 -1
- package/dist-es5/__DynamicConstants.js +16 -13
- package/dist-es5/__DynamicConstants.js.map +1 -1
- package/dist-es5/applicationinsights-offlinechannel-js.js +1 -1
- package/package.json +3 -3
- package/types/applicationinsights-offlinechannel-js.d.ts +8 -4
- 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.
|
|
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
|
|
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
|
|
3707
|
-
var
|
|
3708
|
-
var
|
|
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
|
-
|
|
3715
|
-
|
|
3716
|
-
|
|
3717
|
-
|
|
3718
|
-
|
|
3719
|
-
|
|
3720
|
-
|
|
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
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
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
|
|
3728
|
-
|
|
3904
|
+
function _scheduleEvent(dbName, actionName, startEvent, evtTimeOut) {
|
|
3905
|
+
var dbCtx = _getDbContext(dbName);
|
|
3906
|
+
return dbCtx.sch.queue(startEvent, actionName, evtTimeOut);
|
|
3729
3907
|
}
|
|
3730
|
-
|
|
3731
|
-
|
|
3732
|
-
var
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3736
|
-
|
|
3737
|
-
|
|
3738
|
-
|
|
3739
|
-
|
|
3740
|
-
|
|
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
|
-
|
|
3753
|
-
|
|
3754
|
-
line += isNaN(chr3) ? "=" : _base64[_DYN_CHAR_AT ](chr3 & 63);
|
|
3920
|
+
catch (e) {
|
|
3921
|
+
dbFactory = null;
|
|
3755
3922
|
}
|
|
3756
3923
|
}
|
|
3757
|
-
|
|
3758
|
-
return output;
|
|
3924
|
+
return dbFactory;
|
|
3759
3925
|
}
|
|
3760
|
-
function
|
|
3761
|
-
|
|
3762
|
-
|
|
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
|
|
3914
|
-
|
|
3915
|
-
|
|
3916
|
-
|
|
3917
|
-
|
|
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
|
|
3939
|
-
function
|
|
3940
|
-
|
|
3941
|
-
|
|
3942
|
-
|
|
3943
|
-
|
|
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.
|
|
3983
|
-
|
|
3984
|
-
|
|
3985
|
-
|
|
3986
|
-
|
|
3987
|
-
|
|
3988
|
-
|
|
3989
|
-
|
|
3990
|
-
|
|
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
|
|
3994
|
-
|
|
3995
|
-
|
|
3996
|
-
|
|
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
|
|
3999
|
-
}
|
|
4000
|
-
|
|
4001
|
-
return createAsyncRejectedPromise(e);
|
|
4002
|
-
}
|
|
4096
|
+
return 1;
|
|
4097
|
+
}).catch(function (reason) {
|
|
4098
|
+
});
|
|
4003
4099
|
};
|
|
4004
|
-
function
|
|
4005
|
-
|
|
4006
|
-
|
|
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
|
|
4023
|
-
|
|
4024
|
-
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
4028
|
-
|
|
4029
|
-
|
|
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
|
-
|
|
4046
|
-
|
|
4047
|
-
|
|
4048
|
-
|
|
4049
|
-
|
|
4050
|
-
|
|
4051
|
-
|
|
4052
|
-
|
|
4053
|
-
|
|
4054
|
-
|
|
4055
|
-
|
|
4056
|
-
|
|
4057
|
-
|
|
4058
|
-
|
|
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
|
-
|
|
4061
|
-
|
|
4135
|
+
catch (e) {
|
|
4136
|
+
deleteReject(new Error(ErrorMessageFailedToDeleteDatabase + " - " + e));
|
|
4062
4137
|
}
|
|
4063
|
-
}
|
|
4064
|
-
|
|
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.
|
|
4075
|
-
|
|
4076
|
-
|
|
4077
|
-
|
|
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
|
|
4091
|
-
|
|
4092
|
-
|
|
4093
|
-
|
|
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
|
-
|
|
4097
|
-
var
|
|
4098
|
-
var
|
|
4099
|
-
if (
|
|
4100
|
-
|
|
4101
|
-
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
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
|
-
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
|
|
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
|
|
4116
|
-
|
|
4117
|
-
|
|
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
|
|
4156
|
-
if (
|
|
4157
|
-
|
|
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
|
-
|
|
4164
|
-
|
|
4165
|
-
|
|
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
|
-
|
|
4171
|
-
|
|
4210
|
+
else if (query && query.isMatch) {
|
|
4211
|
+
simpleQuery = query;
|
|
4172
4212
|
}
|
|
4173
|
-
return
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
|
|
4178
|
-
|
|
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
|
-
|
|
4220
|
+
var storeCtx = _createStoreContext(openDbCtx, eventTable);
|
|
4221
|
+
if (queryKeyRange) {
|
|
4222
|
+
cursorRequest = storeCtx.store[_DYN_OPEN_CURSOR ](queryKeyRange);
|
|
4190
4223
|
}
|
|
4191
|
-
|
|
4192
|
-
|
|
4193
|
-
|
|
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
|
-
|
|
4198
|
-
return
|
|
4279
|
+
IndexedDbHelper.__ieDyn=1;
|
|
4280
|
+
return IndexedDbHelper;
|
|
4199
4281
|
}());
|
|
4200
|
-
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
4204
|
-
|
|
4205
|
-
|
|
4206
|
-
|
|
4207
|
-
|
|
4208
|
-
|
|
4209
|
-
|
|
4210
|
-
|
|
4211
|
-
|
|
4212
|
-
|
|
4213
|
-
|
|
4214
|
-
|
|
4215
|
-
|
|
4216
|
-
|
|
4217
|
-
|
|
4218
|
-
|
|
4219
|
-
|
|
4220
|
-
|
|
4221
|
-
|
|
4222
|
-
|
|
4223
|
-
|
|
4224
|
-
|
|
4225
|
-
|
|
4226
|
-
|
|
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
|
-
|
|
4279
|
-
|
|
4280
|
-
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
|
|
4284
|
-
|
|
4285
|
-
|
|
4286
|
-
|
|
4287
|
-
|
|
4288
|
-
|
|
4289
|
-
|
|
4290
|
-
|
|
4291
|
-
|
|
4292
|
-
|
|
4293
|
-
|
|
4294
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4312
|
-
|
|
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
|
-
|
|
4318
|
-
|
|
4319
|
-
|
|
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
|
|
4329
|
-
var
|
|
4330
|
-
var
|
|
4331
|
-
var
|
|
4332
|
-
var
|
|
4333
|
-
var
|
|
4334
|
-
var
|
|
4335
|
-
var
|
|
4336
|
-
var
|
|
4337
|
-
|
|
4338
|
-
|
|
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
|
|
4380
|
-
|
|
4381
|
-
return dbCtx.sch.queue(startEvent, actionName, evtTimeOut);
|
|
4373
|
+
function _getTime() {
|
|
4374
|
+
return new Date()[_DYN_GET_TIME ]();
|
|
4382
4375
|
}
|
|
4383
|
-
function
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
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
|
-
|
|
4396
|
-
|
|
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
|
-
|
|
4399
|
+
values[_DYN_PUSH ](newValue);
|
|
4400
4400
|
}
|
|
4401
|
-
function
|
|
4402
|
-
|
|
4403
|
-
|
|
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
|
|
4410
|
+
function _cursorContinueEvent(cursorState, value) {
|
|
4407
4411
|
return function (evt) {
|
|
4408
|
-
|
|
4409
|
-
_debugLog(dbName, "[" + evtName + "] event rejected");
|
|
4412
|
+
return cursorState[_DYN_CONTINUE ]();
|
|
4410
4413
|
};
|
|
4411
4414
|
}
|
|
4412
|
-
|
|
4413
|
-
|
|
4414
|
-
|
|
4415
|
-
|
|
4416
|
-
|
|
4417
|
-
|
|
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
|
|
4420
|
-
return
|
|
4421
|
-
|
|
4422
|
-
|
|
4423
|
-
|
|
4424
|
-
|
|
4425
|
-
|
|
4426
|
-
|
|
4427
|
-
|
|
4428
|
-
|
|
4429
|
-
|
|
4430
|
-
|
|
4431
|
-
|
|
4432
|
-
|
|
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
|
|
4560
|
-
|
|
4561
|
-
|
|
4562
|
-
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4566
|
-
|
|
4567
|
-
|
|
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
|
|
4576
|
-
if (
|
|
4577
|
-
return
|
|
4583
|
+
_this[_DYN_ADD_EVENT ] = function (key, item, itemCtx) {
|
|
4584
|
+
if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
|
|
4585
|
+
return item;
|
|
4578
4586
|
}
|
|
4579
|
-
|
|
4580
|
-
|
|
4581
|
-
|
|
4582
|
-
var
|
|
4583
|
-
|
|
4584
|
-
|
|
4585
|
-
|
|
4586
|
-
|
|
4587
|
-
|
|
4588
|
-
|
|
4589
|
-
|
|
4590
|
-
|
|
4591
|
-
|
|
4592
|
-
|
|
4593
|
-
|
|
4594
|
-
|
|
4595
|
-
|
|
4596
|
-
|
|
4597
|
-
|
|
4598
|
-
|
|
4599
|
-
|
|
4600
|
-
|
|
4601
|
-
|
|
4602
|
-
|
|
4603
|
-
|
|
4604
|
-
|
|
4605
|
-
|
|
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
|
-
|
|
4609
|
-
}
|
|
4610
|
-
catch (e) {
|
|
4611
|
-
deleteReject(new Error(ErrorMessageFailedToDeleteDatabase + " - " + e));
|
|
4615
|
+
return 1 ;
|
|
4612
4616
|
}
|
|
4613
|
-
|
|
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
|
|
4618
|
-
|
|
4619
|
-
|
|
4620
|
-
|
|
4621
|
-
|
|
4622
|
-
|
|
4623
|
-
|
|
4624
|
-
|
|
4625
|
-
|
|
4626
|
-
|
|
4627
|
-
|
|
4628
|
-
|
|
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
|
-
}
|
|
4640
|
+
});
|
|
4635
4641
|
};
|
|
4636
|
-
function
|
|
4637
|
-
|
|
4638
|
-
|
|
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 (
|
|
4689
|
-
|
|
4690
|
-
|
|
4691
|
-
|
|
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
|
-
|
|
4746
|
-
|
|
4747
|
-
|
|
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
|
|
4766
|
-
|
|
4767
|
-
|
|
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
|
-
|
|
4787
|
-
|
|
4788
|
-
|
|
4789
|
-
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
|
|
4796
|
-
|
|
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
|
-
|
|
4807
|
-
return
|
|
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
|
-
|
|
4810
|
-
|
|
4811
|
-
|
|
4812
|
-
|
|
4813
|
-
|
|
4814
|
-
|
|
4815
|
-
|
|
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
|
-
|
|
4826
|
-
};
|
|
4827
|
-
if (theQuery) {
|
|
4828
|
-
_this.parseQuery(theQuery);
|
|
4739
|
+
_insertNewEvent();
|
|
4740
|
+
});
|
|
4829
4741
|
}
|
|
4830
4742
|
});
|
|
4831
4743
|
}
|
|
4832
|
-
|
|
4833
|
-
return
|
|
4744
|
+
IndexedDbProvider.__ieDyn=1;
|
|
4745
|
+
return IndexedDbProvider;
|
|
4834
4746
|
}());
|
|
4835
4747
|
|
|
4836
|
-
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
return
|
|
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
|
|
4850
|
-
return
|
|
4761
|
+
function isGreaterThanZero(value) {
|
|
4762
|
+
return value >= 0;
|
|
4851
4763
|
}
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4872
|
-
|
|
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
|
-
|
|
4791
|
+
output += line;
|
|
4792
|
+
return output;
|
|
4876
4793
|
}
|
|
4877
|
-
function
|
|
4878
|
-
var
|
|
4879
|
-
|
|
4880
|
-
|
|
4881
|
-
|
|
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
|
|
4816
|
+
var arr = output[_DYN_SPLIT ](",").map(function (c) { return Number(c); });
|
|
4817
|
+
return new Uint8Array(arr);
|
|
4885
4818
|
}
|
|
4886
|
-
function
|
|
4887
|
-
|
|
4888
|
-
|
|
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
|
|
4892
|
-
|
|
4893
|
-
|
|
4894
|
-
|
|
4895
|
-
|
|
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
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
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
|
-
|
|
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
|
|
4907
|
-
|
|
4908
|
-
|
|
4909
|
-
|
|
4910
|
-
|
|
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
|
-
|
|
4913
|
-
|
|
4871
|
+
catch (e) {
|
|
4872
|
+
}
|
|
4873
|
+
}
|
|
4914
4874
|
}
|
|
4915
|
-
function
|
|
4916
|
-
|
|
4917
|
-
|
|
4918
|
-
|
|
4919
|
-
|
|
4920
|
-
|
|
4921
|
-
|
|
4922
|
-
|
|
4923
|
-
|
|
4924
|
-
|
|
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
|
-
|
|
4927
|
-
|
|
4928
|
-
|
|
4929
|
-
}, deleteEvtsReject);
|
|
4930
|
-
});
|
|
4937
|
+
}
|
|
4938
|
+
}
|
|
4939
|
+
return result;
|
|
4931
4940
|
}
|
|
4932
|
-
function
|
|
4933
|
-
|
|
4934
|
-
|
|
4935
|
-
|
|
4936
|
-
|
|
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
|
-
|
|
4939
|
-
|
|
4940
|
-
|
|
4941
|
-
|
|
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
|
-
|
|
4951
|
-
|
|
4952
|
-
|
|
4953
|
-
|
|
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
|
-
|
|
4956
|
-
|
|
4957
|
-
|
|
4958
|
-
|
|
4959
|
-
|
|
4960
|
-
|
|
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
|
-
|
|
4964
|
-
|
|
4965
|
-
|
|
4966
|
-
|
|
4967
|
-
|
|
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
|
|
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
|
|
4978
|
-
function
|
|
4979
|
-
dynamicProto(
|
|
4980
|
-
var
|
|
4981
|
-
var
|
|
4982
|
-
var
|
|
4983
|
-
var
|
|
4984
|
-
var
|
|
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
|
|
5021
|
+
var _notificationManager = null;
|
|
4991
5022
|
_this.id = id;
|
|
4992
|
-
|
|
4993
|
-
|
|
4994
|
-
|
|
4995
|
-
|
|
4996
|
-
|
|
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
|
-
|
|
5004
|
-
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
|
|
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
|
-
|
|
5010
|
-
|
|
5011
|
-
var dropNum = storageConfig[
|
|
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[
|
|
5042
|
+
_maxCriticalCnt = storageConfig[_DYN_MAX_CRITICAL_EVTS_DR3 ] || MaxCriticalEvtsDropCnt;
|
|
5014
5043
|
});
|
|
5015
5044
|
unloadHookContainer && unloadHookContainer.add(unloadHook);
|
|
5016
|
-
|
|
5017
|
-
|
|
5018
|
-
|
|
5019
|
-
|
|
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[
|
|
5030
|
-
return
|
|
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
|
-
|
|
5037
|
-
|
|
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
|
-
|
|
5049
|
-
|
|
5067
|
+
try {
|
|
5068
|
+
if (!_storage) {
|
|
5069
|
+
return;
|
|
5070
|
+
}
|
|
5071
|
+
return _getEvts(1, true);
|
|
5050
5072
|
}
|
|
5051
|
-
|
|
5052
|
-
return
|
|
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
|
-
|
|
5077
|
-
|
|
5078
|
-
|
|
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
|
-
|
|
5081
|
-
|
|
5082
|
-
|
|
5083
|
-
|
|
5084
|
-
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
|
|
5088
|
-
|
|
5089
|
-
|
|
5090
|
-
|
|
5091
|
-
|
|
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
|
|
5094
|
-
}
|
|
5095
|
-
|
|
5096
|
-
|
|
5097
|
-
|
|
5098
|
-
|
|
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
|
|
5103
|
-
|
|
5104
|
-
|
|
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
|
-
|
|
5107
|
-
|
|
5108
|
-
|
|
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
|
-
|
|
5112
|
-
|
|
5113
|
-
|
|
5114
|
-
|
|
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 (
|
|
5119
|
-
|
|
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
|
-
|
|
5137
|
-
|
|
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
|
|
5141
|
-
|
|
5142
|
-
|
|
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
|
-
|
|
5218
|
+
dbToStore = getJSON().parse(previousDb);
|
|
5145
5219
|
}
|
|
5146
5220
|
catch (e) {
|
|
5147
|
-
|
|
5221
|
+
_storage[_DYN_REMOVE_ITEM ](dbKey);
|
|
5148
5222
|
}
|
|
5149
|
-
|
|
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
|
-
|
|
5153
|
-
|
|
5154
|
-
|
|
5155
|
-
|
|
5156
|
-
|
|
5157
|
-
|
|
5158
|
-
|
|
5159
|
-
|
|
5160
|
-
|
|
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
|
-
|
|
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
|
|
5166
|
-
|
|
5167
|
-
|
|
5168
|
-
|
|
5169
|
-
|
|
5170
|
-
|
|
5171
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5209
|
-
}
|
|
5270
|
+
_storage && _storage[_DYN_REMOVE_ITEM ](storeDetails.key);
|
|
5271
|
+
}
|
|
5272
|
+
return removedItems;
|
|
5210
5273
|
}
|
|
5211
5274
|
});
|
|
5212
5275
|
}
|
|
5213
|
-
|
|
5214
|
-
return
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
6049
|
-
|
|
6050
|
-
|
|
6051
|
-
|
|
6052
|
-
|
|
6053
|
-
|
|
6054
|
-
|
|
6055
|
-
|
|
6056
|
-
|
|
6057
|
-
|
|
6058
|
-
|
|
6059
|
-
|
|
6060
|
-
|
|
6061
|
-
|
|
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
|
|
6189
|
+
_self[_DYN_ONUNLOAD_FLUSH ] = function () {
|
|
6117
6190
|
if (!_paused) {
|
|
6118
|
-
|
|
6119
|
-
|
|
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
|
|
6203
|
+
_self[_DYN_ONUNLOAD_FLUSH ]();
|
|
6131
6204
|
_offlineListener && runTargetUnload(_offlineListener, false);
|
|
6132
|
-
var handler = _urlCfg
|
|
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
|
|
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 ]
|
|
6215
|
-
|
|
6216
|
-
|
|
6217
|
-
|
|
6218
|
-
|
|
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.
|
|
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.
|
|
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 =
|
|
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
|
-
|
|
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
|
}
|