@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
@@ -10,7 +10,8 @@ var _denyList = require("../../../common/deny-list/deny-list");
10
10
  var _navTiming = require("../../../common/timing/nav-timing");
11
11
  var _uniqueId = require("../../../common/ids/unique-id");
12
12
  var _interaction = require("./interaction");
13
- var _config = require("../../../common/config/config");
13
+ var _init = require("../../../common/config/init");
14
+ var _runtime = require("../../../common/config/runtime");
14
15
  var _eventListenerOpts = require("../../../common/event-listener/event-listener-opts");
15
16
  var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
16
17
  var _serializer = require("./serializer");
@@ -21,11 +22,12 @@ var _aggregateBase = require("../../utils/aggregate-base");
21
22
  var _firstContentfulPaint = require("../../../common/vitals/first-contentful-paint");
22
23
  var _firstPaint = require("../../../common/vitals/first-paint");
23
24
  var _bundleId = require("../../../common/ids/bundle-id");
24
- var _runtime = require("../../../common/constants/runtime");
25
+ var _runtime2 = require("../../../common/constants/runtime");
25
26
  var _handle = require("../../../common/event-emitter/handle");
26
27
  var _constants2 = require("../../metrics/constants");
27
28
  var _drain = require("../../../common/drain/drain");
28
29
  var _console = require("../../../common/util/console");
