@newrelic/browser-agent 1.263.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 (478) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +2 -2
  3. package/dist/cjs/cdn/experimental.js +3 -7
  4. package/dist/cjs/cdn/pro.js +2 -2
  5. package/dist/cjs/cdn/spa.js +2 -2
  6. package/dist/cjs/common/aggregate/aggregator.js +2 -3
  7. package/dist/cjs/common/config/{state/configurable.js → configurable.js} +1 -1
  8. package/dist/cjs/common/config/{state/info.js → info.js} +1 -1
  9. package/dist/cjs/common/config/{state/init.js → init.js} +11 -8
  10. package/dist/cjs/common/config/{state/loader-config.js → loader-config.js} +1 -1
  11. package/dist/cjs/common/config/{state/runtime.js → runtime.js} +16 -5
  12. package/dist/cjs/common/constants/agent-constants.js +8 -0
  13. package/dist/cjs/common/constants/env.cdn.js +1 -1
  14. package/dist/cjs/common/constants/env.npm.js +1 -1
  15. package/dist/cjs/common/constants/runtime.js +1 -3
  16. package/dist/cjs/common/context/shared-context.js +1 -2
  17. package/dist/cjs/common/dispatch/global-event.js +1 -2
  18. package/dist/cjs/common/drain/drain.js +12 -18
  19. package/dist/cjs/common/event-emitter/contextual-ee.js +3 -4
  20. package/dist/cjs/common/event-listener/event-listener-opts.js +2 -6
  21. package/dist/cjs/common/harvest/harvest-scheduler.js +1 -2
  22. package/dist/cjs/common/harvest/harvest.js +30 -57
  23. package/dist/cjs/common/serialize/bel-serializer.js +6 -11
  24. package/dist/cjs/common/session/session-entity.js +10 -13
  25. package/dist/cjs/common/timing/nav-timing.js +1 -3
  26. package/dist/cjs/common/timing/time-keeper.js +16 -6
  27. package/dist/cjs/common/url/encode.js +3 -7
  28. package/dist/cjs/common/util/console.js +2 -0
  29. package/dist/cjs/common/util/invoke.js +6 -16
  30. package/dist/cjs/common/util/obfuscate.js +97 -53
  31. package/dist/cjs/common/util/submit-data.js +17 -21
  32. package/dist/cjs/common/util/text.js +9 -0
  33. package/dist/cjs/common/util/traverse.js +1 -3
  34. package/dist/cjs/common/vitals/cumulative-layout-shift.js +5 -6
  35. package/dist/cjs/common/vitals/first-contentful-paint.js +4 -5
  36. package/dist/cjs/common/vitals/first-input-delay.js +4 -5
  37. package/dist/cjs/common/vitals/interaction-to-next-paint.js +5 -6
  38. package/dist/cjs/common/vitals/largest-contentful-paint.js +4 -5
  39. package/dist/cjs/common/vitals/time-to-first-byte.js +4 -5
  40. package/dist/cjs/common/vitals/vital-metric.js +5 -7
  41. package/dist/cjs/common/window/nreum.js +2 -1
  42. package/dist/cjs/common/window/page-visibility.js +1 -4
  43. package/dist/cjs/common/wrap/wrap-events.js +1 -4
  44. package/dist/cjs/common/wrap/wrap-promise.js +1 -4
  45. package/dist/cjs/common/wrap/wrap-websocket.js +74 -0
  46. package/dist/cjs/features/ajax/aggregate/chunk.js +4 -3
  47. package/dist/cjs/features/ajax/aggregate/gql.js +4 -5
  48. package/dist/cjs/features/ajax/aggregate/index.js +19 -22
  49. package/dist/cjs/features/ajax/constants.js +2 -3
  50. package/dist/cjs/features/ajax/instrument/distributed-tracing.js +9 -8
  51. package/dist/cjs/features/ajax/instrument/index.js +14 -12
  52. package/dist/cjs/features/generic_events/aggregate/index.js +128 -0
  53. package/dist/cjs/features/generic_events/constants.js +10 -0
  54. package/dist/cjs/features/generic_events/index.js +12 -0
  55. package/dist/cjs/features/generic_events/instrument/index.js +27 -0
  56. package/dist/cjs/features/jserrors/aggregate/index.js +25 -44
  57. package/dist/cjs/features/jserrors/instrument/index.js +4 -4
  58. package/dist/cjs/features/logging/aggregate/index.js +33 -36
  59. package/dist/cjs/features/logging/constants.js +2 -3
  60. package/dist/cjs/features/logging/instrument/index.js +5 -6
  61. package/dist/cjs/features/logging/shared/log.js +1 -3
  62. package/dist/cjs/features/logging/shared/utils.js +2 -4
  63. package/dist/cjs/features/metrics/aggregate/index.js +34 -17
  64. package/dist/cjs/features/metrics/aggregate/websocket-detection.js +34 -0
  65. package/dist/cjs/features/metrics/constants.js +4 -2
  66. package/dist/cjs/features/metrics/instrument/index.js +12 -4
  67. package/dist/cjs/features/page_action/instrument/index.js +14 -10
  68. package/dist/cjs/features/page_view_event/aggregate/index.js +19 -39
  69. package/dist/cjs/features/page_view_event/aggregate/initialized-features.js +1 -1
  70. package/dist/cjs/features/page_view_event/instrument/index.js +4 -4
  71. package/dist/cjs/features/page_view_timing/aggregate/index.js +23 -39
  72. package/dist/cjs/features/page_view_timing/instrument/index.js +4 -4
  73. package/dist/cjs/features/session_replay/aggregate/index.js +35 -42
  74. package/dist/cjs/features/session_replay/constants.js +1 -5
  75. package/dist/cjs/features/session_replay/instrument/index.js +5 -9
  76. package/dist/cjs/features/session_replay/shared/recorder-events.js +25 -20
  77. package/dist/cjs/features/session_replay/shared/recorder.js +17 -13
  78. package/dist/cjs/features/session_replay/shared/stylesheet-evaluator.js +2 -2
  79. package/dist/cjs/features/session_replay/shared/utils.js +5 -4
  80. package/dist/cjs/features/session_trace/aggregate/index.js +25 -42
  81. package/dist/cjs/features/session_trace/aggregate/trace/storage.js +5 -3
  82. package/dist/cjs/features/session_trace/instrument/index.js +8 -7
  83. package/dist/cjs/features/soft_navigations/aggregate/ajax-node.js +1 -1
  84. package/dist/cjs/features/soft_navigations/aggregate/index.js +22 -30
  85. package/dist/cjs/features/soft_navigations/aggregate/initial-page-load-interaction.js +2 -2
  86. package/dist/cjs/features/soft_navigations/aggregate/interaction.js +4 -5
  87. package/dist/cjs/features/soft_navigations/instrument/index.js +14 -13
  88. package/dist/cjs/features/spa/aggregate/index.js +17 -28
  89. package/dist/cjs/features/spa/aggregate/interaction.js +7 -6
  90. package/dist/cjs/features/spa/aggregate/serializer.js +4 -5
  91. package/dist/cjs/features/spa/constants.js +2 -2
  92. package/dist/cjs/features/spa/instrument/index.js +20 -19
  93. package/dist/cjs/features/utils/agent-session.js +6 -4
  94. package/dist/cjs/features/utils/aggregate-base.js +17 -10
  95. package/dist/cjs/features/utils/event-buffer.js +132 -0
  96. package/dist/cjs/features/utils/feature-gates.js +2 -2
  97. package/dist/cjs/features/utils/instrument-base.js +7 -8
  98. package/dist/cjs/features/utils/lazy-feature-loader.js +12 -12
  99. package/dist/cjs/features/utils/nr1-debugger.js +1 -3
  100. package/dist/cjs/index.js +21 -0
  101. package/dist/cjs/loaders/agent-base.js +4 -12
  102. package/dist/cjs/loaders/agent.js +7 -2
  103. package/dist/cjs/loaders/api/api.js +23 -35
  104. package/dist/cjs/loaders/api/apiAsync.js +10 -13
  105. package/dist/cjs/loaders/browser-agent.js +4 -3
  106. package/dist/cjs/loaders/configure/configure.js +16 -15
  107. package/dist/cjs/loaders/features/enabled-features.js +2 -2
  108. package/dist/cjs/loaders/features/features.js +8 -4
  109. package/dist/cjs/loaders/micro-agent.js +16 -15
  110. package/dist/esm/cdn/experimental.js +2 -5
  111. package/dist/esm/cdn/pro.js +2 -2
  112. package/dist/esm/cdn/spa.js +2 -2
  113. package/dist/esm/common/aggregate/aggregator.js +2 -3
  114. package/dist/esm/common/config/{state/configurable.js → configurable.js} +1 -1
  115. package/dist/esm/common/config/{state/info.js → info.js} +1 -1
  116. package/dist/esm/common/config/{state/init.js → init.js} +11 -8
  117. package/dist/esm/common/config/{state/loader-config.js → loader-config.js} +1 -1
  118. package/dist/esm/common/config/{state/runtime.js → runtime.js} +17 -5
  119. package/dist/esm/common/constants/agent-constants.js +2 -0
  120. package/dist/esm/common/constants/env.cdn.js +1 -1
  121. package/dist/esm/common/constants/env.npm.js +1 -1
  122. package/dist/esm/common/constants/runtime.js +0 -2
  123. package/dist/esm/common/context/shared-context.js +1 -2
  124. package/dist/esm/common/dispatch/global-event.js +1 -2
  125. package/dist/esm/common/drain/drain.js +12 -18
  126. package/dist/esm/common/event-emitter/contextual-ee.js +2 -3
  127. package/dist/esm/common/event-listener/event-listener-opts.js +2 -6
  128. package/dist/esm/common/harvest/harvest-scheduler.js +1 -2
  129. package/dist/esm/common/harvest/harvest.js +24 -51
  130. package/dist/esm/common/serialize/bel-serializer.js +6 -11
  131. package/dist/esm/common/session/session-entity.js +10 -13
  132. package/dist/esm/common/timing/nav-timing.js +1 -3
  133. package/dist/esm/common/timing/time-keeper.js +15 -5
  134. package/dist/esm/common/url/encode.js +3 -7
  135. package/dist/esm/common/util/console.js +2 -0
  136. package/dist/esm/common/util/invoke.js +6 -16
  137. package/dist/esm/common/util/obfuscate.js +96 -49
  138. package/dist/esm/common/util/submit-data.js +17 -21
  139. package/dist/esm/common/util/text.js +3 -0
  140. package/dist/esm/common/util/traverse.js +1 -3
  141. package/dist/esm/common/vitals/cumulative-layout-shift.js +5 -6
  142. package/dist/esm/common/vitals/first-contentful-paint.js +4 -5
  143. package/dist/esm/common/vitals/first-input-delay.js +4 -5
  144. package/dist/esm/common/vitals/interaction-to-next-paint.js +5 -6
  145. package/dist/esm/common/vitals/largest-contentful-paint.js +4 -5
  146. package/dist/esm/common/vitals/time-to-first-byte.js +4 -5
  147. package/dist/esm/common/vitals/vital-metric.js +5 -7
  148. package/dist/esm/common/window/nreum.js +2 -1
  149. package/dist/esm/common/window/page-visibility.js +1 -4
  150. package/dist/esm/common/wrap/wrap-events.js +1 -4
  151. package/dist/esm/common/wrap/wrap-promise.js +1 -4
  152. package/dist/esm/common/wrap/wrap-websocket.js +67 -0
  153. package/dist/esm/features/ajax/aggregate/chunk.js +3 -2
  154. package/dist/esm/features/ajax/aggregate/gql.js +4 -5
  155. package/dist/esm/features/ajax/aggregate/index.js +16 -19
  156. package/dist/esm/features/ajax/constants.js +1 -2
  157. package/dist/esm/features/ajax/instrument/distributed-tracing.js +2 -1
  158. package/dist/esm/features/ajax/instrument/index.js +10 -8
  159. package/dist/esm/features/generic_events/aggregate/index.js +120 -0
  160. package/dist/esm/features/generic_events/constants.js +4 -0
  161. package/dist/esm/features/generic_events/index.js +1 -0
  162. package/dist/esm/features/generic_events/instrument/index.js +20 -0
  163. package/dist/esm/features/jserrors/aggregate/index.js +20 -39
  164. package/dist/esm/features/jserrors/instrument/index.js +3 -3
  165. package/dist/esm/features/logging/aggregate/index.js +31 -34
  166. package/dist/esm/features/logging/constants.js +1 -2
  167. package/dist/esm/features/logging/instrument/index.js +4 -5
  168. package/dist/esm/features/logging/shared/log.js +1 -3
  169. package/dist/esm/features/logging/shared/utils.js +2 -4
  170. package/dist/esm/features/metrics/aggregate/index.js +28 -11
  171. package/dist/esm/features/metrics/aggregate/websocket-detection.js +29 -0
  172. package/dist/esm/features/metrics/constants.js +3 -1
  173. package/dist/esm/features/metrics/instrument/index.js +12 -4
  174. package/dist/esm/features/page_action/instrument/index.js +14 -9
  175. package/dist/esm/features/page_view_event/aggregate/index.js +17 -37
  176. package/dist/esm/features/page_view_event/aggregate/initialized-features.js +1 -1
  177. package/dist/esm/features/page_view_event/instrument/index.js +3 -3
  178. package/dist/esm/features/page_view_timing/aggregate/index.js +20 -36
  179. package/dist/esm/features/page_view_timing/instrument/index.js +3 -3
  180. package/dist/esm/features/session_replay/aggregate/index.js +25 -32
  181. package/dist/esm/features/session_replay/constants.js +0 -4
  182. package/dist/esm/features/session_replay/index.js +1 -7
  183. package/dist/esm/features/session_replay/instrument/index.js +5 -8
  184. package/dist/esm/features/session_replay/shared/recorder-events.js +25 -20
  185. package/dist/esm/features/session_replay/shared/recorder.js +14 -10
  186. package/dist/esm/features/session_replay/shared/stylesheet-evaluator.js +2 -2
  187. package/dist/esm/features/session_replay/shared/utils.js +3 -2
  188. package/dist/esm/features/session_trace/aggregate/index.js +20 -37
  189. package/dist/esm/features/session_trace/aggregate/trace/storage.js +5 -3
  190. package/dist/esm/features/session_trace/instrument/index.js +5 -4
  191. package/dist/esm/features/soft_navigations/aggregate/ajax-node.js +1 -1
  192. package/dist/esm/features/soft_navigations/aggregate/index.js +21 -29
  193. package/dist/esm/features/soft_navigations/aggregate/initial-page-load-interaction.js +1 -1
  194. package/dist/esm/features/soft_navigations/aggregate/interaction.js +2 -3
  195. package/dist/esm/features/soft_navigations/instrument/index.js +11 -10
  196. package/dist/esm/features/spa/aggregate/index.js +11 -22
  197. package/dist/esm/features/spa/aggregate/interaction.js +6 -5
  198. package/dist/esm/features/spa/aggregate/serializer.js +2 -3
  199. package/dist/esm/features/spa/constants.js +2 -2
  200. package/dist/esm/features/spa/instrument/index.js +12 -11
  201. package/dist/esm/features/utils/agent-session.js +3 -1
  202. package/dist/esm/features/utils/aggregate-base.js +16 -9
  203. package/dist/esm/features/utils/event-buffer.js +126 -0
  204. package/dist/esm/features/utils/feature-gates.js +1 -1
  205. package/dist/esm/features/utils/instrument-base.js +6 -7
  206. package/dist/esm/features/utils/lazy-feature-loader.js +12 -12
  207. package/dist/esm/features/utils/nr1-debugger.js +1 -3
  208. package/dist/esm/index.js +3 -0
  209. package/dist/esm/loaders/agent-base.js +4 -12
  210. package/dist/esm/loaders/agent.js +7 -2
  211. package/dist/esm/loaders/api/api.js +18 -30
  212. package/dist/esm/loaders/api/apiAsync.js +3 -6
  213. package/dist/esm/loaders/browser-agent.js +3 -2
  214. package/dist/esm/loaders/configure/configure.js +9 -8
  215. package/dist/esm/loaders/features/enabled-features.js +1 -1
  216. package/dist/esm/loaders/features/features.js +8 -4
  217. package/dist/esm/loaders/micro-agent.js +11 -10
  218. package/dist/types/common/aggregate/aggregator.d.ts.map +1 -1
  219. package/dist/types/common/config/configurable.d.ts.map +1 -0
  220. package/dist/types/common/config/info.d.ts.map +1 -0
  221. package/dist/types/common/config/init.d.ts.map +1 -0
  222. package/dist/types/common/config/loader-config.d.ts.map +1 -0
  223. package/dist/types/common/config/runtime.d.ts.map +1 -0
  224. package/dist/types/common/constants/agent-constants.d.ts +3 -0
  225. package/dist/types/common/constants/agent-constants.d.ts.map +1 -0
  226. package/dist/types/common/constants/runtime.d.ts +0 -1
  227. package/dist/types/common/constants/runtime.d.ts.map +1 -1
  228. package/dist/types/common/harvest/harvest.d.ts +1 -7
  229. package/dist/types/common/harvest/harvest.d.ts.map +1 -1
  230. package/dist/types/common/serialize/bel-serializer.d.ts.map +1 -1
  231. package/dist/types/common/timing/time-keeper.d.ts +9 -2
  232. package/dist/types/common/timing/time-keeper.d.ts.map +1 -1
  233. package/dist/types/common/url/encode.d.ts.map +1 -1
  234. package/dist/types/common/util/console.d.ts.map +1 -1
  235. package/dist/types/common/util/obfuscate.d.ts +78 -6
  236. package/dist/types/common/util/obfuscate.d.ts.map +1 -1
  237. package/dist/types/common/util/submit-data.d.ts.map +1 -1
  238. package/dist/types/common/util/text.d.ts +2 -0
  239. package/dist/types/common/util/text.d.ts.map +1 -0
  240. package/dist/types/common/window/nreum.d.ts.map +1 -1
  241. package/dist/types/common/wrap/wrap-websocket.d.ts +4 -0
  242. package/dist/types/common/wrap/wrap-websocket.d.ts.map +1 -0
  243. package/dist/types/features/ajax/aggregate/chunk.d.ts.map +1 -1
  244. package/dist/types/features/ajax/aggregate/index.d.ts +2 -3
  245. package/dist/types/features/ajax/aggregate/index.d.ts.map +1 -1
  246. package/dist/types/features/ajax/constants.d.ts +0 -1
  247. package/dist/types/features/ajax/constants.d.ts.map +1 -1
  248. package/dist/types/features/ajax/instrument/distributed-tracing.d.ts.map +1 -1
  249. package/dist/types/features/ajax/instrument/index.d.ts +1 -0
  250. package/dist/types/features/ajax/instrument/index.d.ts.map +1 -1
  251. package/dist/types/features/{page_action → generic_events}/aggregate/index.d.ts +10 -10
  252. package/dist/types/features/generic_events/aggregate/index.d.ts.map +1 -0
  253. package/dist/types/features/generic_events/constants.d.ts +4 -0
  254. package/dist/types/features/generic_events/constants.d.ts.map +1 -0
  255. package/dist/types/features/generic_events/index.d.ts +2 -0
  256. package/dist/types/features/generic_events/index.d.ts.map +1 -0
  257. package/dist/types/features/generic_events/instrument/index.d.ts +7 -0
  258. package/dist/types/features/generic_events/instrument/index.d.ts.map +1 -0
  259. package/dist/types/features/jserrors/aggregate/index.d.ts +2 -2
  260. package/dist/types/features/jserrors/aggregate/index.d.ts.map +1 -1
  261. package/dist/types/features/jserrors/instrument/index.d.ts +1 -0
  262. package/dist/types/features/jserrors/instrument/index.d.ts.map +1 -1
  263. package/dist/types/features/logging/aggregate/index.d.ts +4 -7
  264. package/dist/types/features/logging/aggregate/index.d.ts.map +1 -1
  265. package/dist/types/features/logging/constants.d.ts +0 -1
  266. package/dist/types/features/logging/constants.d.ts.map +1 -1
  267. package/dist/types/features/logging/instrument/index.d.ts +1 -0
  268. package/dist/types/features/logging/instrument/index.d.ts.map +1 -1
  269. package/dist/types/features/metrics/aggregate/index.d.ts.map +1 -1
  270. package/dist/types/features/metrics/aggregate/websocket-detection.d.ts +12 -0
  271. package/dist/types/features/metrics/aggregate/websocket-detection.d.ts.map +1 -0
  272. package/dist/types/features/metrics/constants.d.ts +1 -0
  273. package/dist/types/features/metrics/constants.d.ts.map +1 -1
  274. package/dist/types/features/metrics/instrument/index.d.ts +1 -0
  275. package/dist/types/features/metrics/instrument/index.d.ts.map +1 -1
  276. package/dist/types/features/page_action/instrument/index.d.ts +9 -4
  277. package/dist/types/features/page_action/instrument/index.d.ts.map +1 -1
  278. package/dist/types/features/page_view_event/aggregate/index.d.ts.map +1 -1
  279. package/dist/types/features/page_view_event/instrument/index.d.ts +1 -0
  280. package/dist/types/features/page_view_event/instrument/index.d.ts.map +1 -1
  281. package/dist/types/features/page_view_timing/aggregate/index.d.ts +2 -2
  282. package/dist/types/features/page_view_timing/aggregate/index.d.ts.map +1 -1
  283. package/dist/types/features/page_view_timing/instrument/index.d.ts +1 -0
  284. package/dist/types/features/page_view_timing/instrument/index.d.ts.map +1 -1
  285. package/dist/types/features/session_replay/aggregate/index.d.ts.map +1 -1
  286. package/dist/types/features/session_replay/constants.d.ts +0 -4
  287. package/dist/types/features/session_replay/constants.d.ts.map +1 -1
  288. package/dist/types/features/session_replay/instrument/index.d.ts +1 -0
  289. package/dist/types/features/session_replay/instrument/index.d.ts.map +1 -1
  290. package/dist/types/features/session_replay/shared/recorder-events.d.ts +6 -6
  291. package/dist/types/features/session_replay/shared/recorder-events.d.ts.map +1 -1
  292. package/dist/types/features/session_replay/shared/recorder.d.ts +2 -2
  293. package/dist/types/features/session_replay/shared/recorder.d.ts.map +1 -1
  294. package/dist/types/features/session_replay/shared/utils.d.ts.map +1 -1
  295. package/dist/types/features/session_trace/aggregate/index.d.ts +2 -2
  296. package/dist/types/features/session_trace/aggregate/index.d.ts.map +1 -1
  297. package/dist/types/features/session_trace/aggregate/trace/storage.d.ts +1 -1
  298. package/dist/types/features/session_trace/aggregate/trace/storage.d.ts.map +1 -1
  299. package/dist/types/features/session_trace/instrument/index.d.ts +1 -0
  300. package/dist/types/features/session_trace/instrument/index.d.ts.map +1 -1
  301. package/dist/types/features/soft_navigations/aggregate/index.d.ts +3 -3
  302. package/dist/types/features/soft_navigations/aggregate/index.d.ts.map +1 -1
  303. package/dist/types/features/soft_navigations/instrument/index.d.ts +1 -0
  304. package/dist/types/features/soft_navigations/instrument/index.d.ts.map +1 -1
  305. package/dist/types/features/spa/aggregate/index.d.ts +2 -2
  306. package/dist/types/features/spa/aggregate/index.d.ts.map +1 -1
  307. package/dist/types/features/spa/aggregate/interaction.d.ts.map +1 -1
  308. package/dist/types/features/spa/aggregate/serializer.d.ts.map +1 -1
  309. package/dist/types/features/spa/constants.d.ts.map +1 -1
  310. package/dist/types/features/spa/instrument/index.d.ts +1 -0
  311. package/dist/types/features/spa/instrument/index.d.ts.map +1 -1
  312. package/dist/types/features/utils/agent-session.d.ts.map +1 -1
  313. package/dist/types/features/utils/aggregate-base.d.ts +1 -0
  314. package/dist/types/features/utils/aggregate-base.d.ts.map +1 -1
  315. package/dist/types/features/utils/event-buffer.d.ts +72 -0
  316. package/dist/types/features/utils/event-buffer.d.ts.map +1 -0
  317. package/dist/types/features/utils/instrument-base.d.ts +1 -0
  318. package/dist/types/features/utils/instrument-base.d.ts.map +1 -1
  319. package/dist/types/index.d.ts +3 -0
  320. package/dist/types/loaders/agent-base.d.ts +1 -2
  321. package/dist/types/loaders/agent-base.d.ts.map +1 -1
  322. package/dist/types/loaders/agent.d.ts.map +1 -1
  323. package/dist/types/loaders/api/api.d.ts.map +1 -1
  324. package/dist/types/loaders/browser-agent.d.ts.map +1 -1
  325. package/dist/types/loaders/configure/configure.d.ts.map +1 -1
  326. package/dist/types/loaders/features/features.d.ts +1 -0
  327. package/dist/types/loaders/features/features.d.ts.map +1 -1
  328. package/dist/types/loaders/micro-agent.d.ts.map +1 -1
  329. package/package.json +67 -52
  330. package/src/cdn/experimental.js +2 -4
  331. package/src/cdn/pro.js +2 -2
  332. package/src/cdn/spa.js +2 -2
  333. package/src/common/aggregate/aggregator.js +2 -3
  334. package/src/common/config/__mocks__/info.js +3 -0
  335. package/src/common/config/__mocks__/init.js +3 -0
  336. package/src/common/config/__mocks__/loader-config.js +2 -0
  337. package/src/common/config/__mocks__/runtime.js +2 -0
  338. package/src/common/config/{state/configurable.js → configurable.js} +1 -1
  339. package/src/common/config/{state/info.js → info.js} +1 -1
  340. package/src/common/config/{state/init.js → init.js} +7 -6
  341. package/src/common/config/{state/loader-config.js → loader-config.js} +1 -1
  342. package/src/common/config/{state/runtime.js → runtime.js} +19 -5
  343. package/src/common/constants/agent-constants.js +2 -0
  344. package/src/common/constants/runtime.js +0 -2
  345. package/src/common/drain/drain.js +8 -6
  346. package/src/common/event-emitter/contextual-ee.js +1 -1
  347. package/src/common/harvest/harvest.js +10 -24
  348. package/src/common/serialize/bel-serializer.js +6 -9
  349. package/src/common/session/session-entity.js +4 -4
  350. package/src/common/timing/__mocks__/time-keeper.js +6 -2
  351. package/src/common/timing/time-keeper.js +15 -5
  352. package/src/common/url/encode.js +2 -3
  353. package/src/common/util/__mocks__/console.js +1 -0
  354. package/src/common/util/__mocks__/obfuscate.js +5 -8
  355. package/src/common/util/console.js +2 -0
  356. package/src/common/util/obfuscate.js +94 -50
  357. package/src/common/util/submit-data.js +0 -1
  358. package/src/common/util/text.js +6 -0
  359. package/src/common/window/__mocks__/nreum.js +1 -1
  360. package/src/common/window/nreum.js +2 -1
  361. package/src/common/wrap/wrap-websocket.js +73 -0
  362. package/src/features/ajax/aggregate/chunk.js +3 -2
  363. package/src/features/ajax/aggregate/index.js +20 -19
  364. package/src/features/ajax/constants.js +0 -2
  365. package/src/features/ajax/instrument/distributed-tracing.js +2 -1
  366. package/src/features/ajax/instrument/index.js +9 -5
  367. package/src/features/generic_events/aggregate/index.js +139 -0
  368. package/src/features/generic_events/constants.js +5 -0
  369. package/src/features/generic_events/index.js +1 -0
  370. package/src/features/generic_events/instrument/index.js +24 -0
  371. package/src/features/jserrors/aggregate/index.js +18 -9
  372. package/src/features/jserrors/instrument/index.js +2 -0
  373. package/src/features/logging/aggregate/index.js +39 -31
  374. package/src/features/logging/constants.js +0 -2
  375. package/src/features/logging/instrument/index.js +2 -0
  376. package/src/features/logging/shared/utils.js +1 -1
  377. package/src/features/metrics/aggregate/index.js +24 -9
  378. package/src/features/metrics/aggregate/websocket-detection.js +31 -0
  379. package/src/features/metrics/constants.js +3 -0
  380. package/src/features/metrics/instrument/index.js +13 -1
  381. package/src/features/page_action/instrument/index.js +11 -6
  382. package/src/features/page_view_event/aggregate/index.js +8 -23
  383. package/src/features/page_view_event/aggregate/initialized-features.js +1 -1
  384. package/src/features/page_view_event/instrument/index.js +2 -0
  385. package/src/features/page_view_timing/aggregate/index.js +15 -18
  386. package/src/features/page_view_timing/instrument/index.js +2 -0
  387. package/src/features/session_replay/aggregate/index.js +13 -9
  388. package/src/features/session_replay/constants.js +0 -4
  389. package/src/features/session_replay/index.js +1 -7
  390. package/src/features/session_replay/instrument/index.js +3 -4
  391. package/src/features/session_replay/shared/recorder-events.js +27 -20
  392. package/src/features/session_replay/shared/recorder.js +13 -6
  393. package/src/features/session_replay/shared/stylesheet-evaluator.js +2 -2
  394. package/src/features/session_replay/shared/utils.js +3 -2
  395. package/src/features/session_trace/aggregate/index.js +16 -7
  396. package/src/features/session_trace/aggregate/trace/storage.js +6 -1
  397. package/src/features/session_trace/instrument/index.js +4 -1
  398. package/src/features/soft_navigations/aggregate/ajax-node.js +1 -1
  399. package/src/features/soft_navigations/aggregate/index.js +13 -15
  400. package/src/features/soft_navigations/aggregate/initial-page-load-interaction.js +1 -1
  401. package/src/features/soft_navigations/aggregate/interaction.js +1 -1
  402. package/src/features/soft_navigations/instrument/index.js +9 -5
  403. package/src/features/spa/aggregate/index.js +12 -20
  404. package/src/features/spa/aggregate/interaction.js +6 -5
  405. package/src/features/spa/aggregate/serializer.js +2 -3
  406. package/src/features/spa/constants.js +2 -2
  407. package/src/features/spa/instrument/index.js +9 -3
  408. package/src/features/utils/agent-session.js +3 -1
  409. package/src/features/utils/aggregate-base.js +13 -3
  410. package/src/features/utils/event-buffer.js +126 -0
  411. package/src/features/utils/feature-gates.js +1 -1
  412. package/src/features/utils/instrument-base.js +2 -1
  413. package/src/features/utils/lazy-feature-loader.js +2 -2
  414. package/src/index.js +3 -0
  415. package/src/loaders/agent-base.js +2 -6
  416. package/src/loaders/agent.js +7 -2
  417. package/src/loaders/api/api.js +3 -2
  418. package/src/loaders/api/apiAsync.js +2 -2
  419. package/src/loaders/browser-agent.js +5 -3
  420. package/src/loaders/configure/configure.js +9 -2
  421. package/src/loaders/features/enabled-features.js +1 -1
  422. package/src/loaders/features/features.js +8 -4
  423. package/src/loaders/micro-agent.js +5 -2
  424. package/dist/cjs/cdn/polyfills/lite.js +0 -16
  425. package/dist/cjs/cdn/polyfills/pro.js +0 -21
  426. package/dist/cjs/cdn/polyfills/spa.js +0 -22
  427. package/dist/cjs/cdn/polyfills.js +0 -24
  428. package/dist/cjs/common/config/config.js +0 -76
  429. package/dist/cjs/common/config/state/originals.js +0 -8
  430. package/dist/cjs/common/util/map-own.js +0 -31
  431. package/dist/cjs/common/wrap/index.js +0 -61
  432. package/dist/cjs/features/page_action/aggregate/index.js +0 -121
  433. package/dist/esm/cdn/polyfills/lite.js +0 -14
  434. package/dist/esm/cdn/polyfills/pro.js +0 -19
  435. package/dist/esm/cdn/polyfills/spa.js +0 -20
  436. package/dist/esm/cdn/polyfills.js +0 -27
  437. package/dist/esm/common/config/config.js +0 -11
  438. package/dist/esm/common/config/state/originals.js +0 -2
  439. package/dist/esm/common/util/map-own.js +0 -24
  440. package/dist/esm/common/wrap/index.js +0 -13
  441. package/dist/esm/features/page_action/aggregate/index.js +0 -114
  442. package/dist/types/cdn/polyfills/lite.d.ts +0 -2
  443. package/dist/types/cdn/polyfills/lite.d.ts.map +0 -1
  444. package/dist/types/cdn/polyfills/pro.d.ts +0 -2
  445. package/dist/types/cdn/polyfills/pro.d.ts.map +0 -1
  446. package/dist/types/cdn/polyfills/spa.d.ts +0 -2
  447. package/dist/types/cdn/polyfills/spa.d.ts.map +0 -1
  448. package/dist/types/cdn/polyfills.d.ts +0 -2
  449. package/dist/types/cdn/polyfills.d.ts.map +0 -1
  450. package/dist/types/common/config/config.d.ts +0 -13
  451. package/dist/types/common/config/config.d.ts.map +0 -1
  452. package/dist/types/common/config/state/configurable.d.ts.map +0 -1
  453. package/dist/types/common/config/state/info.d.ts.map +0 -1
  454. package/dist/types/common/config/state/init.d.ts.map +0 -1
  455. package/dist/types/common/config/state/loader-config.d.ts.map +0 -1
  456. package/dist/types/common/config/state/originals.d.ts +0 -2
  457. package/dist/types/common/config/state/originals.d.ts.map +0 -1
  458. package/dist/types/common/config/state/runtime.d.ts.map +0 -1
  459. package/dist/types/common/util/map-own.d.ts +0 -3
  460. package/dist/types/common/util/map-own.d.ts.map +0 -1
  461. package/dist/types/common/wrap/index.d.ts +0 -10
  462. package/dist/types/common/wrap/index.d.ts.map +0 -1
  463. package/dist/types/features/page_action/aggregate/index.d.ts.map +0 -1
  464. package/src/cdn/polyfills/lite.js +0 -20
  465. package/src/cdn/polyfills/pro.js +0 -30
  466. package/src/cdn/polyfills/spa.js +0 -32
  467. package/src/cdn/polyfills.js +0 -27
  468. package/src/common/config/__mocks__/config.js +0 -11
  469. package/src/common/config/config.js +0 -12
  470. package/src/common/config/state/originals.js +0 -3
  471. package/src/common/util/map-own.js +0 -22
  472. package/src/common/wrap/index.js +0 -16
  473. package/src/features/page_action/aggregate/index.js +0 -114
  474. /package/dist/types/common/config/{state/configurable.d.ts → configurable.d.ts} +0 -0
  475. /package/dist/types/common/config/{state/info.d.ts → info.d.ts} +0 -0
  476. /package/dist/types/common/config/{state/init.d.ts → init.d.ts} +0 -0
  477. /package/dist/types/common/config/{state/loader-config.d.ts → loader-config.d.ts} +0 -0
  478. /package/dist/types/common/config/{state/runtime.d.ts → runtime.d.ts} +0 -0
