@grafana/faro-web-sdk 2.0.0-beta-2 → 2.0.2

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 (174) hide show
  1. package/dist/bundle/faro-web-sdk.iife.js +1 -1
  2. package/dist/bundle/types/index.d.ts +3 -3
  3. package/dist/bundle/types/instrumentations/_internal/activityWindowTracker.d.ts +36 -0
  4. package/dist/bundle/types/instrumentations/_internal/monitors/const.d.ts +4 -0
  5. package/dist/bundle/types/instrumentations/_internal/monitors/domMutationMonitor.d.ts +4 -0
  6. package/dist/bundle/types/instrumentations/{userActions → _internal/monitors}/httpRequestMonitor.d.ts +1 -3
  7. package/dist/bundle/types/instrumentations/_internal/monitors/index.d.ts +5 -0
  8. package/dist/bundle/types/instrumentations/_internal/monitors/interactionMonitor.d.ts +8 -0
  9. package/dist/{types/instrumentations/userActions → bundle/types/instrumentations/_internal/monitors}/performanceEntriesMonitor.d.ts +1 -0
  10. package/dist/bundle/types/instrumentations/_internal/monitors/urlChangeMonitor.d.ts +10 -0
  11. package/dist/bundle/types/instrumentations/console/instrumentation.d.ts +1 -1
  12. package/dist/bundle/types/instrumentations/csp/instrumentation.d.ts +1 -1
  13. package/dist/bundle/types/instrumentations/errors/instrumentation.d.ts +1 -1
  14. package/dist/bundle/types/instrumentations/index.d.ts +1 -0
  15. package/dist/bundle/types/instrumentations/navigation/index.d.ts +1 -0
  16. package/dist/bundle/types/instrumentations/navigation/instrumentation.d.ts +6 -0
  17. package/dist/bundle/types/instrumentations/performance/instrumentation.d.ts +1 -1
  18. package/dist/bundle/types/instrumentations/session/instrumentation.d.ts +1 -1
  19. package/dist/bundle/types/instrumentations/userActions/const.d.ts +1 -4
  20. package/dist/bundle/types/instrumentations/userActions/index.d.ts +3 -2
  21. package/dist/bundle/types/instrumentations/userActions/instrumentation.d.ts +1 -1
  22. package/dist/bundle/types/instrumentations/userActions/processUserActionEventHandler.d.ts +1 -4
  23. package/dist/bundle/types/instrumentations/userActions/userActionController.d.ts +22 -0
  24. package/dist/bundle/types/instrumentations/userActions/util.d.ts +4 -0
  25. package/dist/bundle/types/instrumentations/view/instrumentation.d.ts +1 -1
  26. package/dist/bundle/types/instrumentations/webVitals/instrumentation.d.ts +1 -2
  27. package/dist/bundle/types/transports/console/transport.d.ts +1 -1
  28. package/dist/bundle/types/transports/fetch/transport.d.ts +1 -1
  29. package/dist/cjs/config/getWebInstrumentations.js +1 -0
  30. package/dist/cjs/config/getWebInstrumentations.js.map +1 -1
  31. package/dist/cjs/config/makeCoreConfig.js +20 -9
  32. package/dist/cjs/config/makeCoreConfig.js.map +1 -1
  33. package/dist/cjs/index.js +3 -2
  34. package/dist/cjs/index.js.map +1 -1
  35. package/dist/cjs/instrumentations/_internal/activityWindowTracker.js +140 -0
  36. package/dist/cjs/instrumentations/_internal/activityWindowTracker.js.map +1 -0
  37. package/dist/cjs/instrumentations/_internal/monitors/const.js +8 -0
  38. package/dist/cjs/instrumentations/_internal/monitors/const.js.map +1 -0
  39. package/dist/cjs/instrumentations/_internal/monitors/domMutationMonitor.js +34 -0
  40. package/dist/cjs/instrumentations/_internal/monitors/domMutationMonitor.js.map +1 -0
  41. package/dist/cjs/instrumentations/{userActions → _internal/monitors}/httpRequestMonitor.js +45 -17
  42. package/dist/cjs/instrumentations/_internal/monitors/httpRequestMonitor.js.map +1 -0
  43. package/dist/cjs/instrumentations/_internal/monitors/index.js +14 -0
  44. package/dist/cjs/instrumentations/_internal/monitors/index.js.map +1 -0
  45. package/dist/cjs/instrumentations/_internal/monitors/interactionMonitor.js +36 -0
  46. package/dist/cjs/instrumentations/_internal/monitors/interactionMonitor.js.map +1 -0
  47. package/dist/cjs/instrumentations/_internal/monitors/performanceEntriesMonitor.js +35 -0
  48. package/dist/cjs/instrumentations/_internal/monitors/performanceEntriesMonitor.js.map +1 -0
  49. package/dist/cjs/instrumentations/_internal/monitors/types.js.map +1 -0
  50. package/dist/cjs/instrumentations/_internal/monitors/urlChangeMonitor.js +138 -0
  51. package/dist/cjs/instrumentations/_internal/monitors/urlChangeMonitor.js.map +1 -0
  52. package/dist/cjs/instrumentations/index.js +3 -1
  53. package/dist/cjs/instrumentations/index.js.map +1 -1
  54. package/dist/cjs/instrumentations/navigation/index.js +6 -0
  55. package/dist/cjs/instrumentations/navigation/index.js.map +1 -0
  56. package/dist/cjs/instrumentations/navigation/instrumentation.js +68 -0
  57. package/dist/cjs/instrumentations/navigation/instrumentation.js.map +1 -0
  58. package/dist/cjs/instrumentations/performance/resource.js +4 -6
  59. package/dist/cjs/instrumentations/performance/resource.js.map +1 -1
  60. package/dist/cjs/instrumentations/userActions/const.js +5 -5
  61. package/dist/cjs/instrumentations/userActions/const.js.map +1 -1
  62. package/dist/cjs/instrumentations/userActions/index.js +3 -2
  63. package/dist/cjs/instrumentations/userActions/index.js.map +1 -1
  64. package/dist/cjs/instrumentations/userActions/instrumentation.js +2 -2
  65. package/dist/cjs/instrumentations/userActions/instrumentation.js.map +1 -1
  66. package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js +8 -56
  67. package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js.map +1 -1
  68. package/dist/cjs/instrumentations/userActions/userActionController.js +125 -0
  69. package/dist/cjs/instrumentations/userActions/userActionController.js.map +1 -0
  70. package/dist/cjs/instrumentations/userActions/util.js +20 -0
  71. package/dist/cjs/instrumentations/userActions/util.js.map +1 -1
  72. package/dist/cjs/instrumentations/webVitals/instrumentation.js +1 -10
  73. package/dist/cjs/instrumentations/webVitals/instrumentation.js.map +1 -1
  74. package/dist/cjs/utils/webStorage.js +1 -1
  75. package/dist/cjs/utils/webStorage.js.map +1 -1
  76. package/dist/esm/config/getWebInstrumentations.js +2 -1
  77. package/dist/esm/config/getWebInstrumentations.js.map +1 -1
  78. package/dist/esm/config/makeCoreConfig.js +19 -9
  79. package/dist/esm/config/makeCoreConfig.js.map +1 -1
  80. package/dist/esm/index.js +1 -1
  81. package/dist/esm/index.js.map +1 -1
  82. package/dist/esm/instrumentations/_internal/activityWindowTracker.js +113 -0
  83. package/dist/esm/instrumentations/_internal/activityWindowTracker.js.map +1 -0
  84. package/dist/esm/instrumentations/_internal/monitors/const.js +5 -0
  85. package/dist/esm/instrumentations/_internal/monitors/const.js.map +1 -0
  86. package/dist/esm/instrumentations/_internal/monitors/domMutationMonitor.js +30 -0
  87. package/dist/esm/instrumentations/_internal/monitors/domMutationMonitor.js.map +1 -0
  88. package/dist/esm/instrumentations/{userActions → _internal/monitors}/httpRequestMonitor.js +44 -17
  89. package/dist/esm/instrumentations/_internal/monitors/httpRequestMonitor.js.map +1 -0
  90. package/dist/esm/instrumentations/_internal/monitors/index.js +6 -0
  91. package/dist/esm/instrumentations/_internal/monitors/index.js.map +1 -0
  92. package/dist/esm/instrumentations/_internal/monitors/interactionMonitor.js +31 -0
  93. package/dist/esm/instrumentations/_internal/monitors/interactionMonitor.js.map +1 -0
  94. package/dist/esm/instrumentations/_internal/monitors/performanceEntriesMonitor.js +31 -0
  95. package/dist/esm/instrumentations/_internal/monitors/performanceEntriesMonitor.js.map +1 -0
  96. package/dist/esm/instrumentations/_internal/monitors/types.js.map +1 -0
  97. package/dist/esm/instrumentations/_internal/monitors/urlChangeMonitor.js +125 -0
  98. package/dist/esm/instrumentations/_internal/monitors/urlChangeMonitor.js.map +1 -0
  99. package/dist/esm/instrumentations/index.js +1 -0
  100. package/dist/esm/instrumentations/index.js.map +1 -1
  101. package/dist/esm/instrumentations/navigation/index.js +2 -0
  102. package/dist/esm/instrumentations/navigation/index.js.map +1 -0
  103. package/dist/esm/instrumentations/navigation/instrumentation.js +46 -0
  104. package/dist/esm/instrumentations/navigation/instrumentation.js.map +1 -0
  105. package/dist/esm/instrumentations/performance/resource.js +4 -6
  106. package/dist/esm/instrumentations/performance/resource.js.map +1 -1
  107. package/dist/esm/instrumentations/userActions/const.js +1 -4
  108. package/dist/esm/instrumentations/userActions/const.js.map +1 -1
  109. package/dist/esm/instrumentations/userActions/index.js +2 -1
  110. package/dist/esm/instrumentations/userActions/index.js.map +1 -1
  111. package/dist/esm/instrumentations/userActions/instrumentation.js +2 -2
  112. package/dist/esm/instrumentations/userActions/instrumentation.js.map +1 -1
  113. package/dist/esm/instrumentations/userActions/processUserActionEventHandler.js +9 -55
  114. package/dist/esm/instrumentations/userActions/processUserActionEventHandler.js.map +1 -1
  115. package/dist/esm/instrumentations/userActions/userActionController.js +117 -0
  116. package/dist/esm/instrumentations/userActions/userActionController.js.map +1 -0
  117. package/dist/esm/instrumentations/userActions/util.js +17 -0
  118. package/dist/esm/instrumentations/userActions/util.js.map +1 -1
  119. package/dist/esm/instrumentations/webVitals/instrumentation.js +1 -10
  120. package/dist/esm/instrumentations/webVitals/instrumentation.js.map +1 -1
  121. package/dist/esm/utils/webStorage.js +1 -1
  122. package/dist/esm/utils/webStorage.js.map +1 -1
  123. package/dist/types/index.d.ts +3 -3
  124. package/dist/types/instrumentations/_internal/activityWindowTracker.d.ts +36 -0
  125. package/dist/types/instrumentations/_internal/monitors/const.d.ts +4 -0
  126. package/dist/types/instrumentations/_internal/monitors/domMutationMonitor.d.ts +4 -0
  127. package/dist/types/instrumentations/{userActions → _internal/monitors}/httpRequestMonitor.d.ts +1 -3
  128. package/dist/types/instrumentations/_internal/monitors/index.d.ts +5 -0
  129. package/dist/types/instrumentations/_internal/monitors/interactionMonitor.d.ts +8 -0
  130. package/dist/{bundle/types/instrumentations/userActions → types/instrumentations/_internal/monitors}/performanceEntriesMonitor.d.ts +1 -0
  131. package/dist/types/instrumentations/_internal/monitors/urlChangeMonitor.d.ts +10 -0
  132. package/dist/types/instrumentations/console/instrumentation.d.ts +1 -1
  133. package/dist/types/instrumentations/csp/instrumentation.d.ts +1 -1
  134. package/dist/types/instrumentations/errors/instrumentation.d.ts +1 -1
  135. package/dist/types/instrumentations/index.d.ts +1 -0
  136. package/dist/types/instrumentations/navigation/index.d.ts +1 -0
  137. package/dist/types/instrumentations/navigation/instrumentation.d.ts +6 -0
  138. package/dist/types/instrumentations/performance/instrumentation.d.ts +1 -1
  139. package/dist/types/instrumentations/session/instrumentation.d.ts +1 -1
  140. package/dist/types/instrumentations/userActions/const.d.ts +1 -4
  141. package/dist/types/instrumentations/userActions/index.d.ts +3 -2
  142. package/dist/types/instrumentations/userActions/instrumentation.d.ts +1 -1
  143. package/dist/types/instrumentations/userActions/processUserActionEventHandler.d.ts +1 -4
  144. package/dist/types/instrumentations/userActions/userActionController.d.ts +22 -0
  145. package/dist/types/instrumentations/userActions/util.d.ts +4 -0
  146. package/dist/types/instrumentations/view/instrumentation.d.ts +1 -1
  147. package/dist/types/instrumentations/webVitals/instrumentation.d.ts +1 -2
  148. package/dist/types/transports/console/transport.d.ts +1 -1
  149. package/dist/types/transports/fetch/transport.d.ts +1 -1
  150. package/package.json +10 -9
  151. package/dist/bundle/types/instrumentations/userActions/domMutationMonitor.d.ts +0 -2
  152. package/dist/bundle/types/instrumentations/webVitals/webVitalsBasic.d.ts +0 -14
  153. package/dist/cjs/instrumentations/userActions/domMutationMonitor.js +0 -19
  154. package/dist/cjs/instrumentations/userActions/domMutationMonitor.js.map +0 -1
  155. package/dist/cjs/instrumentations/userActions/httpRequestMonitor.js.map +0 -1
  156. package/dist/cjs/instrumentations/userActions/performanceEntriesMonitor.js +0 -17
  157. package/dist/cjs/instrumentations/userActions/performanceEntriesMonitor.js.map +0 -1
  158. package/dist/cjs/instrumentations/userActions/types.js.map +0 -1
  159. package/dist/cjs/instrumentations/webVitals/webVitalsBasic.js +0 -36
  160. package/dist/cjs/instrumentations/webVitals/webVitalsBasic.js.map +0 -1
  161. package/dist/esm/instrumentations/userActions/domMutationMonitor.js +0 -16
  162. package/dist/esm/instrumentations/userActions/domMutationMonitor.js.map +0 -1
  163. package/dist/esm/instrumentations/userActions/httpRequestMonitor.js.map +0 -1
  164. package/dist/esm/instrumentations/userActions/performanceEntriesMonitor.js +0 -14
  165. package/dist/esm/instrumentations/userActions/performanceEntriesMonitor.js.map +0 -1
  166. package/dist/esm/instrumentations/userActions/types.js.map +0 -1
  167. package/dist/esm/instrumentations/webVitals/webVitalsBasic.js +0 -28
  168. package/dist/esm/instrumentations/webVitals/webVitalsBasic.js.map +0 -1
  169. package/dist/types/instrumentations/userActions/domMutationMonitor.d.ts +0 -2
  170. package/dist/types/instrumentations/webVitals/webVitalsBasic.d.ts +0 -14
  171. /package/dist/bundle/types/instrumentations/{userActions → _internal/monitors}/types.d.ts +0 -0
  172. /package/dist/cjs/instrumentations/{userActions → _internal/monitors}/types.js +0 -0
  173. /package/dist/esm/instrumentations/{userActions → _internal/monitors}/types.js +0 -0
  174. /package/dist/types/instrumentations/{userActions → _internal/monitors}/types.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/index.ts"],"names":[],"mappings":";;;AAAA,qDAA8D;AAArD,4HAAA,yBAAyB,OAAA;AASlC,iCAKiB;AAJf,kHAAA,yBAAyB,OAAA;AACzB,sHAAA,6BAA6B,OAAA;AAC7B,wHAAA,+BAA+B,OAAA;AAC/B,gHAAA,uBAAuB,OAAA","sourcesContent":["export { UserActionInstrumentation } from './instrumentation';\n\nexport type {\n DomMutationMessage,\n HttpRequestEndMessage,\n HttpRequestStartMessage,\n HttpRequestMessagePayload,\n} from './types';\n\nexport {\n MESSAGE_TYPE_DOM_MUTATION,\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n userActionDataAttribute,\n} from './const';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/index.ts"],"names":[],"mappings":";;;AAAA,qDAA8D;AAArD,4HAAA,yBAAyB,OAAA;AASlC,qDAIqC;AAHnC,kHAAA,yBAAyB,OAAA;AACzB,sHAAA,6BAA6B,OAAA;AAC7B,wHAAA,+BAA+B,OAAA;AAGjC,iCAAkD;AAAzC,gHAAA,uBAAuB,OAAA","sourcesContent":["export { UserActionInstrumentation } from './instrumentation';\n\nexport type {\n DomMutationMessage,\n HttpRequestEndMessage,\n HttpRequestStartMessage,\n HttpRequestMessagePayload,\n} from '../_internal/monitors/types';\n\nexport {\n MESSAGE_TYPE_DOM_MUTATION,\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n} from '../_internal/monitors/const';\n\nexport { userActionDataAttribute } from './const';\n"]}
