@cloudcare/browser-core 3.1.2 → 3.1.5

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 (67) hide show
  1. package/cjs/browser/cookie.js +18 -2
  2. package/cjs/browser/cookie.js.map +1 -1
  3. package/cjs/browser/htmlDomUtils.js +4 -1
  4. package/cjs/browser/htmlDomUtils.js.map +1 -1
  5. package/cjs/configuration/configuration.js +20 -1
  6. package/cjs/configuration/configuration.js.map +1 -1
  7. package/cjs/configuration/transportConfiguration.js +15 -6
  8. package/cjs/configuration/transportConfiguration.js.map +1 -1
  9. package/cjs/dataMap.js +7 -3
  10. package/cjs/dataMap.js.map +1 -1
  11. package/cjs/helper/deviceInfo.js +23 -21
  12. package/cjs/helper/deviceInfo.js.map +1 -1
  13. package/cjs/helper/errorTools.js +2 -1
  14. package/cjs/helper/errorTools.js.map +1 -1
  15. package/cjs/helper/monitor.js +1 -0
  16. package/cjs/helper/monitor.js.map +1 -1
  17. package/cjs/helper/serialisation/rowData.js +7 -5
  18. package/cjs/helper/serialisation/rowData.js.map +1 -1
  19. package/cjs/helper/tools.js +67 -18
  20. package/cjs/helper/tools.js.map +1 -1
  21. package/cjs/transport/batch.js +23 -10
  22. package/cjs/transport/batch.js.map +1 -1
  23. package/cjs/transport/httpRequest.js +31 -12
  24. package/cjs/transport/httpRequest.js.map +1 -1
  25. package/cjs/transport/startBatchWithReplica.js +2 -2
  26. package/cjs/transport/startBatchWithReplica.js.map +1 -1
  27. package/esm/browser/cookie.js +17 -3
  28. package/esm/browser/cookie.js.map +1 -1
  29. package/esm/browser/htmlDomUtils.js +3 -1
  30. package/esm/browser/htmlDomUtils.js.map +1 -1
  31. package/esm/configuration/configuration.js +19 -1
  32. package/esm/configuration/configuration.js.map +1 -1
  33. package/esm/configuration/transportConfiguration.js +15 -6
  34. package/esm/configuration/transportConfiguration.js.map +1 -1
  35. package/esm/dataMap.js +7 -3
  36. package/esm/dataMap.js.map +1 -1
  37. package/esm/helper/deviceInfo.js +23 -21
  38. package/esm/helper/deviceInfo.js.map +1 -1
  39. package/esm/helper/errorTools.js +1 -0
  40. package/esm/helper/errorTools.js.map +1 -1
  41. package/esm/helper/monitor.js +1 -0
  42. package/esm/helper/monitor.js.map +1 -1
  43. package/esm/helper/serialisation/rowData.js +8 -6
  44. package/esm/helper/serialisation/rowData.js.map +1 -1
  45. package/esm/helper/tools.js +63 -17
  46. package/esm/helper/tools.js.map +1 -1
  47. package/esm/transport/batch.js +24 -11
  48. package/esm/transport/batch.js.map +1 -1
  49. package/esm/transport/httpRequest.js +31 -12
  50. package/esm/transport/httpRequest.js.map +1 -1
  51. package/esm/transport/startBatchWithReplica.js +2 -2
  52. package/esm/transport/startBatchWithReplica.js.map +1 -1
  53. package/package.json +2 -2
  54. package/src/browser/cookie.js +22 -3
  55. package/src/browser/htmlDomUtils.js +3 -1
  56. package/src/configuration/configuration.js +29 -2
  57. package/src/configuration/transportConfiguration.js +19 -13
  58. package/src/dataMap.js +9 -3
  59. package/src/helper/deviceInfo.js +23 -20
  60. package/src/helper/errorTools.js +1 -0
  61. package/src/helper/monitor.js +1 -0
  62. package/src/helper/serialisation/rowData.js +9 -6
  63. package/src/helper/tools.js +71 -18
  64. package/src/transport/batch.js +28 -12
  65. package/src/transport/httpRequest.js +46 -11
  66. package/src/transport/startBatchWithReplica.js +3 -1
  67. package/src/.DS_Store +0 -0
@@ -1,10 +1,11 @@
1
1
  import { display } from '../helper/display';
2
- import { values, findByPath, each, isNumber, isArray, extend, isString, toServerDuration, isBoolean, isEmptyObject, isObject } from '../helper/tools';
2
+ import { values, findByPath, each, isNumber, isArray, extend, isString, isEmptyObject, isObject } from '../helper/tools';
3
3
  import { escapeJsonValue, escapeRowField, escapeRowData } from '../helper/serialisation/rowData';
4
4
  import { commonTags, dataMap, commonFields } from '../dataMap';
5
5
  import { RumEventType } from '../helper/enums';
6
6
  import { computeBytesCount } from '../helper/byteUtils';
7
7
  import { isPageExitReason } from '../browser/pageExitObservable';
8
+ import { jsonStringify } from '../helper/serialisation/jsonStringify';
8
9
  // https://en.wikipedia.org/wiki/UTF-8
9
10
  // eslint-disable-next-line no-control-regex
10
11
  var HAS_MULTI_BYTES_CHARACTERS = /[^\u0000-\u007F]/;
@@ -31,7 +32,7 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
31
32
  var _value = findByPath(message, value_path);
32
33
  filterFileds.push(_key);
33
34
  if (_value || isNumber(_value)) {
34
- rowData.tags[_key] = escapeJsonValue(_value);
35
+ rowData.tags[_key] = escapeJsonValue(_value, true);
35
36
  tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value));
36
37
  }
37
38
  });
@@ -43,14 +44,14 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
43
44
  var _valueData = findByPath(message, value_path);
44
45
  filterFileds.push(_key);
45
46
  if (_valueData !== undefined && _valueData !== null) {
46
- rowData.fields[_key] = _valueData; // 这里不需要转译
47
+ rowData.fields[_key] = escapeJsonValue(_valueData); // 这里不需要转译
47
48
  fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_valueData));
48
49
  }
49
50
  } else if (isString(_value)) {
50
51
  var _valueData = findByPath(message, _value);
51
52
  filterFileds.push(_key);
52
53
  if (_valueData !== undefined && _valueData !== null) {
53
- rowData.fields[_key] = _valueData; // 这里不需要转译
54
+ rowData.fields[_key] = escapeJsonValue(_valueData); // 这里不需要转译
54
55
  fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_valueData));
55
56
  }
56
57
  }
@@ -64,12 +65,12 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
64
65
  filterFileds.push(_key);
65
66
  if (_value !== undefined && _value !== null) {
66
67
  _tagKeys.push(_key);
67
- rowData.fields[_key] = _value; // 这里不需要转译
68
+ rowData.fields[_key] = escapeJsonValue(_value); // 这里不需要转译
68
69
  fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_value));
69
70
  }
70
71
  });
