@grafana/faro-web-sdk 2.3.1 → 2.4.0

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 (126) hide show
  1. package/dist/bundle/faro-web-sdk.iife.js +1 -1
  2. package/dist/bundle/types/instrumentations/console/instrumentation.d.ts +1 -1
  3. package/dist/bundle/types/instrumentations/csp/instrumentation.d.ts +1 -1
  4. package/dist/bundle/types/instrumentations/errors/instrumentation.d.ts +1 -1
  5. package/dist/bundle/types/instrumentations/navigation/instrumentation.d.ts +1 -1
  6. package/dist/bundle/types/instrumentations/performance/instrumentation.d.ts +1 -1
  7. package/dist/bundle/types/instrumentations/session/instrumentation.d.ts +1 -1
  8. package/dist/bundle/types/instrumentations/userActions/instrumentation.d.ts +1 -1
  9. package/dist/bundle/types/instrumentations/view/instrumentation.d.ts +1 -1
  10. package/dist/bundle/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
  11. package/dist/bundle/types/transports/console/transport.d.ts +1 -1
  12. package/dist/bundle/types/transports/fetch/transport.d.ts +1 -1
  13. package/dist/cjs/config/getWebInstrumentations.js +3 -4
  14. package/dist/cjs/config/getWebInstrumentations.js.map +1 -1
  15. package/dist/cjs/config/makeCoreConfig.js +48 -60
  16. package/dist/cjs/config/makeCoreConfig.js.map +1 -1
  17. package/dist/cjs/initialize.js +3 -3
  18. package/dist/cjs/initialize.js.map +1 -1
  19. package/dist/cjs/instrumentations/_internal/activityWindowTracker.js +44 -65
  20. package/dist/cjs/instrumentations/_internal/activityWindowTracker.js.map +1 -1
  21. package/dist/cjs/instrumentations/_internal/monitors/consoleMonitor.js +11 -16
  22. package/dist/cjs/instrumentations/_internal/monitors/consoleMonitor.js.map +1 -1
  23. package/dist/cjs/instrumentations/_internal/monitors/domMutationMonitor.js +5 -5
  24. package/dist/cjs/instrumentations/_internal/monitors/domMutationMonitor.js.map +1 -1
  25. package/dist/cjs/instrumentations/_internal/monitors/httpRequestMonitor.js +28 -30
  26. package/dist/cjs/instrumentations/_internal/monitors/httpRequestMonitor.js.map +1 -1
  27. package/dist/cjs/instrumentations/_internal/monitors/interactionMonitor.js +7 -7
  28. package/dist/cjs/instrumentations/_internal/monitors/interactionMonitor.js.map +1 -1
  29. package/dist/cjs/instrumentations/_internal/monitors/performanceEntriesMonitor.js +8 -8
  30. package/dist/cjs/instrumentations/_internal/monitors/performanceEntriesMonitor.js.map +1 -1
  31. package/dist/cjs/instrumentations/_internal/monitors/urlChangeMonitor.js +24 -32
  32. package/dist/cjs/instrumentations/_internal/monitors/urlChangeMonitor.js.map +1 -1
  33. package/dist/cjs/instrumentations/console/instrumentation.js +29 -49
  34. package/dist/cjs/instrumentations/console/instrumentation.js.map +1 -1
  35. package/dist/cjs/instrumentations/csp/instrumentation.js +14 -32
  36. package/dist/cjs/instrumentations/csp/instrumentation.js.map +1 -1
  37. package/dist/cjs/instrumentations/errors/getErrorDetails.js +23 -23
  38. package/dist/cjs/instrumentations/errors/getErrorDetails.js.map +1 -1
  39. package/dist/cjs/instrumentations/errors/getValueAndTypeFromMessage.js +5 -5
  40. package/dist/cjs/instrumentations/errors/getValueAndTypeFromMessage.js.map +1 -1
  41. package/dist/cjs/instrumentations/errors/instrumentation.js +11 -29
  42. package/dist/cjs/instrumentations/errors/instrumentation.js.map +1 -1
  43. package/dist/cjs/instrumentations/errors/registerOnerror.js +6 -10
  44. package/dist/cjs/instrumentations/errors/registerOnerror.js.map +1 -1
  45. package/dist/cjs/instrumentations/errors/registerOnunhandledrejection.js +16 -17
  46. package/dist/cjs/instrumentations/errors/registerOnunhandledrejection.js.map +1 -1
  47. package/dist/cjs/instrumentations/errors/stackFrames/buildStackFrame.js +2 -2
  48. package/dist/cjs/instrumentations/errors/stackFrames/buildStackFrame.js.map +1 -1
  49. package/dist/cjs/instrumentations/errors/stackFrames/getDataFromSafariExtensions.js +4 -4
  50. package/dist/cjs/instrumentations/errors/stackFrames/getDataFromSafariExtensions.js.map +1 -1
  51. package/dist/cjs/instrumentations/errors/stackFrames/getStackFramesFromError.js +16 -17
  52. package/dist/cjs/instrumentations/errors/stackFrames/getStackFramesFromError.js.map +1 -1
  53. package/dist/cjs/instrumentations/errors/stackFrames/parseStacktrace.js +1 -1
  54. package/dist/cjs/instrumentations/errors/stackFrames/parseStacktrace.js.map +1 -1
  55. package/dist/cjs/instrumentations/navigation/instrumentation.js +27 -45
  56. package/dist/cjs/instrumentations/navigation/instrumentation.js.map +1 -1
  57. package/dist/cjs/instrumentations/performance/instrumentation.js +19 -74
  58. package/dist/cjs/instrumentations/performance/instrumentation.js.map +1 -1
  59. package/dist/cjs/instrumentations/performance/navigation.js +15 -26
  60. package/dist/cjs/instrumentations/performance/navigation.js.map +1 -1
  61. package/dist/cjs/instrumentations/performance/performanceUtils.js +18 -33
  62. package/dist/cjs/instrumentations/performance/performanceUtils.js.map +1 -1
  63. package/dist/cjs/instrumentations/performance/resource.js +13 -25
  64. package/dist/cjs/instrumentations/performance/resource.js.map +1 -1
  65. package/dist/cjs/instrumentations/session/instrumentation.js +45 -74
  66. package/dist/cjs/instrumentations/session/instrumentation.js.map +1 -1
  67. package/dist/cjs/instrumentations/session/sessionManager/PersistentSessionsManager.js +21 -24
  68. package/dist/cjs/instrumentations/session/sessionManager/PersistentSessionsManager.js.map +1 -1
  69. package/dist/cjs/instrumentations/session/sessionManager/VolatileSessionManager.js +21 -24
  70. package/dist/cjs/instrumentations/session/sessionManager/VolatileSessionManager.js.map +1 -1
  71. package/dist/cjs/instrumentations/session/sessionManager/getSessionManagerByConfig.js +2 -2
  72. package/dist/cjs/instrumentations/session/sessionManager/getSessionManagerByConfig.js.map +1 -1
  73. package/dist/cjs/instrumentations/session/sessionManager/sampling.js +5 -5
  74. package/dist/cjs/instrumentations/session/sessionManager/sampling.js.map +1 -1
  75. package/dist/cjs/instrumentations/session/sessionManager/sessionManagerUtils.js +47 -65
  76. package/dist/cjs/instrumentations/session/sessionManager/sessionManagerUtils.js.map +1 -1
  77. package/dist/cjs/instrumentations/userActions/instrumentation.js +15 -34
  78. package/dist/cjs/instrumentations/userActions/instrumentation.js.map +1 -1
  79. package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js +11 -11
  80. package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js.map +1 -1
  81. package/dist/cjs/instrumentations/userActions/userActionController.js +49 -53
  82. package/dist/cjs/instrumentations/userActions/userActionController.js.map +1 -1
  83. package/dist/cjs/instrumentations/userActions/util.js +4 -4
  84. package/dist/cjs/instrumentations/userActions/util.js.map +1 -1
  85. package/dist/cjs/instrumentations/view/instrumentation.js +12 -30
  86. package/dist/cjs/instrumentations/view/instrumentation.js.map +1 -1
  87. package/dist/cjs/instrumentations/webVitals/instrumentation.js +11 -29
  88. package/dist/cjs/instrumentations/webVitals/instrumentation.js.map +1 -1
  89. package/dist/cjs/instrumentations/webVitals/webVitalsWithAttribution.js +87 -94
  90. package/dist/cjs/instrumentations/webVitals/webVitalsWithAttribution.js.map +1 -1
  91. package/dist/cjs/metas/browser/meta.js +14 -14
  92. package/dist/cjs/metas/browser/meta.js.map +1 -1
  93. package/dist/cjs/metas/k6/meta.js +3 -14
  94. package/dist/cjs/metas/k6/meta.js.map +1 -1
  95. package/dist/cjs/metas/page/meta.js +7 -19
  96. package/dist/cjs/metas/page/meta.js.map +1 -1
  97. package/dist/cjs/metas/sdk/meta.js +3 -3
  98. package/dist/cjs/metas/sdk/meta.js.map +1 -1
  99. package/dist/cjs/metas/session/createSession.js +2 -2
  100. package/dist/cjs/metas/session/createSession.js.map +1 -1
  101. package/dist/cjs/transports/console/transport.js +10 -29
  102. package/dist/cjs/transports/console/transport.js.map +1 -1
  103. package/dist/cjs/transports/fetch/transport.js +82 -176
  104. package/dist/cjs/transports/fetch/transport.js.map +1 -1
  105. package/dist/cjs/utils/throttle.js +6 -10
  106. package/dist/cjs/utils/throttle.js.map +1 -1
  107. package/dist/cjs/utils/url.js +4 -5
  108. package/dist/cjs/utils/url.js.map +1 -1
  109. package/dist/cjs/utils/webStorage.js +4 -4
  110. package/dist/cjs/utils/webStorage.js.map +1 -1
  111. package/dist/esm/instrumentations/errors/getErrorDetails.js +1 -0
  112. package/dist/esm/instrumentations/errors/getErrorDetails.js.map +1 -1
  113. package/dist/esm/transports/fetch/transport.js +1 -1
  114. package/dist/esm/transports/fetch/transport.js.map +1 -1
  115. package/dist/types/instrumentations/console/instrumentation.d.ts +1 -1
  116. package/dist/types/instrumentations/csp/instrumentation.d.ts +1 -1
  117. package/dist/types/instrumentations/errors/instrumentation.d.ts +1 -1
  118. package/dist/types/instrumentations/navigation/instrumentation.d.ts +1 -1
  119. package/dist/types/instrumentations/performance/instrumentation.d.ts +1 -1
  120. package/dist/types/instrumentations/session/instrumentation.d.ts +1 -1
  121. package/dist/types/instrumentations/userActions/instrumentation.d.ts +1 -1
  122. package/dist/types/instrumentations/view/instrumentation.d.ts +1 -1
  123. package/dist/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
  124. package/dist/types/transports/console/transport.d.ts +1 -1
  125. package/dist/types/transports/fetch/transport.d.ts +1 -1
  126. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/metas/sdk/meta.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAGtC,IAAM,OAAO,GAAgC,cAAM,OAAA,CAAC;IACzD,GAAG,EAAE;QACH,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,mBAAO;KACjB;CACF,CAAC,EALwD,CAKxD,CAAC;AALU,QAAA,OAAO,WAKjB","sourcesContent":["import { VERSION } from '@grafana/faro-core';\nimport type { Meta, MetaItem } from '@grafana/faro-core';\n\nexport const sdkMeta: MetaItem<Pick<Meta, 'sdk'>> = () => ({\n sdk: {\n name: 'faro-web',\n version: VERSION,\n },\n});\n"]}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/metas/sdk/meta.ts"],"names":[],"mappings":";;;AAAA,kDAA6C;AAGtC,MAAM,OAAO,GAAgC,GAAG,EAAE,CAAC,CAAC;IACzD,GAAG,EAAE;QACH,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,mBAAO;KACjB;CACF,CAAC,CAAC;AALU,QAAA,OAAO,WAKjB","sourcesContent":["import { VERSION } from '@grafana/faro-core';\nimport type { Meta, MetaItem } from '@grafana/faro-core';\n\nexport const sdkMeta: MetaItem<Pick<Meta, 'sdk'>> = () => ({\n sdk: {\n name: 'faro-web',\n version: VERSION,\n },\n});\n"]}
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSession = createSession;
4
- var faro_core_1 = require("@grafana/faro-core");
4
+ const faro_core_1 = require("@grafana/faro-core");
5
5
  function createSession(attributes) {
6
6
  var _a, _b, _c, _d;
7
7
  return {
8
8
  id: (_d = (_c = (_b = (_a = faro_core_1.faro.config) === null || _a === void 0 ? void 0 : _a.sessionTracking) === null || _b === void 0 ? void 0 : _b.generateSessionId) === null || _c === void 0 ? void 0 : _c.call(_b)) !== null && _d !== void 0 ? _d : (0, faro_core_1.genShortID)(),
9
- attributes: attributes,
9
+ attributes,
10
10
  };
11
11
  }