@@ -3,17 +3,19 @@
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.SoftNav = exports.Instrument = void 0;
7
+ var _nreum = require("../../../common/window/nreum");
8
8
  var _runtime = require("../../../common/constants/runtime");
9
9
  var _handle = require("../../../common/event-emitter/handle");
10
10
  var _eventListenerOpts = require("../../../common/event-listener/event-listener-opts");
11
11
  var _invoke = require("../../../common/util/invoke");
12
- var _wrap = require("../../../common/wrap");
12
+ var _wrapEvents = require("../../../common/wrap/wrap-events");
13
+ var _wrapHistory = require("../../../common/wrap/wrap-history");
13
14
  var _instrumentBase = require("../../utils/instrument-base");
14
15
  var _constants = require("../constants");
15
16
  var _now = require("../../../common/timing/now");
16
- /** The minimal time after a UI event for which no further events will be processed - i.e. a throttling rate to reduce spam.
17
+ /**
18
+ * The minimal time after a UI event for which no further events will be processed - i.e. a throttling rate to reduce spam.
17
19
  * This also give some time for the new interaction to complete without being discarded by a subsequent UI event and wrongly attributed.
18
20
  * This value is still subject to change and critique, as it is derived from beyond worst case time to next frame of a page.
19
21
  */
@@ -21,13 +23,12 @@ const UI_WAIT_INTERVAL = 1 / 10 * 1000; // assume 10 fps
21
23
 
