@cloudcare/browser-core 3.1.24 → 3.2.3

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 (115) hide show
  1. package/cjs/browser/pageExitObservable.js +1 -1
  2. package/cjs/browser/pageExitObservable.js.map +1 -1
  3. package/cjs/console/consoleObservable.js +17 -9
  4. package/cjs/console/consoleObservable.js.map +1 -1
  5. package/cjs/dataMap.js +11 -2
  6. package/cjs/dataMap.js.map +1 -1
  7. package/cjs/helper/boundedBuffer.js +21 -17
  8. package/cjs/helper/boundedBuffer.js.map +1 -1
  9. package/cjs/helper/byteUtils.js +4 -15
  10. package/cjs/helper/byteUtils.js.map +1 -1
  11. package/cjs/helper/connectivity.js +16 -0
  12. package/cjs/helper/connectivity.js.map +1 -0
  13. package/cjs/helper/display.js +15 -12
  14. package/cjs/helper/display.js.map +1 -1
  15. package/cjs/helper/displayAlreadyInitializedError.js +13 -0
  16. package/cjs/helper/displayAlreadyInitializedError.js.map +1 -0
  17. package/cjs/helper/encoder.js +43 -0
  18. package/cjs/helper/encoder.js.map +1 -0
  19. package/cjs/helper/lifeCycle.js +0 -1
  20. package/cjs/helper/lifeCycle.js.map +1 -1
  21. package/cjs/helper/limitModification.js +5 -16
  22. package/cjs/helper/limitModification.js.map +1 -1
  23. package/cjs/helper/monitor.js +6 -6
  24. package/cjs/helper/monitor.js.map +1 -1
  25. package/cjs/helper/serialisation/jsonStringify.js.map +1 -1
  26. package/cjs/helper/valueHistory.js +6 -17
  27. package/cjs/helper/valueHistory.js.map +1 -1
  28. package/cjs/index.js +33 -0
  29. package/cjs/index.js.map +1 -1
  30. package/cjs/report/reportObservable.js +26 -20
  31. package/cjs/report/reportObservable.js.map +1 -1
  32. package/cjs/telemetry/telemetry.js +60 -31
  33. package/cjs/telemetry/telemetry.js.map +1 -1
  34. package/cjs/telemetry/types.js +2 -1
  35. package/cjs/telemetry/types.js.map +1 -1
  36. package/cjs/transport/batch.js +129 -79
  37. package/cjs/transport/batch.js.map +1 -1
  38. package/cjs/transport/flushController.js +18 -5
  39. package/cjs/transport/flushController.js.map +1 -1
  40. package/cjs/transport/httpRequest.js +35 -22
  41. package/cjs/transport/httpRequest.js.map +1 -1
  42. package/cjs/transport/index.js +4 -4
  43. package/cjs/transport/index.js.map +1 -1
  44. package/cjs/transport/startBatchWithReplica.js +26 -10
  45. package/cjs/transport/startBatchWithReplica.js.map +1 -1
  46. package/esm/browser/pageExitObservable.js +1 -1
  47. package/esm/browser/pageExitObservable.js.map +1 -1
  48. package/esm/console/consoleObservable.js +18 -10
  49. package/esm/console/consoleObservable.js.map +1 -1
  50. package/esm/dataMap.js +11 -2
  51. package/esm/dataMap.js.map +1 -1
  52. package/esm/helper/boundedBuffer.js +21 -16
  53. package/esm/helper/boundedBuffer.js.map +1 -1
  54. package/esm/helper/byteUtils.js +4 -15
  55. package/esm/helper/byteUtils.js.map +1 -1
  56. package/esm/helper/connectivity.js +10 -0
  57. package/esm/helper/connectivity.js.map +1 -0
  58. package/esm/helper/display.js +12 -11
  59. package/esm/helper/display.js.map +1 -1
  60. package/esm/helper/displayAlreadyInitializedError.js +7 -0
  61. package/esm/helper/displayAlreadyInitializedError.js.map +1 -0
  62. package/esm/helper/encoder.js +37 -0
  63. package/esm/helper/encoder.js.map +1 -0
  64. package/esm/helper/lifeCycle.js +0 -1
  65. package/esm/helper/lifeCycle.js.map +1 -1
  66. package/esm/helper/limitModification.js +5 -16
  67. package/esm/helper/limitModification.js.map +1 -1
  68. package/esm/helper/monitor.js +6 -6
  69. package/esm/helper/monitor.js.map +1 -1
  70. package/esm/helper/serialisation/jsonStringify.js.map +1 -1
  71. package/esm/helper/valueHistory.js +6 -17
  72. package/esm/helper/valueHistory.js.map +1 -1
  73. package/esm/index.js +3 -0
  74. package/esm/index.js.map +1 -1
  75. package/esm/report/reportObservable.js +27 -21
  76. package/esm/report/reportObservable.js.map +1 -1
  77. package/esm/telemetry/telemetry.js +57 -31
  78. package/esm/telemetry/telemetry.js.map +1 -1
  79. package/esm/telemetry/types.js +2 -1
  80. package/esm/telemetry/types.js.map +1 -1
  81. package/esm/transport/batch.js +127 -77
  82. package/esm/transport/batch.js.map +1 -1
  83. package/esm/transport/flushController.js +18 -5
  84. package/esm/transport/flushController.js.map +1 -1
  85. package/esm/transport/httpRequest.js +35 -22
  86. package/esm/transport/httpRequest.js.map +1 -1
  87. package/esm/transport/index.js +1 -1
  88. package/esm/transport/index.js.map +1 -1
  89. package/esm/transport/startBatchWithReplica.js +27 -11
  90. package/esm/transport/startBatchWithReplica.js.map +1 -1
  91. package/package.json +2 -2
  92. package/src/browser/pageExitObservable.js +2 -2
  93. package/src/console/consoleObservable.js +22 -14
  94. package/src/dataMap.js +11 -2
  95. package/src/helper/boundedBuffer.js +21 -14
  96. package/src/helper/byteUtils.js +2 -1
  97. package/src/helper/connectivity.js +11 -0
  98. package/src/helper/display.js +16 -14
  99. package/src/helper/displayAlreadyInitializedError.js +7 -0
  100. package/src/helper/encoder.js +43 -0
  101. package/src/helper/lifeCycle.js +0 -1
  102. package/src/helper/limitModification.js +2 -1
  103. package/src/helper/monitor.js +6 -6
  104. package/src/helper/serialisation/jsonStringify.js +1 -1
  105. package/src/helper/valueHistory.js +2 -1
  106. package/src/index.js +3 -0
  107. package/src/report/reportObservable.js +43 -27
  108. package/src/telemetry/telemetry.js +60 -37
  109. package/src/telemetry/types.js +2 -1
  110. package/src/transport/batch.js +154 -89
  111. package/src/transport/flushController.js +19 -6
  112. package/src/transport/httpRequest.js +34 -35
  113. package/src/transport/index.js +1 -1
  114. package/src/transport/startBatchWithReplica.js +25 -14
  115. package/types/index.d.ts +12 -0
