@grafana/faro-core 1.18.2 → 2.0.0-beta

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 (197) hide show
  1. package/README.md +0 -4
  2. package/dist/bundle/faro-core.iife.js +1 -1
  3. package/dist/bundle/types/api/apiTestHelpers.d.ts +2 -0
  4. package/dist/bundle/types/api/events/initialize.d.ts +4 -6
  5. package/dist/bundle/types/api/exceptions/initialize.d.ts +4 -6
  6. package/dist/bundle/types/api/index.d.ts +2 -3
  7. package/dist/bundle/types/api/initialize.d.ts +1 -3
  8. package/dist/bundle/types/api/logs/initialize.d.ts +4 -6
  9. package/dist/bundle/types/api/measurements/initialize.d.ts +4 -6
  10. package/dist/bundle/types/api/meta/initialize.d.ts +1 -5
  11. package/dist/bundle/types/api/types.d.ts +3 -44
  12. package/dist/bundle/types/api/userActions/const.d.ts +6 -0
  13. package/dist/bundle/types/api/userActions/index.d.ts +3 -0
  14. package/dist/bundle/types/api/userActions/initialize.d.ts +10 -0
  15. package/dist/bundle/types/api/userActions/types.d.ts +45 -0
  16. package/dist/bundle/types/api/userActions/userAction.d.ts +41 -0
  17. package/dist/bundle/types/index.d.ts +2 -2
  18. package/dist/bundle/types/semantic.d.ts +0 -14
  19. package/dist/bundle/types/testUtils/mockTransport.d.ts +1 -1
  20. package/dist/bundle/types/version.d.ts +1 -1
  21. package/dist/cjs/api/apiTestHelpers.js +5 -1
  22. package/dist/cjs/api/apiTestHelpers.js.map +1 -1
  23. package/dist/cjs/api/events/initialize.js +4 -5
  24. package/dist/cjs/api/events/initialize.js.map +1 -1
  25. package/dist/cjs/api/exceptions/initialize.js +6 -7
  26. package/dist/cjs/api/exceptions/initialize.js.map +1 -1
  27. package/dist/cjs/api/index.js +5 -8
  28. package/dist/cjs/api/index.js.map +1 -1
  29. package/dist/cjs/api/initialize.js +8 -8
  30. package/dist/cjs/api/initialize.js.map +1 -1
  31. package/dist/cjs/api/logs/initialize.js +6 -7
  32. package/dist/cjs/api/logs/initialize.js.map +1 -1
  33. package/dist/cjs/api/measurements/initialize.js +4 -5
  34. package/dist/cjs/api/measurements/initialize.js.map +1 -1
  35. package/dist/cjs/api/meta/initialize.js.map +1 -1
  36. package/dist/cjs/api/types.js.map +1 -1
  37. package/dist/cjs/api/userActions/const.js +11 -0
  38. package/dist/cjs/api/userActions/const.js.map +1 -0
  39. package/dist/cjs/api/userActions/index.js +11 -0
  40. package/dist/cjs/api/userActions/index.js.map +1 -0
  41. package/dist/cjs/api/userActions/initialize.js +57 -0
  42. package/dist/cjs/api/userActions/initialize.js.map +1 -0
  43. package/dist/cjs/api/userActions/types.js +11 -0
  44. package/dist/cjs/api/userActions/types.js.map +1 -0
  45. package/dist/cjs/api/userActions/userAction.js +165 -0
  46. package/dist/cjs/api/userActions/userAction.js.map +1 -0
  47. package/dist/cjs/index.js +5 -7
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/cjs/instrumentations/initialize.js +1 -1
  50. package/dist/cjs/instrumentations/initialize.js.map +1 -1
  51. package/dist/cjs/semantic.js +1 -15
  52. package/dist/cjs/semantic.js.map +1 -1
  53. package/dist/cjs/version.js +1 -1
  54. package/dist/cjs/version.js.map +1 -1
  55. package/dist/esm/api/apiTestHelpers.js +4 -0
  56. package/dist/esm/api/apiTestHelpers.js.map +1 -1
  57. package/dist/esm/api/events/initialize.js +4 -5
  58. package/dist/esm/api/events/initialize.js.map +1 -1
  59. package/dist/esm/api/exceptions/initialize.js +4 -5
  60. package/dist/esm/api/exceptions/initialize.js.map +1 -1
  61. package/dist/esm/api/index.js +1 -2
  62. package/dist/esm/api/index.js.map +1 -1
  63. package/dist/esm/api/initialize.js +8 -7
  64. package/dist/esm/api/initialize.js.map +1 -1
  65. package/dist/esm/api/logs/initialize.js +4 -5
  66. package/dist/esm/api/logs/initialize.js.map +1 -1
  67. package/dist/esm/api/measurements/initialize.js +4 -5
  68. package/dist/esm/api/measurements/initialize.js.map +1 -1
  69. package/dist/esm/api/meta/initialize.js.map +1 -1
  70. package/dist/esm/api/types.js.map +1 -1
  71. package/dist/esm/api/userActions/const.js +8 -0
  72. package/dist/esm/api/userActions/const.js.map +1 -0
  73. package/dist/esm/api/userActions/index.js +4 -0
  74. package/dist/esm/api/userActions/index.js.map +1 -0
  75. package/dist/esm/api/userActions/initialize.js +50 -0
  76. package/dist/esm/api/userActions/initialize.js.map +1 -0
  77. package/dist/esm/api/userActions/types.js +10 -0
  78. package/dist/esm/api/userActions/types.js.map +1 -0
  79. package/dist/esm/api/userActions/userAction.js +132 -0
  80. package/dist/esm/api/userActions/userAction.js.map +1 -0
  81. package/dist/esm/index.js +1 -1
  82. package/dist/esm/index.js.map +1 -1
  83. package/dist/esm/instrumentations/initialize.js +1 -1
  84. package/dist/esm/instrumentations/initialize.js.map +1 -1
  85. package/dist/esm/semantic.js +0 -14
  86. package/dist/esm/semantic.js.map +1 -1
  87. package/dist/esm/version.js +1 -1
  88. package/dist/esm/version.js.map +1 -1
  89. package/dist/spec/core/src/api/apiTestHelpers.js +5 -1
  90. package/dist/spec/core/src/api/apiTestHelpers.js.map +1 -1
  91. package/dist/spec/core/src/api/events/initialize.js +4 -5
  92. package/dist/spec/core/src/api/events/initialize.js.map +1 -1
  93. package/dist/spec/core/src/api/events/initialize.test.js +11 -33
  94. package/dist/spec/core/src/api/events/initialize.test.js.map +1 -1
  95. package/dist/spec/core/src/api/exceptions/initialize.js +6 -7
  96. package/dist/spec/core/src/api/exceptions/initialize.js.map +1 -1
  97. package/dist/spec/core/src/api/exceptions/initialize.test.js +24 -52
  98. package/dist/spec/core/src/api/exceptions/initialize.test.js.map +1 -1
  99. package/dist/spec/core/src/api/index.js +5 -8
  100. package/dist/spec/core/src/api/index.js.map +1 -1
  101. package/dist/spec/core/src/api/initialize.js +8 -8
  102. package/dist/spec/core/src/api/initialize.js.map +1 -1
  103. package/dist/spec/core/src/api/initialize.test.js +0 -50
  104. package/dist/spec/core/src/api/initialize.test.js.map +1 -1
  105. package/dist/spec/core/src/api/logs/initialize.js +6 -7
  106. package/dist/spec/core/src/api/logs/initialize.js.map +1 -1
  107. package/dist/spec/core/src/api/logs/initialize.test.js +12 -73
  108. package/dist/spec/core/src/api/logs/initialize.test.js.map +1 -1
  109. package/dist/spec/core/src/api/measurements/initialize.js +4 -5
  110. package/dist/spec/core/src/api/measurements/initialize.js.map +1 -1
  111. package/dist/spec/core/src/api/measurements/initialize.test.js +10 -72
  112. package/dist/spec/core/src/api/measurements/initialize.test.js.map +1 -1
  113. package/dist/spec/core/src/api/meta/initialize.js.map +1 -1
  114. package/dist/spec/core/src/api/types.js.map +1 -1
  115. package/dist/spec/core/src/api/userActions/const.js +11 -0
  116. package/dist/spec/core/src/api/userActions/const.js.map +1 -0
  117. package/dist/spec/core/src/api/userActions/index.js +11 -0
  118. package/dist/spec/core/src/api/userActions/index.js.map +1 -0
  119. package/dist/spec/core/src/api/userActions/initialize.js +57 -0
  120. package/dist/spec/core/src/api/userActions/initialize.js.map +1 -0
  121. package/dist/spec/core/src/api/userActions/initialize.test.js +62 -0
  122. package/dist/spec/core/src/api/userActions/initialize.test.js.map +1 -0
  123. package/dist/spec/core/src/api/userActions/types.js +11 -0
  124. package/dist/spec/core/src/api/userActions/types.js.map +1 -0
  125. package/dist/spec/core/src/api/userActions/userAction.js +165 -0
  126. package/dist/spec/core/src/api/userActions/userAction.js.map +1 -0
  127. package/dist/spec/core/src/api/userActions/userAction.test.js +75 -0
  128. package/dist/spec/core/src/api/userActions/userAction.test.js.map +1 -0
  129. package/dist/spec/core/src/index.js +5 -7
  130. package/dist/spec/core/src/index.js.map +1 -1
  131. package/dist/spec/core/src/instrumentations/initialize.js +1 -1
  132. package/dist/spec/core/src/instrumentations/initialize.js.map +1 -1
  133. package/dist/spec/core/src/semantic.js +1 -15
  134. package/dist/spec/core/src/semantic.js.map +1 -1
  135. package/dist/spec/core/src/transports/batchExecutor.test.js +10 -10
  136. package/dist/spec/core/src/transports/batchExecutor.test.js.map +1 -1
  137. package/dist/spec/core/src/version.js +1 -1
  138. package/dist/spec/core/src/version.js.map +1 -1
  139. package/dist/types/api/apiTestHelpers.d.ts +2 -0
  140. package/dist/types/api/events/initialize.d.ts +4 -6
  141. package/dist/types/api/exceptions/initialize.d.ts +4 -6
  142. package/dist/types/api/index.d.ts +2 -3
  143. package/dist/types/api/initialize.d.ts +1 -3
  144. package/dist/types/api/logs/initialize.d.ts +4 -6
  145. package/dist/types/api/measurements/initialize.d.ts +4 -6
  146. package/dist/types/api/meta/initialize.d.ts +1 -5
  147. package/dist/types/api/types.d.ts +3 -44
  148. package/dist/types/api/userActions/const.d.ts +6 -0
  149. package/dist/types/api/userActions/index.d.ts +3 -0
  150. package/dist/types/api/userActions/initialize.d.ts +10 -0
  151. package/dist/types/api/userActions/types.d.ts +45 -0
  152. package/dist/types/api/userActions/userAction.d.ts +41 -0
  153. package/dist/types/core/src/api/apiTestHelpers.d.ts +2 -0
  154. package/dist/types/core/src/api/events/initialize.d.ts +4 -6
  155. package/dist/types/core/src/api/exceptions/initialize.d.ts +4 -6
  156. package/dist/types/core/src/api/index.d.ts +2 -3
  157. package/dist/types/core/src/api/initialize.d.ts +1 -3
  158. package/dist/types/core/src/api/logs/initialize.d.ts +4 -6
  159. package/dist/types/core/src/api/measurements/initialize.d.ts +4 -6
  160. package/dist/types/core/src/api/meta/initialize.d.ts +1 -5
  161. package/dist/types/core/src/api/types.d.ts +3 -44
  162. package/dist/types/core/src/api/userActions/const.d.ts +6 -0
  163. package/dist/types/core/src/api/userActions/index.d.ts +3 -0
  164. package/dist/types/core/src/api/userActions/initialize.d.ts +10 -0
  165. package/dist/types/core/src/api/userActions/types.d.ts +45 -0
  166. package/dist/types/core/src/api/userActions/userAction.d.ts +41 -0
  167. package/dist/types/core/src/api/userActions/userAction.test.d.ts +1 -0
  168. package/dist/types/core/src/index.d.ts +2 -2
  169. package/dist/types/core/src/semantic.d.ts +0 -14
  170. package/dist/types/core/src/testUtils/mockTransport.d.ts +1 -1
  171. package/dist/types/core/src/version.d.ts +1 -1
  172. package/dist/types/index.d.ts +2 -2
  173. package/dist/types/semantic.d.ts +0 -14
  174. package/dist/types/testUtils/mockTransport.d.ts +1 -1
  175. package/dist/types/version.d.ts +1 -1
  176. package/package.json +9 -9
  177. package/dist/bundle/types/api/const.d.ts +0 -4
  178. package/dist/bundle/types/api/userActionLifecycleHandler.d.ts +0 -13
  179. package/dist/cjs/api/const.js +0 -8
  180. package/dist/cjs/api/const.js.map +0 -1
  181. package/dist/cjs/api/userActionLifecycleHandler.js +0 -58
  182. package/dist/cjs/api/userActionLifecycleHandler.js.map +0 -1
  183. package/dist/esm/api/const.js +0 -5
  184. package/dist/esm/api/const.js.map +0 -1
  185. package/dist/esm/api/userActionLifecycleHandler.js +0 -43
  186. package/dist/esm/api/userActionLifecycleHandler.js.map +0 -1
  187. package/dist/spec/core/src/api/const.js +0 -8
  188. package/dist/spec/core/src/api/const.js.map +0 -1
  189. package/dist/spec/core/src/api/userActionLifecycleHandler.js +0 -58
  190. package/dist/spec/core/src/api/userActionLifecycleHandler.js.map +0 -1
  191. package/dist/spec/core/src/api/userActionLifecycleHandler.test.js +0 -169
  192. package/dist/spec/core/src/api/userActionLifecycleHandler.test.js.map +0 -1
  193. package/dist/types/api/const.d.ts +0 -4
  194. package/dist/types/api/userActionLifecycleHandler.d.ts +0 -13
  195. package/dist/types/core/src/api/const.d.ts +0 -4
  196. package/dist/types/core/src/api/userActionLifecycleHandler.d.ts +0 -13
  197. /package/dist/types/core/src/api/{userActionLifecycleHandler.test.d.ts → userActions/initialize.test.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/api/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { USER_ACTION_CANCEL, USER_ACTION_END, USER_ACTION_HALT, USER_ACTION_START } from './const';\nimport type { EventEvent, EventsAPI } from './events';\nimport type { ExceptionEvent, ExceptionsAPI } from './exceptions';\nimport type { LogEvent, LogsAPI } from './logs';\nimport type { MeasurementEvent, MeasurementsAPI } from './measurements';\nimport type { MetaAPI } from './meta';\nimport type { TraceEvent, TracesAPI } from './traces';\n\nexport type APIEvent = LogEvent | ExceptionEvent | MeasurementEvent | TraceEvent | EventEvent;\n\nexport type API = LogsAPI & ExceptionsAPI & MeasurementsAPI & TracesAPI & MetaAPI & EventsAPI;\n\nexport type ApiMessageBusMessages =\n | UserActionStartMessage\n | UserActionEndMessage\n | UserActionCancelMessage\n | UserActionHaltMessage;\n\nexport type UserActionMessageType =\n | typeof USER_ACTION_START\n | typeof USER_ACTION_END\n | typeof USER_ACTION_CANCEL\n | typeof USER_ACTION_HALT;\n\nexport type UserActionStartMessage = {\n type: typeof USER_ACTION_START;\n name: string;\n startTime: number;\n\n /**\n * Unique identifier of the parent user action to which this action belongs.\n */\n parentId: string;\n};\n\nexport type UserActionEndMessage = {\n type: typeof USER_ACTION_END;\n name: string;\n startTime: number;\n endTime: number;\n duration: number;\n eventType: string;\n\n /**\n * Unique identifier for the user action. Will be undefined for messages related to child actions.\n */\n id: string;\n};\n\nexport type UserActionCancelMessage = {\n type: typeof USER_ACTION_CANCEL;\n name: string;\n\n /**\n * Unique identifier of the parent user action to which this action belongs.\n */\n parentId?: string;\n};\n\nexport type UserActionHaltMessage = {\n type: typeof USER_ACTION_HALT;\n name: string;\n reason: 'pending-requests';\n haltTime: number;\n\n /**\n * Unique identifier of the parent user action to which this action belongs.\n */\n parentId?: string;\n};\n\nexport type UserAction = {\n name: string;\n id?: string;\n parentId?: string;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/api/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { EventEvent, EventsAPI } from './events';\nimport type { ExceptionEvent, ExceptionsAPI } from './exceptions';\nimport type { LogEvent, LogsAPI } from './logs';\nimport type { MeasurementEvent, MeasurementsAPI } from './measurements';\nimport type { MetaAPI } from './meta';\nimport type { TraceEvent, TracesAPI } from './traces';\nimport type { UserActionsAPI } from './userActions';\n\nexport type UserAction = {\n name: string;\n id?: string;\n parentId?: string;\n};\n\nexport type APIEvent = LogEvent | ExceptionEvent | MeasurementEvent | TraceEvent | EventEvent;\n\nexport type API = LogsAPI & ExceptionsAPI & MeasurementsAPI & TracesAPI & MetaAPI & EventsAPI & UserActionsAPI;\n"]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserActionSeverity = exports.userActionStart = exports.userActionStartByApiCallEventName = void 0;
4
+ exports.userActionStartByApiCallEventName = 'faroApiCall';
5
+ exports.userActionStart = 'user_action_start';
6
+ var UserActionSeverity;
7
+ (function (UserActionSeverity) {
8
+ UserActionSeverity["Normal"] = "normal";
9
+ UserActionSeverity["Critical"] = "critical";
10
+ })(UserActionSeverity || (exports.UserActionSeverity = UserActionSeverity = {}));
11
+ //# sourceMappingURL=const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../../src/api/userActions/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,iCAAiC,GAAG,aAAa,CAAC;AAElD,QAAA,eAAe,GAAG,mBAAmB,CAAC;AAEnD,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC5B,uCAAiB,CAAA;IACjB,2CAAqB,CAAA;AACvB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B","sourcesContent":["export const userActionStartByApiCallEventName = 'faroApiCall';\n\nexport const userActionStart = 'user_action_start';\n\nexport enum UserActionSeverity {\n Normal = 'normal',\n Critical = 'critical',\n}\n"]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.userActionsMessageBus = exports.initializeUserActionsAPI = exports.UserActionSeverity = exports.UserActionState = void 0;
4
+ var types_1 = require("./types");
5
+ Object.defineProperty(exports, "UserActionState", { enumerable: true, get: function () { return types_1.UserActionState; } });
6
+ var const_1 = require("./const");
7
+ Object.defineProperty(exports, "UserActionSeverity", { enumerable: true, get: function () { return const_1.UserActionSeverity; } });
8
+ var initialize_1 = require("./initialize");
9
+ Object.defineProperty(exports, "initializeUserActionsAPI", { enumerable: true, get: function () { return initialize_1.initializeUserActionsAPI; } });
10
+ Object.defineProperty(exports, "userActionsMessageBus", { enumerable: true, get: function () { return initialize_1.userActionsMessageBus; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/api/userActions/index.ts"],"names":[],"mappings":";;;AAAA,iCAAyF;AAA3D,wGAAA,eAAe,OAAA;AAC7C,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA;AAE3B,2CAA+E;AAAtE,sHAAA,wBAAwB,OAAA;AAAE,mHAAA,qBAAqB,OAAA","sourcesContent":["export { type UserActionsAPI, UserActionState, type UserActionInterface } from './types';\nexport { UserActionSeverity } from './const';\n\nexport { initializeUserActionsAPI, userActionsMessageBus } from './initialize';\n"]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.userActionsMessageBus = void 0;
7
+ exports.initializeUserActionsAPI = initializeUserActionsAPI;
8
+ var reactive_1 = require("../../utils/reactive");
9
+ var const_1 = require("./const");
10
+ var types_1 = require("./types");
11
+ var userAction_1 = __importDefault(require("./userAction"));
12
+ exports.userActionsMessageBus = new reactive_1.Observable();
13
+ function initializeUserActionsAPI(_a) {
14
+ var transports = _a.transports, internalLogger = _a.internalLogger, config = _a.config;
15
+ var trackUserActionsExcludeItem = config.trackUserActionsExcludeItem;
16
+ // Currently running user action. It can be in either started or halted
17
+ // state
18
+ var activeUserAction;
19
+ // If there is a an action already running, return undefined to indicate
20
+ // we were not able to create one.
21
+ var startUserAction = function (name, attributes, options) {
22
+ var currentRunningUserAction = getActiveUserAction();
23
+ if (currentRunningUserAction === undefined) {
24
+ var userAction = new userAction_1.default({
25
+ name: name,
26
+ transports: transports,
27
+ attributes: attributes,
28
+ trigger: (options === null || options === void 0 ? void 0 : options.triggerName) || const_1.userActionStartByApiCallEventName,
29
+ trackUserActionsExcludeItem: trackUserActionsExcludeItem,
30
+ });
31
+ userAction
32
+ .filter(function (v) { return [types_1.UserActionState.Ended, types_1.UserActionState.Cancelled].includes(v); })
33
+ .first()
34
+ .subscribe(function () {
35
+ activeUserAction = undefined;
36
+ });
37
+ exports.userActionsMessageBus.notify({
38
+ type: const_1.userActionStart,
39
+ userAction: userAction,
40
+ });
41
+ activeUserAction = userAction;
42
+ return activeUserAction;
43
+ }
44
+ else {
45
+ internalLogger.error('Attempted to create a new user action while one is already running. This is not possible.');
46
+ return undefined;
47
+ }
48
+ };
49
+ var getActiveUserAction = function () {
50
+ return activeUserAction;
51
+ };
52
+ return {
53
+ startUserAction: startUserAction,
54
+ getActiveUserAction: getActiveUserAction,
55
+ };
56
+ }
57
+ //# sourceMappingURL=initialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../../src/api/userActions/initialize.ts"],"names":[],"mappings":";;;;;;AAgBA,4DA2DC;AAzED,iDAAkD;AAElD,iCAA6E;AAC7E,iCAMiB;AACjB,4DAAsC;AAEzB,QAAA,qBAAqB,GAAG,IAAI,qBAAU,EAAqB,CAAC;AAEzE,SAAgB,wBAAwB,CAAC,EAQxC;QAPC,UAAU,gBAAA,EACV,cAAc,oBAAA,EACd,MAAM,YAAA;IAMN,IAAM,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;IAEvE,uEAAuE;IACvE,QAAQ;IACR,IAAI,gBAAwC,CAAC;IAE7C,wEAAwE;IACxE,kCAAkC;IAClC,IAAM,eAAe,GAAsC,UACzD,IAAY,EACZ,UAAmC,EACnC,OAAgC;QAEhC,IAAM,wBAAwB,GAAG,mBAAmB,EAAE,CAAC;QAEvD,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAC3C,IAAM,UAAU,GAAG,IAAI,oBAAU,CAAC;gBAChC,IAAI,MAAA;gBACJ,UAAU,YAAA;gBACV,UAAU,YAAA;gBACV,OAAO,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,KAAI,yCAAiC;gBAClE,2BAA2B,6BAAA;aAC5B,CAAC,CAAC;YACH,UAAU;iBACP,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,uBAAe,CAAC,KAAK,EAAE,uBAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA9D,CAA8D,CAAC;iBAC7E,KAAK,EAAE;iBACP,SAAS,CAAC;gBACT,gBAAgB,GAAG,SAAS,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEL,6BAAqB,CAAC,MAAM,CAAC;gBAC3B,IAAI,EAAE,uBAAe;gBACrB,UAAU,EAAE,UAAU;aACvB,CAAC,CAAC;YACH,gBAAgB,GAAG,UAAU,CAAC;YAC9B,OAAO,gBAAgB,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,KAAK,CAAC,2FAA2F,CAAC,CAAC;YAClH,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,IAAM,mBAAmB,GAA0C;QACjE,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO;QACL,eAAe,iBAAA;QACf,mBAAmB,qBAAA;KACpB,CAAC;AACJ,CAAC","sourcesContent":["import { type InternalLogger, type Transports } from '../..';\nimport type { Config } from '../../config';\nimport { Observable } from '../../utils/reactive';\n\nimport { userActionStart, userActionStartByApiCallEventName } from './const';\nimport {\n type StartUserActionOptions,\n type UserActionInterface,\n type UserActionMessage,\n type UserActionsAPI,\n UserActionState,\n} from './types';\nimport UserAction from './userAction';\n\nexport const userActionsMessageBus = new Observable<UserActionMessage>();\n\nexport function initializeUserActionsAPI({\n transports,\n internalLogger,\n config,\n}: {\n transports: Transports;\n config: Config;\n internalLogger: InternalLogger;\n}): UserActionsAPI {\n const trackUserActionsExcludeItem = config.trackUserActionsExcludeItem;\n\n // Currently running user action. It can be in either started or halted\n // state\n let activeUserAction: UserAction | undefined;\n\n // If there is a an action already running, return undefined to indicate\n // we were not able to create one.\n const startUserAction: UserActionsAPI['startUserAction'] = (\n name: string,\n attributes?: Record<string, string>,\n options?: StartUserActionOptions\n ): UserActionInterface | undefined => {\n const currentRunningUserAction = getActiveUserAction();\n\n if (currentRunningUserAction === undefined) {\n const userAction = new UserAction({\n name,\n transports,\n attributes,\n trigger: options?.triggerName || userActionStartByApiCallEventName,\n trackUserActionsExcludeItem,\n });\n userAction\n .filter((v) => [UserActionState.Ended, UserActionState.Cancelled].includes(v))\n .first()\n .subscribe(() => {\n activeUserAction = undefined;\n });\n\n userActionsMessageBus.notify({\n type: userActionStart,\n userAction: userAction,\n });\n activeUserAction = userAction;\n return activeUserAction;\n } else {\n internalLogger.error('Attempted to create a new user action while one is already running. This is not possible.');\n return undefined;\n }\n };\n\n const getActiveUserAction: UserActionsAPI['getActiveUserAction'] = (): UserActionInterface | undefined => {\n return activeUserAction;\n };\n\n return {\n startUserAction,\n getActiveUserAction,\n };\n}\n"]}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var testUtils_1 = require("../../testUtils");
7
+ var apiTestHelpers_1 = require("../apiTestHelpers");
8
+ var initialize_1 = require("./initialize");
9
+ var userAction_1 = __importDefault(require("./userAction"));
10
+ jest.mock('../../sdk/registerFaro', function () { return ({
11
+ faro: {
12
+ api: {
13
+ pushEvent: jest.fn(),
14
+ },
15
+ },
16
+ }); });
17
+ describe('initializeUserActionsAPI', function () {
18
+ var transports;
19
+ var config;
20
+ var internalLogger;
21
+ var api;
22
+ beforeEach(function () {
23
+ transports = apiTestHelpers_1.mockTransports;
24
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
25
+ config = (0, testUtils_1.mockConfig)({
26
+ trackUserActionsExcludeItem: jest.fn(),
27
+ });
28
+ internalLogger = testUtils_1.mockInternalLogger;
29
+ api = (0, initialize_1.initializeUserActionsAPI)({ transports: transports, config: config, internalLogger: internalLogger });
30
+ });
31
+ it('getActiveUserAction returns undefined before any action is created', function () {
32
+ expect(api.getActiveUserAction()).toBeUndefined();
33
+ });
34
+ it('startUserAction returns a new UserAction when none exists', function () {
35
+ var action = api.startUserAction('first');
36
+ expect(action).toBeInstanceOf(userAction_1.default);
37
+ expect(api.getActiveUserAction()).toBe(action);
38
+ });
39
+ it('subsequent startUserAction calls will return undefined as long as there is an action running', function () {
40
+ api.startUserAction('A');
41
+ var a2 = api.startUserAction('B');
42
+ expect(a2).not.toBeDefined();
43
+ });
44
+ it('create an action while one is halted will result action not getting created', function () {
45
+ var a1 = api.startUserAction('A');
46
+ expect(a1).toBeDefined();
47
+ a1 === null || a1 === void 0 ? void 0 : a1.halt();
48
+ var a2 = api.startUserAction('B');
49
+ expect(a2).not.toBeDefined();
50
+ });
51
+ it('getActiveUserAction returns undefined if the action is ended', function () {
52
+ var action = api.startUserAction('first');
53
+ action === null || action === void 0 ? void 0 : action.end();
54
+ expect(api.getActiveUserAction()).toBeUndefined();
55
+ });
56
+ it('getActiveUserAction returns undefined if the action is cancelled', function () {
57
+ var action = api.startUserAction('first');
58
+ action === null || action === void 0 ? void 0 : action.cancel();
59
+ expect(api.getActiveUserAction()).toBeUndefined();
60
+ });
61
+ });
62
+ //# sourceMappingURL=initialize.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/userActions/initialize.test.ts"],"names":[],"mappings":";;;;;AAAA,6CAAiE;AACjE,oDAAmD;AAEnD,2CAAwD;AAExD,4DAAsC;AAEtC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,cAAM,OAAA,CAAC;IACzC,IAAI,EAAE;QACJ,GAAG,EAAE;YACH,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;SACrB;KACF;CACF,CAAC,EANwC,CAMxC,CAAC,CAAC;AAEJ,QAAQ,CAAC,0BAA0B,EAAE;IACnC,IAAI,UAAU,CAAC;IACf,IAAI,MAAM,CAAC;IACX,IAAI,cAAc,CAAC;IACnB,IAAI,GAAmB,CAAC;IAExB,UAAU,CAAC;QACT,UAAU,GAAG,+BAAc,CAAC;QAC5B,oEAAoE;QACpE,MAAM,GAAG,IAAA,sBAAU,EAAC;YAClB,2BAA2B,EAAE,IAAI,CAAC,EAAE,EAAE;SACvC,CAAC,CAAC;QACH,cAAc,GAAG,8BAAkB,CAAC;QACpC,GAAG,GAAG,IAAA,qCAAwB,EAAC,EAAE,UAAU,YAAA,EAAE,MAAM,QAAA,EAAE,cAAc,gBAAA,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE;QACvE,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE;QAC9D,IAAM,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,oBAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8FAA8F,EAAE;QACjG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACzB,IAAM,EAAE,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE;QAChF,IAAM,EAAE,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACzB,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,IAAI,EAAE,CAAC;QACX,IAAM,EAAE,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE;QACjE,IAAM,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE;QACrE,IAAM,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { mockConfig, mockInternalLogger } from '../../testUtils';\nimport { mockTransports } from '../apiTestHelpers';\n\nimport { initializeUserActionsAPI } from './initialize';\nimport { UserActionsAPI } from './types';\nimport UserAction from './userAction';\n\njest.mock('../../sdk/registerFaro', () => ({\n faro: {\n api: {\n pushEvent: jest.fn(),\n },\n },\n}));\n\ndescribe('initializeUserActionsAPI', () => {\n let transports;\n let config;\n let internalLogger;\n let api: UserActionsAPI;\n\n beforeEach(() => {\n transports = mockTransports;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n config = mockConfig({\n trackUserActionsExcludeItem: jest.fn(),\n });\n internalLogger = mockInternalLogger;\n api = initializeUserActionsAPI({ transports, config, internalLogger });\n });\n\n it('getActiveUserAction returns undefined before any action is created', () => {\n expect(api.getActiveUserAction()).toBeUndefined();\n });\n\n it('startUserAction returns a new UserAction when none exists', () => {\n const action = api.startUserAction('first');\n expect(action).toBeInstanceOf(UserAction);\n expect(api.getActiveUserAction()).toBe(action);\n });\n\n it('subsequent startUserAction calls will return undefined as long as there is an action running', () => {\n api.startUserAction('A');\n const a2 = api.startUserAction('B');\n expect(a2).not.toBeDefined();\n });\n\n it('create an action while one is halted will result action not getting created', () => {\n const a1 = api.startUserAction('A');\n expect(a1).toBeDefined();\n a1?.halt();\n const a2 = api.startUserAction('B');\n expect(a2).not.toBeDefined();\n });\n\n it('getActiveUserAction returns undefined if the action is ended', () => {\n const action = api.startUserAction('first');\n action?.end();\n expect(api.getActiveUserAction()).toBeUndefined();\n });\n\n it('getActiveUserAction returns undefined if the action is cancelled', () => {\n const action = api.startUserAction('first');\n action?.cancel();\n expect(api.getActiveUserAction()).toBeUndefined();\n });\n});\n"]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserActionState = void 0;
4
+ var UserActionState;
5
+ (function (UserActionState) {
6
+ UserActionState[UserActionState["Started"] = 0] = "Started";
7
+ UserActionState[UserActionState["Halted"] = 1] = "Halted";
8
+ UserActionState[UserActionState["Cancelled"] = 2] = "Cancelled";
9
+ UserActionState[UserActionState["Ended"] = 3] = "Ended";
10
+ })(UserActionState || (exports.UserActionState = UserActionState = {}));
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/api/userActions/types.ts"],"names":[],"mappings":";;;AAIA,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,2DAAO,CAAA;IACP,yDAAM,CAAA;IACN,+DAAS,CAAA;IACT,uDAAK,CAAA;AACP,CAAC,EALW,eAAe,+BAAf,eAAe,QAK1B","sourcesContent":["import { type TransportItem } from '../../transports';\n\nimport { UserActionSeverity, userActionStartByApiCallEventName } from './const';\n\nexport enum UserActionState {\n Started,\n Halted,\n Cancelled,\n Ended,\n}\n\nexport type HaltPredicate = () => boolean;\n\nexport interface UserActionInterface {\n name: string;\n parentId: string;\n\n addItem(item: TransportItem): void;\n extend(haltPredicate?: HaltPredicate): void;\n end(attributes?: Record<string, string>): void;\n halt(reason?: string): void;\n cancel(): void;\n getState(): UserActionState;\n}\n\nexport type ApiUserActionEvent = {\n name: string;\n attributes?: Record<string, string>;\n type: typeof userActionStartByApiCallEventName | string;\n};\n\nexport type EndUserActionProps = {\n userActionName: string;\n startTime: number;\n endTime: number;\n actionId: string;\n event: ApiUserActionEvent;\n attributes?: Record<string, string>;\n};\n\nexport type StartUserActionOptions = {\n triggerName?: string;\n severity?: UserActionSeverity;\n};\n\nexport interface UserActionsAPI {\n startUserAction: (\n name: string,\n attributes?: Record<string, string>,\n options?: StartUserActionOptions\n ) => UserActionInterface | undefined;\n getActiveUserAction: () => UserActionInterface | undefined;\n}\n\nexport type UserActionStart = {\n type: 'user_action_start';\n userAction: UserActionInterface;\n};\n\n// Union type\nexport type UserActionMessage = UserActionStart;\n"]}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ var registerFaro_1 = require("../../sdk/registerFaro");
30
+ var transports_1 = require("../../transports");
31
+ var utils_1 = require("../../utils");
32
+ var ItemBuffer_1 = require("../ItemBuffer");
33
+ var const_1 = require("./const");
34
+ var types_1 = require("./types");
35
+ var defaultFollowUpActionTimeRange = 100;
36
+ var defaultHaltTimeout = 10 * 1000;
37
+ var UserAction = /** @class */ (function (_super) {
38
+ __extends(UserAction, _super);
39
+ function UserAction(_a) {
40
+ var name = _a.name, parentId = _a.parentId, haltTimeout = _a.haltTimeout, trigger = _a.trigger, transports = _a.transports, attributes = _a.attributes, trackUserActionsExcludeItem = _a.trackUserActionsExcludeItem, _b = _a.severity, severity = _b === void 0 ? const_1.UserActionSeverity.Normal : _b;
41
+ var _this = _super.call(this) || this;
42
+ _this.name = name;
43
+ _this.attributes = attributes;
44
+ _this.id = (0, utils_1.genShortID)();
45
+ _this.trigger = trigger;
46
+ _this.cancelTimeout = defaultFollowUpActionTimeRange;
47
+ _this.haltTimeout = haltTimeout !== null && haltTimeout !== void 0 ? haltTimeout : defaultHaltTimeout;
48
+ _this.parentId = parentId !== null && parentId !== void 0 ? parentId : _this.id;
49
+ _this.trackUserActionsExcludeItem = trackUserActionsExcludeItem;
50
+ _this.severity = severity;
51
+ _this._itemBuffer = new ItemBuffer_1.ItemBuffer();
52
+ _this._transports = transports;
53
+ _this._haltTimeoutId = -1;
54
+ _this._state = types_1.UserActionState.Started;
55
+ _this._isValid = false;
56
+ _this._start();
57
+ return _this;
58
+ }
59
+ UserAction.prototype.addItem = function (item) {
60
+ this._itemBuffer.addItem(item);
61
+ };
62
+ UserAction.prototype.extend = function (haltPredicate) {
63
+ if (!this._isValid) {
64
+ this._isValid = true;
65
+ }
66
+ this._setFollowupActionTimeout(haltPredicate);
67
+ };
68
+ UserAction.prototype._setFollowupActionTimeout = function (haltPredicate) {
69
+ var _this = this;
70
+ this._timeoutId = startTimeout(this._timeoutId, function () {
71
+ if (_this._state === types_1.UserActionState.Started && (haltPredicate === null || haltPredicate === void 0 ? void 0 : haltPredicate())) {
72
+ _this.halt();
73
+ }
74
+ else if (_this._isValid) {
75
+ _this.end();
76
+ }
77
+ else {
78
+ _this.cancel();
79
+ }
80
+ }, defaultFollowUpActionTimeRange);
81
+ };
82
+ UserAction.prototype._start = function () {
83
+ this._state = types_1.UserActionState.Started;
84
+ if (this._state === types_1.UserActionState.Started) {
85
+ this.startTime = (0, utils_1.dateNow)();
86
+ }
87
+ this._setFollowupActionTimeout();
88
+ };
89
+ UserAction.prototype.halt = function () {
90
+ var _this = this;
91
+ if (this._state !== types_1.UserActionState.Started) {
92
+ return;
93
+ }
94
+ this._state = types_1.UserActionState.Halted;
95
+ // If the halt timeout fires, we end the user action as
96
+ // it is still a valid one.
97
+ this._haltTimeoutId = setTimeout(function () {
98
+ _this.end();
99
+ }, this.haltTimeout);
100
+ this.notify(this._state);
101
+ };
102
+ UserAction.prototype.cancel = function () {
103
+ if (this._state === types_1.UserActionState.Started) {
104
+ // Empty the buffer
105
+ this._itemBuffer.flushBuffer();
106
+ }
107
+ this._state = types_1.UserActionState.Cancelled;
108
+ this.notify(this._state);
109
+ };
110
+ UserAction.prototype.end = function () {
111
+ var _this = this;
112
+ if (this._state === types_1.UserActionState.Cancelled) {
113
+ return;
114
+ }
115
+ // Make sure we don't end the user action twice
116
+ clearTimeout(this._haltTimeoutId);
117
+ clearTimeout(this._timeoutId);
118
+ var endTime = (0, utils_1.dateNow)();
119
+ var duration = endTime - this.startTime;
120
+ this._state = types_1.UserActionState.Ended;
121
+ this._itemBuffer.flushBuffer(function (item) {
122
+ if (isExcludeFromUserAction(item, _this.trackUserActionsExcludeItem)) {
123
+ _this._transports.execute(item);
124
+ return;
125
+ }
126
+ var userActionItem = __assign(__assign({}, item), { payload: __assign(__assign({}, item.payload), { action: {
127
+ parentId: _this.id,
128
+ name: _this.name,
129
+ } }) });
130
+ _this._transports.execute(userActionItem);
131
+ });
132
+ this._state = types_1.UserActionState.Ended;
133
+ this.notify(this._state);
134
+ registerFaro_1.faro.api.pushEvent(this.name, __assign({ userActionStartTime: this.startTime.toString(), userActionEndTime: endTime.toString(), userActionDuration: duration.toString(), userActionTrigger: this.trigger, userActionSeverity: this.severity }, (0, utils_1.stringifyObjectValues)(this.attributes)), undefined, {
135
+ timestampOverwriteMs: this.startTime,
136
+ customPayloadTransformer: function (payload) {
137
+ payload.action = {
138
+ id: _this.id,
139
+ name: _this.name,
140
+ };
141
+ return payload;
142
+ },
143
+ });
144
+ };
145
+ UserAction.prototype.getState = function () {
146
+ return this._state;
147
+ };
148
+ return UserAction;
149
+ }(utils_1.Observable));
150
+ exports.default = UserAction;
151
+ function isExcludeFromUserAction(item, trackUserActionsExcludeItem) {
152
+ return ((trackUserActionsExcludeItem === null || trackUserActionsExcludeItem === void 0 ? void 0 : trackUserActionsExcludeItem(item)) ||
153
+ (item.type === transports_1.TransportItemType.MEASUREMENT && item.payload.type === 'web-vitals'));
154
+ }
155
+ function startTimeout(timeoutId, cb, delay) {
156
+ if (timeoutId) {
157
+ clearTimeout(timeoutId);
158
+ }
159
+ //@ts-expect-error for some reason vscode is using the node types
160
+ timeoutId = setTimeout(function () {
161
+ cb();
162
+ }, delay);
163
+ return timeoutId;
164
+ }
165
+ //# sourceMappingURL=userAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userAction.js","sourceRoot":"","sources":["../../../../../../src/api/userActions/userAction.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Config } from '../../config';\nimport { faro } from '../../sdk/registerFaro';\nimport { type TransportItem, TransportItemType, type Transports } from '../../transports';\nimport { dateNow, genShortID, Observable, stringifyObjectValues } from '../../utils';\nimport { ItemBuffer } from '../ItemBuffer';\nimport { type MeasurementEvent } from '../measurements';\nimport { type APIEvent } from '../types';\n\nimport { UserActionSeverity } from './const';\nimport { type HaltPredicate, type UserActionInterface, UserActionState } from './types';\n\nconst defaultFollowUpActionTimeRange = 100;\nconst defaultHaltTimeout = 10 * 1000;\n\nexport default class UserAction extends Observable implements UserActionInterface {\n name: string;\n id: string;\n attributes?: Record<string, string>;\n parentId: string;\n trigger: string;\n severity: UserActionSeverity;\n startTime?: number;\n trackUserActionsExcludeItem?: (item: TransportItem<APIEvent>) => boolean;\n cancelTimeout: number;\n haltTimeout: number;\n\n private _state: UserActionState;\n private _timeoutId?: number;\n private _itemBuffer: ItemBuffer<TransportItem>;\n private _transports: Transports;\n private _haltTimeoutId: any;\n private _isValid: boolean;\n\n constructor({\n name,\n parentId,\n haltTimeout,\n trigger,\n transports,\n attributes,\n trackUserActionsExcludeItem,\n severity = UserActionSeverity.Normal,\n }: {\n name: string;\n transports: Transports;\n parentId?: string;\n trigger: string;\n attributes?: Record<string, string>;\n haltTimeout?: number;\n trackUserActionsExcludeItem?: (item: TransportItem<APIEvent>) => boolean;\n severity?: UserActionSeverity;\n }) {\n super();\n this.name = name;\n this.attributes = attributes;\n this.id = genShortID();\n this.trigger = trigger;\n this.cancelTimeout = defaultFollowUpActionTimeRange;\n this.haltTimeout = haltTimeout ?? defaultHaltTimeout;\n this.parentId = parentId ?? this.id;\n this.trackUserActionsExcludeItem = trackUserActionsExcludeItem;\n this.severity = severity;\n\n this._itemBuffer = new ItemBuffer<TransportItem>();\n this._transports = transports;\n this._haltTimeoutId = -1;\n this._state = UserActionState.Started;\n this._isValid = false;\n this._start();\n }\n\n addItem(item: TransportItem) {\n this._itemBuffer.addItem(item);\n }\n\n extend(haltPredicate?: HaltPredicate) {\n if (!this._isValid) {\n this._isValid = true;\n }\n this._setFollowupActionTimeout(haltPredicate);\n }\n\n private _setFollowupActionTimeout(haltPredicate?: HaltPredicate) {\n this._timeoutId = startTimeout(\n this._timeoutId,\n () => {\n if (this._state === UserActionState.Started && haltPredicate?.()) {\n this.halt();\n } else if (this._isValid) {\n this.end();\n } else {\n this.cancel();\n }\n },\n defaultFollowUpActionTimeRange\n );\n }\n\n private _start(): void {\n this._state = UserActionState.Started;\n if (this._state === UserActionState.Started) {\n this.startTime = dateNow();\n }\n this._setFollowupActionTimeout();\n }\n\n halt() {\n if (this._state !== UserActionState.Started) {\n return;\n }\n this._state = UserActionState.Halted;\n\n // If the halt timeout fires, we end the user action as\n // it is still a valid one.\n this._haltTimeoutId = setTimeout(() => {\n this.end();\n }, this.haltTimeout);\n this.notify(this._state);\n }\n\n cancel() {\n if (this._state === UserActionState.Started) {\n // Empty the buffer\n this._itemBuffer.flushBuffer();\n }\n\n this._state = UserActionState.Cancelled;\n this.notify(this._state);\n }\n\n end() {\n if (this._state === UserActionState.Cancelled) {\n return;\n }\n\n // Make sure we don't end the user action twice\n clearTimeout(this._haltTimeoutId);\n clearTimeout(this._timeoutId);\n\n const endTime = dateNow();\n const duration = endTime - this.startTime!;\n this._state = UserActionState.Ended;\n this._itemBuffer.flushBuffer((item) => {\n if (isExcludeFromUserAction(item, this.trackUserActionsExcludeItem)) {\n this._transports.execute(item);\n return;\n }\n\n const userActionItem = {\n ...item,\n payload: {\n ...item.payload,\n action: {\n parentId: this.id,\n name: this.name,\n },\n },\n } as TransportItem;\n\n this._transports.execute(userActionItem);\n });\n\n this._state = UserActionState.Ended;\n this.notify(this._state);\n\n faro.api.pushEvent(\n this.name,\n {\n userActionStartTime: this.startTime!.toString(),\n userActionEndTime: endTime.toString(),\n userActionDuration: duration.toString(),\n userActionTrigger: this.trigger!,\n userActionSeverity: this.severity,\n ...stringifyObjectValues(this.attributes),\n },\n undefined,\n {\n timestampOverwriteMs: this.startTime,\n customPayloadTransformer: (payload) => {\n payload.action = {\n id: this.id,\n name: this.name,\n };\n\n return payload;\n },\n }\n );\n }\n\n getState(): UserActionState {\n return this._state;\n }\n}\n\nfunction isExcludeFromUserAction(\n item: TransportItem<APIEvent>,\n trackUserActionsExcludeItem: Config['trackUserActionsExcludeItem']\n) {\n return (\n trackUserActionsExcludeItem?.(item) ||\n (item.type === TransportItemType.MEASUREMENT && (item.payload as MeasurementEvent).type === 'web-vitals')\n );\n}\n\nfunction 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"]}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var globals_1 = require("@jest/globals");
7
+ var __1 = require("../..");
8
+ var apiTestHelpers_1 = require("../apiTestHelpers");
9
+ var ItemBuffer_1 = require("../ItemBuffer");
10
+ var types_1 = require("./types");
11
+ var userAction_1 = __importDefault(require("./userAction"));
12
+ globals_1.jest.useFakeTimers();
13
+ globals_1.jest.mock('../../sdk/registerFaro', function () { return ({
14
+ faro: {
15
+ api: {
16
+ pushEvent: globals_1.jest.fn(),
17
+ },
18
+ },
19
+ }); });
20
+ describe('UserAction', function () {
21
+ var transports;
22
+ beforeEach(function () {
23
+ transports = apiTestHelpers_1.mockTransports;
24
+ globals_1.jest.spyOn(ItemBuffer_1.ItemBuffer.prototype, 'flushBuffer').mockImplementation(function (cb) {
25
+ if (cb) {
26
+ var dummyItem = { type: __1.TransportItemType.EVENT, payload: {}, meta: {} };
27
+ cb(dummyItem);
28
+ }
29
+ });
30
+ });
31
+ afterEach(function () {
32
+ globals_1.jest.clearAllMocks();
33
+ globals_1.jest.clearAllTimers();
34
+ });
35
+ it('initializes in Started state and sets startTime', function () {
36
+ var ua = new userAction_1.default({ name: 'foo', transports: transports, trigger: 'foo' });
37
+ expect(ua.getState()).toBe(types_1.UserActionState.Started);
38
+ expect(typeof ua.startTime).toBe('number');
39
+ expect(ua.startTime > 0).toBe(true);
40
+ });
41
+ it('cancel() flushes the buffer and goes to Cancelled', function () {
42
+ var ua = new userAction_1.default({ name: 'foo', transports: transports, trigger: 'foo' });
43
+ ua.cancel();
44
+ expect(ua.getState()).toBe(types_1.UserActionState.Cancelled);
45
+ expect(ItemBuffer_1.ItemBuffer.prototype.flushBuffer).toHaveBeenCalled();
46
+ expect(transports.execute).not.toHaveBeenCalled();
47
+ });
48
+ it('halt() is no-op if user action is not started', function () {
49
+ var ua = new userAction_1.default({ name: 'foo', transports: transports, trigger: 'foo' });
50
+ ua.cancel();
51
+ ua.halt();
52
+ expect(ua.getState()).toBe(types_1.UserActionState.Cancelled);
53
+ });
54
+ it('halt() will end() after halt timeoute time', function () {
55
+ var ua = new userAction_1.default({ name: 'foo', transports: transports, trigger: 'foo' });
56
+ ua.extend(function () { return true; });
57
+ globals_1.jest.advanceTimersByTime(ua.cancelTimeout);
58
+ expect(ua.getState()).toBe(types_1.UserActionState.Halted);
59
+ globals_1.jest.advanceTimersByTime(ua.haltTimeout);
60
+ expect(ua.getState()).toBe(types_1.UserActionState.Ended);
61
+ });
62
+ it('end() will not fire if action is cancelled', function () {
63
+ var ua = new userAction_1.default({ name: 'foo', transports: transports, trigger: 'foo' });
64
+ ua.cancel();
65
+ ua.end();
66
+ expect(ua.getState()).toBe(types_1.UserActionState.Cancelled);
67
+ });
68
+ it('end() will send items with action payload', function () {
69
+ var ua = new userAction_1.default({ name: 'foo', transports: transports, trigger: 'foo' });
70
+ ua.end();
71
+ expect(ua.getState()).toBe(types_1.UserActionState.Ended);
72
+ expect(transports.execute).not.toHaveBeenCalledWith('koko');
73
+ });
74
+ });
75
+ //# sourceMappingURL=userAction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userAction.test.js","sourceRoot":"","sources":["../../../../../../src/api/userActions/userAction.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { jest } from '@jest/globals';\n\nimport { type TransportItem, TransportItemType, Transports } from '../..';\nimport { mockTransports } from '../apiTestHelpers';\nimport { ItemBuffer } from '../ItemBuffer';\n\nimport { UserActionState } from './types';\nimport UserAction from './userAction';\n\njest.useFakeTimers();\njest.mock('../../sdk/registerFaro', () => ({\n faro: {\n api: {\n pushEvent: jest.fn(),\n },\n },\n}));\n\ndescribe('UserAction', () => {\n let transports: Transports;\n\n beforeEach(() => {\n transports = mockTransports;\n\n jest.spyOn(ItemBuffer.prototype, 'flushBuffer').mockImplementation((cb?: (item: TransportItem) => void) => {\n if (cb) {\n const dummyItem = { type: TransportItemType.EVENT, payload: {}, meta: {} };\n cb(dummyItem);\n }\n });\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n jest.clearAllTimers();\n });\n\n it('initializes in Started state and sets startTime', () => {\n const ua = new UserAction({ name: 'foo', transports, trigger: 'foo' });\n expect(ua.getState()).toBe(UserActionState.Started);\n expect(typeof ua.startTime).toBe('number');\n expect(ua.startTime! > 0).toBe(true);\n });\n\n it('cancel() flushes the buffer and goes to Cancelled', () => {\n const ua = new UserAction({ name: 'foo', transports, trigger: 'foo' });\n ua.cancel();\n\n expect(ua.getState()).toBe(UserActionState.Cancelled);\n expect(ItemBuffer.prototype.flushBuffer).toHaveBeenCalled();\n expect(transports.execute).not.toHaveBeenCalled();\n });\n\n it('halt() is no-op if user action is not started', () => {\n const ua = new UserAction({ name: 'foo', transports, trigger: 'foo' });\n ua.cancel();\n ua.halt();\n\n expect(ua.getState()).toBe(UserActionState.Cancelled);\n });\n\n it('halt() will end() after halt timeoute time', () => {\n const ua = new UserAction({ name: 'foo', transports, trigger: 'foo' });\n ua.extend(() => true);\n jest.advanceTimersByTime(ua.cancelTimeout);\n expect(ua.getState()).toBe(UserActionState.Halted);\n jest.advanceTimersByTime(ua.haltTimeout);\n expect(ua.getState()).toBe(UserActionState.Ended);\n });\n\n it('end() will not fire if action is cancelled', () => {\n const ua = new UserAction({ name: 'foo', transports, trigger: 'foo' });\n ua.cancel();\n ua.end();\n expect(ua.getState()).toBe(UserActionState.Cancelled);\n });\n\n it('end() will send items with action payload', () => {\n const ua = new UserAction({ name: 'foo', transports, trigger: 'foo' });\n ua.end();\n expect(ua.getState()).toBe(UserActionState.Ended);\n expect(transports.execute).not.toHaveBeenCalledWith('koko');\n });\n});\n"]}
@@ -14,17 +14,15 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.isNull = exports.isMapDefined = exports.isMap = exports.isInt = exports.isInstanceOf = exports.isFunction = exports.isEventDefined = exports.isEvent = exports.isErrorEvent = exports.isErrorDefined = exports.isError = exports.isElementDefined = exports.isElement = exports.isDomException = exports.isDomError = exports.isBoolean = exports.isArray = exports.getCurrentTimestamp = exports.genShortID = exports.defaultLogLevel = exports.deepEqual = exports.createPromiseBuffer = exports.allLogLevels = exports.defaultUnpatchedConsole = exports.transportItemTypeToBodyKey = exports.TransportItemType = exports.getTransportBody = exports.BaseTransport = exports.setInternalFaroOnGlobalObject = exports.isInternalFaroOnGlobalObject = exports.internalGlobalObjectKey = exports.getInternalFaroFromGlobalObject = exports.faro = exports.InternalLoggerLevel = exports.defaultInternalLoggerLevel = exports.createInternalLogger = exports.BaseInstrumentation = exports.defaultGlobalObjectKey = exports.defaultBatchingConfig = exports.initializeFaro = exports.globalObject = exports.BaseExtension = exports.USER_ACTION_HALT = exports.USER_ACTION_START = exports.USER_ACTION_END = exports.USER_ACTION_CANCEL = exports.apiMessageBus = exports.defaultErrorArgsSerializer = exports.defaultLogArgsSerializer = exports.defaultExceptionType = void 0;
18
- exports.unknownString = exports.VERSION = exports.Observable = exports.stringifyObjectValues = exports.stringifyExternalJson = exports.getCircularDependencyReplacer = exports.isEmpty = exports.dateNow = exports.noop = exports.LogLevel = exports.isUndefined = exports.isTypeof = exports.isToString = exports.isThenable = exports.isSyntheticEvent = exports.isSymbol = exports.isString = exports.isRegExp = exports.isPrimitive = exports.isObject = exports.isNumber = void 0;
17
+ exports.isObject = exports.isNumber = exports.isNull = exports.isMapDefined = exports.isMap = exports.isInt = exports.isInstanceOf = exports.isFunction = exports.isEventDefined = exports.isEvent = exports.isErrorEvent = exports.isErrorDefined = exports.isError = exports.isElementDefined = exports.isElement = exports.isDomException = exports.isDomError = exports.isBoolean = exports.isArray = exports.getCurrentTimestamp = exports.genShortID = exports.defaultLogLevel = exports.deepEqual = exports.createPromiseBuffer = exports.allLogLevels = exports.defaultUnpatchedConsole = exports.transportItemTypeToBodyKey = exports.TransportItemType = exports.getTransportBody = exports.BaseTransport = exports.setInternalFaroOnGlobalObject = exports.isInternalFaroOnGlobalObject = exports.internalGlobalObjectKey = exports.getInternalFaroFromGlobalObject = exports.faro = exports.InternalLoggerLevel = exports.defaultInternalLoggerLevel = exports.createInternalLogger = exports.BaseInstrumentation = exports.defaultGlobalObjectKey = exports.defaultBatchingConfig = exports.initializeFaro = exports.globalObject = exports.BaseExtension = exports.userActionsMessageBus = exports.UserActionState = exports.UserActionSeverity = exports.defaultErrorArgsSerializer = exports.defaultLogArgsSerializer = exports.defaultExceptionType = void 0;
18
+ exports.unknownString = exports.VERSION = exports.Observable = exports.stringifyObjectValues = exports.stringifyExternalJson = exports.getCircularDependencyReplacer = exports.isEmpty = exports.dateNow = exports.noop = exports.LogLevel = exports.isUndefined = exports.isTypeof = exports.isToString = exports.isThenable = exports.isSyntheticEvent = exports.isSymbol = exports.isString = exports.isRegExp = exports.isPrimitive = void 0;
19
19
  var api_1 = require("./api");
20
20
  Object.defineProperty(exports, "defaultExceptionType", { enumerable: true, get: function () { return api_1.defaultExceptionType; } });
21
21
  Object.defineProperty(exports, "defaultLogArgsSerializer", { enumerable: true, get: function () { return api_1.defaultLogArgsSerializer; } });
22
22
  Object.defineProperty(exports, "defaultErrorArgsSerializer", { enumerable: true, get: function () { return api_1.defaultErrorArgsSerializer; } });
23
- Object.defineProperty(exports, "apiMessageBus", { enumerable: true, get: function () { return api_1.apiMessageBus; } });
24
- Object.defineProperty(exports, "USER_ACTION_CANCEL", { enumerable: true, get: function () { return api_1.USER_ACTION_CANCEL; } });
25
- Object.defineProperty(exports, "USER_ACTION_END", { enumerable: true, get: function () { return api_1.USER_ACTION_END; } });
26
- Object.defineProperty(exports, "USER_ACTION_START", { enumerable: true, get: function () { return api_1.USER_ACTION_START; } });
27
- Object.defineProperty(exports, "USER_ACTION_HALT", { enumerable: true, get: function () { return api_1.USER_ACTION_HALT; } });
23
+ Object.defineProperty(exports, "UserActionSeverity", { enumerable: true, get: function () { return api_1.UserActionSeverity; } });
24
+ Object.defineProperty(exports, "UserActionState", { enumerable: true, get: function () { return api_1.UserActionState; } });
25
+ Object.defineProperty(exports, "userActionsMessageBus", { enumerable: true, get: function () { return api_1.userActionsMessageBus; } });
28
26
  var extensions_1 = require("./extensions");
29
27
  Object.defineProperty(exports, "BaseExtension", { enumerable: true, get: function () { return extensions_1.BaseExtension; } });
30
28
  var globalObject_1 = require("./globalObject");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,6BASe;AARb,2GAAA,oBAAoB,OAAA;AACpB,+GAAA,wBAAwB,OAAA;AACxB,iHAAA,0BAA0B,OAAA;AAC1B,oGAAA,aAAa,OAAA;AACb,yGAAA,kBAAkB,OAAA;AAClB,sGAAA,eAAe,OAAA;AACf,wGAAA,iBAAiB,OAAA;AACjB,uGAAA,gBAAgB,OAAA;AAsClB,2CAA6C;AAApC,2GAAA,aAAa,OAAA;AAGtB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AAGrB,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,mCAAyE;AAAhE,+GAAA,qBAAqB,OAAA;AAAE,gHAAA,sBAAsB,OAAA;AAGtD,uDAAyD;AAAhD,uHAAA,mBAAmB,OAAA;AAG5B,mDAAyG;AAAhG,sHAAA,oBAAoB,OAAA;AAAE,4HAAA,0BAA0B,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAoB9E,6BAMe;AALb,2FAAA,IAAI,OAAA;AACJ,sHAAA,+BAA+B,OAAA;AAC/B,8GAAA,uBAAuB,OAAA;AACvB,mHAAA,4BAA4B,OAAA;AAC5B,oHAAA,6BAA6B,OAAA;AAI/B,6CAA2B;AAE3B,2CAA8G;AAArG,2GAAA,aAAa,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,+GAAA,iBAAiB,OAAA;AAAE,wHAAA,0BAA0B,OAAA;AAWvF,uDAA6D;AAApD,2HAAA,uBAAuB,OAAA;AAGhC,iCA2CiB;AA1Cf,qGAAA,YAAY,OAAA;AACZ,4GAAA,mBAAmB,OAAA;AACnB,kGAAA,SAAS,OAAA;AACT,wGAAA,eAAe,OAAA;AACf,mGAAA,UAAU,OAAA;AACV,4GAAA,mBAAmB,OAAA;AACnB,gGAAA,OAAO,OAAA;AACP,kGAAA,SAAS,OAAA;AACT,mGAAA,UAAU,OAAA;AACV,uGAAA,cAAc,OAAA;AACd,kGAAA,SAAS,OAAA;AACT,yGAAA,gBAAgB,OAAA;AAChB,gGAAA,OAAO,OAAA;AACP,uGAAA,cAAc,OAAA;AACd,qGAAA,YAAY,OAAA;AACZ,gGAAA,OAAO,OAAA;AACP,uGAAA,cAAc,OAAA;AACd,mGAAA,UAAU,OAAA;AACV,qGAAA,YAAY,OAAA;AACZ,8FAAA,KAAK,OAAA;AACL,8FAAA,KAAK,OAAA;AACL,qGAAA,YAAY,OAAA;AACZ,+FAAA,MAAM,OAAA;AACN,iGAAA,QAAQ,OAAA;AACR,iGAAA,QAAQ,OAAA;AACR,oGAAA,WAAW,OAAA;AACX,iGAAA,QAAQ,OAAA;AACR,iGAAA,QAAQ,OAAA;AACR,iGAAA,QAAQ,OAAA;AACR,yGAAA,gBAAgB,OAAA;AAChB,mGAAA,UAAU,OAAA;AACV,mGAAA,UAAU,OAAA;AACV,iGAAA,QAAQ,OAAA;AACR,oGAAA,WAAW,OAAA;AACX,iGAAA,QAAQ,OAAA;AACR,6FAAA,IAAI,OAAA;AACJ,gGAAA,OAAO,OAAA;AACP,gGAAA,OAAO,OAAA;AACP,sHAAA,6BAA6B,OAAA;AAC7B,8GAAA,qBAAqB,OAAA;AACrB,8GAAA,qBAAqB,OAAA;AACrB,mGAAA,UAAU,OAAA;AAcZ,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAEhB,mCAAyC;AAAhC,uGAAA,aAAa,OAAA","sourcesContent":["export {\n defaultExceptionType,\n defaultLogArgsSerializer,\n defaultErrorArgsSerializer,\n apiMessageBus,\n USER_ACTION_CANCEL,\n USER_ACTION_END,\n USER_ACTION_START,\n USER_ACTION_HALT,\n} from './api';\nexport type {\n API,\n APIEvent,\n EventAttributes,\n EventEvent,\n EventsAPI,\n ExceptionEvent,\n ExceptionEventExtended,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n LogArgsSerializer,\n LogContext,\n LogEvent,\n LogsAPI,\n MeasurementEvent,\n MeasurementsAPI,\n MetaAPI,\n OTELApi,\n PushErrorOptions,\n PushEventOptions,\n PushLogOptions,\n PushMeasurementOptions,\n Stacktrace,\n StacktraceParser,\n TraceContext,\n TraceEvent,\n TracesAPI,\n ApiMessageBusMessages,\n UserActionStartMessage,\n UserActionEndMessage,\n UserActionCancelMessage,\n UserActionHaltMessage,\n UserAction,\n} from './api';\n\nexport { BaseExtension } from './extensions';\nexport type { Extension } from './extensions';\n\nexport { globalObject } from './globalObject';\nexport type { GlobalObject } from './globalObject';\n\nexport { initializeFaro } from './initialize';\n\nexport { defaultBatchingConfig, defaultGlobalObjectKey } from './config';\nexport type { Config, Patterns } from './config';\n\nexport { BaseInstrumentation } from './instrumentations';\nexport type { Instrumentation, Instrumentations } from './instrumentations';\n\nexport { createInternalLogger, defaultInternalLoggerLevel, InternalLoggerLevel } from './internalLogger';\nexport type { InternalLogger } from './internalLogger';\n\nexport type {\n Meta,\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 MetaOverrides,\n} from './metas';\n\nexport {\n faro,\n getInternalFaroFromGlobalObject,\n internalGlobalObjectKey,\n isInternalFaroOnGlobalObject,\n setInternalFaroOnGlobalObject,\n} from './sdk';\nexport type { Faro } from './sdk';\n\nexport * from './semantic';\n\nexport { BaseTransport, getTransportBody, TransportItemType, transportItemTypeToBodyKey } from './transports';\nexport type {\n BeforeSendHook,\n SendFn,\n Transport,\n TransportBody,\n TransportItem,\n TransportItemPayload,\n Transports,\n} from './transports';\n\nexport { defaultUnpatchedConsole } from './unpatchedConsole';\nexport type { UnpatchedConsole } from './unpatchedConsole';\n\nexport {\n allLogLevels,\n createPromiseBuffer,\n deepEqual,\n defaultLogLevel,\n genShortID,\n getCurrentTimestamp,\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 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 LogLevel,\n noop,\n dateNow,\n isEmpty,\n getCircularDependencyReplacer,\n stringifyExternalJson,\n stringifyObjectValues,\n Observable,\n} from './utils';\nexport type {\n BaseObject,\n BaseObjectKey,\n BaseObjectPrimitiveValue,\n BaseObjectValue,\n BufferItem,\n PromiseBuffer,\n PromiseBufferOptions,\n PromiseProducer,\n Subscription,\n} from './utils';\n\nexport { VERSION } from './version';\n\nexport { unknownString } from './consts';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,6BAOe;AANb,2GAAA,oBAAoB,OAAA;AACpB,+GAAA,wBAAwB,OAAA;AACxB,iHAAA,0BAA0B,OAAA;AAC1B,yGAAA,kBAAkB,OAAA;AAClB,sGAAA,eAAe,OAAA;AACf,4GAAA,qBAAqB,OAAA;AAkCvB,2CAA6C;AAApC,2GAAA,aAAa,OAAA;AAGtB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AAGrB,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,mCAAyE;AAAhE,+GAAA,qBAAqB,OAAA;AAAE,gHAAA,sBAAsB,OAAA;AAGtD,uDAAyD;AAAhD,uHAAA,mBAAmB,OAAA;AAG5B,mDAAyG;AAAhG,sHAAA,oBAAoB,OAAA;AAAE,4HAAA,0BAA0B,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAoB9E,6BAMe;AALb,2FAAA,IAAI,OAAA;AACJ,sHAAA,+BAA+B,OAAA;AAC/B,8GAAA,uBAAuB,OAAA;AACvB,mHAAA,4BAA4B,OAAA;AAC5B,oHAAA,6BAA6B,OAAA;AAI/B,6CAA2B;AAE3B,2CAA8G;AAArG,2GAAA,aAAa,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,+GAAA,iBAAiB,OAAA;AAAE,wHAAA,0BAA0B,OAAA;AAWvF,uDAA6D;AAApD,2HAAA,uBAAuB,OAAA;AAGhC,iCA2CiB;AA1Cf,qGAAA,YAAY,OAAA;AACZ,4GAAA,mBAAmB,OAAA;AACnB,kGAAA,SAAS,OAAA;AACT,wGAAA,eAAe,OAAA;AACf,mGAAA,UAAU,OAAA;AACV,4GAAA,mBAAmB,OAAA;AACnB,gGAAA,OAAO,OAAA;AACP,kGAAA,SAAS,OAAA;AACT,mGAAA,UAAU,OAAA;AACV,uGAAA,cAAc,OAAA;AACd,kGAAA,SAAS,OAAA;AACT,yGAAA,gBAAgB,OAAA;AAChB,gGAAA,OAAO,OAAA;AACP,uGAAA,cAAc,OAAA;AACd,qGAAA,YAAY,OAAA;AACZ,gGAAA,OAAO,OAAA;AACP,uGAAA,cAAc,OAAA;AACd,mGAAA,UAAU,OAAA;AACV,qGAAA,YAAY,OAAA;AACZ,8FAAA,KAAK,OAAA;AACL,8FAAA,KAAK,OAAA;AACL,qGAAA,YAAY,OAAA;AACZ,+FAAA,MAAM,OAAA;AACN,iGAAA,QAAQ,OAAA;AACR,iGAAA,QAAQ,OAAA;AACR,oGAAA,WAAW,OAAA;AACX,iGAAA,QAAQ,OAAA;AACR,iGAAA,QAAQ,OAAA;AACR,iGAAA,QAAQ,OAAA;AACR,yGAAA,gBAAgB,OAAA;AAChB,mGAAA,UAAU,OAAA;AACV,mGAAA,UAAU,OAAA;AACV,iGAAA,QAAQ,OAAA;AACR,oGAAA,WAAW,OAAA;AACX,iGAAA,QAAQ,OAAA;AACR,6FAAA,IAAI,OAAA;AACJ,gGAAA,OAAO,OAAA;AACP,gGAAA,OAAO,OAAA;AACP,sHAAA,6BAA6B,OAAA;AAC7B,8GAAA,qBAAqB,OAAA;AACrB,8GAAA,qBAAqB,OAAA;AACrB,mGAAA,UAAU,OAAA;AAcZ,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAEhB,mCAAyC;AAAhC,uGAAA,aAAa,OAAA","sourcesContent":["export {\n defaultExceptionType,\n defaultLogArgsSerializer,\n defaultErrorArgsSerializer,\n UserActionSeverity,\n UserActionState,\n userActionsMessageBus,\n} from './api';\nexport type {\n API,\n APIEvent,\n EventAttributes,\n EventEvent,\n EventsAPI,\n ExceptionEvent,\n ExceptionEventExtended,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n LogArgsSerializer,\n LogContext,\n LogEvent,\n LogsAPI,\n MeasurementEvent,\n MeasurementsAPI,\n MetaAPI,\n OTELApi,\n PushErrorOptions,\n PushEventOptions,\n PushLogOptions,\n PushMeasurementOptions,\n Stacktrace,\n StacktraceParser,\n TraceContext,\n TraceEvent,\n TracesAPI,\n UserAction,\n UserActionInterface,\n} from './api';\n\nexport { BaseExtension } from './extensions';\nexport type { Extension } from './extensions';\n\nexport { globalObject } from './globalObject';\nexport type { GlobalObject } from './globalObject';\n\nexport { initializeFaro } from './initialize';\n\nexport { defaultBatchingConfig, defaultGlobalObjectKey } from './config';\nexport type { Config, Patterns } from './config';\n\nexport { BaseInstrumentation } from './instrumentations';\nexport type { Instrumentation, Instrumentations } from './instrumentations';\n\nexport { createInternalLogger, defaultInternalLoggerLevel, InternalLoggerLevel } from './internalLogger';\nexport type { InternalLogger } from './internalLogger';\n\nexport type {\n Meta,\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 MetaOverrides,\n} from './metas';\n\nexport {\n faro,\n getInternalFaroFromGlobalObject,\n internalGlobalObjectKey,\n isInternalFaroOnGlobalObject,\n setInternalFaroOnGlobalObject,\n} from './sdk';\nexport type { Faro } from './sdk';\n\nexport * from './semantic';\n\nexport { BaseTransport, getTransportBody, TransportItemType, transportItemTypeToBodyKey } from './transports';\nexport type {\n BeforeSendHook,\n SendFn,\n Transport,\n TransportBody,\n TransportItem,\n TransportItemPayload,\n Transports,\n} from './transports';\n\nexport { defaultUnpatchedConsole } from './unpatchedConsole';\nexport type { UnpatchedConsole } from './unpatchedConsole';\n\nexport {\n allLogLevels,\n createPromiseBuffer,\n deepEqual,\n defaultLogLevel,\n genShortID,\n getCurrentTimestamp,\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 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 LogLevel,\n noop,\n dateNow,\n isEmpty,\n getCircularDependencyReplacer,\n stringifyExternalJson,\n stringifyObjectValues,\n Observable,\n} from './utils';\nexport type {\n BaseObject,\n BaseObjectKey,\n BaseObjectPrimitiveValue,\n BaseObjectValue,\n BufferItem,\n PromiseBuffer,\n PromiseBufferOptions,\n PromiseProducer,\n Subscription,\n} from './utils';\n\nexport { VERSION } from './version';\n\nexport { unknownString } from './consts';\n"]}
@@ -51,7 +51,7 @@ function initializeInstrumentations(unpatchedConsole, internalLogger, config, me
51
51
  }
52
52
  return null;
53
53
  }, null);
54
- if (!existingInstrumentationIndex) {
54
+ if (existingInstrumentationIndex === null) {
55
55
  internalLogger.warn("Instrumentation \"".concat(instrumentationToRemove.name, "\" is not added"));
56
56
  return;
57
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../src/instrumentations/initialize.ts"],"names":[],"mappings":";;;;;;;;;;;AASA,gEA6EC;AA7ED,SAAgB,0BAA0B,CACxC,gBAAkC,EAClC,cAA8B,EAC9B,MAAc,EACd,KAAY,EACZ,UAAsB,EACtB,GAAQ;IAER,cAAc,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAEtD,IAAM,gBAAgB,GAAsB,EAAE,CAAC;IAE/C,IAAM,GAAG,GAA4B;QAAC,6BAAsB;aAAtB,UAAsB,EAAtB,qBAAsB,EAAtB,IAAsB;YAAtB,wCAAsB;;QAC1D,cAAc,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAEhD,mBAAmB,CAAC,OAAO,CAAC,UAAC,kBAAkB;YAC7C,cAAc,CAAC,KAAK,CAAC,mBAAW,kBAAkB,CAAC,IAAI,uBAAmB,CAAC,CAAC;YAE5E,IAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAClC,UAAC,uBAAuB,IAAK,OAAA,uBAAuB,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,EAAxD,CAAwD,CACtF,CAAC;YAEF,IAAI,MAAM,EAAE,CAAC;gBACX,cAAc,CAAC,IAAI,CAAC,0BAAmB,kBAAkB,CAAC,IAAI,sBAAmB,CAAC,CAAC;gBAEnF,OAAO;YACT,CAAC;YAED,kBAAkB,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YACvD,kBAAkB,CAAC,cAAc,GAAG,cAAc,CAAC;YACnD,kBAAkB,CAAC,MAAM,GAAG,MAAM,CAAC;YACnC,kBAAkB,CAAC,KAAK,GAAG,KAAK,CAAC;YACjC,kBAAkB,CAAC,UAAU,GAAG,UAAU,CAAC;YAC3C,kBAAkB,CAAC,GAAG,GAAG,GAAG,CAAC;YAE7B,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAE1C,kBAAkB,CAAC,UAAU,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAM,MAAM,GAA+B;QAAC,kCAA2B;aAA3B,UAA2B,EAA3B,qBAA2B,EAA3B,IAA2B;YAA3B,6CAA2B;;QACrE,cAAc,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAElD,wBAAwB,CAAC,OAAO,CAAC,UAAC,uBAAuB;;YACvD,cAAc,CAAC,KAAK,CAAC,qBAAa,uBAAuB,CAAC,IAAI,uBAAmB,CAAC,CAAC;YAEnF,IAAM,4BAA4B,GAAG,gBAAgB,CAAC,MAAM,CAC1D,UAAC,GAAG,EAAE,uBAAuB,EAAE,sBAAsB;gBACnD,IAAI,GAAG,KAAK,IAAI,IAAI,uBAAuB,CAAC,IAAI,KAAK,uBAAuB,CAAC,IAAI,EAAE,CAAC;oBAClF,OAAO,sBAAsB,CAAC;gBAChC,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,EACD,IAAI,CACL,CAAC;YAEF,IAAI,CAAC,4BAA4B,EAAE,CAAC;gBAClC,cAAc,CAAC,IAAI,CAAC,4BAAoB,uBAAuB,CAAC,IAAI,oBAAgB,CAAC,CAAC;gBAEtF,OAAO;YACT,CAAC;YAED,MAAA,MAAA,gBAAgB,CAAC,4BAA4B,CAAE,EAAC,OAAO,kDAAI,CAAC;YAE5D,gBAAgB,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,KAAA;QACH,IAAI,gBAAgB;YAClB,yBAAW,gBAAgB,QAAE;QAC/B,CAAC;QACD,MAAM,QAAA;KACP,CAAC;AACJ,CAAC","sourcesContent":["import type { API } from '../api';\nimport type { Config } from '../config';\nimport type { InternalLogger } from '../internalLogger';\nimport type { Metas } from '../metas';\nimport type { Transports } from '../transports';\nimport type { UnpatchedConsole } from '../unpatchedConsole';\n\nimport type { Instrumentation, Instrumentations } from './types';\n\nexport function initializeInstrumentations(\n unpatchedConsole: UnpatchedConsole,\n internalLogger: InternalLogger,\n config: Config,\n metas: Metas,\n transports: Transports,\n api: API\n): Instrumentations {\n internalLogger.debug('Initializing instrumentations');\n\n const instrumentations: Instrumentation[] = [];\n\n const add: Instrumentations['add'] = (...newInstrumentations) => {\n internalLogger.debug('Adding instrumentations');\n\n newInstrumentations.forEach((newInstrumentation) => {\n internalLogger.debug(`Adding \"${newInstrumentation.name}\" instrumentation`);\n\n const exists = instrumentations.some(\n (existingInstrumentation) => existingInstrumentation.name === newInstrumentation.name\n );\n\n if (exists) {\n internalLogger.warn(`Instrumentation ${newInstrumentation.name} is already added`);\n\n return;\n }\n\n newInstrumentation.unpatchedConsole = unpatchedConsole;\n newInstrumentation.internalLogger = internalLogger;\n newInstrumentation.config = config;\n newInstrumentation.metas = metas;\n newInstrumentation.transports = transports;\n newInstrumentation.api = api;\n\n instrumentations.push(newInstrumentation);\n\n newInstrumentation.initialize();\n });\n };\n\n const remove: Instrumentations['remove'] = (...instrumentationsToRemove) => {\n internalLogger.debug('Removing instrumentations');\n\n instrumentationsToRemove.forEach((instrumentationToRemove) => {\n internalLogger.debug(`Removing \"${instrumentationToRemove.name}\" instrumentation`);\n\n const existingInstrumentationIndex = instrumentations.reduce<number | null>(\n (acc, existingInstrumentation, existingTransportIndex) => {\n if (acc === null && existingInstrumentation.name === instrumentationToRemove.name) {\n return existingTransportIndex;\n }\n\n return null;\n },\n null\n );\n\n if (!existingInstrumentationIndex) {\n internalLogger.warn(`Instrumentation \"${instrumentationToRemove.name}\" is not added`);\n\n return;\n }\n\n instrumentations[existingInstrumentationIndex]!.destroy?.();\n\n instrumentations.splice(existingInstrumentationIndex, 1);\n });\n };\n\n return {\n add,\n get instrumentations() {\n return [...instrumentations];\n },\n remove,\n };\n}\n"]}
1
+ {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../src/instrumentations/initialize.ts"],"names":[],"mappings":";;;;;;;;;;;AASA,gEA6EC;AA7ED,SAAgB,0BAA0B,CACxC,gBAAkC,EAClC,cAA8B,EAC9B,MAAc,EACd,KAAY,EACZ,UAAsB,EACtB,GAAQ;IAER,cAAc,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAEtD,IAAM,gBAAgB,GAAsB,EAAE,CAAC;IAE/C,IAAM,GAAG,GAA4B;QAAC,6BAAsB;aAAtB,UAAsB,EAAtB,qBAAsB,EAAtB,IAAsB;YAAtB,wCAAsB;;QAC1D,cAAc,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAEhD,mBAAmB,CAAC,OAAO,CAAC,UAAC,kBAAkB;YAC7C,cAAc,CAAC,KAAK,CAAC,mBAAW,kBAAkB,CAAC,IAAI,uBAAmB,CAAC,CAAC;YAE5E,IAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAClC,UAAC,uBAAuB,IAAK,OAAA,uBAAuB,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,EAAxD,CAAwD,CACtF,CAAC;YAEF,IAAI,MAAM,EAAE,CAAC;gBACX,cAAc,CAAC,IAAI,CAAC,0BAAmB,kBAAkB,CAAC,IAAI,sBAAmB,CAAC,CAAC;gBAEnF,OAAO;YACT,CAAC;YAED,kBAAkB,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YACvD,kBAAkB,CAAC,cAAc,GAAG,cAAc,CAAC;YACnD,kBAAkB,CAAC,MAAM,GAAG,MAAM,CAAC;YACnC,kBAAkB,CAAC,KAAK,GAAG,KAAK,CAAC;YACjC,kBAAkB,CAAC,UAAU,GAAG,UAAU,CAAC;YAC3C,kBAAkB,CAAC,GAAG,GAAG,GAAG,CAAC;YAE7B,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAE1C,kBAAkB,CAAC,UAAU,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAM,MAAM,GAA+B;QAAC,kCAA2B;aAA3B,UAA2B,EAA3B,qBAA2B,EAA3B,IAA2B;YAA3B,6CAA2B;;QACrE,cAAc,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAElD,wBAAwB,CAAC,OAAO,CAAC,UAAC,uBAAuB;;YACvD,cAAc,CAAC,KAAK,CAAC,qBAAa,uBAAuB,CAAC,IAAI,uBAAmB,CAAC,CAAC;YAEnF,IAAM,4BAA4B,GAAG,gBAAgB,CAAC,MAAM,CAC1D,UAAC,GAAG,EAAE,uBAAuB,EAAE,sBAAsB;gBACnD,IAAI,GAAG,KAAK,IAAI,IAAI,uBAAuB,CAAC,IAAI,KAAK,uBAAuB,CAAC,IAAI,EAAE,CAAC;oBAClF,OAAO,sBAAsB,CAAC;gBAChC,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,EACD,IAAI,CACL,CAAC;YAEF,IAAI,4BAA4B,KAAK,IAAI,EAAE,CAAC;gBAC1C,cAAc,CAAC,IAAI,CAAC,4BAAoB,uBAAuB,CAAC,IAAI,oBAAgB,CAAC,CAAC;gBAEtF,OAAO;YACT,CAAC;YAED,MAAA,MAAA,gBAAgB,CAAC,4BAA4B,CAAE,EAAC,OAAO,kDAAI,CAAC;YAE5D,gBAAgB,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,KAAA;QACH,IAAI,gBAAgB;YAClB,yBAAW,gBAAgB,QAAE;QAC/B,CAAC;QACD,MAAM,QAAA;KACP,CAAC;AACJ,CAAC","sourcesContent":["import type { API } from '../api';\nimport type { Config } from '../config';\nimport type { InternalLogger } from '../internalLogger';\nimport type { Metas } from '../metas';\nimport type { Transports } from '../transports';\nimport type { UnpatchedConsole } from '../unpatchedConsole';\n\nimport type { Instrumentation, Instrumentations } from './types';\n\nexport function initializeInstrumentations(\n unpatchedConsole: UnpatchedConsole,\n internalLogger: InternalLogger,\n config: Config,\n metas: Metas,\n transports: Transports,\n api: API\n): Instrumentations {\n internalLogger.debug('Initializing instrumentations');\n\n const instrumentations: Instrumentation[] = [];\n\n const add: Instrumentations['add'] = (...newInstrumentations) => {\n internalLogger.debug('Adding instrumentations');\n\n newInstrumentations.forEach((newInstrumentation) => {\n internalLogger.debug(`Adding \"${newInstrumentation.name}\" instrumentation`);\n\n const exists = instrumentations.some(\n (existingInstrumentation) => existingInstrumentation.name === newInstrumentation.name\n );\n\n if (exists) {\n internalLogger.warn(`Instrumentation ${newInstrumentation.name} is already added`);\n\n return;\n }\n\n newInstrumentation.unpatchedConsole = unpatchedConsole;\n newInstrumentation.internalLogger = internalLogger;\n newInstrumentation.config = config;\n newInstrumentation.metas = metas;\n newInstrumentation.transports = transports;\n newInstrumentation.api = api;\n\n instrumentations.push(newInstrumentation);\n\n newInstrumentation.initialize();\n });\n };\n\n const remove: Instrumentations['remove'] = (...instrumentationsToRemove) => {\n internalLogger.debug('Removing instrumentations');\n\n instrumentationsToRemove.forEach((instrumentationToRemove) => {\n internalLogger.debug(`Removing \"${instrumentationToRemove.name}\" instrumentation`);\n\n const existingInstrumentationIndex = instrumentations.reduce<number | null>(\n (acc, existingInstrumentation, existingTransportIndex) => {\n if (acc === null && existingInstrumentation.name === instrumentationToRemove.name) {\n return existingTransportIndex;\n }\n\n return null;\n },\n null\n );\n\n if (existingInstrumentationIndex === null) {\n internalLogger.warn(`Instrumentation \"${instrumentationToRemove.name}\" is not added`);\n\n return;\n }\n\n instrumentations[existingInstrumentationIndex]!.destroy?.();\n\n instrumentations.splice(existingInstrumentationIndex, 1);\n });\n };\n\n return {\n add,\n get instrumentations() {\n return [...instrumentations];\n },\n remove,\n };\n}\n"]}
@@ -1,20 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EVENT_ROUTE_CHANGE = exports.EVENT_OVERRIDES_SERVICE_NAME = exports.EVENT_SESSION_EXTEND = exports.EVENT_SESSION_RESUME = exports.EVENT_SESSION_START = exports.EVENT_VIEW_CHANGED = exports.EVENT_NAVIGATION = exports.EVENT_CLICK = exports.Conventions = void 0;
4
- /**
5
- * @deprecated The conventions object will be removed in a future version
6
- */
7
- exports.Conventions = {
8
- /**
9
- * @deprecated The event names object will be removed in a future version
10
- */
11
- EventNames: {
12
- CLICK: 'click',
13
- NAVIGATION: 'navigation',
14
- SESSION_START: 'session_start',
15
- VIEW_CHANGED: 'view_changed',
16
- },
17
- };
3
+ exports.EVENT_ROUTE_CHANGE = exports.EVENT_OVERRIDES_SERVICE_NAME = exports.EVENT_SESSION_EXTEND = exports.EVENT_SESSION_RESUME = exports.EVENT_SESSION_START = exports.EVENT_VIEW_CHANGED = exports.EVENT_NAVIGATION = exports.EVENT_CLICK = void 0;
18
4
  exports.EVENT_CLICK = 'click';
19
5
  exports.EVENT_NAVIGATION = 'navigation';
20
6
  exports.EVENT_VIEW_CHANGED = 'view_changed';
@@ -1 +1 @@
1
- {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../../src/semantic.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,WAAW,GAAG;IACzB;;OAEG;IACH,UAAU,EAAE;QACV,KAAK,EAAE,OAAO;QACd,UAAU,EAAE,YAAY;QACxB,aAAa,EAAE,eAAe;QAC9B,YAAY,EAAE,cAAc;KAC7B;CACO,CAAC;AAEE,QAAA,WAAW,GAAG,OAAO,CAAC;AACtB,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAChC,QAAA,kBAAkB,GAAG,cAAc,CAAC;AACpC,QAAA,mBAAmB,GAAG,eAAe,CAAC;AACtC,QAAA,oBAAoB,GAAG,gBAAgB,CAAC;AACxC,QAAA,oBAAoB,GAAG,gBAAgB,CAAC;AACxC,QAAA,4BAA4B,GAAG,uBAAuB,CAAC;AACvD,QAAA,kBAAkB,GAAG,cAAc,CAAC","sourcesContent":["/**\n * @deprecated The conventions object will be removed in a future version\n */\nexport const Conventions = {\n /**\n * @deprecated The event names object will be removed in a future version\n */\n EventNames: {\n CLICK: 'click',\n NAVIGATION: 'navigation',\n SESSION_START: 'session_start',\n VIEW_CHANGED: 'view_changed',\n },\n} as const;\n\nexport const EVENT_CLICK = 'click';\nexport const EVENT_NAVIGATION = 'navigation';\nexport const EVENT_VIEW_CHANGED = 'view_changed';\nexport const EVENT_SESSION_START = 'session_start';\nexport const EVENT_SESSION_RESUME = 'session_resume';\nexport const EVENT_SESSION_EXTEND = 'session_extend';\nexport const EVENT_OVERRIDES_SERVICE_NAME = 'service_name_override';\nexport const EVENT_ROUTE_CHANGE = 'route_change';\n"]}
1
+ {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../../src/semantic.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,OAAO,CAAC;AACtB,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAChC,QAAA,kBAAkB,GAAG,cAAc,CAAC;AACpC,QAAA,mBAAmB,GAAG,eAAe,CAAC;AACtC,QAAA,oBAAoB,GAAG,gBAAgB,CAAC;AACxC,QAAA,oBAAoB,GAAG,gBAAgB,CAAC;AACxC,QAAA,4BAA4B,GAAG,uBAAuB,CAAC;AACvD,QAAA,kBAAkB,GAAG,cAAc,CAAC","sourcesContent":["export const EVENT_CLICK = 'click';\nexport const EVENT_NAVIGATION = 'navigation';\nexport const EVENT_VIEW_CHANGED = 'view_changed';\nexport const EVENT_SESSION_START = 'session_start';\nexport const EVENT_SESSION_RESUME = 'session_resume';\nexport const EVENT_SESSION_EXTEND = 'session_extend';\nexport const EVENT_OVERRIDES_SERVICE_NAME = 'service_name_override';\nexport const EVENT_ROUTE_CHANGE = 'route_change';\n"]}