12
12
  //# sourceMappingURL=createSession.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createSession.js","sourceRoot":"","sources":["../../../../src/metas/session/createSession.ts"],"names":[],"mappings":";;AAGA,sCAKC;AARD,gDAAsD;AAGtD,SAAgB,aAAa,CAAC,UAAsC;;IAClE,OAAO;QACL,EAAE,EAAE,MAAA,MAAA,MAAA,MAAA,gBAAI,CAAC,MAAM,0CAAE,eAAe,0CAAE,iBAAiB,kDAAI,mCAAI,IAAA,sBAAU,GAAE;QACvE,UAAU,YAAA;KACX,CAAC;AACJ,CAAC","sourcesContent":["import { faro, genShortID } from '@grafana/faro-core';\nimport type { MetaSession } from '@grafana/faro-core';\n\nexport function createSession(attributes?: MetaSession['attributes']): MetaSession {\n return {\n id: faro.config?.sessionTracking?.generateSessionId?.() ?? genShortID(),\n attributes,\n };\n}\n"]}
1
+ {"version":3,"file":"createSession.js","sourceRoot":"","sources":["../../../../src/metas/session/createSession.ts"],"names":[],"mappings":";;AAGA,sCAKC;AARD,kDAAsD;AAGtD,SAAgB,aAAa,CAAC,UAAsC;;IAClE,OAAO;QACL,EAAE,EAAE,MAAA,MAAA,MAAA,MAAA,gBAAI,CAAC,MAAM,0CAAE,eAAe,0CAAE,iBAAiB,kDAAI,mCAAI,IAAA,sBAAU,GAAE;QACvE,UAAU;KACX,CAAC;AACJ,CAAC","sourcesContent":["import { faro, genShortID } from '@grafana/faro-core';\nimport type { MetaSession } from '@grafana/faro-core';\n\nexport function createSession(attributes?: MetaSession['attributes']): MetaSession {\n return {\n id: faro.config?.sessionTracking?.generateSessionId?.() ?? genShortID(),\n attributes,\n };\n}\n"]}
@@ -1,37 +1,18 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
2
  Object.defineProperty(exports, "__esModule", { value: true });
18
3
  exports.ConsoleTransport = void 0;
