@cloudcare/browser-core 1.2.11 → 1.2.12

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.
@@ -80,7 +80,7 @@ function afterSend(observable, responsePromise, startContext) {
80
80
  observable.notify(context);
81
81
  } else if ('status' in response) {
82
82
  context.response = response;
83
- context.responseType = response.type;
83
+ context.responseType = response instanceof Response && response.type || '';
84
84
  context.status = response.status;
85
85
  context.isAborted = false;
86
86
  observable.notify(context);
@@ -1448,7 +1448,7 @@ var getURLSearchParams = function getURLSearchParams(queryString) {
1448
1448
  queryString = queryString || '';
1449
1449
 
1450
1450
  var decodeParam = function decodeParam(str) {
1451
- return decodeURIComponent(str);
1451
+ return str; // return decodeURIComponent(str)
1452
1452
  };
1453
1453
 
1454
1454
  var args = {};
@@ -73,11 +73,13 @@ function fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse) {
73
73
  fetch(url, {
74
74
  method: 'POST',
75
75
  body: data,
76
- keepalive: true
76
+ keepalive: true,
77
+ mode: 'cors'
77
78
  }).then(function (response) {
78
79
  if (typeof onResponse === 'function') {
79
80
  onResponse({
80
- status: response.status
81
+ status: response.status,
82
+ type: response.type
81
83
  });
82
84
  }
83
85
  }, function () {
@@ -80,7 +80,7 @@ function send(payload, state, sendStrategy, responseData) {
80
80
  sendStrategy(payload, function (response) {
81
81
  state.bandwidthMonitor.remove(payload);
82
82
 
83
- if (wasRequestSuccessful(response)) {
83
+ if (!shouldRetryRequest(response)) {
84
84
  state.transportStatus = TransportStatus.UP;
85
85
  onSuccess();
86
86
  } else {
@@ -110,8 +110,8 @@ function retryQueuedPayloads(reason, state, sendStrategy, reportError) {
110
110
  }
111
111
  }
112
112
 
113
- function wasRequestSuccessful(response) {
114
- return response.status !== 0 && response.status < 500;
113
+ function shouldRetryRequest(response) {
114
+ return response.type !== 'opaque' && (response.status === 0 && !navigator.onLine || response.status === 408 || response.status === 429 || response.status >= 500);
115
115
  }
116
116
 
117
117
  function newRetryState() {
@@ -66,7 +66,7 @@ function afterSend(observable, responsePromise, startContext) {
66
66
  observable.notify(context);
67
67
  } else if ('status' in response) {
68
68
  context.response = response;
69
- context.responseType = response.type;
69
+ context.responseType = response instanceof Response && response.type || '';
70
70
  context.status = response.status;
71
71
  context.isAborted = false;
72
72
  observable.notify(context);
@@ -1177,7 +1177,7 @@ export var getURLSearchParams = function getURLSearchParams(queryString) {
1177
1177
  queryString = queryString || '';
1178
1178
 
1179
1179
  var decodeParam = function decodeParam(str) {
1180
- return decodeURIComponent(str);
1180
+ return str; // return decodeURIComponent(str)
1181
1181
  };
1182
1182
 
1183
1183
  var args = {};
@@ -65,11 +65,13 @@ export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onRespo
65
65
  fetch(url, {
66
66
  method: 'POST',
67
67
  body: data,
68
- keepalive: true
68
+ keepalive: true,
69
+ mode: 'cors'
69
70
  }).then(function (response) {
70
71
  if (typeof onResponse === 'function') {
71
72
  onResponse({
72
- status: response.status
73
+ status: response.status,
74
+ type: response.type
73
75
  });
74
76
  }
75
77
  }, function () {
@@ -63,7 +63,7 @@ function send(payload, state, sendStrategy, responseData) {
63
63
  sendStrategy(payload, function (response) {
64
64
  state.bandwidthMonitor.remove(payload);
65
65
 
66
- if (wasRequestSuccessful(response)) {
66
+ if (!shouldRetryRequest(response)) {
67
67
  state.transportStatus = TransportStatus.UP;
68
68
  onSuccess();
69
69
  } else {
@@ -93,8 +93,8 @@ function retryQueuedPayloads(reason, state, sendStrategy, reportError) {
93
93
  }
94
94
  }
95
95
 
96
- function wasRequestSuccessful(response) {
97
- return response.status !== 0 && response.status < 500;
96
+ function shouldRetryRequest(response) {
97
+ return response.type !== 'opaque' && (response.status === 0 && !navigator.onLine || response.status === 408 || response.status === 429 || response.status >= 500);
98
98
  }
99
99
 
100
100
  export function newRetryState() {
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
- "name": "@cloudcare/browser-core",
3
- "version": "1.2.11",
4
- "main": "cjs/index.js",
5
- "module": "esm/index.js",
6
- "scripts": {
7
- "build": "run-p build:cjs build:esm",
8
- "build:cjs": "rm -rf cjs && babel --config-file ./babel.cjs.json --out-dir cjs ./src",
9
- "build:esm": "rm -rf esm && babel --config-file ./babel.esm.json --out-dir esm ./src "
10
- },
11
- "keywords": [
12
- "dataflux",
13
- "logs",
14
- "sdk"
15
- ],
16
- "repository": {
17
- "url": "https://github.com/DataFlux-cn/datakit-js",
18
- "type": "git"
19
- },
20
- "author": "dataflux",
21
- "license": "MIT",
22
- "description": "DataFlux RUM Web 端数据指标监控",
23
- "gitHead": "7a7a643e72002ffafff9ce0f6c1b1c2f904eeebe"
2
+ "name": "@cloudcare/browser-core",
3
+ "version": "1.2.12",
4
+ "main": "cjs/index.js",
5
+ "module": "esm/index.js",
6
+ "scripts": {
7
+ "build": "run-p build:cjs build:esm",
8
+ "build:cjs": "rm -rf cjs && babel --config-file ./babel.cjs.json --out-dir cjs ./src",
9
+ "build:esm": "rm -rf esm && babel --config-file ./babel.esm.json --out-dir esm ./src "
10
+ },
11
+ "keywords": [
12
+ "dataflux",
13
+ "logs",
14
+ "sdk"
15
+ ],
16
+ "repository": {
17
+ "url": "https://github.com/DataFlux-cn/datakit-js",
18
+ "type": "git"
19
+ },
20
+ "author": "dataflux",
21
+ "license": "MIT",
22
+ "description": "DataFlux RUM Web 端数据指标监控",
23
+ "gitHead": "35aef5d669cd504346a31a1c92381f150d8fff75"
24
24
  }
@@ -13,7 +13,7 @@ export function initFetchObservable() {
13
13
  }
14
14
 
15
15
  function createFetchObservable() {
16
- var observable = new Observable(function() {
16
+ var observable = new Observable(function () {
17
17
  if (!window.fetch) {
18
18
  return
19
19
  }
@@ -21,19 +21,23 @@ function createFetchObservable() {
21
21
  var fetchMethod = instrumentMethod(
22
22
  window,
23
23
  'fetch',
24
- function(originalFetch) {
24
+ function (originalFetch) {
25
25
  return function (input, init) {
26
26
  var responsePromise
27
27
  var context = beforeSend(observable, input, init)
28
28
  if (context) {
29
- responsePromise = originalFetch.call(this, context.input, context.init)
29
+ responsePromise = originalFetch.call(
30
+ this,
31
+ context.input,
32
+ context.init
33
+ )
30
34
  afterSend(observable, responsePromise, context)
31
35
  } else {
32
36
  responsePromise = originalFetch.call(this, input, init)
33
37
  }
34
38
  return responsePromise
35
39
  }
36
- }
40
+ }
37
41
  )
38
42
  return fetchMethod.stop
39
43
  })
@@ -42,7 +46,10 @@ function createFetchObservable() {
42
46
  }
43
47
 
44
48
  function beforeSend(observable, input, init) {
45
- var method = (init && init.method) || (typeof input === 'object' && input.method) || 'GET'
49
+ var method =
50
+ (init && init.method) ||
51
+ (typeof input === 'object' && input.method) ||
52
+ 'GET'
46
53
  var url = normalizeUrl((typeof input === 'object' && input.url) || input)
47
54
  var startClocks = clocksNow()
48
55
 
@@ -52,7 +59,7 @@ function beforeSend(observable, input, init) {
52
59
  input: input,
53
60
  method: method,
54
61
  startClocks: startClocks,
55
- url: url,
62
+ url: url
56
63
  }
57
64
 
58
65
  observable.notify(context)
@@ -60,23 +67,22 @@ function beforeSend(observable, input, init) {
60
67
  return context
61
68
  }
62
69
 
63
- function afterSend(
64
- observable,
65
- responsePromise,
66
- startContext
67
- ) {
68
- var reportFetch = function(response) {
70
+ function afterSend(observable, responsePromise, startContext) {
71
+ var reportFetch = function (response) {
69
72
  var context = startContext
70
73
  context.state = 'complete'
71
74
  context.duration = elapsed(context.startClocks.timeStamp, timeStampNow())
72
75
  if ('stack' in response || response instanceof Error) {
73
76
  context.status = 0
74
- context.isAborted = response instanceof DOMException && response.code === DOMException.ABORT_ERR
77
+ context.isAborted =
78
+ response instanceof DOMException &&
79
+ response.code === DOMException.ABORT_ERR
75
80
  context.error = response
76
81
  observable.notify(context)
77
82
  } else if ('status' in response) {
78
83
  context.response = response
79
- context.responseType = response.type
84
+ context.responseType =
85
+ (response instanceof Response && response.type) || ''
80
86
  context.status = response.status
81
87
  context.isAborted = false
82
88
  observable.notify(context)
@@ -1143,7 +1143,8 @@ export var getQueryParamsFromUrl = function (url) {
1143
1143
  export var getURLSearchParams = function (queryString) {
1144
1144
  queryString = queryString || ''
1145
1145
  var decodeParam = function (str) {
1146
- return decodeURIComponent(str)
1146
+ return str
1147
+ // return decodeURIComponent(str)
1147
1148
  }
1148
1149
  var args = {}
1149
1150
  var query = queryString.substring(1)
@@ -12,27 +12,28 @@ function addBatchPrecision(url) {
12
12
  if (!url) return url
13
13
  return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'
14
14
  }
15
- export function createHttpRequest(
16
- endpointUrl,
17
- bytesLimit,
18
- reportError
19
- ) {
15
+ export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
20
16
  var retryState = newRetryState()
21
- var sendStrategyForRetry = function(payload, onResponse) {
17
+ var sendStrategyForRetry = function (payload, onResponse) {
22
18
  return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse)
23
19
  }
24
-
20
+
25
21
  return {
26
- send: function(payload) {
27
- sendWithRetryStrategy(payload, retryState, sendStrategyForRetry, reportError)
22
+ send: function (payload) {
23
+ sendWithRetryStrategy(
24
+ payload,
25
+ retryState,
26
+ sendStrategyForRetry,
27
+ reportError
28
+ )
28
29
  },
29
30
  /**
30
31
  * Since fetch keepalive behaves like regular fetch on Firefox,
31
32
  * keep using sendBeaconStrategy on exit
32
33
  */
33
- sendOnExit: function(payload) {
34
+ sendOnExit: function (payload) {
34
35
  sendBeaconStrategy(endpointUrl, bytesLimit, payload)
35
- },
36
+ }
36
37
  }
37
38
  }
38
39
 
@@ -55,8 +56,6 @@ function sendBeaconStrategy(endpointUrl, bytesLimit, payload) {
55
56
  sendXHR(url, data)
56
57
  }
57
58
 
58
-
59
-
60
59
  export function fetchKeepAliveStrategy(
61
60
  endpointUrl,
62
61
  bytesLimit,
@@ -68,14 +67,18 @@ export function fetchKeepAliveStrategy(
68
67
  var url = addBatchPrecision(endpointUrl)
69
68
  var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit
70
69
  if (canUseKeepAlive) {
71
- fetch(url, { method: 'POST', body: data, keepalive: true })
72
- .then(
73
- function(response) {
70
+ fetch(url, {
71
+ method: 'POST',
72
+ body: data,
73
+ keepalive: true,
74
+ mode: 'cors'
75
+ }).then(
76
+ function (response) {
74
77
  if (typeof onResponse === 'function') {
75
- onResponse({ status: response.status })
78
+ onResponse({ status: response.status, type: response.type })
76
79
  }
77
80
  },
78
- function() {
81
+ function () {
79
82
  // failed to queue the request
80
83
  sendXHR(url, data, onResponse)
81
84
  }
@@ -98,12 +101,9 @@ function sendXHR(url, data, onResponse) {
98
101
  const request = new XMLHttpRequest()
99
102
  request.open('POST', url, true)
100
103
  request.send(data)
101
- request.addEventListener(
102
- 'loadend',
103
- function(){
104
- if (typeof onResponse === 'function') {
105
- onResponse({ status: request.status })
106
- }
104
+ request.addEventListener('loadend', function () {
105
+ if (typeof onResponse === 'function') {
106
+ onResponse({ status: request.status })
107
107
  }
108
- )
108
+ })
109
109
  }
@@ -92,7 +92,7 @@ function send(payload, state, sendStrategy, responseData) {
92
92
  state.bandwidthMonitor.add(payload)
93
93
  sendStrategy(payload, function (response) {
94
94
  state.bandwidthMonitor.remove(payload)
95
- if (wasRequestSuccessful(response)) {
95
+ if (!shouldRetryRequest(response)) {
96
96
  state.transportStatus = TransportStatus.UP
97
97
  onSuccess()
98
98
  } else {
@@ -135,10 +135,15 @@ function retryQueuedPayloads(reason, state, sendStrategy, reportError) {
135
135
  }
136
136
  }
137
137
 
138
- function wasRequestSuccessful(response) {
139
- return response.status !== 0 && response.status < 500
138
+ function shouldRetryRequest(response) {
139
+ return (
140
+ response.type !== 'opaque' &&
141
+ ((response.status === 0 && !navigator.onLine) ||
142
+ response.status === 408 ||
143
+ response.status === 429 ||
144
+ response.status >= 500)
145
+ )
140
146
  }
141
-
142
147
  export function newRetryState() {
143
148
  return {
144
149
  transportStatus: TransportStatus.UP,