@newrelic/browser-agent 1.264.0 → 1.265.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/cjs/common/aggregate/aggregator.js +1 -2
  3. package/dist/cjs/common/config/{state/configurable.js → configurable.js} +1 -1
  4. package/dist/cjs/common/config/{state/info.js → info.js} +1 -1
  5. package/dist/cjs/common/config/{state/init.js → init.js} +5 -5
  6. package/dist/cjs/common/config/{state/loader-config.js → loader-config.js} +1 -1
  7. package/dist/cjs/common/config/{state/runtime.js → runtime.js} +16 -5
  8. package/dist/cjs/common/constants/agent-constants.js +8 -0
  9. package/dist/cjs/common/constants/env.cdn.js +1 -1
  10. package/dist/cjs/common/constants/env.npm.js +1 -1
  11. package/dist/cjs/common/context/shared-context.js +1 -2
  12. package/dist/cjs/common/dispatch/global-event.js +1 -2
  13. package/dist/cjs/common/drain/drain.js +10 -16
  14. package/dist/cjs/common/event-emitter/contextual-ee.js +3 -4
  15. package/dist/cjs/common/event-listener/event-listener-opts.js +2 -6
  16. package/dist/cjs/common/harvest/harvest-scheduler.js +1 -2
  17. package/dist/cjs/common/harvest/harvest.js +29 -56
  18. package/dist/cjs/common/serialize/bel-serializer.js +6 -11
  19. package/dist/cjs/common/session/session-entity.js +9 -12
  20. package/dist/cjs/common/timing/nav-timing.js +1 -3
  21. package/dist/cjs/common/timing/time-keeper.js +16 -6
  22. package/dist/cjs/common/url/encode.js +2 -4
  23. package/dist/cjs/common/util/console.js +2 -0
  24. package/dist/cjs/common/util/invoke.js +6 -16
  25. package/dist/cjs/common/util/obfuscate.js +97 -53
  26. package/dist/cjs/common/util/submit-data.js +17 -20
  27. package/dist/cjs/common/util/text.js +9 -0
  28. package/dist/cjs/common/util/traverse.js +1 -3
  29. package/dist/cjs/common/vitals/cumulative-layout-shift.js +5 -6
  30. package/dist/cjs/common/vitals/first-contentful-paint.js +4 -5
  31. package/dist/cjs/common/vitals/first-input-delay.js +4 -5
  32. package/dist/cjs/common/vitals/interaction-to-next-paint.js +5 -6
  33. package/dist/cjs/common/vitals/largest-contentful-paint.js +4 -5
  34. package/dist/cjs/common/vitals/time-to-first-byte.js +4 -5
  35. package/dist/cjs/common/vitals/vital-metric.js +6 -8
  36. package/dist/cjs/common/window/nreum.js +2 -1
  37. package/dist/cjs/common/window/page-visibility.js +1 -4
  38. package/dist/cjs/common/wrap/wrap-events.js +1 -4
  39. package/dist/cjs/common/wrap/wrap-promise.js +1 -4
  40. package/dist/cjs/common/wrap/wrap-websocket.js +74 -0
  41. package/dist/cjs/features/ajax/aggregate/chunk.js +4 -3
  42. package/dist/cjs/features/ajax/aggregate/gql.js +4 -5
  43. package/dist/cjs/features/ajax/aggregate/index.js +20 -23
  44. package/dist/cjs/features/ajax/constants.js +2 -3
  45. package/dist/cjs/features/ajax/instrument/distributed-tracing.js +9 -8
  46. package/dist/cjs/features/ajax/instrument/index.js +15 -13
  47. package/dist/cjs/features/generic_events/aggregate/index.js +49 -58
  48. package/dist/cjs/features/generic_events/constants.js +4 -2
  49. package/dist/cjs/features/generic_events/instrument/index.js +7 -7
  50. package/dist/cjs/features/jserrors/aggregate/index.js +24 -44
  51. package/dist/cjs/features/jserrors/instrument/index.js +5 -5
  52. package/dist/cjs/features/logging/aggregate/index.js +34 -37
  53. package/dist/cjs/features/logging/constants.js +2 -3
  54. package/dist/cjs/features/logging/instrument/index.js +6 -7
  55. package/dist/cjs/features/logging/shared/log.js +1 -3
  56. package/dist/cjs/features/logging/shared/utils.js +2 -4
  57. package/dist/cjs/features/metrics/aggregate/index.js +35 -18
  58. package/dist/cjs/features/metrics/aggregate/websocket-detection.js +34 -0
  59. package/dist/cjs/features/metrics/constants.js +4 -2
  60. package/dist/cjs/features/metrics/instrument/index.js +13 -5
  61. package/dist/cjs/features/page_action/instrument/index.js +8 -4
  62. package/dist/cjs/features/page_view_event/aggregate/index.js +20 -40
  63. package/dist/cjs/features/page_view_event/instrument/index.js +5 -5
  64. package/dist/cjs/features/page_view_timing/aggregate/index.js +24 -40
  65. package/dist/cjs/features/page_view_timing/instrument/index.js +5 -5
  66. package/dist/cjs/features/session_replay/aggregate/index.js +37 -44
  67. package/dist/cjs/features/session_replay/constants.js +1 -5
  68. package/dist/cjs/features/session_replay/instrument/index.js +6 -10
  69. package/dist/cjs/features/session_replay/shared/recorder-events.js +25 -20
  70. package/dist/cjs/features/session_replay/shared/recorder.js +17 -13
  71. package/dist/cjs/features/session_replay/shared/stylesheet-evaluator.js +3 -3
  72. package/dist/cjs/features/session_replay/shared/utils.js +5 -4
  73. package/dist/cjs/features/session_trace/aggregate/index.js +26 -43
  74. package/dist/cjs/features/session_trace/aggregate/trace/storage.js +7 -5
  75. package/dist/cjs/features/session_trace/instrument/index.js +9 -8
  76. package/dist/cjs/features/soft_navigations/aggregate/ajax-node.js +1 -1
  77. package/dist/cjs/features/soft_navigations/aggregate/bel-node.js +1 -1
  78. package/dist/cjs/features/soft_navigations/aggregate/index.js +23 -31
  79. package/dist/cjs/features/soft_navigations/aggregate/initial-page-load-interaction.js +2 -2
  80. package/dist/cjs/features/soft_navigations/aggregate/interaction.js +9 -10
  81. package/dist/cjs/features/soft_navigations/instrument/index.js +15 -14
  82. package/dist/cjs/features/spa/aggregate/index.js +17 -27
  83. package/dist/cjs/features/spa/aggregate/interaction.js +7 -6
  84. package/dist/cjs/features/spa/aggregate/serializer.js +3 -3
  85. package/dist/cjs/features/spa/constants.js +2 -2
  86. package/dist/cjs/features/spa/instrument/index.js +21 -20
  87. package/dist/cjs/features/utils/agent-session.js +6 -4
  88. package/dist/cjs/features/utils/aggregate-base.js +15 -10
  89. package/dist/cjs/features/utils/event-buffer.js +132 -0
  90. package/dist/cjs/features/utils/feature-gates.js +2 -2
  91. package/dist/cjs/features/utils/instrument-base.js +7 -8
  92. package/dist/cjs/features/utils/lazy-feature-loader.js +11 -11
  93. package/dist/cjs/features/utils/nr1-debugger.js +1 -3
  94. package/dist/cjs/loaders/agent-base.js +4 -8
  95. package/dist/cjs/loaders/agent.js +7 -2
  96. package/dist/cjs/loaders/api/api.js +22 -34
  97. package/dist/cjs/loaders/api/apiAsync.js +9 -12
  98. package/dist/cjs/loaders/configure/configure.js +12 -12
  99. package/dist/cjs/loaders/features/enabled-features.js +2 -2
  100. package/dist/cjs/loaders/micro-agent.js +15 -14
  101. package/dist/esm/common/aggregate/aggregator.js +1 -2
  102. package/dist/esm/common/config/{state/configurable.js → configurable.js} +1 -1
  103. package/dist/esm/common/config/{state/info.js → info.js} +1 -1
  104. package/dist/esm/common/config/{state/init.js → init.js} +5 -5
  105. package/dist/esm/common/config/{state/loader-config.js → loader-config.js} +1 -1
  106. package/dist/esm/common/config/{state/runtime.js → runtime.js} +17 -5
  107. package/dist/esm/common/constants/agent-constants.js +2 -0
  108. package/dist/esm/common/constants/env.cdn.js +1 -1
  109. package/dist/esm/common/constants/env.npm.js +1 -1
  110. package/dist/esm/common/context/shared-context.js +1 -2
  111. package/dist/esm/common/dispatch/global-event.js +1 -2
  112. package/dist/esm/common/drain/drain.js +10 -16
  113. package/dist/esm/common/event-emitter/contextual-ee.js +2 -3
  114. package/dist/esm/common/event-listener/event-listener-opts.js +2 -6
  115. package/dist/esm/common/harvest/harvest-scheduler.js +1 -2
  116. package/dist/esm/common/harvest/harvest.js +21 -48
  117. package/dist/esm/common/serialize/bel-serializer.js +6 -11
  118. package/dist/esm/common/session/session-entity.js +8 -11
  119. package/dist/esm/common/timing/nav-timing.js +1 -3
  120. package/dist/esm/common/timing/time-keeper.js +15 -5
  121. package/dist/esm/common/url/encode.js +2 -4
  122. package/dist/esm/common/util/console.js +2 -0
  123. package/dist/esm/common/util/invoke.js +6 -16
  124. package/dist/esm/common/util/obfuscate.js +96 -49
  125. package/dist/esm/common/util/submit-data.js +17 -20
  126. package/dist/esm/common/util/text.js +3 -0
  127. package/dist/esm/common/util/traverse.js +1 -3
  128. package/dist/esm/common/vitals/cumulative-layout-shift.js +5 -6
  129. package/dist/esm/common/vitals/first-contentful-paint.js +4 -5
  130. package/dist/esm/common/vitals/first-input-delay.js +4 -5
  131. package/dist/esm/common/vitals/interaction-to-next-paint.js +5 -6
  132. package/dist/esm/common/vitals/largest-contentful-paint.js +4 -5
  133. package/dist/esm/common/vitals/time-to-first-byte.js +4 -5
  134. package/dist/esm/common/vitals/vital-metric.js +6 -8
  135. package/dist/esm/common/window/nreum.js +2 -1
  136. package/dist/esm/common/window/page-visibility.js +1 -4
  137. package/dist/esm/common/wrap/wrap-events.js +1 -4
  138. package/dist/esm/common/wrap/wrap-promise.js +1 -4
  139. package/dist/esm/common/wrap/wrap-websocket.js +67 -0
  140. package/dist/esm/features/ajax/aggregate/chunk.js +3 -2
  141. package/dist/esm/features/ajax/aggregate/gql.js +4 -5
  142. package/dist/esm/features/ajax/aggregate/index.js +17 -20
  143. package/dist/esm/features/ajax/constants.js +1 -2
  144. package/dist/esm/features/ajax/instrument/distributed-tracing.js +2 -1
  145. package/dist/esm/features/ajax/instrument/index.js +11 -9
  146. package/dist/esm/features/generic_events/aggregate/index.js +41 -50
  147. package/dist/esm/features/generic_events/constants.js +3 -1
  148. package/dist/esm/features/generic_events/instrument/index.js +5 -5
  149. package/dist/esm/features/jserrors/aggregate/index.js +19 -39
  150. package/dist/esm/features/jserrors/instrument/index.js +4 -4
  151. package/dist/esm/features/logging/aggregate/index.js +32 -35
  152. package/dist/esm/features/logging/constants.js +1 -2
  153. package/dist/esm/features/logging/instrument/index.js +5 -6
  154. package/dist/esm/features/logging/shared/log.js +1 -3
  155. package/dist/esm/features/logging/shared/utils.js +2 -4
  156. package/dist/esm/features/metrics/aggregate/index.js +29 -12
  157. package/dist/esm/features/metrics/aggregate/websocket-detection.js +29 -0
  158. package/dist/esm/features/metrics/constants.js +3 -1
  159. package/dist/esm/features/metrics/instrument/index.js +13 -5
  160. package/dist/esm/features/page_action/instrument/index.js +7 -3
  161. package/dist/esm/features/page_view_event/aggregate/index.js +18 -38
  162. package/dist/esm/features/page_view_event/instrument/index.js +4 -4
  163. package/dist/esm/features/page_view_timing/aggregate/index.js +21 -37
  164. package/dist/esm/features/page_view_timing/instrument/index.js +4 -4
  165. package/dist/esm/features/session_replay/aggregate/index.js +27 -34
  166. package/dist/esm/features/session_replay/constants.js +0 -4
  167. package/dist/esm/features/session_replay/index.js +1 -7
  168. package/dist/esm/features/session_replay/instrument/index.js +6 -9
  169. package/dist/esm/features/session_replay/shared/recorder-events.js +25 -20
  170. package/dist/esm/features/session_replay/shared/recorder.js +14 -10
  171. package/dist/esm/features/session_replay/shared/stylesheet-evaluator.js +3 -3
  172. package/dist/esm/features/session_replay/shared/utils.js +3 -2
  173. package/dist/esm/features/session_trace/aggregate/index.js +21 -38
  174. package/dist/esm/features/session_trace/aggregate/trace/storage.js +7 -5
  175. package/dist/esm/features/session_trace/instrument/index.js +6 -5
  176. package/dist/esm/features/soft_navigations/aggregate/ajax-node.js +1 -1
  177. package/dist/esm/features/soft_navigations/aggregate/bel-node.js +1 -1
  178. package/dist/esm/features/soft_navigations/aggregate/index.js +22 -30
  179. package/dist/esm/features/soft_navigations/aggregate/initial-page-load-interaction.js +1 -1
  180. package/dist/esm/features/soft_navigations/aggregate/interaction.js +7 -8
  181. package/dist/esm/features/soft_navigations/instrument/index.js +12 -11
  182. package/dist/esm/features/spa/aggregate/index.js +11 -21
  183. package/dist/esm/features/spa/aggregate/interaction.js +6 -5
  184. package/dist/esm/features/spa/aggregate/serializer.js +1 -1
  185. package/dist/esm/features/spa/constants.js +2 -2
  186. package/dist/esm/features/spa/instrument/index.js +13 -12
  187. package/dist/esm/features/utils/agent-session.js +3 -1
  188. package/dist/esm/features/utils/aggregate-base.js +13 -8
  189. package/dist/esm/features/utils/event-buffer.js +126 -0
  190. package/dist/esm/features/utils/feature-gates.js +1 -1
  191. package/dist/esm/features/utils/instrument-base.js +6 -7
  192. package/dist/esm/features/utils/lazy-feature-loader.js +11 -11
  193. package/dist/esm/features/utils/nr1-debugger.js +1 -3
  194. package/dist/esm/loaders/agent-base.js +4 -8
  195. package/dist/esm/loaders/agent.js +7 -2
  196. package/dist/esm/loaders/api/api.js +17 -29
  197. package/dist/esm/loaders/api/apiAsync.js +2 -5
  198. package/dist/esm/loaders/configure/configure.js +5 -5
  199. package/dist/esm/loaders/features/enabled-features.js +1 -1
  200. package/dist/esm/loaders/micro-agent.js +10 -9
  201. package/dist/types/common/config/configurable.d.ts.map +1 -0
  202. package/dist/types/common/config/info.d.ts.map +1 -0
  203. package/dist/types/common/config/init.d.ts.map +1 -0
  204. package/dist/types/common/config/loader-config.d.ts.map +1 -0
  205. package/dist/types/common/config/runtime.d.ts.map +1 -0
  206. package/dist/types/common/constants/agent-constants.d.ts +3 -0
  207. package/dist/types/common/constants/agent-constants.d.ts.map +1 -0
  208. package/dist/types/common/drain/drain.d.ts.map +1 -1
  209. package/dist/types/common/harvest/harvest.d.ts +1 -7
  210. package/dist/types/common/harvest/harvest.d.ts.map +1 -1
  211. package/dist/types/common/serialize/bel-serializer.d.ts.map +1 -1
  212. package/dist/types/common/timing/time-keeper.d.ts +9 -2
  213. package/dist/types/common/timing/time-keeper.d.ts.map +1 -1
  214. package/dist/types/common/util/console.d.ts.map +1 -1
  215. package/dist/types/common/util/obfuscate.d.ts +78 -6
  216. package/dist/types/common/util/obfuscate.d.ts.map +1 -1
  217. package/dist/types/common/util/text.d.ts +2 -0
  218. package/dist/types/common/util/text.d.ts.map +1 -0
  219. package/dist/types/common/window/nreum.d.ts.map +1 -1
  220. package/dist/types/common/wrap/wrap-websocket.d.ts +4 -0
  221. package/dist/types/common/wrap/wrap-websocket.d.ts.map +1 -0
  222. package/dist/types/features/ajax/aggregate/chunk.d.ts.map +1 -1
  223. package/dist/types/features/ajax/aggregate/index.d.ts +2 -3
  224. package/dist/types/features/ajax/aggregate/index.d.ts.map +1 -1
  225. package/dist/types/features/ajax/constants.d.ts +0 -1
  226. package/dist/types/features/ajax/constants.d.ts.map +1 -1
  227. package/dist/types/features/ajax/instrument/distributed-tracing.d.ts.map +1 -1
  228. package/dist/types/features/ajax/instrument/index.d.ts +1 -0
  229. package/dist/types/features/ajax/instrument/index.d.ts.map +1 -1
  230. package/dist/types/features/generic_events/aggregate/index.d.ts +6 -8
  231. package/dist/types/features/generic_events/aggregate/index.d.ts.map +1 -1
  232. package/dist/types/features/generic_events/constants.d.ts +2 -0
  233. package/dist/types/features/generic_events/constants.d.ts.map +1 -1
  234. package/dist/types/features/generic_events/instrument/index.d.ts +1 -0
  235. package/dist/types/features/generic_events/instrument/index.d.ts.map +1 -1
  236. package/dist/types/features/jserrors/aggregate/index.d.ts +2 -2
  237. package/dist/types/features/jserrors/aggregate/index.d.ts.map +1 -1
  238. package/dist/types/features/jserrors/instrument/index.d.ts +1 -0
  239. package/dist/types/features/jserrors/instrument/index.d.ts.map +1 -1
  240. package/dist/types/features/logging/aggregate/index.d.ts +4 -7
  241. package/dist/types/features/logging/aggregate/index.d.ts.map +1 -1
  242. package/dist/types/features/logging/constants.d.ts +0 -1
  243. package/dist/types/features/logging/constants.d.ts.map +1 -1
  244. package/dist/types/features/logging/instrument/index.d.ts +1 -0
  245. package/dist/types/features/logging/instrument/index.d.ts.map +1 -1
  246. package/dist/types/features/metrics/aggregate/index.d.ts.map +1 -1
  247. package/dist/types/features/metrics/aggregate/websocket-detection.d.ts +12 -0
  248. package/dist/types/features/metrics/aggregate/websocket-detection.d.ts.map +1 -0
  249. package/dist/types/features/metrics/constants.d.ts +1 -0
  250. package/dist/types/features/metrics/constants.d.ts.map +1 -1
  251. package/dist/types/features/metrics/instrument/index.d.ts +1 -0
  252. package/dist/types/features/metrics/instrument/index.d.ts.map +1 -1
  253. package/dist/types/features/page_action/instrument/index.d.ts +4 -0
  254. package/dist/types/features/page_action/instrument/index.d.ts.map +1 -1
  255. package/dist/types/features/page_view_event/aggregate/index.d.ts.map +1 -1
  256. package/dist/types/features/page_view_event/instrument/index.d.ts +1 -0
  257. package/dist/types/features/page_view_event/instrument/index.d.ts.map +1 -1
  258. package/dist/types/features/page_view_timing/aggregate/index.d.ts +2 -2
  259. package/dist/types/features/page_view_timing/aggregate/index.d.ts.map +1 -1
  260. package/dist/types/features/page_view_timing/instrument/index.d.ts +1 -0
  261. package/dist/types/features/page_view_timing/instrument/index.d.ts.map +1 -1
  262. package/dist/types/features/session_replay/aggregate/index.d.ts.map +1 -1
  263. package/dist/types/features/session_replay/constants.d.ts +0 -4
  264. package/dist/types/features/session_replay/constants.d.ts.map +1 -1
  265. package/dist/types/features/session_replay/instrument/index.d.ts +1 -0
  266. package/dist/types/features/session_replay/instrument/index.d.ts.map +1 -1
  267. package/dist/types/features/session_replay/shared/recorder-events.d.ts +6 -6
  268. package/dist/types/features/session_replay/shared/recorder-events.d.ts.map +1 -1
  269. package/dist/types/features/session_replay/shared/recorder.d.ts +2 -2
  270. package/dist/types/features/session_replay/shared/recorder.d.ts.map +1 -1
  271. package/dist/types/features/session_replay/shared/utils.d.ts.map +1 -1
  272. package/dist/types/features/session_trace/aggregate/index.d.ts +2 -2
  273. package/dist/types/features/session_trace/aggregate/index.d.ts.map +1 -1
  274. package/dist/types/features/session_trace/aggregate/trace/storage.d.ts +1 -1
  275. package/dist/types/features/session_trace/aggregate/trace/storage.d.ts.map +1 -1
  276. package/dist/types/features/session_trace/instrument/index.d.ts +1 -0
  277. package/dist/types/features/session_trace/instrument/index.d.ts.map +1 -1
  278. package/dist/types/features/soft_navigations/aggregate/index.d.ts +3 -3
  279. package/dist/types/features/soft_navigations/aggregate/index.d.ts.map +1 -1
  280. package/dist/types/features/soft_navigations/instrument/index.d.ts +1 -0
  281. package/dist/types/features/soft_navigations/instrument/index.d.ts.map +1 -1
  282. package/dist/types/features/spa/aggregate/index.d.ts +2 -2
  283. package/dist/types/features/spa/aggregate/index.d.ts.map +1 -1
  284. package/dist/types/features/spa/aggregate/interaction.d.ts.map +1 -1
  285. package/dist/types/features/spa/constants.d.ts.map +1 -1
  286. package/dist/types/features/spa/instrument/index.d.ts +1 -0
  287. package/dist/types/features/spa/instrument/index.d.ts.map +1 -1
  288. package/dist/types/features/utils/agent-session.d.ts.map +1 -1
  289. package/dist/types/features/utils/aggregate-base.d.ts +1 -0
  290. package/dist/types/features/utils/aggregate-base.d.ts.map +1 -1
  291. package/dist/types/features/utils/event-buffer.d.ts +72 -0
  292. package/dist/types/features/utils/event-buffer.d.ts.map +1 -0
  293. package/dist/types/features/utils/instrument-base.d.ts +1 -0
  294. package/dist/types/features/utils/instrument-base.d.ts.map +1 -1
  295. package/dist/types/loaders/agent-base.d.ts +1 -1
  296. package/dist/types/loaders/agent.d.ts.map +1 -1
  297. package/dist/types/loaders/api/api.d.ts.map +1 -1
  298. package/dist/types/loaders/configure/configure.d.ts.map +1 -1
  299. package/dist/types/loaders/micro-agent.d.ts.map +1 -1
  300. package/package.json +55 -59
  301. package/src/common/config/__mocks__/info.js +3 -0
  302. package/src/common/config/__mocks__/init.js +3 -0
  303. package/src/common/config/__mocks__/loader-config.js +2 -0
  304. package/src/common/config/__mocks__/runtime.js +2 -0
  305. package/src/common/config/{state/configurable.js → configurable.js} +1 -1
  306. package/src/common/config/{state/info.js → info.js} +1 -1
  307. package/src/common/config/{state/init.js → init.js} +5 -5
  308. package/src/common/config/{state/loader-config.js → loader-config.js} +1 -1
  309. package/src/common/config/{state/runtime.js → runtime.js} +19 -5
  310. package/src/common/constants/agent-constants.js +2 -0
  311. package/src/common/drain/drain.js +5 -2
  312. package/src/common/event-emitter/contextual-ee.js +1 -1
  313. package/src/common/harvest/harvest.js +7 -21
  314. package/src/common/serialize/bel-serializer.js +5 -7
  315. package/src/common/session/session-entity.js +2 -2
  316. package/src/common/timing/__mocks__/time-keeper.js +6 -2
  317. package/src/common/timing/time-keeper.js +15 -5
  318. package/src/common/util/__mocks__/console.js +1 -0
  319. package/src/common/util/__mocks__/obfuscate.js +5 -8
  320. package/src/common/util/console.js +2 -0
  321. package/src/common/util/obfuscate.js +94 -50
  322. package/src/common/util/text.js +6 -0
  323. package/src/common/window/__mocks__/nreum.js +1 -1
  324. package/src/common/window/nreum.js +2 -1
  325. package/src/common/wrap/wrap-websocket.js +73 -0
  326. package/src/features/ajax/aggregate/chunk.js +3 -2
  327. package/src/features/ajax/aggregate/index.js +20 -19
  328. package/src/features/ajax/constants.js +0 -2
  329. package/src/features/ajax/instrument/distributed-tracing.js +2 -1
  330. package/src/features/ajax/instrument/index.js +9 -5
  331. package/src/features/generic_events/aggregate/index.js +43 -37
  332. package/src/features/generic_events/constants.js +2 -0
  333. package/src/features/generic_events/instrument/index.js +3 -1
  334. package/src/features/jserrors/aggregate/index.js +14 -4
  335. package/src/features/jserrors/instrument/index.js +2 -0
  336. package/src/features/logging/aggregate/index.js +39 -31
  337. package/src/features/logging/constants.js +0 -2
  338. package/src/features/logging/instrument/index.js +2 -0
  339. package/src/features/logging/shared/utils.js +1 -1
  340. package/src/features/metrics/aggregate/index.js +24 -9
  341. package/src/features/metrics/aggregate/websocket-detection.js +31 -0
  342. package/src/features/metrics/constants.js +3 -0
  343. package/src/features/metrics/instrument/index.js +13 -1
  344. package/src/features/page_action/instrument/index.js +5 -0
  345. package/src/features/page_view_event/aggregate/index.js +8 -23
  346. package/src/features/page_view_event/instrument/index.js +2 -0
  347. package/src/features/page_view_timing/aggregate/index.js +14 -16
  348. package/src/features/page_view_timing/instrument/index.js +2 -0
  349. package/src/features/session_replay/aggregate/index.js +13 -9
  350. package/src/features/session_replay/constants.js +0 -4
  351. package/src/features/session_replay/index.js +1 -7
  352. package/src/features/session_replay/instrument/index.js +3 -4
  353. package/src/features/session_replay/shared/recorder-events.js +27 -20
  354. package/src/features/session_replay/shared/recorder.js +13 -6
  355. package/src/features/session_replay/shared/stylesheet-evaluator.js +2 -2
  356. package/src/features/session_replay/shared/utils.js +3 -2
  357. package/src/features/session_trace/aggregate/index.js +16 -7
  358. package/src/features/session_trace/aggregate/trace/storage.js +6 -1
  359. package/src/features/session_trace/instrument/index.js +4 -1
  360. package/src/features/soft_navigations/aggregate/ajax-node.js +1 -1
  361. package/src/features/soft_navigations/aggregate/index.js +13 -15
  362. package/src/features/soft_navigations/aggregate/initial-page-load-interaction.js +1 -1
  363. package/src/features/soft_navigations/aggregate/interaction.js +1 -1
  364. package/src/features/soft_navigations/instrument/index.js +9 -5
  365. package/src/features/spa/aggregate/index.js +11 -18
  366. package/src/features/spa/aggregate/interaction.js +5 -3
  367. package/src/features/spa/aggregate/serializer.js +1 -1
  368. package/src/features/spa/constants.js +2 -2
  369. package/src/features/spa/instrument/index.js +9 -3
  370. package/src/features/utils/agent-session.js +3 -1
  371. package/src/features/utils/aggregate-base.js +10 -2
  372. package/src/features/utils/event-buffer.js +126 -0
  373. package/src/features/utils/feature-gates.js +1 -1
  374. package/src/features/utils/instrument-base.js +2 -1
  375. package/src/loaders/agent-base.js +2 -2
  376. package/src/loaders/agent.js +7 -2
  377. package/src/loaders/api/api.js +2 -1
  378. package/src/loaders/api/apiAsync.js +1 -1
  379. package/src/loaders/configure/configure.js +4 -1
  380. package/src/loaders/features/enabled-features.js +1 -1
  381. package/src/loaders/micro-agent.js +4 -1
  382. package/dist/cjs/common/config/config.js +0 -76
  383. package/dist/cjs/common/config/state/originals.js +0 -8
  384. package/dist/cjs/common/wrap/index.js +0 -61
  385. package/dist/esm/common/config/config.js +0 -11
  386. package/dist/esm/common/config/state/originals.js +0 -2
  387. package/dist/esm/common/wrap/index.js +0 -13
  388. package/dist/types/common/config/config.d.ts +0 -13
  389. package/dist/types/common/config/config.d.ts.map +0 -1
  390. package/dist/types/common/config/state/configurable.d.ts.map +0 -1
  391. package/dist/types/common/config/state/info.d.ts.map +0 -1
  392. package/dist/types/common/config/state/init.d.ts.map +0 -1
  393. package/dist/types/common/config/state/loader-config.d.ts.map +0 -1
  394. package/dist/types/common/config/state/originals.d.ts +0 -2
  395. package/dist/types/common/config/state/originals.d.ts.map +0 -1
  396. package/dist/types/common/config/state/runtime.d.ts.map +0 -1
  397. package/dist/types/common/wrap/index.d.ts +0 -10
  398. package/dist/types/common/wrap/index.d.ts.map +0 -1
  399. package/src/common/config/__mocks__/config.js +0 -11
  400. package/src/common/config/config.js +0 -12
  401. package/src/common/config/state/originals.js +0 -3
  402. package/src/common/wrap/index.js +0 -16
  403. /package/dist/types/common/config/{state/configurable.d.ts → configurable.d.ts} +0 -0
  404. /package/dist/types/common/config/{state/info.d.ts → info.d.ts} +0 -0
  405. /package/dist/types/common/config/{state/init.d.ts → init.d.ts} +0 -0
  406. /package/dist/types/common/config/{state/loader-config.d.ts → loader-config.d.ts} +0 -0
  407. /package/dist/types/common/config/{state/runtime.d.ts → runtime.d.ts} +0 -0