@@ -27,7 +27,7 @@ var UserActionInstrumentation = /** @class */ (function (_super) {
27
27
  return _this;
28
28
  }
29
29
  UserActionInstrumentation.prototype.initialize = function () {
30
- var _a = (0, processUserActionEventHandler_1.getUserEventHandler)(faro_core_1.faro), processUserEvent = _a.processUserEvent, proceessUserActionStarted = _a.proceessUserActionStarted;
30
+ var _a = (0, processUserActionEventHandler_1.getUserEventHandler)(faro_core_1.faro), processUserEvent = _a.processUserEvent, processUserActionStarted = _a.processUserActionStarted;
31
31
  window.addEventListener('pointerdown', processUserEvent);
32
32
  window.addEventListener('keydown', function (ev) {
33
33
  if ([' ', 'Enter'].includes(ev.key)) {
@@ -37,7 +37,7 @@ var UserActionInstrumentation = /** @class */ (function (_super) {
37
37
  this._userActionSub = faro_core_1.userActionsMessageBus.subscribe(function (_a) {
38
38
  var type = _a.type, userAction = _a.userAction;
39
39
  if (type === 'user_action_start') {
40
- proceessUserActionStarted(userAction);
40
+ processUserActionStarted(userAction);
41
41
  }
42
42
  });
43
43
  };
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAkH;AAElH,iFAAsE;AAEtE;IAA+C,6CAAmB;IAAlE;;QACW,UAAI,GAAG,mDAAmD,CAAC;QAC3D,aAAO,GAAG,mBAAO,CAAC;;IAuB7B,CAAC;IAnBC,8CAAU,GAAV;QACQ,IAAA,KAAkD,IAAA,mDAAmB,EAAC,gBAAI,CAAC,EAAzE,gBAAgB,sBAAA,EAAE,yBAAyB,+BAA8B,CAAC;QAClF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACzD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAC,EAAiB;YACnD,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,iCAAqB,CAAC,SAAS,CAAC,UAAC,EAAoB;gBAAlB,IAAI,UAAA,EAAE,UAAU,gBAAA;YACvE,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACjC,yBAAyB,CAAC,UAAU,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2CAAO,GAAP;;QACE,MAAA,IAAI,CAAC,cAAc,0CAAE,WAAW,EAAE,CAAC;IACrC,CAAC;IACH,gCAAC;AAAD,CAAC,AAzBD,CAA+C,+BAAmB,GAyBjE;AAzBY,8DAAyB","sourcesContent":["import { BaseInstrumentation, faro, type Subscription, userActionsMessageBus, VERSION } from '@grafana/faro-core';\n\nimport { getUserEventHandler } from './processUserActionEventHandler';\n\nexport class UserActionInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-user-action';\n readonly version = VERSION;\n\n private _userActionSub?: Subscription;\n\n initialize(): void {\n const { processUserEvent, proceessUserActionStarted } = getUserEventHandler(faro);\n window.addEventListener('pointerdown', processUserEvent);\n window.addEventListener('keydown', (ev: KeyboardEvent) => {\n if ([' ', 'Enter'].includes(ev.key)) {\n processUserEvent(ev);\n }\n });\n\n this._userActionSub = userActionsMessageBus.subscribe(({ type, userAction }) => {\n if (type === 'user_action_start') {\n proceessUserActionStarted(userAction);\n }\n });\n }\n\n destroy() {\n this._userActionSub?.unsubscribe();\n }\n}\n"]}
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAkH;AAElH,iFAAsE;AAEtE;IAA+C,6CAAmB;IAAlE;;QACW,UAAI,GAAG,mDAAmD,CAAC;QAC3D,aAAO,GAAG,mBAAO,CAAC;;IAuB7B,CAAC;IAnBC,8CAAU,GAAV;QACQ,IAAA,KAAiD,IAAA,mDAAmB,EAAC,gBAAI,CAAC,EAAxE,gBAAgB,sBAAA,EAAE,wBAAwB,8BAA8B,CAAC;QACjF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACzD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAC,EAAiB;YACnD,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,iCAAqB,CAAC,SAAS,CAAC,UAAC,EAAoB;gBAAlB,IAAI,UAAA,EAAE,UAAU,gBAAA;YACvE,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACjC,wBAAwB,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2CAAO,GAAP;;QACE,MAAA,IAAI,CAAC,cAAc,0CAAE,WAAW,EAAE,CAAC;IACrC,CAAC;IACH,gCAAC;AAAD,CAAC,AAzBD,CAA+C,+BAAmB,GAyBjE;AAzBY,8DAAyB","sourcesContent":["import { BaseInstrumentation, faro, type Subscription, userActionsMessageBus, VERSION } from '@grafana/faro-core';\n\nimport { getUserEventHandler } from './processUserActionEventHandler';\n\nexport class UserActionInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-user-action';\n readonly version = VERSION;\n\n private _userActionSub?: Subscription;\n\n initialize(): void {\n const { processUserEvent, processUserActionStarted } = getUserEventHandler(faro);\n window.addEventListener('pointerdown', processUserEvent);\n window.addEventListener('keydown', (ev: KeyboardEvent) => {\n if ([' ', 'Enter'].includes(ev.key)) {\n processUserEvent(ev);\n }\n });\n\n this._userActionSub = userActionsMessageBus.subscribe(({ type, userAction }) => {\n if (type === 'user_action_start') {\n processUserActionStarted(userAction);\n }\n });\n }\n\n destroy() {\n this._userActionSub?.unsubscribe();\n }\n}\n"]}
@@ -3,70 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getUserEventHandler = getUserEventHandler;
4
4
  exports.getUserActionNameFromElement = getUserActionNameFromElement;
5
5
  exports.unsubscribeAllMonitors = unsubscribeAllMonitors;
6
- exports.isRequestStartMessage = isRequestStartMessage;
7
- exports.isRequestEndMessage = isRequestEndMessage;
8
- var faro_core_1 = require("@grafana/faro-core");
9
6
  var const_1 = require("./const");
10
- var domMutationMonitor_1 = require("./domMutationMonitor");
11
- var httpRequestMonitor_1 = require("./httpRequestMonitor");
12
- var performanceEntriesMonitor_1 = require("./performanceEntriesMonitor");
7
+ var userActionController_1 = require("./userActionController");
13
8
  var util_1 = require("./util");
14
9
  function getUserEventHandler(faro) {
15
10
  var api = faro.api, config = faro.config;
16
- var httpMonitor = (0, httpRequestMonitor_1.monitorHttpRequests)();
17
- var domMutationsMonitor = (0, domMutationMonitor_1.monitorDomMutations)();
18
- var performanceEntriesMonitor = (0, performanceEntriesMonitor_1.monitorPerformanceEntries)();
19
11
  function processUserEvent(event) {
20
- var _a;
21
- var userActionName = getUserActionNameFromElement(event.target, (_a = config.trackUserActionsDataAttributeName) !== null && _a !== void 0 ? _a : const_1.userActionDataAttributeParsed);
12
+ var _a, _b;
13
+ var userActionName = getUserActionNameFromElement(event.target, (_b = (_a = config.userActionsInstrumentation) === null || _a === void 0 ? void 0 : _a.dataAttributeName) !== null && _b !== void 0 ? _b : const_1.userActionDataAttributeParsed);
22
14
  // We don't have a data attribute
23
15
  if (!userActionName) {
24
16
  return;
25
17
  }
26
18
  var userAction = api.startUserAction(userActionName, {}, { triggerName: event.type });
27
19
  if (userAction) {
28
- proceessUserActionStarted(userAction);
20
+ processUserActionStarted(userAction);
29
21
  }
30
22
  }
31
- function proceessUserActionStarted(userAction) {
32
- var runningRequests = new Map();
33
- var allMonitorsSub = new faro_core_1.Observable()
34
- .merge(httpMonitor, domMutationsMonitor, performanceEntriesMonitor)
35
- .takeWhile(function () { return [faro_core_1.UserActionState.Started, faro_core_1.UserActionState.Halted].includes(userAction.getState()); })
36
- .filter(function (msg) {
37
- // If the user action is in halt state, we only keep listening to ended http requests
38
- if (userAction.getState() === faro_core_1.UserActionState.Halted &&
39
- !(isRequestEndMessage(msg) && runningRequests.has(msg.request.requestId))) {
40
- return false;
41
- }
42
- return true;
43
- })
44
- .subscribe(function (msg) {
45
- if (isRequestStartMessage(msg)) {
46
- // An action is on halt if it has pending items, like pending HTTP requests.
47
- // In this case we start a separate timeout to wait for the requests to finish
48
- // If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)
49
- // But we are still subscribed to
50
- runningRequests.set(msg.request.requestId, msg.request);
51
- }
52
- if (isRequestEndMessage(msg)) {
53
- runningRequests.delete(msg.request.requestId);
54
- }
55
- if (!isRequestEndMessage(msg)) {
56
- userAction.extend(function () { return runningRequests.size > 0; });
57
- }
58
- else if (userAction.getState() === faro_core_1.UserActionState.Halted && runningRequests.size === 0) {
59
- userAction.end();
60
- }
61
- });
62
- userAction
63
- .filter(function (v) { return [faro_core_1.UserActionState.Ended, faro_core_1.UserActionState.Cancelled].includes(v); })
64
- .first()
65
- .subscribe(function () {
66
- unsubscribeAllMonitors(allMonitorsSub);
67
- });
23
+ function processUserActionStarted(userAction) {
24
+ var internalUserAction = userAction;
25
+ new userActionController_1.UserActionController(internalUserAction).attach();
68
26
  }
69
- return { processUserEvent: processUserEvent, proceessUserActionStarted: proceessUserActionStarted };
27
+ return { processUserEvent: processUserEvent, processUserActionStarted: processUserActionStarted };
70
28
  }
71
29
  function getUserActionNameFromElement(element, dataAttributeName) {
72
30
  var parsedDataAttributeName = (0, util_1.convertDataAttributeName)(dataAttributeName);
@@ -82,10 +40,4 @@ function unsubscribeAllMonitors(allMonitorsSub) {
82
40
  allMonitorsSub === null || allMonitorsSub === void 0 ? void 0 : allMonitorsSub.unsubscribe();
83
41
  allMonitorsSub = undefined;
84
42
  }
85
- function isRequestStartMessage(msg) {
86
- return msg.type === const_1.MESSAGE_TYPE_HTTP_REQUEST_START;
87
- }
88
- function isRequestEndMessage(msg) {
89
- return msg.type === const_1.MESSAGE_TYPE_HTTP_REQUEST_END;
90
- }
91
43
  //# sourceMappingURL=processUserActionEventHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processUserActionEventHandler.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/processUserActionEventHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, UserActionState } from '@grafana/faro-core';\nimport type { Faro, Subscription, UserActionInterface } from '@grafana/faro-core';\n\nimport {\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n userActionDataAttributeParsed as userActionDataAttribute,\n} from './const';\nimport { monitorDomMutations } from './domMutationMonitor';\nimport { monitorHttpRequests } from './httpRequestMonitor';\nimport { monitorPerformanceEntries } from './performanceEntriesMonitor';\nimport type { HttpRequestEndMessage, HttpRequestMessagePayload, HttpRequestStartMessage } from './types';\nimport { convertDataAttributeName } from './util';\n\nexport function getUserEventHandler(faro: Faro) {\n const { api, config } = faro;\n\n const httpMonitor = monitorHttpRequests();\n const domMutationsMonitor = monitorDomMutations();\n const performanceEntriesMonitor = monitorPerformanceEntries();\n\n function processUserEvent(event: PointerEvent | KeyboardEvent) {\n const userActionName = getUserActionNameFromElement(\n event.target as HTMLElement,\n config.trackUserActionsDataAttributeName ?? userActionDataAttribute\n );\n\n // We don't have a data attribute\n if (!userActionName) {\n return;\n }\n\n const userAction = api.startUserAction(userActionName, {}, { triggerName: event.type });\n if (userAction) {\n proceessUserActionStarted(userAction);\n }\n }\n\n function proceessUserActionStarted(userAction: UserActionInterface) {\n const runningRequests = new Map<string, HttpRequestMessagePayload>();\n const allMonitorsSub = new Observable()\n .merge(httpMonitor, domMutationsMonitor, performanceEntriesMonitor)\n .takeWhile(() => [UserActionState.Started, UserActionState.Halted].includes(userAction.getState()))\n .filter((msg) => {\n // If the user action is in halt state, we only keep listening to ended http requests\n if (\n userAction.getState() === UserActionState.Halted &&\n !(isRequestEndMessage(msg) && runningRequests.has(msg.request.requestId))\n ) {\n return false;\n }\n\n return true;\n })\n .subscribe((msg) => {\n if (isRequestStartMessage(msg)) {\n // An action is on halt if it has pending items, like pending HTTP requests.\n // In this case we start a separate timeout to wait for the requests to finish\n // If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)\n // But we are still subscribed to\n runningRequests.set(msg.request.requestId, msg.request);\n }\n\n if (isRequestEndMessage(msg)) {\n runningRequests.delete(msg.request.requestId);\n }\n\n if (!isRequestEndMessage(msg)) {\n userAction.extend(() => runningRequests.size > 0);\n } else if (userAction.getState() === UserActionState.Halted && runningRequests.size === 0) {\n userAction.end();\n }\n });\n\n (userAction as unknown as Observable)\n .filter((v: UserActionState) => [UserActionState.Ended, UserActionState.Cancelled].includes(v))\n .first()\n .subscribe(() => {\n unsubscribeAllMonitors(allMonitorsSub);\n });\n }\n\n return { processUserEvent, proceessUserActionStarted };\n}\n\nexport function getUserActionNameFromElement(element: HTMLElement, dataAttributeName: string): string | undefined {\n const parsedDataAttributeName = convertDataAttributeName(dataAttributeName);\n const dataset = element.dataset;\n\n for (const key in dataset) {\n if (key === parsedDataAttributeName) {\n return dataset[key];\n }\n }\n\n return undefined;\n}\n\nexport function unsubscribeAllMonitors(allMonitorsSub: Subscription | undefined) {\n allMonitorsSub?.unsubscribe();\n allMonitorsSub = undefined;\n}\n\nexport function isRequestStartMessage(msg: any): msg is HttpRequestStartMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_START;\n}\n\nexport function isRequestEndMessage(msg: any): msg is HttpRequestEndMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_END;\n}\n"]}
1
+ {"version":3,"file":"processUserActionEventHandler.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/processUserActionEventHandler.ts"],"names":[],"mappings":";;AAMA,kDA0BC;AAED,oEAWC;AAED,wDAGC;AAhDD,iCAAmF;AACnF,+DAA8D;AAC9D,+BAAkD;AAElD,SAAgB,mBAAmB,CAAC,IAAU;IACpC,IAAA,GAAG,GAAa,IAAI,IAAjB,EAAE,MAAM,GAAK,IAAI,OAAT,CAAU;IAE7B,SAAS,gBAAgB,CAAC,KAAmC;;QAC3D,IAAM,cAAc,GAAG,4BAA4B,CACjD,KAAK,CAAC,MAAqB,EAC3B,MAAA,MAAA,MAAM,CAAC,0BAA0B,0CAAE,iBAAiB,mCAAI,qCAAuB,CAChF,CAAC;QAEF,iCAAiC;QACjC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAM,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,UAAU,EAAE,CAAC;YACf,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,SAAS,wBAAwB,CAAC,UAA+B;QAC/D,IAAM,kBAAkB,GAAG,UAAoD,CAAC;QAChF,IAAI,2CAAoB,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,gBAAgB,kBAAA,EAAE,wBAAwB,0BAAA,EAAE,CAAC;AACxD,CAAC;AAED,SAAgB,4BAA4B,CAAC,OAAoB,EAAE,iBAAyB;IAC1F,IAAM,uBAAuB,GAAG,IAAA,+BAAwB,EAAC,iBAAiB,CAAC,CAAC;IAC5E,IAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,KAAK,IAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,uBAAuB,EAAE,CAAC;YACpC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,sBAAsB,CAAC,cAAwC;IAC7E,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW,EAAE,CAAC;IAC9B,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC","sourcesContent":["import type { Faro, Subscription, UserActionInterface, UserActionInternalInterface } from '@grafana/faro-core';\n\nimport { userActionDataAttributeParsed as userActionDataAttribute } from './const';\nimport { UserActionController } from './userActionController';\nimport { convertDataAttributeName } from './util';\n\nexport function getUserEventHandler(faro: Faro) {\n const { api, config } = faro;\n\n function processUserEvent(event: PointerEvent | KeyboardEvent) {\n const userActionName = getUserActionNameFromElement(\n event.target as HTMLElement,\n config.userActionsInstrumentation?.dataAttributeName ?? userActionDataAttribute\n );\n\n // We don't have a data attribute\n if (!userActionName) {\n return;\n }\n\n const userAction = api.startUserAction(userActionName, {}, { triggerName: event.type });\n if (userAction) {\n processUserActionStarted(userAction);\n }\n }\n\n function processUserActionStarted(userAction: UserActionInterface) {\n const internalUserAction = userAction as unknown as UserActionInternalInterface;\n new UserActionController(internalUserAction).attach();\n }\n\n return { processUserEvent, processUserActionStarted };\n}\n\nexport function getUserActionNameFromElement(element: HTMLElement, dataAttributeName: string): string | undefined {\n const parsedDataAttributeName = convertDataAttributeName(dataAttributeName);\n const dataset = element.dataset;\n\n for (const key in dataset) {\n if (key === parsedDataAttributeName) {\n return dataset[key];\n }\n }\n\n return undefined;\n}\n\nexport function unsubscribeAllMonitors(allMonitorsSub: Subscription | undefined) {\n allMonitorsSub?.unsubscribe();\n allMonitorsSub = undefined;\n}\n"]}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserActionController = void 0;
4
+ // packages/web-sdk/src/instrumentations/userActions/userActionController.ts
5
+ var faro_core_1 = require("@grafana/faro-core");
6
+ var domMutationMonitor_1 = require("../_internal/monitors/domMutationMonitor");
7
+ var httpRequestMonitor_1 = require("../_internal/monitors/httpRequestMonitor");
8
+ var performanceEntriesMonitor_1 = require("../_internal/monitors/performanceEntriesMonitor");
9
+ var util_1 = require("./util");
10
+ var defaultFollowUpActionTimeRange = 100;
11
+ var defaultHaltTimeout = 10 * 1000;
12
+ var UserActionController = /** @class */ (function () {
13
+ function UserActionController(userAction) {
14
+ this.userAction = userAction;
15
+ this.http = (0, httpRequestMonitor_1.monitorHttpRequests)();
16
+ this.dom = (0, domMutationMonitor_1.monitorDomMutations)();
17
+ this.perf = (0, performanceEntriesMonitor_1.monitorPerformanceEntries)();
18
+ this.isValid = false;
19
+ this.runningRequests = new Map();
20
+ }
21
+ UserActionController.prototype.attach = function () {
22
+ var _this = this;
23
+ // Subscribe to monitors while action is active/halting
24
+ this.allMonitorsSub = new faro_core_1.Observable()
25
+ .merge(this.http, this.dom, this.perf)
26
+ .takeWhile(function () { return [faro_core_1.UserActionState.Started, faro_core_1.UserActionState.Halted].includes(_this.userAction.getState()); })
27
+ .filter(function (msg) {
28
+ // If the user action is in halt state, we only keep listening to ended http requests
29
+ if (_this.userAction.getState() === faro_core_1.UserActionState.Halted &&
30
+ !((0, util_1.isRequestEndMessage)(msg) && _this.runningRequests.has(msg.request.requestId))) {
31
+ return false;
32
+ }
33
+ return true;
34
+ })
35
+ .subscribe(function (msg) {
36
+ if ((0, util_1.isRequestStartMessage)(msg)) {
37
+ // An action is on halt if it has pending items, like pending HTTP requests.
38
+ // In this case we start a separate timeout to wait for the requests to finish
39
+ // If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)
40
+ // But we are still subscribed to
41
+ _this.runningRequests.set(msg.request.requestId, msg.request);
42
+ }
43
+ if ((0, util_1.isRequestEndMessage)(msg)) {
44
+ _this.runningRequests.delete(msg.request.requestId);
45
+ }
46
+ if (!(0, util_1.isRequestEndMessage)(msg)) {
47
+ if (!_this.isValid) {
48
+ _this.isValid = true;
49
+ }
50
+ _this.scheduleFollowUp();
51
+ }
52
+ else if (_this.userAction.getState() === faro_core_1.UserActionState.Halted && _this.runningRequests.size === 0) {
53
+ _this.endAction();
54
+ }
55
+ });
56
+ // When UA ends or cancels, cleanup timers/subscriptions
57
+ this.stateSub = this.userAction
58
+ .filter(function (s) { return [faro_core_1.UserActionState.Ended, faro_core_1.UserActionState.Cancelled].includes(s); })
59
+ .first()
60
+ .subscribe(function () { return _this.cleanup(); });
61
+ // initial follow-up window in case nothing else happens
62
+ this.scheduleFollowUp();
63
+ };
64
+ UserActionController.prototype.scheduleFollowUp = function () {
65
+ var _this = this;
66
+ this.clearTimer(this.followUpTid);
67
+ this.followUpTid = setTimeout(function () {
68
+ // If action just started and there's pending work, go to halted
69
+ if (_this.userAction.getState() === faro_core_1.UserActionState.Started && _this.runningRequests.size > 0) {
70
+ _this.haltAction();
71
+ return;
72
+ }
73
+ // If we saw any relevant activity in the window, finish as ended
74
+ if (_this.isValid) {
75
+ _this.endAction();
76
+ return;
77
+ }
78
+ // Otherwise, no signals => cancel
79
+ _this.cancelAction();
80
+ }, defaultFollowUpActionTimeRange);
81
+ };
82
+ UserActionController.prototype.haltAction = function () {
83
+ if (this.userAction.getState() !== faro_core_1.UserActionState.Started) {
84
+ return;
85
+ }
86
+ this.userAction.halt();
87
+ this.startHaltTimeout();
88
+ };
89
+ UserActionController.prototype.startHaltTimeout = function () {
90
+ var _this = this;
91
+ this.clearTimer(this.haltTid);
92
+ this.haltTid = (0, util_1.startTimeout)(this.haltTid, function () {
93
+ // If still halted after timeout, end
94
+ if (_this.userAction.getState() === faro_core_1.UserActionState.Halted) {
95
+ _this.endAction();
96
+ }
97
+ }, defaultHaltTimeout);
98
+ };
99
+ UserActionController.prototype.endAction = function () {
100
+ this.userAction.end();
101
+ this.cleanup();
102
+ };
103
+ UserActionController.prototype.cancelAction = function () {
104
+ this.userAction.cancel();
105
+ this.cleanup();
106
+ };
107
+ UserActionController.prototype.cleanup = function () {
108
+ var _a, _b;
109
+ this.clearTimer(this.followUpTid);
110
+ this.clearTimer(this.haltTid);
111
+ (_a = this.allMonitorsSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();
112
+ (_b = this.stateSub) === null || _b === void 0 ? void 0 : _b.unsubscribe();
113
+ this.allMonitorsSub = undefined;
114
+ this.stateSub = undefined;
115
+ this.runningRequests.clear();
116
+ };
117
+ UserActionController.prototype.clearTimer = function (id) {
118
+ if (id) {
119
+ clearTimeout(id);
120
+ }
121
+ };
122
+ return UserActionController;
123
+ }());
124
+ exports.UserActionController = UserActionController;
125
+ //# sourceMappingURL=userActionController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userActionController.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/userActionController.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/web-sdk/src/instrumentations/userActions/userActionController.ts\nimport { Observable, UserActionState } from '@grafana/faro-core';\nimport type { Subscription, UserActionInternalInterface } from '@grafana/faro-core';\n\nimport { monitorDomMutations } from '../_internal/monitors/domMutationMonitor';\nimport { monitorHttpRequests } from '../_internal/monitors/httpRequestMonitor';\nimport { monitorPerformanceEntries } from '../_internal/monitors/performanceEntriesMonitor';\nimport type { HttpRequestMessagePayload } from '../_internal/monitors/types';\n\nimport { isRequestEndMessage, isRequestStartMessage, startTimeout } from './util';\n\nconst defaultFollowUpActionTimeRange = 100;\nconst defaultHaltTimeout = 10 * 1000;\n\nexport class UserActionController {\n private readonly http = monitorHttpRequests();\n private readonly dom = monitorDomMutations();\n private readonly perf = monitorPerformanceEntries();\n\n private allMonitorsSub?: Subscription;\n private stateSub?: Subscription;\n private followUpTid?: number;\n private haltTid?: number;\n\n private isValid = false;\n private runningRequests = new Map<string, HttpRequestMessagePayload>();\n\n constructor(private userAction: UserActionInternalInterface) {}\n\n attach(): void {\n // Subscribe to monitors while action is active/halting\n this.allMonitorsSub = new Observable()\n .merge(this.http, this.dom, this.perf)\n .takeWhile(() => [UserActionState.Started, UserActionState.Halted].includes(this.userAction.getState()))\n .filter((msg) => {\n // If the user action is in halt state, we only keep listening to ended http requests\n if (\n this.userAction.getState() === UserActionState.Halted &&\n !(isRequestEndMessage(msg) && this.runningRequests.has(msg.request.requestId))\n ) {\n return false;\n }\n\n return true;\n })\n .subscribe((msg) => {\n if (isRequestStartMessage(msg)) {\n // An action is on halt if it has pending items, like pending HTTP requests.\n // In this case we start a separate timeout to wait for the requests to finish\n // If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)\n // But we are still subscribed to\n this.runningRequests.set(msg.request.requestId, msg.request);\n }\n\n if (isRequestEndMessage(msg)) {\n this.runningRequests.delete(msg.request.requestId);\n }\n\n if (!isRequestEndMessage(msg)) {\n if (!this.isValid) {\n this.isValid = true;\n }\n this.scheduleFollowUp();\n } else if (this.userAction.getState() === UserActionState.Halted && this.runningRequests.size === 0) {\n this.endAction();\n }\n });\n\n // When UA ends or cancels, cleanup timers/subscriptions\n this.stateSub = (this.userAction as unknown as Observable)\n .filter((s: UserActionState) => [UserActionState.Ended, UserActionState.Cancelled].includes(s))\n .first()\n .subscribe(() => this.cleanup());\n\n // initial follow-up window in case nothing else happens\n this.scheduleFollowUp();\n }\n\n private scheduleFollowUp() {\n this.clearTimer(this.followUpTid);\n this.followUpTid = setTimeout(() => {\n // If action just started and there's pending work, go to halted\n if (this.userAction.getState() === UserActionState.Started && this.runningRequests.size > 0) {\n this.haltAction();\n return;\n }\n\n // If we saw any relevant activity in the window, finish as ended\n if (this.isValid) {\n this.endAction();\n return;\n }\n\n // Otherwise, no signals => cancel\n this.cancelAction();\n }, defaultFollowUpActionTimeRange) as any;\n }\n\n private haltAction() {\n if (this.userAction.getState() !== UserActionState.Started) {\n return;\n }\n this.userAction.halt();\n this.startHaltTimeout();\n }\n\n private startHaltTimeout() {\n this.clearTimer(this.haltTid);\n this.haltTid = startTimeout(\n this.haltTid,\n () => {\n // If still halted after timeout, end\n if (this.userAction.getState() === UserActionState.Halted) {\n this.endAction();\n }\n },\n defaultHaltTimeout\n ) as any;\n }\n\n private endAction() {\n this.userAction.end();\n this.cleanup();\n }\n\n private cancelAction() {\n this.userAction.cancel();\n this.cleanup();\n }\n\n private cleanup() {\n this.clearTimer(this.followUpTid);\n this.clearTimer(this.haltTid);\n this.allMonitorsSub?.unsubscribe();\n this.stateSub?.unsubscribe();\n this.allMonitorsSub = undefined;\n this.stateSub = undefined;\n this.runningRequests.clear();\n }\n\n private clearTimer(id?: number) {\n if (id) {\n clearTimeout(id);\n }\n }\n}\n"]}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertDataAttributeName = convertDataAttributeName;
4
+ exports.startTimeout = startTimeout;
5
+ exports.isRequestStartMessage = isRequestStartMessage;
6
+ exports.isRequestEndMessage = isRequestEndMessage;
7
+ var const_1 = require("./const");
4
8
  /**
5
9
  * Parses the action attribute name by removing the 'data-' prefix and converting
6
10
  * the remaining string to camelCase.
@@ -13,4 +17,20 @@ function convertDataAttributeName(userActionDataAttribute) {
13
17
  var withUpperCase = withoutData === null || withoutData === void 0 ? void 0 : withoutData.replace(/-(.)/g, function (_, char) { return char.toUpperCase(); });
14
18
  return withUpperCase === null || withUpperCase === void 0 ? void 0 : withUpperCase.replace(/-/g, '');
15
19
  }
20
+ function startTimeout(timeoutId, cb, delay) {
21
+ if (timeoutId) {
22
+ clearTimeout(timeoutId);
23
+ }
24
+ //@ts-expect-error for some reason vscode is using the node types
25
+ timeoutId = setTimeout(function () {
26
+ cb();
27
+ }, delay);
28
+ return timeoutId;
29
+ }
30
+ function isRequestStartMessage(msg) {
31
+ return msg.type === const_1.MESSAGE_TYPE_HTTP_REQUEST_START;
32
+ }
33
+ function isRequestEndMessage(msg) {
34
+ return msg.type === const_1.MESSAGE_TYPE_HTTP_REQUEST_END;
35
+ }
16
36
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/util.ts"],"names":[],"mappings":";;AAOA,4DAIC;AAXD;;;;;;GAMG;AACH,SAAgB,wBAAwB,CAAC,uBAA+B;IACtE,IAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAM,aAAa,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC,OAAO,EAAE,UAAC,CAAC,EAAE,IAAI,IAAK,OAAA,IAAI,CAAC,WAAW,EAAE,EAAlB,CAAkB,CAAC,CAAC;IACrF,OAAO,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["/**\n * Parses the action attribute name by removing the 'data-' prefix and converting\n * the remaining string to camelCase.\n *\n * This is needed because the browser will remove the 'data-' prefix and the dashes from\n * data attributes and make then camelCase.\n */\nexport function convertDataAttributeName(userActionDataAttribute: string) {\n const withoutData = userActionDataAttribute.split('data-')[1];\n const withUpperCase = withoutData?.replace(/-(.)/g, (_, char) => char.toUpperCase());\n return withUpperCase?.replace(/-/g, '');\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/util.ts"],"names":[],"mappings":";;AAWA,4DAIC;AAED,oCAWC;AAED,sDAEC;AAED,kDAEC;AAlCD,iCAAyF;AAEzF;;;;;;GAMG;AACH,SAAgB,wBAAwB,CAAC,uBAA+B;IACtE,IAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAM,aAAa,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC,OAAO,EAAE,UAAC,CAAC,EAAE,IAAI,IAAK,OAAA,IAAI,CAAC,WAAW,EAAE,EAAlB,CAAkB,CAAC,CAAC;IACrF,OAAO,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,YAAY,CAAC,SAA6B,EAAE,EAAc,EAAE,KAAa;IACvF,IAAI,SAAS,EAAE,CAAC;QACd,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAED,iEAAiE;IACjE,SAAS,GAAG,UAAU,CAAC;QACrB,EAAE,EAAE,CAAC;IACP,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAQ;IAC5C,OAAO,GAAG,CAAC,IAAI,KAAK,uCAA+B,CAAC;AACtD,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAQ;IAC1C,OAAO,GAAG,CAAC,IAAI,KAAK,qCAA6B,CAAC;AACpD,CAAC","sourcesContent":["import type { HttpRequestEndMessage, HttpRequestStartMessage } from '../_internal/monitors/types';\n\nimport { MESSAGE_TYPE_HTTP_REQUEST_END, MESSAGE_TYPE_HTTP_REQUEST_START } from './const';\n\n/**\n * Parses the action attribute name by removing the 'data-' prefix and converting\n * the remaining string to camelCase.\n *\n * This is needed because the browser will remove the 'data-' prefix and the dashes from\n * data attributes and make then camelCase.\n */\nexport function convertDataAttributeName(userActionDataAttribute: string) {\n const withoutData = userActionDataAttribute.split('data-')[1];\n const withUpperCase = withoutData?.replace(/-(.)/g, (_, char) => char.toUpperCase());\n return withUpperCase?.replace(/-/g, '');\n}\n\nexport function startTimeout(timeoutId: number | undefined, cb: () => void, delay: number) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n //@ts-expect-error for some reason vscode is using the node types\n timeoutId = setTimeout(() => {\n cb();\n }, delay);\n\n return timeoutId;\n}\n\nexport function isRequestStartMessage(msg: any): msg is HttpRequestStartMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_START;\n}\n\nexport function isRequestEndMessage(msg: any): msg is HttpRequestEndMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_END;\n}\n"]}
@@ -17,7 +17,6 @@ var __extends = (this && this.__extends) || (function () {
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.WebVitalsInstrumentation = void 0;
19
19
  var faro_core_1 = require("@grafana/faro-core");
20
- var webVitalsBasic_1 = require("./webVitalsBasic");
21
20
  var webVitalsWithAttribution_1 = require("./webVitalsWithAttribution");
22
21
  var WebVitalsInstrumentation = /** @class */ (function (_super) {
23
22
  __extends(WebVitalsInstrumentation, _super);
@@ -29,17 +28,9 @@ var WebVitalsInstrumentation = /** @class */ (function (_super) {
29
28
  }
30
29
  WebVitalsInstrumentation.prototype.initialize = function () {
31
30
  this.logDebug('Initializing');
32
- var webVitals = this.intializeWebVitalsInstrumentation();
31
+ var webVitals = new webVitalsWithAttribution_1.WebVitalsWithAttribution(this.api.pushMeasurement, this.config.webVitalsInstrumentation);
33
32
  webVitals.initialize();
34
33
  };
35
- WebVitalsInstrumentation.prototype.intializeWebVitalsInstrumentation = function () {
36
- var _a, _b, _c;
37
- if (((_a = this.config) === null || _a === void 0 ? void 0 : _a.trackWebVitalsAttribution) === false ||
38
- ((_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.webVitalsInstrumentation) === null || _c === void 0 ? void 0 : _c.trackAttribution) === false) {
39
- return new webVitalsBasic_1.WebVitalsBasic(this.api.pushMeasurement, this.config.webVitalsInstrumentation);
40
- }
41
- return new webVitalsWithAttribution_1.WebVitalsWithAttribution(this.api.pushMeasurement, this.config.webVitalsInstrumentation);
42
- };
43
34
  return WebVitalsInstrumentation;
44
35
  }(faro_core_1.BaseInstrumentation));
45
36
  exports.WebVitalsInstrumentation = WebVitalsInstrumentation;
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAkE;AAElE,mDAAkD;AAClD,uEAAsE;AAEtE;IAA8C,4CAAmB;IAAjE;;QACW,UAAI,GAAG,kDAAkD,CAAC;QAC1D,aAAO,GAAG,mBAAO,CAAC;;IAiB7B,CAAC;IAfC,6CAAU,GAAV;QACE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC9B,IAAM,SAAS,GAAG,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAC3D,SAAS,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;IAEO,oEAAiC,GAAzC;;QACE,IACE,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,yBAAyB,MAAK,KAAK;YAChD,CAAA,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,wBAAwB,0CAAE,gBAAgB,MAAK,KAAK,EACjE,CAAC;YACD,OAAO,IAAI,+BAAc,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,IAAI,mDAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACtG,CAAC;IACH,+BAAC;AAAD,CAAC,AAnBD,CAA8C,+BAAmB,GAmBhE;AAnBY,4DAAwB","sourcesContent":["import { BaseInstrumentation, VERSION } from '@grafana/faro-core';\n\nimport { WebVitalsBasic } from './webVitalsBasic';\nimport { WebVitalsWithAttribution } from './webVitalsWithAttribution';\n\nexport class WebVitalsInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-web-vitals';\n readonly version = VERSION;\n\n initialize(): void {\n this.logDebug('Initializing');\n const webVitals = this.intializeWebVitalsInstrumentation();\n webVitals.initialize();\n }\n\n private intializeWebVitalsInstrumentation() {\n if (\n this.config?.trackWebVitalsAttribution === false ||\n this.config?.webVitalsInstrumentation?.trackAttribution === false\n ) {\n return new WebVitalsBasic(this.api.pushMeasurement, this.config.webVitalsInstrumentation);\n }\n return new WebVitalsWithAttribution(this.api.pushMeasurement, this.config.webVitalsInstrumentation);\n }\n}\n"]}
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAkE;AAElE,uEAAsE;AAEtE;IAA8C,4CAAmB;IAAjE;;QACW,UAAI,GAAG,kDAAkD,CAAC;QAC1D,aAAO,GAAG,mBAAO,CAAC;;IAO7B,CAAC;IALC,6CAAU,GAAV;QACE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC9B,IAAM,SAAS,GAAG,IAAI,mDAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC/G,SAAS,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;IACH,+BAAC;AAAD,CAAC,AATD,CAA8C,+BAAmB,GAShE;AATY,4DAAwB","sourcesContent":["import { BaseInstrumentation, VERSION } from '@grafana/faro-core';\n\nimport { WebVitalsWithAttribution } from './webVitalsWithAttribution';\n\nexport class WebVitalsInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-web-vitals';\n readonly version = VERSION;\n\n initialize(): void {\n this.logDebug('Initializing');\n const webVitals = new WebVitalsWithAttribution(this.api.pushMeasurement, this.config.webVitalsInstrumentation);\n webVitals.initialize();\n }\n}\n"]}
@@ -53,7 +53,7 @@ function setItem(key, value, webStorageMechanism) {
53
53
  try {
54
54
  window[webStorageMechanism].setItem(key, value);
55
55
  }
56
- catch (error) {
56
+ catch (_error) {
57
57
  // do nothing
58
58
  }
59
59
  }
@@ -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,KAAK,EAAE,CAAC;YACf,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,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,4 +1,4 @@
1
- import { ConsoleInstrumentation, CSPInstrumentation, ErrorsInstrumentation, PerformanceInstrumentation, SessionInstrumentation, UserActionInstrumentation, ViewInstrumentation, WebVitalsInstrumentation, } from '../instrumentations';
1
+ import { ConsoleInstrumentation, CSPInstrumentation, ErrorsInstrumentation, NavigationInstrumentation, PerformanceInstrumentation, SessionInstrumentation, UserActionInstrumentation, ViewInstrumentation, WebVitalsInstrumentation, } from '../instrumentations';
2
2
  export function getWebInstrumentations(options = {}) {
3
3
  const instrumentations = [
4
4
  new UserActionInstrumentation(),
@@ -6,6 +6,7 @@ export function getWebInstrumentations(options = {}) {
6
6
  new WebVitalsInstrumentation(),
7
7
  new SessionInstrumentation(),
8
8
  new ViewInstrumentation(),
9
+ new NavigationInstrumentation(),
9
10
  ];
10
11
  if (options.enablePerformanceInstrumentation !== false) {
11
12
  // unshift to ensure that initialization starts before the other instrumentations
@@ -1 +1 @@
1
- {"version":3,"file":"getWebInstrumentations.js","sourceRoot":"","sources":["../../../src/config/getWebInstrumentations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,UAAU,sBAAsB,CAAC,UAAyC,EAAE;IAChF,MAAM,gBAAgB,GAAsB;QAC1C,IAAI,yBAAyB,EAAE;QAC/B,IAAI,qBAAqB,EAAE;QAC3B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,sBAAsB,EAAE;QAC5B,IAAI,mBAAmB,EAAE;KAC1B,CAAC;IAEF,IAAI,OAAO,CAAC,gCAAgC,KAAK,KAAK,EAAE,CAAC;QACvD,iFAAiF;QACjF,gBAAgB,CAAC,OAAO,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,CAAC,0CAA0C,KAAK,KAAK,EAAE,CAAC;QACjE,gBAAgB,CAAC,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACrC,gBAAgB,CAAC,IAAI,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["import type { Instrumentation } from '@grafana/faro-core';\n\nimport {\n ConsoleInstrumentation,\n CSPInstrumentation,\n ErrorsInstrumentation,\n PerformanceInstrumentation,\n SessionInstrumentation,\n UserActionInstrumentation,\n ViewInstrumentation,\n WebVitalsInstrumentation,\n} from '../instrumentations';\n\nimport type { GetWebInstrumentationsOptions } from './types';\n\nexport function getWebInstrumentations(options: GetWebInstrumentationsOptions = {}): Instrumentation[] {\n const instrumentations: Instrumentation[] = [\n new UserActionInstrumentation(),\n new ErrorsInstrumentation(),\n new WebVitalsInstrumentation(),\n new SessionInstrumentation(),\n new ViewInstrumentation(),\n ];\n\n if (options.enablePerformanceInstrumentation !== false) {\n // unshift to ensure that initialization starts before the other instrumentations\n instrumentations.unshift(new PerformanceInstrumentation());\n }\n\n if (options.enableContentSecurityPolicyInstrumentation !== false) {\n instrumentations.push(new CSPInstrumentation());\n }\n\n if (options.captureConsole !== false) {\n instrumentations.push(new ConsoleInstrumentation());\n }\n\n return instrumentations;\n}\n"]}
1
+ {"version":3,"file":"getWebInstrumentations.js","sourceRoot":"","sources":["../../../src/config/getWebInstrumentations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,UAAU,sBAAsB,CAAC,UAAyC,EAAE;IAChF,MAAM,gBAAgB,GAAsB;QAC1C,IAAI,yBAAyB,EAAE;QAC/B,IAAI,qBAAqB,EAAE;QAC3B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,sBAAsB,EAAE;QAC5B,IAAI,mBAAmB,EAAE;QACzB,IAAI,yBAAyB,EAAE;KAChC,CAAC;IAEF,IAAI,OAAO,CAAC,gCAAgC,KAAK,KAAK,EAAE,CAAC;QACvD,iFAAiF;QACjF,gBAAgB,CAAC,OAAO,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,CAAC,0CAA0C,KAAK,KAAK,EAAE,CAAC;QACjE,gBAAgB,CAAC,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACrC,gBAAgB,CAAC,IAAI,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["import type { Instrumentation } from '@grafana/faro-core';\n\nimport {\n ConsoleInstrumentation,\n CSPInstrumentation,\n ErrorsInstrumentation,\n NavigationInstrumentation,\n PerformanceInstrumentation,\n SessionInstrumentation,\n UserActionInstrumentation,\n ViewInstrumentation,\n WebVitalsInstrumentation,\n} from '../instrumentations';\n\nimport type { GetWebInstrumentationsOptions } from './types';\n\nexport function getWebInstrumentations(options: GetWebInstrumentationsOptions = {}): Instrumentation[] {\n const instrumentations: Instrumentation[] = [\n new UserActionInstrumentation(),\n new ErrorsInstrumentation(),\n new WebVitalsInstrumentation(),\n new SessionInstrumentation(),\n new ViewInstrumentation(),\n new NavigationInstrumentation(),\n ];\n\n if (options.enablePerformanceInstrumentation !== false) {\n // unshift to ensure that initialization starts before the other instrumentations\n instrumentations.unshift(new PerformanceInstrumentation());\n }\n\n if (options.enableContentSecurityPolicyInstrumentation !== false) {\n instrumentations.push(new CSPInstrumentation());\n }\n\n if (options.captureConsole !== false) {\n instrumentations.push(new ConsoleInstrumentation());\n }\n\n return instrumentations;\n}\n"]}
@@ -20,7 +20,7 @@ import { createPageMeta } from '../metas/page';
20
20
  import { FetchTransport } from '../transports';
21
21
  import { getWebInstrumentations } from './getWebInstrumentations';
22
22
  export function makeCoreConfig(browserConfig) {
23
- var _a;
23
+ var _a, _b, _c, _d, _e;
24
24
  const transports = [];
25
25
  const internalLogger = createInternalLogger(browserConfig.unpatchedConsole, browserConfig.internalLoggerLevel);
26
26
  if (browserConfig.transports) {
@@ -40,9 +40,16 @@ export function makeCoreConfig(browserConfig) {
40
40
  }
41
41
  const {
42
42
  // properties with default values
43
- dedupe = true, eventDomain = defaultEventDomain, globalObjectKey = defaultGlobalObjectKey, instrumentations = getWebInstrumentations(), internalLoggerLevel = defaultInternalLoggerLevel, isolate = false, logArgsSerializer = defaultLogArgsSerializer, metas = createDefaultMetas(browserConfig), paused = false, preventGlobalExposure = false, unpatchedConsole = defaultUnpatchedConsole, trackUserActionsPreview = false, trackUserActionsDataAttributeName = userActionDataAttribute, url: browserConfigUrl } = browserConfig,
43
+ dedupe = true, eventDomain = defaultEventDomain, globalObjectKey = defaultGlobalObjectKey, instrumentations = getWebInstrumentations(), internalLoggerLevel = defaultInternalLoggerLevel, isolate = false, logArgsSerializer = defaultLogArgsSerializer, metas = createDefaultMetas(browserConfig), paused = false, preventGlobalExposure = false, unpatchedConsole = defaultUnpatchedConsole, url: browserConfigUrl, experimental } = browserConfig,
44
44
  // Properties without default values or which aren't used to create derived config
45
- restProperties = __rest(browserConfig, ["dedupe", "eventDomain", "globalObjectKey", "instrumentations", "internalLoggerLevel", "isolate", "logArgsSerializer", "metas", "paused", "preventGlobalExposure", "unpatchedConsole", "trackUserActionsPreview", "trackUserActionsDataAttributeName", "url"]);
45
+ restProperties = __rest(browserConfig, ["dedupe", "eventDomain", "globalObjectKey", "instrumentations", "internalLoggerLevel", "isolate", "logArgsSerializer", "metas", "paused", "preventGlobalExposure", "unpatchedConsole", "url", "experimental"]);
46
+ // Extract experimental features with defaults
47
+ const trackNavigation = (_a = experimental === null || experimental === void 0 ? void 0 : experimental.trackNavigation) !== null && _a !== void 0 ? _a : false;
48
+ // Extract user actions instrumentation with defaults
49
+ const userActionsInstrumentation = {
50
+ dataAttributeName: (_c = (_b = browserConfig.userActionsInstrumentation) === null || _b === void 0 ? void 0 : _b.dataAttributeName) !== null && _c !== void 0 ? _c : userActionDataAttribute,
51
+ excludeItem: (_d = browserConfig.userActionsInstrumentation) === null || _d === void 0 ? void 0 : _d.excludeItem,
52
+ };
46
53
  return Object.assign(Object.assign({}, restProperties), { batching: Object.assign(Object.assign({}, defaultBatchingConfig), browserConfig.batching), dedupe: dedupe, globalObjectKey, instrumentations: getFilteredInstrumentations(instrumentations, browserConfig), internalLoggerLevel,
47
54
  isolate,
48
55
  logArgsSerializer,
@@ -53,7 +60,7 @@ export function makeCoreConfig(browserConfig) {
53
60
  transports,
54
61
  unpatchedConsole,
55
62
  eventDomain, ignoreUrls: [
56
- ...((_a = browserConfig.ignoreUrls) !== null && _a !== void 0 ? _a : []),
63
+ ...((_e = browserConfig.ignoreUrls) !== null && _e !== void 0 ? _e : []),
57
64
  // ignore configured cloud collector url by default
58
65
  ...(browserConfigUrl ? [browserConfigUrl] : []),
59
66
  // Try our best to exclude collector URLs form other Faro instances. By default these are URLs ending with /collect or /collect/ followed by alphanumeric characters.
@@ -61,12 +68,15 @@ export function makeCoreConfig(browserConfig) {
61
68
  ], sessionTracking: Object.assign(Object.assign(Object.assign({}, defaultSessionTrackingConfig), browserConfig.sessionTracking), crateSessionMeta({
62
69
  trackGeolocation: browserConfig.trackGeolocation,
63
70
  sessionTracking: browserConfig.sessionTracking,
64
- })), trackUserActionsPreview,
65
- trackUserActionsDataAttributeName });
71
+ })), userActionsInstrumentation, experimental: {
72
+ trackNavigation,
73
+ } });
66
74
  }
67
- function getFilteredInstrumentations(instrumentations, { trackUserActionsPreview }) {
75
+ function getFilteredInstrumentations(instrumentations, { experimental }) {
76
+ var _a;
77
+ const trackNavigation = (_a = experimental === null || experimental === void 0 ? void 0 : experimental.trackNavigation) !== null && _a !== void 0 ? _a : false;
68
78
  return instrumentations.filter((instr) => {
69
- if (instr.name === '@grafana/faro-web-sdk:instrumentation-user-action' && !trackUserActionsPreview) {
79
+ if (instr.name === '@grafana/faro-web-sdk:instrumentation-navigation' && !trackNavigation) {
70
80
  return false;
71
81
  }
72
82
  return true;
@@ -80,7 +90,7 @@ function createDefaultMetas(browserConfig) {
80
90
  createPageMeta({ generatePageId, initialPageMeta: page }),
81
91
  ...((_b = browserConfig.metas) !== null && _b !== void 0 ? _b : []),
82
92
  ];
83
- const isK6BrowserSession = isObject(window.k6);
93
+ const isK6BrowserSession = isObject(window === null || window === void 0 ? void 0 : window.k6);
84
94
  if (isK6BrowserSession) {
85
95
  return [...initialMetas, k6Meta];
86
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"makeCoreConfig.js","sourceRoot":"","sources":["../../../src/config/makeCoreConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createInternalLogger,\n defaultBatchingConfig,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogArgsSerializer,\n defaultUnpatchedConsole,\n isBoolean,\n isEmpty,\n isObject,\n} from '@grafana/faro-core';\nimport type { Config, Instrumentation, MetaItem, MetaSession, Transport } from '@grafana/faro-core';\n\nimport { defaultEventDomain } from '../consts';\nimport { parseStacktrace } from '../instrumentations';\nimport { defaultSessionTrackingConfig } from '../instrumentations/session';\nimport { userActionDataAttribute } from '../instrumentations/userActions/const';\nimport { browserMeta } from '../metas';\nimport { k6Meta } from '../metas/k6';\nimport { createPageMeta } from '../metas/page';\nimport { FetchTransport } from '../transports';\n\nimport { getWebInstrumentations } from './getWebInstrumentations';\nimport type { BrowserConfig } from './types';\n\nexport function makeCoreConfig(browserConfig: BrowserConfig): Config {\n const transports: Transport[] = [];\n\n const internalLogger = createInternalLogger(browserConfig.unpatchedConsole, browserConfig.internalLoggerLevel);\n\n if (browserConfig.transports) {\n if (browserConfig.url || browserConfig.apiKey) {\n internalLogger.error('if \"transports\" is defined, \"url\" and \"apiKey\" should not be defined');\n }\n\n transports.push(...browserConfig.transports);\n } else if (browserConfig.url) {\n transports.push(\n new FetchTransport({\n url: browserConfig.url,\n apiKey: browserConfig.apiKey,\n })\n );\n } else {\n internalLogger.error('either \"url\" or \"transports\" must be defined');\n }\n\n const {\n // properties with default values\n dedupe = true,\n eventDomain = defaultEventDomain,\n globalObjectKey = defaultGlobalObjectKey,\n instrumentations = getWebInstrumentations(),\n internalLoggerLevel = defaultInternalLoggerLevel,\n isolate = false,\n logArgsSerializer = defaultLogArgsSerializer,\n metas = createDefaultMetas(browserConfig),\n paused = false,\n preventGlobalExposure = false,\n unpatchedConsole = defaultUnpatchedConsole,\n trackUserActionsPreview = false,\n trackUserActionsDataAttributeName = userActionDataAttribute,\n url: browserConfigUrl,\n // Properties without default values or which aren't used to create derived config\n ...restProperties\n }: BrowserConfig = browserConfig;\n\n return {\n ...restProperties,\n\n batching: {\n ...defaultBatchingConfig,\n ...browserConfig.batching,\n },\n dedupe: dedupe,\n globalObjectKey,\n instrumentations: getFilteredInstrumentations(instrumentations, browserConfig),\n internalLoggerLevel,\n isolate,\n logArgsSerializer,\n metas,\n parseStacktrace,\n paused,\n preventGlobalExposure,\n transports,\n unpatchedConsole,\n eventDomain,\n ignoreUrls: [\n ...(browserConfig.ignoreUrls ?? []),\n // ignore configured cloud collector url by default\n ...(browserConfigUrl ? [browserConfigUrl] : []),\n // Try our best to exclude collector URLs form other Faro instances. By default these are URLs ending with /collect or /collect/ followed by alphanumeric characters.\n /\\/collect(?:\\/[\\w]*)?$/,\n ],\n sessionTracking: {\n ...defaultSessionTrackingConfig,\n ...browserConfig.sessionTracking,\n ...crateSessionMeta({\n trackGeolocation: browserConfig.trackGeolocation,\n sessionTracking: browserConfig.sessionTracking,\n }),\n },\n trackUserActionsPreview,\n trackUserActionsDataAttributeName,\n };\n}\n\nfunction getFilteredInstrumentations(\n instrumentations: Instrumentation[],\n { trackUserActionsPreview }: BrowserConfig\n): Instrumentation[] {\n return instrumentations.filter((instr) => {\n if (instr.name === '@grafana/faro-web-sdk:instrumentation-user-action' && !trackUserActionsPreview) {\n return false;\n }\n return true;\n });\n}\n\nfunction createDefaultMetas(browserConfig: BrowserConfig): MetaItem[] {\n const { page, generatePageId } = browserConfig?.pageTracking ?? {};\n\n const initialMetas: MetaItem[] = [\n browserMeta,\n createPageMeta({ generatePageId, initialPageMeta: page }),\n ...(browserConfig.metas ?? []),\n ];\n\n const isK6BrowserSession = isObject((window as any).k6);\n if (isK6BrowserSession) {\n return [...initialMetas, k6Meta];\n }\n\n return initialMetas;\n}\n\nfunction crateSessionMeta({\n trackGeolocation,\n sessionTracking,\n}: Pick<BrowserConfig, 'trackGeolocation' | 'sessionTracking'>): { session: MetaSession } | {} {\n const overrides: MetaSession['overrides'] = {};\n\n if (isBoolean(trackGeolocation)) {\n overrides.geoLocationTrackingEnabled = trackGeolocation;\n }\n\n if (isEmpty(overrides)) {\n return {};\n }\n\n return {\n session: {\n ...(sessionTracking?.session ?? {}),\n overrides,\n },\n };\n}\n"]}
1
+ {"version":3,"file":"makeCoreConfig.js","sourceRoot":"","sources":["../../../src/config/makeCoreConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createInternalLogger,\n defaultBatchingConfig,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogArgsSerializer,\n defaultUnpatchedConsole,\n isBoolean,\n isEmpty,\n isObject,\n} from '@grafana/faro-core';\nimport type { Config, Instrumentation, MetaItem, MetaSession, Transport } from '@grafana/faro-core';\n\nimport { defaultEventDomain } from '../consts';\nimport { parseStacktrace } from '../instrumentations';\nimport { defaultSessionTrackingConfig } from '../instrumentations/session';\nimport { userActionDataAttribute } from '../instrumentations/userActions/const';\nimport { browserMeta } from '../metas';\nimport { k6Meta } from '../metas/k6';\nimport { createPageMeta } from '../metas/page';\nimport { FetchTransport } from '../transports';\n\nimport { getWebInstrumentations } from './getWebInstrumentations';\nimport type { BrowserConfig } from './types';\n\nexport function makeCoreConfig(browserConfig: BrowserConfig): Config {\n const transports: Transport[] = [];\n\n const internalLogger = createInternalLogger(browserConfig.unpatchedConsole, browserConfig.internalLoggerLevel);\n\n if (browserConfig.transports) {\n if (browserConfig.url || browserConfig.apiKey) {\n internalLogger.error('if \"transports\" is defined, \"url\" and \"apiKey\" should not be defined');\n }\n\n transports.push(...browserConfig.transports);\n } else if (browserConfig.url) {\n transports.push(\n new FetchTransport({\n url: browserConfig.url,\n apiKey: browserConfig.apiKey,\n })\n );\n } else {\n internalLogger.error('either \"url\" or \"transports\" must be defined');\n }\n\n const {\n // properties with default values\n dedupe = true,\n eventDomain = defaultEventDomain,\n globalObjectKey = defaultGlobalObjectKey,\n instrumentations = getWebInstrumentations(),\n internalLoggerLevel = defaultInternalLoggerLevel,\n isolate = false,\n logArgsSerializer = defaultLogArgsSerializer,\n metas = createDefaultMetas(browserConfig),\n paused = false,\n preventGlobalExposure = false,\n unpatchedConsole = defaultUnpatchedConsole,\n url: browserConfigUrl,\n experimental,\n // Properties without default values or which aren't used to create derived config\n ...restProperties\n }: BrowserConfig = browserConfig;\n\n // Extract experimental features with defaults\n const trackNavigation = experimental?.trackNavigation ?? false;\n\n // Extract user actions instrumentation with defaults\n const userActionsInstrumentation = {\n dataAttributeName: browserConfig.userActionsInstrumentation?.dataAttributeName ?? userActionDataAttribute,\n excludeItem: browserConfig.userActionsInstrumentation?.excludeItem,\n };\n\n return {\n ...restProperties,\n\n batching: {\n ...defaultBatchingConfig,\n ...browserConfig.batching,\n },\n dedupe: dedupe,\n globalObjectKey,\n instrumentations: getFilteredInstrumentations(instrumentations, browserConfig),\n internalLoggerLevel,\n isolate,\n logArgsSerializer,\n metas,\n parseStacktrace,\n paused,\n preventGlobalExposure,\n transports,\n unpatchedConsole,\n eventDomain,\n ignoreUrls: [\n ...(browserConfig.ignoreUrls ?? []),\n // ignore configured cloud collector url by default\n ...(browserConfigUrl ? [browserConfigUrl] : []),\n // Try our best to exclude collector URLs form other Faro instances. By default these are URLs ending with /collect or /collect/ followed by alphanumeric characters.\n /\\/collect(?:\\/[\\w]*)?$/,\n ],\n sessionTracking: {\n ...defaultSessionTrackingConfig,\n ...browserConfig.sessionTracking,\n ...crateSessionMeta({\n trackGeolocation: browserConfig.trackGeolocation,\n sessionTracking: browserConfig.sessionTracking,\n }),\n },\n userActionsInstrumentation,\n experimental: {\n trackNavigation,\n },\n };\n}\n\nfunction getFilteredInstrumentations(\n instrumentations: Instrumentation[],\n { experimental }: BrowserConfig\n): Instrumentation[] {\n const trackNavigation = experimental?.trackNavigation ?? false;\n\n return instrumentations.filter((instr) => {\n if (instr.name === '@grafana/faro-web-sdk:instrumentation-navigation' && !trackNavigation) {\n return false;\n }\n return true;\n });\n}\n\nfunction createDefaultMetas(browserConfig: BrowserConfig): MetaItem[] {\n const { page, generatePageId } = browserConfig?.pageTracking ?? {};\n\n const initialMetas: MetaItem[] = [\n browserMeta,\n createPageMeta({ generatePageId, initialPageMeta: page }),\n ...(browserConfig.metas ?? []),\n ];\n\n const isK6BrowserSession = isObject((window as any)?.k6);\n if (isK6BrowserSession) {\n return [...initialMetas, k6Meta];\n }\n\n return initialMetas;\n}\n\nfunction crateSessionMeta({\n trackGeolocation,\n sessionTracking,\n}: Pick<BrowserConfig, 'trackGeolocation' | 'sessionTracking'>): { session: MetaSession } | {} {\n const overrides: MetaSession['overrides'] = {};\n\n if (isBoolean(trackGeolocation)) {\n overrides.geoLocationTrackingEnabled = trackGeolocation;\n }\n\n if (isEmpty(overrides)) {\n return {};\n }\n\n return {\n session: {\n ...(sessionTracking?.session ?? {}),\n overrides,\n },\n };\n}\n"]}
package/dist/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export { getWebInstrumentations, makeCoreConfig } from './config';
2
2
  export { defaultEventDomain } from './consts';
3
3
  export { initializeFaro } from './initialize';
4
- export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, CSPInstrumentation, UserActionInstrumentation, } from './instrumentations';
4
+ export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, CSPInstrumentation, UserActionInstrumentation, NavigationInstrumentation, } from './instrumentations';
5
5
  export { browserMeta, createSession, sdkMeta } from './metas';
6
6
  export { ConsoleTransport, FetchTransport } from './transports';
7
7
  export { faro, allLogLevels, BaseExtension, BaseInstrumentation, BaseTransport, createInternalLogger, createPromiseBuffer, deepEqual, defaultExceptionType, defaultGlobalObjectKey, defaultInternalLoggerLevel, defaultLogLevel, genShortID, getCurrentTimestamp, getInternalFaroFromGlobalObject, getTransportBody, globalObject, internalGlobalObjectKey, isArray, isBoolean, isDomError, isDomException, isElement, isElementDefined, isError, isErrorDefined, isErrorEvent, isEvent, isEventDefined, isFunction, isInstanceOf, isInt, isInternalFaroOnGlobalObject, isMap, isMapDefined, isNull, isNumber, isObject, isPrimitive, isRegExp, isString, isSymbol, isSyntheticEvent, isThenable, isToString, isTypeof, isUndefined, isEmpty, InternalLoggerLevel, LogLevel, noop, setInternalFaroOnGlobalObject, TransportItemType, transportItemTypeToBodyKey, VERSION, EVENT_CLICK, EVENT_NAVIGATION, EVENT_ROUTE_CHANGE, EVENT_SESSION_EXTEND, EVENT_SESSION_RESUME, EVENT_SESSION_START, EVENT_VIEW_CHANGED, Observable, unknownString, UserActionState, } from '@grafana/faro-core';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQhE,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,+BAA+B,EAC/B,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,OAAO,EACP,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,OAAO,EACP,cAAc,EACd,UAAU,EACV,YAAY,EACZ,KAAK,EACL,4BAA4B,EAC5B,KAAK,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACR,IAAI,EACJ,6BAA6B,EAC7B,iBAAiB,EACjB,0BAA0B,EAC1B,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAkE5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC","sourcesContent":["export { getWebInstrumentations, makeCoreConfig } from './config';\nexport type { BrowserConfig } from './config';\n\nexport { defaultEventDomain } from './consts';\n\nexport { initializeFaro } from './initialize';\n\nexport {\n buildStackFrame,\n ConsoleInstrumentation,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n ViewInstrumentation,\n WebVitalsInstrumentation,\n SessionInstrumentation,\n PerformanceInstrumentation,\n CSPInstrumentation,\n UserActionInstrumentation,\n} from './instrumentations';\nexport type { ErrorEvent, ExtendedPromiseRejectionEvent } from './instrumentations';\n\nexport { browserMeta, createSession, sdkMeta } from './metas';\n\nexport { ConsoleTransport, FetchTransport } from './transports';\nexport type {\n ClockFn,\n ConsoleTransportOptions,\n FetchTransportOptions,\n FetchTransportRequestOptions,\n} from './transports';\n\nexport {\n faro,\n allLogLevels,\n BaseExtension,\n BaseInstrumentation,\n BaseTransport,\n createInternalLogger,\n createPromiseBuffer,\n deepEqual,\n defaultExceptionType,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogLevel,\n genShortID,\n getCurrentTimestamp,\n getInternalFaroFromGlobalObject,\n getTransportBody,\n globalObject,\n internalGlobalObjectKey,\n isArray,\n isBoolean,\n isDomError,\n isDomException,\n isElement,\n isElementDefined,\n isError,\n isErrorDefined,\n isErrorEvent,\n isEvent,\n isEventDefined,\n isFunction,\n isInstanceOf,\n isInt,\n isInternalFaroOnGlobalObject,\n isMap,\n isMapDefined,\n isNull,\n isNumber,\n isObject,\n isPrimitive,\n isRegExp,\n isString,\n isSymbol,\n isSyntheticEvent,\n isThenable,\n isToString,\n isTypeof,\n isUndefined,\n isEmpty,\n InternalLoggerLevel,\n LogLevel,\n noop,\n setInternalFaroOnGlobalObject,\n TransportItemType,\n transportItemTypeToBodyKey,\n VERSION,\n EVENT_CLICK,\n EVENT_NAVIGATION,\n EVENT_ROUTE_CHANGE,\n EVENT_SESSION_EXTEND,\n EVENT_SESSION_RESUME,\n EVENT_SESSION_START,\n EVENT_VIEW_CHANGED,\n Observable,\n unknownString,\n UserActionState,\n} from '@grafana/faro-core';\n\nexport type {\n Faro,\n API,\n APIEvent,\n BaseObject,\n BaseObjectKey,\n BaseObjectPrimitiveValue,\n BaseObjectValue,\n BeforeSendHook,\n BufferItem,\n Config,\n EventAttributes,\n EventEvent,\n EventsAPI,\n ExceptionEvent,\n ExceptionEventExtended,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n Extension,\n GlobalObject,\n Instrumentation,\n Instrumentations,\n InternalLogger,\n LogContext,\n LogEvent,\n LogsAPI,\n MeasurementEvent,\n MeasurementsAPI,\n Meta,\n MetaAPI,\n MetaApp,\n MetaAttributes,\n MetaBrowser,\n MetaGetter,\n MetaItem,\n MetaPage,\n Metas,\n MetaSDK,\n MetaSDKIntegration,\n MetaSession,\n MetaUser,\n MetaView,\n OTELApi,\n Patterns,\n PromiseBuffer,\n PromiseBufferOptions,\n PromiseProducer,\n PushErrorOptions,\n PushLogOptions,\n PushMeasurementOptions,\n Stacktrace,\n StacktraceParser,\n TraceContext,\n TraceEvent,\n TracesAPI,\n Transport,\n TransportBody,\n TransportItem,\n TransportItemPayload,\n Transports,\n UnpatchedConsole,\n} from '@grafana/faro-core';\n\nexport {\n PersistentSessionsManager,\n VolatileSessionsManager,\n MAX_SESSION_PERSISTENCE_TIME,\n SESSION_EXPIRATION_TIME,\n SESSION_INACTIVITY_TIME,\n STORAGE_KEY,\n} from './instrumentations/session';\n\nexport { getIgnoreUrls, getUrlFromResource } from './utils/url';\n\nexport { userActionDataAttribute } from './instrumentations/userActions';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQhE,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,+BAA+B,EAC/B,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,OAAO,EACP,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,OAAO,EACP,cAAc,EACd,UAAU,EACV,YAAY,EACZ,KAAK,EACL,4BAA4B,EAC5B,KAAK,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACR,IAAI,EACJ,6BAA6B,EAC7B,iBAAiB,EACjB,0BAA0B,EAC1B,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAmE5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC","sourcesContent":["export { getWebInstrumentations, makeCoreConfig } from './config';\nexport type { BrowserConfig } from './config';\n\nexport { defaultEventDomain } from './consts';\n\nexport { initializeFaro } from './initialize';\n\nexport {\n buildStackFrame,\n ConsoleInstrumentation,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n ViewInstrumentation,\n WebVitalsInstrumentation,\n SessionInstrumentation,\n PerformanceInstrumentation,\n CSPInstrumentation,\n UserActionInstrumentation,\n NavigationInstrumentation,\n} from './instrumentations';\nexport type { ErrorEvent, ExtendedPromiseRejectionEvent } from './instrumentations';\n\nexport { browserMeta, createSession, sdkMeta } from './metas';\n\nexport { ConsoleTransport, FetchTransport } from './transports';\nexport type {\n ClockFn,\n ConsoleTransportOptions,\n FetchTransportOptions,\n FetchTransportRequestOptions,\n} from './transports';\n\nexport {\n faro,\n allLogLevels,\n BaseExtension,\n BaseInstrumentation,\n BaseTransport,\n createInternalLogger,\n createPromiseBuffer,\n deepEqual,\n defaultExceptionType,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogLevel,\n genShortID,\n getCurrentTimestamp,\n getInternalFaroFromGlobalObject,\n getTransportBody,\n globalObject,\n internalGlobalObjectKey,\n isArray,\n isBoolean,\n isDomError,\n isDomException,\n isElement,\n isElementDefined,\n isError,\n isErrorDefined,\n isErrorEvent,\n isEvent,\n isEventDefined,\n isFunction,\n isInstanceOf,\n isInt,\n isInternalFaroOnGlobalObject,\n isMap,\n isMapDefined,\n isNull,\n isNumber,\n isObject,\n isPrimitive,\n isRegExp,\n isString,\n isSymbol,\n isSyntheticEvent,\n isThenable,\n isToString,\n isTypeof,\n isUndefined,\n isEmpty,\n InternalLoggerLevel,\n LogLevel,\n noop,\n setInternalFaroOnGlobalObject,\n TransportItemType,\n transportItemTypeToBodyKey,\n VERSION,\n EVENT_CLICK,\n EVENT_NAVIGATION,\n EVENT_ROUTE_CHANGE,\n EVENT_SESSION_EXTEND,\n EVENT_SESSION_RESUME,\n EVENT_SESSION_START,\n EVENT_VIEW_CHANGED,\n Observable,\n unknownString,\n UserActionState,\n type UserActionInternalInterface,\n} from '@grafana/faro-core';\n\nexport type {\n Faro,\n API,\n APIEvent,\n BaseObject,\n BaseObjectKey,\n BaseObjectPrimitiveValue,\n BaseObjectValue,\n BeforeSendHook,\n BufferItem,\n Config,\n EventAttributes,\n EventEvent,\n EventsAPI,\n ExceptionEvent,\n ExceptionEventExtended,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n Extension,\n GlobalObject,\n Instrumentation,\n Instrumentations,\n InternalLogger,\n LogContext,\n LogEvent,\n LogsAPI,\n MeasurementEvent,\n MeasurementsAPI,\n Meta,\n MetaAPI,\n MetaApp,\n MetaAttributes,\n MetaBrowser,\n MetaGetter,\n MetaItem,\n MetaPage,\n Metas,\n MetaSDK,\n MetaSDKIntegration,\n MetaSession,\n MetaUser,\n MetaView,\n OTELApi,\n Patterns,\n PromiseBuffer,\n PromiseBufferOptions,\n PromiseProducer,\n PushErrorOptions,\n PushLogOptions,\n PushMeasurementOptions,\n Stacktrace,\n StacktraceParser,\n TraceContext,\n TraceEvent,\n TracesAPI,\n Transport,\n TransportBody,\n TransportItem,\n TransportItemPayload,\n Transports,\n UnpatchedConsole,\n UserActionImportance,\n} from '@grafana/faro-core';\n\nexport {\n PersistentSessionsManager,\n VolatileSessionsManager,\n MAX_SESSION_PERSISTENCE_TIME,\n SESSION_EXPIRATION_TIME,\n SESSION_INACTIVITY_TIME,\n STORAGE_KEY,\n} from './instrumentations/session';\n\nexport { getIgnoreUrls, getUrlFromResource } from './utils/url';\n\nexport { userActionDataAttribute } from './instrumentations/userActions';\n"]}