19
- var faro_core_1 = require("@grafana/faro-core");
20
- var ConsoleTransport = /** @class */ (function (_super) {
21
- __extends(ConsoleTransport, _super);
22
- function ConsoleTransport(options) {
23
- if (options === void 0) { options = {}; }
24
- var _this = _super.call(this) || this;
25
- _this.options = options;
26
- _this.name = '@grafana/faro-web-sdk:transport-console';
27
- _this.version = faro_core_1.VERSION;
28
- return _this;
4
+ const faro_core_1 = require("@grafana/faro-core");
5
+ class ConsoleTransport extends faro_core_1.BaseTransport {
6
+ constructor(options = {}) {
7
+ super();
8
+ this.options = options;
9
+ this.name = '@grafana/faro-web-sdk:transport-console';
10
+ this.version = faro_core_1.VERSION;
29
11
  }
30
- ConsoleTransport.prototype.send = function (item) {
12
+ send(item) {
31
13
  var _a;
32
14
  return this.unpatchedConsole[(_a = this.options.level) !== null && _a !== void 0 ? _a : faro_core_1.LogLevel.DEBUG]('New event', (0, faro_core_1.getTransportBody)([item]));
33
- };
34
- return ConsoleTransport;
35
- }(faro_core_1.BaseTransport));
15
+ }
16
+ }
36
17
  exports.ConsoleTransport = ConsoleTransport;
37
18
  //# sourceMappingURL=transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/transports/console/transport.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAwF;AAKxF;IAAsC,oCAAa;IAIjD,0BAAoB,OAAqC;QAArC,wBAAA,EAAA,YAAqC;QACvD,YAAA,MAAK,WAAE,SAAC;QADU,aAAO,GAAP,OAAO,CAA8B;QAHhD,UAAI,GAAG,yCAAyC,CAAC;QACjD,aAAO,GAAG,mBAAO,CAAC;;IAI3B,CAAC;IAED,+BAAI,GAAJ,UAAK,IAAmB;;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAA,IAAI,CAAC,OAAO,CAAC,KAAK,mCAAI,oBAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,IAAA,4BAAgB,EAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5G,CAAC;IACH,uBAAC;AAAD,CAAC,AAXD,CAAsC,yBAAa,GAWlD;AAXY,4CAAgB","sourcesContent":["import { BaseTransport, getTransportBody, LogLevel, VERSION } from '@grafana/faro-core';\nimport type { TransportItem } from '@grafana/faro-core';\n\nimport type { ConsoleTransportOptions } from './types';\n\nexport class ConsoleTransport extends BaseTransport {\n readonly name = '@grafana/faro-web-sdk:transport-console';\n readonly version = VERSION;\n\n constructor(private options: ConsoleTransportOptions = {}) {\n super();\n }\n\n send(item: TransportItem): void {\n return this.unpatchedConsole[this.options.level ?? LogLevel.DEBUG]('New event', getTransportBody([item]));\n }\n}\n"]}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/transports/console/transport.ts"],"names":[],"mappings":";;;AAAA,kDAAwF;AAKxF,MAAa,gBAAiB,SAAQ,yBAAa;IAIjD,YAAoB,UAAmC,EAAE;QACvD,KAAK,EAAE,CAAC;QADU,YAAO,GAAP,OAAO,CAA8B;QAHhD,SAAI,GAAG,yCAAyC,CAAC;QACjD,YAAO,GAAG,mBAAO,CAAC;IAI3B,CAAC;IAED,IAAI,CAAC,IAAmB;;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAA,IAAI,CAAC,OAAO,CAAC,KAAK,mCAAI,oBAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,IAAA,4BAAgB,EAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5G,CAAC;CACF;AAXD,4CAWC","sourcesContent":["import { BaseTransport, getTransportBody, LogLevel, VERSION } from '@grafana/faro-core';\nimport type { TransportItem } from '@grafana/faro-core';\n\nimport type { ConsoleTransportOptions } from './types';\n\nexport class ConsoleTransport extends BaseTransport {\n readonly name = '@grafana/faro-web-sdk:transport-console';\n readonly version = VERSION;\n\n constructor(private options: ConsoleTransportOptions = {}) {\n super();\n }\n\n send(item: TransportItem): void {\n return this.unpatchedConsole[this.options.level ?? LogLevel.DEBUG]('New event', getTransportBody([item]));\n }\n}\n"]}
@@ -1,30 +1,4 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
- var __assign = (this && this.__assign) || function () {
18
- __assign = Object.assign || function(t) {
19
- for (var s, i = 1, n = arguments.length; i < n; i++) {
20
- s = arguments[i];
21
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
- t[p] = s[p];
23
- }
24
- return t;
25
- };
26
- return __assign.apply(this, arguments);
27
- };
28
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -34,33 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
34
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
35
9
  });
36
10
  };