@@ -7,7 +7,9 @@ exports.Aggregate = void 0;
7
7
  var _registerHandler = require("../../../common/event-emitter/register-handler");
8
8
  var _stringify = require("../../../common/util/stringify");
9
9
  var _handle = require("../../../common/event-emitter/handle");
10
- var _config = require("../../../common/config/config");
10
+ var _info = require("../../../common/config/info");
11
+ var _init = require("../../../common/config/init");
12
+ var _runtime = require("../../../common/config/runtime");
11
13
  var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
12
14
  var _denyList = require("../../../common/deny-list/deny-list");
13
15
  var _constants = require("../constants");
@@ -17,6 +19,7 @@ var _aggregateBase = require("../../utils/aggregate-base");
17
19
  var _gql = require("./gql");
18
20
  var _nreum = require("../../../common/window/nreum");
19
21
  var _chunk = _interopRequireDefault(require("./chunk"));
22
+ var _eventBuffer = require("../../utils/event-buffer");
20
23
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
24
  /*
22
25
  * Copyright 2020 New Relic Corporation. All rights reserved.
@@ -24,35 +27,33 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
24
27
  */
25
28
 
26
29
  class Aggregate extends _aggregateBase.AggregateBase {
27
- static featureName = (() => _constants.FEATURE_NAME)();
30
+ static featureName = _constants.FEATURE_NAME;
28
31
  #agentInfo;
29
32
  #agentRuntime;
30
33
  #agentInit;
31
34
  constructor(agentIdentifier, aggregator) {
32
35
  super(agentIdentifier, aggregator, _constants.FEATURE_NAME);
33
- this.#agentInfo = (0, _config.getInfo)(agentIdentifier);
34
- this.#agentRuntime = (0, _config.getRuntime)(agentIdentifier);
35
- this.#agentInit = (0, _config.getConfiguration)(agentIdentifier);
36
+ this.#agentInfo = (0, _info.getInfo)(agentIdentifier);
37
+ this.#agentRuntime = (0, _runtime.getRuntime)(agentIdentifier);
38
+ this.#agentInit = (0, _init.getConfiguration)(agentIdentifier);
36
39
  const harvestTimeSeconds = this.#agentInit.ajax.harvestTimeSeconds || 10;
37
- this.MAX_PAYLOAD_SIZE = this.#agentInit.ajax.maxPayloadSize || 1000000;
38
40
  (0, _denyList.setDenyList)(this.#agentRuntime.denyList);
39
- this.ajaxEvents = [];
41
+ this.ajaxEvents = new _eventBuffer.EventBuffer();
40
42
  this.spaAjaxEvents = {};
41
- this.sentAjaxEvents = [];
42
43
  const classThis = this;
43
44
 
44
45
  // --- v Used by old spa feature
45
46
  this.ee.on('interactionDone', (interaction, wasSaved) => {
46
- if (!this.spaAjaxEvents[interaction.id]) return;
47
+ if (!this.spaAjaxEvents[interaction.id]?.hasData) return;
47
48
  if (!wasSaved) {
48
49
  // if the ixn was saved, then its ajax reqs are part of the payload whereas if it was discarded, it should still be harvested in the ajax feature itself
49
- this.spaAjaxEvents[interaction.id].forEach(item => this.ajaxEvents.push(item));
50
+ this.ajaxEvents.merge(this.spaAjaxEvents[interaction.id]);
50
51
  }
51
52
  delete this.spaAjaxEvents[interaction.id];
52
53
  });
53
54
  // --- ^
54
55
  // --- v Used by new soft nav
55
- (0, _registerHandler.registerHandler)('returnAjax', event => this.ajaxEvents.push(event), this.featureName, this.ee);
56
+ (0, _registerHandler.registerHandler)('returnAjax', event => this.ajaxEvents.add(event), this.featureName, this.ee);
56
57
  // --- ^
57
58
  (0, _registerHandler.registerHandler)('xhr', function () {
58
59
  // the EE-drain system not only switches "this" but also passes a new EventContext with info. Should consider platform refactor to another system which passes a mutable context around separately and predictably to avoid problems like this.
@@ -112,7 +113,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
112
113
  if (ctx.dt) {
113
114
  event.spanId = ctx.dt.spanId;
114
115
  event.traceId = ctx.dt.traceId;
115
- event.spanTimestamp = this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(ctx.dt.timestamp);
116
+ event.spanTimestamp = Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(ctx.dt.timestamp));
116
117
  }
117
118
 
118
119
  // parsed from the AJAX body, looking for operationName param & parsing query for operationType
@@ -128,31 +129,27 @@ class Aggregate extends _aggregateBase.AggregateBase {
128
129
  } else if (ctx.spaNode) {
129
130
  // For old spa (when running), if the ajax happened inside an interaction, hold it until the interaction finishes
130
131
  const interactionId = ctx.spaNode.interaction.id;
131
- this.spaAjaxEvents[interactionId] = this.spaAjaxEvents[interactionId] || [];
132
- this.spaAjaxEvents[interactionId].push(event);
132
+ this.spaAjaxEvents[interactionId] ??= new _eventBuffer.EventBuffer();
133
+ this.spaAjaxEvents[interactionId].add(event);
133
134
  } else {
134
- this.ajaxEvents.push(event);
135
+ this.ajaxEvents.add(event);
135
136
  }
136
137
  }
137
138
  prepareHarvest(options) {
138
139
  options = options || {};
139
- if (this.ajaxEvents.length === 0) return null;
140
- const payload = this.#getPayload(this.ajaxEvents);
140
+ if (this.ajaxEvents.buffer.length === 0) return null;
141
+ const payload = this.#getPayload(this.ajaxEvents.buffer);
141
142
  const payloadObjs = [];
142
143
  for (let i = 0; i < payload.length; i++) payloadObjs.push({
143
144
  body: {
144
145
  e: payload[i]
145
146
  }
146
147
  });
147
- if (options.retry) this.sentAjaxEvents = this.ajaxEvents;
148
- this.ajaxEvents = [];
148
+ if (options.retry) this.ajaxEvents.hold();else this.ajaxEvents.clear();
149
149
  return payloadObjs;
150
150
  }
151
151
  onEventsHarvestFinished(result) {
152
- if (result.retry && this.sentAjaxEvents.length > 0) {
153
- this.ajaxEvents.unshift(...this.sentAjaxEvents);
154
- this.sentAjaxEvents = [];
155
- }
152
+ if (result.retry && this.ajaxEvents.held.hasData) this.ajaxEvents.unhold();else this.ajaxEvents.held.clear();
156
153
  }
157
154
  #getPayload(events, numberOfChunks) {
158
155
  numberOfChunks = numberOfChunks || 1;
@@ -3,7 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.MAX_PAYLOAD_SIZE = exports.FEATURE_NAME = void 0;
6
+ exports.FEATURE_NAME = void 0;
7
7
  var _features = require("../../loaders/features/features");
8
- const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.ajax;
9
- const MAX_PAYLOAD_SIZE = exports.MAX_PAYLOAD_SIZE = 1000000;
8
+ const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.ajax;
@@ -4,7 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.DT = void 0;
7
- var _config = require("../../../common/config/config");
7
+ var _init = require("../../../common/config/init");
8
+ var _loaderConfig = require("../../../common/config/loader-config");
8
9
  var _uniqueId = require("../../../common/ids/unique-id");
9
10
  var _parseUrl = require("../../../common/url/parse-url");
10
11
  var _runtime = require("../../../common/constants/runtime");
@@ -22,7 +23,7 @@ class DT {
22
23
  if (!this.shouldGenerateTrace(parsedOrigin)) {
23
24
  return null;
24
25
  }
25
- var loaderConfig = (0, _config.getLoaderConfig)(this.agentIdentifier);
26
+ var loaderConfig = (0, _loaderConfig.getLoaderConfig)(this.agentIdentifier);
26
27
  if (!loaderConfig) {
27
28
  return null;
28
29
  }
@@ -90,9 +91,9 @@ class DT {
90
91
  isAllowedOrigin(parsedOrigin) {
91
92
  var allowed = false;
92
93
  var dtConfig = {};
93
- var dt = (0, _config.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
94
+ var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
94
95
  if (dt) {
95
- dtConfig = (0, _config.getConfiguration)(this.agentIdentifier).distributed_tracing;
96
+ dtConfig = (0, _init.getConfiguration)(this.agentIdentifier).distributed_tracing;
96
97
  }
97
98
  if (parsedOrigin.sameOrigin) {
98
99
  allowed = true;
@@ -108,7 +109,7 @@ class DT {
108
109
  return allowed;
109
110
  }
110
111
  isDtEnabled() {
111
- var dt = (0, _config.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
112
+ var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
112
113
  if (dt) {
113
114
  return !!dt.enabled;
114
115
  }
@@ -117,21 +118,21 @@ class DT {
117
118
 
118
119
  // exclude the newrelic header for same-origin calls
119
120
  excludeNewrelicHeader() {
120
- var dt = (0, _config.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
121
+ var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
121
122
  if (dt) {
122
123
  return !!dt.exclude_newrelic_header;
123
124
  }
124
125
  return false;
125
126
  }
126
127
  useNewrelicHeaderForCors() {
127
- var dt = (0, _config.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
128
+ var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
128
129
  if (dt) {
129
130
  return dt.cors_use_newrelic_header !== false;
130
131
  }
131
132
  return false;
132
133
  }
133
134
  useTraceContextHeadersForCors() {
134
- var dt = (0, _config.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
135
+ var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
135
136
  if (dt) {
136
137
  return !!dt.cors_use_tracecontext_headers;
137
138
  }
@@ -3,14 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Instrument = void 0;
7
- var _config = require("../../../common/config/config");
6
+ exports.Instrument = exports.Ajax = void 0;
7
+ var _nreum = require("../../../common/window/nreum");
8
+ var _loaderConfig = require("../../../common/config/loader-config");
8
9
  var _handle = require("../../../common/event-emitter/handle");
9
10
  var _id = require("../../../common/ids/id");
10
11
  var _runtime = require("../../../common/constants/runtime");
11
12
  var _dataSize = require("../../../common/util/data-size");
12
13
  var _eventListenerOpts = require("../../../common/event-listener/event-listener-opts");
13
- var _wrap = require("../../../common/wrap");
14
+ var _wrapXhr = require("../../../common/wrap/wrap-xhr");
15
+ var _wrapFetch = require("../../../common/wrap/wrap-fetch");
14
16
  var _parseUrl = require("../../../common/url/parse-url");
15
17
  var _distributedTracing = require("./distributed-tracing");
16
18
  var _responseSize = require("./response-size");
@@ -27,12 +29,11 @@ var _denyList = require("../../../common/deny-list/deny-list");
27
29
 
28
30
  var handlers = ['load', 'error', 'abort', 'timeout'];
29
31
  var handlersLen = handlers.length;
30
- var origRequest = _config.originals.REQ;
31
- var origXHR = _config.originals.XHR;
32
+ var origRequest = (0, _nreum.gosNREUMOriginals)().o.REQ;
33
+ var origXHR = (0, _nreum.gosNREUMOriginals)().o.XHR;
32
34
  class Instrument extends _instrumentBase.InstrumentBase {
33
- static featureName = (() => _constants.FEATURE_NAME)();
34
- constructor(agentIdentifier, aggregator) {
35
- let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
35
+ static featureName = _constants.FEATURE_NAME;
36
+ constructor(agentIdentifier, aggregator, auto = true) {
36
37
  super(agentIdentifier, aggregator, _constants.FEATURE_NAME, auto);
37
38
  this.dt = new _distributedTracing.DT(agentIdentifier);
38
39
  this.handler = (type, args, ctx, group) => (0, _handle.handle)(type, args, ctx, group, this.ee);
@@ -68,8 +69,8 @@ class Instrument extends _instrumentBase.InstrumentBase {
68
69
  } catch (err) {
69
70
  // do nothing
70
71
  }
71
- (0, _wrap.wrapFetch)(this.ee);
72
- (0, _wrap.wrapXhr)(this.ee);
72
+ (0, _wrapFetch.wrapFetch)(this.ee);
73
+ (0, _wrapXhr.wrapXhr)(this.ee);
73
74
  subscribeToEvents(agentIdentifier, this.ee, this.handler, this.dt);
74
75
  this.importAggregator();
75
76
  }
@@ -128,7 +129,7 @@ function subscribeToEvents(agentIdentifier, ee, handler, dt) {
128
129
  this.metrics = {};
129
130
  }
130
131
  function onOpenXhrEnd(args, xhr) {
131
- var loaderConfig = (0, _config.getLoaderConfig)(agentIdentifier);
132
+ var loaderConfig = (0, _loaderConfig.getLoaderConfig)(agentIdentifier);
132
133
  if (loaderConfig.xpid && this.sameOrigin) {
133
134
  xhr.setRequestHeader('X-NewRelic-ID', loaderConfig.xpid);
134
135
  }
@@ -347,7 +348,7 @@ function subscribeToEvents(agentIdentifier, ee, handler, dt) {
347
348
  if ((0, _denyList.hasUndefinedHostname)(params)) return; // don't bother with XHR of url with no hostname
348
349
 
349
350
  metrics.duration = (0, _now.now)() - this.startTime;
350
- if (!this.loadCaptureCalled && xhr.readyState === 4) {
351
+ if (!this.loadCazptureCalled && xhr.readyState === 4) {
351
352
  captureXhrData(this, xhr);
352
353
  } else if (params.status == null) {
353
354
  params.status = 0;
@@ -381,4 +382,5 @@ function addUrl(ctx, url) {
381
382
  params.pathname = parsed.pathname;
382
383
  ctx.parsedOrigin = parsed;
383
384
  ctx.sameOrigin = parsed.sameOrigin;
384
- }
385
+ }
386
+ const Ajax = exports.Ajax = Instrument;
@@ -7,15 +7,20 @@ exports.Aggregate = void 0;
7
7
  var _stringify = require("../../../common/util/stringify");
8
8
  var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
9
9
  var _cleanUrl = require("../../../common/url/clean-url");
10
- var _config = require("../../../common/config/config");
10
+ var _info = require("../../../common/config/info");
11
+ var _init = require("../../../common/config/init");
12
+ var _runtime = require("../../../common/config/runtime");
11
13
  var _constants = require("../constants");
12
- var _runtime = require("../../../common/constants/runtime");
14
+ var _runtime2 = require("../../../common/constants/runtime");
13
15
  var _aggregateBase = require("../../utils/aggregate-base");
14
16
  var _console = require("../../../common/util/console");
15
17
  var _now = require("../../../common/timing/now");
16
18
  var _registerHandler = require("../../../common/event-emitter/register-handler");
17
19
  var _drain = require("../../../common/drain/drain");
18
20
  var _constants2 = require("../../metrics/constants");
21
+ var _eventBuffer = require("../../utils/event-buffer");
22
+ var _traverse = require("../../../common/util/traverse");
23
+ var _agentConstants = require("../../../common/constants/agent-constants");
19
24
  /*
20
25
  * Copyright 2020 New Relic Corporation. All rights reserved.
21
26
  * SPDX-License-Identifier: Apache-2.0
@@ -23,36 +28,31 @@ var _constants2 = require("../../metrics/constants");
23
28
 
24
29
  class Aggregate extends _aggregateBase.AggregateBase {
25
30
  #agentRuntime;
26
- static featureName = (() => _constants.FEATURE_NAME)();
31
+ static featureName = _constants.FEATURE_NAME;
27
32
  constructor(agentIdentifier, aggregator) {
28
- var _this;
29
33
  super(agentIdentifier, aggregator, _constants.FEATURE_NAME);
30
- _this = this;
31
34
  this.eventsPerHarvest = 1000;
32
- this.harvestTimeSeconds = (0, _config.getConfigurationValue)(this.agentIdentifier, 'generic_events.harvestTimeSeconds');
33
- this.referrerUrl = _runtime.isBrowserScope && document.referrer ? (0, _cleanUrl.cleanURL)(document.referrer) : undefined;
34
- this.currentEvents = [];
35
- this.events = [];
36
- this.overflow = [];
37
- this.#agentRuntime = (0, _config.getRuntime)(this.agentIdentifier);
38
- this.waitForFlags(['ins']).then(_ref => {
39
- let [ins] = _ref;
35
+ this.harvestTimeSeconds = (0, _init.getConfigurationValue)(this.agentIdentifier, 'generic_events.harvestTimeSeconds');
36
+ this.referrerUrl = _runtime2.isBrowserScope && document.referrer ? (0, _cleanUrl.cleanURL)(document.referrer) : undefined;
37
+ this.events = new _eventBuffer.EventBuffer();
38
+ this.#agentRuntime = (0, _runtime.getRuntime)(this.agentIdentifier);
39
+ this.waitForFlags(['ins']).then(([ins]) => {
40
40
  if (!ins) {
41
41
  this.blocked = true;
42
42
  (0, _drain.deregisterDrain)(this.agentIdentifier, this.featureName);
43
43
  return;
44
44
  }
45
- if ((0, _config.getConfigurationValue)(this.agentIdentifier, 'page_action.enabled')) {
45
+ if ((0, _init.getConfigurationValue)(this.agentIdentifier, 'page_action.enabled')) {
46
46
  (0, _registerHandler.registerHandler)('api-addPageAction', (timestamp, name, attributes) => {
47
47
  this.addEvent({
48
48
  ...attributes,
49
49
  eventType: 'PageAction',
50
- timestamp: this.#agentRuntime.timeKeeper.convertRelativeTimestamp(timestamp),
50
+ timestamp: Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(this.#agentRuntime.timeKeeper.convertRelativeTimestamp(timestamp))),
51
51
  timeSinceLoad: timestamp / 1000,
52
52
  actionName: name,
53
53
  referrerUrl: this.referrerUrl,
54
54
  currentUrl: (0, _cleanUrl.cleanURL)('' + location),
55
- ...(_runtime.isBrowserScope && {
55
+ ...(_runtime2.isBrowserScope && {
56
56
  browserWidth: window.document.documentElement?.clientWidth,
57
57
  browserHeight: window.document.documentElement?.clientHeight
58
58
  })
@@ -60,47 +60,16 @@ class Aggregate extends _aggregateBase.AggregateBase {
60
60
  }, this.featureName, this.ee);
61
61
  }
62
62
  this.harvestScheduler = new _harvestScheduler.HarvestScheduler('ins', {
63
- onFinished: function () {
64
- return _this.onHarvestFinished(...arguments);
65
- }
63
+ onFinished: (...args) => this.onHarvestFinished(...args)
66
64
  }, this);
67
- this.harvestScheduler.harvest.on('ins', function () {
68
- return _this.onHarvestStarted(...arguments);
69
- });
65
+ this.harvestScheduler.harvest.on('ins', (...args) => this.onHarvestStarted(...args));
70
66
  this.harvestScheduler.startTimer(this.harvestTimeSeconds, 0);
71
67
  this.drain();
72
68
  });
73
69
  }
74
- onHarvestStarted(options) {
75
- const {
76
- userAttributes,
77
- atts
78
- } = (0, _config.getInfo)(this.agentIdentifier);
79
- const harvestEvents = this.overflow.length ? this.overflow.splice(0, Infinity) : this.events.splice(0, Infinity);
80
- var payload = {
81
- qs: {
82
- ua: userAttributes,
83
- at: atts
84
- },
85
- body: {
86
- ins: harvestEvents
87
- }
88
- };
89
- if (options.retry) {
90
- this.currentEvents = harvestEvents;
91
- }
92
- return payload;
93
- }
94
- onHarvestFinished(result) {
95
- if (result && result.sent && result.retry && this.currentEvents.length) {
96
- this.events = this.currentEvents.concat(this.events);
97
- this.currentEvents = [];
98
- }
99
- }
100
70
 
101
71
  // WARNING: Insights times are in seconds. EXCEPT timestamp, which is in ms.
102
- addEvent() {
103
- let obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
72
+ addEvent(obj = {}) {
104
73
  if (!obj || !Object.keys(obj).length) return;
105
74
  if (!obj.eventType) {
106
75
  (0, _console.warn)(44);
@@ -112,24 +81,46 @@ class Aggregate extends _aggregateBase.AggregateBase {
112
81
  }
113
82
  const defaultEventAttributes = {
114
83
  /** should be overridden by the event-specific attributes, but just in case -- set it to now() */
115
- timestamp: this.#agentRuntime.timeKeeper.convertRelativeTimestamp((0, _now.now)()),
84
+ timestamp: Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(this.#agentRuntime.timeKeeper.convertRelativeTimestamp((0, _now.now)()))),
116
85
  /** all generic events require a pageUrl */
117
- pageUrl: (0, _cleanUrl.cleanURL)((0, _config.getRuntime)(this.agentIdentifier).origin)
86
+ pageUrl: (0, _cleanUrl.cleanURL)((0, _runtime.getRuntime)(this.agentIdentifier).origin)
118
87
  };
119
88
  const eventAttributes = {
120
89
  /** Agent-level custom attributes */
121
- ...((0, _config.getInfo)(this.agentIdentifier).jsAttributes || {}),
90
+ ...((0, _info.getInfo)(this.agentIdentifier).jsAttributes || {}),
122
91
  /** Fallbacks for required properties in-case the event did not supply them, should take precedence over agent-level custom attrs */
123
92
  ...defaultEventAttributes,
124
93
  /** Event-specific attributes take precedence over agent-level custom attributes and fallbacks */
125
94
  ...obj
126
95
  };
127
- this.events.push(eventAttributes);
128
-
129
- // check if we've reached the harvest limit...
130
- if (this.events.length >= this.eventsPerHarvest) {
96
+ this.events.add(eventAttributes);
97
+ this.checkEventLimits();
98
+ }
99
+ onHarvestStarted(options) {
100
+ const {
101
+ userAttributes,
102
+ atts
103
+ } = (0, _info.getInfo)(this.agentIdentifier);
104
+ if (!this.events.hasData) return;
105
+ var payload = {
106
+ qs: {
107
+ ua: userAttributes,
108
+ at: atts
109
+ },
110
+ body: (0, _traverse.applyFnToProps)({
111
+ ins: this.events.buffer
112
+ }, this.obfuscator.obfuscateString.bind(this.obfuscator), 'string')
113
+ };
114
+ if (options.retry) this.events.hold();
115
+ return payload;
116
+ }
117
+ onHarvestFinished(result) {
118
+ if (result && result?.sent && result?.retry && this.events.held.hasData) this.events.unhold();else this.events.held.clear();
119
+ }
120
+ checkEventLimits() {
121
+ // check if we've reached any harvest limits...
122
+ if (this.events.bytes > _agentConstants.IDEAL_PAYLOAD_SIZE) {
131
123
  this.ee.emit(_constants2.SUPPORTABILITY_METRIC_CHANNEL, ['GenericEvents/Harvest/Max/Seen']);
132
- this.overflow = [...this.overflow, ...this.events.splice(0, Infinity)];
133
124
  this.harvestScheduler.runHarvest();
134
125
  }
135
126
  }
@@ -3,6 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.FEATURE_NAME = void 0;
6
+ exports.MAX_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = exports.FEATURE_NAME = void 0;
7
7
  var _features = require("../../loaders/features/features");
8
- const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.genericEvents;
8
+ const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.genericEvents;
9
+ const IDEAL_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = 64000;
10
+ const MAX_PAYLOAD_SIZE = exports.MAX_PAYLOAD_SIZE = 1000000;
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Instrument = void 0;
7
- var _config = require("../../../common/config/config");
6
+ exports.Instrument = exports.GenericEvents = void 0;
7
+ var _init = require("../../../common/config/init");
8
8
  var _drain = require("../../../common/drain/drain");
9
9
  var _instrumentBase = require("../../utils/instrument-base");
10
10
  var _constants = require("../constants");
@@ -13,15 +13,15 @@ var _constants = require("../constants");
13
13
  */
14
14
 
15
15
  class Instrument extends _instrumentBase.InstrumentBase {
16
- static featureName = (() => _constants.FEATURE_NAME)();
17
- constructor(agentIdentifier, aggregator) {
18
- let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
16
+ static featureName = _constants.FEATURE_NAME;
17
+ constructor(agentIdentifier, aggregator, auto = true) {
19
18
  super(agentIdentifier, aggregator, _constants.FEATURE_NAME, auto);
20
- const genericEventSourceConfigs = [(0, _config.getConfigurationValue)(this.agentIdentifier, 'page_action.enabled')
19
+ const genericEventSourceConfigs = [(0, _init.getConfigurationValue)(this.agentIdentifier, 'page_action.enabled')
21
20
  // other future generic event source configs to go here, like M&Ms, PageResouce, etc.
22
21
  ];
23
22
  /** If any of the sources are active, import the aggregator. otherwise deregister */
24
23
  if (genericEventSourceConfigs.some(x => x)) this.importAggregator();else (0, _drain.deregisterDrain)(this.agentIdentifier, this.featureName);
25
24
  }
26
25
  }
27
- exports.Instrument = Instrument;
26
+ exports.Instrument = Instrument;
27
+ const GenericEvents = exports.GenericEvents = Instrument;
@@ -12,14 +12,17 @@ var _registerHandler = require("../../../common/event-emitter/register-handler")
12
12
  var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
13
13
  var _stringify = require("../../../common/util/stringify");
14
14
  var _handle = require("../../../common/event-emitter/handle");
15
- var _config = require("../../../common/config/config");
16
- var _runtime = require("../../../common/constants/runtime");
15
+ var _info = require("../../../common/config/info");
16
+ var _init = require("../../../common/config/init");
17
+ var _runtime = require("../../../common/config/runtime");
18
+ var _runtime2 = require("../../../common/constants/runtime");
17
19
  var _constants = require("../constants");
18
20
  var _features = require("../../../loaders/features/features");
19
21
  var _aggregateBase = require("../../utils/aggregate-base");
20
22
  var _nreum = require("../../../common/window/nreum");
21
23
  var _drain = require("../../../common/drain/drain");
22
24
  var _now = require("../../../common/timing/now");
25
+ var _traverse = require("../../../common/util/traverse");
23
26
  /*
24
27
  * Copyright 2020 New Relic Corporation. All rights reserved.
25
28
  * SPDX-License-Identifier: Apache-2.0
@@ -30,11 +33,9 @@ var _now = require("../../../common/timing/now");
30
33
  */
31
34
 
32
35
  class Aggregate extends _aggregateBase.AggregateBase {
33
- static featureName = (() => _constants.FEATURE_NAME)();
36
+ static featureName = _constants.FEATURE_NAME;
34
37
  constructor(agentIdentifier, aggregator) {
35
- var _this;
36
38
  super(agentIdentifier, aggregator, _constants.FEATURE_NAME);
37
- _this = this;
38
39
  this.stackReported = {};
39
40
  this.observedAt = {};
40
41
  this.pageviewReported = {};
@@ -44,28 +45,19 @@ class Aggregate extends _aggregateBase.AggregateBase {
44
45
 
45
46
  // this will need to change to match whatever ee we use in the instrument
46
47
  this.ee.on('interactionDone', (interaction, wasSaved) => this.onInteractionDone(interaction, wasSaved));
47
- (0, _registerHandler.registerHandler)('err', function () {
48
- return _this.storeError(...arguments);
49
- }, this.featureName, this.ee);
50
- (0, _registerHandler.registerHandler)('ierr', function () {
51
- return _this.storeError(...arguments);
52
- }, this.featureName, this.ee);
48
+ (0, _registerHandler.registerHandler)('err', (...args) => this.storeError(...args), this.featureName, this.ee);
49
+ (0, _registerHandler.registerHandler)('ierr', (...args) => this.storeError(...args), this.featureName, this.ee);
53
50
  (0, _registerHandler.registerHandler)('softNavFlush', (interactionId, wasFinished, softNavAttrs) => this.onSoftNavNotification(interactionId, wasFinished, softNavAttrs), this.featureName, this.ee); // when an ixn is done or cancelled
54
51
 
55
- const harvestTimeSeconds = (0, _config.getConfigurationValue)(this.agentIdentifier, 'jserrors.harvestTimeSeconds') || 10;
52
+ const harvestTimeSeconds = (0, _init.getConfigurationValue)(this.agentIdentifier, 'jserrors.harvestTimeSeconds') || 10;
56
53
 
57
54
  // 0 == off, 1 == on
58
- this.waitForFlags(['err']).then(_ref => {
59
- let [errFlag] = _ref;
55
+ this.waitForFlags(['err']).then(([errFlag]) => {
60
56
  if (errFlag) {
61
57
  const scheduler = new _harvestScheduler.HarvestScheduler('jserrors', {
62
- onFinished: function () {
63
- return _this.onHarvestFinished(...arguments);
64
- }
58
+ onFinished: (...args) => this.onHarvestFinished(...args)
65
59
  }, this);
66
- scheduler.harvest.on('jserrors', function () {
67
- return _this.onHarvestStarted(...arguments);
68
- });
60
+ scheduler.harvest.on('jserrors', (...args) => this.onHarvestStarted(...args));
69
61
  scheduler.startTimer(harvestTimeSeconds);
70
62
  this.drain();
71
63
  } else {
@@ -76,7 +68,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
76
68
  }
77
69
  onHarvestStarted(options) {
78
70
  // this gets rid of dependency in AJAX module
79
- var body = this.aggregator.take(['err', 'ierr', 'xhr']);
71
+ var body = (0, _traverse.applyFnToProps)(this.aggregator.take(['err', 'ierr', 'xhr']), this.obfuscator.obfuscateString.bind(this.obfuscator), 'string');
80
72
  if (options.retry) {
81
73
  this.currentBody = body;
82
74
  }
@@ -84,7 +76,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
84
76
  body,
85
77
  qs: {}
86
78
  };
87
- var releaseIds = (0, _stringify.stringify)((0, _config.getRuntime)(this.agentIdentifier).releaseIds);
79
+ var releaseIds = (0, _stringify.stringify)((0, _runtime.getRuntime)(this.agentIdentifier).releaseIds);
88
80
  if (releaseIds !== '{}') {
89
81
  payload.qs.ri = releaseIds;
90
82
  }
@@ -99,8 +91,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
99
91
  }
100
92
  onHarvestFinished(result) {
101
93
  if (result.retry && this.currentBody) {
102
- Object.entries(this.currentBody || {}).forEach(_ref2 => {
103
- let [key, value] = _ref2;
94
+ Object.entries(this.currentBody || {}).forEach(([key, value]) => {
104
95
  for (var i = 0; i < value.length; i++) {
105
96
  var bucket = value[i];
106
97
  var name = this.getBucketName(key, bucket.params, bucket.custom);
@@ -143,7 +134,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
143
134
  if (!err) return;
144
135
  // are we in an interaction
145
136
  time = time || (0, _now.now)();
146
- const agentRuntime = (0, _config.getRuntime)(this.agentIdentifier);
137
+ const agentRuntime = (0, _runtime.getRuntime)(this.agentIdentifier);
147
138
  let filterOutput;
148
139
  if (!internal && agentRuntime.onerror) {
149
140
  filterOutput = agentRuntime.onerror(err);
@@ -159,7 +150,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
159
150
  const params = {
160
151
  stackHash: (0, _stringHashCode.stringHashCode)(canonicalStackString),
161
152
  exceptionClass: stackInfo.name,
162
- request_uri: _runtime.globalScope?.location.pathname
153
+ request_uri: _runtime2.globalScope?.location.pathname
163
154
  };
164
155
  if (stackInfo.message) params.message = '' + stackInfo.message;
165
156
  // Notice if filterOutput isn't false|undefined OR our specified object, this func would've returned already (so it's unnecessary to req-check group).
@@ -176,7 +167,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
176
167
  if (!this.stackReported[bucketHash]) {
177
168
  this.stackReported[bucketHash] = true;
178
169
  params.stack_trace = (0, _formatStackTrace.truncateSize)(stackInfo.stackString);
179
- this.observedAt[bucketHash] = agentRuntime.timeKeeper.convertRelativeTimestamp(time);
170
+ this.observedAt[bucketHash] = Math.floor(agentRuntime.timeKeeper.correctAbsoluteTimestamp(agentRuntime.timeKeeper.convertRelativeTimestamp(time)));
180
171
  } else {
181
172
  params.browser_stack_hash = (0, _stringHashCode.stringHashCode)(stackInfo.stackString);
182
173
  }
@@ -192,7 +183,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
192
183
  this.pageviewReported[bucketHash] = true;
193
184
  }
194
185
  params.firstOccurrenceTimestamp = this.observedAt[bucketHash];
195
- params.timestamp = agentRuntime.timeKeeper.convertRelativeTimestamp(time);
186
+ params.timestamp = Math.floor(agentRuntime.timeKeeper.correctAbsoluteTimestamp(agentRuntime.timeKeeper.convertRelativeTimestamp(time)));
196
187
  var type = internal ? 'ierr' : 'err';
197
188
  var newMetrics = {
198
189
  time
@@ -225,30 +216,20 @@ class Aggregate extends _aggregateBase.AggregateBase {
225
216
  this.#storeJserrorForHarvest(jsErrorEvent, params.browserInteractionId !== undefined, params._softNavAttributes);
226
217
  }
227
218
  }
228
- #storeJserrorForHarvest(errorInfoArr, softNavOccurredFinished) {
229
- let softNavCustomAttrs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
219
+ #storeJserrorForHarvest(errorInfoArr, softNavOccurredFinished, softNavCustomAttrs = {}) {
230
220
  let [type, bucketHash, params, newMetrics, localAttrs] = errorInfoArr;
231
221
  const allCustomAttrs = {};
232
222
  if (softNavOccurredFinished) {
233
- Object.entries(softNavCustomAttrs).forEach(_ref3 => {
234
- let [k, v] = _ref3;
235
- return setCustom(k, v);
236
- }); // when an ixn finishes, it'll include stuff in jsAttributes + attrs specific to the ixn
223
+ Object.entries(softNavCustomAttrs).forEach(([k, v]) => setCustom(k, v)); // when an ixn finishes, it'll include stuff in jsAttributes + attrs specific to the ixn
237
224
  bucketHash += params.browserInteractionId;
238
225
  delete params._softNavAttributes; // cleanup temp properties from synchronous evaluation; this is harmless when async from soft nav (properties DNE)
239
226
  delete params._softNavFinished;
240
227
  } else {
241
228
  // interaction was cancelled -> error should not be associated OR there was no interaction
242
- Object.entries((0, _config.getInfo)(this.agentIdentifier).jsAttributes).forEach(_ref4 => {
243
- let [k, v] = _ref4;
244
- return setCustom(k, v);
245
- });
229
+ Object.entries((0, _info.getInfo)(this.agentIdentifier).jsAttributes).forEach(([k, v]) => setCustom(k, v));
246
230
  delete params.browserInteractionId;
247
231
  }
248
- if (localAttrs) Object.entries(localAttrs).forEach(_ref5 => {
249
- let [k, v] = _ref5;
250
- return setCustom(k, v);
251
- }); // local custom attrs are applied in either case with the highest precedence
232
+ if (localAttrs) Object.entries(localAttrs).forEach(([k, v]) => setCustom(k, v)); // local custom attrs are applied in either case with the highest precedence
252
233
 
253
234
  const jsAttributesHash = (0, _stringHashCode.stringHashCode)((0, _stringify.stringify)(allCustomAttrs));
254
235
  const aggregateHash = bucketHash + ':' + jsAttributesHash;
@@ -277,8 +258,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
277
258
  var jsAttributesHash = (0, _stringHashCode.stringHashCode)((0, _stringify.stringify)(allCustomAttrs));
278
259
  var aggregateHash = hash + ':' + jsAttributesHash;
279
260
  this.aggregator.store(item[0], aggregateHash, params, item[3], allCustomAttrs);
280
- function setCustom(_ref6) {
281
- let [key, val] = _ref6;
261
+ function setCustom([key, val]) {
282
262
  allCustomAttrs[key] = val && typeof val === 'object' ? (0, _stringify.stringify)(val) : val;
283
263
  }
284
264
  });