30
+ var _eventBuffer = require("../../utils/event-buffer");
29
31
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
30
32
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
31
33
  /*
@@ -53,10 +55,10 @@ const {
53
55
  originalSetTimeout
54
56
  } = CONSTANTS;
55
57
  class Aggregate extends _aggregateBase.AggregateBase {
56
- static featureName = (() => FEATURE_NAME)();
58
+ static featureName = FEATURE_NAME;
57
59
  constructor(agentIdentifier, aggregator) {
58
60
  super(agentIdentifier, aggregator, FEATURE_NAME);
59
- const agentRuntime = (0, _config.getRuntime)(agentIdentifier);
61
+ const agentRuntime = (0, _runtime.getRuntime)(agentIdentifier);
60
62
  this.state = {
61
63
  initialPageURL: agentRuntime.origin,
62
64
  lastSeenUrl: agentRuntime.origin,
@@ -70,11 +72,10 @@ class Aggregate extends _aggregateBase.AggregateBase {
70
72
  pageLoaded: false,
71
73
  childTime: 0,
72
74
  depth: 0,
73
- harvestTimeSeconds: (0, _config.getConfigurationValue)(agentIdentifier, 'spa.harvestTimeSeconds') || 10,
74
- interactionsToHarvest: [],
75
- interactionsSent: [],
75
+ harvestTimeSeconds: (0, _init.getConfigurationValue)(agentIdentifier, 'spa.harvestTimeSeconds') || 10,
76
+ interactionsToHarvest: new _eventBuffer.EventBuffer(),
76
77
  // The below feature flag is used to disable the SPA ajax fix for specific customers, see https://new-relic.atlassian.net/browse/NR-172169
77
- disableSpaFix: ((0, _config.getConfigurationValue)(agentIdentifier, 'feature_flags') || []).indexOf('disable-spa-fix') > -1
78
+ disableSpaFix: ((0, _init.getConfigurationValue)(agentIdentifier, 'feature_flags') || []).indexOf('disable-spa-fix') > -1
78
79
  };
79
80
  let scheduler;
80
81
  this.serializer = new _serializer.Serializer(this);
@@ -125,8 +126,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
125
126
  // | click ending: | 65 | 50 | | | |
126
127
  // click fn-end | 70 | 0 | 0 | 70 | 20 |
127
128
 
128
- this.waitForFlags(['spa']).then(_ref => {
129
- let [spaFlag] = _ref;
129
+ this.waitForFlags(['spa']).then(([spaFlag]) => {
130
130
  if (spaFlag) {
131
131
  scheduler = new _harvestScheduler.HarvestScheduler('events', {
132
132
  onFinished: onHarvestFinished,
@@ -193,7 +193,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
193
193
  var ev = args[0];
194
194
  var evName = ev.type;
195
195
  var eventNode = ev["__nrNode:".concat(_bundleId.bundleId)];
196
- if (!state.pageLoaded && (evName === 'load' && eventSource === window || _runtime.loadedAsDeferredBrowserScript)) {
196
+ if (!state.pageLoaded && (evName === 'load' && eventSource === window || _runtime2.loadedAsDeferredBrowserScript)) {
197
197
  state.pageLoaded = true;
198
198
  // set to null so prevNode is set correctly
199
199
  this.prevNode = state.currentNode = null;
@@ -628,14 +628,9 @@ class Aggregate extends _aggregateBase.AggregateBase {
628
628
  }
629
629
  const classThis = this;
630
630
  function onHarvestStarted(options) {
631
- if (state.interactionsToHarvest.length === 0 || classThis.blocked) return {};
632
- var payload = serializer.serializeMultiple(state.interactionsToHarvest, 0, _navTiming.navTimingValues);
633
- if (options.retry) {
634
- state.interactionsToHarvest.forEach(function (interaction) {
635
- state.interactionsSent.push(interaction);
636
- });
637
- }
638
- state.interactionsToHarvest = [];
631
+ if (!state.interactionsToHarvest.hasData || classThis.blocked) return {};
632
+ var payload = serializer.serializeMultiple(state.interactionsToHarvest.buffer, 0, _navTiming.navTimingValues);
633
+ if (options.retry) state.interactionsToHarvest.hold();else state.interactionsToHarvest.clear();
639
634
  return {
640
635
  body: {
641
636
  e: payload
@@ -643,12 +638,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
643
638
  };
644
639
  }
645
640
  function onHarvestFinished(result) {
646
- if (result.sent && result.retry && state.interactionsSent.length > 0) {
647
- state.interactionsSent.forEach(function (interaction) {
648
- state.interactionsToHarvest.unshift(interaction);
649
- });
650
- state.interactionsSent = [];
651
- }
641
+ if (result.sent && result.retry && state.interactionsToHarvest.held.hasData) state.interactionsToHarvest.unhold();else state.interactionsToHarvest.held.clear();
652
642
  }
653
643
  baseEE.on('spa-jserror', function (type, name, params, metrics) {
654
644
  if (!state.currentNode) return;
@@ -696,7 +686,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
696
686
  interaction.root.attrs.firstContentfulPaint = _firstContentfulPaint.firstContentfulPaint.current.value;
697
687
  }
698
688
  baseEE.emit('interactionDone', [interaction, true]);
699
- state.interactionsToHarvest.push(interaction);
689
+ state.interactionsToHarvest.add(interaction);
700
690
  let smCategory;
701
691
  if (interaction.root?.attrs?.trigger === 'initialPageLoad') smCategory = 'InitialPageLoad';else if (interaction.routeChange) smCategory = 'RouteChange';else smCategory = 'Custom';
702
692
  (0, _handle.handle)(_constants2.SUPPORTABILITY_METRIC_CHANNEL, ["Spa/Interaction/".concat(smCategory, "/Duration/Ms"), Math.max((interaction.root?.end || 0) - (interaction.root?.start || 0), 0)], undefined, _features.FEATURE_NAMES.metrics, baseEE);
@@ -704,7 +694,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
704
694
  if (!scheduler) (0, _console.warn)(19);
705
695
  }
706
696
  function isEnabled() {
707
- var enabled = (0, _config.getConfigurationValue)(agentIdentifier, 'spa.enabled');
697
+ var enabled = (0, _init.getConfigurationValue)(agentIdentifier, 'spa.enabled');
708
698
  return enabled !== false;
709
699
  }
710
700
  }
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Interaction = Interaction;
7
- var _config = require("../../../common/config/config");
7
+ var _info = require("../../../common/config/info");
8
+ var _runtime = require("../../../common/config/runtime");
9
+ var _nreum = require("../../../common/window/nreum");
8
10
  var _contextualEe = require("../../../common/event-emitter/contextual-ee");
9
11
  var _interactionNode = require("./interaction-node");
10
12
  /*
@@ -12,8 +14,8 @@ var _interactionNode = require("./interaction-node");
12
14
  * SPDX-License-Identifier: Apache-2.0
13
15
  */
14
16
 
15
- var originalSetTimeout = _config.originals.ST;
16
- var originalClearTimeout = _config.originals.CT;
17
+ var originalSetTimeout = (0, _nreum.gosNREUMOriginals)().o.ST;
18
+ var originalClearTimeout = (0, _nreum.gosNREUMOriginals)().o.CT;
17
19
  var lastId = {};