37
- var __generator = (this && this.__generator) || function (thisArg, body) {
38
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
39
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
- function verb(n) { return function (v) { return step([n, v]); }; }
41
- function step(op) {
42
- if (f) throw new TypeError("Generator is already executing.");
43
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
44
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
45
- if (y = 0, t) op = [op[0] & 2, t.value];
46
- switch (op[0]) {
47
- case 0: case 1: t = op; break;
48
- case 4: _.label++; return { value: op[1], done: false };
49
- case 5: _.label++; y = op[1]; op = [0]; continue;
50
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
- default:
52
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
- if (t[2]) _.ops.pop();
57
- _.trys.pop(); continue;
58
- }
59
- op = body.call(thisArg, _);
60
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
- }
63
- };
64
11
  var __rest = (this && this.__rest) || function (s, e) {
65
12
  var t = {};
66
13
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -74,151 +21,110 @@ var __rest = (this && this.__rest) || function (s, e) {
74
21
  };
75
22
  Object.defineProperty(exports, "__esModule", { value: true });
76
23
  exports.FetchTransport = void 0;
77
- var faro_core_1 = require("@grafana/faro-core");
78
- var sessionManager_1 = require("../../instrumentations/session/sessionManager");
79
- var sessionManagerUtils_1 = require("../../instrumentations/session/sessionManager/sessionManagerUtils");
80
- var DEFAULT_BUFFER_SIZE = 30;
81
- var DEFAULT_CONCURRENCY = 5; // chrome supports 10 total, firefox 17
82
- var DEFAULT_RATE_LIMIT_BACKOFF_MS = 5000;
83
- var BEACON_BODY_SIZE_LIMIT = 60000;
84
- var TOO_MANY_REQUESTS = 429;
85
- var ACCEPTED = 202;
86
- var FetchTransport = /** @class */ (function (_super) {
87
- __extends(FetchTransport, _super);
88
- function FetchTransport(options) {
24
+ const faro_core_1 = require("@grafana/faro-core");
25
+ const sessionManager_1 = require("../../instrumentations/session/sessionManager");
26
+ const sessionManagerUtils_1 = require("../../instrumentations/session/sessionManager/sessionManagerUtils");
27
+ const DEFAULT_BUFFER_SIZE = 30;
28
+ const DEFAULT_CONCURRENCY = 5; // chrome supports 10 total, firefox 17
29
+ const DEFAULT_RATE_LIMIT_BACKOFF_MS = 5000;
30
+ const BEACON_BODY_SIZE_LIMIT = 60000;
31
+ const TOO_MANY_REQUESTS = 429;
32
+ const ACCEPTED = 202;
33
+ class FetchTransport extends faro_core_1.BaseTransport {
34
+ constructor(options) {
89
35
  var _a, _b, _c, _d;
90
- var _this = _super.call(this) || this;
91
- _this.options = options;
92
- _this.name = '@grafana/faro-web-sdk:transport-fetch';
93
- _this.version = faro_core_1.VERSION;
94
- _this.disabledUntil = new Date();
95
- _this.rateLimitBackoffMs = (_a = options.defaultRateLimitBackoffMs) !== null && _a !== void 0 ? _a : DEFAULT_RATE_LIMIT_BACKOFF_MS;
96
- _this.getNow = (_b = options.getNow) !== null && _b !== void 0 ? _b : (function () { return Date.now(); });
97
- _this.promiseBuffer = (0, faro_core_1.createPromiseBuffer)({
36
+ super();
37
+ this.options = options;
38
+ this.name = '@grafana/faro-web-sdk:transport-fetch';
39
+ this.version = faro_core_1.VERSION;
40
+ this.disabledUntil = new Date(0);
41
+ this.rateLimitBackoffMs = (_a = options.defaultRateLimitBackoffMs) !== null && _a !== void 0 ? _a : DEFAULT_RATE_LIMIT_BACKOFF_MS;
42
+ this.getNow = (_b = options.getNow) !== null && _b !== void 0 ? _b : (() => Date.now());
43
+ this.promiseBuffer = (0, faro_core_1.createPromiseBuffer)({
98
44
  size: (_c = options.bufferSize) !== null && _c !== void 0 ? _c : DEFAULT_BUFFER_SIZE,
99
45
  concurrency: (_d = options.concurrency) !== null && _d !== void 0 ? _d : DEFAULT_CONCURRENCY,
100
46
  });
101
- return _this;
102
47
  }
103
- FetchTransport.prototype.send = function (items) {
104
- return __awaiter(this, void 0, void 0, function () {
105
- var err_1;
106
- var _this = this;
107
- return __generator(this, function (_a) {
108
- switch (_a.label) {
109
- case 0:
110
- _a.trys.push([0, 2, , 3]);
111
- if (this.disabledUntil > new Date(this.getNow())) {
112
- this.logWarn("Dropping transport item due to too many requests. Backoff until ".concat(this.disabledUntil));
113
- return [2 /*return*/, Promise.resolve()];
114
- }
115
- return [4 /*yield*/, this.promiseBuffer.add(function () { return __awaiter(_this, void 0, void 0, function () {
116
- var body, _a, url, requestOptions, apiKey, _b, _c, headers, restOfRequestOptions, sessionId, sessionMeta, resolvedHeaders, _i, _d, _e, key, value, _f, _g, _h;
117
- var _this = this;
118
- return __generator(this, function (_j) {
119
- switch (_j.label) {
120
- case 0:
121
- body = JSON.stringify((0, faro_core_1.getTransportBody)(items));
122
- _a = this.options, url = _a.url, requestOptions = _a.requestOptions, apiKey = _a.apiKey;
123
- _b = requestOptions !== null && requestOptions !== void 0 ? requestOptions : {}, _c = _b.headers, headers = _c === void 0 ? {} : _c, restOfRequestOptions = __rest(_b, ["headers"]);
124
- sessionMeta = this.metas.value.session;
125
- if (sessionMeta != null) {
126
- sessionId = sessionMeta.id;
127
- }
128
- resolvedHeaders = {};
129
- _i = 0, _d = Object.entries(headers);
130
- _j.label = 1;
131
- case 1:
132
- if (!(_i < _d.length)) return [3 /*break*/, 6];
133
- _e = _d[_i], key = _e[0], value = _e[1];
134
- _f = resolvedHeaders;
135
- _g = key;
136
- if (!(typeof value === 'function')) return [3 /*break*/, 3];
137
- return [4 /*yield*/, Promise.resolve(value())];
138
- case 2:
139
- _h = _j.sent();
140
- return [3 /*break*/, 4];
141
- case 3:
142
- _h = value;
143
- _j.label = 4;
144
- case 4:
145
- _f[_g] = _h;
146
- _j.label = 5;
147
- case 5:
148
- _i++;
149
- return [3 /*break*/, 1];
150
- case 6: return [2 /*return*/, fetch(url, __assign({ method: 'POST', headers: __assign(__assign(__assign({ 'Content-Type': 'application/json' }, resolvedHeaders), (apiKey ? { 'x-api-key': apiKey } : {})), (sessionId ? { 'x-faro-session-id': sessionId } : {})), body: body, keepalive: body.length <= BEACON_BODY_SIZE_LIMIT }, (restOfRequestOptions !== null && restOfRequestOptions !== void 0 ? restOfRequestOptions : {})))
151
- .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
152
- var sessionExpired;
153
- return __generator(this, function (_a) {
154
- if (response.status === ACCEPTED) {
155
- sessionExpired = response.headers.get('X-Faro-Session-Status') === 'invalid';
156
- if (sessionExpired) {
157
- this.extendFaroSession(this.config, this.logDebug);
158
- }
159
- }
160
- if (response.status === TOO_MANY_REQUESTS) {
161
- this.disabledUntil = this.getRetryAfterDate(response);
162
- this.logWarn("Too many requests, backing off until ".concat(this.disabledUntil));
163
- }
164
- // read the body so the connection can be closed
165
- response.text().catch(faro_core_1.noop);
166
- return [2 /*return*/, response];
167
- });
168
- }); })
169
- .catch(function (err) {
170
- _this.logError('Failed sending payload to the receiver\n', JSON.parse(body), err);
171
- })];
172
- }
173
- });
174
- }); })];
175
- case 1:
176
- _a.sent();
177
- return [3 /*break*/, 3];
178
- case 2:
179
- err_1 = _a.sent();
180
- this.logError(err_1);
181
- return [3 /*break*/, 3];
182
- case 3: return [2 /*return*/];
48
+ send(items) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ try {
51
+ if (this.disabledUntil > new Date(this.getNow())) {
52
+ this.logWarn(`Dropping transport item due to too many requests. Backoff until ${this.disabledUntil}`);
53
+ return Promise.resolve();
183
54
  }
184
- });
55
+ yield this.promiseBuffer.add(() => __awaiter(this, void 0, void 0, function* () {
56
+ const body = JSON.stringify((0, faro_core_1.getTransportBody)(items));
57
+ const { url, requestOptions, apiKey } = this.options;
58
+ const _a = requestOptions !== null && requestOptions !== void 0 ? requestOptions : {}, { headers = {} } = _a, restOfRequestOptions = __rest(_a, ["headers"]);
59
+ let sessionId;
60
+ const sessionMeta = this.metas.value.session;
61
+ if (sessionMeta != null) {
62
+ sessionId = sessionMeta.id;
63
+ }
64
+ const resolvedHeaders = {};
65
+ for (const [key, value] of Object.entries(headers)) {
66
+ resolvedHeaders[key] = typeof value === 'function' ? yield Promise.resolve(value()) : value;
67
+ }
68
+ return fetch(url, Object.assign({ method: 'POST', headers: Object.assign(Object.assign(Object.assign({ 'Content-Type': 'application/json' }, resolvedHeaders), (apiKey ? { 'x-api-key': apiKey } : {})), (sessionId ? { 'x-faro-session-id': sessionId } : {})), body, keepalive: body.length <= BEACON_BODY_SIZE_LIMIT }, (restOfRequestOptions !== null && restOfRequestOptions !== void 0 ? restOfRequestOptions : {})))
69
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
70
+ if (response.status === ACCEPTED) {
71
+ const sessionExpired = response.headers.get('X-Faro-Session-Status') === 'invalid';
72
+ if (sessionExpired) {
73
+ this.extendFaroSession(this.config, this.logDebug);
74
+ }
75
+ }
76
+ if (response.status === TOO_MANY_REQUESTS) {
77
+ this.disabledUntil = this.getRetryAfterDate(response);
78
+ this.logWarn(`Too many requests, backing off until ${this.disabledUntil}`);
79
+ }
80
+ // read the body so the connection can be closed
81
+ response.text().catch(faro_core_1.noop);
82
+ return response;
83
+ }))
84
+ .catch((err) => {
85
+ this.logError('Failed sending payload to the receiver\n', JSON.parse(body), err);
86
+ });
87
+ }));
88
+ }
89
+ catch (err) {
90
+ this.logError(err);
91
+ }
185
92
  });
186
- };
187
- FetchTransport.prototype.getIgnoreUrls = function () {
93
+ }
94
+ getIgnoreUrls() {
188
95
  var _a;
189
96
  return [this.options.url].concat((_a = this.config.ignoreUrls) !== null && _a !== void 0 ? _a : []);
190
- };
191
- FetchTransport.prototype.isBatched = function () {
97
+ }
98
+ isBatched() {
192
99
  return true;
193
- };
194
- FetchTransport.prototype.getRetryAfterDate = function (response) {
195
- var now = this.getNow();
196
- var retryAfterHeader = response.headers.get('Retry-After');
100
+ }
101
+ getRetryAfterDate(response) {
102
+ const now = this.getNow();
103
+ const retryAfterHeader = response.headers.get('Retry-After');
197
104
  if (retryAfterHeader) {
198
- var delay = Number(retryAfterHeader);
105
+ const delay = Number(retryAfterHeader);
199
106
  if (!isNaN(delay)) {
200
107
  return new Date(delay * 1000 + now);
201
108
  }
202
- var date = Date.parse(retryAfterHeader);
109
+ const date = Date.parse(retryAfterHeader);
203
110
  if (!isNaN(date)) {
204
111
  return new Date(date);
205
112
  }
206
113
  }
207
114
  return new Date(now + this.rateLimitBackoffMs);
208
- };
209
- FetchTransport.prototype.extendFaroSession = function (config, logDebug) {
210
- var SessionExpiredString = "Session expired";
211
- var sessionTrackingConfig = config.sessionTracking;
115
+ }
116
+ extendFaroSession(config, logDebug) {
117
+ const SessionExpiredString = `Session expired`;
118
+ const sessionTrackingConfig = config.sessionTracking;
212
119
  if (sessionTrackingConfig === null || sessionTrackingConfig === void 0 ? void 0 : sessionTrackingConfig.enabled) {
213
- var _a = (0, sessionManager_1.getSessionManagerByConfig)(sessionTrackingConfig), fetchUserSession = _a.fetchUserSession, storeUserSession = _a.storeUserSession;
214
- (0, sessionManagerUtils_1.getUserSessionUpdater)({ fetchUserSession: fetchUserSession, storeUserSession: storeUserSession })({ forceSessionExtend: true });
215
- logDebug("".concat(SessionExpiredString, " created new session."));
120
+ const { fetchUserSession, storeUserSession } = (0, sessionManager_1.getSessionManagerByConfig)(sessionTrackingConfig);
121
+ (0, sessionManagerUtils_1.getUserSessionUpdater)({ fetchUserSession, storeUserSession })({ forceSessionExtend: true });
122
+ logDebug(`${SessionExpiredString} created new session.`);
216
123
  }
217
124
  else {
218
- logDebug("".concat(SessionExpiredString, "."));
125
+ logDebug(`${SessionExpiredString}.`);
219
126
  }
220
- };
221
- return FetchTransport;
222
- }(faro_core_1.BaseTransport));
127
+ }
128
+ }
223
129
  exports.FetchTransport = FetchTransport;
