@microsoft/applicationinsights-offlinechannel-js 0.1.0-nightly3.2402-06

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CODE_OF_CONDUCT.md +9 -0
  2. package/CONTRIBUTING.md +14 -0
  3. package/LICENSE.TXT +21 -0
  4. package/PRIVACY +3 -0
  5. package/README.md +63 -0
  6. package/SECURITY.md +41 -0
  7. package/SUPPORT.md +14 -0
  8. package/dist/es5/applicationinsights-offlinechannel-js.js +6391 -0
  9. package/dist/es5/applicationinsights-offlinechannel-js.js.map +1 -0
  10. package/dist/es5/applicationinsights-offlinechannel-js.min.js +6 -0
  11. package/dist/es5/applicationinsights-offlinechannel-js.min.js.map +1 -0
  12. package/dist-es5/Helpers/Utils.js +185 -0
  13. package/dist-es5/Helpers/Utils.js.map +1 -0
  14. package/dist-es5/InMemoryBatch.js +64 -0
  15. package/dist-es5/InMemoryBatch.js.map +1 -0
  16. package/dist-es5/Interfaces/IInMemoryBatch.js +8 -0
  17. package/dist-es5/Interfaces/IInMemoryBatch.js.map +1 -0
  18. package/dist-es5/Interfaces/IOfflineBatch.js +9 -0
  19. package/dist-es5/Interfaces/IOfflineBatch.js.map +1 -0
  20. package/dist-es5/Interfaces/IOfflineIndexDb.js +8 -0
  21. package/dist-es5/Interfaces/IOfflineIndexDb.js.map +1 -0
  22. package/dist-es5/Interfaces/IOfflineProvider.js +8 -0
  23. package/dist-es5/Interfaces/IOfflineProvider.js.map +1 -0
  24. package/dist-es5/Interfaces/ISender.js +8 -0
  25. package/dist-es5/Interfaces/ISender.js.map +1 -0
  26. package/dist-es5/OfflineBatchHandler.js +343 -0
  27. package/dist-es5/OfflineBatchHandler.js.map +1 -0
  28. package/dist-es5/OfflineChannel.js +465 -0
  29. package/dist-es5/OfflineChannel.js.map +1 -0
  30. package/dist-es5/PayloadHelper.js +62 -0
  31. package/dist-es5/PayloadHelper.js.map +1 -0
  32. package/dist-es5/Providers/IndexDbHelper.js +626 -0
  33. package/dist-es5/Providers/IndexDbHelper.js.map +1 -0
  34. package/dist-es5/Providers/IndexDbProvider.js +468 -0
  35. package/dist-es5/Providers/IndexDbProvider.js.map +1 -0
  36. package/dist-es5/Providers/WebStorageProvider.js +463 -0
  37. package/dist-es5/Providers/WebStorageProvider.js.map +1 -0
  38. package/dist-es5/Sender.js +572 -0
  39. package/dist-es5/Sender.js.map +1 -0
  40. package/dist-es5/__DynamicConstants.js +80 -0
  41. package/dist-es5/__DynamicConstants.js.map +1 -0
  42. package/dist-es5/applicationinsights-offlinechannel-js.js +11 -0
  43. package/dist-es5/applicationinsights-offlinechannel-js.js.map +1 -0
  44. package/package.json +65 -0
  45. package/tsconfig.json +28 -0
  46. package/types/applicationinsights-offlinechannel-js.d.ts +605 -0
  47. package/types/applicationinsights-offlinechannel-js.namespaced.d.ts +601 -0