18
20
  function Interaction(eventName, timestamp, url, routeName, onFinished, agentIdentifier) {
19
21
  this.agentIdentifier = agentIdentifier;
@@ -32,7 +34,7 @@ function Interaction(eventName, timestamp, url, routeName, onFinished, agentIden
32
34
  var root = this.root = new _interactionNode.InteractionNode(this, null, 'interaction', timestamp);
33
35
  var attrs = root.attrs;
34
36
  attrs.trigger = eventName;
35
- attrs.initialPageURL = (0, _config.getRuntime)(agentIdentifier).origin;
37
+ attrs.initialPageURL = (0, _runtime.getRuntime)(agentIdentifier).origin;
36
38
  attrs.oldRoute = routeName;
37
39
  attrs.newURL = attrs.oldURL = url;
38
40
  attrs.custom = {};
@@ -87,8 +89,7 @@ InteractionPrototype.finish = function finishInteraction() {
87
89
  if (this.onFinished) {
88
90
  this.onFinished(this);
89
91
  }
90
- Object.entries((0, _config.getInfo)(interaction.agentIdentifier).jsAttributes || {}).forEach(_ref => {
91
- let [attr, value] = _ref;
92
+ Object.entries((0, _info.getInfo)(interaction.agentIdentifier).jsAttributes || {}).forEach(([attr, value]) => {
92
93
  if (!(attr in customAttrs)) customAttrs[attr] = value;
93
94
  });
94
95
  root.end = endTimestamp;
@@ -7,7 +7,7 @@ exports.Serializer = void 0;
7
7
  var _cleanUrl = require("../../../common/url/clean-url");
8
8
  var _belSerializer = require("../../../common/serialize/bel-serializer");
9
9
  var _sharedContext = require("../../../common/context/shared-context");
10
- var _config = require("../../../common/config/config");
10
+ var _info = require("../../../common/config/info");
11
11
  /*
12
12
  * Copyright 2020 New Relic Corporation. All rights reserved.
13
13
  * SPDX-License-Identifier: Apache-2.0
@@ -27,7 +27,7 @@ class Serializer extends _sharedContext.SharedContext {
27
27
  this.firstTimestamp = undefined;
28
28
  }
29
29
  serializeMultiple(interactions, offset, navTiming) {
30
- const info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
30
+ const info = (0, _info.getInfo)(this.sharedContext.agentIdentifier);
31
31
  var addString = (0, _belSerializer.getAddStringContext)(this.sharedContext.agentIdentifier);
32
32
  var serialized = 'bel.7';
33
33
  interactions.forEach(interaction => {
@@ -37,7 +37,7 @@ class Serializer extends _sharedContext.SharedContext {
37
37
  return serialized;
38
38
  }
39
39
  serializeSingle(root, offset, navTiming, isRouteChange) {
40
- const info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
40
+ const info = (0, _info.getInfo)(this.sharedContext.agentIdentifier);
41
41
  var addString = (0, _belSerializer.getAddStringContext)(this.sharedContext.agentIdentifier);
42
42
  var serialized = 'bel.7;' + this.serializeInteraction(root, offset, navTiming, isRouteChange, addString, info);
43
43
  this.firstTimestamp = undefined;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.originalSetTimeout = exports.START = exports.SPA_NODE = exports.REMAINING = exports.MAX_TIMER_BUDGET = exports.JS_TIME = exports.JSONP_NODE = exports.JSONP_END = exports.INTERACTION_EVENTS = exports.INTERACTION_API = exports.INTERACTION = exports.FN_START = exports.FN_END = exports.FETCH_START = exports.FETCH_DONE = exports.FETCH_BODY = exports.FETCH = exports.FEATURE_NAME = exports.END = exports.CB_START = exports.CB_END = exports.BODY = void 0;
7
- var _config = require("../../common/config/config");
7
+ var _nreum = require("../../common/window/nreum");
8
8
  var _features = require("../../loaders/features/features");
9
9
  const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.spa;
10
10
  const INTERACTION_EVENTS = exports.INTERACTION_EVENTS = ['click', 'submit', 'keypress', 'keydown', 'keyup', 'change'];
@@ -21,7 +21,7 @@ const FETCH_START = exports.FETCH_START = 'fetch-start';
21
21
  const FETCH_DONE = exports.FETCH_DONE = 'fetch-done';
22
22
  const FETCH_BODY = exports.FETCH_BODY = 'fetch-body-';
23
23
  const JSONP_END = exports.JSONP_END = 'jsonp-end';
24
- const originalSetTimeout = exports.originalSetTimeout = _config.originals.ST;
24
+ const originalSetTimeout = exports.originalSetTimeout = (0, _nreum.gosNREUMOriginals)().o.ST;
25
25
  const START = exports.START = '-start';
26
26
  const END = exports.END = '-end';
27
27
  const BODY = exports.BODY = '-body';
@@ -3,14 +3,20 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Instrument = void 0;
7
- var _wrap = require("../../../common/wrap");
6
+ exports.Spa = exports.Instrument = void 0;
8
7
  var _eventListenerOpts = require("../../../common/event-listener/event-listener-opts");
9
8
  var _instrumentBase = require("../../utils/instrument-base");
10
9
  var CONSTANTS = _interopRequireWildcard(require("../constants"));
11
10
  var _runtime = require("../../../common/constants/runtime");
12
11
  var _now = require("../../../common/timing/now");
13
12
  var _handle = require("../../../common/event-emitter/handle");
13
+ var _wrapJsonp = require("../../../common/wrap/wrap-jsonp");
14
+ var _wrapPromise = require("../../../common/wrap/wrap-promise");
15
+ var _wrapTimer = require("../../../common/wrap/wrap-timer");
16
+ var _wrapXhr = require("../../../common/wrap/wrap-xhr");
17
+ var _wrapFetch = require("../../../common/wrap/wrap-fetch");
18
+ var _wrapHistory = require("../../../common/wrap/wrap-history");
19
+ var _wrapMutation = require("../../../common/wrap/wrap-mutation");
14
20
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
21
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
22
  /*
@@ -31,12 +37,9 @@ const {
31
37
  FN_END
32
38
  } = CONSTANTS;
33
39
  class Instrument extends _instrumentBase.InstrumentBase {
34
- static featureName = (() => FEATURE_NAME)();
35
- constructor(agentIdentifier, aggregator) {
36
- var _this;
37
- let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
40
+ static featureName = FEATURE_NAME;
41
+ constructor(agentIdentifier, aggregator, auto = true) {
38
42
  super(agentIdentifier, aggregator, FEATURE_NAME, auto);
39
- _this = this;
40
43
  if (!_runtime.isBrowserScope) return; // SPA not supported outside web env
41
44
 
42
45
  try {
@@ -45,25 +48,22 @@ class Instrument extends _instrumentBase.InstrumentBase {
45
48
  let depth = 0;
46
49
  let startHash;
47
50
  const tracerEE = this.ee.get('tracer');
48
- const jsonpEE = (0, _wrap.wrapJsonP)(this.ee);
49
- const promiseEE = (0, _wrap.wrapPromise)(this.ee);
50
- const timerEE = (0, _wrap.wrapTimer)(this.ee);
51
- const xhrEE = (0, _wrap.wrapXhr)(this.ee);
51
+ const jsonpEE = (0, _wrapJsonp.wrapJsonP)(this.ee);
52
+ const promiseEE = (0, _wrapPromise.wrapPromise)(this.ee);
53
+ const timerEE = (0, _wrapTimer.wrapTimer)(this.ee);
54
+ const xhrEE = (0, _wrapXhr.wrapXhr)(this.ee);
52
55
  const eventsEE = this.ee.get('events'); // wrapXhr will call wrapEvents
53
- const fetchEE = (0, _wrap.wrapFetch)(this.ee);
54
- const historyEE = (0, _wrap.wrapHistory)(this.ee);
55
- const mutationEE = (0, _wrap.wrapMutation)(this.ee);
56
+ const fetchEE = (0, _wrapFetch.wrapFetch)(this.ee);
57
+ const historyEE = (0, _wrapHistory.wrapHistory)(this.ee);
58
+ const mutationEE = (0, _wrapMutation.wrapMutation)(this.ee);
56
59
  this.ee.on(FN_START, startTimestamp);
57
60
  promiseEE.on(CB_START, startTimestamp);
58
61
  jsonpEE.on(CB_START, startTimestamp);
59
62
  this.ee.on(FN_END, endTimestamp);
60
63
  promiseEE.on(CB_END, endTimestamp);
61
64
  jsonpEE.on(CB_END, endTimestamp);
62
- this.ee.on('fn-err', function () {
63
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
64
- args[_key] = arguments[_key];
65
- }
66
- if (!args[2]?.__newrelic?.[agentIdentifier]) (0, _handle.handle)('function-err', [...args], undefined, _this.featureName, _this.ee);
65
+ this.ee.on('fn-err', (...args) => {
66
+ if (!args[2]?.__newrelic?.[agentIdentifier]) (0, _handle.handle)('function-err', [...args], undefined, this.featureName, this.ee);
67
67
  });
68
68
  this.ee.buffer([FN_START, FN_END, 'xhr-resolved'], this.featureName);
69
69
  eventsEE.buffer([FN_START], this.featureName);
@@ -119,4 +119,5 @@ class Instrument extends _instrumentBase.InstrumentBase {
119
119
  this.abortHandler = undefined; // weakly allow this abort op to run only once
120
120
  }
121
121
  }
122
- exports.Instrument = Instrument;
122
+ exports.Instrument = Instrument;
123
+ const Spa = exports.Spa = Instrument;
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.setupAgentSession = setupAgentSession;
7
- var _config = require("../../common/config/config");
7
+ var _info = require("../../common/config/info");
8
+ var _init = require("../../common/config/init");
9
+ var _runtime = require("../../common/config/runtime");
8
10
  var _drain = require("../../common/drain/drain");
9
11
  var _contextualEe = require("../../common/event-emitter/contextual-ee");
10
12
  var _registerHandler = require("../../common/event-emitter/register-handler");
@@ -13,9 +15,9 @@ var _localStorage = require("../../common/storage/local-storage.js");
13
15
  var _constants = require("../../common/session/constants");
14
16
  let ranOnce = 0;
15
17
  function setupAgentSession(agentIdentifier) {
16
- const agentRuntime = (0, _config.getRuntime)(agentIdentifier);
18
+ const agentRuntime = (0, _runtime.getRuntime)(agentIdentifier);
17
19
  if (ranOnce++) return agentRuntime.session;
18
- const sessionInit = (0, _config.getConfiguration)(agentIdentifier).session;
20
+ const sessionInit = (0, _init.getConfiguration)(agentIdentifier).session;
19
21
  agentRuntime.session = new _sessionEntity.SessionEntity({
20
22
  agentIdentifier,
21
23
  key: _constants.DEFAULT_KEY,
@@ -26,7 +28,7 @@ function setupAgentSession(agentIdentifier) {
26
28
 
27
29
  // Retrieve & re-add all of the persisted setCustomAttribute|setUserId k-v from previous page load(s), if any was stored.
28
30
  const customSessionData = agentRuntime.session.state.custom;
29
- const agentInfo = (0, _config.getInfo)(agentIdentifier);
31
+ const agentInfo = (0, _info.getInfo)(agentIdentifier);
30
32
  if (customSessionData) {
31
33
  agentInfo.jsAttributes = {
32
34
  ...agentInfo.jsAttributes,
@@ -5,15 +5,18 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.AggregateBase = void 0;
7
7
  var _featureBase = require("./feature-base");
8
- var _config = require("../../common/config/config");
8
+ var _info = require("../../common/config/info");
9
+ var _runtime = require("../../common/config/runtime");
9
10
  var _configure = require("../../loaders/configure/configure");
10
11
  var _nreum = require("../../common/window/nreum");
11
12
  var _drain = require("../../common/drain/drain");
12
13
  var _featureFlags = require("../../common/util/feature-flags");
14
+ var _obfuscate = require("../../common/util/obfuscate");
13
15
  class AggregateBase extends _featureBase.FeatureBase {
14
- constructor() {
15
- super(...arguments);
16
+ constructor(...args) {
17
+ super(...args);
16
18
  this.checkConfiguration();
19
+ this.obfuscator = (0, _runtime.getRuntime)(this.agentIdentifier).obfuscator;
17
20
  }
18
21
 
19
22
  /**
@@ -21,14 +24,12 @@ class AggregateBase extends _featureBase.FeatureBase {
21
24
  * @param {string[]} flagNames
22
25
  * @returns {Promise}
23
26
  */
24
- waitForFlags() {
25
- let flagNames = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
27
+ waitForFlags(flagNames = []) {
26
28
  const flagsPromise = new Promise((resolve, reject) => {
27
29
  if (_featureFlags.activatedFeatures[this.agentIdentifier]) {
28
30
  resolve(buildOutput(_featureFlags.activatedFeatures[this.agentIdentifier]));
29
31
  } else {
30
- this.ee.on('rumresp', function () {
31
- let resp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
32
+ this.ee.on('rumresp', (resp = {}) => {
32
33
  resolve(buildOutput(resp));
33
34
  });
34
35
  }
@@ -56,7 +57,7 @@ class AggregateBase extends _featureBase.FeatureBase {
56
57
  */
57
58
  checkConfiguration() {
58
59
  // NOTE: This check has to happen at aggregator load time
59
- if (!(0, _config.isConfigured)(this.agentIdentifier)) {
60
+ if (!(0, _info.isValid)(this.agentIdentifier)) {
60
61
  const cdn = (0, _nreum.gosCDN)();
61
62
  let jsAttributes = {
62
63
  ...cdn.info?.jsAttributes
@@ -64,7 +65,7 @@ class AggregateBase extends _featureBase.FeatureBase {
64
65
  try {
65
66
  jsAttributes = {
66
67
  ...jsAttributes,
67
- ...(0, _config.getInfo)(this.agentIdentifier)?.jsAttributes
68
+ ...(0, _info.getInfo)(this.agentIdentifier)?.jsAttributes
68
69
  };
69
70
  } catch (err) {
70
71
  // do nothing
@@ -77,9 +78,13 @@ class AggregateBase extends _featureBase.FeatureBase {
77
78
  ...cdn.info,
78
79
  jsAttributes
79
80
  },
80
- runtime: (0, _config.getRuntime)(this.agentIdentifier)
81
+ runtime: (0, _runtime.getRuntime)(this.agentIdentifier)
81
82
  });
82
83
  }
84
+ const runtime = (0, _runtime.getRuntime)(this.agentIdentifier);
85
+ if (!runtime.obfuscator) {
86
+ runtime.obfuscator = new _obfuscate.Obfuscator(this.agentIdentifier);
87
+ }
83
88
  }
84
89
  }
85
90
  exports.AggregateBase = AggregateBase;
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EventBuffer = void 0;
7
+ var _stringify = require("../../common/util/stringify");
8
+ var _agentConstants = require("../../common/constants/agent-constants");
9
+ /**
10
+ * A container that keeps an event buffer and size with helper methods
11
+ * @typedef {Object} EventBuffer
12
+ * @property {number} size
13
+ * @property {*[]} buffer
14
+ */
15
+
16
+ /**
17
+ * A container that holds, evaluates, and merges event objects for harvesting
18
+ */
19
+ class EventBuffer {
20
+ /** @type {Object[]} */
21
+ #buffer = [];
22
+ /** @type {number} */
23
+ #bytes = 0;
24
+ /** @type {EventBuffer} */
25
+ #held;
26
+
27
+ /**
28
+ *
29
+ * @param {number=} maxPayloadSize
30
+ */
31
+ constructor(maxPayloadSize = _agentConstants.MAX_PAYLOAD_SIZE) {
32
+ this.maxPayloadSize = maxPayloadSize;
33
+ }
34
+
35
+ /**
36
+ * buffer is read only, use the helper methods to add or clear buffer data
37
+ */
38
+ get buffer() {
39
+ return this.#buffer;
40
+ }
41
+
42
+ /**
43
+ * bytes is read only, use the helper methods to add or clear buffer data
44
+ */
45
+ get bytes() {
46
+ return this.#bytes;
47
+ }
48
+
49
+ /**
50
+ * held is another event buffer
51
+ */
52
+ get held() {
53
+ this.#held ??= new EventBuffer(this.maxPayloadSize);
54
+ return this.#held;
55
+ }
56
+
57
+ /**
58
+ * Returns a boolean indicating whether the current size and buffer contain valid data
59
+ * @returns {boolean}
60
+ */
61
+ get hasData() {
62
+ return this.buffer.length > 0 && this.bytes > 0;
63
+ }
64
+
65
+ /**
66
+ * Adds an event object to the buffer while tallying size
67
+ * @param {Object} event the event object to add to the buffer
68
+ * @returns {EventBuffer} returns the event buffer for chaining
69
+ */
70
+ add(event) {
71
+ const size = (0, _stringify.stringify)(event).length;
72
+ if (!this.canMerge(size)) return this;
73
+ this.#buffer.push(event);
74
+ this.#bytes += size;
75
+ return this;
76
+ }
77
+
78
+ /**
79
+ * clear the buffer data
80
+ * @returns {EventBuffer}
81
+ */
82
+ clear() {
83
+ this.#bytes = 0;
84
+ this.#buffer = [];
85
+ return this;
86
+ }
87
+
88
+ /**
89
+ * Hold the buffer data in a new (child) EventBuffer (.held) to unblock the main buffer.
90
+ * This action clears the main buffer
91
+ * @returns {EventBuffer}
92
+ */
93
+ hold() {
94
+ this.held.merge(this);
95
+ this.clear();
96
+ return this;
97
+ }
98
+
99
+ /**
100
+ * Prepend the held EventBuffer (.held) back into the main buffer
101
+ * This action clears the held buffer
102
+ * @returns {EventBuffer}
103
+ */
104
+ unhold() {
105
+ this.merge(this.held, true);
106
+ this.held.clear();
107
+ return this;
108
+ }
109
+
110
+ /**
111
+ * Merges an EventBuffer into this EventBuffer
112
+ * @param {EventBuffer} events an EventBuffer intended to merge with this EventBuffer
113
+ * @param {boolean} prepend if true, the supplied events will be prepended before the events of this class
114
+ * @returns {EventBuffer} returns the event buffer for chaining
115
+ */
116
+ merge(eventBuffer, prepend = false) {
117
+ if (!this.canMerge(eventBuffer.bytes)) return this;
118
+ this.#buffer = prepend ? [...eventBuffer.buffer, ...this.#buffer] : [...this.#buffer, ...eventBuffer.buffer];
119
+ this.#bytes += eventBuffer.#bytes;
120
+ return this;
121
+ }
122
+
123
+ /**
124
+ * Returns a boolean indicating the resulting size of a merge would be valid. Compares against the maxPayloadSize provided at initialization time.
125
+ * @param {number} size
126
+ * @returns {boolean}
127
+ */
128
+ canMerge(size) {
129
+ return this.bytes + (size || Infinity) < this.maxPayloadSize;
130
+ }
131
+ }
132
+ exports.EventBuffer = EventBuffer;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.canEnableSessionTracking = void 0;
7
- var _config = require("../../common/config/config");
7
+ var _init = require("../../common/config/init");
8
8
  var _runtime = require("../../common/constants/runtime");
9
9
  /**
10
10
  * Checks if session can be tracked, affects session entity and dependent features
@@ -12,6 +12,6 @@ var _runtime = require("../../common/constants/runtime");
12
12
  * @returns {boolean}
13
13
  */
14
14
  const canEnableSessionTracking = agentId => {
15
- return _runtime.isBrowserScope && (0, _config.getConfigurationValue)(agentId, 'privacy.cookies_enabled') === true;
15
+ return _runtime.isBrowserScope && (0, _init.getConfigurationValue)(agentId, 'privacy.cookies_enabled') === true;
16
16
  };
17
17
  exports.canEnableSessionTracking = canEnableSessionTracking;
@@ -10,7 +10,7 @@ var _load = require("../../common/window/load");
10
10
  var _runtime = require("../../common/constants/runtime");
11
11
  var _console = require("../../common/util/console");
12
12
  var _features = require("../../loaders/features/features");
13
- var _config = require("../../common/config/config");
13
+ var _init = require("../../common/config/init");
14
14
  var _utils = require("../session_replay/shared/utils");
15
15
  var _featureGates = require("./feature-gates");
16
16
  var _invoke = require("../../common/util/invoke");
@@ -34,8 +34,7 @@ class InstrumentBase extends _featureBase.FeatureBase {
34
34
  * of its pooled instrumentation data handled by the agent's centralized drain functionality, rather than draining
35
35
  * immediately. Primarily useful for fine-grained control in tests.
36
36
  */
37
- constructor(agentIdentifier, aggregator, featureName) {
38
- let auto = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
37
+ constructor(agentIdentifier, aggregator, featureName, auto = true) {
39
38
  super(agentIdentifier, aggregator, featureName);
40
39
  this.auto = auto;
41
40
 
@@ -51,11 +50,12 @@ class InstrumentBase extends _featureBase.FeatureBase {
51
50
  /**
52
51
  * @type {Promise} Assigned immediately after @see importAggregator runs. Serves as a signal for when the inner async fn finishes execution. Useful for features to await
53
52
  * one another if there are inter-features dependencies.
53
+ * TODO: This is only used for the SPA feature component tests and should be refactored out.
54
54
  */
55
55
  this.onAggregateImported = undefined;
56
56
 
57
57
  /** used in conjunction with newrelic.start() to defer harvesting in features */
58
- if ((0, _config.getConfigurationValue)(this.agentIdentifier, "".concat(this.featureName, ".autoStart")) === false) this.auto = false;
58
+ if ((0, _init.getConfigurationValue)(this.agentIdentifier, "".concat(this.featureName, ".autoStart")) === false) this.auto = false;
59
59
  /** if the feature requires opt-in (!auto-start), it will get registered once the api has been called */
60
60
  if (this.auto) (0, _drain.registerDrain)(agentIdentifier, featureName);else {
61
61
  this.ee.on('manual-start-all', (0, _invoke.single)(() => {
@@ -74,8 +74,7 @@ class InstrumentBase extends _featureBase.FeatureBase {
74
74
  * @param {Object} [argsObjFromInstrument] - any values or references to pass down to aggregate
75
75
  * @returns void
76
76
  */
77
- importAggregator() {
78
- let argsObjFromInstrument = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
77
+ importAggregator(argsObjFromInstrument = {}) {
79
78
  if (this.featAggregate || !this.auto) return;
80
79
  let loadedSuccessfully;
81
80
  this.onAggregateImported = new Promise(resolve => {
@@ -88,7 +87,7 @@ class InstrumentBase extends _featureBase.FeatureBase {
88
87
  // would require some setup before certain features start
89
88
  const {
90
89
  setupAgentSession
91
- } = await Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "session-manager" */'./agent-session')));
90
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "session-manager" */'./agent-session')));
92
91
  session = setupAgentSession(this.agentIdentifier);
93
92
  }
94
93
  } catch (e) {
@@ -109,7 +108,7 @@ class InstrumentBase extends _featureBase.FeatureBase {
109
108
  }
110
109
  const {
111
110
  lazyFeatureLoader
112
- } = await Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "lazy-feature-loader" */'./lazy-feature-loader')));
111
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "lazy-feature-loader" */'./lazy-feature-loader')));
113
112
  const {
114
113
  Aggregate
115
114
  } = await lazyFeatureLoader(this.featureName, 'aggregate');
@@ -22,27 +22,27 @@ function lazyFeatureLoader(featureName, featurePart) {
22
22
  if (featurePart === 'aggregate') {
23
23
  switch (featureName) {
24
24
  case _features.FEATURE_NAMES.ajax:
25
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "ajax-aggregate" */'../ajax/aggregate')));
25
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "ajax-aggregate" */'../ajax/aggregate')));
26
26
  case _features.FEATURE_NAMES.jserrors:
27
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "jserrors-aggregate" */'../jserrors/aggregate')));
27
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "jserrors-aggregate" */'../jserrors/aggregate')));
28
28
  case _features.FEATURE_NAMES.genericEvents:
29
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "generic_events-aggregate" */'../generic_events/aggregate')));
29
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "generic_events-aggregate" */'../generic_events/aggregate')));
30
30
  case _features.FEATURE_NAMES.logging:
31
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "logging-aggregate" */'../logging/aggregate')));
31
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "logging-aggregate" */'../logging/aggregate')));
32
32
  case _features.FEATURE_NAMES.metrics:
33
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "metrics-aggregate" */'../metrics/aggregate')));
33
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "metrics-aggregate" */'../metrics/aggregate')));
34
34
  case _features.FEATURE_NAMES.pageViewEvent:
35
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "page_view_event-aggregate" */'../page_view_event/aggregate')));
35
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "page_view_event-aggregate" */'../page_view_event/aggregate')));
36
36
  case _features.FEATURE_NAMES.pageViewTiming:
37
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "page_view_timing-aggregate" */'../page_view_timing/aggregate')));
37
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "page_view_timing-aggregate" */'../page_view_timing/aggregate')));
38
38
  case _features.FEATURE_NAMES.sessionReplay:
39
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "session_replay-aggregate" */'../session_replay/aggregate')));
39
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "session_replay-aggregate" */'../session_replay/aggregate')));
40
40
  case _features.FEATURE_NAMES.sessionTrace:
41
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "session_trace-aggregate" */'../session_trace/aggregate')));
41
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "session_trace-aggregate" */'../session_trace/aggregate')));
42
42
  case _features.FEATURE_NAMES.spa:
43
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "spa-aggregate" */'../spa/aggregate')));
43
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "spa-aggregate" */'../spa/aggregate')));
44
44
  case _features.FEATURE_NAMES.softNav:
45
- return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "basic-spa-aggregate" */'../soft_navigations/aggregate')));
45
+ return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "basic-spa-aggregate" */'../soft_navigations/aggregate')));
46
46
  default:
47
47
  throw new Error("Attempted to load unsupported agent feature: ".concat(featureName, " ").concat(featurePart));
48
48
  }