224
130
  //# sourceMappingURL=transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/transports/fetch/transport.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseExtension, BaseTransport, createPromiseBuffer, getTransportBody, noop, VERSION } from '@grafana/faro-core';\nimport type { Config, Patterns, PromiseBuffer, TransportItem } from '@grafana/faro-core';\n\nimport { getSessionManagerByConfig } from '../../instrumentations/session/sessionManager';\nimport { getUserSessionUpdater } from '../../instrumentations/session/sessionManager/sessionManagerUtils';\n\nimport type { FetchTransportOptions } from './types';\n\nconst DEFAULT_BUFFER_SIZE = 30;\nconst DEFAULT_CONCURRENCY = 5; // chrome supports 10 total, firefox 17\nconst DEFAULT_RATE_LIMIT_BACKOFF_MS = 5000;\n\nconst BEACON_BODY_SIZE_LIMIT = 60000;\nconst TOO_MANY_REQUESTS = 429;\nconst ACCEPTED = 202;\n\nexport class FetchTransport extends BaseTransport {\n readonly name = '@grafana/faro-web-sdk:transport-fetch';\n readonly version = VERSION;\n\n promiseBuffer: PromiseBuffer<Response | void>;\n\n private readonly rateLimitBackoffMs: number;\n private readonly getNow: () => number;\n private disabledUntil: Date = new Date();\n\n constructor(private options: FetchTransportOptions) {\n super();\n\n this.rateLimitBackoffMs = options.defaultRateLimitBackoffMs ?? DEFAULT_RATE_LIMIT_BACKOFF_MS;\n this.getNow = options.getNow ?? (() => Date.now());\n\n this.promiseBuffer = createPromiseBuffer({\n size: options.bufferSize ?? DEFAULT_BUFFER_SIZE,\n concurrency: options.concurrency ?? DEFAULT_CONCURRENCY,\n });\n }\n\n async send(items: TransportItem[]): Promise<void> {\n try {\n if (this.disabledUntil > new Date(this.getNow())) {\n this.logWarn(`Dropping transport item due to too many requests. Backoff until ${this.disabledUntil}`);\n\n return Promise.resolve();\n }\n\n await this.promiseBuffer.add(async () => {\n const body = JSON.stringify(getTransportBody(items));\n\n const { url, requestOptions, apiKey } = this.options;\n\n const { headers = {}, ...restOfRequestOptions } = requestOptions ?? {};\n\n let sessionId;\n const sessionMeta = this.metas.value.session;\n if (sessionMeta != null) {\n sessionId = sessionMeta.id;\n }\n\n const resolvedHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n resolvedHeaders[key] = typeof value === 'function' ? await Promise.resolve(value()) : value;\n }\n\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...resolvedHeaders,\n ...(apiKey ? { 'x-api-key': apiKey } : {}),\n ...(sessionId ? { 'x-faro-session-id': sessionId } : {}),\n },\n body,\n keepalive: body.length <= BEACON_BODY_SIZE_LIMIT,\n ...(restOfRequestOptions ?? {}),\n })\n .then(async (response) => {\n if (response.status === ACCEPTED) {\n const sessionExpired = response.headers.get('X-Faro-Session-Status') === 'invalid';\n\n if (sessionExpired) {\n this.extendFaroSession(this.config, this.logDebug);\n }\n }\n\n if (response.status === TOO_MANY_REQUESTS) {\n this.disabledUntil = this.getRetryAfterDate(response);\n this.logWarn(`Too many requests, backing off until ${this.disabledUntil}`);\n }\n\n // read the body so the connection can be closed\n response.text().catch(noop);\n return response;\n })\n .catch((err) => {\n this.logError('Failed sending payload to the receiver\\n', JSON.parse(body), err);\n });\n });\n } catch (err) {\n this.logError(err);\n }\n }\n\n override getIgnoreUrls(): Patterns {\n return ([this.options.url] as Patterns).concat(this.config.ignoreUrls ?? []);\n }\n\n override isBatched(): boolean {\n return true;\n }\n\n private getRetryAfterDate(response: Response): Date {\n const now = this.getNow();\n const retryAfterHeader = response.headers.get('Retry-After');\n\n if (retryAfterHeader) {\n const delay = Number(retryAfterHeader);\n\n if (!isNaN(delay)) {\n return new Date(delay * 1000 + now);\n }\n\n const date = Date.parse(retryAfterHeader);\n\n if (!isNaN(date)) {\n return new Date(date);\n }\n }\n\n return new Date(now + this.rateLimitBackoffMs);\n }\n\n private extendFaroSession(config: Config, logDebug: BaseExtension['logDebug']) {\n const SessionExpiredString = `Session expired`;\n\n const sessionTrackingConfig = config.sessionTracking;\n\n if (sessionTrackingConfig?.enabled) {\n const { fetchUserSession, storeUserSession } = getSessionManagerByConfig(sessionTrackingConfig);\n\n getUserSessionUpdater({ fetchUserSession, storeUserSession })({ forceSessionExtend: true });\n\n logDebug(`${SessionExpiredString} created new session.`);\n } else {\n logDebug(`${SessionExpiredString}.`);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/transports/fetch/transport.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseExtension, BaseTransport, createPromiseBuffer, getTransportBody, noop, VERSION } from '@grafana/faro-core';\nimport type { Config, Patterns, PromiseBuffer, TransportItem } from '@grafana/faro-core';\n\nimport { getSessionManagerByConfig } from '../../instrumentations/session/sessionManager';\nimport { getUserSessionUpdater } from '../../instrumentations/session/sessionManager/sessionManagerUtils';\n\nimport type { FetchTransportOptions } from './types';\n\nconst DEFAULT_BUFFER_SIZE = 30;\nconst DEFAULT_CONCURRENCY = 5; // chrome supports 10 total, firefox 17\nconst DEFAULT_RATE_LIMIT_BACKOFF_MS = 5000;\n\nconst BEACON_BODY_SIZE_LIMIT = 60000;\nconst TOO_MANY_REQUESTS = 429;\nconst ACCEPTED = 202;\n\nexport class FetchTransport extends BaseTransport {\n readonly name = '@grafana/faro-web-sdk:transport-fetch';\n readonly version = VERSION;\n\n promiseBuffer: PromiseBuffer<Response | void>;\n\n private readonly rateLimitBackoffMs: number;\n private readonly getNow: () => number;\n private disabledUntil: Date = new Date(0);\n\n constructor(private options: FetchTransportOptions) {\n super();\n\n this.rateLimitBackoffMs = options.defaultRateLimitBackoffMs ?? DEFAULT_RATE_LIMIT_BACKOFF_MS;\n this.getNow = options.getNow ?? (() => Date.now());\n\n this.promiseBuffer = createPromiseBuffer({\n size: options.bufferSize ?? DEFAULT_BUFFER_SIZE,\n concurrency: options.concurrency ?? DEFAULT_CONCURRENCY,\n });\n }\n\n async send(items: TransportItem[]): Promise<void> {\n try {\n if (this.disabledUntil > new Date(this.getNow())) {\n this.logWarn(`Dropping transport item due to too many requests. Backoff until ${this.disabledUntil}`);\n\n return Promise.resolve();\n }\n\n await this.promiseBuffer.add(async () => {\n const body = JSON.stringify(getTransportBody(items));\n\n const { url, requestOptions, apiKey } = this.options;\n\n const { headers = {}, ...restOfRequestOptions } = requestOptions ?? {};\n\n let sessionId;\n const sessionMeta = this.metas.value.session;\n if (sessionMeta != null) {\n sessionId = sessionMeta.id;\n }\n\n const resolvedHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n resolvedHeaders[key] = typeof value === 'function' ? await Promise.resolve(value()) : value;\n }\n\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...resolvedHeaders,\n ...(apiKey ? { 'x-api-key': apiKey } : {}),\n ...(sessionId ? { 'x-faro-session-id': sessionId } : {}),\n },\n body,\n keepalive: body.length <= BEACON_BODY_SIZE_LIMIT,\n ...(restOfRequestOptions ?? {}),\n })\n .then(async (response) => {\n if (response.status === ACCEPTED) {\n const sessionExpired = response.headers.get('X-Faro-Session-Status') === 'invalid';\n\n if (sessionExpired) {\n this.extendFaroSession(this.config, this.logDebug);\n }\n }\n\n if (response.status === TOO_MANY_REQUESTS) {\n this.disabledUntil = this.getRetryAfterDate(response);\n this.logWarn(`Too many requests, backing off until ${this.disabledUntil}`);\n }\n\n // read the body so the connection can be closed\n response.text().catch(noop);\n return response;\n })\n .catch((err) => {\n this.logError('Failed sending payload to the receiver\\n', JSON.parse(body), err);\n });\n });\n } catch (err) {\n this.logError(err);\n }\n }\n\n override getIgnoreUrls(): Patterns {\n return ([this.options.url] as Patterns).concat(this.config.ignoreUrls ?? []);\n }\n\n override isBatched(): boolean {\n return true;\n }\n\n private getRetryAfterDate(response: Response): Date {\n const now = this.getNow();\n const retryAfterHeader = response.headers.get('Retry-After');\n\n if (retryAfterHeader) {\n const delay = Number(retryAfterHeader);\n\n if (!isNaN(delay)) {\n return new Date(delay * 1000 + now);\n }\n\n const date = Date.parse(retryAfterHeader);\n\n if (!isNaN(date)) {\n return new Date(date);\n }\n }\n\n return new Date(now + this.rateLimitBackoffMs);\n }\n\n private extendFaroSession(config: Config, logDebug: BaseExtension['logDebug']) {\n const SessionExpiredString = `Session expired`;\n\n const sessionTrackingConfig = config.sessionTracking;\n\n if (sessionTrackingConfig?.enabled) {\n const { fetchUserSession, storeUserSession } = getSessionManagerByConfig(sessionTrackingConfig);\n\n getUserSessionUpdater({ fetchUserSession, storeUserSession })({ forceSessionExtend: true });\n\n logDebug(`${SessionExpiredString} created new session.`);\n } else {\n logDebug(`${SessionExpiredString}.`);\n }\n }\n}\n"]}
