@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
package/CHANGELOG.md CHANGED
@@ -3,6 +3,38 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.265.0](https://github.com/newrelic/newrelic-browser-agent/compare/v1.264.0...v1.265.0) (2024-08-30)
7
+
8
+
9
+ ### Features
10
+
11
+ * add payload size evaluation to generic events feature ([#1152](https://github.com/newrelic/newrelic-browser-agent/issues/1152)) ([65d9d11](https://github.com/newrelic/newrelic-browser-agent/commit/65d9d11172df4a3abe750c3d110b53ad65ae4319))
12
+ * Add WebSocket wrapper and supportability metrics ([#1159](https://github.com/newrelic/newrelic-browser-agent/issues/1159)) ([7b4ab87](https://github.com/newrelic/newrelic-browser-agent/commit/7b4ab87ae28450cc97f6a84f3176e0c9f8698d76))
13
+ * Configure Session Replay to wait for DOMContentLoaded ([#1164](https://github.com/newrelic/newrelic-browser-agent/issues/1164)) ([84bd299](https://github.com/newrelic/newrelic-browser-agent/commit/84bd29981675660d8f47a0f49235005e7be11947))
14
+ * removing internal barrel exports ([#1158](https://github.com/newrelic/newrelic-browser-agent/issues/1158)) ([2e29a6e](https://github.com/newrelic/newrelic-browser-agent/commit/2e29a6e3c9d7a6a099b73aff59682a1e38008072))
15
+ * Standardize Feature Buffering Behavior ([#1155](https://github.com/newrelic/newrelic-browser-agent/issues/1155)) ([d070a43](https://github.com/newrelic/newrelic-browser-agent/commit/d070a4315df35ace82e20b8b2c69044bf8504c92))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * Ensure drain target is a valid event emitter before subscribing ([#1167](https://github.com/newrelic/newrelic-browser-agent/issues/1167)) ([187d31f](https://github.com/newrelic/newrelic-browser-agent/commit/187d31fe0fd95e75907742a7c49779683a6b040c))
21
+ * fix duplicative log payloads on unload ([#1166](https://github.com/newrelic/newrelic-browser-agent/issues/1166)) ([52bb088](https://github.com/newrelic/newrelic-browser-agent/commit/52bb08880215c40abf080a2bf1c80a29c7ad3324))
22
+ * relative timestamps in session trace ([#1142](https://github.com/newrelic/newrelic-browser-agent/issues/1142)) ([378b1fb](https://github.com/newrelic/newrelic-browser-agent/commit/378b1fb49ca5732e0c1b704920143b966102cfb6))
23
+ * Updated Logging API function ([#1147](https://github.com/newrelic/newrelic-browser-agent/issues/1147)) ([bf2e980](https://github.com/newrelic/newrelic-browser-agent/commit/bf2e98056c2ad214421918fb4938a08b6213590e))
24
+
25
+
26
+ ### Security Fixes
27
+
28
+ * apply obfuscation rules to session trace ([#1149](https://github.com/newrelic/newrelic-browser-agent/issues/1149)) ([fbc6f9d](https://github.com/newrelic/newrelic-browser-agent/commit/fbc6f9d31a33515e05d70e190c9c8da198fa4415))
29
+
30
+ ## [1.264.0](https://github.com/newrelic/newrelic-browser-agent/compare/v1.263.0...v1.264.0) (2024-08-06)
31
+
32
+
33
+ ### Features
34
+
35
+ * Create generic events feature with 1,000 event limit ([#1121](https://github.com/newrelic/newrelic-browser-agent/issues/1121)) ([63ab04f](https://github.com/newrelic/newrelic-browser-agent/commit/63ab04fa9b2a0c347e175c9174f563e73767933b))
36
+ * Report Page Actions with Generic Events Feature ([#1124](https://github.com/newrelic/newrelic-browser-agent/issues/1124)) ([0d52acf](https://github.com/newrelic/newrelic-browser-agent/commit/0d52acf9eaa9a2c170459f03e9edad25375f4c1c))
37
+
6
38
  ## [1.263.0](https://github.com/newrelic/newrelic-browser-agent/compare/v1.262.0...v1.263.0) (2024-07-25)
7
39
 
8
40
 
package/README.md CHANGED
@@ -78,9 +78,9 @@ const options = {
78
78
  The following features may be disabled by adding `init` entries as shown above. Note that the `page_view_event` feature may not be disabled.
79
79
 
80
80
  - `ajax`
81
+ - `generic_events`
81
82
  - `jserrors`
82
83
  - `metrics`
83
- - `page_action`
84
84
  - `page_view_timing`
85
85
  - `session_replay`
86
86
  - `session_trace`
@@ -125,7 +125,7 @@ The following feature modules are available for inclusion in the `features` arra
125
125
  import { Ajax } from '@newrelic/browser-agent/features/ajax';
126
126
  import { JSErrors } from '@newrelic/browser-agent/features/jserrors';
127
127
  import { Metrics } from '@newrelic/browser-agent/features/metrics';
128
- import { PageAction } from '@newrelic/browser-agent/features/page_action';
128
+ import { GenericEvents } from '@newrelic/browser-agent/features/generic_events';
129
129
  import { PageViewEvent } from '@newrelic/browser-agent/features/page_view_event';
130
130
  import { PageViewTiming } from '@newrelic/browser-agent/features/page_view_timing';
131
131
  import { SessionTrace } from '@newrelic/browser-agent/features/session_trace';
@@ -8,8 +8,8 @@ var _instrument4 = require("../features/jserrors/instrument");
8
8
  var _instrument5 = require("../features/ajax/instrument");
9
9
  var _instrument6 = require("../features/session_trace/instrument");
10
10
  var _instrument7 = require("../features/session_replay/instrument");
11
- var _instrument8 = require("../features/soft_navigations/instrument");
12
- var _instrument9 = require("../features/page_action/instrument");
11
+ var _instrument8 = require("../features/generic_events/instrument");
12
+ var _instrument9 = require("../features/soft_navigations/instrument");
13
13
  var _instrument10 = require("../features/logging/instrument");
14
14
  /*
15
15
  * Copyright 2023 New Relic Corporation. All rights reserved.
@@ -22,11 +22,7 @@ var _instrument10 = require("../features/logging/instrument");
22
22
  * It is not production ready, and is not intended to be imported or implemented in any build of the browser agent
23
23
  */
24
24
 
25
- // import { Instrument as InstrumentSpa } from '../features/spa/instrument'
26
-
27
25
  new _agent.Agent({
28
- features: [_instrument5.Instrument, _instrument.Instrument, _instrument2.Instrument, _instrument6.Instrument, _instrument7.Instrument, _instrument3.Instrument, _instrument9.Instrument, _instrument4.Instrument, _instrument10.Instrument,
29
- // InstrumentSpa,
30
- _instrument8.Instrument],
26
+ features: [_instrument5.Instrument, _instrument.Instrument, _instrument2.Instrument, _instrument6.Instrument, _instrument7.Instrument, _instrument3.Instrument, _instrument4.Instrument, _instrument8.Instrument, _instrument10.Instrument, _instrument9.Instrument],
31
27
  loaderType: 'experimental'
32
28
  });
@@ -8,7 +8,7 @@ var _instrument4 = require("../features/jserrors/instrument");
8
8
  var _instrument5 = require("../features/ajax/instrument");
9
9
  var _instrument6 = require("../features/session_trace/instrument");
10
10
  var _instrument7 = require("../features/session_replay/instrument");
11
- var _instrument8 = require("../features/page_action/instrument");
11
+ var _instrument8 = require("../features/generic_events/instrument");
12
12
  var _instrument9 = require("../features/logging/instrument");
13
13
  /**
14
14
  * @file Creates a "Pro" agent loader bundle composed of the core Agent and all available feature modules except `spa`.
@@ -16,6 +16,6 @@ var _instrument9 = require("../features/logging/instrument");
16
16
  */
17
17
 
18
18
  new _agent.Agent({
19
- features: [_instrument.Instrument, _instrument2.Instrument, _instrument6.Instrument, _instrument7.Instrument, _instrument5.Instrument, _instrument3.Instrument, _instrument8.Instrument, _instrument4.Instrument, _instrument9.Instrument],
19
+ features: [_instrument.Instrument, _instrument2.Instrument, _instrument6.Instrument, _instrument7.Instrument, _instrument5.Instrument, _instrument3.Instrument, _instrument4.Instrument, _instrument8.Instrument, _instrument9.Instrument],
20
20
  loaderType: 'pro'
21
21
  });
@@ -10,14 +10,14 @@ var _instrument6 = require("../features/session_trace/instrument");
10
10
  var _instrument7 = require("../features/session_replay/instrument");
11
11
  var _instrument8 = require("../features/soft_navigations/instrument");
12
12
  var _instrument9 = require("../features/spa/instrument");
13
- var _instrument10 = require("../features/page_action/instrument");
13
+ var _instrument10 = require("../features/generic_events/instrument");
14
14
  var _instrument11 = require("../features/logging/instrument");
15
15
  /**
16
16
  * @file Creates a "SPA" agent loader bundle composed of the core agent and all available feature modules.
17
17
  */
18
18
 
19
19
  new _agent.Agent({
20
- features: [_instrument5.Instrument, _instrument.Instrument, _instrument2.Instrument, _instrument6.Instrument, _instrument7.Instrument, _instrument3.Instrument, _instrument10.Instrument, _instrument4.Instrument, _instrument11.Instrument, _instrument8.Instrument, _instrument9.Instrument // either the softnav or the old spa will be used (not both), but we still need to pack both to avoid dynamic import for instrument files
20
+ features: [_instrument5.Instrument, _instrument.Instrument, _instrument2.Instrument, _instrument6.Instrument, _instrument7.Instrument, _instrument3.Instrument, _instrument4.Instrument, _instrument10.Instrument, _instrument11.Instrument, _instrument8.Instrument, _instrument9.Instrument // either the softnav or the old spa will be used (not both), but we still need to pack both to avoid dynamic import for instrument files
21
21
  ],
22
22
  loaderType: 'spa'
23
23
  });
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Aggregator = void 0;
7
7
  var _sharedContext = require("../context/shared-context");
8
- var _mapOwn = require("../util/map-own");
9
8
  /*
10
9
  * Copyright 2020 New Relic Corporation. All rights reserved.
11
10
  * SPDX-License-Identifier: Apache-2.0
@@ -36,7 +35,7 @@ class Aggregator extends _sharedContext.SharedContext {
36
35
  oldMetrics.count += metrics.count;
37
36
 
38
37
  // iterate through each new metric and merge
39
- (0, _mapOwn.mapOwn)(metrics, function (key, value) {
38
+ Object.keys(metrics || {}).forEach(key => {
40
39
  // count is a special case handled above
41
40
  if (key === 'count') return;
42
41
  var oldMetric = oldMetrics[key];
@@ -96,7 +95,7 @@ function aggregateMetrics(newMetrics, oldMetrics) {
96
95
  count: 0
97
96
  };
98
97
  oldMetrics.count += 1;
99
- (0, _mapOwn.mapOwn)(newMetrics, function (key, value) {
98
+ Object.entries(newMetrics || {}).forEach(([key, value]) => {
100
99
  oldMetrics[key] = updateMetric(value, oldMetrics[key]);
101
100
  });
102
101
  return oldMetrics;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getModeledObject = getModeledObject;
7
- var _console = require("../../util/console");
7
+ var _console = require("../util/console");
8
8
  function getModeledObject(obj, model) {
9
9
  try {
10
10
  if (!obj || typeof obj !== 'object') return (0, _console.warn)(3);
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getInfo = getInfo;
7
7
  exports.isValid = isValid;
8
8
  exports.setInfo = setInfo;
9
- var _nreum = require("../../window/nreum");
9
+ var _nreum = require("../window/nreum");
10
10
  var _configurable = require("./configurable");
11
11
  const model = {
12
12
  // preset defaults
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getConfiguration = getConfiguration;
7
7
  exports.getConfigurationValue = getConfigurationValue;
8
8
  exports.setConfiguration = setConfiguration;
9
- var _constants = require("../../../features/logging/constants");
10
- var _querySelector = require("../../dom/query-selector");
11
- var _constants2 = require("../../session/constants");
12
- var _console = require("../../util/console");
13
- var _nreum = require("../../window/nreum");
9
+ var _constants = require("../../features/logging/constants");
10
+ var _querySelector = require("../dom/query-selector");
11
+ var _constants2 = require("../session/constants");
12
+ var _console = require("../util/console");
13
+ var _nreum = require("../window/nreum");
14
14
  var _configurable = require("./configurable");
15
15
  const nrMask = '[data-nr-mask]';
16
16
  const model = () => {
@@ -53,6 +53,11 @@ const model = () => {
53
53
  allowed_origins: undefined
54
54
  },
55
55
  feature_flags: [],
56
+ generic_events: {
57
+ enabled: true,
58
+ harvestTimeSeconds: 30,
59
+ autoStart: true
60
+ },
56
61
  harvest: {
57
62
  tooManyRequestsDelay: 60
58
63
  },
@@ -73,9 +78,7 @@ const model = () => {
73
78
  },
74
79
  obfuscate: undefined,
75
80
  page_action: {
76
- enabled: true,
77
- harvestTimeSeconds: 30,
78
- autoStart: true
81
+ enabled: true
79
82
  },
80
83
  page_view_event: {
81
84
  enabled: true,
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getLoaderConfig = getLoaderConfig;
7
7
  exports.setLoaderConfig = setLoaderConfig;
8
- var _nreum = require("../../window/nreum");
8
+ var _nreum = require("../window/nreum");
9
9
  var _configurable = require("./configurable");
10
10
  const model = {
11
11
  accountID: undefined,
@@ -6,9 +6,14 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getRuntime = getRuntime;
7
7
  exports.setRuntime = setRuntime;
8
8
  var _configurable = require("./configurable");
9
- var _nreum = require("../../window/nreum");
10
- var _runtime = require("../../constants/runtime");
11
- var _env = require("../../constants/env.npm");
9
+ var _nreum = require("../window/nreum");
10
+ var _runtime = require("../constants/runtime");
11
+ var _env = require("../constants/env.npm");
12
+ /**
13
+ * Module level count of harvests. This property will auto-increment each time it is accessed.
14
+ * @type {number}
15
+ */
16
+ let harvestCount = 0;
12
17
  const readonly = {
13
18
  buildEnv: _env.BUILD_ENV,
14
19
  distMethod: _env.DIST_METHOD,
@@ -29,8 +34,8 @@ const model = {
29
34
  appMetadata: {},
30
35
  session: undefined,
31
36
  denyList: undefined,
32
- harvestCount: 0,
33
- timeKeeper: undefined
37
+ timeKeeper: undefined,
38
+ obfuscator: undefined
34
39
  };
35
40
  const _cache = {};
36
41
  function getRuntime(id) {
@@ -44,6 +49,12 @@ function setRuntime(id, obj) {
44
49
  ...(0, _configurable.getModeledObject)(obj, model),
45
50
  ...readonly
46
51
  };
52
+ if (!Object.hasOwnProperty.call(_cache[id], 'harvestCount')) {
53
+ // Harvest count needs to be added as a getter so the variable is updated each time it is accessed
54
+ Object.defineProperty(_cache[id], 'harvestCount', {
55
+ get: () => ++harvestCount
56
+ });
57
+ }
47
58
  const agentInst = (0, _nreum.getNREUMInitializedAgent)(id);
48
59
  if (agentInst) agentInst.runtime = _cache[id];
49
60
  }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MAX_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = void 0;
7
+ const IDEAL_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = 64000;
8
+ const MAX_PAYLOAD_SIZE = exports.MAX_PAYLOAD_SIZE = 1000000;
@@ -12,7 +12,7 @@ exports.VERSION = exports.RRWEB_VERSION = exports.DIST_METHOD = exports.BUILD_EN
12
12
  /**
13
13
  * Exposes the version of the agent
14
14
  */
15
- const VERSION = exports.VERSION = "1.263.0";
15
+ const VERSION = exports.VERSION = "1.265.0";
16
16
 
17
17
  /**
18
18
  * Exposes the build type of the agent
@@ -12,7 +12,7 @@ exports.VERSION = exports.RRWEB_VERSION = exports.DIST_METHOD = exports.BUILD_EN
12
12
  /**
13
13
  * Exposes the version of the agent
14
14
  */
15
- const VERSION = exports.VERSION = "1.263.0";
15
+ const VERSION = exports.VERSION = "1.265.0";
16
16
 
17
17
  /**
18
18
  * Exposes the build type of the agent
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.supportsSendBeacon = exports.originTime = exports.loadedAsDeferredBrowserScript = exports.isiOS = exports.isWorkerScope = exports.isIE = exports.isBrowserScope = exports.initiallyHidden = exports.initialLocation = exports.iOSBelow16 = exports.globalScope = exports.ffVersion = void 0;
6
+ exports.supportsSendBeacon = exports.originTime = exports.loadedAsDeferredBrowserScript = exports.isiOS = exports.isWorkerScope = exports.isBrowserScope = exports.initiallyHidden = exports.initialLocation = exports.iOSBelow16 = exports.globalScope = exports.ffVersion = void 0;
7
7
  var _now = require("../timing/now");
8
8
  /**
9
9
  * @file Contains constants about the environment the agent is running
@@ -42,8 +42,6 @@ const ffVersion = exports.ffVersion = (() => {
42
42
  }
43
43
  return 0;
44
44
  })();
45
- const isIE = exports.isIE = Boolean(isBrowserScope && window.document.documentMode); // deprecated property that only works in IE
46
-
47
45
  const supportsSendBeacon = exports.supportsSendBeacon = !!globalScope.navigator?.sendBeacon;
48
46
 
49
47
  /**
@@ -15,8 +15,7 @@ class SharedContext {
15
15
  if (typeof context !== 'object') return (0, _console.warn)(8);
16
16
  this.sharedContext = {};
17
17
  Object.assign(this.sharedContext, model);
18
- Object.entries(context).forEach(_ref => {
19
- let [key, value] = _ref;
18
+ Object.entries(context).forEach(([key, value]) => {
20
19
  if (Object.keys(model).includes(key)) this.sharedContext[key] = value;
21
20
  });
22
21
  } catch (err) {
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.dispatchGlobalEvent = dispatchGlobalEvent;
7
7
  var _runtime = require("../constants/runtime");
8
8
  const GLOBAL_EVENT_NAMESPACE = 'newrelic';
9
- function dispatchGlobalEvent() {
10
- let detail = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
9
+ function dispatchGlobalEvent(detail = {}) {
11
10
  try {
12
11
  _runtime.globalScope.dispatchEvent(new CustomEvent(GLOBAL_EVENT_NAMESPACE, {
13
12
  detail
@@ -7,9 +7,9 @@ exports.deregisterDrain = deregisterDrain;
7
7
  exports.drain = drain;
8
8
  exports.registerDrain = registerDrain;
9
9
  var _contextualEe = require("../event-emitter/contextual-ee");
10
- var _mapOwn = require("../util/map-own");
11
10
  var _registerHandler = require("../event-emitter/register-handler");
12
11
  var _features = require("../../loaders/features/features");
12
+ var _eventContext = require("../event-emitter/event-context");
13
13
  /*
14
14
  * Copyright 2020 New Relic Corporation. All rights reserved.
15
15
  * SPDX-License-Identifier: Apache-2.0
@@ -65,10 +65,7 @@ function curateRegistry(agentIdentifier) {
65
65
  * @param {string} featureName - A named group into which the feature's buffered events are bucketed.
66
66
  * @param {boolean} force - Whether to force the drain to occur immediately, bypassing the registry and staging logic.
67
67
  */
68
- function drain() {
69
- let agentIdentifier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
70
- let featureName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'feature';
71
- let force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
68
+ function drain(agentIdentifier = '', featureName = 'feature', force = false) {
72
69
  curateRegistry(agentIdentifier);
73
70
  // If the feature for the specified agent is not in the registry, that means the instrument file was bypassed.
74
71
  // This could happen in tests, or loaders that directly import the aggregator. In these cases it is safe to
@@ -85,13 +82,9 @@ function checkCanDrainAll(agentIdentifier) {
85
82
  // Only when the event-groups for all features are ready to drain (staged) do we execute the drain. This has the effect
86
83
  // that the last feature to call drain triggers drain for all features.
87
84
  const items = Array.from(registry[agentIdentifier]);
88
- if (items.every(_ref => {
89
- let [key, values] = _ref;
90
- return values.staged;
91
- })) {
85
+ if (items.every(([key, values]) => values.staged)) {
92
86
  items.sort((a, b) => a[1].priority - b[1].priority);
93
- items.forEach(_ref2 => {
94
- let [group] = _ref2;
87
+ items.forEach(([group]) => {
95
88
  registry[agentIdentifier].delete(group);
96
89
  drainGroup(agentIdentifier, group);
97
90
  });
@@ -103,8 +96,7 @@ function checkCanDrainAll(agentIdentifier) {
103
96
  * the subscribed handlers for the group.
104
97
  * @param {*} group - The name of a particular feature's event "bucket".
105
98
  */
106
- function drainGroup(agentIdentifier, group) {
107
- let activateGroup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
99
+ function drainGroup(agentIdentifier, group, activateGroup = true) {
108
100
  const baseEE = agentIdentifier ? _contextualEe.ee.get(agentIdentifier) : _contextualEe.ee;
109
101
  const handlers = _registerHandler.registerHandler.handlers; // other storage in registerHandler
110
102
  if (baseEE.aborted || !baseEE.backlog || !handlers) return;
@@ -119,10 +111,12 @@ function drainGroup(agentIdentifier, group) {
119
111
  // eslint-disable-line no-unmodified-loop-condition
120
112
  emitEvent(bufferedEventsInGroup[i], groupHandlers);
121
113
  }
122
- (0, _mapOwn.mapOwn)(groupHandlers, function (eventType, handlerRegistrationList) {
123
- (0, _mapOwn.mapOwn)(handlerRegistrationList, function (i, registration) {
124
- // registration is an array of: [targetEE, eventHandler]
125
- registration[0].on(eventType, registration[1]);
114
+ Object.entries(groupHandlers).forEach(([eventType, handlerRegistrationList]) => {
115
+ Object.values(handlerRegistrationList || {}).forEach(registration => {
116
+ // registration *should* be an array of: [targetEE, eventHandler]
117
+ // certain browser polyfills of .values and .entries pass the prototype methods into the callback,
118
+ // which breaks this assumption and throws errors. So we make sure here that we only call .on() if its an actual NR EE
119
+ if (registration[0]?.on && registration[0]?.context() instanceof _eventContext.EventContext) registration[0].on(eventType, registration[1]);
126
120
  });
127
121
  });
128
122
  }
@@ -141,7 +135,7 @@ function drainGroup(agentIdentifier, group) {
141
135
  */
142
136
  function emitEvent(evt, groupHandlers) {
143
137
  var type = evt[1];
144
- (0, _mapOwn.mapOwn)(groupHandlers[type], function (i, registration) {
138
+ Object.values(groupHandlers[type] || {}).forEach(registration => {
145
139
  var sourceEE = evt[0];
146
140
  var ee = registration[0];
147
141
  if (ee === sourceEE) {
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.ee = exports.contextId = void 0;
7
7
  var _nreum = require("../window/nreum");
8
8
  var _getOrSet = require("../util/get-or-set");
9
- var _config = require("../config/config");
9
+ var _runtime = require("../config/runtime");
10
10
  var _eventContext = require("./event-context");
11
11
  var _bundleId = require("../ids/bundle-id");
12
12
  /*
@@ -36,7 +36,7 @@ function ee(old, debugId) {
36
36
  // We only want to check the runtime configuration for `isolatedBacklog` if the event emitter belongs to a feature.
37
37
  // For feature event emitters, the debugId will be an agentIdentifier with a length of 16. In contrast, some of our
38
38
  // tests do not namespace the event emitter with an agentID and just use the parent (which has no ID).
39
- isolatedBacklog = debugId.length !== 16 ? false : (0, _config.getRuntime)(debugId).isolatedBacklog;
39
+ isolatedBacklog = debugId.length !== 16 ? false : (0, _runtime.getRuntime)(debugId).isolatedBacklog;
40
40
  } catch (err) {
41
41
  // Do nothing for now.
42
42
  }
@@ -129,8 +129,7 @@ function ee(old, debugId) {
129
129
 
130
130
  // do not buffer events if agent has been aborted
131
131
  if (emitter.aborted) return;
132
- Object.entries(types || {}).forEach(_ref => {
133
- let [_, type] = _ref;
132
+ Object.entries(types || {}).forEach(([_, type]) => {
134
133
  bufferGroupMap[type] = group;
135
134
  if (!(group in eventBuffer)) {
136
135
  eventBuffer[group] = [];
@@ -37,14 +37,10 @@ function eventListenerOpts(useCapture, abortSignal) {
37
37
  }
38
38
 
39
39
  /** Do not use this within the worker context. */
40
- function windowAddEventListener(event, listener) {
41
- let capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
42
- let abortSignal = arguments.length > 3 ? arguments[3] : undefined;
40
+ function windowAddEventListener(event, listener, capture = false, abortSignal) {
43
41
  window.addEventListener(event, listener, eventListenerOpts(capture, abortSignal));
44
42
  }
45
43
  /** Do not use this within the worker context. */
46
- function documentAddEventListener(event, listener) {
47
- let capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
48
- let abortSignal = arguments.length > 3 ? arguments[3] : undefined;
44
+ function documentAddEventListener(event, listener, capture = false, abortSignal) {
49
45
  document.addEventListener(event, listener, eventListenerOpts(capture, abortSignal));
50
46
  }
@@ -69,8 +69,7 @@ class HarvestScheduler extends _sharedContext.SharedContext {
69
69
  this.started = true;
70
70
  this.scheduleHarvest(initialDelay != null ? initialDelay : this.interval);
71
71
  }
72
- stopTimer() {
73
- let permanently = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
72
+ stopTimer(permanently = false) {
74
73
  this.aborted = permanently; // stopping permanently is same as aborting, but this function also cleans up the setTimeout loop
75
74
  this.started = false;
76
75
  if (this.timeoutHandle) {
@@ -8,14 +8,14 @@ var _encode = require("../url/encode");
8
8
  var _stringify = require("../util/stringify");
9
9
  var submitData = _interopRequireWildcard(require("../util/submit-data"));
10
10
  var _location = require("../url/location");
11
- var _config = require("../config/config");
11
+ var _info = require("../config/info");
12
+ var _init = require("../config/init");
13
+ var _runtime = require("../config/runtime");
12
14
  var _cleanUrl = require("../url/clean-url");
13
15
  var _eventListenerOpts = require("../event-listener/event-listener-opts");
14
- var _obfuscate = require("../util/obfuscate");
15
- var _traverse = require("../util/traverse");
16
16
  var _sharedContext = require("../context/shared-context");
17
17
  var _env = require("../constants/env.npm");
18
- var _runtime = require("../constants/runtime");
18
+ var _runtime2 = require("../constants/runtime");
19
19
  var _console = require("../util/console");
20
20
  var _now = require("../timing/now");
21
21
  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); }
@@ -38,8 +38,8 @@ class Harvest extends _sharedContext.SharedContext {
38
38
  constructor(parent) {
39
39
  super(parent); // gets any allowed properties from the parent and stores them in `sharedContext`
40
40
 
41
- this.tooManyRequestsDelay = (0, _config.getConfigurationValue)(this.sharedContext.agentIdentifier, 'harvest.tooManyRequestsDelay') || 60;
42
- this.obfuscator = new _obfuscate.Obfuscator(this.sharedContext);
41
+ this.tooManyRequestsDelay = (0, _init.getConfigurationValue)(this.sharedContext.agentIdentifier, 'harvest.tooManyRequestsDelay') || 60;
42
+ this.obfuscator = (0, _runtime.getRuntime)(this.sharedContext.agentIdentifier).obfuscator;
43
43
  this._events = {};
44
44
  }
45
45
 
@@ -49,8 +49,7 @@ class Harvest extends _sharedContext.SharedContext {
49
49
  * Note: Used by page_action
50
50
  * @param {NetworkSendSpec} spec Specification for sending data
51
51
  */
52
- sendX() {
53
- let spec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
52
+ sendX(spec = {}) {
54
53
  const submitMethod = submitData.getSubmitMethod({
55
54
  isFinalHarvest: spec.opts?.unload
56
55
  });
@@ -59,7 +58,7 @@ class Harvest extends _sharedContext.SharedContext {
59
58
  isFinalHarvest: spec.opts?.unload === true
60
59
  };
61
60
  const payload = this.createPayload(spec.endpoint, options);
62
- const caller = this.obfuscator.shouldObfuscate() ? this.obfuscateAndSend.bind(this) : this._send.bind(this);
61
+ const caller = this._send.bind(this);
63
62
  return caller({
64
63
  ...spec,
65
64
  payload,
@@ -71,31 +70,11 @@ class Harvest extends _sharedContext.SharedContext {
71
70
  * Initiate a harvest call.
72
71
  * @param {NetworkSendSpec} spec Specification for sending data
73
72
  */
74
- send() {
75
- let spec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
76
- const caller = this.obfuscator.shouldObfuscate() ? this.obfuscateAndSend.bind(this) : this._send.bind(this);
73
+ send(spec = {}) {
74
+ const caller = this._send.bind(this);
77
75
  return caller(spec);
78
76
  }
79
77
 
80
- /**
81
- * Apply obfuscation rules to the payload and then initial the harvest network call.
82
- * @param {NetworkSendSpec} spec Specification for sending data
83
- */
84
- obfuscateAndSend() {
85
- var _this = this;
86
- let spec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
87
- const {
88
- payload = {}
89
- } = spec;
90
- (0, _traverse.applyFnToProps)(payload, function () {
91
- return _this.obfuscator.obfuscateString(...arguments);
92
- }, 'string', ['e']);
93
- return this._send({
94
- ...spec,
95
- payload
96
- });
97
- }
98
-
99
78
  /**
100
79
  * Initiate a harvest call. Typically used by `sendX` and `send` methods or called directly
101
80
  * for raw network calls.
@@ -103,20 +82,19 @@ class Harvest extends _sharedContext.SharedContext {
103
82
  * @returns {boolean} True if the network call succeeded. For final harvest calls, the return
104
83
  * value should not be relied upon because network calls will be made asynchronously.
105
84
  */
106
- _send(_ref) {
107
- let {
108
- endpoint,
109
- payload = {},
110
- opts = {},
111
- submitMethod,
112
- cbFinished,
113
- customUrl,
114
- raw,
115
- includeBaseParams = true
116
- } = _ref;
117
- const info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
85
+ _send({
86
+ endpoint,
87
+ payload = {},
88
+ opts = {},
89
+ submitMethod,
90
+ cbFinished,
91
+ customUrl,
92
+ raw,
93
+ includeBaseParams = true
94
+ }) {
95
+ const info = (0, _info.getInfo)(this.sharedContext.agentIdentifier);
118
96
  if (!info.errorBeacon) return false;
119
- const agentRuntime = (0, _config.getRuntime)(this.sharedContext.agentIdentifier);
97
+ const agentRuntime = (0, _runtime.getRuntime)(this.sharedContext.agentIdentifier);
120
98
  let {
121
99
  body,
122
100
  qs
@@ -130,7 +108,7 @@ class Harvest extends _sharedContext.SharedContext {
130
108
  }
131
109
  return false;
132
110
  }
133
- const init = (0, _config.getConfiguration)(this.sharedContext.agentIdentifier);
111
+ const init = (0, _init.getConfiguration)(this.sharedContext.agentIdentifier);
134
112
  const protocol = init.ssl === false ? 'http' : 'https';
135
113
  const perceviedBeacon = init.proxy.beacon || info.errorBeacon;
136
114
  const endpointURLPart = endpoint !== 'rum' ? "/".concat(endpoint) : '';
@@ -171,11 +149,11 @@ class Harvest extends _sharedContext.SharedContext {
171
149
  /* Since workers don't support sendBeacon right now, they can only use XHR method.
172
150
  Because they still do permit synch XHR, the idea is that at final harvest time (worker is closing),
173
151
  we just make a BLOCKING request--trivial impact--with the remaining data as a temp fill-in for sendBeacon.
174
- Following the removal of img-element method, IE will also use sync XHR on page dismissal to ensure final analytics are sent. */
152
+ Following the removal of img-element method. */
175
153
  let result = submitMethod({
176
154
  url: fullUrl,
177
155
  body,
178
- sync: opts.unload && (_runtime.isWorkerScope || _runtime.isIE),
156
+ sync: opts.unload && _runtime2.isWorkerScope,
179
157
  headers
180
158
  });
181
159
  if (!opts.unload && cbFinished && submitMethod === submitData.xhr) {
@@ -201,17 +179,14 @@ class Harvest extends _sharedContext.SharedContext {
201
179
  cbFinished(cbResult);
202
180
  }, (0, _eventListenerOpts.eventListenerOpts)(false));
203
181
  }
204
- const runtime = (0, _config.getRuntime)(this.sharedContext.agentIdentifier);
205
- runtime.harvestCount++;
206
182
  return result;
207
183
  }
208
184
 
209
185
  // The stuff that gets sent every time.
210
186
  baseQueryString(qs, endpoint) {
211
- const runtime = (0, _config.getRuntime)(this.sharedContext.agentIdentifier);
212
- const info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
213
- const location = (0, _cleanUrl.cleanURL)((0, _location.getLocation)());
214
- const ref = this.obfuscator.shouldObfuscate() ? this.obfuscator.obfuscateString(location) : location;
187
+ const runtime = (0, _runtime.getRuntime)(this.sharedContext.agentIdentifier);
188
+ const info = (0, _info.getInfo)(this.sharedContext.agentIdentifier);
189
+ const ref = this.obfuscator.obfuscateString((0, _cleanUrl.cleanURL)((0, _location.getLocation)()));
215
190
  const hr = runtime?.session?.state.sessionReplayMode === 1 && endpoint !== 'jserrors';
216
191
  const qps = ['a=' + info.applicationID, (0, _encode.param)('sa', info.sa ? '' + info.sa : ''), (0, _encode.param)('v', _env.VERSION), transactionNameParam(info), (0, _encode.param)('ct', runtime.customTransaction), '&rst=' + (0, _now.now)(), '&ck=0',
217
192
  // ck param DEPRECATED - still expected by backend
@@ -262,13 +237,11 @@ class Harvest extends _sharedContext.SharedContext {
262
237
  * @param {HarvestPayload} payload Payload to be sent to the endpoint.
263
238
  * @returns {HarvestPayload} Cleaned payload payload to be sent to the endpoint.
264
239
  */
265
- cleanPayload() {
266
- let payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
240
+ cleanPayload(payload = {}) {
267
241
  const clean = input => {
268
242
  if (typeof Uint8Array !== 'undefined' && input instanceof Uint8Array || Array.isArray(input)) return input;
269
243
  if (typeof input === 'string') return input.length > 0 ? input : null;
270
- return Object.entries(input || {}).reduce((accumulator, _ref2) => {
271
- let [key, value] = _ref2;
244
+ return Object.entries(input || {}).reduce((accumulator, [key, value]) => {
272
245
  if (typeof value === 'number' || typeof value === 'string' && value.length > 0 || typeof value === 'object' && Object.keys(value || {}).length > 0) {
273
246
  accumulator[key] = value;
274
247
  }