22
24
  class Instrument extends _instrumentBase.InstrumentBase {
23
25
  static featureName = _constants.FEATURE_NAME;
24
- constructor(agentIdentifier, aggregator) {
25
- let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
26
+ constructor(agentIdentifier, aggregator, auto = true) {
26
27
  super(agentIdentifier, aggregator, _constants.FEATURE_NAME, auto);
27
- if (!_runtime.isBrowserScope || !_config.originals.MO) return; // soft navigations is not supported outside web env or browsers without the mutation observer API
28
+ if (!_runtime.isBrowserScope || !(0, _nreum.gosNREUMOriginals)().o.MO) return; // soft navigations is not supported outside web env or browsers without the mutation observer API
28
29
 
29
- const historyEE = (0, _wrap.wrapHistory)(this.ee);
30
- const eventsEE = (0, _wrap.wrapEvents)(this.ee);
30
+ const historyEE = (0, _wrapHistory.wrapHistory)(this.ee);
31
+ const eventsEE = (0, _wrapEvents.wrapEvents)(this.ee);
31
32
  const trackURLChange = () => (0, _handle.handle)('newURL', [(0, _now.now)(), '' + window.location], undefined, this.featureName, this.ee);
32
33
  historyEE.on('pushState-end', trackURLChange);
33
34
  historyEE.on('replaceState-end', trackURLChange);
@@ -37,7 +38,7 @@ class Instrument extends _instrumentBase.InstrumentBase {
37
38
  const trackURLChangeEvent = evt => (0, _handle.handle)('newURL', [evt.timeStamp, '' + window.location], undefined, this.featureName, this.ee);
38
39
  (0, _eventListenerOpts.windowAddEventListener)('popstate', trackURLChangeEvent, true, this.removeOnAbort?.signal);
39
40
  let oncePerFrame = false; // attempt to reduce dom noice since the observer runs very frequently with below options
40
- const domObserver = new _config.originals.MO((domChanges, observer) => {
41
+ const domObserver = new ((0, _nreum.gosNREUMOriginals)().o.MO)((domChanges, observer) => {
41
42
  if (oncePerFrame) return;
42
43
  oncePerFrame = true;
43
44
  requestAnimationFrame(() => {
@@ -57,8 +58,7 @@ class Instrument extends _instrumentBase.InstrumentBase {
57
58
  }, UI_WAIT_INTERVAL, {
58
59
  leading: true
59
60
  });
60
- eventsEE.on('fn-start', _ref => {
61
- let [evt] = _ref;
61
+ eventsEE.on('fn-start', ([evt]) => {
62
62
  // set up a new user ixn before the callback for the triggering event executes
63
63
  if (_constants.INTERACTION_TRIGGERS.includes(evt?.type)) {
64
64
  processUserInteraction(evt);
@@ -76,4 +76,5 @@ class Instrument extends _instrumentBase.InstrumentBase {
76
76
  }
77
77
  }
78
78
  }
79
- exports.Instrument = Instrument;
79
+ exports.Instrument = Instrument;
80
+ const SoftNav = exports.SoftNav = Instrument;
@@ -7,11 +7,11 @@ exports.Aggregate = void 0;
7
7
  var _registerHandler = require("../../../common/event-emitter/register-handler");
8
8
  var _parseUrl = require("../../../common/url/parse-url");
9
9
  var _denyList = require("../../../common/deny-list/deny-list");
10
- var _mapOwn = require("../../../common/util/map-own");
11
10
  var _navTiming = require("../../../common/timing/nav-timing");
12
11
  var _uniqueId = require("../../../common/ids/unique-id");
13
12
  var _interaction = require("./interaction");
14
- var _config = require("../../../common/config/config");
13
+ var _init = require("../../../common/config/init");
14
+ var _runtime = require("../../../common/config/runtime");
15
15
  var _eventListenerOpts = require("../../../common/event-listener/event-listener-opts");
16
16
  var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
17
17
  var _serializer = require("./serializer");
@@ -22,11 +22,12 @@ var _aggregateBase = require("../../utils/aggregate-base");
22
22
  var _firstContentfulPaint = require("../../../common/vitals/first-contentful-paint");
23
23
  var _firstPaint = require("../../../common/vitals/first-paint");
24
24
  var _bundleId = require("../../../common/ids/bundle-id");
25
- var _runtime = require("../../../common/constants/runtime");
25
+ var _runtime2 = require("../../../common/constants/runtime");
26
26
  var _handle = require("../../../common/event-emitter/handle");
27
27
  var _constants2 = require("../../metrics/constants");
28
28
  var _drain = require("../../../common/drain/drain");
29
29
  var _console = require("../../../common/util/console");
30
+ var _eventBuffer = require("../../utils/event-buffer");
30
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); }
31
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; }
32
33
  /*
@@ -57,7 +58,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
57
58
  static featureName = FEATURE_NAME;
58
59
  constructor(agentIdentifier, aggregator) {
59
60
  super(agentIdentifier, aggregator, FEATURE_NAME);
60
- const agentRuntime = (0, _config.getRuntime)(agentIdentifier);
61
+ const agentRuntime = (0, _runtime.getRuntime)(agentIdentifier);
61
62
  this.state = {
62
63
  initialPageURL: agentRuntime.origin,
63
64
  lastSeenUrl: agentRuntime.origin,
@@ -71,11 +72,10 @@ class Aggregate extends _aggregateBase.AggregateBase {
71
72
  pageLoaded: false,
72
73
  childTime: 0,
73
74
  depth: 0,
74
- harvestTimeSeconds: (0, _config.getConfigurationValue)(agentIdentifier, 'spa.harvestTimeSeconds') || 10,
75
- interactionsToHarvest: [],
76
- interactionsSent: [],
75
+ harvestTimeSeconds: (0, _init.getConfigurationValue)(agentIdentifier, 'spa.harvestTimeSeconds') || 10,
76
+ interactionsToHarvest: new _eventBuffer.EventBuffer(),
77
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
78
- 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
79
79
  };
80
80
  let scheduler;
81
81
  this.serializer = new _serializer.Serializer(this);
@@ -126,8 +126,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
126
126
  // | click ending: | 65 | 50 | | | |
127
127
  // click fn-end | 70 | 0 | 0 | 70 | 20 |
128
128
 
129
- this.waitForFlags(['spa']).then(_ref => {
130
- let [spaFlag] = _ref;
129
+ this.waitForFlags(['spa']).then(([spaFlag]) => {
131
130
  if (spaFlag) {
132
131
  scheduler = new _harvestScheduler.HarvestScheduler('events', {
133
132
  onFinished: onHarvestFinished,
@@ -194,7 +193,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
194
193
  var ev = args[0];
195
194
  var evName = ev.type;
196
195
  var eventNode = ev["__nrNode:".concat(_bundleId.bundleId)];
197
- if (!state.pageLoaded && (evName === 'load' && eventSource === window || _runtime.loadedAsDeferredBrowserScript)) {
196
+ if (!state.pageLoaded && (evName === 'load' && eventSource === window || _runtime2.loadedAsDeferredBrowserScript)) {
198
197
  state.pageLoaded = true;
199
198
  // set to null so prevNode is set correctly
200
199
  this.prevNode = state.currentNode = null;
@@ -622,21 +621,16 @@ class Aggregate extends _aggregateBase.AggregateBase {
622
621
 
623
622
  // make sure that newrelic[INTERACTION]() works in end handler
624
623
  state.currentNode = root;
625
- (0, _mapOwn.mapOwn)(interaction.handlers, function (i, cb) {
624
+ Object.values(interaction.handlers || {}).forEach(function (cb) {
626
625
  cb(attrs.store);
627
626
  });
628
627
  setCurrentNode(null);
629
628
  }
630
629
  const classThis = this;
631
630
  function onHarvestStarted(options) {
632
- if (state.interactionsToHarvest.length === 0 || classThis.blocked) return {};
633
- var payload = serializer.serializeMultiple(state.interactionsToHarvest, 0, _navTiming.navTimingValues);
634
- if (options.retry) {
635
- state.interactionsToHarvest.forEach(function (interaction) {
636
- state.interactionsSent.push(interaction);
637
- });
638
- }
639
- 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();
640
634
  return {
641
635
  body: {
642
636
  e: payload
@@ -644,12 +638,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
644
638
  };
645
639
  }
646
640
  function onHarvestFinished(result) {
647
- if (result.sent && result.retry && state.interactionsSent.length > 0) {
648
- state.interactionsSent.forEach(function (interaction) {
649
- state.interactionsToHarvest.unshift(interaction);
650
- });
651
- state.interactionsSent = [];
652
- }
641
+ if (result.sent && result.retry && state.interactionsToHarvest.held.hasData) state.interactionsToHarvest.unhold();else state.interactionsToHarvest.held.clear();
653
642
  }
654
643
  baseEE.on('spa-jserror', function (type, name, params, metrics) {
655
644
  if (!state.currentNode) return;
@@ -697,7 +686,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
697
686
  interaction.root.attrs.firstContentfulPaint = _firstContentfulPaint.firstContentfulPaint.current.value;
698
687
  }
699
688
  baseEE.emit('interactionDone', [interaction, true]);
700
- state.interactionsToHarvest.push(interaction);
689
+ state.interactionsToHarvest.add(interaction);
701
690
  let smCategory;
702
691
  if (interaction.root?.attrs?.trigger === 'initialPageLoad') smCategory = 'InitialPageLoad';else if (interaction.routeChange) smCategory = 'RouteChange';else smCategory = 'Custom';
703
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);
@@ -705,7 +694,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
705
694
  if (!scheduler) (0, _console.warn)(19);
706
695
  }
707
696
  function isEnabled() {
708
- var enabled = (0, _config.getConfigurationValue)(agentIdentifier, 'spa.enabled');
697
+ var enabled = (0, _init.getConfigurationValue)(agentIdentifier, 'spa.enabled');
709
698
  return enabled !== false;
710
699
  }
711
700
  }
@@ -4,8 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Interaction = Interaction;
7
- var _config = require("../../../common/config/config");
8
- var _mapOwn = require("../../../common/util/map-own");
7
+ var _info = require("../../../common/config/info");
8
+ var _runtime = require("../../../common/config/runtime");
9
+ var _nreum = require("../../../common/window/nreum");
9
10
  var _contextualEe = require("../../../common/event-emitter/contextual-ee");
10
11
  var _interactionNode = require("./interaction-node");
11
12
  /*
@@ -13,8 +14,8 @@ var _interactionNode = require("./interaction-node");
13
14
  * SPDX-License-Identifier: Apache-2.0
14
15
  */
15
16
 
16
- var originalSetTimeout = _config.originals.ST;
17
- var originalClearTimeout = _config.originals.CT;
17
+ var originalSetTimeout = (0, _nreum.gosNREUMOriginals)().o.ST;
18
+ var originalClearTimeout = (0, _nreum.gosNREUMOriginals)().o.CT;
18
19
  var lastId = {};
19
20
  function Interaction(eventName, timestamp, url, routeName, onFinished, agentIdentifier) {
20
21
  this.agentIdentifier = agentIdentifier;
@@ -33,7 +34,7 @@ function Interaction(eventName, timestamp, url, routeName, onFinished, agentIden
33
34
  var root = this.root = new _interactionNode.InteractionNode(this, null, 'interaction', timestamp);
34
35
  var attrs = root.attrs;
35
36
  attrs.trigger = eventName;
36
- attrs.initialPageURL = (0, _config.getRuntime)(agentIdentifier).origin;
37
+ attrs.initialPageURL = (0, _runtime.getRuntime)(agentIdentifier).origin;
37
38
  attrs.oldRoute = routeName;
38
39
  attrs.newURL = attrs.oldURL = url;
39
40
  attrs.custom = {};
@@ -88,7 +89,7 @@ InteractionPrototype.finish = function finishInteraction() {
88
89
  if (this.onFinished) {
89
90
  this.onFinished(this);
90
91
  }
91
- (0, _mapOwn.mapOwn)((0, _config.getInfo)(interaction.agentIdentifier).jsAttributes, function (attr, value) {
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;
@@ -5,10 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Serializer = void 0;
7
7
  var _cleanUrl = require("../../../common/url/clean-url");
8
- var _mapOwn = require("../../../common/util/map-own");
9
8
  var _belSerializer = require("../../../common/serialize/bel-serializer");
10
9
  var _sharedContext = require("../../../common/context/shared-context");
11
- var _config = require("../../../common/config/config");
10
+ var _info = require("../../../common/config/info");
12
11
  /*
13
12
  * Copyright 2020 New Relic Corporation. All rights reserved.
14
13
  * SPDX-License-Identifier: Apache-2.0
@@ -28,7 +27,7 @@ class Serializer extends _sharedContext.SharedContext {
28
27
  this.firstTimestamp = undefined;
29
28
  }
30
29
  serializeMultiple(interactions, offset, navTiming) {
31
- const info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
30
+ const info = (0, _info.getInfo)(this.sharedContext.agentIdentifier);
32
31
  var addString = (0, _belSerializer.getAddStringContext)(this.sharedContext.agentIdentifier);
33
32
  var serialized = 'bel.7';
34
33
  interactions.forEach(interaction => {
@@ -38,7 +37,7 @@ class Serializer extends _sharedContext.SharedContext {
38
37
  return serialized;
39
38
  }
40
39
  serializeSingle(root, offset, navTiming, isRouteChange) {
41
- const info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
40
+ const info = (0, _info.getInfo)(this.sharedContext.agentIdentifier);
42
41
  var addString = (0, _belSerializer.getAddStringContext)(this.sharedContext.agentIdentifier);
43
42
  var serialized = 'bel.7;' + this.serializeInteraction(root, offset, navTiming, isRouteChange, addString, info);
44
43
  this.firstTimestamp = undefined;
@@ -132,7 +131,7 @@ class Serializer extends _sharedContext.SharedContext {
132
131
  // get all navTiming values except navigationStart
133
132
  // (since its the same as interaction.start)
134
133
  // and limit to just the first 20 values we know about
135
- (0, _mapOwn.mapOwn)(navTiming.slice(1, 21), function (i, v) {
134
+ Object.values(navTiming.slice(1, 21) || {}).forEach(v => {
136
135
  if (v !== undefined) {
137
136
  navTimingNode += seperator + (0, _belSerializer.numeric)(v - prev);
138
137
  seperator = ',';
@@ -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
  /*
@@ -32,11 +38,8 @@ const {
32
38
  } = CONSTANTS;
33
39
  class Instrument extends _instrumentBase.InstrumentBase {
34
40
  static featureName = FEATURE_NAME;
35
- constructor(agentIdentifier, aggregator) {
36
- var _this;
37
- let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
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
  }
@@ -41,6 +42,8 @@ class AggregateBase extends _featureBase.FeatureBase {
41
42
  });
42
43
  return flagsPromise.catch(err => {
43
44
  this.ee.emit('internal-error', [err]);
45
+ this.blocked = true;
46
+ (0, _drain.deregisterDrain)(this.agentIdentifier, this.featureName);
44
47
  });
45
48
  }
46
49
  drain() {
@@ -54,7 +57,7 @@ class AggregateBase extends _featureBase.FeatureBase {
54
57
  */
55
58
  checkConfiguration() {
56
59
  // NOTE: This check has to happen at aggregator load time
57
- if (!(0, _config.isConfigured)(this.agentIdentifier)) {
60
+ if (!(0, _info.isValid)(this.agentIdentifier)) {
58
61
  const cdn = (0, _nreum.gosCDN)();
59
62
  let jsAttributes = {
60
63
  ...cdn.info?.jsAttributes
@@ -62,7 +65,7 @@ class AggregateBase extends _featureBase.FeatureBase {
62
65
  try {
63
66
  jsAttributes = {
64
67
  ...jsAttributes,
65
- ...(0, _config.getInfo)(this.agentIdentifier)?.jsAttributes
68
+ ...(0, _info.getInfo)(this.agentIdentifier)?.jsAttributes
66
69
  };
67
70
  } catch (err) {
68
71
  // do nothing
@@ -75,9 +78,13 @@ class AggregateBase extends _featureBase.FeatureBase {
75
78
  ...cdn.info,
76
79
  jsAttributes
77
80
  },
78
- runtime: (0, _config.getRuntime)(this.agentIdentifier)
81
+ runtime: (0, _runtime.getRuntime)(this.agentIdentifier)
79
82
  });
80
83
  }
84
+ const runtime = (0, _runtime.getRuntime)(this.agentIdentifier);
85
+ if (!runtime.obfuscator) {
86
+ runtime.obfuscator = new _obfuscate.Obfuscator(this.agentIdentifier);
87
+ }
81
88
  }
82
89
  }
83
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;