@grafana/faro-core 1.19.0 → 2.0.0-beta-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 (188) hide show
  1. package/dist/bundle/faro-core.iife.js +1 -1
  2. package/dist/bundle/types/api/apiTestHelpers.d.ts +2 -0
  3. package/dist/bundle/types/api/events/initialize.d.ts +4 -6
  4. package/dist/bundle/types/api/exceptions/initialize.d.ts +4 -6
  5. package/dist/bundle/types/api/index.d.ts +2 -3
  6. package/dist/bundle/types/api/initialize.d.ts +1 -3
  7. package/dist/bundle/types/api/logs/initialize.d.ts +4 -6
  8. package/dist/bundle/types/api/measurements/initialize.d.ts +4 -6
  9. package/dist/bundle/types/api/meta/initialize.d.ts +1 -5
  10. package/dist/bundle/types/api/types.d.ts +3 -44
  11. package/dist/bundle/types/api/userActions/const.d.ts +6 -0
  12. package/dist/bundle/types/api/userActions/index.d.ts +3 -0
  13. package/dist/bundle/types/api/userActions/initialize.d.ts +10 -0
  14. package/dist/bundle/types/api/userActions/types.d.ts +45 -0
  15. package/dist/bundle/types/api/userActions/userAction.d.ts +41 -0
  16. package/dist/bundle/types/index.d.ts +2 -2
  17. package/dist/bundle/types/semantic.d.ts +0 -14
  18. package/dist/bundle/types/testUtils/mockTransport.d.ts +1 -1
  19. package/dist/bundle/types/version.d.ts +1 -1
  20. package/dist/cjs/api/apiTestHelpers.js +5 -1
  21. package/dist/cjs/api/apiTestHelpers.js.map +1 -1
  22. package/dist/cjs/api/events/initialize.js +4 -5
  23. package/dist/cjs/api/events/initialize.js.map +1 -1
  24. package/dist/cjs/api/exceptions/initialize.js +6 -7
  25. package/dist/cjs/api/exceptions/initialize.js.map +1 -1
  26. package/dist/cjs/api/index.js +5 -8
  27. package/dist/cjs/api/index.js.map +1 -1
  28. package/dist/cjs/api/initialize.js +8 -8
  29. package/dist/cjs/api/initialize.js.map +1 -1
  30. package/dist/cjs/api/logs/initialize.js +6 -7
  31. package/dist/cjs/api/logs/initialize.js.map +1 -1
  32. package/dist/cjs/api/measurements/initialize.js +4 -5
  33. package/dist/cjs/api/measurements/initialize.js.map +1 -1
  34. package/dist/cjs/api/meta/initialize.js.map +1 -1
  35. package/dist/cjs/api/types.js.map +1 -1
  36. package/dist/cjs/api/userActions/const.js +11 -0
  37. package/dist/cjs/api/userActions/const.js.map +1 -0
  38. package/dist/cjs/api/userActions/index.js +11 -0
  39. package/dist/cjs/api/userActions/index.js.map +1 -0
  40. package/dist/cjs/api/userActions/initialize.js +57 -0
  41. package/dist/cjs/api/userActions/initialize.js.map +1 -0
  42. package/dist/cjs/api/userActions/types.js +11 -0
  43. package/dist/cjs/api/userActions/types.js.map +1 -0
  44. package/dist/cjs/api/userActions/userAction.js +165 -0
  45. package/dist/cjs/api/userActions/userAction.js.map +1 -0
  46. package/dist/cjs/index.js +5 -7
  47. package/dist/cjs/index.js.map +1 -1
  48. package/dist/cjs/semantic.js +1 -15
  49. package/dist/cjs/semantic.js.map +1 -1
  50. package/dist/cjs/version.js +1 -1
  51. package/dist/cjs/version.js.map +1 -1
  52. package/dist/esm/api/apiTestHelpers.js +4 -0
  53. package/dist/esm/api/apiTestHelpers.js.map +1 -1
  54. package/dist/esm/api/events/initialize.js +4 -5
  55. package/dist/esm/api/events/initialize.js.map +1 -1
  56. package/dist/esm/api/exceptions/initialize.js +4 -5
  57. package/dist/esm/api/exceptions/initialize.js.map +1 -1
  58. package/dist/esm/api/index.js +1 -2
  59. package/dist/esm/api/index.js.map +1 -1
  60. package/dist/esm/api/initialize.js +8 -7
  61. package/dist/esm/api/initialize.js.map +1 -1
  62. package/dist/esm/api/logs/initialize.js +4 -5
  63. package/dist/esm/api/logs/initialize.js.map +1 -1
  64. package/dist/esm/api/measurements/initialize.js +4 -5
  65. package/dist/esm/api/measurements/initialize.js.map +1 -1
  66. package/dist/esm/api/meta/initialize.js.map +1 -1
  67. package/dist/esm/api/types.js.map +1 -1
  68. package/dist/esm/api/userActions/const.js +8 -0
  69. package/dist/esm/api/userActions/const.js.map +1 -0
  70. package/dist/esm/api/userActions/index.js +4 -0
  71. package/dist/esm/api/userActions/index.js.map +1 -0
  72. package/dist/esm/api/userActions/initialize.js +50 -0
  73. package/dist/esm/api/userActions/initialize.js.map +1 -0
  74. package/dist/esm/api/userActions/types.js +10 -0
  75. package/dist/esm/api/userActions/types.js.map +1 -0
  76. package/dist/esm/api/userActions/userAction.js +132 -0
  77. package/dist/esm/api/userActions/userAction.js.map +1 -0
  78. package/dist/esm/index.js +1 -1
  79. package/dist/esm/index.js.map +1 -1
  80. package/dist/esm/semantic.js +0 -14
  81. package/dist/esm/semantic.js.map +1 -1
  82. package/dist/esm/version.js +1 -1
  83. package/dist/esm/version.js.map +1 -1
  84. package/dist/spec/core/src/api/apiTestHelpers.js +5 -1
  85. package/dist/spec/core/src/api/apiTestHelpers.js.map +1 -1
  86. package/dist/spec/core/src/api/events/initialize.js +4 -5
  87. package/dist/spec/core/src/api/events/initialize.js.map +1 -1
  88. package/dist/spec/core/src/api/events/initialize.test.js +11 -33
  89. package/dist/spec/core/src/api/events/initialize.test.js.map +1 -1
  90. package/dist/spec/core/src/api/exceptions/initialize.js +6 -7
  91. package/dist/spec/core/src/api/exceptions/initialize.js.map +1 -1
  92. package/dist/spec/core/src/api/exceptions/initialize.test.js +24 -52
  93. package/dist/spec/core/src/api/exceptions/initialize.test.js.map +1 -1
  94. package/dist/spec/core/src/api/index.js +5 -8
  95. package/dist/spec/core/src/api/index.js.map +1 -1
  96. package/dist/spec/core/src/api/initialize.js +8 -8
  97. package/dist/spec/core/src/api/initialize.js.map +1 -1
  98. package/dist/spec/core/src/api/initialize.test.js +0 -50
  99. package/dist/spec/core/src/api/initialize.test.js.map +1 -1
  100. package/dist/spec/core/src/api/logs/initialize.js +6 -7
  101. package/dist/spec/core/src/api/logs/initialize.js.map +1 -1
  102. package/dist/spec/core/src/api/logs/initialize.test.js +12 -73
  103. package/dist/spec/core/src/api/logs/initialize.test.js.map +1 -1
  104. package/dist/spec/core/src/api/measurements/initialize.js +4 -5
  105. package/dist/spec/core/src/api/measurements/initialize.js.map +1 -1
  106. package/dist/spec/core/src/api/measurements/initialize.test.js +10 -72
  107. package/dist/spec/core/src/api/measurements/initialize.test.js.map +1 -1
  108. package/dist/spec/core/src/api/meta/initialize.js.map +1 -1
  109. package/dist/spec/core/src/api/types.js.map +1 -1
  110. package/dist/spec/core/src/api/userActions/const.js +11 -0
  111. package/dist/spec/core/src/api/userActions/const.js.map +1 -0
  112. package/dist/spec/core/src/api/userActions/index.js +11 -0
  113. package/dist/spec/core/src/api/userActions/index.js.map +1 -0
  114. package/dist/spec/core/src/api/userActions/initialize.js +57 -0
  115. package/dist/spec/core/src/api/userActions/initialize.js.map +1 -0
  116. package/dist/spec/core/src/api/userActions/initialize.test.js +62 -0
  117. package/dist/spec/core/src/api/userActions/initialize.test.js.map +1 -0
  118. package/dist/spec/core/src/api/userActions/types.js +11 -0
  119. package/dist/spec/core/src/api/userActions/types.js.map +1 -0
  120. package/dist/spec/core/src/api/userActions/userAction.js +165 -0
  121. package/dist/spec/core/src/api/userActions/userAction.js.map +1 -0
  122. package/dist/spec/core/src/api/userActions/userAction.test.js +75 -0
  123. package/dist/spec/core/src/api/userActions/userAction.test.js.map +1 -0
  124. package/dist/spec/core/src/index.js +5 -7
  125. package/dist/spec/core/src/index.js.map +1 -1
  126. package/dist/spec/core/src/semantic.js +1 -15
  127. package/dist/spec/core/src/semantic.js.map +1 -1
  128. package/dist/spec/core/src/version.js +1 -1
  129. package/dist/spec/core/src/version.js.map +1 -1
  130. package/dist/types/api/apiTestHelpers.d.ts +2 -0
  131. package/dist/types/api/events/initialize.d.ts +4 -6
  132. package/dist/types/api/exceptions/initialize.d.ts +4 -6
  133. package/dist/types/api/index.d.ts +2 -3
  134. package/dist/types/api/initialize.d.ts +1 -3
  135. package/dist/types/api/logs/initialize.d.ts +4 -6
  136. package/dist/types/api/measurements/initialize.d.ts +4 -6
  137. package/dist/types/api/meta/initialize.d.ts +1 -5
  138. package/dist/types/api/types.d.ts +3 -44
  139. package/dist/types/api/userActions/const.d.ts +6 -0
  140. package/dist/types/api/userActions/index.d.ts +3 -0
  141. package/dist/types/api/userActions/initialize.d.ts +10 -0
  142. package/dist/types/api/userActions/types.d.ts +45 -0
  143. package/dist/types/api/userActions/userAction.d.ts +41 -0
  144. package/dist/types/core/src/api/apiTestHelpers.d.ts +2 -0
  145. package/dist/types/core/src/api/events/initialize.d.ts +4 -6
  146. package/dist/types/core/src/api/exceptions/initialize.d.ts +4 -6
  147. package/dist/types/core/src/api/index.d.ts +2 -3
  148. package/dist/types/core/src/api/initialize.d.ts +1 -3
  149. package/dist/types/core/src/api/logs/initialize.d.ts +4 -6
  150. package/dist/types/core/src/api/measurements/initialize.d.ts +4 -6
  151. package/dist/types/core/src/api/meta/initialize.d.ts +1 -5
  152. package/dist/types/core/src/api/types.d.ts +3 -44
  153. package/dist/types/core/src/api/userActions/const.d.ts +6 -0
  154. package/dist/types/core/src/api/userActions/index.d.ts +3 -0
  155. package/dist/types/core/src/api/userActions/initialize.d.ts +10 -0
  156. package/dist/types/core/src/api/userActions/types.d.ts +45 -0
  157. package/dist/types/core/src/api/userActions/userAction.d.ts +41 -0
  158. package/dist/types/core/src/api/userActions/userAction.test.d.ts +1 -0
  159. package/dist/types/core/src/index.d.ts +2 -2
  160. package/dist/types/core/src/semantic.d.ts +0 -14
  161. package/dist/types/core/src/testUtils/mockTransport.d.ts +1 -1
  162. package/dist/types/core/src/version.d.ts +1 -1
  163. package/dist/types/index.d.ts +2 -2
  164. package/dist/types/semantic.d.ts +0 -14
  165. package/dist/types/testUtils/mockTransport.d.ts +1 -1
  166. package/dist/types/version.d.ts +1 -1
  167. package/package.json +3 -3
  168. package/dist/bundle/types/api/const.d.ts +0 -4
  169. package/dist/bundle/types/api/userActionLifecycleHandler.d.ts +0 -13
  170. package/dist/cjs/api/const.js +0 -8
  171. package/dist/cjs/api/const.js.map +0 -1
  172. package/dist/cjs/api/userActionLifecycleHandler.js +0 -58
  173. package/dist/cjs/api/userActionLifecycleHandler.js.map +0 -1
  174. package/dist/esm/api/const.js +0 -5
  175. package/dist/esm/api/const.js.map +0 -1
  176. package/dist/esm/api/userActionLifecycleHandler.js +0 -43
  177. package/dist/esm/api/userActionLifecycleHandler.js.map +0 -1
  178. package/dist/spec/core/src/api/const.js +0 -8
  179. package/dist/spec/core/src/api/const.js.map +0 -1
  180. package/dist/spec/core/src/api/userActionLifecycleHandler.js +0 -58
  181. package/dist/spec/core/src/api/userActionLifecycleHandler.js.map +0 -1
  182. package/dist/spec/core/src/api/userActionLifecycleHandler.test.js +0 -169
  183. package/dist/spec/core/src/api/userActionLifecycleHandler.test.js.map +0 -1
  184. package/dist/types/api/const.d.ts +0 -4
  185. package/dist/types/api/userActionLifecycleHandler.d.ts +0 -13
  186. package/dist/types/core/src/api/const.d.ts +0 -4
  187. package/dist/types/core/src/api/userActionLifecycleHandler.d.ts +0 -13
  188. /package/dist/types/core/src/api/{userActionLifecycleHandler.test.d.ts → userActions/initialize.test.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/logs/initialize.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { initializeFaro } from '../../initialize';\nimport { mockConfig, mockInternalLogger, MockTransport } from '../../testUtils';\nimport type { TransportItem } from '../../transports';\nimport { dateNow, LogLevel } from '../../utils';\nimport { mockMetas, mockTracesApi, mockTransports } from '../apiTestHelpers';\nimport { USER_ACTION_CANCEL, USER_ACTION_END, USER_ACTION_START } from '../const';\nimport { ItemBuffer } from '../ItemBuffer';\nimport type { API, APIEvent, ApiMessageBusMessages } from '../types';\n\nimport { initializeLogsAPI } from './initialize';\nimport type { LogArgsSerializer, LogEvent, PushLogOptions } from './types';\n\ndescribe('api.logs', () => {\n function createAPI(\n { dedupe, logArgsSerializer }: { dedupe: boolean; logArgsSerializer?: LogArgsSerializer } = { dedupe: true }\n ): [API, MockTransport] {\n const transport = new MockTransport();\n const config = mockConfig({\n dedupe,\n transports: [transport],\n logArgsSerializer,\n });\n\n const { api } = initializeFaro(config);\n\n return [api, transport];\n }\n\n describe('pushLog', () => {\n let api: API;\n let transport: MockTransport;\n\n beforeEach(() => {\n [api, transport] = createAPI();\n });\n\n describe('Filtering', () => {\n it('filters the same event', () => {\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n });\n\n it(\"doesn't filter events with partially same message\", () => {\n api.pushLog(['test', 'another test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter events with same message and different level\", () => {\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test'], {\n level: LogLevel.INFO,\n });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter events with same message and same level but different context\", () => {\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test'], {\n context: {\n a: '1',\n },\n });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"filters an event and doesn't filter the next different one\", () => {\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test'], {\n level: LogLevel.ERROR,\n });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when dedupe is false\", () => {\n [api, transport] = createAPI({ dedupe: false });\n\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when skipDedupe is true\", () => {\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test'], { skipDedupe: true });\n expect(transport.items).toHaveLength(2);\n });\n\n it('uses traceId and spanId from custom context', () => {\n const spanContext: PushLogOptions['spanContext'] = {\n traceId: 'my-trace-id',\n spanId: 'my-span-id',\n };\n\n api.pushLog(['test'], { spanContext });\n expect(transport.items).toHaveLength(1);\n\n expect((transport.items[0]?.payload as LogEvent).trace).toStrictEqual({\n trace_id: 'my-trace-id',\n span_id: 'my-span-id',\n });\n });\n });\n describe('Serializing', () => {\n it('serializes log arguments via String', () => {\n api.pushLog([1, 'test', { a: 1 }]);\n expect((transport.items[0]?.payload as LogEvent).message).toBe('1 test [object Object]');\n });\n\n it('uses custom logArgsSerializer', () => {\n const logArgsSerializer: LogArgsSerializer = (args) => JSON.stringify(args);\n\n [api, transport] = createAPI({ dedupe: true, logArgsSerializer });\n\n api.pushLog([1, 'test', { a: 1 }]);\n expect((transport.items[0]?.payload as LogEvent).message).toBe('[1,\"test\",{\"a\":1}]');\n });\n });\n\n it('Sets the timestamp to the provided custom timestamp', () => {\n api.pushLog(['test'], { timestampOverwriteMs: 123 });\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as LogEvent).timestamp).toBe('1970-01-01T00:00:00.123Z');\n });\n\n it('stringifies all values in the context object', () => {\n api.pushLog(['test'], {\n context: {\n // @ts-expect-error\n a: 1,\n b: 'foo',\n // @ts-expect-error\n c: true,\n // @ts-expect-error\n d: { e: 'bar' },\n // @ts-expect-error\n g: null,\n // @ts-expect-error\n h: undefined,\n // @ts-expect-error\n i: [1, 2, 3],\n },\n });\n\n // @ts-expect-error\n expect(transport.items[0]?.payload.context).toStrictEqual({\n a: '1',\n b: 'foo',\n c: 'true',\n d: '{\"e\":\"bar\"}',\n g: 'null',\n h: 'undefined',\n i: '[1,2,3]',\n });\n });\n\n it('does not stringify empty context', () => {\n api.pushLog(['test']);\n api.pushLog(['test2'], {\n context: {},\n });\n expect(transport.items).toHaveLength(2);\n expect((transport.items[0] as TransportItem<LogEvent>).payload.context).toBeUndefined();\n expect((transport.items[0] as TransportItem<LogEvent>).payload.context).toBeUndefined();\n });\n });\n\n describe('User action', () => {\n it('buffers the error if a user action is in progress', () => {\n const internalLogger = mockInternalLogger;\n const config = mockConfig();\n\n const actionBuffer = new ItemBuffer<TransportItem<APIEvent>>();\n\n let message: ApiMessageBusMessages | undefined;\n\n const getMessage = () => message;\n\n message = { type: 'user-action-start', name: 'testAction', startTime: Date.now(), parentId: 'parent-id' };\n const api = initializeLogsAPI({\n unpatchedConsole: console,\n internalLogger,\n config,\n metas: mockMetas,\n transports: mockTransports,\n tracesApi: mockTracesApi,\n actionBuffer,\n getMessage,\n });\n\n api.pushLog(['test']);\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: 'user-action-end',\n name: 'testAction',\n id: 'parent-id',\n startTime: dateNow(),\n endTime: dateNow(),\n duration: 0,\n eventType: 'click',\n };\n\n api.pushLog(['test-2']);\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: 'user-action-cancel',\n name: 'testAction',\n parentId: 'parent-id',\n };\n\n api.pushLog(['test-3']);\n expect(actionBuffer.size()).toBe(1);\n });\n });\n\n describe('User action', () => {\n it('buffers the item if a user action is in progress', () => {\n const internalLogger = mockInternalLogger;\n const config = mockConfig();\n\n const actionBuffer = new ItemBuffer<TransportItem<APIEvent>>();\n\n let message: ApiMessageBusMessages | undefined;\n\n const getMessage = () => message;\n\n message = {\n type: USER_ACTION_START,\n name: 'testAction',\n startTime: Date.now(),\n parentId: 'parent-id',\n };\n const api = initializeLogsAPI({\n unpatchedConsole: console,\n internalLogger,\n config,\n metas: mockMetas,\n transports: mockTransports,\n tracesApi: mockTracesApi,\n actionBuffer,\n getMessage,\n });\n\n api.pushLog(['test']);\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: USER_ACTION_END,\n name: 'testAction',\n id: 'parent-id',\n startTime: dateNow(),\n endTime: dateNow(),\n duration: 0,\n eventType: 'click',\n };\n\n api.pushLog(['test-2']);\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: USER_ACTION_CANCEL,\n name: 'testAction',\n parentId: 'parent-id',\n };\n\n api.pushLog(['test-3']);\n expect(actionBuffer.size()).toBe(1);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/logs/initialize.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { initializeFaro } from '../../initialize';\nimport { mockConfig, mockInternalLogger, MockTransport } from '../../testUtils';\nimport type { TransportItem } from '../../transports';\nimport { LogLevel } from '../../utils';\nimport { mockMetas, mockTracesApi, mockTransports, mockUserActionsApi } from '../apiTestHelpers';\nimport type { API } from '../types';\nimport UserAction from '../userActions/userAction';\n\nimport { initializeLogsAPI } from './initialize';\nimport type { LogArgsSerializer, LogEvent, PushLogOptions } from './types';\n\ndescribe('api.logs', () => {\n function createAPI(\n { dedupe, logArgsSerializer }: { dedupe: boolean; logArgsSerializer?: LogArgsSerializer } = { dedupe: true }\n ): [API, MockTransport] {\n const transport = new MockTransport();\n const config = mockConfig({\n dedupe,\n transports: [transport],\n logArgsSerializer,\n });\n\n const { api } = initializeFaro(config);\n\n return [api, transport];\n }\n\n describe('pushLog', () => {\n let api: API;\n let transport: MockTransport;\n\n beforeEach(() => {\n [api, transport] = createAPI();\n });\n\n describe('Filtering', () => {\n it('filters the same event', () => {\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n });\n\n it(\"doesn't filter events with partially same message\", () => {\n api.pushLog(['test', 'another test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter events with same message and different level\", () => {\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test'], {\n level: LogLevel.INFO,\n });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter events with same message and same level but different context\", () => {\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test'], {\n context: {\n a: '1',\n },\n });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"filters an event and doesn't filter the next different one\", () => {\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test'], {\n level: LogLevel.ERROR,\n });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when dedupe is false\", () => {\n [api, transport] = createAPI({ dedupe: false });\n\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when skipDedupe is true\", () => {\n api.pushLog(['test']);\n expect(transport.items).toHaveLength(1);\n\n api.pushLog(['test'], { skipDedupe: true });\n expect(transport.items).toHaveLength(2);\n });\n\n it('uses traceId and spanId from custom context', () => {\n const spanContext: PushLogOptions['spanContext'] = {\n traceId: 'my-trace-id',\n spanId: 'my-span-id',\n };\n\n api.pushLog(['test'], { spanContext });\n expect(transport.items).toHaveLength(1);\n\n expect((transport.items[0]?.payload as LogEvent).trace).toStrictEqual({\n trace_id: 'my-trace-id',\n span_id: 'my-span-id',\n });\n });\n });\n describe('Serializing', () => {\n it('serializes log arguments via String', () => {\n api.pushLog([1, 'test', { a: 1 }]);\n expect((transport.items[0]?.payload as LogEvent).message).toBe('1 test [object Object]');\n });\n\n it('uses custom logArgsSerializer', () => {\n const logArgsSerializer: LogArgsSerializer = (args) => JSON.stringify(args);\n\n [api, transport] = createAPI({ dedupe: true, logArgsSerializer });\n\n api.pushLog([1, 'test', { a: 1 }]);\n expect((transport.items[0]?.payload as LogEvent).message).toBe('[1,\"test\",{\"a\":1}]');\n });\n });\n\n it('Sets the timestamp to the provided custom timestamp', () => {\n api.pushLog(['test'], { timestampOverwriteMs: 123 });\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as LogEvent).timestamp).toBe('1970-01-01T00:00:00.123Z');\n });\n\n it('stringifies all values in the context object', () => {\n api.pushLog(['test'], {\n context: {\n // @ts-expect-error\n a: 1,\n b: 'foo',\n // @ts-expect-error\n c: true,\n // @ts-expect-error\n d: { e: 'bar' },\n // @ts-expect-error\n g: null,\n // @ts-expect-error\n h: undefined,\n // @ts-expect-error\n i: [1, 2, 3],\n },\n });\n\n // @ts-expect-error\n expect(transport.items[0]?.payload.context).toStrictEqual({\n a: '1',\n b: 'foo',\n c: 'true',\n d: '{\"e\":\"bar\"}',\n g: 'null',\n h: 'undefined',\n i: '[1,2,3]',\n });\n });\n\n it('does not stringify empty context', () => {\n api.pushLog(['test']);\n api.pushLog(['test2'], {\n context: {},\n });\n expect(transport.items).toHaveLength(2);\n expect((transport.items[0] as TransportItem<LogEvent>).payload.context).toBeUndefined();\n expect((transport.items[0] as TransportItem<LogEvent>).payload.context).toBeUndefined();\n });\n });\n\n describe('User action', () => {\n it('buffers the log if a user action is in progress', () => {\n const internalLogger = mockInternalLogger;\n const config = mockConfig();\n\n const api = initializeLogsAPI({\n unpatchedConsole: console,\n internalLogger,\n config,\n metas: mockMetas,\n transports: mockTransports,\n tracesApi: mockTracesApi,\n userActionsApi: mockUserActionsApi,\n });\n\n (mockUserActionsApi.getActiveUserAction as jest.Mock).mockReturnValueOnce(\n new UserAction({\n name: 'test',\n trigger: 'foo',\n transports: mockTransports,\n })\n );\n api.pushLog(['This is a log']);\n expect(mockTransports.execute).not.toHaveBeenCalled();\n });\n });\n});\n"]}
@@ -15,9 +15,8 @@ exports.initializeMeasurementsAPI = initializeMeasurementsAPI;
15
15
  var transports_1 = require("../../transports");
16
16
  var utils_1 = require("../../utils");
17
17
  var date_1 = require("../../utils/date");
18
- var const_1 = require("../const");
19
18
  function initializeMeasurementsAPI(_a) {
20
- var internalLogger = _a.internalLogger, config = _a.config, metas = _a.metas, transports = _a.transports, tracesApi = _a.tracesApi, actionBuffer = _a.actionBuffer, getMessage = _a.getMessage;
19
+ var internalLogger = _a.internalLogger, config = _a.config, metas = _a.metas, transports = _a.transports, tracesApi = _a.tracesApi, userActionsApi = _a.userActionsApi;
21
20
  internalLogger.debug('Initializing measurements API');
22
21
  var lastPayload = null;
23
22
  var pushMeasurement = function (payload, _a) {
@@ -45,9 +44,9 @@ function initializeMeasurementsAPI(_a) {
45
44
  }
46
45
  lastPayload = testingPayload;
47
46
  internalLogger.debug('Pushing measurement\n', item);
48
- var msg = getMessage();
49
- if (msg && msg.type === const_1.USER_ACTION_START) {
50
- actionBuffer.addItem(item);
47
+ var activeUserAction = userActionsApi.getActiveUserAction();
48
+ if (activeUserAction) {
49
+ activeUserAction.addItem(item);
51
50
  }
52
51
  else {
53
52
  transports.execute(item);
@@ -1 +1 @@
1
- {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../../src/api/measurements/initialize.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAeA,8DA2EC;AAvFD,+CAAqD;AAGrD,qCAAqG;AACrG,yCAAwD;AACxD,kCAA6C;AAO7C,SAAgB,yBAAyB,CAAC,EAiBzC;QAhBC,cAAc,oBAAA,EACd,MAAM,YAAA,EACN,KAAK,WAAA,EACL,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,YAAY,kBAAA,EACZ,UAAU,gBAAA;IAWV,cAAc,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAEtD,IAAI,WAAW,GAAiE,IAAI,CAAC;IAErF,IAAM,eAAe,GAAuC,UAC1D,OAAO,EACP,EAA+D;YAA/D,qBAA6D,EAAE,KAAA,EAA7D,UAAU,gBAAA,EAAE,OAAO,aAAA,EAAE,WAAW,iBAAA,EAAE,oBAAoB,0BAAA;QAExD,IAAI,CAAC;YACH,IAAM,GAAG,GAAG,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;YAE3C,IAAM,IAAI,GAAoC;gBAC5C,IAAI,EAAE,8BAAiB,CAAC,WAAW;gBACnC,OAAO,wBACF,OAAO,KACV,KAAK,EAAE,WAAW;wBAChB,CAAC,CAAC;4BACE,QAAQ,EAAE,WAAW,CAAC,OAAO;4BAC7B,OAAO,EAAE,WAAW,CAAC,MAAM;yBAC5B;wBACH,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE,EAC/B,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,IAAA,2BAAoB,EAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAA,2BAAmB,GAAE,EACpG,OAAO,EAAE,IAAA,eAAO,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GACxC;gBACD,IAAI,EAAE,KAAK,CAAC,KAAK;aAClB,CAAC;YAEF,IAAM,cAAc,GAAG;gBACrB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,CAAC;YAEF,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAA,cAAM,EAAC,WAAW,CAAC,IAAI,IAAA,iBAAS,EAAC,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;gBACnG,cAAc,CAAC,KAAK,CAAC,oEAAoE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEzG,OAAO;YACT,CAAC;YAED,WAAW,GAAG,cAAc,CAAC;YAE7B,cAAc,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;YAEpD,IAAM,GAAG,GAAG,UAAU,EAAE,CAAC;YACzB,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,yBAAiB,EAAE,CAAC;gBAC1C,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,eAAe,iBAAA;KAChB,CAAC;AACJ,CAAC","sourcesContent":["import type { Config } from '../../config';\nimport type { InternalLogger } from '../../internalLogger';\nimport type { Metas } from '../../metas';\nimport { TransportItemType } from '../../transports';\nimport type { TransportItem, Transports } from '../../transports';\nimport type { UnpatchedConsole } from '../../unpatchedConsole';\nimport { deepEqual, getCurrentTimestamp, isEmpty, isNull, stringifyObjectValues } from '../../utils';\nimport { timestampToIsoString } from '../../utils/date';\nimport { USER_ACTION_START } from '../const';\nimport type { ItemBuffer } from '../ItemBuffer';\nimport type { TracesAPI } from '../traces';\nimport type { ApiMessageBusMessages } from '../types';\n\nimport type { MeasurementEvent, MeasurementsAPI } from './types';\n\nexport function initializeMeasurementsAPI({\n internalLogger,\n config,\n metas,\n transports,\n tracesApi,\n actionBuffer,\n getMessage,\n}: {\n unpatchedConsole: UnpatchedConsole;\n internalLogger: InternalLogger;\n config: Config;\n metas: Metas;\n transports: Transports;\n tracesApi: TracesAPI;\n actionBuffer: ItemBuffer<TransportItem>;\n getMessage: () => ApiMessageBusMessages | undefined;\n}): MeasurementsAPI {\n internalLogger.debug('Initializing measurements API');\n\n let lastPayload: Pick<MeasurementEvent, 'type' | 'values' | 'context'> | null = null;\n\n const pushMeasurement: MeasurementsAPI['pushMeasurement'] = (\n payload,\n { skipDedupe, context, spanContext, timestampOverwriteMs } = {}\n ) => {\n try {\n const ctx = stringifyObjectValues(context);\n\n const item: TransportItem<MeasurementEvent> = {\n type: TransportItemType.MEASUREMENT,\n payload: {\n ...payload,\n trace: spanContext\n ? {\n trace_id: spanContext.traceId,\n span_id: spanContext.spanId,\n }\n : tracesApi.getTraceContext(),\n timestamp: timestampOverwriteMs ? timestampToIsoString(timestampOverwriteMs) : getCurrentTimestamp(),\n context: isEmpty(ctx) ? undefined : ctx,\n },\n meta: metas.value,\n };\n\n const testingPayload = {\n type: item.payload.type,\n values: item.payload.values,\n context: item.payload.context,\n };\n\n if (!skipDedupe && config.dedupe && !isNull(lastPayload) && deepEqual(testingPayload, lastPayload)) {\n internalLogger.debug('Skipping measurement push because it is the same as the last one\\n', item.payload);\n\n return;\n }\n\n lastPayload = testingPayload;\n\n internalLogger.debug('Pushing measurement\\n', item);\n\n const msg = getMessage();\n if (msg && msg.type === USER_ACTION_START) {\n actionBuffer.addItem(item);\n } else {\n transports.execute(item);\n }\n } catch (err) {\n internalLogger.error('Error pushing measurement\\n', err);\n }\n };\n\n return {\n pushMeasurement,\n };\n}\n"]}
1
+ {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../../src/api/measurements/initialize.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAaA,8DAyEC;AAnFD,+CAAqD;AAGrD,qCAAqG;AACrG,yCAAwD;AAMxD,SAAgB,yBAAyB,CAAC,EAezC;QAdC,cAAc,oBAAA,EACd,MAAM,YAAA,EACN,KAAK,WAAA,EACL,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,cAAc,oBAAA;IAUd,cAAc,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAEtD,IAAI,WAAW,GAAiE,IAAI,CAAC;IAErF,IAAM,eAAe,GAAuC,UAC1D,OAAO,EACP,EAA+D;YAA/D,qBAA6D,EAAE,KAAA,EAA7D,UAAU,gBAAA,EAAE,OAAO,aAAA,EAAE,WAAW,iBAAA,EAAE,oBAAoB,0BAAA;QAExD,IAAI,CAAC;YACH,IAAM,GAAG,GAAG,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;YAE3C,IAAM,IAAI,GAAoC;gBAC5C,IAAI,EAAE,8BAAiB,CAAC,WAAW;gBACnC,OAAO,wBACF,OAAO,KACV,KAAK,EAAE,WAAW;wBAChB,CAAC,CAAC;4BACE,QAAQ,EAAE,WAAW,CAAC,OAAO;4BAC7B,OAAO,EAAE,WAAW,CAAC,MAAM;yBAC5B;wBACH,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE,EAC/B,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,IAAA,2BAAoB,EAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAA,2BAAmB,GAAE,EACpG,OAAO,EAAE,IAAA,eAAO,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GACxC;gBACD,IAAI,EAAE,KAAK,CAAC,KAAK;aAClB,CAAC;YAEF,IAAM,cAAc,GAAG;gBACrB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,CAAC;YAEF,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAA,cAAM,EAAC,WAAW,CAAC,IAAI,IAAA,iBAAS,EAAC,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;gBACnG,cAAc,CAAC,KAAK,CAAC,oEAAoE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEzG,OAAO;YACT,CAAC;YAED,WAAW,GAAG,cAAc,CAAC;YAE7B,cAAc,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;YAEpD,IAAM,gBAAgB,GAAG,cAAc,CAAC,mBAAmB,EAAE,CAAC;YAC9D,IAAI,gBAAgB,EAAE,CAAC;gBACrB,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,eAAe,iBAAA;KAChB,CAAC;AACJ,CAAC","sourcesContent":["import type { Config } from '../../config';\nimport type { InternalLogger } from '../../internalLogger';\nimport type { Metas } from '../../metas';\nimport { TransportItemType } from '../../transports';\nimport type { TransportItem, Transports } from '../../transports';\nimport type { UnpatchedConsole } from '../../unpatchedConsole';\nimport { deepEqual, getCurrentTimestamp, isEmpty, isNull, stringifyObjectValues } from '../../utils';\nimport { timestampToIsoString } from '../../utils/date';\nimport type { TracesAPI } from '../traces';\nimport type { UserActionsAPI } from '../userActions';\n\nimport type { MeasurementEvent, MeasurementsAPI } from './types';\n\nexport function initializeMeasurementsAPI({\n internalLogger,\n config,\n metas,\n transports,\n tracesApi,\n userActionsApi,\n}: {\n unpatchedConsole: UnpatchedConsole;\n internalLogger: InternalLogger;\n config: Config;\n metas: Metas;\n transports: Transports;\n tracesApi: TracesAPI;\n userActionsApi: UserActionsAPI;\n}): MeasurementsAPI {\n internalLogger.debug('Initializing measurements API');\n\n let lastPayload: Pick<MeasurementEvent, 'type' | 'values' | 'context'> | null = null;\n\n const pushMeasurement: MeasurementsAPI['pushMeasurement'] = (\n payload,\n { skipDedupe, context, spanContext, timestampOverwriteMs } = {}\n ) => {\n try {\n const ctx = stringifyObjectValues(context);\n\n const item: TransportItem<MeasurementEvent> = {\n type: TransportItemType.MEASUREMENT,\n payload: {\n ...payload,\n trace: spanContext\n ? {\n trace_id: spanContext.traceId,\n span_id: spanContext.spanId,\n }\n : tracesApi.getTraceContext(),\n timestamp: timestampOverwriteMs ? timestampToIsoString(timestampOverwriteMs) : getCurrentTimestamp(),\n context: isEmpty(ctx) ? undefined : ctx,\n },\n meta: metas.value,\n };\n\n const testingPayload = {\n type: item.payload.type,\n values: item.payload.values,\n context: item.payload.context,\n };\n\n if (!skipDedupe && config.dedupe && !isNull(lastPayload) && deepEqual(testingPayload, lastPayload)) {\n internalLogger.debug('Skipping measurement push because it is the same as the last one\\n', item.payload);\n\n return;\n }\n\n lastPayload = testingPayload;\n\n internalLogger.debug('Pushing measurement\\n', item);\n\n const activeUserAction = userActionsApi.getActiveUserAction();\n if (activeUserAction) {\n activeUserAction.addItem(item);\n } else {\n transports.execute(item);\n }\n } catch (err) {\n internalLogger.error('Error pushing measurement\\n', err);\n }\n };\n\n return {\n pushMeasurement,\n };\n}\n"]}
@@ -10,13 +10,14 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
13
16
  Object.defineProperty(exports, "__esModule", { value: true });
14
- var __1 = require("../..");
15
17
  var initialize_1 = require("../../initialize");
16
18
  var testUtils_1 = require("../../testUtils");
17
19
  var apiTestHelpers_1 = require("../apiTestHelpers");
18
- var const_1 = require("../const");
19
- var ItemBuffer_1 = require("../ItemBuffer");
20
+ var userAction_1 = __importDefault(require("../userActions/userAction"));
20
21
  var initialize_2 = require("./initialize");
21
22
  describe('api.measurements', function () {
22
23
  function createAPI(_a) {
@@ -220,10 +221,6 @@ describe('api.measurements', function () {
220
221
  it('buffers the measurement if a user action is in progress', function () {
221
222
  var internalLogger = testUtils_1.mockInternalLogger;
222
223
  var config = (0, testUtils_1.mockConfig)();
223
- var actionBuffer = new ItemBuffer_1.ItemBuffer();
224
- var message;
225
- var getMessage = function () { return message; };
226
- message = { type: 'user-action-start', name: 'testAction', startTime: Date.now(), parentId: 'parent-id' };
227
224
  var api = (0, initialize_2.initializeMeasurementsAPI)({
228
225
  unpatchedConsole: console,
229
226
  internalLogger: internalLogger,
@@ -231,74 +228,15 @@ describe('api.measurements', function () {
231
228
  metas: apiTestHelpers_1.mockMetas,
232
229
  transports: apiTestHelpers_1.mockTransports,
233
230
  tracesApi: apiTestHelpers_1.mockTracesApi,
234
- actionBuffer: actionBuffer,
235
- getMessage: getMessage,
231
+ userActionsApi: apiTestHelpers_1.mockUserActionsApi,
236
232
  });
237
- api.pushMeasurement({ type: 'test', values: { a: 1 } });
238
- expect(actionBuffer.size()).toBe(1);
239
- message = {
240
- type: 'user-action-end',
241
- name: 'testAction',
242
- id: 'parent-id',
243
- startTime: (0, __1.dateNow)(),
244
- endTime: (0, __1.dateNow)(),
245
- duration: 0,
246
- eventType: 'click',
247
- };
248
- api.pushMeasurement({ type: 'test-2', values: { a: 1 } });
249
- expect(actionBuffer.size()).toBe(1);
250
- message = {
251
- type: 'user-action-cancel',
252
- name: 'testAction',
253
- parentId: 'parent-id',
254
- };
255
- api.pushMeasurement({ type: 'test-3', values: { a: 1 } });
256
- expect(actionBuffer.size()).toBe(1);
257
- });
258
- });
259
- describe('User action', function () {
260
- it('buffers the item if a user action is in progress', function () {
261
- var internalLogger = testUtils_1.mockInternalLogger;
262
- var config = (0, testUtils_1.mockConfig)();
263
- var actionBuffer = new ItemBuffer_1.ItemBuffer();
264
- var message;
265
- var getMessage = function () { return message; };
266
- message = {
267
- type: const_1.USER_ACTION_START,
268
- name: 'testAction',
269
- startTime: Date.now(),
270
- parentId: 'parent-id',
271
- };
272
- var api = (0, initialize_2.initializeMeasurementsAPI)({
273
- unpatchedConsole: console,
274
- internalLogger: internalLogger,
275
- config: config,
276
- metas: apiTestHelpers_1.mockMetas,
233
+ apiTestHelpers_1.mockUserActionsApi.getActiveUserAction.mockReturnValueOnce(new userAction_1.default({
234
+ name: 'test',
235
+ trigger: 'foo',
277
236
  transports: apiTestHelpers_1.mockTransports,
278
- tracesApi: apiTestHelpers_1.mockTracesApi,
279
- actionBuffer: actionBuffer,
280
- getMessage: getMessage,
281
- });
237
+ }));
282
238
  api.pushMeasurement({ type: 'test', values: { a: 1 } });
283
- expect(actionBuffer.size()).toBe(1);
284
- message = {
285
- type: const_1.USER_ACTION_END,
286
- name: 'testAction',
287
- id: 'parent-id',
288
- startTime: (0, __1.dateNow)(),
289
- endTime: (0, __1.dateNow)(),
290
- duration: 0,
291
- eventType: 'click',
292
- };
293
- api.pushMeasurement({ type: 'test-2', values: { a: 1 } });
294
- expect(actionBuffer.size()).toBe(1);
295
- message = {
296
- type: const_1.USER_ACTION_CANCEL,
297
- name: 'testAction',
298
- parentId: 'parent-id',
299
- };
300
- api.pushMeasurement({ type: 'test-3', values: { a: 1 } });
301
- expect(actionBuffer.size()).toBe(1);
239
+ expect(apiTestHelpers_1.mockTransports.execute).not.toHaveBeenCalled();
302
240
  });
303
241
  });
304
242
  });
@@ -1 +1 @@
1
- {"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/measurements/initialize.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n APIEvent,\n ApiMessageBusMessages,\n dateNow,\n type MeasurementEvent,\n type PushMeasurementOptions,\n TransportItem,\n} from '../..';\nimport { initializeFaro } from '../../initialize';\nimport { mockConfig, mockInternalLogger, MockTransport } from '../../testUtils';\nimport { mockMetas, mockTracesApi, mockTransports } from '../apiTestHelpers';\nimport { USER_ACTION_CANCEL, USER_ACTION_END, USER_ACTION_START } from '../const';\nimport { ItemBuffer } from '../ItemBuffer';\nimport type { API } from '../types';\n\nimport { initializeMeasurementsAPI } from './initialize';\n\ndescribe('api.measurements', () => {\n function createAPI({ dedupe }: { dedupe: boolean } = { dedupe: true }): [API, MockTransport] {\n const transport = new MockTransport();\n const config = mockConfig({\n dedupe,\n transports: [transport],\n });\n\n const { api } = initializeFaro(config);\n\n return [api, transport];\n }\n\n describe('pushMeasurement', () => {\n let api: API;\n let transport: MockTransport;\n\n beforeEach(() => {\n [api, transport] = createAPI();\n });\n\n describe('Filtering', () => {\n it('filters the same measurement', () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n });\n\n it('filters the same measurement with the same context', () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const context = { foo: 'bar' };\n\n api.pushMeasurement(measurement, { context });\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { context });\n expect(transport.items).toHaveLength(1);\n });\n\n it(\"doesn't filter events with different context\", () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement, { context: { foo: 'bar' } });\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { context: { bar: 'baz' } });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter measurements with same type and partially same values\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n values: {\n ...measurement1.values,\n b: 2,\n },\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter measurements with different type and same values\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n type: 'web-vitals',\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"filters a measurement and doesn't filter the next different one\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n type: 'web-vitals',\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when dedupe is false\", () => {\n [api, transport] = createAPI({ dedupe: false });\n\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when skipDedupe is true\", () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { skipDedupe: true });\n expect(transport.items).toHaveLength(2);\n });\n\n it('uses traceId and spanId from custom context', () => {\n const spanContext: PushMeasurementOptions['spanContext'] = {\n traceId: 'my-trace-id',\n spanId: 'my-span-id',\n };\n\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement, { spanContext });\n expect(transport.items).toHaveLength(1);\n\n expect((transport.items[0]?.payload as MeasurementEvent).trace).toStrictEqual({\n trace_id: 'my-trace-id',\n span_id: 'my-span-id',\n });\n });\n });\n\n it('Sets the timestamp to the provided custom timestamp', () => {\n api.pushMeasurement(\n {\n type: 'custom',\n values: {\n a: 1,\n },\n },\n { timestampOverwriteMs: 123 }\n );\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as MeasurementEvent).timestamp).toBe('1970-01-01T00:00:00.123Z');\n });\n\n it('stringifies all values in the attributes object', () => {\n api.pushEvent('test', {\n // @ts-expect-error\n a: 1,\n b: 'foo',\n // @ts-expect-error\n c: true,\n // @ts-expect-error\n d: { e: 'bar' },\n // @ts-expect-error\n g: null,\n // @ts-expect-error\n h: undefined,\n // @ts-expect-error\n i: [1, 2, 3],\n });\n\n // @ts-expect-error\n expect(transport.items[0]?.payload.attributes).toStrictEqual({\n a: '1',\n b: 'foo',\n c: 'true',\n d: '{\"e\":\"bar\"}',\n g: 'null',\n h: 'undefined',\n i: '[1,2,3]',\n });\n });\n\n it('does not stringify empty context', () => {\n api.pushMeasurement(\n {\n type: 'custom',\n values: {},\n },\n {\n context: {},\n }\n );\n api.pushMeasurement({\n type: 'custom2',\n values: {},\n });\n expect(transport.items).toHaveLength(2);\n expect((transport.items[0] as TransportItem<MeasurementEvent>).payload.context).toBeUndefined();\n expect((transport.items[0] as TransportItem<MeasurementEvent>).payload.context).toBeUndefined();\n });\n });\n\n describe('User action', () => {\n it('buffers the measurement if a user action is in progress', () => {\n const internalLogger = mockInternalLogger;\n const config = mockConfig();\n\n const actionBuffer = new ItemBuffer<TransportItem<APIEvent>>();\n\n let message: ApiMessageBusMessages | undefined;\n\n const getMessage = () => message;\n\n message = { type: 'user-action-start', name: 'testAction', startTime: Date.now(), parentId: 'parent-id' };\n const api = initializeMeasurementsAPI({\n unpatchedConsole: console,\n internalLogger,\n config,\n metas: mockMetas,\n transports: mockTransports,\n tracesApi: mockTracesApi,\n actionBuffer,\n getMessage,\n });\n\n api.pushMeasurement({ type: 'test', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: 'user-action-end',\n name: 'testAction',\n id: 'parent-id',\n startTime: dateNow(),\n endTime: dateNow(),\n duration: 0,\n eventType: 'click',\n };\n\n api.pushMeasurement({ type: 'test-2', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: 'user-action-cancel',\n name: 'testAction',\n parentId: 'parent-id',\n };\n\n api.pushMeasurement({ type: 'test-3', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n });\n });\n\n describe('User action', () => {\n it('buffers the item if a user action is in progress', () => {\n const internalLogger = mockInternalLogger;\n const config = mockConfig();\n\n const actionBuffer = new ItemBuffer<TransportItem<APIEvent>>();\n\n let message: ApiMessageBusMessages | undefined;\n\n const getMessage = () => message;\n\n message = {\n type: USER_ACTION_START,\n name: 'testAction',\n startTime: Date.now(),\n parentId: 'parent-id',\n };\n const api = initializeMeasurementsAPI({\n unpatchedConsole: console,\n internalLogger,\n config,\n metas: mockMetas,\n transports: mockTransports,\n tracesApi: mockTracesApi,\n actionBuffer,\n getMessage,\n });\n\n api.pushMeasurement({ type: 'test', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: USER_ACTION_END,\n name: 'testAction',\n id: 'parent-id',\n startTime: dateNow(),\n endTime: dateNow(),\n duration: 0,\n eventType: 'click',\n };\n\n api.pushMeasurement({ type: 'test-2', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: USER_ACTION_CANCEL,\n name: 'testAction',\n parentId: 'parent-id',\n };\n\n api.pushMeasurement({ type: 'test-3', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/measurements/initialize.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { type MeasurementEvent, type PushMeasurementOptions, TransportItem } from '../..';\nimport { initializeFaro } from '../../initialize';\nimport { mockConfig, mockInternalLogger, MockTransport } from '../../testUtils';\nimport { mockMetas, mockTracesApi, mockTransports, mockUserActionsApi } from '../apiTestHelpers';\nimport type { API } from '../types';\nimport UserAction from '../userActions/userAction';\n\nimport { initializeMeasurementsAPI } from './initialize';\n\ndescribe('api.measurements', () => {\n function createAPI({ dedupe }: { dedupe: boolean } = { dedupe: true }): [API, MockTransport] {\n const transport = new MockTransport();\n const config = mockConfig({\n dedupe,\n transports: [transport],\n });\n\n const { api } = initializeFaro(config);\n\n return [api, transport];\n }\n\n describe('pushMeasurement', () => {\n let api: API;\n let transport: MockTransport;\n\n beforeEach(() => {\n [api, transport] = createAPI();\n });\n\n describe('Filtering', () => {\n it('filters the same measurement', () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n });\n\n it('filters the same measurement with the same context', () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const context = { foo: 'bar' };\n\n api.pushMeasurement(measurement, { context });\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { context });\n expect(transport.items).toHaveLength(1);\n });\n\n it(\"doesn't filter events with different context\", () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement, { context: { foo: 'bar' } });\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { context: { bar: 'baz' } });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter measurements with same type and partially same values\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n values: {\n ...measurement1.values,\n b: 2,\n },\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter measurements with different type and same values\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n type: 'web-vitals',\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"filters a measurement and doesn't filter the next different one\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n type: 'web-vitals',\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when dedupe is false\", () => {\n [api, transport] = createAPI({ dedupe: false });\n\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when skipDedupe is true\", () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { skipDedupe: true });\n expect(transport.items).toHaveLength(2);\n });\n\n it('uses traceId and spanId from custom context', () => {\n const spanContext: PushMeasurementOptions['spanContext'] = {\n traceId: 'my-trace-id',\n spanId: 'my-span-id',\n };\n\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement, { spanContext });\n expect(transport.items).toHaveLength(1);\n\n expect((transport.items[0]?.payload as MeasurementEvent).trace).toStrictEqual({\n trace_id: 'my-trace-id',\n span_id: 'my-span-id',\n });\n });\n });\n\n it('Sets the timestamp to the provided custom timestamp', () => {\n api.pushMeasurement(\n {\n type: 'custom',\n values: {\n a: 1,\n },\n },\n { timestampOverwriteMs: 123 }\n );\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as MeasurementEvent).timestamp).toBe('1970-01-01T00:00:00.123Z');\n });\n\n it('stringifies all values in the attributes object', () => {\n api.pushEvent('test', {\n // @ts-expect-error\n a: 1,\n b: 'foo',\n // @ts-expect-error\n c: true,\n // @ts-expect-error\n d: { e: 'bar' },\n // @ts-expect-error\n g: null,\n // @ts-expect-error\n h: undefined,\n // @ts-expect-error\n i: [1, 2, 3],\n });\n\n // @ts-expect-error\n expect(transport.items[0]?.payload.attributes).toStrictEqual({\n a: '1',\n b: 'foo',\n c: 'true',\n d: '{\"e\":\"bar\"}',\n g: 'null',\n h: 'undefined',\n i: '[1,2,3]',\n });\n });\n\n it('does not stringify empty context', () => {\n api.pushMeasurement(\n {\n type: 'custom',\n values: {},\n },\n {\n context: {},\n }\n );\n api.pushMeasurement({\n type: 'custom2',\n values: {},\n });\n expect(transport.items).toHaveLength(2);\n expect((transport.items[0] as TransportItem<MeasurementEvent>).payload.context).toBeUndefined();\n expect((transport.items[0] as TransportItem<MeasurementEvent>).payload.context).toBeUndefined();\n });\n });\n\n describe('User action', () => {\n it('buffers the measurement if a user action is in progress', () => {\n const internalLogger = mockInternalLogger;\n const config = mockConfig();\n\n const api = initializeMeasurementsAPI({\n unpatchedConsole: console,\n internalLogger,\n config,\n metas: mockMetas,\n transports: mockTransports,\n tracesApi: mockTracesApi,\n userActionsApi: mockUserActionsApi,\n });\n\n (mockUserActionsApi.getActiveUserAction as jest.Mock).mockReturnValueOnce(\n new UserAction({\n name: 'test',\n trigger: 'foo',\n transports: mockTransports,\n })\n );\n api.pushMeasurement({ type: 'test', values: { a: 1 } });\n expect(mockTransports.execute).not.toHaveBeenCalled();\n });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../../src/api/meta/initialize.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Config } from '../../config';\nimport type { InternalLogger } from '../../internalLogger';\nimport type { Meta, Metas } from '../../metas';\nimport type { TransportItem, Transports } from '../../transports';\nimport type { UnpatchedConsole } from '../../unpatchedConsole';\nimport { isEmpty, isString } from '../../utils/is';\nimport type { ItemBuffer } from '../ItemBuffer';\nimport type { TracesAPI } from '../traces';\nimport type { ApiMessageBusMessages } from '../types';\n\nimport type { MetaAPI } from './types';\n\nexport function initializeMetaAPI({\n internalLogger,\n metas,\n}: {\n unpatchedConsole: UnpatchedConsole;\n internalLogger: InternalLogger;\n config: Config;\n metas: Metas;\n transports: Transports;\n tracesApi: TracesAPI;\n actionBuffer: ItemBuffer<TransportItem>;\n getMessage: () => ApiMessageBusMessages | undefined;\n}): MetaAPI {\n internalLogger.debug('Initializing meta API');\n\n let metaSession: Partial<Meta> | undefined = undefined;\n let metaUser: Partial<Meta> | undefined = undefined;\n let metaView: Partial<Meta> | undefined = undefined;\n let metaPage: Partial<Meta> | undefined = undefined;\n\n const setUser: MetaAPI['setUser'] = (user) => {\n if (metaUser) {\n metas.remove(metaUser);\n }\n\n metaUser = {\n user,\n };\n\n metas.add(metaUser);\n };\n\n const setSession: MetaAPI['setSession'] = (session, options) => {\n const newOverrides = options?.overrides;\n const overrides = newOverrides\n ? {\n overrides: {\n ...metaSession?.session?.overrides,\n ...newOverrides,\n },\n }\n : {};\n\n if (metaSession) {\n metas.remove(metaSession);\n }\n\n metaSession = {\n session: {\n // if session is undefined, session manager force creates a new session\n ...(isEmpty(session) ? undefined : session),\n ...overrides,\n },\n };\n\n metas.add(metaSession);\n };\n\n const getSession: MetaAPI['getSession'] = () => metas.value.session;\n\n const setView: MetaAPI['setView'] = (view, options) => {\n if (options?.overrides) {\n setSession(getSession(), { overrides: options.overrides });\n }\n\n if (metaView?.view?.name === view?.name) {\n return;\n }\n\n const previousView = metaView;\n\n metaView = {\n view,\n };\n\n metas.add(metaView);\n\n if (previousView) {\n metas.remove(previousView);\n }\n };\n\n const getView: MetaAPI['getView'] = () => metas.value.view;\n\n const setPage: MetaAPI['setPage'] = (page) => {\n const pageMeta = isString(page)\n ? {\n // metaPage is available once setPage() has been called.\n // This is because page self updating metas like page need to be added as a function\n // Thus we call getPage in case metaPage is empty\n ...(metaPage?.page ?? getPage()),\n id: page,\n }\n : page;\n\n if (metaPage) {\n metas.remove(metaPage);\n }\n\n metaPage = {\n page: pageMeta,\n };\n\n metas.add(metaPage);\n };\n\n const getPage: MetaAPI['getPage'] = () => metas.value.page;\n\n return {\n setUser,\n resetUser: setUser as MetaAPI['resetUser'],\n setSession,\n resetSession: setSession as MetaAPI['resetSession'],\n getSession,\n setView,\n getView,\n setPage,\n getPage,\n };\n}\n"]}
1
+ {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../../src/api/meta/initialize.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Config } from '../../config';\nimport type { InternalLogger } from '../../internalLogger';\nimport type { Meta, Metas } from '../../metas';\nimport type { Transports } from '../../transports';\nimport type { UnpatchedConsole } from '../../unpatchedConsole';\nimport { isEmpty, isString } from '../../utils/is';\nimport type { TracesAPI } from '../traces';\n\nimport type { MetaAPI } from './types';\n\nexport function initializeMetaAPI({\n internalLogger,\n metas,\n}: {\n unpatchedConsole: UnpatchedConsole;\n internalLogger: InternalLogger;\n config: Config;\n metas: Metas;\n transports: Transports;\n tracesApi: TracesAPI;\n}): MetaAPI {\n internalLogger.debug('Initializing meta API');\n\n let metaSession: Partial<Meta> | undefined = undefined;\n let metaUser: Partial<Meta> | undefined = undefined;\n let metaView: Partial<Meta> | undefined = undefined;\n let metaPage: Partial<Meta> | undefined = undefined;\n\n const setUser: MetaAPI['setUser'] = (user) => {\n if (metaUser) {\n metas.remove(metaUser);\n }\n\n metaUser = {\n user,\n };\n\n metas.add(metaUser);\n };\n\n const setSession: MetaAPI['setSession'] = (session, options) => {\n const newOverrides = options?.overrides;\n const overrides = newOverrides\n ? {\n overrides: {\n ...metaSession?.session?.overrides,\n ...newOverrides,\n },\n }\n : {};\n\n if (metaSession) {\n metas.remove(metaSession);\n }\n\n metaSession = {\n session: {\n // if session is undefined, session manager force creates a new session\n ...(isEmpty(session) ? undefined : session),\n ...overrides,\n },\n };\n\n metas.add(metaSession);\n };\n\n const getSession: MetaAPI['getSession'] = () => metas.value.session;\n\n const setView: MetaAPI['setView'] = (view, options) => {\n if (options?.overrides) {\n setSession(getSession(), { overrides: options.overrides });\n }\n\n if (metaView?.view?.name === view?.name) {\n return;\n }\n\n const previousView = metaView;\n\n metaView = {\n view,\n };\n\n metas.add(metaView);\n\n if (previousView) {\n metas.remove(previousView);\n }\n };\n\n const getView: MetaAPI['getView'] = () => metas.value.view;\n\n const setPage: MetaAPI['setPage'] = (page) => {\n const pageMeta = isString(page)\n ? {\n // metaPage is available once setPage() has been called.\n // This is because page self updating metas like page need to be added as a function\n // Thus we call getPage in case metaPage is empty\n ...(metaPage?.page ?? getPage()),\n id: page,\n }\n : page;\n\n if (metaPage) {\n metas.remove(metaPage);\n }\n\n metaPage = {\n page: pageMeta,\n };\n\n metas.add(metaPage);\n };\n\n const getPage: MetaAPI['getPage'] = () => metas.value.page;\n\n return {\n setUser,\n resetUser: setUser as MetaAPI['resetUser'],\n setSession,\n resetSession: setSession as MetaAPI['resetSession'],\n getSession,\n setView,\n getView,\n setPage,\n getPage,\n };\n}\n"]}
@@ -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"]}