71
72
  if (_tagKeys.length) {
72
- rowData.fields[CUSTOM_KEYS] = escapeRowField(_tagKeys);
73
+ rowData.fields[CUSTOM_KEYS] = escapeJsonValue(_tagKeys);
73
74
  fieldsStr.push(escapeRowData(CUSTOM_KEYS) + '=' + escapeRowField(_tagKeys));
74
75
  }
75
76
  }
@@ -77,7 +78,7 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
77
78
  // 这里处理日志类型数据自定义字段
78
79
  each(message, function (value, key) {
79
80
  if (filterFileds.indexOf(key) === -1 && value !== undefined && value !== null) {
80
- rowData.fields[key] = value; // 这里不需要转译
81
+ rowData.fields[key] = escapeJsonValue(value); // 这里不需要转译
81
82
  fieldsStr.push(escapeRowData(key) + '=' + escapeRowField(value));
82
83
  }
83
84
  });
@@ -91,7 +92,7 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
91
92
  hasFileds = true;
92
93
  }
93
94
  rowStr = rowStr + ' ' + message.date;
94
- rowData.time = toServerDuration(message.date); // 这里不需要转译
95
+ rowData.time = message.date; // 这里不需要转译
95
96
  }
96
97
  });
97
98
 
@@ -100,12 +101,13 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
100
101
  rowData: hasFileds ? rowData : undefined
101
102
  };
102
103
  };