@@ -0,0 +1,343 @@
1
+ /*
2
+ * Application Insights JavaScript SDK - Offline Channel, 0.1.0-nightly3.2402-06
3
+ * Copyright (c) Microsoft and contributors. All rights reserved.
4
+ */
5
+
6
+
7
+ import dynamicProto from "@microsoft/dynamicproto-js";
8
+ import { isNullOrUndefined, isObject } from "@microsoft/applicationinsights-core-js";
9
+ import { createPromise, doAwaitResponse } from "@nevware21/ts-async";
10
+ import { IndexedDbProvider } from "./Providers/IndexDbProvider";
11
+ import { WebStorageProvider } from "./Providers/WebStorageProvider";
12
+ import { _DYN_ADD_EVENT, _DYN_ATTEMP_CNT, _DYN_DATA, _DYN_DIAG_LOG, _DYN_GET_NEXT_BATCH, _DYN_INDEX_OF, _DYN_INITIALIZE, _DYN_IS_ARR, _DYN_ITEM_CTX, _DYN_LENGTH, _DYN_REASON, _DYN_REJECTED, _DYN_REMOVE_EVENTS, _DYN_SEND_POST, _DYN_STATE, _DYN_STORAGE_CONFIG, _DYN_TEARDOWN, _DYN_VALUE } from "./__DynamicConstants";
13
+ var MaxStorageProviderConfig = 2;
14
+ var NoProviderErrMsg = "No provider is available";
15
+ var OfflineBatchHandler = /** @class */ (function () {
16
+ function OfflineBatchHandler(logger, unloadHookContainer) {
17
+ dynamicProto(OfflineBatchHandler, this, function (_self) {
18
+ var _isInitialized;
19
+ var _logger;
20
+ var _provider;
21
+ var _unloadProvider;
22
+ var _itemCtx;
23
+ var _maxRetryCnt;
24
+ var _retryCodes;
25
+ _initDefaults();
26
+ _self[_DYN_INITIALIZE /* @min:%2einitialize */] = function (providerContext) {
27
+ // TODO: handle provider change
28
+ try {
29
+ if (!_isInitialized) {
30
+ _logger = logger || providerContext.itemCtx[_DYN_DIAG_LOG /* @min:%2ediagLog */]();
31
+ _itemCtx = providerContext[_DYN_ITEM_CTX /* @min:%2eitemCtx */];
32
+ _provider = _initProvider(providerContext);
33
+ var storeCfg = providerContext[_DYN_STORAGE_CONFIG /* @min:%2estorageConfig */] || {};
34
+ var retry = storeCfg.maxRetry;
35
+ _maxRetryCnt = !isNullOrUndefined(retry) ? retry : 2;
36
+ _retryCodes = (storeCfg.senderCfg || {}).retryCodes;
37
+ if (_provider) {
38
+ _isInitialized = true;
39
+ }
40
+ }
41
+ }
42
+ catch (e) {
43
+ _isInitialized = false;
44
+ }
45
+ return _isInitialized;
46
+ };
47
+ _self["_getDbgPlgTargets"] = function () {
48
+ return [_provider, _isInitialized, _unloadProvider];
49
+ };
50
+ _self.storeBatch = function (batch, cb, sync) {
51
+ var provider = _provider;
52
+ if (!!sync) {
53
+ provider = _unloadProvider;
54
+ }
55
+ return createPromise(function (resolve, reject) {
56
+ if (!provider) {
57
+ reject(new Error(NoProviderErrMsg));
58
+ }
59
+ var evt = _getOfflineEvt(batch);
60
+ return doAwaitResponse(provider[_DYN_ADD_EVENT /* @min:%2eaddEvent */](evt.id, evt, _itemCtx), function (response) {
61
+ try {
62
+ var evt_1 = response[_DYN_VALUE /* @min:%2evalue */] || response[_DYN_REASON /* @min:%2ereason */] || [];
63
+ var state = 2 /* eBatchStoreStatus.Failure */;
64
+ if (!response[_DYN_REJECTED /* @min:%2erejected */]) {
65
+ state = 1 /* eBatchStoreStatus.Success */;
66
+ }
67
+ var res = { state: state, item: evt_1 };
68
+ try {
69
+ cb && cb(res);
70
+ }
71
+ catch (e) {
72
+ // eslint-disable-next-line no-empty
73
+ }
74
+ resolve(res);
75
+ }
76
+ catch (e) {
77
+ reject(e);
78
+ }
79
+ });
80
+ });
81
+ };
82
+ _self.sendNextBatch = function (cb, sync, xhrOverride, cnt) {
83
+ if (cnt === void 0) { cnt = 1; }
84
+ return createPromise(function (resolve, reject) {
85
+ if (!_provider && !_unloadProvider) {
86
+ reject(new Error(NoProviderErrMsg));
87
+ }
88
+ function storeResolve(result) {
89
+ try {
90
+ cb && cb(result);
91
+ }
92
+ catch (e) {
93
+ // eslint-disable-next-line no-empty
94
+ }
95
+ resolve(result);
96
+ }
97
+ var provider = _provider;
98
+ try {
99
+ if (_unloadProvider) {
100
+ doAwaitResponse(_unloadProvider[_DYN_GET_NEXT_BATCH /* @min:%2egetNextBatch */](), function (res) {
101
+ if (res && !res[_DYN_REJECTED /* @min:%2erejected */]) {
102
+ var unloadEvts = res[_DYN_VALUE /* @min:%2evalue */];
103
+ if (unloadEvts && unloadEvts[_DYN_LENGTH /* @min:%2elength */]) {
104
+ // always try to send ones from local storage
105
+ provider = _unloadProvider;
106
+ return _handleNextBatch(unloadEvts);
107
+ }
108
+ }
109
+ return _sendNextBatch();
110
+ });
111
+ }
112
+ else {
113
+ return _sendNextBatch();
114
+ }
115
+ }
116
+ catch (e) {
117
+ // eslint-disable-next-line no-empty
118
+ reject(e);
119
+ }
120
+ function _sendNextBatch() {
121
+ return doAwaitResponse(provider[_DYN_GET_NEXT_BATCH /* @min:%2egetNextBatch */](), function (response) {
122
+ try {
123
+ if (!response || response[_DYN_REJECTED /* @min:%2erejected */]) {
124
+ var res = { state: 4 /* eBatchSendStatus.Failure */, data: response.reason };
125
+ storeResolve(res);
126
+ return;
127
+ }
128
+ var evts = response[_DYN_VALUE /* @min:%2evalue */] || [];
129
+ return _handleNextBatch(evts);
130
+ }
131
+ catch (e) {
132
+ reject(e);
133
+ }
134
+ });
135
+ }
136
+ function _handleNextBatch(evts) {
137
+ var result = { state: 1 /* eBatchSendStatus.Complete */, data: null };
138
+ if (evts[_DYN_LENGTH /* @min:%2elength */]) {
139
+ // make sure doawait has resolve
140
+ return doAwaitResponse(provider[_DYN_REMOVE_EVENTS /* @min:%2eremoveEvents */](evts), function (res) {
141
+ if (res && !res.rejected && res[_DYN_VALUE /* @min:%2evalue */]) {
142
+ var deletedItems = res[_DYN_VALUE /* @min:%2evalue */];
143
+ var _loop_1 = function (lp) {
144
+ try {
145
+ var evt_2 = evts[lp];
146
+ result[_DYN_DATA /* @min:%2edata */] = evt_2; // add data
147
+ if (xhrOverride && xhrOverride[_DYN_SEND_POST /* @min:%2esendPOST */]) {
148
+ evt_2[_DYN_ATTEMP_CNT /* @min:%2eattempCnt */]++;
149
+ var sender = xhrOverride[_DYN_SEND_POST /* @min:%2esendPOST */]; // use transports
150
+ var onCompleteCallback = function (status, headers, res) {
151
+ if (status == 200) { // status code (e.g: invalid key) drop payload
152
+ result[_DYN_STATE /* @min:%2estate */] = 1 /* eBatchSendStatus.Complete */;
153
+ }
154
+ else {
155
+ var isRetriable = _isRetriable(evt_2, status);
156
+ if (isRetriable) {
157
+ result[_DYN_STATE /* @min:%2estate */] = 2 /* eBatchSendStatus.Retry */;
158
+ _unloadProvider && _unloadProvider[_DYN_ADD_EVENT /* @min:%2eaddEvent */](evt_2.id, evt_2, _itemCtx);
159
+ }
160
+ else {
161
+ result[_DYN_STATE /* @min:%2estate */] = 3 /* eBatchSendStatus.Drop */;
162
+ }
163
+ }
164
+ storeResolve(result);
165
+ };
166
+ return { value: doAwaitResponse(sender(evt_2, onCompleteCallback, sync), function (res) {
167
+ // do nothing, because it should be resolved in callback
168
+ }) };
169
+ }
170
+ // call resolve
171
+ result[_DYN_STATE /* @min:%2estate */] = 3 /* eBatchSendStatus.Drop */;
172
+ storeResolve(result);
173
+ return { value: void 0 };
174
+ }
175
+ catch (e) {
176
+ reject(e);
177
+ }
178
+ };
179
+ for (var lp = 0; lp < deletedItems[_DYN_LENGTH /* @min:%2elength */]; lp++) {
180
+ var state_1 = _loop_1(lp);
181
+ if (typeof state_1 === "object")
182
+ return state_1.value;
183
+ }
184
+ // this case should never happen because this function is called after we confirm that evt is available
185
+ // add resolve here in case
186
+ result[_DYN_STATE /* @min:%2estate */] = 1 /* eBatchSendStatus.Complete */;
187
+ storeResolve(result);
188
+ return;
189
+ }
190
+ // if can not delete first, resolve
191
+ result[_DYN_STATE /* @min:%2estate */] = 4 /* eBatchSendStatus.Failure */;
192
+ result.data = res[_DYN_REASON /* @min:%2ereason */];
193
+ storeResolve(result);
194
+ return;
195
+ });
196
+ }
197
+ storeResolve(result);
198
+ }
199
+ });
200
+ };
201
+ _self.hasStoredBatch = function (cb) {
202
+ return createPromise(function (resolve, reject) {
203
+ if (!_provider) {
204
+ reject(new Error(NoProviderErrMsg));
205
+ }
206
+ return doAwaitResponse(_provider[_DYN_GET_NEXT_BATCH /* @min:%2egetNextBatch */](), function (response) {
207
+ try {
208
+ var evts = response[_DYN_VALUE /* @min:%2evalue */] || [];
209
+ var hasEvts = evts[_DYN_LENGTH /* @min:%2elength */] > 0;
210
+ cb && cb(hasEvts);
211
+ resolve(hasEvts);
212
+ }
213
+ catch (e) {
214
+ reject(e);
215
+ }
216
+ });
217
+ });
218
+ };
219
+ _self.cleanStorage = function (cb) {
220
+ return createPromise(function (resolve, reject) {
221
+ // note: doawaitresponse currently returns undefined
222
+ if (!_provider) {
223
+ reject(new Error(NoProviderErrMsg));
224
+ }
225
+ return doAwaitResponse(_provider.clear(), function (response) {
226
+ try {
227
+ var cnt = 0;
228
+ if (!response[_DYN_REJECTED /* @min:%2erejected */]) {
229
+ var evts = response[_DYN_VALUE /* @min:%2evalue */] || [];
230
+ cnt = evts[_DYN_LENGTH /* @min:%2elength */];
231
+ }
232
+ var res = { batchCnt: cnt };
233
+ cb && cb(res); // get value. make sure to use callback
234
+ resolve(res); // won't get val
235
+ }
236
+ catch (e) {
237
+ reject(e);
238
+ }
239
+ });
240
+ });
241
+ };
242
+ _self[_DYN_TEARDOWN /* @min:%2eteardown */] = function (unloadCtx, unloadState) {
243
+ _provider && _provider[_DYN_TEARDOWN /* @min:%2eteardown */]();
244
+ _initDefaults();
245
+ };
246
+ function _initDefaults() {
247
+ _provider = null;
248
+ _unloadProvider = null;
249
+ _isInitialized = false;
250
+ _maxRetryCnt = null;
251
+ _retryCodes = null;
252
+ }
253
+ function _tryGetIndexedDbProvider(providerContext) {
254
+ var newProvider = new IndexedDbProvider(undefined, unloadHookContainer);
255
+ if (!newProvider[_DYN_INITIALIZE /* @min:%2einitialize */](providerContext)) {
256
+ // Failed to initialize the provider
257
+ newProvider = null;
258
+ }
259
+ return newProvider;
260
+ }
261
+ function _tryGetWebStorageProvider(storageType, providerContext) {
262
+ var newProvider = new WebStorageProvider(storageType, undefined, unloadHookContainer);
263
+ if (!newProvider[_DYN_INITIALIZE /* @min:%2einitialize */](providerContext)) {
264
+ // Failed to initialize the provider
265
+ newProvider = null;
266
+ }
267
+ return newProvider;
268
+ }
269
+ function _initProvider(providerContext) {
270
+ var providers = providerContext[_DYN_STORAGE_CONFIG /* @min:%2estorageConfig */].providers;
271
+ var newProvider = null;
272
+ var lp = 0;
273
+ while (!newProvider && lp < providers[_DYN_LENGTH /* @min:%2elength */] && lp < MaxStorageProviderConfig) {
274
+ switch (providers[lp++]) {
275
+ case 1 /* eStorageProviders.LocalStorage */:
276
+ newProvider = _tryGetWebStorageProvider("localStorage", providerContext);
277
+ _unloadProvider = newProvider;
278
+ break;
279
+ case 2 /* eStorageProviders.SessionStorage */:
280
+ newProvider = _tryGetWebStorageProvider("sessionStorage", providerContext);
281
+ _unloadProvider = newProvider;
282
+ break;
283
+ case 3 /* eStorageProviders.IndexedDb */:
284
+ newProvider = _tryGetIndexedDbProvider(providerContext);
285
+ _unloadProvider = _tryGetWebStorageProvider("localStorage", providerContext);
286
+ }
287
+ }
288
+ return newProvider;
289
+ }
290
+ function _getOfflineEvt(batch) {
291
+ var item = batch;
292
+ // TODO: add details
293
+ var data = item[_DYN_DATA /* @min:%2edata */];
294
+ if (data) {
295
+ var isArr = isObject(data);
296
+ item[_DYN_IS_ARR /* @min:%2eisArr */] = isArr;
297
+ }
298
+ return item;
299
+ }
300
+ /**
301
+ * Checks if the SDK should resend the payload after receiving this status code from the backend.
302
+ * @param statusCode
303
+ */
304
+ function _isRetriable(item, statusCode) {
305
+ if (!_shouldSend(item)) {
306
+ return false;
307
+ }
308
+ // retryCodes = [] means should not retry
309
+ if (!isNullOrUndefined(_retryCodes)) {
310
+ return _retryCodes[_DYN_LENGTH /* @min:%2elength */] && _retryCodes[_DYN_INDEX_OF /* @min:%2eindexOf */](statusCode) > -1;
311
+ }
312
+ return statusCode === 401 // Unauthorized
313
+ || statusCode === 403 // Forbidden
314
+ || statusCode === 408 // Timeout
315
+ || statusCode === 429 // Too many requests.
316
+ || statusCode === 500 // Internal server error.
317
+ || statusCode === 502 // Bad Gateway.
318
+ || statusCode === 503 // Service unavailable.
319
+ || statusCode === 504; // Gateway timeout.
320
+ }
321
+ function _shouldSend(item) {
322
+ if (item && item[_DYN_DATA /* @min:%2edata */]) {
323
+ item[_DYN_ATTEMP_CNT /* @min:%2eattempCnt */] = item[_DYN_ATTEMP_CNT /* @min:%2eattempCnt */] || 0;
324
+ return item[_DYN_ATTEMP_CNT /* @min:%2eattempCnt */] <= _maxRetryCnt;
325
+ }
326
+ return false;
327
+ }
328
+ });
329
+ }
330
+ // Removed Stub for OfflineBatchHandler.prototype.initialize.
331
+ // Removed Stub for OfflineBatchHandler.prototype.storeBatch.
332
+ // Removed Stub for OfflineBatchHandler.prototype.sendNextBatch.
333
+ // Removed Stub for OfflineBatchHandler.prototype.hasStoredBatch.
334
+ // Removed Stub for OfflineBatchHandler.prototype.cleanStorage.
335
+ // Removed Stub for OfflineBatchHandler.prototype.teardown.
336
+ // This is a workaround for an IE bug when using dynamicProto() with classes that don't have any
337
+ // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.
338
+ OfflineBatchHandler.__ieDyn=1;
339
+
340
+ return OfflineBatchHandler;
341
+ }());
342
+ export { OfflineBatchHandler };
343
+ //# sourceMappingURL=OfflineBatchHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OfflineBatchHandler.js.map","sources":["OfflineBatchHandler.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { isNullOrUndefined, isObject } from \"@microsoft/applicationinsights-core-js\";\r\nimport { createPromise, doAwaitResponse } from \"@nevware21/ts-async\";\r\nimport { IndexedDbProvider } from \"./Providers/IndexDbProvider\";\r\nimport { WebStorageProvider } from \"./Providers/WebStorageProvider\";\r\nimport { _DYN_ADD_EVENT, _DYN_ATTEMP_CNT, _DYN_DATA, _DYN_DIAG_LOG, _DYN_GET_NEXT_BATCH, _DYN_INDEX_OF, _DYN_INITIALIZE, _DYN_IS_ARR, _DYN_ITEM_CTX, _DYN_LENGTH, _DYN_REASON, _DYN_REJECTED, _DYN_REMOVE_EVENTS, _DYN_SEND_POST, _DYN_STATE, _DYN_STORAGE_CONFIG, _DYN_TEARDOWN, _DYN_VALUE } from \"./__DynamicConstants\";\r\nvar MaxStorageProviderConfig = 2;\r\nvar NoProviderErrMsg = \"No provider is available\";\r\nvar OfflineBatchHandler = /** @class */ (function () {\r\n function OfflineBatchHandler(logger, unloadHookContainer) {\r\n dynamicProto(OfflineBatchHandler, this, function (_self) {\r\n var _isInitialized;\r\n var _logger;\r\n var _provider;\r\n var _unloadProvider;\r\n var _itemCtx;\r\n var _maxRetryCnt;\r\n var _retryCodes;\r\n _initDefaults();\r\n _self[_DYN_INITIALIZE /* @min:%2einitialize */] = function (providerContext) {\r\n // TODO: handle provider change\r\n try {\r\n if (!_isInitialized) {\r\n _logger = logger || providerContext.itemCtx[_DYN_DIAG_LOG /* @min:%2ediagLog */]();\r\n _itemCtx = providerContext[_DYN_ITEM_CTX /* @min:%2eitemCtx */];\r\n _provider = _initProvider(providerContext);\r\n var storeCfg = providerContext[_DYN_STORAGE_CONFIG /* @min:%2estorageConfig */] || {};\r\n var retry = storeCfg.maxRetry;\r\n _maxRetryCnt = !isNullOrUndefined(retry) ? retry : 2;\r\n _retryCodes = (storeCfg.senderCfg || {}).retryCodes;\r\n if (_provider) {\r\n _isInitialized = true;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n _isInitialized = false;\r\n }\r\n return _isInitialized;\r\n };\r\n _self[\"_getDbgPlgTargets\"] = function () {\r\n return [_provider, _isInitialized, _unloadProvider];\r\n };\r\n _self.storeBatch = function (batch, cb, sync) {\r\n var provider = _provider;\r\n if (!!sync) {\r\n provider = _unloadProvider;\r\n }\r\n return createPromise(function (resolve, reject) {\r\n if (!provider) {\r\n reject(new Error(NoProviderErrMsg));\r\n }\r\n var evt = _getOfflineEvt(batch);\r\n return doAwaitResponse(provider[_DYN_ADD_EVENT /* @min:%2eaddEvent */](evt.id, evt, _itemCtx), function (response) {\r\n try {\r\n var evt_1 = response[_DYN_VALUE /* @min:%2evalue */] || response[_DYN_REASON /* @min:%2ereason */] || [];\r\n var state = 2 /* eBatchStoreStatus.Failure */;\r\n if (!response[_DYN_REJECTED /* @min:%2erejected */]) {\r\n state = 1 /* eBatchStoreStatus.Success */;\r\n }\r\n var res = { state: state, item: evt_1 };\r\n try {\r\n cb && cb(res);\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n resolve(res);\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n });\r\n });\r\n };\r\n _self.sendNextBatch = function (cb, sync, xhrOverride, cnt) {\r\n if (cnt === void 0) { cnt = 1; }\r\n return createPromise(function (resolve, reject) {\r\n if (!_provider && !_unloadProvider) {\r\n reject(new Error(NoProviderErrMsg));\r\n }\r\n function storeResolve(result) {\r\n try {\r\n cb && cb(result);\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n resolve(result);\r\n }\r\n var provider = _provider;\r\n try {\r\n if (_unloadProvider) {\r\n doAwaitResponse(_unloadProvider[_DYN_GET_NEXT_BATCH /* @min:%2egetNextBatch */](), function (res) {\r\n if (res && !res[_DYN_REJECTED /* @min:%2erejected */]) {\r\n var unloadEvts = res[_DYN_VALUE /* @min:%2evalue */];\r\n if (unloadEvts && unloadEvts[_DYN_LENGTH /* @min:%2elength */]) {\r\n // always try to send ones from local storage\r\n provider = _unloadProvider;\r\n return _handleNextBatch(unloadEvts);\r\n }\r\n }\r\n return _sendNextBatch();\r\n });\r\n }\r\n else {\r\n return _sendNextBatch();\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n reject(e);\r\n }\r\n function _sendNextBatch() {\r\n return doAwaitResponse(provider[_DYN_GET_NEXT_BATCH /* @min:%2egetNextBatch */](), function (response) {\r\n try {\r\n if (!response || response[_DYN_REJECTED /* @min:%2erejected */]) {\r\n var res = { state: 4 /* eBatchSendStatus.Failure */, data: response.reason };\r\n storeResolve(res);\r\n return;\r\n }\r\n var evts = response[_DYN_VALUE /* @min:%2evalue */] || [];\r\n return _handleNextBatch(evts);\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n });\r\n }\r\n function _handleNextBatch(evts) {\r\n var result = { state: 1 /* eBatchSendStatus.Complete */, data: null };\r\n if (evts[_DYN_LENGTH /* @min:%2elength */]) {\r\n // make sure doawait has resolve\r\n return doAwaitResponse(provider[_DYN_REMOVE_EVENTS /* @min:%2eremoveEvents */](evts), function (res) {\r\n if (res && !res.rejected && res[_DYN_VALUE /* @min:%2evalue */]) {\r\n var deletedItems = res[_DYN_VALUE /* @min:%2evalue */];\r\n var _loop_1 = function (lp) {\r\n try {\r\n var evt_2 = evts[lp];\r\n result[_DYN_DATA /* @min:%2edata */] = evt_2; // add data\r\n if (xhrOverride && xhrOverride[_DYN_SEND_POST /* @min:%2esendPOST */]) {\r\n evt_2[_DYN_ATTEMP_CNT /* @min:%2eattempCnt */]++;\r\n var sender = xhrOverride[_DYN_SEND_POST /* @min:%2esendPOST */]; // use transports\r\n var onCompleteCallback = function (status, headers, res) {\r\n if (status == 200) { // status code (e.g: invalid key) drop payload\r\n result[_DYN_STATE /* @min:%2estate */] = 1 /* eBatchSendStatus.Complete */;\r\n }\r\n else {\r\n var isRetriable = _isRetriable(evt_2, status);\r\n if (isRetriable) {\r\n result[_DYN_STATE /* @min:%2estate */] = 2 /* eBatchSendStatus.Retry */;\r\n _unloadProvider && _unloadProvider[_DYN_ADD_EVENT /* @min:%2eaddEvent */](evt_2.id, evt_2, _itemCtx);\r\n }\r\n else {\r\n result[_DYN_STATE /* @min:%2estate */] = 3 /* eBatchSendStatus.Drop */;\r\n }\r\n }\r\n storeResolve(result);\r\n };\r\n return { value: doAwaitResponse(sender(evt_2, onCompleteCallback, sync), function (res) {\r\n // do nothing, because it should be resolved in callback\r\n }) };\r\n }\r\n // call resolve\r\n result[_DYN_STATE /* @min:%2estate */] = 3 /* eBatchSendStatus.Drop */;\r\n storeResolve(result);\r\n return { value: void 0 };\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n };\r\n for (var lp = 0; lp < deletedItems[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n var state_1 = _loop_1(lp);\r\n if (typeof state_1 === \"object\")\r\n return state_1.value;\r\n }\r\n // this case should never happen because this function is called after we confirm that evt is available\r\n // add resolve here in case\r\n result[_DYN_STATE /* @min:%2estate */] = 1 /* eBatchSendStatus.Complete */;\r\n storeResolve(result);\r\n return;\r\n }\r\n // if can not delete first, resolve\r\n result[_DYN_STATE /* @min:%2estate */] = 4 /* eBatchSendStatus.Failure */;\r\n result.data = res[_DYN_REASON /* @min:%2ereason */];\r\n storeResolve(result);\r\n return;\r\n });\r\n }\r\n storeResolve(result);\r\n }\r\n });\r\n };\r\n _self.hasStoredBatch = function (cb) {\r\n return createPromise(function (resolve, reject) {\r\n if (!_provider) {\r\n reject(new Error(NoProviderErrMsg));\r\n }\r\n return doAwaitResponse(_provider[_DYN_GET_NEXT_BATCH /* @min:%2egetNextBatch */](), function (response) {\r\n try {\r\n var evts = response[_DYN_VALUE /* @min:%2evalue */] || [];\r\n var hasEvts = evts[_DYN_LENGTH /* @min:%2elength */] > 0;\r\n cb && cb(hasEvts);\r\n resolve(hasEvts);\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n });\r\n });\r\n };\r\n _self.cleanStorage = function (cb) {\r\n return createPromise(function (resolve, reject) {\r\n // note: doawaitresponse currently returns undefined\r\n if (!_provider) {\r\n reject(new Error(NoProviderErrMsg));\r\n }\r\n return doAwaitResponse(_provider.clear(), function (response) {\r\n try {\r\n var cnt = 0;\r\n if (!response[_DYN_REJECTED /* @min:%2erejected */]) {\r\n var evts = response[_DYN_VALUE /* @min:%2evalue */] || [];\r\n cnt = evts[_DYN_LENGTH /* @min:%2elength */];\r\n }\r\n var res = { batchCnt: cnt };\r\n cb && cb(res); // get value. make sure to use callback\r\n resolve(res); // won't get val\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n });\r\n });\r\n };\r\n _self[_DYN_TEARDOWN /* @min:%2eteardown */] = function (unloadCtx, unloadState) {\r\n _provider && _provider[_DYN_TEARDOWN /* @min:%2eteardown */]();\r\n _initDefaults();\r\n };\r\n function _initDefaults() {\r\n _provider = null;\r\n _unloadProvider = null;\r\n _isInitialized = false;\r\n _maxRetryCnt = null;\r\n _retryCodes = null;\r\n }\r\n function _tryGetIndexedDbProvider(providerContext) {\r\n var newProvider = new IndexedDbProvider(undefined, unloadHookContainer);\r\n if (!newProvider[_DYN_INITIALIZE /* @min:%2einitialize */](providerContext)) {\r\n // Failed to initialize the provider\r\n newProvider = null;\r\n }\r\n return newProvider;\r\n }\r\n function _tryGetWebStorageProvider(storageType, providerContext) {\r\n var newProvider = new WebStorageProvider(storageType, undefined, unloadHookContainer);\r\n if (!newProvider[_DYN_INITIALIZE /* @min:%2einitialize */](providerContext)) {\r\n // Failed to initialize the provider\r\n newProvider = null;\r\n }\r\n return newProvider;\r\n }\r\n function _initProvider(providerContext) {\r\n var providers = providerContext[_DYN_STORAGE_CONFIG /* @min:%2estorageConfig */].providers;\r\n var newProvider = null;\r\n var lp = 0;\r\n while (!newProvider && lp < providers[_DYN_LENGTH /* @min:%2elength */] && lp < MaxStorageProviderConfig) {\r\n switch (providers[lp++]) {\r\n case 1 /* eStorageProviders.LocalStorage */:\r\n newProvider = _tryGetWebStorageProvider(\"localStorage\", providerContext);\r\n _unloadProvider = newProvider;\r\n break;\r\n case 2 /* eStorageProviders.SessionStorage */:\r\n newProvider = _tryGetWebStorageProvider(\"sessionStorage\", providerContext);\r\n _unloadProvider = newProvider;\r\n break;\r\n case 3 /* eStorageProviders.IndexedDb */:\r\n newProvider = _tryGetIndexedDbProvider(providerContext);\r\n _unloadProvider = _tryGetWebStorageProvider(\"localStorage\", providerContext);\r\n }\r\n }\r\n return newProvider;\r\n }\r\n function _getOfflineEvt(batch) {\r\n var item = batch;\r\n // TODO: add details\r\n var data = item[_DYN_DATA /* @min:%2edata */];\r\n if (data) {\r\n var isArr = isObject(data);\r\n item[_DYN_IS_ARR /* @min:%2eisArr */] = isArr;\r\n }\r\n return item;\r\n }\r\n /**\r\n * Checks if the SDK should resend the payload after receiving this status code from the backend.\r\n * @param statusCode\r\n */\r\n function _isRetriable(item, statusCode) {\r\n if (!_shouldSend(item)) {\r\n return false;\r\n }\r\n // retryCodes = [] means should not retry\r\n if (!isNullOrUndefined(_retryCodes)) {\r\n return _retryCodes[_DYN_LENGTH /* @min:%2elength */] && _retryCodes[_DYN_INDEX_OF /* @min:%2eindexOf */](statusCode) > -1;\r\n }\r\n return statusCode === 401 // Unauthorized\r\n || statusCode === 403 // Forbidden\r\n || statusCode === 408 // Timeout\r\n || statusCode === 429 // Too many requests.\r\n || statusCode === 500 // Internal server error.\r\n || statusCode === 502 // Bad Gateway.\r\n || statusCode === 503 // Service unavailable.\r\n || statusCode === 504; // Gateway timeout.\r\n }\r\n function _shouldSend(item) {\r\n if (item && item[_DYN_DATA /* @min:%2edata */]) {\r\n item[_DYN_ATTEMP_CNT /* @min:%2eattempCnt */] = item[_DYN_ATTEMP_CNT /* @min:%2eattempCnt */] || 0;\r\n return item[_DYN_ATTEMP_CNT /* @min:%2eattempCnt */] <= _maxRetryCnt;\r\n }\r\n return false;\r\n }\r\n });\r\n }\r\n /**\r\n * Initializes the provider using the config\r\n * @returns True if the provider is initialized and available for use otherwise false\r\n */\r\n OfflineBatchHandler.prototype.initialize = function (providerContext) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n OfflineBatchHandler.prototype.storeBatch = function (batch, cb, sync) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n OfflineBatchHandler.prototype.sendNextBatch = function (cb, sync, xhrOverride, cnt) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n OfflineBatchHandler.prototype.hasStoredBatch = function (callback) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n OfflineBatchHandler.prototype.cleanStorage = function (cb) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n OfflineBatchHandler.prototype.teardown = function (unloadCtx, unloadState) {\r\n // @DynamicProtoStub - DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n return OfflineBatchHandler;\r\n}());\r\nexport { OfflineBatchHandler };\r\n//# sourceMappingURL=OfflineBatchHandler.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;2DA2BM,CAAC;;;;;+BACwB;AAC/B;AACA;AACA"}