@@ -5,27 +5,23 @@ exports.throttle = throttle;
5
5
  * Tail based throttle which caches the args of the last call and updates
6
6
  */
7
7
  function throttle(callback, delay) {
8
- var pause = false;
9
- var lastPending;
10
- var timeoutBehavior = function () {
8
+ let pause = false;
9
+ let lastPending;
10
+ const timeoutBehavior = () => {
11
11
  if (lastPending == null) {
12
12
  pause = false;
13
13
  return;
14
14
  }
15
- callback.apply(void 0, lastPending);
15
+ callback(...lastPending);
16
16
  lastPending = null;
17
17
  setTimeout(timeoutBehavior, delay);
18
18
  };
19
- return function () {
20
- var args = [];
21
- for (var _i = 0; _i < arguments.length; _i++) {
22
- args[_i] = arguments[_i];
23
- }
19
+ return (...args) => {
24
20
  if (pause) {
25
21
  lastPending = args;
26
22
  return;
27
23
  }
28
- callback.apply(void 0, args);
24
+ callback(...args);
29
25
  pause = true;
30
26
  setTimeout(timeoutBehavior, delay);
31
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/utils/throttle.ts"],"names":[],"mappings":";;AAGA,4BAyBC;AA5BD;;GAEG;AACH,SAAgB,QAAQ,CAAqC,QAAW,EAAE,KAAa;IACrF,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,WAAiC,CAAC;IAEtC,IAAM,eAAe,GAAG;QACtB,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACxB,KAAK,GAAG,KAAK,CAAC;YACd,OAAO;QACT,CAAC;QAED,QAAQ,eAAI,WAAW,EAAE;QACzB,WAAW,GAAG,IAAI,CAAC;QACnB,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,OAAO;QAAC,cAAsB;aAAtB,UAAsB,EAAtB,qBAAsB,EAAtB,IAAsB;YAAtB,yBAAsB;;QAC5B,IAAI,KAAK,EAAE,CAAC;YACV,WAAW,GAAG,IAAI,CAAC;YACnB,OAAO;QACT,CAAC;QAED,QAAQ,eAAI,IAAI,EAAE;QAClB,KAAK,GAAG,IAAI,CAAC;QACb,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Tail based throttle which caches the args of the last call and updates\n */\nexport function throttle<T extends (...args: any[]) => void>(callback: T, delay: number) {\n let pause = false;\n let lastPending: Parameters<T> | null;\n\n const timeoutBehavior = () => {\n if (lastPending == null) {\n pause = false;\n return;\n }\n\n callback(...lastPending);\n lastPending = null;\n setTimeout(timeoutBehavior, delay);\n };\n\n return (...args: Parameters<T>) => {\n if (pause) {\n lastPending = args;\n return;\n }\n\n callback(...args);\n pause = true;\n setTimeout(timeoutBehavior, delay);\n };\n}\n"]}
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/utils/throttle.ts"],"names":[],"mappings":";;AAGA,4BAyBC;AA5BD;;GAEG;AACH,SAAgB,QAAQ,CAAqC,QAAW,EAAE,KAAa;IACrF,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,WAAiC,CAAC;IAEtC,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACxB,KAAK,GAAG,KAAK,CAAC;YACd,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,GAAG,WAAW,CAAC,CAAC;QACzB,WAAW,GAAG,IAAI,CAAC;QACnB,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;QAChC,IAAI,KAAK,EAAE,CAAC;YACV,WAAW,GAAG,IAAI,CAAC;YACnB,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QAClB,KAAK,GAAG,IAAI,CAAC;QACb,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Tail based throttle which caches the args of the last call and updates\n */\nexport function throttle<T extends (...args: any[]) => void>(callback: T, delay: number) {\n let pause = false;\n let lastPending: Parameters<T> | null;\n\n const timeoutBehavior = () => {\n if (lastPending == null) {\n pause = false;\n return;\n }\n\n callback(...lastPending);\n lastPending = null;\n setTimeout(timeoutBehavior, delay);\n };\n\n return (...args: Parameters<T>) => {\n if (pause) {\n lastPending = args;\n return;\n }\n\n callback(...args);\n pause = true;\n setTimeout(timeoutBehavior, delay);\n };\n}\n"]}
@@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getIgnoreUrls = getIgnoreUrls;
4
4
  exports.isUrlIgnored = isUrlIgnored;
5
5
  exports.getUrlFromResource = getUrlFromResource;
6
- var faro_core_1 = require("@grafana/faro-core");
6
+ const faro_core_1 = require("@grafana/faro-core");
7
7
  /**
8
8
  * Retrieves a list of URLs to be ignored by aggregating the ignore URLs from all transports.
9
9
  *
10
10
  * @returns {string[]} An array of URLs to be ignored.
11
11
  */
12
12
  function getIgnoreUrls() {
13
- return faro_core_1.faro.transports.transports.flatMap(function (transport) { return transport.getIgnoreUrls(); });
13
+ return faro_core_1.faro.transports.transports.flatMap((transport) => transport.getIgnoreUrls());
14
14
  }
15
15
  /**
16
16
  * Checks if the given URL should be ignored based on a list of ignored URLs.
@@ -18,9 +18,8 @@ function getIgnoreUrls() {
18
18
  * @param url - The URL to check.
19
19
  * @returns `true` if the URL is in the list of ignored URLs, `false` otherwise.
20
20
  */
21
- function isUrlIgnored(url) {
22
- if (url === void 0) { url = ''; }
23
- return getIgnoreUrls().some(function (ignoredUrl) { return url && url.match(ignoredUrl) != null; });
21
+ function isUrlIgnored(url = '') {
22
+ return getIgnoreUrls().some((ignoredUrl) => url && url.match(ignoredUrl) != null);
24
23
  }
25
24
  /**
26
25
  * Extracts a URL string from the given resource.
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/utils/url.ts"],"names":[],"mappings":";;AAQA,sCAEC;AAQD,oCAEC;AASD,gDAcC;AA3CD,gDAAyE;AAGzE;;;;GAIG;AACH,SAAgB,aAAa;IAC3B,OAAO,gBAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,SAAoB,IAAK,OAAA,SAAS,CAAC,aAAa,EAAE,EAAzB,CAAyB,CAAC,CAAC;AACjG,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,GAAQ;IAAR,oBAAA,EAAA,QAAQ;IACnC,OAAO,aAAa,EAAE,CAAC,IAAI,CAAC,UAAC,UAAU,IAAK,OAAA,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,EAApC,CAAoC,CAAC,CAAC;AACpF,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,QAAa;IAC9C,IAAI,IAAA,oBAAQ,EAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,YAAY,GAAG,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,IAAA,mBAAO,EAAC,QAAQ,CAAC,IAAI,IAAA,sBAAU,EAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,CAAC,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import { faro, isEmpty, isFunction, isString } from '@grafana/faro-core';\nimport type { Patterns, Transport } from '@grafana/faro-core';\n\n/**\n * Retrieves a list of URLs to be ignored by aggregating the ignore URLs from all transports.\n *\n * @returns {string[]} An array of URLs to be ignored.\n */\nexport function getIgnoreUrls(): Patterns {\n return faro.transports.transports.flatMap((transport: Transport) => transport.getIgnoreUrls());\n}\n\n/**\n * Checks if the given URL should be ignored based on a list of ignored URLs.\n *\n * @param url - The URL to check.\n * @returns `true` if the URL is in the list of ignored URLs, `false` otherwise.\n */\nexport function isUrlIgnored(url = ''): boolean {\n return getIgnoreUrls().some((ignoredUrl) => url && url.match(ignoredUrl) != null);\n}\n\n/**\n * Extracts a URL string from the given resource.\n *\n * @param resource - The input resource which can be a string, a URL object, or an object with a `toString` method.\n * @returns The URL as a string if the resource is a valid URL-like object, or `undefined` if the resource is not valid.\n *\n */\nexport function getUrlFromResource(resource: any): string | undefined {\n if (isString(resource)) {\n return resource;\n }\n\n if (resource instanceof URL) {\n return resource.href;\n }\n\n if (!isEmpty(resource) && isFunction(resource?.toString)) {\n return resource.toString();\n }\n\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/utils/url.ts"],"names":[],"mappings":";;AAQA,sCAEC;AAQD,oCAEC;AASD,gDAcC;AA3CD,kDAAyE;AAGzE;;;;GAIG;AACH,SAAgB,aAAa;IAC3B,OAAO,gBAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAoB,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;AACjG,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,GAAG,GAAG,EAAE;IACnC,OAAO,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC;AACpF,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,QAAa;IAC9C,IAAI,IAAA,oBAAQ,EAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,YAAY,GAAG,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,IAAA,mBAAO,EAAC,QAAQ,CAAC,IAAI,IAAA,sBAAU,EAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,CAAC,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import { faro, isEmpty, isFunction, isString } from '@grafana/faro-core';\nimport type { Patterns, Transport } from '@grafana/faro-core';\n\n/**\n * Retrieves a list of URLs to be ignored by aggregating the ignore URLs from all transports.\n *\n * @returns {string[]} An array of URLs to be ignored.\n */\nexport function getIgnoreUrls(): Patterns {\n return faro.transports.transports.flatMap((transport: Transport) => transport.getIgnoreUrls());\n}\n\n/**\n * Checks if the given URL should be ignored based on a list of ignored URLs.\n *\n * @param url - The URL to check.\n * @returns `true` if the URL is in the list of ignored URLs, `false` otherwise.\n */\nexport function isUrlIgnored(url = ''): boolean {\n return getIgnoreUrls().some((ignoredUrl) => url && url.match(ignoredUrl) != null);\n}\n\n/**\n * Extracts a URL string from the given resource.\n *\n * @param resource - The input resource which can be a string, a URL object, or an object with a `toString` method.\n * @returns The URL as a string if the resource is a valid URL-like object, or `undefined` if the resource is not valid.\n *\n */\nexport function getUrlFromResource(resource: any): string | undefined {\n if (isString(resource)) {\n return resource;\n }\n\n if (resource instanceof URL) {\n return resource.href;\n }\n\n if (!isEmpty(resource) && isFunction(resource?.toString)) {\n return resource.toString();\n }\n\n return undefined;\n}\n"]}
@@ -5,7 +5,7 @@ exports.isWebStorageAvailable = isWebStorageAvailable;
5
5
  exports.getItem = getItem;
6
6
  exports.setItem = setItem;
7
7
  exports.removeItem = removeItem;
8
- var faro_core_1 = require("@grafana/faro-core");
8
+ const faro_core_1 = require("@grafana/faro-core");
9
9
  exports.webStorageType = {
10
10
  session: 'sessionStorage',
11
11
  local: 'localStorage',
@@ -18,16 +18,16 @@ exports.webStorageType = {
18
18
  function isWebStorageAvailable(type) {
19
19
  var _a;
20
20
  try {
21
- var storage = void 0;
21
+ let storage;
22
22
  storage = window[type];
23
- var testItem = '__faro_storage_test__';
23
+ const testItem = '__faro_storage_test__';
24
24
  storage.setItem(testItem, testItem);
25
25
  storage.removeItem(testItem);
26
26
  return true;
27
27
  }
28
28
  catch (error) {
29
29
  // the above can throw
30
- (_a = faro_core_1.faro.internalLogger) === null || _a === void 0 ? void 0 : _a.info("Web storage of type ".concat(type, " is not available. Reason: ").concat(error));
30
+ (_a = faro_core_1.faro.internalLogger) === null || _a === void 0 ? void 0 : _a.info(`Web storage of type ${type} is not available. Reason: ${error}`);
31
31
  return false;
32
32
  }
33
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webStorage.js","sourceRoot":"","sources":["../../../src/utils/webStorage.ts"],"names":[],"mappings":";;;AAcA,sDAcC;AAOD,0BAMC;AAQD,0BAQC;AAOD,gCAIC;AApED,gDAA0C;AAE7B,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,gBAAgB;IACzB,KAAK,EAAE,cAAc;CACb,CAAC;AAIX;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,IAAsB;;IAC1D,IAAI,CAAC;QACH,IAAI,OAAO,SAAA,CAAC;QACZ,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAM,QAAQ,GAAG,uBAAuB,CAAC;QACzC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sBAAsB;QACtB,MAAA,gBAAI,CAAC,cAAc,0CAAE,IAAI,CAAC,8BAAuB,IAAI,wCAA8B,KAAK,CAAE,CAAC,CAAC;QAC5F,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,OAAO,CAAC,GAAW,EAAE,mBAAqC;IACxE,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,mBAAqC;IACvF,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,aAAa;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,GAAW,EAAE,mBAAqC;IAC3E,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAEY,QAAA,uBAAuB,GAAG,qBAAqB,CAAC,sBAAc,CAAC,KAAK,CAAC,CAAC;AACtE,QAAA,yBAAyB,GAAG,qBAAqB,CAAC,sBAAc,CAAC,OAAO,CAAC,CAAC;AAEvF,SAAS,yBAAyB,CAAC,mBAAqC;IACtE,IAAI,mBAAmB,KAAK,sBAAc,CAAC,KAAK,EAAE,CAAC;QACjD,OAAO,+BAAuB,CAAC;IACjC,CAAC;IAED,IAAI,mBAAmB,KAAK,sBAAc,CAAC,OAAO,EAAE,CAAC;QACnD,OAAO,iCAAyB,CAAC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { faro } from '@grafana/faro-core';\n\nexport const webStorageType = {\n session: 'sessionStorage',\n local: 'localStorage',\n} as const;\n\ntype StorageMechanism = (typeof webStorageType)[keyof typeof webStorageType];\n\n/**\n * Check if selected web storage mechanism is available.\n * @param type storage mechanism to test availability for.\n * @returns\n */\nexport function isWebStorageAvailable(type: StorageMechanism): boolean {\n try {\n let storage;\n storage = window[type];\n\n const testItem = '__faro_storage_test__';\n storage.setItem(testItem, testItem);\n storage.removeItem(testItem);\n return true;\n } catch (error) {\n // the above can throw\n faro.internalLogger?.info(`Web storage of type ${type} is not available. Reason: ${error}`);\n return false;\n }\n}\n\n/**\n * Get item from SessionStorage or LocalStorage.\n * @param key: the item key.\n * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.\n */\nexport function getItem(key: string, webStorageMechanism: StorageMechanism): string | null {\n if (isWebStorageTypeAvailable(webStorageMechanism)) {\n return window[webStorageMechanism].getItem(key);\n }\n\n return null;\n}\n\n/**\n * Store item in SessionStorage or LocalStorage.\n * @param key: the item key.\n * @param value: the item data.\n * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.\n */\nexport function setItem(key: string, value: string, webStorageMechanism: StorageMechanism): void {\n if (isWebStorageTypeAvailable(webStorageMechanism)) {\n try {\n window[webStorageMechanism].setItem(key, value);\n } catch (_error) {\n // do nothing\n }\n }\n}\n\n/**\n * Remove item from SessionStorage or LocalStorage.\n * @param key: the item key.\n * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.\n */\nexport function removeItem(key: string, webStorageMechanism: StorageMechanism): void {\n if (isWebStorageTypeAvailable(webStorageMechanism)) {\n window[webStorageMechanism].removeItem(key);\n }\n}\n\nexport const isLocalStorageAvailable = isWebStorageAvailable(webStorageType.local);\nexport const isSessionStorageAvailable = isWebStorageAvailable(webStorageType.session);\n\nfunction isWebStorageTypeAvailable(webStorageMechanism: StorageMechanism) {\n if (webStorageMechanism === webStorageType.local) {\n return isLocalStorageAvailable;\n }\n\n if (webStorageMechanism === webStorageType.session) {\n return isSessionStorageAvailable;\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"webStorage.js","sourceRoot":"","sources":["../../../src/utils/webStorage.ts"],"names":[],"mappings":";;;AAcA,sDAcC;AAOD,0BAMC;AAQD,0BAQC;AAOD,gCAIC;AApED,kDAA0C;AAE7B,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,gBAAgB;IACzB,KAAK,EAAE,cAAc;CACb,CAAC;AAIX;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,IAAsB;;IAC1D,IAAI,CAAC;QACH,IAAI,OAAO,CAAC;QACZ,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvB,MAAM,QAAQ,GAAG,uBAAuB,CAAC;QACzC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sBAAsB;QACtB,MAAA,gBAAI,CAAC,cAAc,0CAAE,IAAI,CAAC,uBAAuB,IAAI,8BAA8B,KAAK,EAAE,CAAC,CAAC;QAC5F,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,OAAO,CAAC,GAAW,EAAE,mBAAqC;IACxE,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,mBAAqC;IACvF,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,aAAa;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,GAAW,EAAE,mBAAqC;IAC3E,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAEY,QAAA,uBAAuB,GAAG,qBAAqB,CAAC,sBAAc,CAAC,KAAK,CAAC,CAAC;AACtE,QAAA,yBAAyB,GAAG,qBAAqB,CAAC,sBAAc,CAAC,OAAO,CAAC,CAAC;AAEvF,SAAS,yBAAyB,CAAC,mBAAqC;IACtE,IAAI,mBAAmB,KAAK,sBAAc,CAAC,KAAK,EAAE,CAAC;QACjD,OAAO,+BAAuB,CAAC;IACjC,CAAC;IAED,IAAI,mBAAmB,KAAK,sBAAc,CAAC,OAAO,EAAE,CAAC;QACnD,OAAO,iCAAyB,CAAC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { faro } from '@grafana/faro-core';\n\nexport const webStorageType = {\n session: 'sessionStorage',\n local: 'localStorage',\n} as const;\n\ntype StorageMechanism = (typeof webStorageType)[keyof typeof webStorageType];\n\n/**\n * Check if selected web storage mechanism is available.\n * @param type storage mechanism to test availability for.\n * @returns\n */\nexport function isWebStorageAvailable(type: StorageMechanism): boolean {\n try {\n let storage;\n storage = window[type];\n\n const testItem = '__faro_storage_test__';\n storage.setItem(testItem, testItem);\n storage.removeItem(testItem);\n return true;\n } catch (error) {\n // the above can throw\n faro.internalLogger?.info(`Web storage of type ${type} is not available. Reason: ${error}`);\n return false;\n }\n}\n\n/**\n * Get item from SessionStorage or LocalStorage.\n * @param key: the item key.\n * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.\n */\nexport function getItem(key: string, webStorageMechanism: StorageMechanism): string | null {\n if (isWebStorageTypeAvailable(webStorageMechanism)) {\n return window[webStorageMechanism].getItem(key);\n }\n\n return null;\n}\n\n/**\n * Store item in SessionStorage or LocalStorage.\n * @param key: the item key.\n * @param value: the item data.\n * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.\n */\nexport function setItem(key: string, value: string, webStorageMechanism: StorageMechanism): void {\n if (isWebStorageTypeAvailable(webStorageMechanism)) {\n try {\n window[webStorageMechanism].setItem(key, value);\n } catch (_error) {\n // do nothing\n }\n }\n}\n\n/**\n * Remove item from SessionStorage or LocalStorage.\n * @param key: the item key.\n * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.\n */\nexport function removeItem(key: string, webStorageMechanism: StorageMechanism): void {\n if (isWebStorageTypeAvailable(webStorageMechanism)) {\n window[webStorageMechanism].removeItem(key);\n }\n}\n\nexport const isLocalStorageAvailable = isWebStorageAvailable(webStorageType.local);\nexport const isSessionStorageAvailable = isWebStorageAvailable(webStorageType.session);\n\nfunction isWebStorageTypeAvailable(webStorageMechanism: StorageMechanism) {\n if (webStorageMechanism === webStorageType.local) {\n return isLocalStorageAvailable;\n }\n\n if (webStorageMechanism === webStorageType.session) {\n return isSessionStorageAvailable;\n }\n\n return false;\n}\n"]}
@@ -19,6 +19,7 @@ export function getErrorDetails(evt) {
19
19
  value = message ? `${type}: ${message}` : type;
20
20
  }
21
21
  else if (isError(evt)) {
22
+ type = evt.name;
22
23
  value = evt.message;
23
24
  stackFrames = getStackFramesFromError(evt);
24
25
  }