@@ -1 +1 @@
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":"AAAA,SAASA,aAAa,EAAEC,qBAAqB,QAAQ,yBAAyB;AAC9E,SAASC,gBAAgB,QAAQ,6BAA6B;AAC9D,SAASC,OAAO,QAAQ,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAACC,GAAG,EAAE;EAC9B,IAAI,CAACA,GAAG,EAAE,OAAOA,GAAG;EACpB,OAAOA,GAAG,IAAIA,GAAG,CAACC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,cAAc;AACrE;AACA,OAAO,SAASC,iBAAiBA,CAC/BC,WAAW,EACXC,UAAU,EACVC,qBAAqB,EACrBC,WAAW,EACX;EACA,IAAIC,WAAW,GAAGF,qBAAqB,GACnC,iCAAiC,GACjCG,SAAS;EACb,IAAIC,UAAU,GAAGd,aAAa,CAAC,CAAC;EAChC,IAAIe,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAaC,OAAO,EAAEC,UAAU,EAAE;IACxD,OAAOC,sBAAsB,CAC3BV,WAAW,EACXC,UAAU,EACVG,WAAW,EACXI,OAAO,EACPC,UACF,CAAC;EACH,CAAC;EAED,OAAO;IACLE,IAAI,EAAE,SAAAA,KAAUH,OAAO,EAAE;MACvBf,qBAAqB,CACnBe,OAAO,EACPF,UAAU,EACVC,oBAAoB,EACpBP,WAAW,EACXG,WACF,CAAC;IACH,CAAC;IACD;AACJ;AACA;AACA;IACIS,UAAU,EAAE,SAAAA,WAAUJ,OAAO,EAAE;MAC7BK,kBAAkB,CAACb,WAAW,EAAEC,UAAU,EAAEG,WAAW,EAAEI,OAAO,CAAC;IACnE;EACF,CAAC;AACH;AAEA,SAASK,kBAAkBA,CAACb,WAAW,EAAEC,UAAU,EAAEG,WAAW,EAAEI,OAAO,EAAE;EACzE,IAAIM,IAAI,GAAGN,OAAO,CAACM,IAAI;EACvB,IAAIC,UAAU,GAAGP,OAAO,CAACO,UAAU;EACnC,IAAIlB,GAAG,GAAGD,iBAAiB,CAACI,WAAW,CAAC;EACxC,IAAIgB,YAAY,GAAG,CAAC,CAACC,SAAS,CAACC,UAAU,IAAIH,UAAU,GAAGd,UAAU;EACpE,IAAIe,YAAY,EAAE;IAChB,IAAI;MACF,IAAIG,UAAU;MACd,IAAIf,WAAW,EAAE;QACfe,UAAU,GAAG,IAAIC,IAAI,CAAC,CAACN,IAAI,CAAC,EAAE;UAC5BO,IAAI,EAAEjB;QACR,CAAC,CAAC;MACJ,CAAC,MAAM;QACLe,UAAU,GAAGL,IAAI;MACnB;MAEA,IAAIQ,QAAQ,GAAGL,SAAS,CAACC,UAAU,CAACrB,GAAG,EAAEsB,UAAU,CAAC;MAEpD,IAAIG,QAAQ,EAAE;QACZ;MACF;IACF,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV;IAAA;EAEJ;EACAC,OAAO,CAAC3B,GAAG,EAAEO,WAAW,EAAEU,IAAI,CAAC;AACjC;AAEA,OAAO,SAASJ,sBAAsBA,CACpCV,WAAW,EACXC,UAAU,EACVG,WAAW,EACXI,OAAO,EACPC,UAAU,EACV;EACA,IAAIK,IAAI,GAAGN,OAAO,CAACM,IAAI;EACvB,IAAIC,UAAU,GAAGP,OAAO,CAACO,UAAU;EACnC,IAAIlB,GAAG,GAAGD,iBAAiB,CAACI,WAAW,CAAC;EACxC,IAAIyB,eAAe,GAAGC,oBAAoB,CAAC,CAAC,IAAIX,UAAU,GAAGd,UAAU;EACvE,IAAIwB,eAAe,EAAE;IACnB,IAAIE,WAAW,GAAG;MAChBC,MAAM,EAAE,MAAM;MACdC,IAAI,EAAEf,IAAI;MACVgB,SAAS,EAAE,IAAI;MACfC,IAAI,EAAE;IACR,CAAC;IACD,IAAI3B,WAAW,EAAE;MACfuB,WAAW,CAACK,OAAO,GAAG;QACpB,cAAc,EAAE5B;MAClB,CAAC;IACH;IACA6B,KAAK,CAACpC,GAAG,EAAE8B,WAAW,CAAC,CAACO,IAAI,CAC1BvC,OAAO,CAAC,UAAUwC,QAAQ,EAAE;MAC1B,IAAI,OAAO1B,UAAU,KAAK,UAAU,EAAE;QACpCA,UAAU,CAAC;UAAE2B,MAAM,EAAED,QAAQ,CAACC,MAAM;UAAEf,IAAI,EAAEc,QAAQ,CAACd;QAAK,CAAC,CAAC;MAC9D;IACF,CAAC,CAAC,EACF1B,OAAO,CAAC,YAAY;MAClB;MACA6B,OAAO,CAAC3B,GAAG,EAAEO,WAAW,EAAEU,IAAI,EAAEL,UAAU,CAAC;IAC7C,CAAC,CACH,CAAC;EACH,CAAC,MAAM;IACLe,OAAO,CAAC3B,GAAG,EAAEO,WAAW,EAAEU,IAAI,EAAEL,UAAU,CAAC;EAC7C;AACF;AAEA,SAASiB,oBAAoBA,CAAA,EAAG;EAC9B;EACA,IAAI;IACF,OAAOW,MAAM,CAACC,OAAO,IAAI,WAAW,IAAI,IAAIA,OAAO,CAAC,UAAU,CAAC;EACjE,CAAC,CAAC,OAAAC,OAAA,EAAM;IACN,OAAO,KAAK;EACd;AACF;AAEA,SAASf,OAAOA,CAAC3B,GAAG,EAAEO,WAAW,EAAEU,IAAI,EAAEL,UAAU,EAAE;EACnD,IAAM+B,OAAO,GAAG,IAAIC,cAAc,CAAC,CAAC;EACpCD,OAAO,CAACE,IAAI,CAAC,MAAM,EAAE7C,GAAG,EAAE,IAAI,CAAC;EAC/B,IAAIO,WAAW,EAAE;IACf;IACAoC,OAAO,CAACG,gBAAgB,CAAC,cAAc,EAAEvC,WAAW,CAAC;EACvD;EAEAV,gBAAgB,CACd8C,OAAO,EACP,SAAS,EACT,YAAY;IACV,IAAI,OAAO/B,UAAU,KAAK,UAAU,EAAE;MACpCA,UAAU,CAAC;QAAE2B,MAAM,EAAEI,OAAO,CAACJ;MAAO,CAAC,CAAC;IACxC;EACF,CAAC,EACD;IACEQ,IAAI,EAAE;EACR,CACF,CAAC;EACDJ,OAAO,CAAC7B,IAAI,CAACG,IAAI,CAAC;AACpB","ignoreList":[]}
1
+ {"version":3,"file":"httpRequest.js","names":["newRetryState","sendWithRetryStrategy","addEventListener","monitor","addTelemetryError","addBatchPrecision","url","encoding","indexOf","createHttpRequest","endpointUrl","bytesLimit","reportError","retryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","beaconData","type","Blob","isQueued","e","reportBeaconError","sendXHR","hasReportedBeaconError","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'\nimport { addTelemetryError } from '../telemetry/telemetry'\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, encoding) {\n if (!url) return url\n url = url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n if (encoding) {\n url = url + '&encoding=' + encoding\n }\n return url\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, payload.encoding)\n var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit\n if (canUseBeacon) {\n try {\n var beaconData\n if (payload.type) {\n beaconData = new Blob([data], {\n type: payload.type\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, payload)\n}\nvar hasReportedBeaconError = false\n\nfunction reportBeaconError(e) {\n if (!hasReportedBeaconError) {\n hasReportedBeaconError = true\n addTelemetryError(e)\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, payload.encoding)\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 (payload.type) {\n fetchOption.headers = {\n 'Content-Type': payload.type\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, payload, onResponse)\n })\n )\n } else {\n sendXHR(url, payload, 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, payload, onResponse) {\n const data = payload.data\n const request = new XMLHttpRequest()\n request.open('POST', url, true)\n if (data instanceof Blob) {\n request.setRequestHeader('Content-Type', data.type)\n } else if (payload.type) {\n request.setRequestHeader('Content-Type', payload.type)\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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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  export { createHttpRequest } from './httpRequest';
2
- export { Batch, processedMessageByDataMap } from './batch';
2
+ export { createBatch, processedMessageByDataMap } from './batch';
3
3
  export { startBatchWithReplica } from './startBatchWithReplica';
4
4
  export { createFlushController } from './flushController';
5
5
  export { getEventBridge, canUseEventBridge } from './eventBridge';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["createHttpRequest","Batch","processedMessageByDataMap","startBatchWithReplica","createFlushController","getEventBridge","canUseEventBridge"],"sources":["../../src/transport/index.js"],"sourcesContent":["export { createHttpRequest } from './httpRequest'\nexport { Batch, processedMessageByDataMap } from './batch'\nexport { startBatchWithReplica } from './startBatchWithReplica'\nexport { createFlushController } from './flushController'\nexport { getEventBridge, canUseEventBridge } from './eventBridge'\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,eAAe;AACjD,SAASC,KAAK,EAAEC,yBAAyB,QAAQ,SAAS;AAC1D,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,eAAe","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["createHttpRequest","createBatch","processedMessageByDataMap","startBatchWithReplica","createFlushController","getEventBridge","canUseEventBridge"],"sources":["../../src/transport/index.js"],"sourcesContent":["export { createHttpRequest } from './httpRequest'\nexport { createBatch, processedMessageByDataMap } from './batch'\nexport { startBatchWithReplica } from './startBatchWithReplica'\nexport { createFlushController } from './flushController'\nexport { getEventBridge, canUseEventBridge } from './eventBridge'\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,eAAe;AACjD,SAASC,WAAW,EAAEC,yBAAyB,QAAQ,SAAS;AAChE,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,eAAe","ignoreList":[]}
@@ -1,20 +1,36 @@
1
- import { Batch } from './batch';
1
+ import { createBatch } from './batch';
2
2
  import { createHttpRequest } from './httpRequest';
3
3
  import { createFlushController } from './flushController';
4
- export function startBatchWithReplica(configuration, endpointUrl, reportError, pageExitObservable, sessionExpireObservable) {
5
- var primaryBatch = createBatch(endpointUrl);
6
- function createBatch(endpointUrl) {
7
- return new Batch(createHttpRequest(endpointUrl, configuration.batchBytesLimit, configuration.sendContentTypeByJson, reportError), createFlushController({
8
- messagesLimit: configuration.batchMessagesLimit,
9
- bytesLimit: configuration.batchBytesLimit,
10
- durationLimit: configuration.flushTimeout,
11
- pageExitObservable: pageExitObservable,
12
- sessionExpireObservable: sessionExpireObservable
13
- }), configuration.messageBytesLimit, configuration.sendContentTypeByJson);
4
+ export function startBatchWithReplica(configuration, primary, reportError, pageExitObservable, sessionExpireObservable, batchFactoryImp) {
5
+ if (batchFactoryImp === undefined) {
6
+ batchFactoryImp = createBatch;
7
+ }
8
+ var primaryBatch = createBatchFromConfig(configuration, primary);
9
+ function createBatchFromConfig(configuration, batchConfiguration) {
10
+ return batchFactoryImp({
11
+ encoder: batchConfiguration.encoder,
12
+ request: createHttpRequest(batchConfiguration.endpoint, configuration.batchBytesLimit, reportError),
13
+ flushController: createFlushController({
14
+ messagesLimit: configuration.batchMessagesLimit,
15
+ bytesLimit: configuration.batchBytesLimit,
16
+ durationLimit: configuration.flushTimeout,
17
+ pageExitObservable: pageExitObservable,
18
+ sessionExpireObservable: sessionExpireObservable
19
+ }),
20
+ messageBytesLimit: configuration.messageBytesLimit,
21
+ sendContentTypeByJson: configuration.sendContentTypeByJson
22
+ });
14
23
  }
15
24
  return {
25
+ flushObservable: primaryBatch.flushController.flushObservable,
16
26
  add: function add(message) {
17
27
  primaryBatch.add(message);
28
+ },
29
+ upsert: function upsert(message, key) {
30
+ primaryBatch.upsert(message, key);
31
+ },
32
+ stop: function stop() {
33
+ primaryBatch.stop();
18
34
  }
19
35
  };
20
36
  }
@@ -1 +1 @@
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","ignoreList":[]}
1
+ {"version":3,"file":"startBatchWithReplica.js","names":["createBatch","createHttpRequest","createFlushController","startBatchWithReplica","configuration","primary","reportError","pageExitObservable","sessionExpireObservable","batchFactoryImp","undefined","primaryBatch","createBatchFromConfig","batchConfiguration","encoder","request","endpoint","batchBytesLimit","flushController","messagesLimit","batchMessagesLimit","bytesLimit","durationLimit","flushTimeout","messageBytesLimit","sendContentTypeByJson","flushObservable","add","message","upsert","key","stop"],"sources":["../../src/transport/startBatchWithReplica.js"],"sourcesContent":["import { createBatch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\nexport function startBatchWithReplica(\n configuration,\n primary,\n reportError,\n pageExitObservable,\n sessionExpireObservable,\n batchFactoryImp\n) {\n if (batchFactoryImp === undefined) {\n batchFactoryImp = createBatch\n }\n var primaryBatch = createBatchFromConfig(configuration, primary)\n\n function createBatchFromConfig(configuration, batchConfiguration) {\n return batchFactoryImp({\n encoder: batchConfiguration.encoder,\n request: createHttpRequest(\n batchConfiguration.endpoint,\n configuration.batchBytesLimit,\n reportError\n ),\n flushController: createFlushController({\n messagesLimit: configuration.batchMessagesLimit,\n bytesLimit: configuration.batchBytesLimit,\n durationLimit: configuration.flushTimeout,\n pageExitObservable: pageExitObservable,\n sessionExpireObservable: sessionExpireObservable\n }),\n messageBytesLimit: configuration.messageBytesLimit,\n sendContentTypeByJson: configuration.sendContentTypeByJson\n })\n }\n return {\n flushObservable: primaryBatch.flushController.flushObservable,\n add: function (message) {\n primaryBatch.add(message)\n },\n upsert: function (message, key) {\n primaryBatch.upsert(message, key)\n },\n\n stop: function () {\n primaryBatch.stop()\n }\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,SAAS;AACrC,SAASC,iBAAiB,QAAQ,eAAe;AACjD,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,OAAO,SAASC,qBAAqBA,CACnCC,aAAa,EACbC,OAAO,EACPC,WAAW,EACXC,kBAAkB,EAClBC,uBAAuB,EACvBC,eAAe,EACf;EACA,IAAIA,eAAe,KAAKC,SAAS,EAAE;IACjCD,eAAe,GAAGT,WAAW;EAC/B;EACA,IAAIW,YAAY,GAAGC,qBAAqB,CAACR,aAAa,EAAEC,OAAO,CAAC;EAEhE,SAASO,qBAAqBA,CAACR,aAAa,EAAES,kBAAkB,EAAE;IAChE,OAAOJ,eAAe,CAAC;MACrBK,OAAO,EAAED,kBAAkB,CAACC,OAAO;MACnCC,OAAO,EAAEd,iBAAiB,CACxBY,kBAAkB,CAACG,QAAQ,EAC3BZ,aAAa,CAACa,eAAe,EAC7BX,WACF,CAAC;MACDY,eAAe,EAAEhB,qBAAqB,CAAC;QACrCiB,aAAa,EAAEf,aAAa,CAACgB,kBAAkB;QAC/CC,UAAU,EAAEjB,aAAa,CAACa,eAAe;QACzCK,aAAa,EAAElB,aAAa,CAACmB,YAAY;QACzChB,kBAAkB,EAAEA,kBAAkB;QACtCC,uBAAuB,EAAEA;MAC3B,CAAC,CAAC;MACFgB,iBAAiB,EAAEpB,aAAa,CAACoB,iBAAiB;MAClDC,qBAAqB,EAAErB,aAAa,CAACqB;IACvC,CAAC,CAAC;EACJ;EACA,OAAO;IACLC,eAAe,EAAEf,YAAY,CAACO,eAAe,CAACQ,eAAe;IAC7DC,GAAG,EAAE,SAAAA,IAAUC,OAAO,EAAE;MACtBjB,YAAY,CAACgB,GAAG,CAACC,OAAO,CAAC;IAC3B,CAAC;IACDC,MAAM,EAAE,SAAAA,OAAUD,OAAO,EAAEE,GAAG,EAAE;MAC9BnB,YAAY,CAACkB,MAAM,CAACD,OAAO,EAAEE,GAAG,CAAC;IACnC,CAAC;IAEDC,IAAI,EAAE,SAAAA,KAAA,EAAY;MAChBpB,YAAY,CAACoB,IAAI,CAAC,CAAC;IACrB;EACF,CAAC;AACH","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudcare/browser-core",
3
- "version": "3.1.24",
3
+ "version": "3.2.3",
4
4
  "main": "cjs/index.js",
5
5
  "module": "esm/index.js",
6
6
  "types": "types/index.d.ts",
@@ -22,5 +22,5 @@
22
22
  "author": "dataflux",
23
23
  "license": "MIT",
24
24
  "description": "DataFlux RUM Web 端数据指标监控",
25
- "gitHead": "dbe15a5e4b88ca3316b9a5c5e704023ffd5f374d"
25
+ "gitHead": "ba2b5d69d7f4a4d2be0d7d0718d0753e99e16ddb"
26
26
  }
@@ -19,8 +19,8 @@ export function createPageExitObservable() {
19
19
  * (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded.
20
20
  */
21
21
  var visibilityChangeListener = addEventListeners(
22
- document,
23
- [DOM_EVENT.VISIBILITY_CHANGE, DOM_EVENT.FREEZE, DOM_EVENT.PAGE_HIDE],
22
+ window,
23
+ [DOM_EVENT.VISIBILITY_CHANGE, DOM_EVENT.FREEZE],
24
24
  function (event) {
25
25
  if (
26
26
  event.type === DOM_EVENT.VISIBILITY_CHANGE &&
@@ -6,10 +6,12 @@ import {
6
6
  flattenErrorCauses
7
7
  } from '../helper/errorTools'
8
8
  import { mergeObservables, Observable } from '../helper/observable'
9
- import { find, map } from '../helper/tools'
9
+ import { find, map, clocksNow } from '../helper/tools'
10
10
  import { jsonStringify } from '../helper/serialisation/jsonStringify'
11
11
  import { ConsoleApiName } from '../helper/display'
12
12
  import { callMonitored } from '../helper/monitor'
13
+ import { ErrorHandling } from '../helper/enums'
14
+ import { ErrorSource } from '../helper/errorTools'
13
15
  var consoleObservablesByApi = {}
14
16
 
15
17
  export function initConsoleObservable(apis) {
@@ -22,7 +24,9 @@ export function initConsoleObservable(apis) {
22
24
 
23
25
  return mergeObservables.apply(this, consoleObservables)
24
26
  }
25
-
27
+ export function resetConsoleObservable() {
28
+ consoleObservablesByApi = {}
29
+ }
26
30
  /* eslint-disable no-console */
27
31
  function createConsoleObservable(api) {
28
32
  return new Observable(function (observable) {
@@ -45,27 +49,31 @@ function buildConsoleLog(params, api, handlingStack) {
45
49
  var message = map(params, function (param) {
46
50
  return formatConsoleParameters(param)
47
51
  }).join(' ')
48
- var stack
49
- var causes
52
+ var error
50
53
  if (api === ConsoleApiName.error) {
51
54
  var firstErrorParam = find(params, function (param) {
52
55
  return param instanceof Error
53
56
  })
54
- stack = firstErrorParam
55
- ? toStackTraceString(computeStackTrace(firstErrorParam))
56
- : undefined
57
- message = 'console error: ' + message
58
- causes = firstErrorParam
59
- ? flattenErrorCauses(firstErrorParam, 'console')
60
- : undefined
57
+ error = {
58
+ stack: firstErrorParam
59
+ ? toStackTraceString(computeStackTrace(firstErrorParam))
60
+ : undefined,
61
+ causes: firstErrorParam
62
+ ? flattenErrorCauses(firstErrorParam, 'console')
63
+ : undefined,
64
+ startClocks: clocksNow(),
65
+ message: message,
66
+ source: ErrorSource.CONSOLE,
67
+ handling: ErrorHandling.HANDLED,
68
+ handlingStack: handlingStack
69
+ }
61
70
  }
62
71
 
63
72
  return {
64
73
  api: api,
65
74
  message: message,
66
- stack: stack,
67
- handlingStack: handlingStack,
68
- causes: causes
75
+ error: error,
76
+ handlingStack: handlingStack
69
77
  }
70
78
  }
71
79
 
package/src/dataMap.js CHANGED
@@ -97,6 +97,7 @@ export var dataMap = {
97
97
  tags: {
98
98
  trace_id: '_gc.trace_id',
99
99
  span_id: '_gc.span_id',
100
+ resource_id: 'resource.id',
100
101
  resource_url: 'resource.url',
101
102
  resource_url_host: 'resource.url_host',
102
103
  resource_url_path: 'resource.url_path',
@@ -159,7 +160,13 @@ export var dataMap = {
159
160
  long_task_id: 'long_task.id'
160
161
  },
161
162
  fields: {
162
- duration: 'long_task.duration'
163
+ duration: 'long_task.duration',
164
+ blocking_duration: 'long_task.blocking_duration',
165
+ first_ui_event_timestamp: 'long_task.first_ui_event_timestamp',
166
+ render_start: 'long_task.render_start',
167
+ style_and_layout_start: 'long_task.style_and_layout_start',
168
+ long_task_start_time: 'long_task.start_time',
169
+ scripts: ['string', 'long_task.scripts']
163
170
  }
164
171
  },
165
172
  action: {
@@ -205,7 +212,9 @@ export var dataMap = {
205
212
  status: 'status'
206
213
  },
207
214
  fields: {
208
- message: ['string', 'message']
215
+ message: ['string', 'message'],
216
+ error_message: ['string', 'error.message'],
217
+ error_stack: ['string', 'error.stack']
209
218
  }
210
219
  }
211
220
  }
@@ -1,22 +1,29 @@
1
- import { each } from './tools'
1
+ import { removeItem } from './tools'
2
2
  var BUFFER_LIMIT = 500
3
+ export function createBoundedBuffer() {
4
+ var buffer = []
3
5
 
4
- var _BoundedBuffer = function () {
5
- this.buffer = []
6
- }
7
- _BoundedBuffer.prototype = {
8
- add: function (callback) {
9
- var length = this.buffer.push(callback)
6
+ var add = function (callback) {
7
+ var length = buffer.push(callback)
10
8
  if (length > BUFFER_LIMIT) {
11
- this.buffer.splice(0, 1)
9
+ buffer.splice(0, 1)
12
10
  }
13
- },
11
+ }
12
+
13
+ var remove = function (callback) {
14
+ removeItem(buffer, callback)
15
+ }
14
16
 
15
- drain: function () {
16
- each(this.buffer, function (callback) {
17
- callback()
17
+ const drain = function (arg) {
18
+ buffer.forEach(function (callback) {
19
+ callback(arg)
18
20
  })
19
- this.buffer.length = 0
21
+ buffer.length = 0
22
+ }
23
+
24
+ return {
25
+ add: add,
26
+ remove: add,
27
+ drain: drain
20
28
  }
21
29
  }
22
- export var BoundedBuffer = _BoundedBuffer
@@ -21,7 +21,8 @@ export function concatBuffers(buffers) {
21
21
  }, 0)
22
22
  var result = new Uint8Array(length)
23
23
  var offset = 0
24
- for (var buffer of buffers) {
24
+ for (var _i = 0, buffers_1 = buffers; _i < buffers_1.length; _i++) {
25
+ var buffer = buffers_1[_i]
25
26
  result.set(buffer, offset)
26
27
  offset += buffer.length
27
28
  }
@@ -0,0 +1,11 @@
1
+ export function getConnectivity() {
2
+ var navigator = window.navigator
3
+ return {
4
+ status: navigator.onLine ? 'connected' : 'not_connected',
5
+ interfaces:
6
+ navigator.connection && navigator.connection.type
7
+ ? [navigator.connection.type]
8
+ : undefined,
9
+ effective_type: navigator.connection?.effectiveType
10
+ }
11
+ }
@@ -1,21 +1,23 @@
1
-
2
1
  export var ConsoleApiName = {
3
2
  log: 'log',
4
3
  debug: 'debug',
5
4
  info: 'info',
6
5
  warn: 'warn',
7
- error: 'error',
8
- }
9
- export var display = function(api) {
10
- var args = [].slice.call(arguments, 1)
11
- if (!Object.prototype.hasOwnProperty.call(ConsoleApiName, api)) {
12
- api = ConsoleApiName.log
13
- }
14
- display[api].apply(display,args)
6
+ error: 'error'
15
7
  }
8
+ export var globalConsole = console
9
+
10
+ export var originalConsoleMethods = {}
11
+ Object.keys(ConsoleApiName).forEach(function (name) {
12
+ originalConsoleMethods[name] = globalConsole[name]
13
+ })
16
14
 
17
- display.debug = console.debug.bind(console)
18
- display.log = console.log.bind(console)
19
- display.info = console.info.bind(console)
20
- display.warn = console.warn.bind(console)
21
- display.error = console.error.bind(console)
15
+ var PREFIX = 'GUANCE Browser SDK:'
16
+
17
+ export var display = {
18
+ debug: originalConsoleMethods.debug.bind(globalConsole, PREFIX),
19
+ log: originalConsoleMethods.log.bind(globalConsole, PREFIX),
20
+ info: originalConsoleMethods.info.bind(globalConsole, PREFIX),
21
+ warn: originalConsoleMethods.warn.bind(globalConsole, PREFIX),
22
+ error: originalConsoleMethods.error.bind(globalConsole, PREFIX)
23
+ }
@@ -0,0 +1,7 @@
1
+ import { display } from './display'
2
+
3
+ export function displayAlreadyInitializedError(sdkName, initConfiguration) {
4
+ if (!initConfiguration.silentMultipleInit) {
5
+ display.error(sdkName + ' is already initialized.')
6
+ }
7
+ }
@@ -0,0 +1,43 @@
1
+ import { computeBytesCount } from './byteUtils'
2
+
3
+ export function createIdentityEncoder() {
4
+ var output = ''
5
+ var outputBytesCount = 0
6
+
7
+ return {
8
+ isAsync: false,
9
+
10
+ isEmpty: function () {
11
+ return !output
12
+ },
13
+
14
+ write: function (data, callback) {
15
+ var additionalEncodedBytesCount = computeBytesCount(data)
16
+ outputBytesCount += additionalEncodedBytesCount
17
+ output += data
18
+ if (callback) {
19
+ callback(additionalEncodedBytesCount)
20
+ }
21
+ },
22
+
23
+ finish: function (callback) {
24
+ callback(this.finishSync())
25
+ },
26
+
27
+ finishSync: function () {
28
+ var result = {
29
+ output: output,
30
+ outputBytesCount: outputBytesCount,
31
+ rawBytesCount: outputBytesCount,
32
+ pendingData: ''
33
+ }
34
+ output = ''
35
+ outputBytesCount = 0
36
+ return result
37
+ },
38
+
39
+ estimateEncodedBytesCount: function (data) {
40
+ return data.length
41
+ }
42
+ }
43
+ }
@@ -1,6 +1,5 @@
1
1
  import { each, filter } from './tools'
2
2
  export var LifeCycleEventType = {
3
- PERFORMANCE_ENTRIES_COLLECTED: 'PERFORMANCE_ENTRIES_COLLECTED',
4
3
  AUTO_ACTION_COMPLETED: 'AUTO_ACTION_COMPLETED',
5
4
  BEFORE_VIEW_CREATED: 'BEFORE_VIEW_CREATED',
6
5
  VIEW_CREATED: 'VIEW_CREATED',
@@ -28,7 +28,8 @@ export function limitModification(object, modifiableFieldPaths, modifier) {
28
28
 
29
29
  function get(object, path) {
30
30
  var current = object
31
- for (var field of path.split('.')) {
31
+ for (var _i = 0, _a = path.split('.'); _i < _a.length; _i++) {
32
+ var field = _a[_i]
32
33
  if (!isValidObjectContaining(current, field)) {
33
34
  return
34
35
  }
@@ -25,21 +25,21 @@ export function callMonitored(fn, context, args) {
25
25
  try {
26
26
  return fn.apply(context, args)
27
27
  } catch (e) {
28
- displayIfDebugEnabled(ConsoleApiName.error, e)
28
+ displayIfDebugEnabled(e)
29
29
  if (onMonitorErrorCollected) {
30
30
  try {
31
31
  onMonitorErrorCollected(e)
32
32
  } catch (e) {
33
- displayIfDebugEnabled(ConsoleApiName.error, e)
33
+ displayIfDebugEnabled(e)
34
34
  }
35
35
  }
36
36
  }
37
37
  }
38
38
 
39
- export function displayIfDebugEnabled(api) {
40
- var args = [].slice.call(arguments, 1)
41
- // display.apply(null, [api, '[MONITOR]'].concat(args))
39
+ export function displayIfDebugEnabled() {
40
+ var args = [].slice.call(arguments)
41
+ // display.error.apply(null, ['[MONITOR]'].concat(args))
42
42
  if (debugMode) {
43
- display.apply(null, [api, '[MONITOR]'].concat(args))
43
+ display.error.apply(null, ['[MONITOR]'].concat(args))
44
44
  }
45
45
  }
@@ -39,7 +39,7 @@ export function detachToJsonMethod(value) {
39
39
  const objectToJson = object.toJSON
40
40
  if (objectToJson) {
41
41
  delete object.toJSON
42
- return () => {
42
+ return function () {
43
43
  object.toJSON = objectToJson
44
44
  }
45
45
  }
@@ -57,7 +57,8 @@ export function createValueHistory(params) {
57
57
  if (typeof options === 'undefined') {
58
58
  options = { returnInactive: false }
59
59
  }
60
- for (var entry of entries) {
60
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
61
+ var entry = entries_1[_i]
61
62
  if (entry.startTime <= startTime) {
62
63
  if (options.returnInactive || startTime <= entry.endTime) {
63
64
  return entry.value
package/src/index.js CHANGED
@@ -48,7 +48,10 @@ export * from './helper/serialisation/heavyCustomerDataWarning'
48
48
  export * from './helper/serialisation/jsonStringify'
49
49
  export * from './helper/serialisation/rowData'
50
50
  export * from './helper/serialisation/storedContextManager'
51
+ export * from './helper/encoder'
51
52
  export * from './user'
52
53
  export * from './helper/polyfills'
53
54
  export * from './telemetry/telemetry'
54
55
  export * from './helper/catchUserErrors'
56
+ export * from './helper/connectivity'
57
+ export * from './helper/displayAlreadyInitializedError'
@@ -1,6 +1,13 @@
1
1
  import { toStackTraceString } from '../helper/errorTools'
2
2
  import { mergeObservables, Observable } from '../helper/observable'
3
- import { includes, safeTruncate, filter, each } from '../helper/tools'
3
+ import {
4
+ includes,
5
+ safeTruncate,
6
+ filter,
7
+ each,
8
+ assign,
9
+ clocksNow
10
+ } from '../helper/tools'
4
11
  import { addEventListener } from '../browser/addEventListener'
5
12
  import { DOM_EVENT } from '../helper/enums'
6
13
  import { monitor } from '../helper/monitor'
@@ -33,7 +40,7 @@ function createReportObservable(reportTypes) {
33
40
 
34
41
  var handleReports = monitor(function (reports) {
35
42
  each(reports, function (report) {
36
- observable.notify(buildRawReportFromReport(report))
43
+ observable.notify(buildRawReportErrorFromReport(report))
37
44
  })
38
45
  })
39
46
 
@@ -47,34 +54,29 @@ function createReportObservable(reportTypes) {
47
54
  observer.disconnect()
48
55
  }
49
56
  })
50
-
51
- return observable
52
57
  }
53
58
 
54
59
  function createCspViolationReportObservable(configuration) {
55
60
  return new Observable(function (observable) {
56
- var handleCspViolation = function (event) {
57
- observable.notify(buildRawReportFromCspViolation(event))
58
- }
59
-
60
61
  var _addEventListener = addEventListener(
61
62
  document,
62
63
  DOM_EVENT.SECURITY_POLICY_VIOLATION,
63
- handleCspViolation
64
+ function (event) {
65
+ observable.notify(buildRawReportErrorFromCspViolation(event))
66
+ }
64
67
  )
65
68
 
66
69
  return _addEventListener.stop
67
70
  })
68
- return observable
69
71
  }
70
72
 
71
- function buildRawReportFromReport(report) {
73
+ function buildRawReportErrorFromReport(report) {
72
74
  var body = report.body
73
75
  var type = report.type
74
- return {
75
- type: type,
76
- subtype: body.id,
76
+ return buildRawReportError({
77
+ type: body.id,
77
78
  message: type + ': ' + body.message,
79
+ originalError: report,
78
80
  stack: buildStack(
79
81
  body.id,
80
82
  body.message,
@@ -82,32 +84,46 @@ function buildRawReportFromReport(report) {
82
84
  body.lineNumber,
83
85
  body.columnNumber
84
86
  )
85
- }
87
+ })
86
88
  }
87
-
88
- function buildRawReportFromCspViolation(event) {
89
- var type = RawReportType.cspViolation
89
+ function buildRawReportError(partial) {
90
+ return assign(
91
+ {
92
+ startClocks: clocksNow(),
93
+ source: ErrorSource.REPORT,
94
+ handling: ErrorHandling.UNHANDLED
95
+ },
96
+ partial
97
+ )
98
+ }
99
+ function buildRawReportErrorFromCspViolation(event) {
90
100
  var message =
91
101
  "'" +
92
102
  event.blockedURI +
93
103
  "' blocked by '" +
94
104
  event.effectiveDirective +
95
105
  "' directive"
96
- return {
97
- type: RawReportType.cspViolation,
98
- subtype: event.effectiveDirective,
99
- message: type + ': ' + message,
106
+ return buildRawReportError({
107
+ type: event.effectiveDirective,
108
+ message: RawReportType.cspViolation + ': ' + message,
109
+ originalError: event,
110
+ csp: {
111
+ disposition: event.disposition
112
+ },
100
113
  stack: buildStack(
101
114
  event.effectiveDirective,
102
- message +
103
- ' of the policy "' +
104
- safeTruncate(event.originalPolicy, 100, '...') +
105
- '"',
115
+ event.originalPolicy
116
+ ? `${message} of the policy "${safeTruncate(
117
+ event.originalPolicy,
118
+ 100,
119
+ '...'
120
+ )}"`
121
+ : 'no policy',
106
122
  event.sourceFile,
107
123
  event.lineNumber,
108
124
  event.columnNumber
109
125
  )
110
- }
126
+ })
111
127
  }
112
128
 
113
129
  function buildStack(name, message, sourceFile, lineNumber, columnNumber) {