103
- var batch = function batch(request, flushController, messageBytesLimit) {
104
+ var batch = function batch(request, flushController, messageBytesLimit, sendContentTypeByJson) {
104
105
  this.pushOnlyBuffer = [];
105
106
  this.upsertBuffer = {};
106
107
  this.request = request;
107
108
  this.flushController = flushController;
108
109
  this.messageBytesLimit = messageBytesLimit;
110
+ this.sendContentTypeByJson = sendContentTypeByJson;
109
111
  var _this = this;
110
112
  this.flushController.flushObservable.subscribe(function (event) {
111
113
  _this.flush(event);
@@ -122,8 +124,14 @@ batch.prototype.flush = function (event) {
122
124
  this.pushOnlyBuffer = [];
123
125
  this.upsertBuffer = {};
124
126
  if (messages.length > 0) {
127
+ var payloadData = '';
128
+ if (this.sendContentTypeByJson) {
129
+ payloadData = '[' + messages.join(',') + ']';
130
+ } else {
131
+ payloadData = messages.join('\n');
132
+ }
125
133
  var payload = {
126
- data: messages.join('\n'),
134
+ data: payloadData,
127
135
  bytesCount: event.bytesCount,
128
136
  flushReason: event.reason
129
137
  };
@@ -148,7 +156,12 @@ batch.prototype.addOrUpdate = function (message, key) {
148
156
  this.push(processedMessage, messageBytesCount, key);
149
157
  };
150
158
  batch.prototype.process = function (message) {
151
- var processedMessage = processedMessageByDataMap(message).rowStr;
159
+ var processedMessage = '';
160
+ if (this.sendContentTypeByJson) {
161
+ processedMessage = jsonStringify(processedMessageByDataMap(message).rowData);
162
+ } else {
163
+ processedMessage = processedMessageByDataMap(message).rowStr;
164
+ }
152
165
  var messageBytesCount = computeBytesCount(processedMessage);
153
166
  return {
154
167
  processedMessage: processedMessage,
@@ -1 +1 @@
1
- {"version":3,"file":"batch.js","names":["display","values","findByPath","each","isNumber","isArray","extend","isString","toServerDuration","isBoolean","isEmptyObject","isObject","escapeJsonValue","escapeRowField","escapeRowData","commonTags","dataMap","commonFields","RumEventType","computeBytesCount","isPageExitReason","HAS_MULTI_BYTES_CHARACTERS","CUSTOM_KEYS","processedMessageByDataMap","message","type","rowStr","rowData","undefined","tags","fields","hasFileds","value","key","measurement","tagsStr","filterFileds","value_path","_key","_value","push","fieldsStr","length","_valueData","context","_tagKeys","indexOf","LOGGER","join","date","time","batch","request","flushController","messageBytesLimit","pushOnlyBuffer","upsertBuffer","_this","flushObservable","subscribe","event","flush","prototype","add","addOrUpdate","upsert","messages","concat","payload","data","bytesCount","flushReason","reason","sendOnExit","send","_process","process","processedMessage","messageBytesCount","warn","hasMessageFor","remove","separatorBytesCount","getMessagesCount","notifyBeforeAddMessage","notifyAfterAddMessage","removedMessage","notifyAfterRemoveMessage","Batch"],"sources":["../../src/transport/batch.js"],"sourcesContent":["import { display } from '../helper/display'\nimport {\n values,\n findByPath,\n each,\n isNumber,\n isArray,\n extend,\n isString,\n toServerDuration,\n isBoolean,\n isEmptyObject,\n isObject\n} from '../helper/tools'\nimport {\n escapeJsonValue,\n escapeRowField,\n escapeRowData\n} from '../helper/serialisation/rowData'\nimport { commonTags, dataMap, commonFields } from '../dataMap'\nimport { RumEventType } from '../helper/enums'\nimport { computeBytesCount } from '../helper/byteUtils'\nimport { isPageExitReason } from '../browser/pageExitObservable'\n// https://en.wikipedia.org/wiki/UTF-8\n// eslint-disable-next-line no-control-regex\nvar HAS_MULTI_BYTES_CHARACTERS = /[^\\u0000-\\u007F]/\nvar CUSTOM_KEYS = 'custom_keys'\nexport var processedMessageByDataMap = function (message) {\n if (!message || !message.type)\n return {\n rowStr: '',\n rowData: undefined\n }\n\n var rowData = { tags: {}, fields: {} }\n var hasFileds = false\n var rowStr = ''\n each(dataMap, function (value, key) {\n if (value.type === message.type) {\n rowStr += key + ','\n rowData.measurement = key\n var tagsStr = []\n var tags = extend({}, commonTags, value.tags)\n var filterFileds = ['date', 'type', CUSTOM_KEYS] // 已经在datamap中定义过的fields和tags\n each(tags, function (value_path, _key) {\n var _value = findByPath(message, value_path)\n filterFileds.push(_key)\n if (_value || isNumber(_value)) {\n rowData.tags[_key] = escapeJsonValue(_value)\n tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value))\n }\n })\n\n var fieldsStr = []\n var fields = extend({}, commonFields, value.fields)\n each(fields, function (_value, _key) {\n if (isArray(_value) && _value.length === 2) {\n var value_path = _value[1]\n var _valueData = findByPath(message, value_path)\n filterFileds.push(_key)\n if (_valueData !== undefined && _valueData !== null) {\n rowData.fields[_key] = _valueData // 这里不需要转译\n fieldsStr.push(\n escapeRowData(_key) + '=' + escapeRowField(_valueData)\n )\n }\n } else if (isString(_value)) {\n var _valueData = findByPath(message, _value)\n filterFileds.push(_key)\n if (_valueData !== undefined && _valueData !== null) {\n rowData.fields[_key] = _valueData // 这里不需要转译\n fieldsStr.push(\n escapeRowData(_key) + '=' + escapeRowField(_valueData)\n )\n }\n }\n })\n if (\n message.context &&\n isObject(message.context) &&\n !isEmptyObject(message.context)\n ) {\n // 自定义tag, 存储成field\n var _tagKeys = []\n each(message.context, function (_value, _key) {\n // 如果和之前tag重名,则舍弃\n if (filterFileds.indexOf(_key) > -1) return\n filterFileds.push(_key)\n if (_value !== undefined && _value !== null) {\n _tagKeys.push(_key)\n rowData.fields[_key] = _value // 这里不需要转译\n fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_value))\n }\n })\n if (_tagKeys.length) {\n rowData.fields[CUSTOM_KEYS] = escapeRowField(_tagKeys)\n fieldsStr.push(\n escapeRowData(CUSTOM_KEYS) + '=' + escapeRowField(_tagKeys)\n )\n }\n }\n if (message.type === RumEventType.LOGGER) {\n // 这里处理日志类型数据自定义字段\n each(message, function (value, key) {\n if (\n filterFileds.indexOf(key) === -1 &&\n value !== undefined &&\n value !== null\n ) {\n rowData.fields[key] = value // 这里不需要转译\n fieldsStr.push(escapeRowData(key) + '=' + escapeRowField(value))\n }\n })\n }\n if (tagsStr.length) {\n rowStr += tagsStr.join(',')\n }\n if (fieldsStr.length) {\n rowStr += ' '\n rowStr += fieldsStr.join(',')\n hasFileds = true\n }\n rowStr = rowStr + ' ' + message.date\n rowData.time = toServerDuration(message.date) // 这里不需要转译\n }\n })\n return {\n rowStr: hasFileds ? rowStr : '',\n rowData: hasFileds ? rowData : undefined\n }\n}\nvar batch = function (request, flushController, messageBytesLimit) {\n this.pushOnlyBuffer = []\n this.upsertBuffer = {}\n this.request = request\n this.flushController = flushController\n this.messageBytesLimit = messageBytesLimit\n var _this = this\n this.flushController.flushObservable.subscribe(function (event) {\n _this.flush(event)\n })\n}\nbatch.prototype.add = function (message) {\n this.addOrUpdate(message)\n}\nbatch.prototype.upsert = function (message, key) {\n this.addOrUpdate(message, key)\n}\nbatch.prototype.flush = function (event) {\n var messages = this.pushOnlyBuffer.concat(values(this.upsertBuffer))\n this.pushOnlyBuffer = []\n this.upsertBuffer = {}\n if (messages.length > 0) {\n var payload = {\n data: messages.join('\\n'),\n bytesCount: event.bytesCount,\n flushReason: event.reason\n }\n if (isPageExitReason(event.reason)) {\n this.request.sendOnExit(payload)\n } else {\n this.request.send(payload)\n }\n }\n}\n\nbatch.prototype.addOrUpdate = function (message, key) {\n var _process = this.process(message)\n var processedMessage = _process.processedMessage\n var messageBytesCount = _process.messageBytesCount\n if (messageBytesCount >= this.messageBytesLimit) {\n display.warn(\n 'Discarded a message whose size was bigger than the maximum allowed size ' +\n this.messageBytesLimit +\n 'KB.'\n )\n return\n }\n if (this.hasMessageFor(key)) {\n this.remove(key)\n }\n this.push(processedMessage, messageBytesCount, key)\n}\nbatch.prototype.process = function (message) {\n var processedMessage = processedMessageByDataMap(message).rowStr\n var messageBytesCount = computeBytesCount(processedMessage)\n return {\n processedMessage: processedMessage,\n messageBytesCount: messageBytesCount\n }\n}\n\nbatch.prototype.push = function (processedMessage, messageBytesCount, key) {\n var separatorBytesCount = this.flushController.getMessagesCount() > 0 ? 1 : 0\n this.flushController.notifyBeforeAddMessage(\n messageBytesCount + separatorBytesCount\n )\n if (key !== undefined) {\n this.upsertBuffer[key] = processedMessage\n } else {\n this.pushOnlyBuffer.push(processedMessage)\n }\n this.flushController.notifyAfterAddMessage()\n}\n\nbatch.prototype.remove = function (key) {\n var removedMessage = this.upsertBuffer[key]\n delete this.upsertBuffer[key]\n var messageBytesCount = computeBytesCount(removedMessage)\n // If there are other messages, a '\\n' will be added at serialization\n var separatorBytesCount = this.flushController.getMessagesCount() > 1 ? 1 : 0\n this.flushController.notifyAfterRemoveMessage(\n messageBytesCount + separatorBytesCount\n )\n}\n\nbatch.prototype.hasMessageFor = function (key) {\n return key !== undefined && this.upsertBuffer[key] !== undefined\n}\nexport var Batch = batch\n"],"mappings":"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"}
1
+ {"version":3,"file":"batch.js","names":["display","values","findByPath","each","isNumber","isArray","extend","isString","isEmptyObject","isObject","escapeJsonValue","escapeRowField","escapeRowData","commonTags","dataMap","commonFields","RumEventType","computeBytesCount","isPageExitReason","jsonStringify","HAS_MULTI_BYTES_CHARACTERS","CUSTOM_KEYS","processedMessageByDataMap","message","type","rowStr","rowData","undefined","tags","fields","hasFileds","value","key","measurement","tagsStr","filterFileds","value_path","_key","_value","push","fieldsStr","length","_valueData","context","_tagKeys","indexOf","LOGGER","join","date","time","batch","request","flushController","messageBytesLimit","sendContentTypeByJson","pushOnlyBuffer","upsertBuffer","_this","flushObservable","subscribe","event","flush","prototype","add","addOrUpdate","upsert","messages","concat","payloadData","payload","data","bytesCount","flushReason","reason","sendOnExit","send","_process","process","processedMessage","messageBytesCount","warn","hasMessageFor","remove","separatorBytesCount","getMessagesCount","notifyBeforeAddMessage","notifyAfterAddMessage","removedMessage","notifyAfterRemoveMessage","Batch"],"sources":["../../src/transport/batch.js"],"sourcesContent":["import { display } from '../helper/display'\nimport {\n values,\n findByPath,\n each,\n isNumber,\n isArray,\n extend,\n isString,\n isEmptyObject,\n isObject\n} from '../helper/tools'\nimport {\n escapeJsonValue,\n escapeRowField,\n escapeRowData\n} from '../helper/serialisation/rowData'\nimport { commonTags, dataMap, commonFields } from '../dataMap'\nimport { RumEventType } from '../helper/enums'\nimport { computeBytesCount } from '../helper/byteUtils'\nimport { isPageExitReason } from '../browser/pageExitObservable'\nimport { jsonStringify } from '../helper/serialisation/jsonStringify'\n// https://en.wikipedia.org/wiki/UTF-8\n// eslint-disable-next-line no-control-regex\nvar HAS_MULTI_BYTES_CHARACTERS = /[^\\u0000-\\u007F]/\nvar CUSTOM_KEYS = 'custom_keys'\nexport var processedMessageByDataMap = function (message) {\n if (!message || !message.type)\n return {\n rowStr: '',\n rowData: undefined\n }\n\n var rowData = { tags: {}, fields: {} }\n var hasFileds = false\n var rowStr = ''\n each(dataMap, function (value, key) {\n if (value.type === message.type) {\n rowStr += key + ','\n rowData.measurement = key\n var tagsStr = []\n var tags = extend({}, commonTags, value.tags)\n var filterFileds = ['date', 'type', CUSTOM_KEYS] // 已经在datamap中定义过的fields和tags\n each(tags, function (value_path, _key) {\n var _value = findByPath(message, value_path)\n filterFileds.push(_key)\n if (_value || isNumber(_value)) {\n rowData.tags[_key] = escapeJsonValue(_value, true)\n tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value))\n }\n })\n\n var fieldsStr = []\n var fields = extend({}, commonFields, value.fields)\n each(fields, function (_value, _key) {\n if (isArray(_value) && _value.length === 2) {\n var value_path = _value[1]\n var _valueData = findByPath(message, value_path)\n filterFileds.push(_key)\n if (_valueData !== undefined && _valueData !== null) {\n rowData.fields[_key] = escapeJsonValue(_valueData) // 这里不需要转译\n fieldsStr.push(\n escapeRowData(_key) + '=' + escapeRowField(_valueData)\n )\n }\n } else if (isString(_value)) {\n var _valueData = findByPath(message, _value)\n filterFileds.push(_key)\n if (_valueData !== undefined && _valueData !== null) {\n rowData.fields[_key] = escapeJsonValue(_valueData) // 这里不需要转译\n fieldsStr.push(\n escapeRowData(_key) + '=' + escapeRowField(_valueData)\n )\n }\n }\n })\n if (\n message.context &&\n isObject(message.context) &&\n !isEmptyObject(message.context)\n ) {\n // 自定义tag, 存储成field\n var _tagKeys = []\n each(message.context, function (_value, _key) {\n // 如果和之前tag重名,则舍弃\n if (filterFileds.indexOf(_key) > -1) return\n filterFileds.push(_key)\n if (_value !== undefined && _value !== null) {\n _tagKeys.push(_key)\n rowData.fields[_key] = escapeJsonValue(_value) // 这里不需要转译\n fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_value))\n }\n })\n if (_tagKeys.length) {\n rowData.fields[CUSTOM_KEYS] = escapeJsonValue(_tagKeys)\n fieldsStr.push(\n escapeRowData(CUSTOM_KEYS) + '=' + escapeRowField(_tagKeys)\n )\n }\n }\n if (message.type === RumEventType.LOGGER) {\n // 这里处理日志类型数据自定义字段\n each(message, function (value, key) {\n if (\n filterFileds.indexOf(key) === -1 &&\n value !== undefined &&\n value !== null\n ) {\n rowData.fields[key] = escapeJsonValue(value) // 这里不需要转译\n fieldsStr.push(escapeRowData(key) + '=' + escapeRowField(value))\n }\n })\n }\n if (tagsStr.length) {\n rowStr += tagsStr.join(',')\n }\n if (fieldsStr.length) {\n rowStr += ' '\n rowStr += fieldsStr.join(',')\n hasFileds = true\n }\n rowStr = rowStr + ' ' + message.date\n rowData.time = message.date // 这里不需要转译\n }\n })\n return {\n rowStr: hasFileds ? rowStr : '',\n rowData: hasFileds ? rowData : undefined\n }\n}\nvar batch = function (\n request,\n flushController,\n messageBytesLimit,\n sendContentTypeByJson\n) {\n this.pushOnlyBuffer = []\n this.upsertBuffer = {}\n this.request = request\n this.flushController = flushController\n this.messageBytesLimit = messageBytesLimit\n this.sendContentTypeByJson = sendContentTypeByJson\n var _this = this\n this.flushController.flushObservable.subscribe(function (event) {\n _this.flush(event)\n })\n}\nbatch.prototype.add = function (message) {\n this.addOrUpdate(message)\n}\nbatch.prototype.upsert = function (message, key) {\n this.addOrUpdate(message, key)\n}\nbatch.prototype.flush = function (event) {\n var messages = this.pushOnlyBuffer.concat(values(this.upsertBuffer))\n this.pushOnlyBuffer = []\n this.upsertBuffer = {}\n if (messages.length > 0) {\n var payloadData = ''\n if (this.sendContentTypeByJson) {\n payloadData = '[' + messages.join(',') + ']'\n } else {\n payloadData = messages.join('\\n')\n }\n var payload = {\n data: payloadData,\n bytesCount: event.bytesCount,\n flushReason: event.reason\n }\n if (isPageExitReason(event.reason)) {\n this.request.sendOnExit(payload)\n } else {\n this.request.send(payload)\n }\n }\n}\n\nbatch.prototype.addOrUpdate = function (message, key) {\n var _process = this.process(message)\n var processedMessage = _process.processedMessage\n var messageBytesCount = _process.messageBytesCount\n if (messageBytesCount >= this.messageBytesLimit) {\n display.warn(\n 'Discarded a message whose size was bigger than the maximum allowed size ' +\n this.messageBytesLimit +\n 'KB.'\n )\n return\n }\n if (this.hasMessageFor(key)) {\n this.remove(key)\n }\n this.push(processedMessage, messageBytesCount, key)\n}\nbatch.prototype.process = function (message) {\n var processedMessage = ''\n if (this.sendContentTypeByJson) {\n processedMessage = jsonStringify(processedMessageByDataMap(message).rowData)\n } else {\n processedMessage = processedMessageByDataMap(message).rowStr\n }\n var messageBytesCount = computeBytesCount(processedMessage)\n return {\n processedMessage: processedMessage,\n messageBytesCount: messageBytesCount\n }\n}\n\nbatch.prototype.push = function (processedMessage, messageBytesCount, key) {\n var separatorBytesCount = this.flushController.getMessagesCount() > 0 ? 1 : 0\n this.flushController.notifyBeforeAddMessage(\n messageBytesCount + separatorBytesCount\n )\n if (key !== undefined) {\n this.upsertBuffer[key] = processedMessage\n } else {\n this.pushOnlyBuffer.push(processedMessage)\n }\n this.flushController.notifyAfterAddMessage()\n}\n\nbatch.prototype.remove = function (key) {\n var removedMessage = this.upsertBuffer[key]\n delete this.upsertBuffer[key]\n var messageBytesCount = computeBytesCount(removedMessage)\n // If there are other messages, a '\\n' will be added at serialization\n var separatorBytesCount = this.flushController.getMessagesCount() > 1 ? 1 : 0\n this.flushController.notifyAfterRemoveMessage(\n messageBytesCount + separatorBytesCount\n )\n}\n\nbatch.prototype.hasMessageFor = function (key) {\n return key !== undefined && this.upsertBuffer[key] !== undefined\n}\nexport var Batch = batch\n"],"mappings":"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"}
@@ -13,10 +13,11 @@ function addBatchPrecision(url) {
13
13
  if (!url) return url;
14
14
  return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms';
15
15
  }
16
- export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
16
+ export function createHttpRequest(endpointUrl, bytesLimit, sendContentTypeByJson, reportError) {
17
+ var contentType = sendContentTypeByJson ? 'application/json; charset=UTF-8' : undefined;
17
18
  var retryState = newRetryState();
18
19
  var sendStrategyForRetry = function sendStrategyForRetry(payload, onResponse) {
19
- return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse);
20
+ return fetchKeepAliveStrategy(endpointUrl, bytesLimit, contentType, payload, onResponse);
20
21
  };
21
22
  return {
22
23
  send: function send(payload) {
@@ -27,18 +28,26 @@ export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
27
28
  * keep using sendBeaconStrategy on exit
28
29
  */
29
30
  sendOnExit: function sendOnExit(payload) {
30
- sendBeaconStrategy(endpointUrl, bytesLimit, payload);
31
+ sendBeaconStrategy(endpointUrl, bytesLimit, contentType, payload);
31
32
  }
32
33
  };
33
34
  }
34
- function sendBeaconStrategy(endpointUrl, bytesLimit, payload) {
35
+ function sendBeaconStrategy(endpointUrl, bytesLimit, contentType, payload) {
35
36
  var data = payload.data;
36
37
  var bytesCount = payload.bytesCount;
37
38
  var url = addBatchPrecision(endpointUrl);
38
39
  var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit;
39
40
  if (canUseBeacon) {
40
41
  try {
41
- var isQueued = navigator.sendBeacon(url, data);
42
+ var beaconData;
43
+ if (contentType) {
44
+ beaconData = new Blob([data], {
45
+ type: contentType
46
+ });
47
+ } else {
48
+ beaconData = data;
49
+ }
50
+ var isQueued = navigator.sendBeacon(url, beaconData);
42
51
  if (isQueued) {
43
52
  return;
44
53
  }
@@ -46,20 +55,26 @@ function sendBeaconStrategy(endpointUrl, bytesLimit, payload) {
46
55
  // reportBeaconError(e)
47
56
  }
48
57
  }
49
- sendXHR(url, data);
58
+ sendXHR(url, contentType, data);
50
59
  }
51
- export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse) {
60
+ export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, contentType, payload, onResponse) {
52
61
  var data = payload.data;
53
62
  var bytesCount = payload.bytesCount;
54
63
  var url = addBatchPrecision(endpointUrl);
55
64
  var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit;
56
65
  if (canUseKeepAlive) {
57
- fetch(url, {
66
+ var fetchOption = {
58
67
  method: 'POST',
59
68
  body: data,
60
69
  keepalive: true,
61
70
  mode: 'cors'
62
- }).then(monitor(function (response) {
71
+ };
72
+ if (contentType) {
73
+ fetchOption.headers = {
74
+ 'Content-Type': contentType
75
+ };
76
+ }
77
+ fetch(url, fetchOption).then(monitor(function (response) {
63
78
  if (typeof onResponse === 'function') {
64
79
  onResponse({
65
80
  status: response.status,
@@ -68,10 +83,10 @@ export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onRespo
68
83
  }
69
84
  }), monitor(function () {
70
85
  // failed to queue the request
71
- sendXHR(url, data, onResponse);
86
+ sendXHR(url, contentType, data, onResponse);
72
87
  }));
73
88
  } else {
74
- sendXHR(url, data, onResponse);
89
+ sendXHR(url, contentType, data, onResponse);
75
90
  }
76
91
  }
77
92
  function isKeepAliveSupported() {
@@ -82,9 +97,13 @@ function isKeepAliveSupported() {
82
97
  return false;
83
98
  }
84
99
  }
85
- function sendXHR(url, data, onResponse) {
100
+ function sendXHR(url, contentType, data, onResponse) {
86
101
  var request = new XMLHttpRequest();
87
102
  request.open('POST', url, true);
103
+ if (contentType) {
104
+ //application/json; charset=UTF-8
105
+ request.setRequestHeader('Content-Type', contentType);
106
+ }
88
107
  addEventListener(request, 'loadend', function () {
89
108
  if (typeof onResponse === 'function') {
90
109
  onResponse({
@@ -1 +1 @@
1
- {"version":3,"file":"httpRequest.js","names":["newRetryState","sendWithRetryStrategy","addEventListener","monitor","addBatchPrecision","url","indexOf","createHttpRequest","endpointUrl","bytesLimit","reportError","retryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","isQueued","e","sendXHR","canUseKeepAlive","isKeepAliveSupported","fetch","method","body","keepalive","mode","then","response","status","type","window","Request","_unused","request","XMLHttpRequest","open","once"],"sources":["../../src/transport/httpRequest.js"],"sourcesContent":["import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\nimport { addEventListener } from '../browser/addEventListener'\nimport { monitor } from '../helper/monitor'\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\nfunction addBatchPrecision(url) {\n if (!url) return url\n return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n}\nexport function createHttpRequest(endpointUrl, bytesLimit, reportError) {\n var retryState = newRetryState()\n var sendStrategyForRetry = function (payload, onResponse) {\n return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse)\n }\n\n return {\n send: function (payload) {\n sendWithRetryStrategy(\n payload,\n retryState,\n sendStrategyForRetry,\n endpointUrl,\n reportError\n )\n },\n /**\n * Since fetch keepalive behaves like regular fetch on Firefox,\n * keep using sendBeaconStrategy on exit\n */\n sendOnExit: function (payload) {\n sendBeaconStrategy(endpointUrl, bytesLimit, payload)\n }\n }\n}\n\nfunction sendBeaconStrategy(endpointUrl, bytesLimit, payload) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit\n if (canUseBeacon) {\n try {\n var isQueued = navigator.sendBeacon(url, data)\n\n if (isQueued) {\n return\n }\n } catch (e) {\n // reportBeaconError(e)\n }\n }\n sendXHR(url, data)\n}\n\nexport function fetchKeepAliveStrategy(\n endpointUrl,\n bytesLimit,\n payload,\n onResponse\n) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit\n if (canUseKeepAlive) {\n fetch(url, {\n method: 'POST',\n body: data,\n keepalive: true,\n mode: 'cors'\n }).then(\n monitor(function (response) {\n if (typeof onResponse === 'function') {\n onResponse({ status: response.status, type: response.type })\n }\n }),\n monitor(function () {\n // failed to queue the request\n sendXHR(url, data, onResponse)\n })\n )\n } else {\n sendXHR(url, data, onResponse)\n }\n}\n\nfunction isKeepAliveSupported() {\n // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n try {\n return window.Request && 'keepalive' in new Request('http://a')\n } catch {\n return false\n }\n}\n\nfunction sendXHR(url, data, onResponse) {\n const request = new XMLHttpRequest()\n request.open('POST', url, true)\n addEventListener(\n request,\n 'loadend',\n function () {\n if (typeof onResponse === 'function') {\n onResponse({ status: request.status })\n }\n },\n {\n once: true\n }\n )\n request.send(data)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"httpRequest.js","names":["newRetryState","sendWithRetryStrategy","addEventListener","monitor","addBatchPrecision","url","indexOf","createHttpRequest","endpointUrl","bytesLimit","sendContentTypeByJson","reportError","contentType","undefined","retryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","beaconData","Blob","type","isQueued","e","sendXHR","canUseKeepAlive","isKeepAliveSupported","fetchOption","method","body","keepalive","mode","headers","fetch","then","response","status","window","Request","_unused","request","XMLHttpRequest","open","setRequestHeader","once"],"sources":["../../src/transport/httpRequest.js"],"sourcesContent":["import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\nimport { addEventListener } from '../browser/addEventListener'\nimport { monitor } from '../helper/monitor'\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\nfunction addBatchPrecision(url) {\n if (!url) return url\n return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n}\nexport function createHttpRequest(\n endpointUrl,\n bytesLimit,\n sendContentTypeByJson,\n reportError\n) {\n var contentType = sendContentTypeByJson\n ? 'application/json; charset=UTF-8'\n : undefined\n var retryState = newRetryState()\n var sendStrategyForRetry = function (payload, onResponse) {\n return fetchKeepAliveStrategy(\n endpointUrl,\n bytesLimit,\n contentType,\n payload,\n onResponse\n )\n }\n\n return {\n send: function (payload) {\n sendWithRetryStrategy(\n payload,\n retryState,\n sendStrategyForRetry,\n endpointUrl,\n reportError\n )\n },\n /**\n * Since fetch keepalive behaves like regular fetch on Firefox,\n * keep using sendBeaconStrategy on exit\n */\n sendOnExit: function (payload) {\n sendBeaconStrategy(endpointUrl, bytesLimit, contentType, payload)\n }\n }\n}\n\nfunction sendBeaconStrategy(endpointUrl, bytesLimit, contentType, payload) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit\n if (canUseBeacon) {\n try {\n var beaconData\n if (contentType) {\n beaconData = new Blob([data], {\n type: contentType\n })\n } else {\n beaconData = data\n }\n\n var isQueued = navigator.sendBeacon(url, beaconData)\n\n if (isQueued) {\n return\n }\n } catch (e) {\n // reportBeaconError(e)\n }\n }\n sendXHR(url, contentType, data)\n}\n\nexport function fetchKeepAliveStrategy(\n endpointUrl,\n bytesLimit,\n contentType,\n payload,\n onResponse\n) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit\n if (canUseKeepAlive) {\n var fetchOption = {\n method: 'POST',\n body: data,\n keepalive: true,\n mode: 'cors'\n }\n if (contentType) {\n fetchOption.headers = {\n 'Content-Type': contentType\n }\n }\n fetch(url, fetchOption).then(\n monitor(function (response) {\n if (typeof onResponse === 'function') {\n onResponse({ status: response.status, type: response.type })\n }\n }),\n monitor(function () {\n // failed to queue the request\n sendXHR(url, contentType, data, onResponse)\n })\n )\n } else {\n sendXHR(url, contentType, data, onResponse)\n }\n}\n\nfunction isKeepAliveSupported() {\n // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n try {\n return window.Request && 'keepalive' in new Request('http://a')\n } catch {\n return false\n }\n}\n\nfunction sendXHR(url, contentType, data, onResponse) {\n const request = new XMLHttpRequest()\n request.open('POST', url, true)\n if (contentType) {\n //application/json; charset=UTF-8\n request.setRequestHeader('Content-Type', contentType)\n }\n\n addEventListener(\n request,\n 'loadend',\n function () {\n if (typeof onResponse === 'function') {\n onResponse({ status: request.status })\n }\n },\n {\n once: true\n }\n )\n request.send(data)\n}\n"],"mappings":"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"}
@@ -4,13 +4,13 @@ import { createFlushController } from './flushController';
4
4
  export function startBatchWithReplica(configuration, endpointUrl, reportError, pageExitObservable, sessionExpireObservable) {
5
5
  var primaryBatch = createBatch(endpointUrl);
6
6
  function createBatch(endpointUrl) {
7
- return new Batch(createHttpRequest(endpointUrl, configuration.batchBytesLimit, reportError), createFlushController({
7
+ return new Batch(createHttpRequest(endpointUrl, configuration.batchBytesLimit, configuration.sendContentTypeByJson, reportError), createFlushController({
8
8
  messagesLimit: configuration.batchMessagesLimit,
9
9
  bytesLimit: configuration.batchBytesLimit,
10
10
  durationLimit: configuration.flushTimeout,
11
11
  pageExitObservable: pageExitObservable,
12
12
  sessionExpireObservable: sessionExpireObservable
13
- }), configuration.messageBytesLimit);
13
+ }), configuration.messageBytesLimit, configuration.sendContentTypeByJson);
14
14
  }
15
15
  return {
16
16
  add: function add(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"startBatchWithReplica.js","names":["Batch","createHttpRequest","createFlushController","startBatchWithReplica","configuration","endpointUrl","reportError","pageExitObservable","sessionExpireObservable","primaryBatch","createBatch","batchBytesLimit","messagesLimit","batchMessagesLimit","bytesLimit","durationLimit","flushTimeout","messageBytesLimit","add","message"],"sources":["../../src/transport/startBatchWithReplica.js"],"sourcesContent":["import { Batch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\nexport function startBatchWithReplica(\n configuration,\n endpointUrl,\n reportError,\n pageExitObservable,\n sessionExpireObservable\n) {\n var primaryBatch = createBatch(endpointUrl)\n\n function createBatch(endpointUrl) {\n return new Batch(\n createHttpRequest(\n endpointUrl,\n configuration.batchBytesLimit,\n reportError\n ),\n createFlushController({\n messagesLimit: configuration.batchMessagesLimit,\n bytesLimit: configuration.batchBytesLimit,\n durationLimit: configuration.flushTimeout,\n pageExitObservable: pageExitObservable,\n sessionExpireObservable: sessionExpireObservable\n }),\n configuration.messageBytesLimit\n )\n }\n\n return {\n add: function (message) {\n primaryBatch.add(message)\n }\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,SAAS;AAC/B,SAASC,iBAAiB,QAAQ,eAAe;AACjD,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,OAAO,SAASC,qBAAqBA,CACnCC,aAAa,EACbC,WAAW,EACXC,WAAW,EACXC,kBAAkB,EAClBC,uBAAuB,EACvB;EACA,IAAIC,YAAY,GAAGC,WAAW,CAACL,WAAW,CAAC;EAE3C,SAASK,WAAWA,CAACL,WAAW,EAAE;IAChC,OAAO,IAAIL,KAAK,CACdC,iBAAiB,CACfI,WAAW,EACXD,aAAa,CAACO,eAAe,EAC7BL,WACF,CAAC,EACDJ,qBAAqB,CAAC;MACpBU,aAAa,EAAER,aAAa,CAACS,kBAAkB;MAC/CC,UAAU,EAAEV,aAAa,CAACO,eAAe;MACzCI,aAAa,EAAEX,aAAa,CAACY,YAAY;MACzCT,kBAAkB,EAAEA,kBAAkB;MACtCC,uBAAuB,EAAEA;IAC3B,CAAC,CAAC,EACFJ,aAAa,CAACa,iBAChB,CAAC;EACH;EAEA,OAAO;IACLC,GAAG,EAAE,SAAAA,IAAUC,OAAO,EAAE;MACtBV,YAAY,CAACS,GAAG,CAACC,OAAO,CAAC;IAC3B;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"startBatchWithReplica.js","names":["Batch","createHttpRequest","createFlushController","startBatchWithReplica","configuration","endpointUrl","reportError","pageExitObservable","sessionExpireObservable","primaryBatch","createBatch","batchBytesLimit","sendContentTypeByJson","messagesLimit","batchMessagesLimit","bytesLimit","durationLimit","flushTimeout","messageBytesLimit","add","message"],"sources":["../../src/transport/startBatchWithReplica.js"],"sourcesContent":["import { Batch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\nexport function startBatchWithReplica(\n configuration,\n endpointUrl,\n reportError,\n pageExitObservable,\n sessionExpireObservable\n) {\n var primaryBatch = createBatch(endpointUrl)\n\n function createBatch(endpointUrl) {\n return new Batch(\n createHttpRequest(\n endpointUrl,\n configuration.batchBytesLimit,\n configuration.sendContentTypeByJson,\n reportError\n ),\n createFlushController({\n messagesLimit: configuration.batchMessagesLimit,\n bytesLimit: configuration.batchBytesLimit,\n durationLimit: configuration.flushTimeout,\n pageExitObservable: pageExitObservable,\n sessionExpireObservable: sessionExpireObservable\n }),\n configuration.messageBytesLimit,\n configuration.sendContentTypeByJson\n )\n }\n\n return {\n add: function (message) {\n primaryBatch.add(message)\n }\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,SAAS;AAC/B,SAASC,iBAAiB,QAAQ,eAAe;AACjD,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,OAAO,SAASC,qBAAqBA,CACnCC,aAAa,EACbC,WAAW,EACXC,WAAW,EACXC,kBAAkB,EAClBC,uBAAuB,EACvB;EACA,IAAIC,YAAY,GAAGC,WAAW,CAACL,WAAW,CAAC;EAE3C,SAASK,WAAWA,CAACL,WAAW,EAAE;IAChC,OAAO,IAAIL,KAAK,CACdC,iBAAiB,CACfI,WAAW,EACXD,aAAa,CAACO,eAAe,EAC7BP,aAAa,CAACQ,qBAAqB,EACnCN,WACF,CAAC,EACDJ,qBAAqB,CAAC;MACpBW,aAAa,EAAET,aAAa,CAACU,kBAAkB;MAC/CC,UAAU,EAAEX,aAAa,CAACO,eAAe;MACzCK,aAAa,EAAEZ,aAAa,CAACa,YAAY;MACzCV,kBAAkB,EAAEA,kBAAkB;MACtCC,uBAAuB,EAAEA;IAC3B,CAAC,CAAC,EACFJ,aAAa,CAACc,iBAAiB,EAC/Bd,aAAa,CAACQ,qBAChB,CAAC;EACH;EAEA,OAAO;IACLO,GAAG,EAAE,SAAAA,IAAUC,OAAO,EAAE;MACtBX,YAAY,CAACU,GAAG,CAACC,OAAO,CAAC;IAC3B;EACF,CAAC;AACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudcare/browser-core",
3
- "version": "3.1.2",
3
+ "version": "3.1.5",
4
4
  "main": "cjs/index.js",
5
5
  "module": "esm/index.js",
6
6
  "scripts": {
@@ -20,5 +20,5 @@
20
20
  "author": "dataflux",
21
21
  "license": "MIT",
22
22
  "description": "DataFlux RUM Web 端数据指标监控",
23
- "gitHead": "76a8647c7e9154baecb6c5e6f0cf8dd76e13d508"
23
+ "gitHead": "6a27086c257b6f058429d4f756077fb533cd2300"
24
24
  }
@@ -1,4 +1,9 @@
1
- import { findCommaSeparatedValue, UUID, ONE_SECOND } from '../helper/tools'
1
+ import {
2
+ findCommaSeparatedValue,
3
+ UUID,
4
+ ONE_SECOND,
5
+ findCommaSeparatedValues
6
+ } from '../helper/tools'
2
7
  export var COOKIE_ACCESS_DELAY = ONE_SECOND
3
8
 
4
9
  export function setCookie(name, value, expireDelay, options) {
@@ -23,7 +28,21 @@ export function setCookie(name, value, expireDelay, options) {
23
28
  export function getCookie(name) {
24
29
  return findCommaSeparatedValue(document.cookie, name)
25
30
  }
31
+ var initCookieParsed
32
+ /**
33
+ * Returns a cached value of the cookie. Use this during SDK initialization (and whenever possible)
34
+ * to avoid accessing document.cookie multiple times.
35
+ */
36
+ export function getInitCookie(name) {
37
+ if (!initCookieParsed) {
38
+ initCookieParsed = findCommaSeparatedValues(document.cookie)
39
+ }
40
+ return initCookieParsed.get(name)
41
+ }
26
42
 
43
+ export function resetInitCookies() {
44
+ initCookieParsed = undefined
45
+ }
27
46
  export function deleteCookie(name, options) {
28
47
  setCookie(name, '', 0, options)
29
48
  }
@@ -35,7 +54,7 @@ export function areCookiesAuthorized(options) {
35
54
  try {
36
55
  // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during
37
56
  // the test cookie lifetime
38
- var testCookieName = `dd_cookie_test_${UUID()}`
57
+ var testCookieName = `gc_cookie_test_${UUID()}`
39
58
  var testCookieValue = 'test'
40
59
  setCookie(testCookieName, testCookieValue, ONE_SECOND, options)
41
60
  return getCookie(testCookieName) === testCookieValue
@@ -54,7 +73,7 @@ export function getCurrentSite() {
54
73
  if (getCurrentSiteCache === undefined) {
55
74
  // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during
56
75
  // the test cookie lifetime
57
- var testCookieName = `dd_site_test_${UUID()}`
76
+ var testCookieName = `gc_site_test_${UUID()}`
58
77
  var testCookieValue = 'test'
59
78
 
60
79
  var domainLevels = window.location.hostname.split('.')
@@ -22,7 +22,9 @@ export function isNodeShadowRoot(node) {
22
22
  isElementNode(shadowRoot.host)
23
23
  )
24
24
  }
25
-
25
+ export function hasChildNodes(node) {
26
+ return node.childNodes.length > 0 || isNodeShadowHost(node)
27
+ }
26
28
  // export function getChildNodes(node) {
27
29
  // return isNodeShadowHost(node) ? node.shadowRoot.childNodes : node.childNodes
28
30
  // }
@@ -83,12 +83,39 @@ export function validateAndBuildConfiguration(initConfiguration) {
83
83
  batchMessagesLimit: 50,
84
84
  messageBytesLimit: 256 * ONE_KIBI_BYTE,
85
85
  resourceUrlLimit: 5 * ONE_KIBI_BYTE,
86
- storeContextsToLocal: !!initConfiguration.storeContextsToLocal
86
+ storeContextsToLocal: !!initConfiguration.storeContextsToLocal,
87
+ sendContentTypeByJson: !!initConfiguration.sendContentTypeByJson
87
88
  },
88
89
  computeTransportConfiguration(initConfiguration)
89
90
  )
90
91
  }
91
-
92
+ export function validatePostRequestRequireParamsConfiguration(
93
+ initConfiguration
94
+ ) {
95
+ if (
96
+ !initConfiguration.site &&
97
+ !initConfiguration.datakitOrigin &&
98
+ !initConfiguration.datakitUrl
99
+ ) {
100
+ display.error(
101
+ 'datakitOrigin or site is not configured, no RUM data will be collected.'
102
+ )
103
+ return false
104
+ }
105
+ // if (!initConfiguration.datakitUrl && !initConfiguration.datakitOrigin) {
106
+ // display.error(
107
+ // 'datakitOrigin is not configured, no RUM data will be collected.'
108
+ // )
109
+ // return false
110
+ // }
111
+ if (initConfiguration.site && !initConfiguration.clientToken) {
112
+ display.error(
113
+ 'clientToken is not configured, no RUM data will be collected.'
114
+ )
115
+ return false
116
+ }
117
+ return true
118
+ }
92
119
  export function buildCookieOptions(initConfiguration) {
93
120
  var cookieOptions = {}
94
121
 
@@ -5,17 +5,29 @@ var typeMap = {
5
5
  log: '/logging',
6
6
  sessionReplay: '/rum/replay'
7
7
  }
8
- function getEndPointUrl(url, type) {
8
+ function getEndPointUrl(configuration, type) {
9
9
  // type: rum, log,replay
10
10
  var subUrl = typeMap[type]
11
11
  if (!subUrl) return ''
12
+ var url =
13
+ configuration.datakitOrigin ||
14
+ configuration.datakitUrl ||
15
+ configuration.site
12
16
  if (url.indexOf('/') === 0) {
13
17
  // 绝对路径这种 /xxx
14
18
  url = location.origin + trim(url)
15
19
  }
16
- if (url.lastIndexOf('/') === url.length - 1)
17
- return trim(url) + 'v1/write' + subUrl
18
- return trim(url) + '/v1/write' + subUrl
20
+ var endpoint = url
21
+ if (url.lastIndexOf('/') === url.length - 1) {
22
+ endpoint = trim(url) + 'v1/write' + subUrl
23
+ } else {
24
+ endpoint = trim(url) + '/v1/write' + subUrl
25
+ }
26
+ if (configuration.site && configuration.clientToken) {
27
+ endpoint =
28
+ endpoint + '?token=' + configuration.clientToken + '&to_headless=true'
29
+ }
30
+ return endpoint
19
31
  }
20
32
 
21
33
  function trim(str) {
@@ -44,15 +56,9 @@ export function computeTransportConfiguration(initConfiguration) {
44
56
  isServerError = initConfiguration.isServerError
45
57
  }
46
58
  return {
47
- rumEndpoint: getEndPointUrl(
48
- initConfiguration.datakitUrl || initConfiguration.datakitOrigin,
49
- 'rum'
50
- ),
51
- logsEndpoint: getEndPointUrl(initConfiguration.datakitOrigin, 'log'),
52
- sessionReplayEndPoint: getEndPointUrl(
53
- initConfiguration.datakitOrigin,
54
- 'sessionReplay'
55
- ),
59
+ rumEndpoint: getEndPointUrl(initConfiguration, 'rum'),
60
+ logsEndpoint: getEndPointUrl(initConfiguration, 'log'),
61
+ sessionReplayEndPoint: getEndPointUrl(initConfiguration, 'sessionReplay'),
56
62
  isIntakeUrl: isIntakeUrl,
57
63
  isServerError: isServerError
58
64
  }
package/src/dataMap.js CHANGED
@@ -12,7 +12,6 @@ export var commonTags = {
12
12
  session_id: 'session.id',
13
13
  session_type: 'session.type',
14
14
  session_sampling: 'session.is_sampling',
15
- session_has_replay: 'session.has_replay',
16
15
  is_signin: 'user.is_signin',
17
16
  os: 'device.os',
18
17
  os_version: 'device.os_version',
@@ -36,7 +35,10 @@ export var commonFields = {
36
35
  action_id: 'action.id',
37
36
  action_ids: 'action.ids',
38
37
  view_in_foreground: 'view.in_foreground',
39
- display: 'display'
38
+ display: 'display',
39
+ session_has_replay: 'session.has_replay',
40
+ is_login: 'user.is_login',
41
+ page_states: '_gc.page_states'
40
42
  }
41
43
  // 需要用双引号将字符串类型的field value括起来, 这里有数组标示[string, path]
42
44
  export var dataMap = {
@@ -60,6 +62,8 @@ export var dataMap = {
60
62
  largest_contentful_paint_element_selector:
61
63
  'view.largest_contentful_paint_element_selector',
62
64
  cumulative_layout_shift: 'view.cumulative_layout_shift',
65
+ cumulative_layout_shift_target_selector:
66
+ 'view.cumulative_layout_shift_target_selector',
63
67
  first_input_delay: 'view.first_input_delay',
64
68
  loading_time: 'view.loading_time',
65
69
  dom_interactive: 'view.dom_interactive',
@@ -67,15 +71,17 @@ export var dataMap = {
67
71
  dom_complete: 'view.dom_complete',
68
72
  load_event: 'view.load_event',
69
73
  first_input_time: 'view.first_input_time',
74
+ first_input_target_selector: 'view.first_input_target_selector',
70
75
  first_paint_time: 'view.fpt',
71
76
  interaction_to_next_paint: 'view.interaction_to_next_paint',
77
+ interaction_to_next_paint_target_selector:
78
+ 'view.interaction_to_next_paint_target_selector',
72
79
  resource_load_time: 'view.resource_load_time',
73
80
  time_to_interactive: 'view.tti',
74
81
  dom: 'view.dom',
75
82
  dom_ready: 'view.dom_ready',
76
83
  time_spent: 'view.time_spent',
77
84
  first_byte: 'view.first_byte',
78
- page_states: '_gc.page_states',
79
85
  frustration_count: 'view.frustration.count',
80
86
  custom_timings: 'view.custom_timings'
81
87
  }