@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
@@ -15,10 +15,7 @@ var _eventListenerOpts = require("../event-listener/event-listener-opts");
15
15
  * @param {boolean} [toHiddenOnly=false] - only execute the 'cb' when the vis is changing to the hidden state; no arg is passed to 'cb' if used
16
16
  * @returns void
17
17
  */
18
- function subscribeToVisibilityChange(cb) {
19
- let toHiddenOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
20
- let capture = arguments.length > 2 ? arguments[2] : undefined;
21
- let abortSignal = arguments.length > 3 ? arguments[3] : undefined;
18
+ function subscribeToVisibilityChange(cb, toHiddenOnly = false, capture, abortSignal) {
22
19
  (0, _eventListenerOpts.documentAddEventListener)('visibilitychange', handleVisibilityChange, capture, abortSignal);
23
20
  function handleVisibilityChange() {
24
21
  if (toHiddenOnly) {
@@ -83,14 +83,11 @@ function wrapEvents(sharedEE) {
83
83
  * @param {Function} cb - the function to run on the ancestral object once found, accepts an object as a arg
84
84
  * @param {Array} rest - [optional] any additional arguments to pass to the cb
85
85
  */
86
- function findEventListenerProtoAndCb(object, cb) {
86
+ function findEventListenerProtoAndCb(object, cb, ...rest) {
87
87
  let step = object;
88
88
  while (typeof step === 'object' && !Object.prototype.hasOwnProperty.call(step, ADD_EVENT_LISTENER)) {
89
89
  step = Object.getPrototypeOf(step);
90
90
  }
91
- for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
92
- rest[_key - 2] = arguments[_key];
93
- }
94
91
  if (step) cb(step, ...rest);
95
92
  }
96
93
 
@@ -111,13 +111,10 @@ function wrapPromise(sharedEE) {
111
111
 
112
112
  // Note that this wrapping affects the same originals.PR (prototype) object.
113
113
  const prevPromiseOrigThen = prevPromiseObj.prototype.then;
114
- prevPromiseObj.prototype.then = function wrappedThen() {
114
+ prevPromiseObj.prototype.then = function wrappedThen(...args) {
115
115
  var originalThis = this;
116
116
  var ctx = getContext(originalThis);
117
117
  ctx.promise = originalThis;
118
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
119
- args[_key] = arguments[_key];
120
- }
121
118
  args[0] = promiseWrapper(args[0], 'cb-', ctx, null, false);
122
119
  args[1] = promiseWrapper(args[1], 'cb-', ctx, null, false);
123
120
  const origFnCallWithThis = prevPromiseOrigThen.apply(this, args);
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.WEBSOCKET_TAG = exports.ADD_EVENT_LISTENER_TAG = void 0;
7
+ exports.wrapWebSocket = wrapWebSocket;
8
+ var _runtime = require("../constants/runtime");
9
+ var _now = require("../timing/now");
10
+ var _load = require("../window/load");
11
+ var _uniqueId = require("../ids/unique-id");
12
+ var _nreum = require("../window/nreum");
13
+ const WEBSOCKET_TAG = exports.WEBSOCKET_TAG = 'websocket-';
14
+ const ADD_EVENT_LISTENER_TAG = exports.ADD_EVENT_LISTENER_TAG = 'addEventListener';
15
+ const wrapped = {};
16
+ function wrapWebSocket(sharedEE) {
17
+ if (wrapped[sharedEE.debugId]++) return sharedEE;
18
+ const originals = (0, _nreum.gosNREUMOriginals)().o;
19
+ if (!originals.WS) return sharedEE;
20
+ function reporter(socketId) {
21
+ const createdAt = (0, _now.now)();
22
+ return function (message, ...data) {
23
+ const timestamp = data[0]?.timeStamp || (0, _now.now)();
24
+ const isLoaded = (0, _load.checkState)();
25
+ sharedEE.emit(WEBSOCKET_TAG + message, [timestamp, timestamp - createdAt, isLoaded, socketId, ...data]);
26
+ };
27
+ }
28
+ Object.defineProperty(WrappedWebSocket, 'name', {
29
+ value: 'WebSocket'
30
+ });
31
+ function WrappedWebSocket() {
32
+ const ws = new originals.WS(...arguments);
33
+ const socketId = (0, _uniqueId.generateRandomHexString)(6);
34
+ const report = reporter(socketId);
35
+ report('new');
36
+ const events = ['message', 'error', 'open', 'close'];
37
+ /** add event listeners */
38
+ events.forEach(evt => {
39
+ ws.addEventListener(evt, function (e) {
40
+ report(ADD_EVENT_LISTENER_TAG, {
41
+ eventType: evt,
42
+ event: e
43
+ });
44
+ });
45
+ })
46
+
47
+ /** could also observe the on-events for runtime processing, but not implemented yet */
48
+
49
+ /** observe the static method send, but noteably not close, as that is currently observed with the event listener */;
50
+ ['send'].forEach(wrapStaticProperty);
51
+ function wrapStaticProperty(prop) {
52
+ const originalProp = ws[prop];
53
+ if (originalProp) {
54
+ Object.defineProperty(proxiedProp, 'name', {
55
+ value: prop
56
+ });
57
+ function proxiedProp() {
58
+ report(prop, ...arguments);
59
+ try {
60
+ return originalProp.apply(this, arguments);
61
+ } catch (err) {
62
+ report(prop + '-err', ...arguments);
63
+ // rethrow error so we don't effect execution by observing.
64
+ throw err;
65
+ }
66
+ }
67
+ ws[prop] = proxiedProp;
68
+ }
69
+ }
70
+ return ws;
71
+ }
72
+ _runtime.globalScope.WebSocket = WrappedWebSocket;
73
+ return sharedEE;
74
+ }
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _belSerializer = require("../../../common/serialize/bel-serializer");
8
- var _config = require("../../../common/config/config");
8
+ var _info = require("../../../common/config/info");
9
+ var _agentConstants = require("../../../common/constants/agent-constants");
9
10
  class Chunk {
10
11
  constructor(events, aggregateInstance) {
11
12
  this.addString = (0, _belSerializer.getAddStringContext)(aggregateInstance.agentIdentifier); // pass agentIdentifier here
@@ -28,7 +29,7 @@ class Chunk {
28
29
  let insert = '2,';
29
30
 
30
31
  // Since configuration objects (like info) are created new each time they are set, we have to grab the current pointer to the attr object here.
31
- const jsAttributes = (0, _config.getInfo)(aggregateInstance.agentIdentifier).jsAttributes;
32
+ const jsAttributes = (0, _info.getInfo)(aggregateInstance.agentIdentifier).jsAttributes;
32
33
 
33
34
  // add custom attributes
34
35
  // gql decorators are added as custom attributes to alleviate need for new BEL schema
@@ -44,7 +45,7 @@ class Chunk {
44
45
  if (i + 1 < events.length) insert += ';';
45
46
  this.payload += insert;
46
47
  }
47
- this.tooBig = this.payload.length * 2 > aggregateInstance.MAX_PAYLOAD_SIZE;
48
+ this.tooBig = this.payload.length * 2 > _agentConstants.MAX_PAYLOAD_SIZE;
48
49
  }
49
50
  }
50
51
  exports.default = Chunk;
@@ -19,11 +19,10 @@ var _typeCheck = require("../../../common/util/type-check");
19
19
  * @param {string} query Ajax request query param string
20
20
  * @returns {GQLMetadata | undefined}
21
21
  */
22
- function parseGQL() {
23
- let {
24
- body,
25
- query
26
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
22
+ function parseGQL({
23
+ body,
24
+ query
25
+ } = {}) {
27
26
  if (!body && !query) return;
28
27
  try {
29
28
  const gqlBody = parseBatchGQL(parseGQLContents(body));
@@ -7,7 +7,9 @@ exports.Aggregate = void 0;
7
7
  var _registerHandler = require("../../../common/event-emitter/register-handler");
8
8
  var _stringify = require("../../../common/util/stringify");
9
9
  var _handle = require("../../../common/event-emitter/handle");
10
- var _config = require("../../../common/config/config");
10
+ var _info = require("../../../common/config/info");
11
+ var _init = require("../../../common/config/init");
12
+ var _runtime = require("../../../common/config/runtime");
11
13
  var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
12
14
  var _denyList = require("../../../common/deny-list/deny-list");
13
15
  var _constants = require("../constants");
@@ -17,6 +19,7 @@ var _aggregateBase = require("../../utils/aggregate-base");
17
19
  var _gql = require("./gql");
18
20
  var _nreum = require("../../../common/window/nreum");
19
21
  var _chunk = _interopRequireDefault(require("./chunk"));
22
+ var _eventBuffer = require("../../utils/event-buffer");
20
23
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
24
  /*
22
25
  * Copyright 2020 New Relic Corporation. All rights reserved.
@@ -30,29 +33,27 @@ class Aggregate extends _aggregateBase.AggregateBase {
30
33
  #agentInit;
31
34
  constructor(agentIdentifier, aggregator) {
32
35
  super(agentIdentifier, aggregator, _constants.FEATURE_NAME);
33
- this.#agentInfo = (0, _config.getInfo)(agentIdentifier);
34
- this.#agentRuntime = (0, _config.getRuntime)(agentIdentifier);
35
- this.#agentInit = (0, _config.getConfiguration)(agentIdentifier);
36
+ this.#agentInfo = (0, _info.getInfo)(agentIdentifier);
37
+ this.#agentRuntime = (0, _runtime.getRuntime)(agentIdentifier);
38
+ this.#agentInit = (0, _init.getConfiguration)(agentIdentifier);
36
39
  const harvestTimeSeconds = this.#agentInit.ajax.harvestTimeSeconds || 10;
37
- this.MAX_PAYLOAD_SIZE = this.#agentInit.ajax.maxPayloadSize || 1000000;
38
40
  (0, _denyList.setDenyList)(this.#agentRuntime.denyList);
39
- this.ajaxEvents = [];
41
+ this.ajaxEvents = new _eventBuffer.EventBuffer();
40
42
  this.spaAjaxEvents = {};
41
- this.sentAjaxEvents = [];
42
43
  const classThis = this;
43
44
 
44
45
  // --- v Used by old spa feature
45
46
  this.ee.on('interactionDone', (interaction, wasSaved) => {
46
- if (!this.spaAjaxEvents[interaction.id]) return;
47
+ if (!this.spaAjaxEvents[interaction.id]?.hasData) return;
47
48
  if (!wasSaved) {
48
49
  // if the ixn was saved, then its ajax reqs are part of the payload whereas if it was discarded, it should still be harvested in the ajax feature itself
49
- this.spaAjaxEvents[interaction.id].forEach(item => this.ajaxEvents.push(item));
50
+ this.ajaxEvents.merge(this.spaAjaxEvents[interaction.id]);
50
51
  }
51
52
  delete this.spaAjaxEvents[interaction.id];
52
53
  });
53
54
  // --- ^
54
55
  // --- v Used by new soft nav
55
- (0, _registerHandler.registerHandler)('returnAjax', event => this.ajaxEvents.push(event), this.featureName, this.ee);
56
+ (0, _registerHandler.registerHandler)('returnAjax', event => this.ajaxEvents.add(event), this.featureName, this.ee);
56
57
  // --- ^
57
58
  (0, _registerHandler.registerHandler)('xhr', function () {
58
59
  // the EE-drain system not only switches "this" but also passes a new EventContext with info. Should consider platform refactor to another system which passes a mutable context around separately and predictably to avoid problems like this.
@@ -112,7 +113,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
112
113
  if (ctx.dt) {
113
114
  event.spanId = ctx.dt.spanId;
114
115
  event.traceId = ctx.dt.traceId;
115
- event.spanTimestamp = this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(ctx.dt.timestamp);
116
+ event.spanTimestamp = Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(ctx.dt.timestamp));
116
117
  }
117
118
 
118
119
  // parsed from the AJAX body, looking for operationName param & parsing query for operationType
@@ -128,31 +129,27 @@ class Aggregate extends _aggregateBase.AggregateBase {
128
129
  } else if (ctx.spaNode) {
129
130
  // For old spa (when running), if the ajax happened inside an interaction, hold it until the interaction finishes
130
131
  const interactionId = ctx.spaNode.interaction.id;
131
- this.spaAjaxEvents[interactionId] = this.spaAjaxEvents[interactionId] || [];
132
- this.spaAjaxEvents[interactionId].push(event);
132
+ this.spaAjaxEvents[interactionId] ??= new _eventBuffer.EventBuffer();
133
+ this.spaAjaxEvents[interactionId].add(event);
133
134
  } else {
134
- this.ajaxEvents.push(event);
135
+ this.ajaxEvents.add(event);
135
136
  }
136
137
  }
137
138
  prepareHarvest(options) {
138
139
  options = options || {};
139
- if (this.ajaxEvents.length === 0) return null;
140
- const payload = this.#getPayload(this.ajaxEvents);
140
+ if (this.ajaxEvents.buffer.length === 0) return null;
141
+ const payload = this.#getPayload(this.ajaxEvents.buffer);
141
142
  const payloadObjs = [];
142
143
  for (let i = 0; i < payload.length; i++) payloadObjs.push({
143
144
  body: {
144
145
  e: payload[i]
145
146
  }
146
147
  });
147
- if (options.retry) this.sentAjaxEvents = this.ajaxEvents;
148
- this.ajaxEvents = [];
148
+ if (options.retry) this.ajaxEvents.hold();else this.ajaxEvents.clear();
149
149
  return payloadObjs;
150
150
  }
151
151
  onEventsHarvestFinished(result) {
152
- if (result.retry && this.sentAjaxEvents.length > 0) {
153
- this.ajaxEvents.unshift(...this.sentAjaxEvents);
154
- this.sentAjaxEvents = [];
155
- }
152
+ if (result.retry && this.ajaxEvents.held.hasData) this.ajaxEvents.unhold();else this.ajaxEvents.held.clear();
156
153
  }
157
154
  #getPayload(events, numberOfChunks) {
158
155
  numberOfChunks = numberOfChunks || 1;
@@ -3,7 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.MAX_PAYLOAD_SIZE = exports.FEATURE_NAME = void 0;
6
+ exports.FEATURE_NAME = void 0;
7
7
  var _features = require("../../loaders/features/features");
8
- const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.ajax;
9
- const MAX_PAYLOAD_SIZE = exports.MAX_PAYLOAD_SIZE = 1000000;
8
+ const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.ajax;
@@ -4,7 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.DT = void 0;
7
- var _config = require("../../../common/config/config");
7
+ var _init = require("../../../common/config/init");
8
+ var _loaderConfig = require("../../../common/config/loader-config");
8
9
  var _uniqueId = require("../../../common/ids/unique-id");
9
10
  var _parseUrl = require("../../../common/url/parse-url");
10
11
  var _runtime = require("../../../common/constants/runtime");
@@ -22,7 +23,7 @@ class DT {
22
23
  if (!this.shouldGenerateTrace(parsedOrigin)) {
23
24
  return null;
24
25
  }
25
- var loaderConfig = (0, _config.getLoaderConfig)(this.agentIdentifier);
26
+ var loaderConfig = (0, _loaderConfig.getLoaderConfig)(this.agentIdentifier);
26
27
  if (!loaderConfig) {
27
28
  return null;
28
29
  }
@@ -90,9 +91,9 @@ class DT {
90
91
  isAllowedOrigin(parsedOrigin) {
91
92
  var allowed = false;
92
93
  var dtConfig = {};
93
- var dt = (0, _config.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
94
+ var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
94
95
  if (dt) {
95
- dtConfig = (0, _config.getConfiguration)(this.agentIdentifier).distributed_tracing;
96
+ dtConfig = (0, _init.getConfiguration)(this.agentIdentifier).distributed_tracing;
96
97
  }
97
98
  if (parsedOrigin.sameOrigin) {
98
99
  allowed = true;
@@ -108,7 +109,7 @@ class DT {
108
109
  return allowed;
109
110
  }
110
111
  isDtEnabled() {
111
- var dt = (0, _config.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
112
+ var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
112
113
  if (dt) {
113
114
  return !!dt.enabled;
114
115
  }
@@ -117,21 +118,21 @@ class DT {
117
118
 
118
119
  // exclude the newrelic header for same-origin calls
119
120
  excludeNewrelicHeader() {
120
- var dt = (0, _config.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
121
+ var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
121
122
  if (dt) {
122
123
  return !!dt.exclude_newrelic_header;
123
124
  }
124
125
  return false;
125
126
  }
126
127
  useNewrelicHeaderForCors() {
127
- var dt = (0, _config.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
128
+ var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
128
129
  if (dt) {
129
130
  return dt.cors_use_newrelic_header !== false;
130
131
  }
131
132
  return false;
132
133
  }
133
134
  useTraceContextHeadersForCors() {
134
- var dt = (0, _config.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
135
+ var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
135
136
  if (dt) {
136
137
  return !!dt.cors_use_tracecontext_headers;
137
138
  }
@@ -3,14 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Instrument = void 0;
7
- var _config = require("../../../common/config/config");
6
+ exports.Instrument = exports.Ajax = void 0;
7
+ var _nreum = require("../../../common/window/nreum");
8
+ var _loaderConfig = require("../../../common/config/loader-config");
8
9
  var _handle = require("../../../common/event-emitter/handle");
9
10
  var _id = require("../../../common/ids/id");
10
11
  var _runtime = require("../../../common/constants/runtime");
11
12
  var _dataSize = require("../../../common/util/data-size");
12
13
  var _eventListenerOpts = require("../../../common/event-listener/event-listener-opts");
13
- var _wrap = require("../../../common/wrap");
14
+ var _wrapXhr = require("../../../common/wrap/wrap-xhr");
15
+ var _wrapFetch = require("../../../common/wrap/wrap-fetch");
14
16
  var _parseUrl = require("../../../common/url/parse-url");
15
17
  var _distributedTracing = require("./distributed-tracing");
16
18
  var _responseSize = require("./response-size");
@@ -27,12 +29,11 @@ var _denyList = require("../../../common/deny-list/deny-list");
27
29
 
28
30
  var handlers = ['load', 'error', 'abort', 'timeout'];
29
31
  var handlersLen = handlers.length;
30
- var origRequest = _config.originals.REQ;
31
- var origXHR = _config.originals.XHR;
32
+ var origRequest = (0, _nreum.gosNREUMOriginals)().o.REQ;
33
+ var origXHR = (0, _nreum.gosNREUMOriginals)().o.XHR;
32
34
  class Instrument extends _instrumentBase.InstrumentBase {
33
35
  static featureName = _constants.FEATURE_NAME;
34
- constructor(agentIdentifier, aggregator) {
35
- let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
36
+ constructor(agentIdentifier, aggregator, auto = true) {
36
37
  super(agentIdentifier, aggregator, _constants.FEATURE_NAME, auto);
37
38
  this.dt = new _distributedTracing.DT(agentIdentifier);
38
39
  this.handler = (type, args, ctx, group) => (0, _handle.handle)(type, args, ctx, group, this.ee);
@@ -68,8 +69,8 @@ class Instrument extends _instrumentBase.InstrumentBase {
68
69
  } catch (err) {
69
70
  // do nothing
70
71
  }
71
- (0, _wrap.wrapFetch)(this.ee);
72
- (0, _wrap.wrapXhr)(this.ee);
72
+ (0, _wrapFetch.wrapFetch)(this.ee);
73
+ (0, _wrapXhr.wrapXhr)(this.ee);
73
74
  subscribeToEvents(agentIdentifier, this.ee, this.handler, this.dt);
74
75
  this.importAggregator();
75
76
  }
@@ -128,7 +129,7 @@ function subscribeToEvents(agentIdentifier, ee, handler, dt) {
128
129
  this.metrics = {};
129
130
  }
130
131
  function onOpenXhrEnd(args, xhr) {
131
- var loaderConfig = (0, _config.getLoaderConfig)(agentIdentifier);
132
+ var loaderConfig = (0, _loaderConfig.getLoaderConfig)(agentIdentifier);
132
133
  if (loaderConfig.xpid && this.sameOrigin) {
133
134
  xhr.setRequestHeader('X-NewRelic-ID', loaderConfig.xpid);
134
135
  }
@@ -347,7 +348,7 @@ function subscribeToEvents(agentIdentifier, ee, handler, dt) {
347
348
  if ((0, _denyList.hasUndefinedHostname)(params)) return; // don't bother with XHR of url with no hostname
348
349
 
349
350
  metrics.duration = (0, _now.now)() - this.startTime;
350
- if (!this.loadCaptureCalled && xhr.readyState === 4) {
351
+ if (!this.loadCazptureCalled && xhr.readyState === 4) {
351
352
  captureXhrData(this, xhr);
352
353
  } else if (params.status == null) {
353
354
  params.status = 0;
@@ -381,4 +382,5 @@ function addUrl(ctx, url) {
381
382
  params.pathname = parsed.pathname;
382
383
  ctx.parsedOrigin = parsed;
383
384
  ctx.sameOrigin = parsed.sameOrigin;
384
- }
385
+ }
386
+ const Ajax = exports.Ajax = Instrument;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Aggregate = void 0;
7
+ var _stringify = require("../../../common/util/stringify");
8
+ var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
9
+ var _cleanUrl = require("../../../common/url/clean-url");
10
+ var _info = require("../../../common/config/info");
11
+ var _init = require("../../../common/config/init");
12
+ var _runtime = require("../../../common/config/runtime");
13
+ var _constants = require("../constants");
14
+ var _runtime2 = require("../../../common/constants/runtime");
15
+ var _aggregateBase = require("../../utils/aggregate-base");
16
+ var _console = require("../../../common/util/console");
17
+ var _now = require("../../../common/timing/now");
18
+ var _registerHandler = require("../../../common/event-emitter/register-handler");
19
+ var _drain = require("../../../common/drain/drain");
20
+ var _constants2 = require("../../metrics/constants");
21
+ var _eventBuffer = require("../../utils/event-buffer");
22
+ var _traverse = require("../../../common/util/traverse");
23
+ var _agentConstants = require("../../../common/constants/agent-constants");
24
+ /*
25
+ * Copyright 2020 New Relic Corporation. All rights reserved.
26
+ * SPDX-License-Identifier: Apache-2.0
27
+ */
28
+
29
+ class Aggregate extends _aggregateBase.AggregateBase {
30
+ #agentRuntime;
31
+ static featureName = _constants.FEATURE_NAME;
32
+ constructor(agentIdentifier, aggregator) {
33
+ super(agentIdentifier, aggregator, _constants.FEATURE_NAME);
34
+ this.eventsPerHarvest = 1000;
35
+ this.harvestTimeSeconds = (0, _init.getConfigurationValue)(this.agentIdentifier, 'generic_events.harvestTimeSeconds');
36
+ this.referrerUrl = _runtime2.isBrowserScope && document.referrer ? (0, _cleanUrl.cleanURL)(document.referrer) : undefined;
37
+ this.events = new _eventBuffer.EventBuffer();
38
+ this.#agentRuntime = (0, _runtime.getRuntime)(this.agentIdentifier);
39
+ this.waitForFlags(['ins']).then(([ins]) => {
40
+ if (!ins) {
41
+ this.blocked = true;
42
+ (0, _drain.deregisterDrain)(this.agentIdentifier, this.featureName);
43
+ return;
44
+ }
45
+ if ((0, _init.getConfigurationValue)(this.agentIdentifier, 'page_action.enabled')) {
46
+ (0, _registerHandler.registerHandler)('api-addPageAction', (timestamp, name, attributes) => {
47
+ this.addEvent({
48
+ ...attributes,
49
+ eventType: 'PageAction',
50
+ timestamp: Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(this.#agentRuntime.timeKeeper.convertRelativeTimestamp(timestamp))),
51
+ timeSinceLoad: timestamp / 1000,
52
+ actionName: name,
53
+ referrerUrl: this.referrerUrl,
54
+ currentUrl: (0, _cleanUrl.cleanURL)('' + location),
55
+ ...(_runtime2.isBrowserScope && {
56
+ browserWidth: window.document.documentElement?.clientWidth,
57
+ browserHeight: window.document.documentElement?.clientHeight
58
+ })
59
+ });
60
+ }, this.featureName, this.ee);
61
+ }
62
+ this.harvestScheduler = new _harvestScheduler.HarvestScheduler('ins', {
63
+ onFinished: (...args) => this.onHarvestFinished(...args)
64
+ }, this);
65
+ this.harvestScheduler.harvest.on('ins', (...args) => this.onHarvestStarted(...args));
66
+ this.harvestScheduler.startTimer(this.harvestTimeSeconds, 0);
67
+ this.drain();
68
+ });
69
+ }
70
+
71
+ // WARNING: Insights times are in seconds. EXCEPT timestamp, which is in ms.
72
+ addEvent(obj = {}) {
73
+ if (!obj || !Object.keys(obj).length) return;
74
+ if (!obj.eventType) {
75
+ (0, _console.warn)(44);
76
+ return;
77
+ }
78
+ for (let key in obj) {
79
+ let val = obj[key];
80
+ obj[key] = val && typeof val === 'object' ? (0, _stringify.stringify)(val) : val;
81
+ }
82
+ const defaultEventAttributes = {
83
+ /** should be overridden by the event-specific attributes, but just in case -- set it to now() */
84
+ timestamp: Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(this.#agentRuntime.timeKeeper.convertRelativeTimestamp((0, _now.now)()))),
85
+ /** all generic events require a pageUrl */
86
+ pageUrl: (0, _cleanUrl.cleanURL)((0, _runtime.getRuntime)(this.agentIdentifier).origin)
87
+ };
88
+ const eventAttributes = {
89
+ /** Agent-level custom attributes */
90
+ ...((0, _info.getInfo)(this.agentIdentifier).jsAttributes || {}),
91
+ /** Fallbacks for required properties in-case the event did not supply them, should take precedence over agent-level custom attrs */
92
+ ...defaultEventAttributes,
93
+ /** Event-specific attributes take precedence over agent-level custom attributes and fallbacks */
94
+ ...obj
95
+ };
96
+ this.events.add(eventAttributes);
97
+ this.checkEventLimits();
98
+ }
99
+ onHarvestStarted(options) {
100
+ const {
101
+ userAttributes,
102
+ atts
103
+ } = (0, _info.getInfo)(this.agentIdentifier);
104
+ if (!this.events.hasData) return;
105
+ var payload = {
106
+ qs: {
107
+ ua: userAttributes,
108
+ at: atts
109
+ },
110
+ body: (0, _traverse.applyFnToProps)({
111
+ ins: this.events.buffer
112
+ }, this.obfuscator.obfuscateString.bind(this.obfuscator), 'string')
113
+ };
114
+ if (options.retry) this.events.hold();
115
+ return payload;
116
+ }
117
+ onHarvestFinished(result) {
118
+ if (result && result?.sent && result?.retry && this.events.held.hasData) this.events.unhold();else this.events.held.clear();
119
+ }
120
+ checkEventLimits() {
121
+ // check if we've reached any harvest limits...
122
+ if (this.events.bytes > _agentConstants.IDEAL_PAYLOAD_SIZE) {
123
+ this.ee.emit(_constants2.SUPPORTABILITY_METRIC_CHANNEL, ['GenericEvents/Harvest/Max/Seen']);
124
+ this.harvestScheduler.runHarvest();
125
+ }
126
+ }
127
+ }
128
+ exports.Aggregate = Aggregate;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MAX_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = exports.FEATURE_NAME = void 0;
7
+ var _features = require("../../loaders/features/features");
8
+ const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.genericEvents;
9
+ const IDEAL_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = 64000;
10
+ const MAX_PAYLOAD_SIZE = exports.MAX_PAYLOAD_SIZE = 1000000;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "GenericEvents", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _index.Instrument;
10
+ }
11
+ });
12
+ var _index = require("./instrument/index");
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Instrument = exports.GenericEvents = void 0;
7
+ var _init = require("../../../common/config/init");
8
+ var _drain = require("../../../common/drain/drain");
9
+ var _instrumentBase = require("../../utils/instrument-base");
10
+ var _constants = require("../constants");
11
+ /* Copyright 2020 New Relic Corporation. All rights reserved.
12
+ * SPDX-License-Identifier: Apache-2.0
13
+ */
14
+
15
+ class Instrument extends _instrumentBase.InstrumentBase {
16
+ static featureName = _constants.FEATURE_NAME;
17
+ constructor(agentIdentifier, aggregator, auto = true) {
18
+ super(agentIdentifier, aggregator, _constants.FEATURE_NAME, auto);
19
+ const genericEventSourceConfigs = [(0, _init.getConfigurationValue)(this.agentIdentifier, 'page_action.enabled')
20
+ // other future generic event source configs to go here, like M&Ms, PageResouce, etc.
21
+ ];
22
+ /** If any of the sources are active, import the aggregator. otherwise deregister */
23
+ if (genericEventSourceConfigs.some(x => x)) this.importAggregator();else (0, _drain.deregisterDrain)(this.agentIdentifier, this.featureName);
24
+ }
25
+ }
26
+ exports.Instrument = Instrument;
27
+ const GenericEvents = exports.GenericEvents = Instrument;