@newrelic/browser-agent 0.0.9 → 0.1.229

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 (339) hide show
  1. package/README.md +84 -207
  2. package/dist/cjs/cdn/lite.js +14 -0
  3. package/dist/cjs/cdn/polyfills/lite.js +4 -0
  4. package/dist/cjs/cdn/polyfills/pro.js +4 -0
  5. package/dist/cjs/cdn/polyfills/spa.js +4 -0
  6. package/dist/cjs/cdn/polyfills.js +14 -0
  7. package/dist/cjs/cdn/pro.js +19 -0
  8. package/dist/cjs/cdn/spa.js +19 -0
  9. package/dist/cjs/cdn/worker.js +16 -0
  10. package/dist/cjs/common/aggregate/aggregator.js +168 -0
  11. package/dist/cjs/common/browser-version/firefox-version.js +17 -0
  12. package/dist/cjs/common/browser-version/ios-version.js +18 -0
  13. package/dist/cjs/common/config/config.js +76 -0
  14. package/dist/cjs/common/config/state/configurable.js +32 -0
  15. package/dist/cjs/common/config/state/info.js +50 -0
  16. package/dist/cjs/common/config/state/init.js +86 -0
  17. package/dist/cjs/common/config/state/loader-config.js +28 -0
  18. package/dist/cjs/common/config/state/originals.js +9 -0
  19. package/dist/cjs/common/config/state/runtime.js +50 -0
  20. package/dist/cjs/common/constants/environment-variables.js +20 -0
  21. package/dist/cjs/common/context/shared-context.js +25 -0
  22. package/dist/cjs/common/deny-list/deny-list.js +108 -0
  23. package/dist/cjs/common/drain/drain.js +126 -0
  24. package/dist/cjs/common/event-emitter/contextual-ee.js +149 -0
  25. package/dist/cjs/common/event-emitter/handle.js +24 -0
  26. package/dist/cjs/common/event-emitter/register-handler.js +24 -0
  27. package/dist/cjs/common/event-listener/event-listener-opts.js +46 -0
  28. package/dist/cjs/common/harvest/harvest-scheduler.js +111 -0
  29. package/dist/cjs/common/harvest/harvest.js +236 -0
  30. package/dist/cjs/common/ids/id.js +30 -0
  31. package/dist/cjs/common/ids/unique-id.js +84 -0
  32. package/dist/cjs/common/metrics/framework-detection.js +72 -0
  33. package/dist/cjs/common/metrics/paint-metrics.js +13 -0
  34. package/dist/cjs/common/serialize/bel-serializer.js +89 -0
  35. package/dist/cjs/common/timing/nav-timing.js +77 -0
  36. package/dist/cjs/common/timing/now.js +15 -0
  37. package/dist/cjs/common/unload/eol.js +69 -0
  38. package/dist/cjs/common/url/clean-url.js +16 -0
  39. package/dist/cjs/common/url/encode.js +79 -0
  40. package/dist/cjs/common/url/location.js +14 -0
  41. package/dist/cjs/common/url/parse-url.js +66 -0
  42. package/dist/cjs/common/url/protocol.js +25 -0
  43. package/dist/cjs/common/util/console.js +17 -0
  44. package/dist/cjs/common/util/data-size.js +25 -0
  45. package/dist/cjs/common/util/feature-flags.js +42 -0
  46. package/dist/cjs/common/util/get-or-set.js +39 -0
  47. package/dist/cjs/common/util/global-scope.js +56 -0
  48. package/dist/cjs/common/util/map-own.js +24 -0
  49. package/dist/cjs/common/util/obfuscate.js +76 -0
  50. package/dist/cjs/common/util/reduce.js +22 -0
  51. package/dist/cjs/common/util/s-hash.js +19 -0
  52. package/dist/cjs/common/util/single.js +23 -0
  53. package/dist/cjs/common/util/stringify.js +47 -0
  54. package/dist/cjs/common/util/submit-data.js +99 -0
  55. package/dist/cjs/common/util/traverse.js +41 -0
  56. package/dist/cjs/common/util/user-agent.js +57 -0
  57. package/dist/cjs/common/window/load.js +19 -0
  58. package/dist/cjs/common/window/nreum.js +107 -0
  59. package/dist/cjs/common/window/page-visibility.js +28 -0
  60. package/dist/cjs/common/window/session-storage.js +42 -0
  61. package/dist/cjs/common/window/supports-performance-observer.js +15 -0
  62. package/dist/cjs/common/window/top-level-callers.js +23 -0
  63. package/dist/cjs/common/wrap/index.js +68 -0
  64. package/dist/cjs/common/wrap/wrap-events.js +105 -0
  65. package/dist/cjs/common/wrap/wrap-fetch.js +114 -0
  66. package/dist/cjs/common/wrap/wrap-function.js +269 -0
  67. package/dist/cjs/common/wrap/wrap-history.js +56 -0
  68. package/dist/cjs/common/wrap/wrap-jsonp.js +129 -0
  69. package/dist/cjs/common/wrap/wrap-mutation.js +61 -0
  70. package/dist/cjs/common/wrap/wrap-promise.js +160 -0
  71. package/dist/cjs/common/wrap/wrap-raf.js +55 -0
  72. package/dist/cjs/common/wrap/wrap-timer.js +70 -0
  73. package/dist/cjs/common/wrap/wrap-xhr.js +206 -0
  74. package/dist/cjs/features/ajax/aggregate/index.js +226 -0
  75. package/dist/cjs/features/ajax/constants.js +9 -0
  76. package/dist/cjs/features/ajax/index.js +12 -0
  77. package/dist/cjs/features/ajax/instrument/distributed-tracing.js +145 -0
  78. package/dist/cjs/features/ajax/instrument/index.js +338 -0
  79. package/dist/cjs/features/ajax/instrument/response-size.js +26 -0
  80. package/dist/cjs/features/jserrors/aggregate/canonical-function-name.js +18 -0
  81. package/dist/cjs/features/jserrors/aggregate/canonical-function-name.test.js +30 -0
  82. package/dist/cjs/features/jserrors/aggregate/compute-stack-trace.js +216 -0
  83. package/dist/cjs/features/jserrors/aggregate/compute-stack-trace.test.js +257 -0
  84. package/dist/cjs/features/jserrors/aggregate/format-stack-trace.js +36 -0
  85. package/dist/cjs/features/jserrors/aggregate/format-stack-trace.test.js +39 -0
  86. package/dist/cjs/features/jserrors/aggregate/index.js +267 -0
  87. package/dist/cjs/features/jserrors/aggregate/string-hash-code.js +23 -0
  88. package/dist/cjs/features/jserrors/aggregate/string-hash-code.test.js +26 -0
  89. package/dist/cjs/features/jserrors/constants.js +11 -0
  90. package/dist/cjs/features/jserrors/index.js +12 -0
  91. package/dist/cjs/features/jserrors/instrument/debug.js +40 -0
  92. package/dist/cjs/features/jserrors/instrument/index.js +158 -0
  93. package/dist/cjs/features/metrics/aggregate/index.js +136 -0
  94. package/dist/cjs/features/metrics/constants.js +17 -0
  95. package/dist/cjs/features/metrics/index.js +12 -0
  96. package/dist/cjs/features/metrics/instrument/index.js +20 -0
  97. package/dist/cjs/features/metrics/instrument/workers-helper.js +121 -0
  98. package/dist/cjs/features/page_action/aggregate/index.js +112 -0
  99. package/dist/cjs/features/page_action/constants.js +9 -0
  100. package/dist/cjs/features/page_action/index.js +12 -0
  101. package/dist/cjs/features/page_action/instrument/index.js +21 -0
  102. package/dist/cjs/features/page_view_event/aggregate/index.js +133 -0
  103. package/dist/cjs/features/page_view_event/aggregate/initialized-features.js +39 -0
  104. package/dist/cjs/features/page_view_event/constants.js +15 -0
  105. package/dist/cjs/features/page_view_event/index.js +12 -0
  106. package/dist/cjs/features/page_view_event/instrument/index.js +38 -0
  107. package/dist/cjs/features/page_view_timing/aggregate/index.js +265 -0
  108. package/dist/cjs/features/page_view_timing/constants.js +9 -0
  109. package/dist/cjs/features/page_view_timing/first-paint.js +50 -0
  110. package/dist/cjs/features/page_view_timing/index.js +12 -0
  111. package/dist/cjs/features/page_view_timing/instrument/index.js +36 -0
  112. package/dist/cjs/features/page_view_timing/long-tasks.js +75 -0
  113. package/dist/cjs/features/session_trace/aggregate/index.js +375 -0
  114. package/dist/cjs/features/session_trace/constants.js +32 -0
  115. package/dist/cjs/features/session_trace/index.js +12 -0
  116. package/dist/cjs/features/session_trace/instrument/index.js +133 -0
  117. package/dist/cjs/features/spa/aggregate/index.js +684 -0
  118. package/dist/cjs/features/spa/aggregate/interaction-node.js +84 -0
  119. package/dist/cjs/features/spa/aggregate/interaction-node.test.js +16 -0
  120. package/dist/cjs/features/spa/aggregate/interaction.js +98 -0
  121. package/dist/cjs/features/spa/aggregate/serializer.js +147 -0
  122. package/dist/cjs/features/spa/constants.js +53 -0
  123. package/dist/cjs/features/spa/index.js +12 -0
  124. package/dist/cjs/features/spa/instrument/index.js +114 -0
  125. package/dist/cjs/features/utils/aggregate-base.js +13 -0
  126. package/dist/cjs/features/utils/feature-base.js +58 -0
  127. package/dist/cjs/features/utils/handler-cache.js +64 -0
  128. package/dist/cjs/features/utils/instrument-base.js +71 -0
  129. package/dist/cjs/features/utils/lazy-loader.js +44 -0
  130. package/dist/cjs/index.js +81 -58
  131. package/dist/cjs/loaders/agent.js +86 -0
  132. package/dist/cjs/loaders/api/api.js +109 -0
  133. package/dist/cjs/loaders/api/apiAsync.js +94 -0
  134. package/dist/cjs/loaders/browser-agent.js +29 -0
  135. package/dist/cjs/loaders/configure/configure.js +47 -0
  136. package/dist/cjs/loaders/features/enabled-features.js +19 -0
  137. package/dist/cjs/loaders/features/featureDependencies.js +32 -0
  138. package/dist/cjs/loaders/features/features.js +33 -0
  139. package/dist/cjs/loaders/micro-agent.js +93 -0
  140. package/dist/cjs/loaders/worker-agent.js +24 -0
  141. package/dist/esm/cdn/lite.js +12 -0
  142. package/dist/esm/cdn/polyfills/lite.js +7 -0
  143. package/dist/esm/cdn/polyfills/pro.js +7 -0
  144. package/dist/esm/cdn/polyfills/spa.js +7 -0
  145. package/dist/esm/cdn/polyfills.js +17 -0
  146. package/dist/esm/cdn/pro.js +17 -0
  147. package/dist/esm/cdn/spa.js +17 -0
  148. package/dist/esm/cdn/worker.js +14 -0
  149. package/dist/esm/common/aggregate/aggregator.js +161 -0
  150. package/dist/esm/common/browser-version/firefox-version.js +10 -0
  151. package/dist/esm/common/browser-version/ios-version.js +10 -0
  152. package/dist/esm/common/config/config.js +11 -0
  153. package/dist/esm/common/config/state/configurable.js +25 -0
  154. package/dist/esm/common/config/state/info.js +42 -0
  155. package/dist/esm/common/config/state/init.js +78 -0
  156. package/dist/esm/common/config/state/loader-config.js +21 -0
  157. package/dist/esm/common/config/state/originals.js +2 -0
  158. package/dist/esm/common/config/state/runtime.js +41 -0
  159. package/dist/esm/common/constants/environment-variables.js +11 -0
  160. package/dist/esm/common/context/shared-context.js +18 -0
  161. package/dist/esm/common/deny-list/deny-list.js +101 -0
  162. package/dist/esm/common/drain/drain.js +119 -0
  163. package/dist/esm/common/event-emitter/contextual-ee.js +142 -0
  164. package/dist/esm/common/event-emitter/handle.js +16 -0
  165. package/dist/esm/common/event-emitter/register-handler.js +19 -0
  166. package/dist/esm/common/event-listener/event-listener-opts.js +39 -0
  167. package/dist/esm/common/harvest/harvest-scheduler.js +105 -0
  168. package/dist/esm/common/harvest/harvest.js +228 -0
  169. package/dist/esm/common/ids/id.js +23 -0
  170. package/dist/esm/common/ids/unique-id.js +75 -0
  171. package/dist/esm/common/metrics/framework-detection.js +66 -0
  172. package/dist/esm/common/metrics/paint-metrics.js +6 -0
  173. package/dist/esm/common/serialize/bel-serializer.js +80 -0
  174. package/dist/esm/common/timing/nav-timing.js +67 -0
  175. package/dist/esm/common/timing/now.js +9 -0
  176. package/dist/esm/common/unload/eol.js +62 -0
  177. package/dist/esm/common/url/clean-url.js +10 -0
  178. package/dist/esm/common/url/encode.js +71 -0
  179. package/dist/esm/common/url/location.js +8 -0
  180. package/dist/esm/common/url/parse-url.js +60 -0
  181. package/dist/esm/common/url/protocol.js +17 -0
  182. package/dist/esm/common/util/console.js +11 -0
  183. package/dist/esm/common/util/data-size.js +19 -0
  184. package/dist/esm/common/util/feature-flags.js +33 -0
  185. package/dist/esm/common/util/get-or-set.js +33 -0
  186. package/dist/esm/common/util/global-scope.js +44 -0
  187. package/dist/esm/common/util/map-own.js +18 -0
  188. package/dist/esm/common/util/obfuscate.js +67 -0
  189. package/dist/esm/common/util/reduce.js +16 -0
  190. package/dist/esm/common/util/s-hash.js +13 -0
  191. package/dist/esm/common/util/single.js +16 -0
  192. package/dist/esm/common/util/stringify.js +42 -0
  193. package/dist/esm/common/util/submit-data.js +91 -0
  194. package/dist/esm/common/util/traverse.js +35 -0
  195. package/dist/esm/common/util/user-agent.js +48 -0
  196. package/dist/esm/common/window/load.js +12 -0
  197. package/dist/esm/common/window/nreum.js +91 -0
  198. package/dist/esm/common/window/page-visibility.js +23 -0
  199. package/dist/esm/common/window/session-storage.js +36 -0
  200. package/dist/esm/common/window/supports-performance-observer.js +9 -0
  201. package/dist/esm/common/window/top-level-callers.js +17 -0
  202. package/dist/esm/common/wrap/index.js +14 -0
  203. package/dist/esm/common/wrap/wrap-events.js +97 -0
  204. package/dist/esm/common/wrap/wrap-fetch.js +105 -0
  205. package/dist/esm/common/wrap/wrap-function.js +257 -0
  206. package/dist/esm/common/wrap/wrap-history.js +48 -0
  207. package/dist/esm/common/wrap/wrap-jsonp.js +122 -0
  208. package/dist/esm/common/wrap/wrap-mutation.js +54 -0
  209. package/dist/esm/common/wrap/wrap-promise.js +153 -0
  210. package/dist/esm/common/wrap/wrap-raf.js +48 -0
  211. package/dist/esm/common/wrap/wrap-timer.js +63 -0
  212. package/dist/esm/common/wrap/wrap-xhr.js +199 -0
  213. package/dist/esm/features/ajax/aggregate/index.js +218 -0
  214. package/dist/esm/features/ajax/constants.js +2 -0
  215. package/dist/esm/features/ajax/index.js +1 -0
  216. package/dist/esm/features/ajax/instrument/distributed-tracing.js +137 -0
  217. package/dist/esm/features/ajax/instrument/index.js +330 -0
  218. package/dist/esm/features/ajax/instrument/response-size.js +19 -0
  219. package/dist/esm/features/jserrors/aggregate/canonical-function-name.js +12 -0
  220. package/dist/esm/features/jserrors/aggregate/canonical-function-name.test.js +28 -0
  221. package/dist/esm/features/jserrors/aggregate/compute-stack-trace.js +209 -0
  222. package/dist/esm/features/jserrors/aggregate/compute-stack-trace.test.js +255 -0
  223. package/dist/esm/features/jserrors/aggregate/format-stack-trace.js +29 -0
  224. package/dist/esm/features/jserrors/aggregate/format-stack-trace.test.js +37 -0
  225. package/dist/esm/features/jserrors/aggregate/index.js +260 -0
  226. package/dist/esm/features/jserrors/aggregate/string-hash-code.js +17 -0
  227. package/dist/esm/features/jserrors/aggregate/string-hash-code.test.js +24 -0
  228. package/dist/esm/features/jserrors/constants.js +3 -0
  229. package/dist/esm/features/jserrors/index.js +1 -0
  230. package/dist/esm/features/jserrors/instrument/debug.js +38 -0
  231. package/dist/esm/features/jserrors/instrument/index.js +150 -0
  232. package/dist/esm/features/metrics/aggregate/index.js +129 -0
  233. package/dist/esm/features/metrics/constants.js +6 -0
  234. package/dist/esm/features/metrics/index.js +1 -0
  235. package/dist/esm/features/metrics/instrument/index.js +13 -0
  236. package/dist/esm/features/metrics/instrument/workers-helper.js +116 -0
  237. package/dist/esm/features/page_action/aggregate/index.js +105 -0
  238. package/dist/esm/features/page_action/constants.js +2 -0
  239. package/dist/esm/features/page_action/index.js +1 -0
  240. package/dist/esm/features/page_action/instrument/index.js +14 -0
  241. package/dist/esm/features/page_view_event/aggregate/index.js +124 -0
  242. package/dist/esm/features/page_view_event/aggregate/initialized-features.js +34 -0
  243. package/dist/esm/features/page_view_event/constants.js +5 -0
  244. package/dist/esm/features/page_view_event/index.js +1 -0
  245. package/dist/esm/features/page_view_event/instrument/index.js +29 -0
  246. package/dist/esm/features/page_view_timing/aggregate/index.js +258 -0
  247. package/dist/esm/features/page_view_timing/constants.js +2 -0
  248. package/dist/esm/features/page_view_timing/first-paint.js +43 -0
  249. package/dist/esm/features/page_view_timing/index.js +1 -0
  250. package/dist/esm/features/page_view_timing/instrument/index.js +28 -0
  251. package/dist/esm/features/page_view_timing/long-tasks.js +69 -0
  252. package/dist/esm/features/session_trace/aggregate/index.js +366 -0
  253. package/dist/esm/features/session_trace/constants.js +14 -0
  254. package/dist/esm/features/session_trace/index.js +1 -0
  255. package/dist/esm/features/session_trace/instrument/index.js +123 -0
  256. package/dist/esm/features/spa/aggregate/index.js +674 -0
  257. package/dist/esm/features/spa/aggregate/interaction-node.js +78 -0
  258. package/dist/esm/features/spa/aggregate/interaction-node.test.js +14 -0
  259. package/dist/esm/features/spa/aggregate/interaction.js +92 -0
  260. package/dist/esm/features/spa/aggregate/serializer.js +139 -0
  261. package/dist/esm/features/spa/constants.js +25 -0
  262. package/dist/esm/features/spa/index.js +1 -0
  263. package/dist/esm/features/spa/instrument/index.js +104 -0
  264. package/dist/esm/features/utils/aggregate-base.js +6 -0
  265. package/dist/esm/features/utils/feature-base.js +51 -0
  266. package/dist/esm/features/utils/handler-cache.js +57 -0
  267. package/dist/esm/features/utils/instrument-base.js +69 -0
  268. package/dist/esm/features/utils/lazy-loader.js +37 -0
  269. package/dist/esm/index.js +15 -0
  270. package/dist/esm/loaders/agent.js +77 -0
  271. package/dist/esm/loaders/api/api.js +104 -0
  272. package/dist/esm/loaders/api/apiAsync.js +88 -0
  273. package/dist/esm/loaders/browser-agent.js +23 -0
  274. package/dist/esm/loaders/configure/configure.js +41 -0
  275. package/dist/esm/loaders/features/enabled-features.js +13 -0
  276. package/dist/esm/loaders/features/featureDependencies.js +25 -0
  277. package/dist/esm/loaders/features/features.js +25 -0
  278. package/dist/esm/loaders/micro-agent.js +86 -0
  279. package/dist/esm/loaders/worker-agent.js +18 -0
  280. package/package.json +204 -71
  281. package/types.ts +221 -0
  282. package/dist/bundled/es5/index.js +0 -2
  283. package/dist/bundled/es5/index.js.map +0 -1
  284. package/dist/bundled/es6/index.js +0 -2
  285. package/dist/bundled/es6/index.js.map +0 -1
  286. package/dist/cjs/index.d.ts +0 -19
  287. package/dist/cjs/index.js.map +0 -1
  288. package/dist/cjs/types.d.ts +0 -94
  289. package/dist/cjs/types.js +0 -28
  290. package/dist/cjs/types.js.map +0 -1
  291. package/dist/cjs/utils/api/api.d.ts +0 -10
  292. package/dist/cjs/utils/api/api.js +0 -40
  293. package/dist/cjs/utils/api/api.js.map +0 -1
  294. package/dist/cjs/utils/config/build-configs.d.ts +0 -6
  295. package/dist/cjs/utils/config/build-configs.js +0 -68
  296. package/dist/cjs/utils/config/build-configs.js.map +0 -1
  297. package/dist/cjs/utils/features/features.d.ts +0 -5
  298. package/dist/cjs/utils/features/features.js +0 -14
  299. package/dist/cjs/utils/features/features.js.map +0 -1
  300. package/dist/cjs/utils/features/initialize.d.ts +0 -5
  301. package/dist/cjs/utils/features/initialize.js +0 -51
  302. package/dist/cjs/utils/features/initialize.js.map +0 -1
  303. package/dist/es/index.d.ts +0 -19
  304. package/dist/es/index.js +0 -55
  305. package/dist/es/index.js.map +0 -1
  306. package/dist/es/types.d.ts +0 -94
  307. package/dist/es/types.js +0 -24
  308. package/dist/es/types.js.map +0 -1
  309. package/dist/es/utils/api/api.d.ts +0 -10
  310. package/dist/es/utils/api/api.js +0 -36
  311. package/dist/es/utils/api/api.js.map +0 -1
  312. package/dist/es/utils/config/build-configs.d.ts +0 -6
  313. package/dist/es/utils/config/build-configs.js +0 -64
  314. package/dist/es/utils/config/build-configs.js.map +0 -1
  315. package/dist/es/utils/features/features.d.ts +0 -5
  316. package/dist/es/utils/features/features.js +0 -10
  317. package/dist/es/utils/features/features.js.map +0 -1
  318. package/dist/es/utils/features/initialize.d.ts +0 -5
  319. package/dist/es/utils/features/initialize.js +0 -24
  320. package/dist/es/utils/features/initialize.js.map +0 -1
  321. package/dist/umd/index.d.ts +0 -19
  322. package/dist/umd/index.js +0 -69
  323. package/dist/umd/index.js.map +0 -1
  324. package/dist/umd/types.d.ts +0 -94
  325. package/dist/umd/types.js +0 -38
  326. package/dist/umd/types.js.map +0 -1
  327. package/dist/umd/utils/api/api.d.ts +0 -10
  328. package/dist/umd/utils/api/api.js +0 -50
  329. package/dist/umd/utils/api/api.js.map +0 -1
  330. package/dist/umd/utils/config/build-configs.d.ts +0 -6
  331. package/dist/umd/utils/config/build-configs.js +0 -78
  332. package/dist/umd/utils/config/build-configs.js.map +0 -1
  333. package/dist/umd/utils/features/features.d.ts +0 -5
  334. package/dist/umd/utils/features/features.js +0 -24
  335. package/dist/umd/utils/features/features.js.map +0 -1
  336. package/dist/umd/utils/features/initialize.d.ts +0 -5
  337. package/dist/umd/utils/features/initialize.js +0 -63
  338. package/dist/umd/utils/features/initialize.js.map +0 -1
  339. package/dist/webpack-analysis.html +0 -38
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://NRBA/webpack/universalModuleDefinition","webpack://NRBA/NRBA/webpack/universalModuleDefinition","webpack://NRBA/NRBA/browser-agent-core/common/aggregate/aggregator.js","webpack://NRBA/NRBA/browser-agent-core/common/browser-version/firefox-version.js","webpack://NRBA/NRBA/browser-agent-core/common/browser-version/ie-version.js","webpack://NRBA/NRBA/browser-agent-core/common/config/state/configurable.js","webpack://NRBA/NRBA/browser-agent-core/common/config/state/info.js","webpack://NRBA/NRBA/browser-agent-core/common/config/state/init.js","webpack://NRBA/NRBA/browser-agent-core/common/config/state/loader-config.js","webpack://NRBA/NRBA/browser-agent-core/common/config/state/originals.js","webpack://NRBA/NRBA/browser-agent-core/common/util/user-agent.js","webpack://NRBA/NRBA/browser-agent-core/common/config/state/runtime.js","webpack://NRBA/NRBA/browser-agent-core/common/context/shared-context.js","webpack://NRBA/NRBA/browser-agent-core/common/event-emitter/contextual-ee.js","webpack://NRBA/NRBA/browser-agent-core/common/event-emitter/handle.js","webpack://NRBA/NRBA/browser-agent-core/common/event-emitter/register-handler.js","webpack://NRBA/NRBA/browser-agent-core/common/event-listener/event-listener-opts.js","webpack://NRBA/NRBA/browser-agent-core/common/harvest/harvest-scheduler.js","webpack://NRBA/NRBA/browser-agent-core/common/cookie/nav-cookie.js","webpack://NRBA/NRBA/browser-agent-core/common/harvest/harvest.js","webpack://NRBA/NRBA/browser-agent-core/common/util/traverse.js","webpack://NRBA/NRBA/browser-agent-core/common/url/location.js","webpack://NRBA/NRBA/browser-agent-core/common/ids/unique-id.js","webpack://NRBA/NRBA/browser-agent-core/common/metrics/metrics.js","webpack://NRBA/NRBA/browser-agent-core/common/serialize/bel-serializer.js","webpack://NRBA/NRBA/browser-agent-core/common/timing/now.js","webpack://NRBA/NRBA/browser-agent-core/common/timing/performance-check.js","webpack://NRBA/NRBA/browser-agent-core/common/timing/start-time.js","webpack://NRBA/NRBA/browser-agent-core/common/timing/stopwatch.js","webpack://NRBA/NRBA/browser-agent-core/common/event-listener/add-e.js","webpack://NRBA/NRBA/browser-agent-core/common/unload/unload.js","webpack://NRBA/NRBA/browser-agent-core/common/util/single.js","webpack://NRBA/NRBA/browser-agent-core/common/url/clean-url.js","webpack://NRBA/NRBA/browser-agent-core/common/url/encode.js","webpack://NRBA/NRBA/browser-agent-core/common/url/parse-url.js","webpack://NRBA/NRBA/browser-agent-core/common/util/feature-base.js","webpack://NRBA/NRBA/browser-agent-core/common/util/get-or-set.js","webpack://NRBA/NRBA/browser-agent-core/common/util/map-own.js","webpack://NRBA/NRBA/browser-agent-core/common/window/win.js","webpack://NRBA/NRBA/browser-agent-core/common/url/protocol.js","webpack://NRBA/NRBA/browser-agent-core/common/util/obfuscate.js","webpack://NRBA/NRBA/browser-agent-core/common/util/reduce.js","webpack://NRBA/NRBA/browser-agent-core/common/util/s-hash.js","webpack://NRBA/NRBA/browser-agent-core/common/util/stringify.js","webpack://NRBA/NRBA/browser-agent-core/common/util/submit-data.js","webpack://NRBA/NRBA/browser-agent-core/common/window/nreum.js","webpack://NRBA/NRBA/browser-agent-core/common/window/supports-performance-observer.js","webpack://NRBA/NRBA/browser-agent-core/common/wrap/wrap-fetch.js","webpack://NRBA/NRBA/browser-agent-core/common/wrap/wrap-function.js","webpack://NRBA/NRBA/browser-agent-core/common/wrap/index.js","webpack://NRBA/NRBA/browser-agent-core/common/wrap/wrap-events.js","webpack://NRBA/NRBA/browser-agent-core/common/wrap/wrap-history.js","webpack://NRBA/NRBA/browser-agent-core/common/wrap/wrap-raf.js","webpack://NRBA/NRBA/browser-agent-core/common/wrap/wrap-timer.js","webpack://NRBA/NRBA/browser-agent-core/common/wrap/wrap-xhr.js","webpack://NRBA/NRBA/browser-agent-core/features/ajax/aggregate/deny-list.js","webpack://NRBA/NRBA/browser-agent-core/features/ajax/aggregate/index.js","webpack://NRBA/NRBA/browser-agent-core/common/ids/id.js","webpack://NRBA/NRBA/browser-agent-core/common/util/data-size.js","webpack://NRBA/NRBA/browser-agent-core/features/ajax/instrument/distributed-tracing.js","webpack://NRBA/NRBA/browser-agent-core/features/ajax/instrument/index.js","webpack://NRBA/NRBA/browser-agent-core/features/ajax/instrument/response-size.js","webpack://NRBA/NRBA/browser-agent-core/features/js-errors/aggregate/canonical-function-name.js","webpack://NRBA/NRBA/browser-agent-core/features/js-errors/aggregate/format-stack-trace.js","webpack://NRBA/NRBA/browser-agent-core/features/js-errors/aggregate/compute-stack-trace.js","webpack://NRBA/NRBA/browser-agent-core/features/js-errors/aggregate/string-hash-code.js","webpack://NRBA/NRBA/browser-agent-core/features/js-errors/aggregate/index.js","webpack://NRBA/NRBA/browser-agent-core/features/js-errors/instrument/index.js","webpack://NRBA/NRBA/browser-agent-core/features/page-action/aggregate/index.js","webpack://NRBA/NRBA/browser-agent-core/features/page-action/instrument/index.js","webpack://NRBA/NRBA/browser-agent-core/common/timing/nav-timing.js","webpack://NRBA/NRBA/browser-agent-core/common/metrics/paint-metrics.js","webpack://NRBA/NRBA/browser-agent-core/features/page-view-event/aggregate/index.js","webpack://NRBA/NRBA/browser-agent-core/common/window/load.js","webpack://NRBA/NRBA/browser-agent-core/features/page-view-event/instrument/index.js","webpack://NRBA/NRBA/browser-agent-core/features/page-view-timing/aggregate/index.js","webpack://NRBA/NRBA/browser-agent-core/common/window/visibility.js","webpack://NRBA/NRBA/browser-agent-core/features/page-view-timing/instrument/index.js","webpack://NRBA/NRBA/browser-agent-core/features/session-trace/aggregate/index.js","webpack://NRBA/NRBA/browser-agent-core/features/session-trace/instrument/index.js","webpack://NRBA/NRBA/browser-agent-core/node_modules/lodash._slice/index.js","webpack://NRBA/NRBA/node_modules/@newrelic/browser-agent-core/features/ sync ^\\.\\/.*\\/aggregate$","webpack://NRBA/NRBA/node_modules/@newrelic/browser-agent-core/features/ sync ^\\.\\/.*\\/instrument$","webpack://NRBA/NRBA/src/index.ts","webpack://NRBA/NRBA/src/types.ts","webpack://NRBA/NRBA/src/utils/api/api.ts","webpack://NRBA/NRBA/src/utils/config/build-configs.ts","webpack://NRBA/NRBA/src/utils/features/features.ts","webpack://NRBA/NRBA/src/utils/features/initialize.ts","webpack://NRBA/NRBA/webpack/bootstrap","webpack://NRBA/NRBA/webpack/runtime/compat get default export","webpack://NRBA/NRBA/webpack/runtime/define property getters","webpack://NRBA/NRBA/webpack/runtime/hasOwnProperty shorthand","webpack://NRBA/NRBA/webpack/runtime/make namespace object","webpack://NRBA/NRBA/webpack/startup","webpack://NRBA/webpack/bootstrap","webpack://NRBA/webpack/runtime/node module decorator","webpack://NRBA/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"NRBA\"] = factory();\n\telse\n\t\troot[\"NRBA\"] = factory();\n})(self, function() {\nreturn ","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"NRBA\"] = factory();\n\telse\n\t\troot[\"NRBA\"] = factory();\n})(self, () => {\nreturn ","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { SharedContext } from '../context/shared-context'\nimport { mapOwn } from '../util/map-own'\n\nexport class Aggregator extends SharedContext {\n constructor(parent) {\n super(parent)\n this.aggregatedData = {}\n }\n\n store(type, name, params, newMetrics, customParams) {\n var bucket = this.getBucket(type, name, params, customParams)\n bucket.metrics = aggregateMetrics(newMetrics, bucket.metrics)\n return bucket\n }\n\n merge(type, name, metrics, params, customParams) {\n var bucket = this.getBucket(type, name, params, customParams)\n\n if (!bucket.metrics) {\n bucket.metrics = metrics\n return\n }\n\n var oldMetrics = bucket.metrics\n oldMetrics.count += metrics.count\n\n // iterate through each new metric and merge\n mapOwn(metrics, function (key, value) {\n // count is a special case handled above\n if (key === 'count') return\n\n var oldMetric = oldMetrics[key]\n var newMetric = metrics[key]\n\n // handling the case where newMetric is a single-value first\n if (newMetric && !newMetric.c) {\n oldMetrics[key] = updateMetric(newMetric.t, oldMetric)\n } else { // newMetric is a metric object\n oldMetrics[key] = mergeMetric(newMetric, oldMetrics[key])\n }\n })\n }\n\n storeMetric(type, name, params, value) {\n var bucket = this.getBucket(type, name, params)\n bucket.stats = updateMetric(value, bucket.stats)\n return bucket\n }\n\n getBucket(type, name, params, customParams) {\n if (!this.aggregatedData[type]) this.aggregatedData[type] = {}\n var bucket = this.aggregatedData[type][name]\n if (!bucket) {\n bucket = this.aggregatedData[type][name] = { params: params || {} }\n if (customParams) {\n bucket.custom = customParams\n }\n }\n return bucket\n }\n\n get(type, name) {\n // if name is passed, get a single bucket\n if (name) return this.aggregatedData[type] && this.aggregatedData[type][name]\n // else, get all buckets of that type\n return this.aggregatedData[type]\n }\n\n // Like get, but for many types and it deletes the retrieved content from the aggregatedData\n take(types) {\n var results = {}\n var type = ''\n var hasData = false\n for (var i = 0; i < types.length; i++) {\n type = types[i]\n results[type] = toArray(this.aggregatedData[type])\n if (results[type].length) hasData = true\n delete this.aggregatedData[type]\n }\n return hasData ? results : null\n }\n}\n\nfunction aggregateMetrics(newMetrics, oldMetrics) {\n if (!oldMetrics) oldMetrics = { count: 0 }\n oldMetrics.count += 1\n mapOwn(newMetrics, function (key, value) {\n oldMetrics[key] = updateMetric(value, oldMetrics[key])\n })\n return oldMetrics\n}\n\nfunction updateMetric(value, metric) {\n // when there is no value, then send only count\n if (value == null) {\n return updateCounterMetric(metric)\n }\n\n // When there is only one data point, the c (count), min, max, and sos (sum of squares) params are superfluous.\n if (!metric) return { t: value }\n\n // but on the second data point, we need to calculate the other values before aggregating in new values\n if (!metric.c) {\n metric = createMetricObject(metric.t)\n }\n\n // at this point, metric is always uncondensed\n metric.c += 1\n metric.t += value\n metric.sos += value * value\n if (value > metric.max) metric.max = value\n if (value < metric.min) metric.min = value\n\n return metric\n}\n\nfunction updateCounterMetric(metric) {\n if (!metric) {\n metric = { c: 1 }\n } else {\n metric.c++\n }\n return metric\n}\n\nfunction mergeMetric(newMetric, oldMetric) {\n if (!oldMetric) return newMetric\n\n if (!oldMetric.c) {\n // oldMetric is a single-value\n oldMetric = createMetricObject(oldMetric.t)\n }\n\n oldMetric.min = Math.min(newMetric.min, oldMetric.min)\n oldMetric.max = Math.max(newMetric.max, oldMetric.max)\n oldMetric.t += newMetric.t\n oldMetric.sos += newMetric.sos\n oldMetric.c += newMetric.c\n\n return oldMetric\n}\n\n// take a value and create a metric object\nfunction createMetricObject(value) {\n return {\n t: value,\n min: value,\n max: value,\n sos: value * value,\n c: 1\n }\n}\n\nfunction toArray(obj) {\n if (typeof obj !== 'object') return []\n\n return mapOwn(obj, getValue)\n}\n\nfunction getValue(key, value) {\n return value\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/* eslint-disable no-useless-escape */\n\nexport var ffVersion = 0\nvar match = navigator.userAgent.match(/Firefox[\\/\\s](\\d+\\.\\d+)/)\nif (match) ffVersion = +match[1]\n// export default { ffVersion }\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nvar div = document.createElement('div')\n\ndiv.innerHTML = '<!--[if lte IE 6]><div></div><![endif]-->' +\n '<!--[if lte IE 7]><div></div><![endif]-->' +\n '<!--[if lte IE 8]><div></div><![endif]-->' +\n '<!--[if lte IE 9]><div></div><![endif]-->'\n\nvar len = div.getElementsByTagName('div').length\n\nexport var ieVersion\nif (len === 4) ieVersion = 6\nelse if (len === 3) ieVersion = 7\nelse if (len === 2) ieVersion = 8\nelse if (len === 1) ieVersion = 9\nelse ieVersion = 0\n","export class Configurable {\n constructor(obj, model) {\n if (!obj || typeof obj !== 'object') return console.error('setting a Configurable requires an object as input')\n if (!model || typeof model !== 'object') return console.error('setting a Configurable requires a model to set its initial properties')\n Object.assign(this, model)\n Object.entries(obj).forEach(([key, value]) => {\n if (Object.keys(model).includes(key)) this[key] = value\n })\n }\n}\n","import { defaults as nrDefaults, gosNREUMInitializedAgents } from '../../window/nreum'\nimport { Configurable } from './configurable'\n\nconst model = {\n // preset defaults\n beacon: nrDefaults.beacon,\n errorBeacon: nrDefaults.errorBeacon,\n // others must be populated by user\n licenseKey: undefined,\n applicationID: undefined,\n sa: undefined,\n queueTime: undefined,\n applicationTime: undefined,\n ttGuid: undefined,\n user: undefined,\n account: undefined,\n product: undefined,\n extra: undefined,\n jsAttributes: {},\n userAttributes: undefined,\n atts: undefined,\n transactionName: undefined,\n tNamePlain: undefined\n}\n\nconst _cache = {}\n\nexport function getInfo(id) {\n if (!id) throw new Error('All config objects require an agent identifier!')\n if (!_cache[id]) throw new Error(`Info for ${id} was never set`)\n return _cache[id]\n}\n\nexport function setInfo(id, obj) {\n if (!id) throw new Error('All config objects require an agent identifier!')\n _cache[id] = new Configurable(obj, model)\n gosNREUMInitializedAgents(id, _cache[id], 'info')\n}\n","\nimport { gosNREUMInitializedAgents } from '../../window/nreum'\nimport { Configurable } from './configurable'\n\nconst model = {\n privacy: { cookies_enabled: undefined },\n ajax: { deny_list: undefined },\n distributed_tracing: {\n enabled: undefined,\n exclude_newrelic_header: undefined,\n cors_use_newrelic_header: undefined,\n cors_use_tracecontext_headers: undefined,\n allowed_origins: undefined\n },\n page_view_timing: { enabled: undefined },\n ssl: undefined,\n obfuscate: undefined\n}\n\nconst _cache = {}\n\nexport function getConfiguration(id) {\n if (!id) throw new Error('All config objects require an agent identifier!')\n if (!_cache[id]) throw new Error(`Configuration for ${id} was never set`)\n return _cache[id]\n}\n\nexport function setConfiguration(id, obj) {\n if (!id) throw new Error('All config objects require an agent identifier!')\n _cache[id] = new Configurable(obj, model)\n gosNREUMInitializedAgents(id, _cache[id], 'config')\n}\n\nexport function getConfigurationValue(id, path) {\n if (!id) throw new Error('All config objects require an agent identifier!')\n var val = getConfiguration(id)\n if (val) {\n var parts = path.split('.')\n for (var i = 0; i < parts.length - 1; i++) {\n val = val[parts[i]]\n if (typeof val !== 'object') return\n }\n val = val[parts[parts.length - 1]]\n }\n return val\n}\n","import { gosNREUMInitializedAgents } from '../../window/nreum'\nimport { Configurable } from './configurable'\n\nconst model = {\n accountID: undefined,\n trustKey: undefined,\n agentID: undefined,\n licenseKey: undefined,\n applicationID: undefined,\n xpid: undefined\n}\n\nconst _cache = {}\n\nexport function getLoaderConfig(id) {\n if (!id) throw new Error('All config objects require an agent identifier!')\n if (!_cache[id]) throw new Error(`LoaderConfig for ${id} was never set`)\n return _cache[id]\n}\n\nexport function setLoaderConfig(id, obj) {\n if (!id) throw new Error('All config objects require an agent identifier!')\n _cache[id] = new Configurable(obj, model)\n gosNREUMInitializedAgents(id, _cache[id], 'loader_config')\n}\n","import { gosNREUMOriginals } from '../../window/nreum'\n\nexport const originals = gosNREUMOriginals().o\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Feature-detection is much preferred over using User Agent to detect browser.\n// However, there are cases where feature detection is not possible, for example\n// when a specific version of a browser has a bug that requires a workaround in just\n// that version.\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent#Browser_Name\nvar agentName = null\nvar agentVersion = null\nvar safari = /Version\\/(\\S+)\\s+Safari/\n\nif (navigator.userAgent) {\n var userAgent = navigator.userAgent\n var parts = userAgent.match(safari)\n\n if (parts && userAgent.indexOf('Chrome') === -1 &&\n userAgent.indexOf('Chromium') === -1) {\n agentName = 'Safari'\n agentVersion = parts[1]\n }\n}\n\n// export default {\n// agent: agentName,\n// version: agentVersion,\n// match: match\n// }\n\nexport { agentName as agent }\nexport { agentVersion as version }\n\nexport function match (name, version) {\n if (!agentName) {\n return false\n }\n\n if (name !== agentName) {\n return false\n }\n\n // version not provided, only match by name\n if (!version) {\n return true\n }\n\n // version provided, but not detected - not reliable match\n if (!agentVersion) {\n return false\n }\n\n var detectedParts = agentVersion.split('.')\n var requestedParts = version.split('.')\n for (var i = 0; i < requestedParts.length; i++) {\n if (requestedParts[i] !== detectedParts[i]) {\n return false\n }\n }\n\n return true\n}\n","import { ieVersion } from '../../browser-version/ie-version'\nimport { getLastTimestamp } from '../../timing/now'\nimport * as userAgent from '../../util/user-agent'\nimport { Configurable } from './configurable'\nimport { gosNREUMInitializedAgents } from '../../window/nreum'\n\nvar XHR = window.XMLHttpRequest\nvar XHR_PROTO = XHR && XHR.prototype\n\nconst model = {\n origin: '' + window.location,\n maxBytes: ieVersion === 6 ? 2000 : 30000,\n offset: getLastTimestamp(),\n features: {},\n customTransaction: undefined,\n onerror: undefined,\n releaseIds: undefined,\n xhrWrappable: XHR && XHR_PROTO && XHR_PROTO['addEventListener'] && !/CriOS/.test(navigator.userAgent),\n disabled: undefined,\n ptid: undefined,\n userAgent\n}\n\nconst _cache = {}\n\nexport function getRuntime(id) {\n if (!id) throw new Error('All config objects require an agent identifier!')\n if (!_cache[id]) throw new Error(`Runtime for ${id} was never set`)\n return _cache[id]\n}\n\nexport function setRuntime(id, obj) {\n if (!id) throw new Error('All config objects require an agent identifier!')\n _cache[id] = new Configurable(obj, model)\n gosNREUMInitializedAgents(id, _cache[id], 'runtime')\n}\n","const model = {\n agentIdentifier: ''\n}\n\nexport class SharedContext {\n constructor(context) {\n if (typeof context !== 'object') return console.error('shared context requires an object as input')\n this.sharedContext = {}\n Object.assign(this.sharedContext, model)\n Object.entries(context).forEach(([key, value]) => {\n if (Object.keys(model).includes(key)) this.sharedContext[key] = value\n })\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { gosNREUM } from '../window/nreum'\nimport { getOrSet } from '../util/get-or-set'\nimport { mapOwn } from '../util/map-own'\n\nvar ctxId = 'nr@context'\n\n// create global emitter instance that can be shared among bundles\nlet nr = gosNREUM()\nvar globalInstance\nif (nr.ee) {\n globalInstance = nr.ee\n} else {\n globalInstance = ee(undefined, 'globalEE')\n nr.ee = globalInstance\n}\n\n// export default ee()\nvar baseEE = ee(undefined, 'baseEE')\n\nexport { baseEE as ee }\n\nexport { globalInstance as global }\n\nfunction EventContext () {}\n\nfunction ee (old, debugId) {\n var handlers = {}\n var bufferGroupMap = {}\n var emitters = {}\n\n var emitter = {\n on: addEventListener,\n addEventListener: addEventListener,\n removeEventListener: removeEventListener,\n emit: emit,\n get: getOrCreate,\n listeners: listeners,\n context: context,\n buffer: bufferEventsByGroup,\n abort: abortIfNotLoaded,\n aborted: false,\n isBuffering: isBuffering,\n debugId\n }\n\n // buffer is associated with a base emitter, since there are two\n // (global and scoped to the current bundle), it is now part of the emitter\n if (!old) {\n emitter.backlog = {}\n }\n\n return emitter\n\n function context (contextOrStore) {\n if (contextOrStore && contextOrStore instanceof EventContext) {\n return contextOrStore\n } else if (contextOrStore) {\n return getOrSet(contextOrStore, ctxId, getNewContext)\n } else {\n return getNewContext()\n }\n }\n\n function emit (type, args, contextOrStore, force, bubble) {\n if (bubble !== false) bubble = true\n if (baseEE.aborted && !force) { return }\n if (old && bubble) old.emit(type, args, contextOrStore)\n // log(\"continue...\")\n\n var ctx = context(contextOrStore)\n var handlersArray = listeners(type)\n var len = handlersArray.length\n\n // Extremely verbose debug logging\n // if ([/^xhr/].map(function (match) {return type.match(match)}).filter(Boolean).length) {\n // log(type + ' args:')\n // log(args)\n // log(type + ' handlers array:')\n // log(handlersArray)\n // log(type + ' context:')\n // log(ctx)\n // log(type + ' ctxStore:')\n // log(ctxStore)\n // }\n\n // Apply each handler function in the order they were added\n // to the context with the arguments\n\n for (var i = 0; i < len; i++) handlersArray[i].apply(ctx, args)\n\n // log(bufferGroupMap[type])\n // Buffer after emitting for consistent ordering\n var bufferGroup = getBuffer()[bufferGroupMap[type]]\n if (bufferGroup) {\n bufferGroup.push([emitter, type, args, ctx])\n }\n\n // log(bufferGroup)\n\n // Return the context so that the module that emitted can see what was done.\n return ctx\n }\n\n function addEventListener (type, fn) {\n // Retrieve type from handlers, if it doesn't exist assign the default and retrieve it.\n handlers[type] = listeners(type).concat(fn)\n }\n\n function removeEventListener (type, fn) {\n var listeners = handlers[type]\n if (!listeners) return\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i] === fn) {\n listeners.splice(i, 1)\n }\n }\n }\n\n function listeners (type) {\n return handlers[type] || []\n }\n\n function getOrCreate (name) {\n return (emitters[name] = emitters[name] || ee(emitter, name))\n }\n\n function bufferEventsByGroup (types, group) {\n var eventBuffer = getBuffer()\n\n // do not buffer events if agent has been aborted\n if (emitter.aborted) return\n mapOwn(types, function (i, type) {\n group = group || 'feature'\n bufferGroupMap[type] = group\n if (!(group in eventBuffer)) {\n eventBuffer[group] = []\n }\n })\n }\n\n function isBuffering(type) {\n var bufferGroup = getBuffer()[bufferGroupMap[type]]\n return !!bufferGroup\n }\n\n // buffer is associated with a base emitter, since there are two\n // (global and scoped to the current bundle), it is now part of the emitter\n function getBuffer() {\n if (old) {\n return old.backlog\n }\n return emitter.backlog\n }\n}\n\n// get context object from store object, or create if does not exist\nexport function getOrSetContext(obj) {\n return getOrSet(obj, ctxId, getNewContext)\n}\n\nfunction getNewContext () {\n return new EventContext()\n}\n\n// abort should be called 30 seconds after the page has started running\n// We should drop our data and stop collecting if we still have a backlog, which\n// signifies the rest of the agent wasn't loaded\nfunction abortIfNotLoaded () {\n if (baseEE.backlog.api || baseEE.backlog.feature) {\n baseEE.aborted = true\n baseEE.backlog = {}\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ee as eePkg, global } from './contextual-ee'\nexport var handleEE = eePkg.get('handle')\nexport var globalEE = global.get('handle')\n\n// Exported for register-handler to attach to.\n// export default handle\nexport { globalHandle as global }\n\nexport function handle(type, args, ctx, group, ee) {\n if (ee) {\n ee.buffer([type], group)\n ee.emit(type, args, ctx)\n } else {\n handleEE.buffer([type], group)\n handleEE.emit(type, args, ctx)\n }\n}\n\nfunction globalHandle(type, args, ctx, group) {\n globalEE.buffer([type], group)\n globalEE.emit(type, args, ctx)\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { handleEE, globalEE } from './handle'\n\n// export default defaultRegister\nexport { globalRegister as global }\nexport { defaultRegister as registerHandler }\n\ndefaultRegister.on = registerWithSpecificEmitter\n\nvar handlers = defaultRegister.handlers = {}\nvar globalHandlers = globalRegister.handlers = {}\n\nexport function defaultRegister (type, handler, group, ee) {\n registerWithSpecificEmitter(ee || handleEE, handlers, type, handler, group)\n}\n\nfunction globalRegister (type, handler, group) {\n registerWithSpecificEmitter(globalEE, globalHandlers, type, handler, group)\n}\n\nfunction registerWithSpecificEmitter (ee, handlers, type, handler, group) {\n if (!group) group = 'feature'\n if (!ee) ee = handleEE\n\n if (ee.isBuffering(type)) {\n var groupHandlers = handlers[group] = handlers[group] || {}\n var list = groupHandlers[type] = groupHandlers[type] || []\n list.push([ee, handler])\n } else {\n ee.on(type, handler)\n }\n}\n","var supportsPassive = false\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get: function() {\n supportsPassive = true\n }\n })\n window.addEventListener('testPassive', null, opts)\n window.removeEventListener('testPassive', null, opts)\n} catch (e) {\n // do nothing\n}\n\nexport function eventListenerOpts(useCapture) {\n return supportsPassive ? {passive: true, capture: !!useCapture} : !!useCapture\n}\n\n// export default eventListenerOpts\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// import { getSubmitMethod, send, sendX } from './harvest'\nimport { submitData } from '../util/submit-data'\nimport { SharedContext } from '../context/shared-context'\nimport { Harvest } from './harvest'\nimport { subscribeToUnload } from '../unload/unload'\nimport { conditionallySet } from '../cookie/nav-cookie'\n\n/**\n * Periodically invokes harvest calls and handles retries\n */\nexport class HarvestScheduler extends SharedContext {\n constructor(endpoint, opts, parent) {\n super(parent) // gets any allowed properties from the parent and stores them in `sharedContext`\n this.endpoint = endpoint\n this.opts = opts || {}\n this.started = false\n this.timeoutHandle = null\n\n this.harvest = new Harvest(this.sharedContext)\n\n subscribeToUnload(() => {\n // if opts.onUnload is defined, these are special actions that are meant\n // to execute before attempting to send the final payload\n if (this.opts.onUnload) this.opts.onUnload()\n this.harvest.sendFinal()\n conditionallySet(this.sharedContext.agentIdentifier)\n })\n }\n\n startTimer(interval, initialDelay) {\n this.interval = interval\n this.started = true\n this.scheduleHarvest(initialDelay != null ? initialDelay : this.interval)\n }\n\n stopTimer() {\n this.started = false\n if (this.timeoutHandle) {\n clearTimeout(this.timeoutHandle)\n }\n }\n\n scheduleHarvest(delay, opts) {\n if (this.timeoutHandle) return\n var timer = this\n\n if (delay == null) {\n delay = this.interval\n }\n this.timeoutHandle = setTimeout(() => {\n timer.timeoutHandle = null\n timer.runHarvest(opts)\n }, delay * 1000)\n }\n\n runHarvest(opts) {\n var scheduler = this\n\n if (this.opts.getPayload) {\n var submitMethod = this.harvest.getSubmitMethod(this.endpoint, opts)\n if (!submitMethod) return false\n\n var retry = submitMethod.method === submitData.xhr\n var payload = this.opts.getPayload({ retry: retry })\n if (payload) {\n payload = Object.prototype.toString.call(payload) === '[object Array]' ? payload : [payload]\n for (var i = 0; i < payload.length; i++) {\n this.harvest.send(this.endpoint, payload[i], opts, submitMethod, onHarvestFinished, this.sharedContext.agentIdentifier)\n }\n }\n } else {\n this.harvest.sendX(this.endpoint, opts, onHarvestFinished, this.sharedContext.agentIdentifier)\n }\n\n if (this.started) {\n this.scheduleHarvest()\n }\n\n function onHarvestFinished(result) {\n scheduler.onHarvestFinished(opts, result)\n }\n }\n\n onHarvestFinished(opts, result) {\n if (this.opts.onFinished) {\n this.opts.onFinished(result)\n }\n\n if (result.sent && result.retry) {\n var delay = result.delay || this.opts.retryDelay\n // reschedule next harvest if should be delayed longer\n if (this.started && delay) {\n clearTimeout(this.timeoutHandle)\n this.timeoutHandle = null\n this.scheduleHarvest(delay, opts)\n } else if (!this.started && delay) {\n // if not running on a timer, schedule a single retry\n this.scheduleHarvest(delay, opts)\n }\n }\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { sHash } from '../util/s-hash'\nimport { navCookie } from '../timing/start-time'\nimport { getConfigurationValue } from '../config/config'\n\n// var sHash = require('./s-hash')\n// var startTime = require('./start-time')\n\n// functions are on object, so that they can be mocked\n// var exp = {\n// conditionallySet: conditionallySet,\n// setCookie: setCookie\n// }\n\n// module.exports = exp\n\nexport function conditionallySet(agentIdentifier) {\n // var areCookiesEnabled = true\n var areCookiesEnabled = getConfigurationValue(agentIdentifier, 'privacy.cookies_enabled')\n // if ('init' in NREUM && 'privacy' in NREUM.init) {\n // areCookiesEnabled = NREUM.init.privacy.cookies_enabled\n // }\n\n if (navCookie && areCookiesEnabled) {\n setCookie()\n }\n}\n\nexport function setCookie() {\n document.cookie = 'NREUM=s=' + Number(new Date()) + '&r=' + sHash(document.location.href) + '&p=' + sHash(document.referrer) + '; path=/'\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { mapOwn } from '../util/map-own'\nimport { obj as encodeObj, param as encodeParam } from '../url/encode'\nimport { stringify } from '../util/stringify'\nimport { submitData } from '../util/submit-data'\nimport { reduce } from '../util/reduce'\nimport { getLocation } from '../url/location'\nimport {getInfo, getConfigurationValue, getRuntime, getConfiguration} from '../config/config'\nimport { cleanURL } from '../url/clean-url'\nimport { now } from '../timing/now'\nimport { eventListenerOpts } from '../event-listener/event-listener-opts'\nimport { ieVersion } from '../browser-version/ie-version'\nimport { Obfuscator } from '../util/obfuscate'\nimport { applyFnToProps } from '../util/traverse'\nimport { SharedContext } from '../context/shared-context'\nimport pkg from '../../package.json'\n\nconst version = pkg.version\n// var version = '<VERSION>'\n// var jsonp = 'NREUM.setToken'\n// var _events = {}\nvar haveSendBeacon = !!navigator.sendBeacon\n\n// requiring ie version updates the IE version on the loader object\n// var ieVersion = require('./ie-version')\nexport var xhrUsable = ieVersion > 9 || ieVersion === 0\n\nexport class Harvest extends SharedContext {\n constructor(parent) {\n super(parent) // gets any allowed properties from the parent and stores them in `sharedContext`\n\n this.tooManyRequestsDelay = getConfigurationValue(this.sharedContext.agentIdentifier, 'harvest.tooManyRequestsDelay') || 60\n this.obfuscator = new Obfuscator(this.sharedContext)\n this.getScheme = () => (getConfigurationValue(this.sharedContext.agentIdentifier, 'ssl') === false) ? 'http' : 'https'\n\n this._events = {}\n }\n\n sendFinal() {\n var sents = mapOwn(this._events, (endpoint) => {\n return this.sendX(endpoint, { unload: true })\n })\n return reduce(sents, or)\n }\n\n sendX(endpoint, opts, cbFinished) {\n var submitMethod = getSubmitMethod(endpoint, opts)\n if (!submitMethod) return false\n var options = {\n retry: submitMethod.method === submitData.xhr\n }\n return this.obfuscator.shouldObfuscate() ? this.obfuscator.obfuscateAndSend(endpoint, this.createPayload(endpoint, options), opts, submitMethod, cbFinished) : this._send(endpoint, this.createPayload(endpoint, options), opts, submitMethod, cbFinished)\n }\n\n /**\n * Initiate a harvest call.\n *\n * @param {string} endpoint - The endpoint of the harvest (jserrors, events, resources etc.)\n * @param {object} nr - The loader singleton.\n *\n * @param {object} singlePayload - Object representing payload.\n * @param {object} singlePayload.qs - Map of values that should be sent as part of the request query string.\n * @param {string} singlePayload.body - String that should be sent as the body of the request.\n * @param {string} singlePayload.body.e - Special case of body used for browser interactions.\n *\n * @param {object} opts\n * @param {bool} opts.needResponse - Specify whether the caller expects a response data.\n * @param {bool} opts.unload - Specify whether the call is a final harvest during page unload.\n */\n send(endpoint, singlePayload, opts, submitMethod, cbFinished) {\n var makeBody = createAccumulator()\n var makeQueryString = createAccumulator()\n if (singlePayload.body) mapOwn(singlePayload.body, makeBody)\n if (singlePayload.qs) mapOwn(singlePayload.qs, makeQueryString)\n\n var payload = { body: makeBody(), qs: makeQueryString() }\n var caller = this.obfuscator.shouldObfuscate() ? this.obfuscator.obfuscateAndSend : this._send\n return caller(endpoint, payload, opts, submitMethod, cbFinished)\n }\n\n obfuscateAndSend(endpoint, payload, opts, submitMethod, cbFinished) {\n applyFnToProps(payload, (...args) => this.obfuscator.obfuscateString(...args), 'string', ['e'])\n return this._send(endpoint, payload, opts, submitMethod, cbFinished)\n }\n\n _send(endpoint, payload, opts, submitMethod, cbFinished) {\n var info = getInfo(this.sharedContext.agentIdentifier)\n if (!info.errorBeacon) return false\n\n if (!payload.body) {\n if (cbFinished) {\n cbFinished({ sent: false })\n }\n return false\n }\n\n if (!opts) opts = {}\n\n var url = this.getScheme() + '://' + info.errorBeacon + '/' + endpoint + '/1/' + info.licenseKey + this.baseQueryString()\n if (payload.qs) url += encodeObj(payload.qs, getRuntime(this.sharedContext.agentIdentifier).maxBytes)\n\n if (!submitMethod) {\n submitMethod = getSubmitMethod(endpoint, opts)\n }\n var method = submitMethod.method\n var useBody = submitMethod.useBody\n\n var body\n var fullUrl = url\n if (useBody && endpoint === 'events') {\n body = payload.body.e\n } else if (useBody) {\n body = stringify(payload.body)\n } else {\n fullUrl = url + encodeObj(payload.body, getRuntime(this.sharedContext.agentIdentifier).maxBytes)\n }\n\n var result = method(fullUrl, body)\n\n if (cbFinished && method === submitData.xhr) {\n var xhr = result\n xhr.addEventListener('load', function () {\n var result = { sent: true }\n if (this.status === 429) {\n result.retry = true\n result.delay = this.tooManyRequestsDelay\n } else if (this.status === 408 || this.status === 500 || this.status === 503) {\n result.retry = true\n }\n\n if (opts.needResponse) {\n result.responseText = this.responseText\n }\n cbFinished(result)\n }, eventListenerOpts(false))\n }\n\n // if beacon request failed, retry with an alternative method\n if (!result && method === submitData.beacon) {\n method = submitData.img\n result = method(url + encodeObj(payload.body, getRuntime(this.sharedContext.agentIdentifier).maxBytes))\n }\n\n return result\n }\n\n // The stuff that gets sent every time.\n baseQueryString() {\n var areCookiesEnabled = true\n const init = getConfiguration(this.sharedContext.agentIdentifier)\n var runtime = getRuntime(this.sharedContext.agentIdentifier)\n var info = getInfo(this.sharedContext.agentIdentifier)\n\n if ('privacy' in init) {\n areCookiesEnabled = init.privacy.cookies_enabled\n }\n\n var location = cleanURL(getLocation())\n var ref = this.obfuscator.shouldObfuscate() ? this.obfuscator.obfuscateString(location) : location\n\n return ([\n '?a=' + info.applicationID,\n encodeParam('sa', (info.sa ? '' + info.sa : '')),\n encodeParam('v', version),\n transactionNameParam(info),\n encodeParam('ct', runtime.customTransaction),\n '&rst=' + now(),\n '&ck=' + (areCookiesEnabled ? '1' : '0'),\n encodeParam('ref', ref),\n encodeParam('ptid', (runtime.ptid ? '' + runtime.ptid : ''))\n ].join(''))\n }\n\n createPayload(type, options) {\n var makeBody = createAccumulator()\n var makeQueryString = createAccumulator()\n var listeners = (this._events[type] && this._events[type] || [])\n\n for (var i = 0; i < listeners.length; i++) {\n var singlePayload = listeners[i](options)\n if (!singlePayload) continue\n if (singlePayload.body) mapOwn(singlePayload.body, makeBody)\n if (singlePayload.qs) mapOwn(singlePayload.qs, makeQueryString)\n }\n return { body: makeBody(), qs: makeQueryString() }\n }\n\n on(type, listener) {\n var listeners = (this._events[type] || (this._events[type] = []))\n listeners.push(listener)\n }\n\n resetListeners() {\n mapOwn(this._events, function (key) {\n this._events[key] = []\n })\n }\n}\n\nfunction or(a, b) { return a || b }\n\n// function createPayload(type, options) {\n// var makeBody = createAccumulator()\n// var makeQueryString = createAccumulator()\n// var listeners = (_events[type] && _events[type] || [])\n\n// for (var i = 0; i < listeners.length; i++) {\n// var singlePayload = listeners[i](options)\n// if (!singlePayload) continue\n// if (singlePayload.body) mapOwn(singlePayload.body, makeBody)\n// if (singlePayload.qs) mapOwn(singlePayload.qs, makeQueryString)\n// }\n// return { body: makeBody(), qs: makeQueryString() }\n// }\n\nexport function getSubmitMethod(endpoint, opts) {\n opts = opts || {}\n var method\n var useBody\n\n if (opts.needResponse) {\n if (xhrUsable) {\n useBody = true\n method = submitData.xhr\n } else {\n return false\n }\n } else if (opts.unload) {\n useBody = haveSendBeacon\n method = haveSendBeacon ? submitData.beacon : submitData.img\n } else {\n // `submitData.beacon` was removed, there is an upper limit to the\n // number of data allowed before it starts failing, so we save it for\n // unload data\n if (xhrUsable) {\n useBody = true\n method = submitData.xhr\n } else if (endpoint === 'events' || endpoint === 'jserrors') {\n method = submitData.img\n } else {\n return false\n }\n }\n\n return {\n method: method,\n useBody: useBody\n }\n}\n\n// Constructs the transaction name param for the beacon URL.\n// Prefers the obfuscated transaction name over the plain text.\n// Falls back to making up a name.\nfunction transactionNameParam(info) {\n if (info.transactionName) return encodeParam('to', info.transactionName)\n return encodeParam('t', info.tNamePlain || 'Unnamed Transaction')\n}\n\n// export function on(type, listener) {\n// var listeners = (_events[type] || (_events[type] = []))\n// listeners.push(listener)\n// }\n\n// export function resetListeners() {\n// mapOwn(_events, function (key) {\n// _events[key] = []\n// })\n// }\n\n// returns a function that can be called to accumulate values to a single object\n// when the function is called without parameters, then the accumulator is returned\nfunction createAccumulator() {\n var accumulator = {}\n var hasData = false\n return function (key, val) {\n if (val && val.length) {\n accumulator[key] = val\n hasData = true\n }\n if (hasData) return accumulator\n }\n}\n","// traverses an object and applies a fn to property values of a certain type\nexport function applyFnToProps(obj, fn, type, ignoreKeys) {\n if (!obj || typeof obj !== 'object') return obj\n type = type || 'string'\n ignoreKeys = ignoreKeys || []\n return traverse(obj)\n function traverse(obj) {\n for (var property in obj) {\n // eslint-disable-next-line\n if (obj.hasOwnProperty(property)) {\n if (typeof obj[property] === 'object') {\n traverse(obj[property])\n } else {\n if (typeof obj[property] === type && !shouldIgnore(property)) obj[property] = fn(obj[property])\n }\n }\n }\n return obj\n }\n\n function shouldIgnore(key) {\n var ignore = false\n for (var i = 0; i < ignoreKeys.length; i++) {\n if (ignoreKeys[i] === key) {\n ignore = true\n break\n }\n }\n return ignore\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// export default {\n// getLocation: getLocation\n// }\n\nexport function getLocation() {\n return '' + location\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// export default {\n// generateUuid: generateUuid,\n// generateSpanId: generateSpanId,\n// generateTraceId: generateTraceId\n// }\n\nexport function generateUuid () {\n var randomVals = null\n var rvIndex = 0\n var crypto = window.crypto || window.msCrypto\n if (crypto && crypto.getRandomValues) {\n randomVals = crypto.getRandomValues(new Uint8Array(31))\n }\n\n function getRandomValue () {\n if (randomVals) {\n // same as % 16\n return randomVals[rvIndex++] & 15\n } else {\n return Math.random() * 16 | 0\n }\n }\n\n // v4 UUID\n var template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n var id = ''\n var c\n for (var i = 0; i < template.length; i++) {\n c = template[i]\n if (c === 'x') {\n id += getRandomValue().toString(16)\n } else if (c === 'y') {\n // this is the uuid variant per spec (8, 9, a, b)\n // % 4, then shift to get values 8-11\n c = getRandomValue() & 0x3 | 0x8\n id += c.toString(16)\n } else {\n id += c\n }\n }\n\n return id\n}\n\n// 16-character hex string (per DT spec)\nexport function generateSpanId () {\n return generateRandomHexString(16)\n}\n\n// 32-character hex string (per DT spec)\nexport function generateTraceId() {\n return generateRandomHexString(32)\n}\n\nexport function generateRandomHexString(length) {\n var randomVals = null\n var rvIndex = 0\n var crypto = window.crypto || window.msCrypto\n if (crypto && crypto.getRandomValues && Uint8Array) {\n randomVals = crypto.getRandomValues(new Uint8Array(31))\n }\n\n var chars = []\n for (var i = 0; i < length; i++) {\n chars.push(getRandomValue().toString(16))\n }\n return chars.join('')\n\n function getRandomValue () {\n if (randomVals) {\n // same as % 16\n return randomVals[rvIndex++] & 15\n } else {\n return Math.random() * 16 | 0\n }\n }\n}\n","import { handle } from '../event-emitter/handle'\n\nvar SUPPORTABILITY_METRIC = 'sm'\nvar CUSTOM_METRIC = 'cm'\n\n/**\n * Records a supportabilityMetric (sm) using the value of a named property or as a counter without a value.\n * @param {string} name - Name of the metric, this will be used to create the parent name of the metric.\n * @param {number} [value] - The value of the metric, if none, will increment counter\n * @returns void\n */\nexport function recordSupportability(name, value) {\n var opts = [\n SUPPORTABILITY_METRIC,\n name,\n {name: name},\n value\n ]\n\n handle('storeMetric', opts, null, 'api')\n return opts\n}\n\n/**\n * Records a customMetric (cm) using the value of a named property or as a counter without a value.\n * @param {string} name - Name of the metric, this will be used to create the parent name of the metric.\n * @param {Object.<string, number>} [value] - The named property upon which to aggregate values. This will generate the substring of the metric name. If none, will incrememnt counter\n * @returns void\n */\nexport function recordCustom(name, metrics) {\n var opts = [\n CUSTOM_METRIC,\n name,\n {name: name},\n metrics\n ]\n\n handle('storeEventMetrics', opts, null, 'api')\n return opts\n}\n\nexport var constants = {SUPPORTABILITY_METRIC: SUPPORTABILITY_METRIC, CUSTOM_METRIC: CUSTOM_METRIC}\n\n// export default {\n// constants,\n// recordSupportability: recordSupportability,\n// recordCustom: recordCustom\n// }\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { mapOwn } from '../util/map-own'\nimport { stringify } from '../util/stringify'\nimport { Obfuscator } from '../util/obfuscate'\n\nvar hasOwnProp = Object.prototype.hasOwnProperty\nvar MAX_ATTRIBUTES = 64\n\n// export default {\n// nullable,\n// numeric,\n// getAddStringContext,\n// addCustomAttributes\n// }\n\nexport function nullable (val, fn, comma) {\n return val || val === 0 || val === ''\n ? fn(val) + (comma ? ',' : '')\n : '!'\n}\n\nexport function numeric (n, noDefault) {\n if (noDefault) {\n return Math.floor(n).toString(36)\n }\n return (n === undefined || n === 0) ? '' : Math.floor(n).toString(36)\n}\n\nexport function getAddStringContext (agentIdentifier) {\n // eslint-disable-next-line\n var stringTable = Object.hasOwnProperty('create') ? Object.create(null) : {}\n var stringTableIdx = 0\n\n return addString\n\n function addString(str) {\n if (typeof str === 'undefined' || str === '') return ''\n var obfuscator = new Obfuscator({agentIdentifier: agentIdentifier})\n str = String(str)\n if (obfuscator.shouldObfuscate()) str = obfuscator.obfuscateString(str)\n if (hasOwnProp.call(stringTable, str)) {\n return numeric(stringTable[str], true)\n } else {\n stringTable[str] = stringTableIdx++\n return quoteString(str)\n }\n }\n}\n\nexport function addCustomAttributes (attrs, addString) {\n var attrParts = []\n\n mapOwn(attrs, function (key, val) {\n if (attrParts.length >= MAX_ATTRIBUTES) return\n var type = 5\n var serializedValue\n // add key to string table first\n key = addString(key)\n\n switch (typeof val) {\n case 'object':\n if (val) {\n // serialize objects to strings\n serializedValue = addString(stringify(val))\n } else {\n // null attribute type\n type = 9\n }\n break\n case 'number':\n type = 6\n // make sure numbers contain a `.` so they are parsed as doubles\n serializedValue = val % 1 ? val : val + '.'\n break\n case 'boolean':\n type = val ? 7 : 8\n break\n case 'undefined':\n // we treat undefined as a null attribute (since dirac does not have a concept of undefined)\n type = 9\n break\n default:\n serializedValue = addString(val)\n }\n\n attrParts.push([type, key + (serializedValue ? ',' + serializedValue : '')])\n })\n\n return attrParts\n}\n\nvar escapable = /([,\\\\;])/g\n\nfunction quoteString (str) {\n return \"'\" + str.replace(escapable, '\\\\$1')\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {exists} from './performance-check'\n\nvar lastTimestamp = new Date().getTime()\nvar offset = lastTimestamp\n\n// export default now\n\nexport function now () {\n if (exists && performance.now) {\n return Math.round(performance.now())\n }\n // ensure a new timestamp is never smaller than a previous timestamp\n return (lastTimestamp = Math.max(new Date().getTime(), lastTimestamp)) - offset\n}\n\nexport function getLastTimestamp() {\n return lastTimestamp\n}\n\nexport function setOffset (val) {\n offset = val\n}\n\nexport function getOffset () {\n return offset\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nexport const exists = typeof (window.performance) !== 'undefined' && window.performance.timing && typeof (window.performance.timing.navigationStart) !== 'undefined'\n// export default {\n// exists\n// }\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Use various techniques to determine the time at which this page started and whether to capture navigation timing information\n\nimport {sHash} from '../util/s-hash'\nimport { mark } from './stopwatch'\nimport { ffVersion } from '../browser-version/firefox-version'\nimport { setOffset } from './now'\nimport { exists as performanceCheckExists } from './performance-check'\n\nexport let navCookie = true\n\nfindStartTime()\n\nexport function findStartTime () {\n var starttime = findStartWebTiming() || findStartCookie()\n\n if (!starttime) return\n\n mark('starttime', starttime)\n // Refine loader.offset\n // offset = starttime\n setOffset(starttime)\n}\n\n// Find the start time from the Web Timing 'performance' object.\n// http://test.w3.org/webperf/specs/NavigationTiming/\n// http://blog.chromium.org/2010/07/do-you-know-how-slow-your-web-page-is.html\nfunction findStartWebTiming () {\n // FF 7/8 has a bug with the navigation start time, so use cookie instead of native interface\n if (ffVersion && ffVersion < 9) return\n\n if (performanceCheckExists) {\n // note that we don't need to use a cookie to record navigation start time\n navCookie = false\n return window.performance.timing.navigationStart\n }\n}\n\n// Find the start time based on a cookie set by Episodes in the unload handler.\nfunction findStartCookie () {\n var aCookies = document.cookie.split(' ')\n\n for (var i = 0; i < aCookies.length; i++) {\n if (aCookies[i].indexOf('NREUM=') === 0) {\n var startPage\n var referrerPage\n var aSubCookies = aCookies[i].substring('NREUM='.length).split('&')\n var startTime\n var bReferrerMatch\n\n for (var j = 0; j < aSubCookies.length; j++) {\n if (aSubCookies[j].indexOf('s=') === 0) {\n startTime = aSubCookies[j].substring(2)\n } else if (aSubCookies[j].indexOf('p=') === 0) {\n referrerPage = aSubCookies[j].substring(2)\n // if the sub-cookie is not the last cookie it will have a trailing ';'\n if (referrerPage.charAt(referrerPage.length - 1) === ';') {\n referrerPage = referrerPage.substr(0, referrerPage.length - 1)\n }\n } else if (aSubCookies[j].indexOf('r=') === 0) {\n startPage = aSubCookies[j].substring(2)\n // if the sub-cookie is not the last cookie it will have a trailing ';'\n if (startPage.charAt(startPage.length - 1) === ';') {\n startPage = startPage.substr(0, startPage.length - 1)\n }\n }\n }\n\n if (startPage) {\n var docReferrer = sHash(document.referrer)\n bReferrerMatch = (docReferrer == startPage) // eslint-disable-line\n if (!bReferrerMatch) {\n // Navigation did not start at the page that was just exited, check for re-load\n // (i.e. the page just exited is the current page and the referring pages match)\n bReferrerMatch = sHash(document.location.href) == startPage && docReferrer == referrerPage // eslint-disable-line\n }\n }\n if (bReferrerMatch && startTime) {\n var now = new Date().getTime()\n if ((now - startTime) > 60000) {\n return\n }\n return startTime\n }\n }\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {now, getOffset} from './now'\n\nvar marks = {}\n\n// module.exports = {\n// mark: mark,\n// measure: measure\n// }\n\nexport function mark (markName, markTime) {\n if (typeof markTime === 'undefined') markTime = (now() + getOffset())\n marks[markName] = markTime\n}\n\nexport function measure (aggregator, metricName, startMark, endMark) {\n var start = marks[startMark]\n var end = marks[endMark]\n\n if (typeof start === 'undefined' || typeof end === 'undefined') return\n\n aggregator.store('measures', metricName, { value: end - start })\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { eventListenerOpts } from './event-listener-opts'\n\n// Safely add an event listener to window in any browser\nexport function addE (sType, callback) {\n if ('addEventListener' in window) {\n return window.addEventListener(sType, callback, eventListenerOpts(false))\n } else if ('attachEvent' in window) {\n return window.attachEvent('on' + sType, callback)\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ffVersion } from '../browser-version/firefox-version'\nimport {single} from '../util/single'\nimport {addE} from '../event-listener/add-e'\n\n// export default subscribeToUnload\n\n// Used to subscribe a callback to when a page is being unloaded. This is used,\n// for example, to submit a final harvest.\nexport function subscribeToUnload (cb) {\n var oneCall = single(cb)\n\n // Firefox has a bug wherein a slow-loading resource loaded from the 'pagehide'\n // or 'unload' event will delay the 'load' event firing on the next page load.\n // In Firefox versions that support sendBeacon, this doesn't matter, because\n // we'll use it instead of an image load for our final harvest.\n //\n // Some Safari versions never fire the 'unload' event for pages that are being\n // put into the WebKit page cache, so we *need* to use the pagehide event for\n // the final submission from Safari.\n //\n // Generally speaking, we will try to submit our final harvest from either\n // pagehide or unload, whichever comes first, but in Firefox, we need to avoid\n // attempting to submit from pagehide to ensure that we don't slow down loading\n // of the next page.\n if (!ffVersion || navigator.sendBeacon) {\n addE('pagehide', oneCall)\n } else {\n addE('beforeunload', oneCall)\n }\n addE('unload', oneCall)\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport slice from 'lodash._slice'\n\n// export default single\n\nexport function single (fn) {\n var called = false\n var res\n\n return function () {\n if (called) return res\n called = true\n res = fn.apply(this, slice(arguments))\n return res\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nvar withHash = /([^?#]*)[^#]*(#[^?]*|$).*/\nvar withoutHash = /([^?#]*)().*/\nexport function cleanURL (url, keepHash) {\n return url.replace(keepHash ? withHash : withoutHash, '$1$2')\n}\n\n// export default cleanURL\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {mapOwn} from '../util/map-own'\nimport {stringify} from '../util/stringify'\n\n// Characters that are safe in a qs, but get encoded.\nvar charMap = {\n '%2C': ',',\n '%3A': ':',\n '%2F': '/',\n '%40': '@',\n '%24': '$',\n '%3B': ';'\n}\n\nvar charList = mapOwn(charMap, function (k) { return k })\nvar safeEncoded = new RegExp(charList.join('|'), 'g')\n\nfunction real (c) {\n return charMap[c]\n}\n\n// Encode as URI Component, then unescape anything that is ok in the\n// query string position.\nexport function qs (value) {\n if (value === null || value === undefined) return 'null'\n return encodeURIComponent(value).replace(safeEncoded, real)\n}\n\n// export default {obj: obj, fromArray: fromArray, qs: qs, param: param}\n\nexport function fromArray (qs, maxBytes) {\n var bytes = 0\n for (var i = 0; i < qs.length; i++) {\n bytes += qs[i].length\n if (bytes > maxBytes) return qs.slice(0, i).join('')\n }\n return qs.join('')\n}\n\nexport function obj (payload, maxBytes) {\n var total = 0\n var result = ''\n\n mapOwn(payload, function (feature, dataArray) {\n var intermediate = []\n var next\n var i\n\n if (typeof dataArray === 'string') {\n next = '&' + feature + '=' + qs(dataArray)\n total += next.length\n result += next\n } else if (dataArray.length) {\n total += 9\n for (i = 0; i < dataArray.length; i++) {\n next = qs(stringify(dataArray[i]))\n total += next.length\n if (typeof maxBytes !== 'undefined' && total >= maxBytes) break\n intermediate.push(next)\n }\n result += '&' + feature + '=%5B' + intermediate.join(',') + '%5D'\n }\n })\n return result\n}\n\n// Constructs an HTTP parameter to add to the BAM router URL\nexport function param (name, value) {\n if (value && typeof (value) === 'string') {\n return '&' + name + '=' + qs(value)\n }\n return ''\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nvar stringsToParsedUrls = {}\n\nexport function parseUrl (url) {\n if (url in stringsToParsedUrls) {\n return stringsToParsedUrls[url]\n }\n\n var urlEl = document.createElement('a')\n var location = window.location\n var ret = {}\n\n // Use an anchor dom element to resolve the url natively.\n urlEl.href = url\n\n ret.port = urlEl.port\n\n var firstSplit = urlEl.href.split('://')\n\n if (!ret.port && firstSplit[1]) {\n ret.port = firstSplit[1].split('/')[0].split('@').pop().split(':')[1]\n }\n if (!ret.port || ret.port === '0') ret.port = (firstSplit[0] === 'https' ? '443' : '80')\n\n // Host not provided in IE for relative urls\n ret.hostname = (urlEl.hostname || location.hostname)\n\n ret.pathname = urlEl.pathname\n\n ret.protocol = firstSplit[0]\n\n // Pathname sometimes doesn't have leading slash (IE 8 and 9)\n if (ret.pathname.charAt(0) !== '/') ret.pathname = '/' + ret.pathname\n\n // urlEl.protocol is ':' in old ie when protocol is not specified\n var sameProtocol = !urlEl.protocol || urlEl.protocol === ':' || urlEl.protocol === location.protocol\n var sameDomain = urlEl.hostname === document.domain && urlEl.port === location.port\n\n // urlEl.hostname is not provided by IE for relative urls, but relative urls are also same-origin\n ret.sameOrigin = sameProtocol && (!urlEl.hostname || sameDomain)\n\n // Only cache if url doesn't have a path\n if (ret.pathname === '/') {\n stringsToParsedUrls[url] = ret\n }\n\n return ret\n}\n","import {ee} from '../event-emitter/contextual-ee'\n\nexport class FeatureBase {\n constructor(agentIdentifier, aggregator) {\n this.agentIdentifier = agentIdentifier\n this.aggregator = aggregator\n this.ee = ee.get(agentIdentifier)\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nvar has = Object.prototype.hasOwnProperty\n\n// export default getOrSet\n\n// Always returns the current value of obj[prop], even if it has to set it first\nexport function getOrSet (obj, prop, getVal) {\n // If the value exists return it.\n if (has.call(obj, prop)) return obj[prop]\n\n var val = getVal()\n\n // Attempt to set the property so it's not enumerable\n if (Object.defineProperty && Object.keys) {\n try {\n Object.defineProperty(obj, prop, {\n value: val, // old IE inherits non-write-ability\n writable: true,\n enumerable: false\n })\n\n return val\n } catch (e) {\n // Can't report internal errors,\n // because GOS is a dependency of the reporting mechanisms\n }\n }\n\n // fall back to setting normally\n obj[prop] = val\n return val\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nvar has = Object.prototype.hasOwnProperty\n\n// export default mapOwn\n\nexport function mapOwn (obj, fn) {\n var results = []\n var key = ''\n var i = 0\n\n for (key in obj) {\n if (has.call(obj, key)) {\n results[i] = fn(key, obj[key])\n i += 1\n }\n }\n\n return results\n}\n","\nvar origWindow = window\nvar win = origWindow\n\nexport function getWindow() {\n return win\n}\n\nexport function setWindow(x) {\n win = x\n}\n\nexport function resetWindow() {\n win = origWindow\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { getWindow } from '../window/win'\nimport { recordSupportability } from '../metrics/metrics'\n\nexport const protocol = {\n isFileProtocol: isFileProtocol,\n supportabilityMetricSent: false\n}\n\nif (isFileProtocol()) {\n recordSupportability('Generic/FileProtocol/Detected')\n protocol.supportabilityMetricSent = true\n}\n\nfunction isFileProtocol () {\n var win = getWindow()\n return !!(win.location && win.location.protocol && win.location.protocol === 'file:')\n}\n","import { getConfigurationValue } from '../config/config'\nimport { SharedContext } from '../context/shared-context'\nimport { recordSupportability } from '../metrics/metrics'\nimport { protocol } from '../url/protocol'\n\nvar fileProtocolRule = {\n regex: /^file:\\/\\/(.*)/,\n replacement: 'file://OBFUSCATED'\n}\n\nlet recordedSupportability = false\n\nexport class Obfuscator extends SharedContext {\n constructor(parent) {\n super(parent) // gets any allowed properties from the parent and stores them in `sharedContext`\n if (!recordedSupportability) {\n if (this.shouldObfuscate()) recordSupportability('Generic/Obfuscate/Detected')\n if (this.shouldObfuscate() && !this.validateRules(this.getRules())) recordSupportability('Generic/Obfuscate/Invalid')\n recordedSupportability = true\n }\n }\n\n shouldObfuscate() {\n return this.getRules().length > 0\n }\n\n getRules() {\n var rules = []\n var configRules = getConfigurationValue(this.sharedContext.agentIdentifier, 'obfuscate') || []\n\n rules = rules.concat(configRules)\n\n if (protocol.isFileProtocol()) rules.push(fileProtocolRule)\n // could add additional runtime/environment-specific rules here\n\n return rules\n }\n\n // takes array of rule objects, logs warning and returns false if any portion of rule is invalid\n validateRules(rules) {\n var invalidReplacementDetected = false\n var invalidRegexDetected = false\n for (var i = 0; i < rules.length; i++) {\n if (!('regex' in rules[i])) {\n if (console && console.warn) console.warn('An obfuscation replacement rule was detected missing a \"regex\" value.')\n invalidRegexDetected = true\n } else if (typeof rules[i].regex !== 'string' && !(rules[i].regex.constructor === RegExp)) {\n if (console && console.warn) console.warn('An obfuscation replacement rule contains a \"regex\" value with an invalid type (must be a string or RegExp)')\n invalidRegexDetected = true\n }\n\n var replacement = rules[i].replacement\n if (replacement) {\n if (typeof replacement !== 'string') {\n if (console && console.warn) console.warn('An obfuscation replacement rule contains a \"replacement\" value with an invalid type (must be a string)')\n invalidReplacementDetected = true\n }\n }\n }\n\n return !invalidReplacementDetected && !invalidRegexDetected\n }\n\n // applies all regex obfuscation rules to provided URL string and returns the result\n obfuscateString(string, agentIdentifier) {\n // if string is empty string, null or not a string, return unmodified\n if (!string || typeof string !== 'string') return string\n\n var rules = this.getRules(agentIdentifier)\n var obfuscated = string\n\n // apply every rule to URL string\n for (var i = 0; i < rules.length; i++) {\n var regex = rules[i].regex\n var replacement = rules[i].replacement || '*'\n obfuscated = obfuscated.replace(regex, replacement)\n }\n return obfuscated\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport function reduce (arr, fn, next) {\n var i = 0\n if (typeof next === 'undefined') {\n next = arr[0]\n i = 1\n }\n\n for (i; i < arr.length; i++) {\n next = fn(next, arr[i])\n }\n\n return next\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport function sHash (s) {\n var i\n var h = 0\n\n for (i = 0; i < s.length; i++) {\n h += ((i + 1) * s.charCodeAt(i))\n }\n return Math.abs(h)\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {mapOwn} from './map-own'\nimport {ee} from '../event-emitter/contextual-ee'\n\nvar escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g // eslint-disable-line\nvar meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n}\n\n// export default stringify\n\nexport function stringify (val) {\n try {\n return str('', {'': val})\n } catch (e) {\n try {\n ee.emit('internal-error', [e])\n } catch (err) {\n // do nothing\n }\n }\n}\n\nfunction quote (string) {\n escapable.lastIndex = 0\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a]\n return typeof c === 'string' ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4)\n }) + '\"' : '\"' + string + '\"'\n}\n\nfunction str (key, holder) {\n var value = holder[key]\n\n switch (typeof value) {\n case 'string':\n return quote(value)\n case 'number':\n return isFinite(value) ? String(value) : 'null'\n case 'boolean':\n return String(value)\n case 'object':\n if (!value) { return 'null' }\n var partial = []\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n if (value instanceof window.Array || Object.prototype.toString.apply(value) === '[object Array]') {\n var length = value.length\n for (var i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null'\n }\n\n return partial.length === 0 ? '[]' : '[' + partial.join(',') + ']'\n }\n\n mapOwn(value, function (k) {\n var v = str(k, value)\n if (v) partial.push(quote(k) + ':' + v)\n })\n\n return partial.length === 0 ? '{}' : '{' + partial.join(',') + '}'\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const submitData = {}\n// export default submitData\n\nsubmitData.jsonp = function jsonp (url, jsonp) {\n var element = document.createElement('script')\n element.type = 'text/javascript'\n element.src = url + '&jsonp=' + jsonp\n var firstScript = document.getElementsByTagName('script')[0]\n firstScript.parentNode.insertBefore(element, firstScript)\n return element\n}\n\nsubmitData.xhr = function xhr (url, body, sync) {\n var request = new XMLHttpRequest()\n\n request.open('POST', url, !sync)\n try {\n // Set cookie\n if ('withCredentials' in request) request.withCredentials = true\n } catch (e) {\n // do nothing\n }\n\n request.setRequestHeader('content-type', 'text/plain')\n request.send(body)\n return request\n}\n\nsubmitData.xhrSync = function xhrSync (url, body) {\n return submitData.xhr(url, body, true)\n}\n\nsubmitData.img = function img (url) {\n var element = new Image()\n element.src = url\n return element\n}\n\nsubmitData.beacon = function (url, body) {\n return navigator.sendBeacon(url, body)\n}\n","\nimport { now } from '../timing/now'\n\nexport const defaults = {\n beacon: 'bam.nr-data.net',\n errorBeacon: 'bam.nr-data.net'\n}\n\nexport function gosNREUM() {\n if (!window.NREUM) {\n window.NREUM = {}\n }\n if (typeof (window.newrelic) === 'undefined') window.newrelic = window.NREUM\n return window.NREUM\n}\n\nexport function gosNREUMInfo() {\n let nr = gosNREUM()\n const externallySupplied = nr.info || {}\n\n nr.info = {\n beacon: defaults.beacon,\n errorBeacon: defaults.errorBeacon,\n ...externallySupplied\n }\n\n return nr\n}\n\nexport function gosNREUMLoaderConfig() {\n let nr = gosNREUM()\n const externallySupplied = nr.loader_config || {}\n\n nr.loader_config = {\n ...externallySupplied\n }\n\n return nr\n}\n\nexport function gosNREUMInit() {\n let nr = gosNREUM()\n const externallySupplied = nr.init || {}\n\n nr.init = {\n ...externallySupplied\n }\n\n return nr\n}\n\nexport function gosNREUMOriginals() {\n let nr = gosNREUM()\n if (!nr.o) {\n var win = window\n // var doc = win.document\n var XHR = win.XMLHttpRequest\n\n nr.o = {\n ST: setTimeout,\n SI: win.setImmediate,\n CT: clearTimeout,\n XHR: XHR,\n REQ: win.Request,\n EV: win.Event,\n PR: win.Promise,\n MO: win.MutationObserver,\n FETCH: win.fetch\n }\n }\n return nr\n}\n\nexport function gosNREUMInitializedAgents(id, obj, target) {\n let nr = gosNREUM()\n const externallySupplied = nr.initializedAgents || {}\n const curr = externallySupplied[id] || {}\n\n if (!Object.keys(curr).length) {\n curr.initializedAt = {\n ms: now(),\n date: new Date()\n }\n }\n\n nr.initializedAgents = {\n ...externallySupplied,\n [id]: {\n ...curr,\n [target]: obj\n }\n }\n\n return nr\n}\n\nexport function addToNREUM(fnName, fn) {\n let nr = gosNREUM()\n nr[fnName] = fn\n}\n\nexport function NREUMinitialized() {\n const nr = gosNREUM()\n nr.initialized = true\n}\n\nexport function gosCDN() {\n gosNREUMInfo()\n gosNREUMInit()\n gosNREUMOriginals()\n gosNREUMLoaderConfig()\n return gosNREUM()\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport function supportsPerformanceObserver () {\n return 'PerformanceObserver' in window && typeof window.PerformanceObserver === 'function'\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {ee as baseEE} from '../event-emitter/contextual-ee'\nimport slice from 'lodash._slice'\nimport {mapOwn} from '../util/map-own'\nimport { originals } from '../config/config'\n\n\nvar win = window\nvar prefix = 'fetch-'\nvar bodyPrefix = prefix + 'body-'\nvar bodyMethods = ['arrayBuffer', 'blob', 'json', 'text', 'formData']\nvar Req = win.Request\nvar Res = win.Response\n// var fetch = win.fetch\nvar proto = 'prototype'\nvar ctxId = 'nr@context'\n\nexport function wrapGlobal() {\n // since these are prototype methods, we can only wrap globally\n mapOwn(bodyMethods, function (i, name) {\n wrapPromiseMethod(baseEE, Req[proto], name, bodyPrefix)\n wrapPromiseMethod(baseEE, Res[proto], name, bodyPrefix)\n })\n\n var wrappedFetch = wrapFetch(baseEE)\n win.fetch = wrappedFetch\n}\n\nexport function wrapFetch(sharedEE) {\n var fn = originals.FETCH\n var ee = (sharedEE || baseEE)\n\n var wrappedFetch = wrapPromiseMethod(ee, fn, prefix)\n\n ee.on(prefix + 'end', function (err, res) {\n var ctx = this\n if (res) {\n var size = res.headers.get('content-length')\n if (size !== null) {\n ctx.rxSize = size\n }\n ee.emit(prefix + 'done', [null, res], ctx)\n } else {\n ee.emit(prefix + 'done', [err], ctx)\n }\n })\n\n return wrappedFetch\n}\n\n// this should probably go to the common module as a part of wrapping utility functions\nfunction wrapPromiseMethod(ee, fn, prefix) {\n return function nrWrapper() {\n var args = slice(arguments)\n\n var ctx = {}\n // we are wrapping args in an array so we can preserve the reference\n ee.emit(prefix + 'before-start', [args], ctx)\n var dtPayload\n if (ctx[ctxId] && ctx[ctxId].dt) dtPayload = ctx[ctxId].dt\n\n var promise = fn.apply(this, args)\n\n ee.emit(prefix + 'start', [args, dtPayload], promise)\n\n return promise.then(function (val) {\n ee.emit(prefix + 'end', [null, val], promise)\n return val\n }, function (err) {\n ee.emit(prefix + 'end', [err], promise)\n throw err\n })\n }\n}\n\n\nexport function scopedEE(sharedEE){\n return (sharedEE || baseEE).get('events')\n}","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {ee} from '../event-emitter/contextual-ee'\nimport slice from 'lodash._slice'\nvar flag = 'nr@original'\nvar has = Object.prototype.hasOwnProperty\nvar inWrapper = false\n\n// eslint-disable-next-line\nexport default createWrapperWithEmitter\n\nexport function createWrapperWithEmitter(emitter, always) {\n emitter || (emitter = ee)\n\n wrapFn.inPlace = inPlace\n wrapFn.flag = flag\n\n return wrapFn\n\n function wrapFn (fn, prefix, getContext, methodName, bubble) {\n // Unless fn is both wrappable and unwrapped, return it unchanged.\n if (notWrappable(fn)) return fn\n\n if (!prefix) prefix = ''\n\n nrWrapper[flag] = fn\n copy(fn, nrWrapper, emitter)\n return nrWrapper\n\n function nrWrapper () {\n var args\n var originalThis\n var ctx\n var result\n\n try {\n originalThis = this\n args = slice(arguments)\n\n if (typeof getContext === 'function') {\n ctx = getContext(args, originalThis)\n } else {\n ctx = getContext || {}\n }\n } catch (e) {\n report([e, '', [args, originalThis, methodName], ctx], emitter)\n }\n\n // Warning: start events may mutate args!\n safeEmit(prefix + 'start', [args, originalThis, methodName], ctx, bubble)\n\n try {\n result = fn.apply(originalThis, args)\n return result\n } catch (err) {\n safeEmit(prefix + 'err', [args, originalThis, err], ctx, bubble)\n\n // rethrow error so we don't effect execution by observing.\n throw err\n } finally {\n // happens no matter what.\n safeEmit(prefix + 'end', [args, originalThis, result], ctx, bubble)\n }\n }\n }\n\n function inPlace (obj, methods, prefix, getContext, bubble) {\n // log('methods!', methods)\n if (!prefix) prefix = ''\n // If prefix starts with '-' set this boolean to add the method name to\n // the prefix before passing each one to wrap.\n var prependMethodPrefix = (prefix.charAt(0) === '-')\n var fn\n var method\n var i\n\n for (i = 0; i < methods.length; i++) {\n method = methods[i]\n fn = obj[method]\n\n // Unless fn is both wrappable and unwrapped bail,\n // so we don't add extra properties with undefined values.\n if (notWrappable(fn)) continue\n\n obj[method] = wrapFn(fn, (prependMethodPrefix ? method + prefix : prefix), getContext, method, bubble)\n }\n }\n\n function safeEmit (evt, arr, store, bubble) {\n if (inWrapper && !always) return\n var prev = inWrapper\n inWrapper = true\n try {\n emitter.emit(evt, arr, store, always, bubble)\n } catch (e) {\n report([e, evt, arr, store], emitter)\n }\n inWrapper = prev\n }\n}\n\nfunction report (args, emitter) {\n emitter || (emitter = ee)\n try {\n emitter.emit('internal-error', args)\n } catch (err) {\n // do nothing\n }\n}\n\nfunction copy (from, to, emitter) {\n if (Object.defineProperty && Object.keys) {\n // Create accessors that proxy to actual function\n try {\n var keys = Object.keys(from)\n // eslint-disable-next-line\n keys.forEach(function (key) {\n Object.defineProperty(to, key, {\n get: function () { return from[key] },\n // eslint-disable-next-line\n set: function (val) { from[key] = val; return val }\n })\n })\n return to\n } catch (e) {\n report([e], emitter)\n }\n }\n // fall back to copying properties\n for (var i in from) {\n if (has.call(from, i)) {\n to[i] = from[i]\n }\n }\n return to\n}\n\nfunction notWrappable (fn) {\n return !(fn && fn instanceof Function && fn.apply && !fn[flag])\n}\n\nexport function wrapFunction(fn, wrapper) {\n var wrapped = wrapper(fn)\n wrapped[flag] = fn\n copy(fn, wrapped, ee)\n return wrapped\n}\n\nexport function wrapInPlace(obj, fnName, wrapper) {\n var fn = obj[fnName]\n obj[fnName] = wrapFunction(fn, wrapper)\n}\n\nexport function argsToArray() {\n var len = arguments.length\n var arr = new Array(len)\n for (var i = 0; i < len; ++i) {\n arr[i] = arguments[i]\n }\n return arr\n}\n","\nimport {wrapFetch as wf} from './wrap-fetch'\nimport {wrapTimer as wt} from './wrap-timer'\nimport {wrapRaf as wr} from './wrap-raf'\nimport {wrapHistory as wh} from './wrap-history'\nimport {wrapJsonP as wj} from './wrap-jsonp'\nimport {wrapMutation as wm} from './wrap-mutation'\nimport {wrapPromise as wp} from './wrap-promise'\nimport {wrapXhr as wx} from './wrap-xhr'\nimport {wrapEvents as we} from './wrap-events'\n\nexport {wrapGlobal as wrapGlobalFetch} from './wrap-fetch'\n\nexport function wrapEvents(sharedEE) {\n return we(sharedEE)\n}\n\nexport function wrapFetch(sharedEE) {\n return wf(sharedEE)\n}\n\nexport function wrapHistory(sharedEE) {\n return wh(sharedEE)\n}\n\nexport function wrapJson(sharedEE) {\n return wj(sharedEE)\n}\n\nexport function wrapMutation(sharedEE) {\n return wm(sharedEE)\n}\n\nexport function wrapPromise(sharedEE) {\n return wp(sharedEE)\n}\n\nexport function wrapRaf(sharedEE) {\n return wr(sharedEE)\n}\n\nexport function wrapTimer(sharedEE) {\n return wt(sharedEE)\n}\n\nexport function wrapXhr(sharedEE) {\n return wx(sharedEE)\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {ee as baseEE} from '../event-emitter/contextual-ee'\nimport { createWrapperWithEmitter as wfn } from './wrap-function'\nimport { getOrSet } from '../util/get-or-set'\n\nexport function wrapEvents(sharedEE) {\n var ee = scopedEE(sharedEE)\n var wrapFn = wfn(ee, true)\n\n var XHR = XMLHttpRequest\n var ADD_EVENT_LISTENER = 'addEventListener'\n var REMOVE_EVENT_LISTENER = 'removeEventListener'\n\n // Guard against instrumenting environments w/o necessary features\n if ('getPrototypeOf' in Object) {\n findAndWrapNode(document)\n findAndWrapNode(window)\n findAndWrapNode(XHR.prototype)\n // eslint-disable-next-line\n } else if (XHR.prototype.hasOwnProperty(ADD_EVENT_LISTENER)) {\n wrapNode(window)\n wrapNode(XHR.prototype)\n }\n\n ee.on(ADD_EVENT_LISTENER + '-start', function (args, target) {\n var originalListener = args[1]\n if (originalListener === null ||\n (typeof originalListener !== 'function' && typeof originalListener !== 'object')\n ) {\n return\n }\n\n var wrapped = getOrSet(originalListener, 'nr@wrapped', function () {\n var listener = {\n object: wrapHandleEvent,\n 'function': originalListener\n }[typeof originalListener]\n\n return listener ? wrapFn(listener, 'fn-', null, (listener.name || 'anonymous')) : originalListener\n\n function wrapHandleEvent() {\n if (typeof originalListener.handleEvent !== 'function') return\n return originalListener.handleEvent.apply(originalListener, arguments)\n }\n })\n\n this.wrapped = args[1] = wrapped\n })\n\n ee.on(REMOVE_EVENT_LISTENER + '-start', function (args) {\n args[1] = this.wrapped || args[1]\n })\n\n function findAndWrapNode(object) {\n var step = object\n // eslint-disable-next-line\n while (step && !step.hasOwnProperty(ADD_EVENT_LISTENER)) { step = Object.getPrototypeOf(step) }\n if (step) { wrapNode(step) }\n }\n\n function wrapNode(node) {\n wrapFn.inPlace(node, [ADD_EVENT_LISTENER, REMOVE_EVENT_LISTENER], '-', uniqueListener)\n }\n\n function uniqueListener(args, obj) {\n // Context for the listener is stored on itself.\n return args[1]\n }\n\n return ee\n}\n\nexport function scopedEE(sharedEE){\n return (sharedEE || baseEE).get('events')\n}\n\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// History pushState wrapper\nimport {ee as baseEE} from '../event-emitter/contextual-ee'\nimport {createWrapperWithEmitter as wfn} from './wrap-function'\n\nexport function wrapHistory(sharedEE){\n var ee = scopedEE(sharedEE)\n var wrapFn = wfn(ee)\n \n var prototype = window.history && window.history.constructor && window.history.constructor.prototype\n var object = window.history\n if (prototype && prototype.pushState && prototype.replaceState) {\n object = prototype\n }\n // log('wrap history')\n wrapFn.inPlace(object, [ 'pushState', 'replaceState' ], '-')\n\n return ee\n}\n3\nexport function scopedEE(sharedEE){\n return (sharedEE || baseEE).get('history')\n}","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Request Animation Frame wrapper\nimport { ee as baseEE } from '../event-emitter/contextual-ee'\nimport { createWrapperWithEmitter as wfn } from './wrap-function'\n\nexport function wrapRaf(sharedEE) {\n var ee = scopedEE(sharedEE)\n var wrapFn = wfn(ee)\n\n var equestAnimationFrame = 'equestAnimationFrame'\n\n wrapFn.inPlace(window, [\n 'r' + equestAnimationFrame,\n 'mozR' + equestAnimationFrame,\n 'webkitR' + equestAnimationFrame,\n 'msR' + equestAnimationFrame\n ], 'raf-')\n\n ee.on('raf-start', function (args) {\n // Wrap the callback handed to requestAnimationFrame\n args[0] = wrapFn(args[0], 'fn-')\n })\n\n return ee\n}\n\nexport function scopedEE(sharedEE){\n return (sharedEE || baseEE).get('raf')\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ee as baseEE } from '../event-emitter/contextual-ee'\nimport { createWrapperWithEmitter as wfn } from './wrap-function'\n\n//eslint-disable-next-line\nexport function wrapTimer(sharedEE) {\n var ee = scopedEE(sharedEE)\n var wrapFn = wfn(ee)\n\n var SET_TIMEOUT = 'setTimeout'\n var SET_INTERVAL = 'setInterval'\n var CLEAR_TIMEOUT = 'clearTimeout'\n var START = '-start'\n var DASH = '-'\n\n // log('wrap timer...')\n wrapFn.inPlace(window, [SET_TIMEOUT, 'setImmediate'], SET_TIMEOUT + DASH)\n wrapFn.inPlace(window, [SET_INTERVAL], SET_INTERVAL + DASH)\n wrapFn.inPlace(window, [CLEAR_TIMEOUT, 'clearImmediate'], CLEAR_TIMEOUT + DASH)\n\n ee.on(SET_INTERVAL + START, interval)\n ee.on(SET_TIMEOUT + START, timer)\n\n function interval(args, obj, type) {\n args[0] = wrapFn(args[0], 'fn-', null, type)\n }\n\n function timer(args, obj, type) {\n this.method = type\n this.timerDuration = isNaN(args[1]) ? 0 : +args[1]\n args[0] = wrapFn(args[0], 'fn-', this, type)\n }\n\n return ee\n}\n\nexport function scopedEE(sharedEE){\n return (sharedEE || baseEE).get('timer')\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// wrap-events patches XMLHttpRequest.prototype.addEventListener for us.\nimport './wrap-events'\n// import * as config from '../config'\nimport {ee as contextualEE} from '../event-emitter/contextual-ee'\nimport { eventListenerOpts } from '../event-listener/event-listener-opts'\nimport { createWrapperWithEmitter as wfn } from './wrap-function'\nimport { originals } from '../config/config'\n\n// eslint-disable-next-line\nexport function wrapXhr (sharedEE) {\n var baseEE = sharedEE || contextualEE\n var ee = scopedEE(baseEE)\n var wrapFn = wfn(ee)\n\n var OrigXHR = originals.XHR\n var MutationObserver = originals.MO\n var Promise = originals.PR\n var setImmediate = originals.SI\n\n var READY_STATE_CHANGE = 'readystatechange'\n\n var handlers = ['onload', 'onerror', 'onabort', 'onloadstart', 'onloadend', 'onprogress', 'ontimeout']\n var pendingXhrs = []\n\n var XHR = window.XMLHttpRequest = function (opts) {\n var xhr = new OrigXHR(opts)\n try {\n ee.emit('new-xhr', [xhr], xhr)\n xhr.addEventListener(READY_STATE_CHANGE, wrapXHR, eventListenerOpts(false))\n } catch (e) {\n try {\n ee.emit('internal-error', [e])\n } catch (err) {\n // do nothing\n }\n }\n return xhr\n }\n\n copy(OrigXHR, XHR)\n\n XHR.prototype = OrigXHR.prototype\n\n // log('wrap xhr...')\n wrapFn.inPlace(XHR.prototype, ['open', 'send'], '-xhr-', getObject)\n\n ee.on('send-xhr-start', function (args, xhr) {\n wrapOnreadystatechange(args, xhr)\n enqueuePendingXhr(xhr)\n })\n ee.on('open-xhr-start', wrapOnreadystatechange)\n\n function wrapOnreadystatechange(args, xhr) {\n wrapFn.inPlace(xhr, ['onreadystatechange'], 'fn-', getObject)\n }\n\n function wrapXHR() {\n var xhr = this\n var ctx = ee.context(xhr)\n\n if (xhr.readyState > 3 && !ctx.resolved) {\n ctx.resolved = true\n ee.emit('xhr-resolved', [], xhr)\n }\n\n wrapFn.inPlace(xhr, handlers, 'fn-', getObject)\n }\n\n // Wrapping the onreadystatechange property of XHRs takes some special tricks.\n //\n // The issue is that the onreadystatechange property may be assigned *after*\n // send() is called against an XHR. This is of particular importance because\n // jQuery uses a single onreadystatechange handler to implement all of the XHR\n // callbacks thtat it provides, and it assigns that property after calling send.\n //\n // There are several 'obvious' approaches to wrapping the onreadystatechange\n // when it's assigned after send:\n //\n // 1. Try to wrap the onreadystatechange handler from a readystatechange\n // addEventListener callback (the addEventListener callback will fire before\n // the onreadystatechange callback).\n //\n // Caveat: this doesn't work in Chrome or Safari, and in fact will cause\n // the onreadystatechange handler to not be invoked at all during the\n // firing cycle in which it is wrapped, which may break applications :(\n //\n // 2. Use Object.defineProperty to create a setter for the onreadystatechange\n // property, and wrap from that setter.\n //\n // Caveat: onreadystatechange is not a configurable property in Safari or\n // older versions of the Android browser.\n //\n // 3. Schedule wrapping of the onreadystatechange property using a setTimeout\n // call issued just before the call to send.\n //\n // Caveat: sometimes, the onreadystatechange handler fires before the\n // setTimeout, meaning the wrapping happens too late.\n //\n // The setTimeout approach is closest to what we use here: we want to schedule\n // the wrapping of the onreadystatechange property when send is called, but\n // ensure that our wrapping happens before onreadystatechange has a chance to\n // fire.\n //\n // We achieve this using a hybrid approach:\n //\n // * In browsers that support MutationObserver, we use that to schedule wrapping\n // of onreadystatechange.\n //\n // * We have discovered that MutationObserver in IE causes a memory leak, so we\n // now will prefer setImmediate for IE, and use a resolved promise to schedule\n // the wrapping in Edge (and other browsers that support promises)\n //\n // * In older browsers that don't support MutationObserver, we rely on the fact\n // that the call to send is probably happening within a callback that we've\n // already wrapped, and use our existing fn-end event callback to wrap the\n // onreadystatechange at the end of the current callback.\n //\n\n if (MutationObserver) {\n var resolved = Promise && Promise.resolve()\n if (!setImmediate && !Promise) {\n var toggle = 1\n var dummyNode = document.createTextNode(toggle)\n new MutationObserver(drainPendingXhrs).observe(dummyNode, { characterData: true })\n }\n } else {\n baseEE.on('fn-end', function (args) {\n // We don't want to try to wrap onreadystatechange from within a\n // readystatechange callback.\n if (args[0] && args[0].type === READY_STATE_CHANGE) return\n drainPendingXhrs()\n })\n }\n\n function enqueuePendingXhr(xhr) {\n pendingXhrs.push(xhr)\n if (MutationObserver) {\n if (resolved) {\n resolved.then(drainPendingXhrs)\n } else if (setImmediate) {\n setImmediate(drainPendingXhrs)\n } else {\n toggle = -toggle\n dummyNode.data = toggle\n }\n }\n }\n\n function drainPendingXhrs() {\n for (var i = 0; i < pendingXhrs.length; i++) {\n wrapOnreadystatechange([], pendingXhrs[i])\n }\n if (pendingXhrs.length) pendingXhrs = []\n }\n\n // Use the object these methods are on as their\n // context store for the event emitter\n function getObject(args, obj) {\n return obj\n }\n\n function copy(from, to) {\n for (var i in from) {\n to[i] = from[i]\n }\n return to\n }\n\n return ee\n}\n\n\nexport function scopedEE(sharedEE){\n return (sharedEE || contextualEE).get('events')\n}","\n// export default {\n// shouldCollectEvent: shouldCollectEvent,\n// setDenyList: setDenyList\n// }\n\nvar denyList = []\n\nexport function shouldCollectEvent(params) {\n if (denyList.length === 0) {\n return true\n }\n\n for (var i = 0; i < denyList.length; i++) {\n var parsed = denyList[i]\n if (parsed.hostname === '*') {\n return false\n }\n if (domainMatchesPattern(parsed.hostname, params.hostname) &&\n comparePath(parsed.pathname, params.pathname)) {\n return false\n }\n }\n return true\n}\n\nexport function setDenyList(denyListConfig) {\n denyList = []\n if (!denyListConfig || !denyListConfig.length) {\n return\n }\n for (var i = 0; i < denyListConfig.length; i++) {\n var url = denyListConfig[i]\n if (url.indexOf('http://') === 0) {\n url = url.substring(7)\n } else if (url.indexOf('https://') === 0) {\n url = url.substring(8)\n }\n var firstSlash = url.indexOf('/')\n if (firstSlash > 0) {\n denyList.push({\n hostname: url.substring(0, firstSlash),\n pathname: url.substring(firstSlash)\n })\n } else {\n denyList.push({\n hostname: url,\n pathname: ''\n })\n }\n }\n}\n\n// returns true if the right side of the domain matches the pattern\nfunction domainMatchesPattern(pattern, domain) {\n if (pattern.length > domain.length) {\n return false\n }\n\n if (domain.indexOf(pattern) === (domain.length - pattern.length)) {\n return true\n }\n return false\n}\n\nfunction comparePath(pattern, path) {\n if (pattern.indexOf('/') === 0) {\n pattern = pattern.substring(1)\n }\n\n if (path.indexOf('/') === 0) {\n path = path.substring(1)\n }\n\n // no path in pattern means match all paths\n if (pattern === '') {\n return true\n }\n\n if (pattern === path) {\n return true\n }\n\n return false\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { registerHandler as register } from '../../../common/event-emitter/register-handler'\nimport { stringify } from '../../../common/util/stringify'\nimport { nullable, numeric, getAddStringContext, addCustomAttributes } from '../../../common/serialize/bel-serializer'\nimport { handle } from '../../../common/event-emitter/handle'\nimport { getConfigurationValue, getInfo } from '../../../common/config/config'\nimport { HarvestScheduler } from '../../../common/harvest/harvest-scheduler'\nimport { subscribeToUnload } from '../../../common/unload/unload'\nimport { recordSupportability } from '../../../common/metrics/metrics'\nimport { setDenyList, shouldCollectEvent } from './deny-list'\nimport { FeatureBase } from '../../../common/util/feature-base'\n\nexport class Aggregate extends FeatureBase {\n constructor(agentIdentifier, aggregator) {\n super(agentIdentifier, aggregator)\n this.ajaxEvents = []\n this.spaAjaxEvents = {}\n this.sentAjaxEvents = []\n this.scheduler\n\n this.harvestTimeSeconds = getConfigurationValue(this.agentIdentifier, 'ajax.harvestTimeSeconds') || 10\n this.MAX_PAYLOAD_SIZE = getConfigurationValue(this.agentIdentifier, 'ajax.maxPayloadSize') || 1000000\n\n this.ee.on('interactionSaved', function (interaction) {\n if (!this.spaAjaxEvents[interaction.id]) return\n // remove from the spaAjaxEvents buffer, and let spa harvest it\n delete this.spaAjaxEvents[interaction.id]\n })\n\n this.ee.on('interactionDiscarded', function (interaction) {\n if (!this.spaAjaxEvents[interaction.id] || !this.allAjaxIsEnabled()) return\n\n this.spaAjaxEvents[interaction.id].forEach(function (item) {\n // move it from the spaAjaxEvents buffer to the ajaxEvents buffer for harvesting here\n this.ajaxEvents.push(item)\n })\n delete this.spaAjaxEvents[interaction.id]\n })\n\n if (this.allAjaxIsEnabled()) setDenyList(getConfigurationValue(this.agentIdentifier, 'ajax.deny_list'))\n\n register('xhr', (...args) => this.storeXhr(...args), undefined, this.ee)\n\n if (this.allAjaxIsEnabled()) {\n this.scheduler = new HarvestScheduler('events', {\n onFinished: (...args) => this.onEventsHarvestFinished(...args),\n getPayload: (...args) => this.prepareHarvest(...args)\n })\n this.scheduler.harvest.on('jserrors', function () {\n return { body: this.aggregator.take(['xhr']) }\n })\n this.scheduler.startTimer(this.harvestTimeSeconds)\n\n subscribeToUnload((...args) => this.finalHarvest(...args))\n }\n }\n\n // export { shouldCollectEvent }\n // export { setDenyList }\n\n getStoredEvents() {\n return {\n ajaxEvents: this.ajaxEvents,\n spaAjaxEvents: this.spaAjaxEvents\n }\n }\n\n storeXhr(params, metrics, startTime, endTime, type) {\n if (params.hostname === 'localhost') {\n return\n }\n\n metrics.time = startTime\n\n // send to session traces\n var hash\n if (params.cat) {\n hash = stringify([params.status, params.cat])\n } else {\n hash = stringify([params.status, params.host, params.pathname])\n }\n\n handle('bstXhrAgg', ['xhr', hash, params, metrics], undefined, undefined, this.ee)\n\n // store as metric\n this.aggregator.store('xhr', hash, params, metrics)\n\n if (!this.allAjaxIsEnabled()) {\n return\n }\n\n if (!shouldCollectEvent(params)) {\n if (params.hostname === getInfo(this.agentIdentifier).errorBeacon) {\n recordSupportability('Ajax/Events/Excluded/Agent')\n } else {\n recordSupportability('Ajax/Events/Excluded/App')\n }\n return\n }\n\n var xhrContext = this\n\n var event = {\n method: params.method,\n status: params.status,\n domain: params.host,\n path: params.pathname,\n requestSize: metrics.txSize,\n responseSize: metrics.rxSize,\n type: type,\n startTime: startTime,\n endTime: endTime,\n callbackDuration: metrics.cbTime\n }\n\n if (xhrContext.dt) {\n event.spanId = xhrContext.dt.spanId\n event.traceId = xhrContext.dt.traceId\n event.spanTimestamp = xhrContext.dt.timestamp\n }\n\n // if the ajax happened inside an interaction, hold it until the interaction finishes\n if (this.spaNode) {\n var interactionId = this.spaNode.interaction.id\n this.spaAjaxEvents[interactionId] = this.spaAjaxEvents[interactionId] || []\n this.spaAjaxEvents[interactionId].push(event)\n } else {\n this.ajaxEvents.push(event)\n }\n }\n\n prepareHarvest(options) {\n options = options || {}\n\n if (this.ajaxEvents.length === 0) {\n return null\n }\n\n var payload = this.getPayload(this.ajaxEvents, options.maxPayloadSize || this.MAX_PAYLOAD_SIZE)\n\n var payloadObjs = []\n for (var i = 0; i < payload.length; i++) {\n payloadObjs.push({ body: { e: payload[i] } })\n }\n\n if (options.retry) {\n this.sentAjaxEvents = this.ajaxEvents.slice()\n }\n\n this.ajaxEvents = []\n\n return payloadObjs\n }\n\n getPayload(events, maxPayloadSize, chunks) {\n chunks = chunks || 1\n var payload = []\n var chunkSize = events.length / chunks\n var eventChunks = this.splitChunks(events, chunkSize)\n var tooBig = false\n for (var i = 0; i < eventChunks.length; i++) {\n var currentChunk = eventChunks[i]\n if (currentChunk.tooBig(maxPayloadSize)) {\n if (currentChunk.events.length !== 1) {\n /* if it is too big BUT it isnt length 1, we can split it down again,\n else we just want to NOT push it into payload\n because if it's length 1 and still too big for the maxPayloadSize\n it cant get any smaller and we dont want to recurse forever */\n tooBig = true\n break\n }\n } else {\n payload.push(currentChunk.payload)\n }\n }\n // check if the current payload string is too big, if so then run getPayload again with more buckets\n return tooBig ? this.getPayload(events, maxPayloadSize, ++chunks) : payload\n }\n\n onEventsHarvestFinished(result) {\n if (result.retry && this.sentAjaxEvents.length > 0 && this.allAjaxIsEnabled()) {\n this.ajaxEvents = this.ajaxEvents.concat(this.sentAjaxEvents)\n this.sentAjaxEvents = []\n }\n }\n\n splitChunks(arr, chunkSize) {\n chunkSize = chunkSize || arr.length\n var chunks = []\n for (var i = 0, len = arr.length; i < len; i += chunkSize) {\n chunks.push(new this.Chunk(arr.slice(i, i + chunkSize)))\n }\n return chunks\n }\n\n Chunk(events) {\n this.addString = getAddStringContext() // pass agentIdentifier here\n this.events = events\n this.payload = 'bel.7;'\n\n for (var i = 0; i < this.events.length; i++) {\n var event = this.events[i]\n var fields = [\n numeric(event.startTime),\n numeric(event.endTime - event.startTime),\n numeric(0), // callbackEnd\n numeric(0), // no callbackDuration for non-SPA events\n this.addString(event.method),\n numeric(event.status),\n this.addString(event.domain),\n this.addString(event.path),\n numeric(event.requestSize),\n numeric(event.responseSize),\n event.type === 'fetch' ? 1 : '',\n this.addString(0), // nodeId\n nullable(event.spanId, this.addString, true) + // guid\n nullable(event.traceId, this.addString, true) + // traceId\n nullable(event.spanTimestamp, numeric, false) // timestamp\n ]\n\n var insert = '2,'\n\n // add custom attributes\n var attrParts = addCustomAttributes(getInfo(this.agentIdentifier).jsAttributes || {}, this.addString)\n fields.unshift(numeric(attrParts.length))\n\n insert += fields.join(',')\n\n if (attrParts && attrParts.length > 0) {\n insert += ';' + attrParts.join(';')\n }\n\n if ((i + 1) < this.events.length) insert += ';'\n\n this.payload += insert\n }\n\n this.tooBig = function (maxPayloadSize) {\n maxPayloadSize = maxPayloadSize || this.MAX_PAYLOAD_SIZE\n return this.payload.length * 2 > maxPayloadSize\n }\n }\n\n allAjaxIsEnabled() {\n var enabled = getConfigurationValue(this.agentIdentifier, 'ajax.enabled')\n if (enabled === false) {\n return false\n }\n return true\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Start assigning ids at 1 so 0 can always be used for window, without\n// actually setting it (which would create a global variable).\nimport { getOrSet } from '../util/get-or-set'\nvar index = 1\nvar prop = 'nr@id'\n\n// export default id\n\n// Always returns id of obj, may tag obj with an id in the process.\nexport function id (obj) {\n var type = typeof obj\n // We can only tag objects, functions, and arrays with ids.\n // For all primitive values we instead return -1.\n if (!obj || !(type === 'object' || type === 'function')) return -1\n if (obj === window) return 0\n\n return getOrSet(obj, prop, function () { return index++ })\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport function dataSize (data) {\n if (typeof data === 'string' && data.length) return data.length\n if (typeof data !== 'object') return undefined\n if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer && data.byteLength) return data.byteLength\n if (typeof Blob !== 'undefined' && data instanceof Blob && data.size) return data.size\n if (typeof FormData !== 'undefined' && data instanceof FormData) return undefined\n\n try {\n return JSON.stringify(data).length\n } catch (e) {\n return undefined\n }\n}\n\n// export default dataSize\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { getConfiguration, getConfigurationValue, getLoaderConfig } from '../../../common/config/config'\nimport { generateSpanId, generateTraceId } from '../../../common/ids/unique-id'\nimport { parseUrl } from '../../../common/url/parse-url'\n\nexport class DT {\n constructor(agentIdentifier) {\n this.agentIdentifier = agentIdentifier\n }\n\n generateTracePayload (parsedOrigin) {\n if (!this.shouldGenerateTrace(parsedOrigin)) {\n return null\n }\n\n var loader_config = getLoaderConfig(this.agentIdentifier)\n if (!loader_config) {\n return null\n }\n\n var accountId = (loader_config.accountID || '').toString() || null\n var agentId = (loader_config.agentID || '').toString() || null\n var trustKey = (loader_config.trustKey || '').toString() || null\n\n if (!accountId || !agentId) {\n return null\n }\n\n var spanId = generateSpanId()\n var traceId = generateTraceId()\n var timestamp = Date.now()\n\n var payload = {\n spanId: spanId,\n traceId: traceId,\n timestamp: timestamp\n }\n\n if (parsedOrigin.sameOrigin ||\n (this.isAllowedOrigin(parsedOrigin) && this.useTraceContextHeadersForCors())) {\n payload.traceContextParentHeader = this.generateTraceContextParentHeader(spanId, traceId)\n payload.traceContextStateHeader = this.generateTraceContextStateHeader(spanId, timestamp,\n accountId, agentId, trustKey)\n }\n\n if ((parsedOrigin.sameOrigin && !this.excludeNewrelicHeader()) ||\n (!parsedOrigin.sameOrigin && this.isAllowedOrigin(parsedOrigin) && this.useNewrelicHeaderForCors())) {\n payload.newrelicHeader = this.generateTraceHeader(spanId, traceId, timestamp, accountId,\n agentId, trustKey)\n }\n\n return payload\n }\n\n generateTraceContextParentHeader(spanId, traceId) {\n return '00-' + traceId + '-' + spanId + '-01'\n }\n\n generateTraceContextStateHeader(spanId, timestamp, accountId, appId, trustKey) {\n var version = 0\n var transactionId = ''\n var parentType = 1\n var sampled = ''\n var priority = ''\n\n return trustKey + '@nr=' + version + '-' + parentType + '-' + accountId +\n '-' + appId + '-' + spanId + '-' + transactionId + '-' + sampled + '-' + priority + '-' + timestamp\n }\n\n generateTraceHeader (spanId, traceId, timestamp, accountId, appId, trustKey) {\n var hasBtoa = ('btoa' in window && typeof window.btoa === 'function')\n if (!hasBtoa) {\n return null\n }\n\n var payload = {\n v: [0, 1],\n d: {\n ty: 'Browser',\n ac: accountId,\n ap: appId,\n id: spanId,\n tr: traceId,\n ti: timestamp\n }\n }\n if (trustKey && accountId !== trustKey) {\n payload.d.tk = trustKey\n }\n\n return btoa(JSON.stringify(payload))\n }\n\n // return true if DT is enabled and the origin is allowed, either by being\n // same-origin, or included in the allowed list\n shouldGenerateTrace (parsedOrigin) {\n return this.isDtEnabled() && this.isAllowedOrigin(parsedOrigin)\n }\n\n isAllowedOrigin(parsedOrigin) {\n var allowed = false\n var dtConfig = {}\n var dt = getConfigurationValue('distributed_tracing')\n\n if (dt) {\n dtConfig = getConfiguration().distributed_tracing\n }\n\n if (parsedOrigin.sameOrigin) {\n allowed = true\n } else if (dtConfig.allowed_origins instanceof Array) {\n for (var i = 0; i < dtConfig.allowed_origins.length; i++) {\n var allowedOrigin = parseUrl(dtConfig.allowed_origins[i])\n if (parsedOrigin.hostname === allowedOrigin.hostname &&\n parsedOrigin.protocol === allowedOrigin.protocol &&\n parsedOrigin.port === allowedOrigin.port) {\n allowed = true\n break\n }\n }\n }\n return allowed\n }\n\n isDtEnabled() {\n var dt = getConfigurationValue(this.agentIdentifier, 'distributed_tracing')\n if (dt) {\n return !!dt.enabled\n }\n return false\n }\n\n // exclude the newrelic header for same-origin calls\n excludeNewrelicHeader() {\n var dt = getConfigurationValue(this.agentIdentifier, 'distributed_tracing')\n if (dt) {\n return !!dt.exclude_newrelic_header\n }\n return false\n }\n\n useNewrelicHeaderForCors() {\n var dt = getConfigurationValue(this.agentIdentifier, 'distributed_tracing')\n if (dt) {\n return dt.cors_use_newrelic_header !== false\n }\n return false\n }\n\n useTraceContextHeadersForCors() {\n var dt = getConfigurationValue(this.agentIdentifier, 'distributed_tracing')\n if (dt) {\n return !dt.cors_use_tracecontext_headers\n }\n return false\n }\n}\n\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { originals, getLoaderConfig, getRuntime } from '../../../common/config/config'\nimport { handle } from '../../../common/event-emitter/handle'\nimport { ee } from '../../../common/event-emitter/contextual-ee'\nimport { id } from '../../../common/ids/id'\nimport { ffVersion } from '../../../common/browser-version/firefox-version'\nimport { dataSize } from '../../../common/util/data-size'\nimport { eventListenerOpts } from '../../../common/event-listener/event-listener-opts'\nimport { now } from '../../../common/timing/now'\nimport {wrapFetch} from '../../../common/wrap'\nimport { parseUrl } from '../../../common/url/parse-url'\nimport { DT } from './distributed-tracing'\nimport {responseSizeFromXhr} from './response-size'\nimport { FeatureBase } from '../../../common/util/feature-base'\n\nvar handlers = [ 'load', 'error', 'abort', 'timeout' ]\nvar handlersLen = handlers.length\n\nvar origRequest = originals.REQ\nvar origXHR = window.XMLHttpRequest\n\nexport class Instrument extends FeatureBase {\n constructor(agentIdentifier) {\n super(agentIdentifier)\n // Don't instrument Chrome for iOS, it is buggy and acts like there are URL verification issues\n if (!getRuntime(this.agentIdentifier).xhrWrappable || getRuntime(this.agentIdentifier).disabled) return\n\n this.dt = new DT(this.agentIdentifier)\n }\n}\n\n// TODO update all of this to go into class and use this.ee for ee, handle, and register\n\nexport function getWrappedFetch() {\n var wrappedFetch = wrapFetch(ee)\n subscribeToEvents(ee, handle)\n return wrappedFetch\n}\n\nfunction subscribeToEvents(ee, handle) {\n ee.on('new-xhr', onNewXhr)\n ee.on('open-xhr-start', onOpenXhrStart)\n ee.on('open-xhr-end', onOpenXhrEnd)\n ee.on('send-xhr-start', onSendXhrStart)\n ee.on('xhr-cb-time', onXhrCbTime)\n ee.on('xhr-load-added', onXhrLoadAdded)\n ee.on('xhr-load-removed', onXhrLoadRemoved)\n ee.on('xhr-resolved', onXhrResolved)\n ee.on('addEventListener-end', onAddEventListenerEnd)\n ee.on('removeEventListener-end', onRemoveEventListenerEnd)\n ee.on('fn-end', onFnEnd)\n ee.on('fetch-before-start', onFetchBeforeStart)\n ee.on('fetch-start', onFetchStart)\n ee.on('fn-start', onFnStart)\n ee.on('fetch-done', onFetchDone)\n\n // Setup the context for each new xhr object\n function onNewXhr(xhr) {\n var ctx = this\n ctx.totalCbs = 0\n ctx.called = 0\n ctx.cbTime = 0\n ctx.end = end\n ctx.ended = false\n ctx.xhrGuids = {}\n ctx.lastSize = null\n ctx.loadCaptureCalled = false\n ctx.params = this.params || {}\n ctx.metrics = this.metrics || {}\n\n xhr.addEventListener('load', function (event) {\n captureXhrData(ctx, xhr)\n }, eventListenerOpts(false))\n\n // In Firefox 34+, XHR ProgressEvents report pre-content-decoding sizes via\n // their 'loaded' property, rather than post-decoding sizes. We want\n // post-decoding sizes for consistency with browsers where that's all we have.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1227674\n //\n // In really old versions of Firefox (older than somewhere between 5 and 10),\n // we don't reliably get a final XHR ProgressEvent which reflects the full\n // size of the transferred resource.\n //\n // So, in both of these cases, we fall back to not using ProgressEvents to\n // measure XHR sizes.\n\n if (ffVersion && (ffVersion > 34 || ffVersion < 10)) return\n\n xhr.addEventListener('progress', function (event) {\n ctx.lastSize = event.loaded\n }, eventListenerOpts(false))\n }\n\n function onOpenXhrStart(args) {\n this.params = { method: args[0] }\n addUrl(this, args[1])\n this.metrics = {}\n }\n\n function onOpenXhrEnd(args, xhr) {\n var loader_config = getLoaderConfig()\n if ('xpid' in loader_config && this.sameOrigin) {\n xhr.setRequestHeader('X-NewRelic-ID', loader_config.xpid)\n }\n\n var payload = this.dt.generateTracePayload(this.parsedOrigin)\n if (payload) {\n var added = false\n if (payload.newrelicHeader) {\n xhr.setRequestHeader('newrelic', payload.newrelicHeader)\n added = true\n }\n if (payload.traceContextParentHeader) {\n xhr.setRequestHeader('traceparent', payload.traceContextParentHeader)\n if (payload.traceContextStateHeader) {\n xhr.setRequestHeader('tracestate', payload.traceContextStateHeader)\n }\n added = true\n }\n if (added) {\n this.dt = payload\n }\n }\n }\n\n function onSendXhrStart(args, xhr) {\n var metrics = this.metrics\n var data = args[0]\n var context = this\n\n if (metrics && data) {\n var size = dataSize(data)\n if (size) metrics.txSize = size\n }\n\n this.startTime = now()\n\n this.listener = function (evt) {\n try {\n if (evt.type === 'abort' && !(context.loadCaptureCalled)) {\n context.params.aborted = true\n }\n if (evt.type !== 'load' || (context.called === context.totalCbs) && (context.onloadCalled || typeof (xhr.onload) !== 'function')) context.end(xhr)\n } catch (e) {\n try {\n ee.emit('internal-error', [e])\n } catch (err) {\n // do nothing\n }\n }\n }\n\n for (var i = 0; i < handlersLen; i++) {\n xhr.addEventListener(handlers[i], this.listener, eventListenerOpts(false))\n }\n }\n\n function onXhrCbTime(time, onload, xhr) {\n this.cbTime += time\n if (onload) this.onloadCalled = true\n else this.called += 1\n if ((this.called === this.totalCbs) && (this.onloadCalled || typeof (xhr.onload) !== 'function')) this.end(xhr)\n }\n\n function onXhrLoadAdded(cb, useCapture) {\n // Ignore if the same arguments are passed to addEventListener twice\n var idString = '' + id(cb) + !!useCapture\n if (!this.xhrGuids || this.xhrGuids[idString]) return\n this.xhrGuids[idString] = true\n\n this.totalCbs += 1\n }\n\n function onXhrLoadRemoved(cb, useCapture) {\n // Ignore if event listener didn't exist for this xhr object\n var idString = '' + id(cb) + !!useCapture\n if (!this.xhrGuids || !this.xhrGuids[idString]) return\n delete this.xhrGuids[idString]\n\n this.totalCbs -= 1\n }\n\n function onXhrResolved() {\n this.endTime = now()\n }\n\n // Listen for load listeners to be added to xhr objects\n function onAddEventListenerEnd(args, xhr) {\n if (xhr instanceof origXHR && args[0] === 'load') ee.emit('xhr-load-added', [args[1], args[2]], xhr)\n }\n\n function onRemoveEventListenerEnd(args, xhr) {\n if (xhr instanceof origXHR && args[0] === 'load') ee.emit('xhr-load-removed', [args[1], args[2]], xhr)\n }\n\n // Listen for those load listeners to be called.\n function onFnStart(args, xhr, methodName) {\n if (xhr instanceof origXHR) {\n if (methodName === 'onload') this.onload = true\n if ((args[0] && args[0].type) === 'load' || this.onload) this.xhrCbStart = now()\n }\n }\n\n function onFnEnd(args, xhr) {\n if (this.xhrCbStart) ee.emit('xhr-cb-time', [now() - this.xhrCbStart, this.onload, xhr], xhr)\n }\n\n // this event only handles DT\n function onFetchBeforeStart(args) {\n var opts = args[1] || {}\n var url\n // argument is USVString\n if (typeof args[0] === 'string') {\n url = args[0]\n // argument is Request object\n } else if (args[0] && args[0].url) {\n url = args[0].url\n // argument is URL object\n } else if (window.URL && args[0] && args[0] instanceof URL) {\n url = args[0].href\n }\n\n if (url) {\n this.parsedOrigin = parseUrl(url)\n this.sameOrigin = this.parsedOrigin.sameOrigin\n }\n\n var payload = this.dt.generateTracePayload(this.parsedOrigin)\n if (!payload || (!payload.newrelicHeader && !payload.traceContextParentHeader)) {\n return\n }\n\n if (typeof args[0] === 'string' || (window.URL && args[0] && args[0] instanceof URL)) {\n var clone = {}\n\n for (var key in opts) {\n clone[key] = opts[key]\n }\n\n clone.headers = new Headers(opts.headers || {})\n if (addHeaders(clone.headers, payload)) {\n this.dt = payload\n }\n\n if (args.length > 1) {\n args[1] = clone\n } else {\n args.push(clone)\n }\n } else if (args[0] && args[0].headers) {\n if (addHeaders(args[0].headers, payload)) {\n this.dt = payload\n }\n }\n\n function addHeaders(headersObj, payload) {\n var added = false\n if (payload.newrelicHeader) {\n headersObj.set('newrelic', payload.newrelicHeader)\n added = true\n }\n if (payload.traceContextParentHeader) {\n headersObj.set('traceparent', payload.traceContextParentHeader)\n if (payload.traceContextStateHeader) {\n headersObj.set('tracestate', payload.traceContextStateHeader)\n }\n added = true\n }\n return added\n }\n }\n\n function onFetchStart(fetchArguments, dtPayload) {\n this.params = {}\n this.metrics = {}\n this.startTime = now()\n this.dt = dtPayload\n\n if (fetchArguments.length >= 1) this.target = fetchArguments[0]\n if (fetchArguments.length >= 2) this.opts = fetchArguments[1]\n\n var opts = this.opts || {}\n var target = this.target\n\n var url\n if (typeof target === 'string') {\n url = target\n } else if (typeof target === 'object' && target instanceof origRequest) {\n url = target.url\n } else if (window.URL && typeof target === 'object' && target instanceof URL) {\n url = target.href\n }\n addUrl(this, url)\n\n var method = ('' + ((target && target instanceof origRequest && target.method) ||\n opts.method || 'GET')).toUpperCase()\n this.params.method = method\n\n this.txSize = dataSize(opts.body) || 0\n }\n\n // we capture failed call as status 0, the actual error is ignored\n // eslint-disable-next-line handle-callback-err\n function onFetchDone(err, res) {\n this.endTime = now()\n if (!this.params) {\n this.params = {}\n }\n this.params.status = res ? res.status : 0\n\n // convert rxSize to a number\n var responseSize\n if (typeof this.rxSize === 'string' && this.rxSize.length > 0) {\n responseSize = +this.rxSize\n }\n\n var metrics = {\n txSize: this.txSize,\n rxSize: responseSize,\n duration: now() - this.startTime\n }\n\n handle('xhr', [this.params, metrics, this.startTime, this.endTime, 'fetch'], this)\n }\n\n // Create report for XHR request that has finished\n function end (xhr) {\n var params = this.params\n var metrics = this.metrics\n\n if (this.ended) return\n this.ended = true\n\n for (var i = 0; i < handlersLen; i++) {\n xhr.removeEventListener(handlers[i], this.listener, false)\n }\n\n if (params.aborted) return\n metrics.duration = now() - this.startTime\n if (!this.loadCaptureCalled && xhr.readyState === 4) {\n captureXhrData(this, xhr)\n } else if (params.status == null) {\n params.status = 0\n }\n\n // Always send cbTime, even if no noticeable time was taken.\n metrics.cbTime = this.cbTime\n\n handle('xhr', [params, metrics, this.startTime, this.endTime, 'xhr'], this)\n }\n\n function addUrl (ctx, url) {\n var parsed = parseUrl(url)\n var params = ctx.params\n\n params.hostname = parsed.hostname\n params.port = parsed.port\n params.protocol = parsed.protocol\n params.host = parsed.hostname + ':' + parsed.port\n params.pathname = parsed.pathname\n ctx.parsedOrigin = parsed\n ctx.sameOrigin = parsed.sameOrigin\n }\n\n function captureXhrData (ctx, xhr) {\n ctx.params.status = xhr.status\n\n var size = responseSizeFromXhr(xhr, ctx.lastSize)\n if (size) ctx.metrics.rxSize = size\n\n if (ctx.sameOrigin) {\n var header = xhr.getResponseHeader('X-NewRelic-App-Data')\n if (header) {\n ctx.params.cat = header.split(', ').pop()\n }\n }\n\n ctx.loadCaptureCalled = true\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { dataSize } from '../../../common/util/data-size'\n\n// export default responseSizeFromXhr\n\nexport function responseSizeFromXhr (xhr, lastSize) {\n var type = xhr.responseType\n if (type === 'json' && lastSize !== null) return lastSize\n // Caution! Chrome throws an error if you try to access xhr.responseText for binary data\n if (type === 'arraybuffer' || type === 'blob' || type === 'json') {\n return dataSize(xhr.response)\n } else if (type === 'text' || type === '' || type === undefined) { // empty string type defaults to 'text'\n return dataSize(xhr.responseText)\n } else { // e.g. ms-stream and document (we do not currently determine the size of Document objects)\n return undefined\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nvar canonicalFunctionNameRe = /([a-z0-9]+)$/i\nexport function canonicalFunctionName (orig) {\n if (!orig) return\n\n var match = orig.match(canonicalFunctionNameRe)\n if (match) return match[1]\n\n return\n}\n\n// export default canonicalFunctionName\n// module.exports = canonicalFunctionName\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nvar stripNewlinesRegex = /^\\n+|\\n+$/g\nvar MAX_STACK_TRACE_LENGTH = 65530\n\nexport function formatStackTrace(stackLines) {\n return truncateStackLines(stackLines).replace(stripNewlinesRegex, '')\n}\n\n// module.exports.truncateSize = truncateSize\n\n// takes array of stack lines and returns string with top 50 and buttom 50 lines\nfunction truncateStackLines(stackLines) {\n var stackString\n if (stackLines.length > 100) {\n var truncatedLines = stackLines.length - 100\n stackString = stackLines.slice(0, 50).join('\\n')\n stackString += '\\n< ...truncated ' + truncatedLines + ' lines... >\\n'\n stackString += stackLines.slice(-50).join('\\n')\n } else {\n stackString = stackLines.join('\\n')\n }\n return stackString\n}\n\n// truncates stack string to limit what is sent to backend\nexport function truncateSize(stackString) {\n return (stackString.length > MAX_STACK_TRACE_LENGTH) ? stackString.substr(0, MAX_STACK_TRACE_LENGTH) : stackString\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/* eslint-disable no-useless-escape */\n\n// computeStackTrace: cross-browser stack traces in JavaScript\n//\n// Syntax:\n// s = computeStackTrace(exception) // consider using TraceKit.report instead\n// Returns:\n// s.name - exception name\n// s.message - exception message\n// s.stack[i].url - JavaScript or HTML file URL\n// s.stack[i].func - function name, or empty for anonymous functions\n// s.stack[i].line - line number, if known\n// s.stack[i].column - column number, if known\n// s.stack[i].context - an array of source code lines; the middle element corresponds to the correct line#\n// s.mode - 'stack', 'stacktrace', 'multiline', 'callers', 'onerror', or 'failed' -- method used to collect the stack trace\n//\n// Supports:\n// - Firefox: full stack trace with line numbers and unreliable column\n// number on top frame\n// - Chrome: full stack trace with line and column numbers\n// - Safari: line and column number for the topmost stacktrace element\n// only\n// - IE: no line numbers whatsoever\n\n// Contents of Exception in various browsers.\n//\n// SAFARI:\n// ex.message = Can't find variable: qq\n// ex.line = 59\n// ex.sourceId = 580238192\n// ex.sourceURL = http://...\n// ex.expressionBeginOffset = 96\n// ex.expressionCaretOffset = 98\n// ex.expressionEndOffset = 98\n// ex.name = ReferenceError\n//\n// FIREFOX:\n// ex.message = qq is not defined\n// ex.fileName = http://...\n// ex.lineNumber = 59\n// ex.stack = ...stack trace... (see the example below)\n// ex.name = ReferenceError\n//\n// CHROME:\n// ex.message = qq is not defined\n// ex.name = ReferenceError\n// ex.type = not_defined\n// ex.arguments = ['aa']\n// ex.stack = ...stack trace...\n//\n// INTERNET EXPLORER:\n// ex.message = ...\n// ex.name = ReferenceError\nimport { reduce } from '../../../common/util/reduce'\nimport {formatStackTrace} from './format-stack-trace'\n\nvar debug = false\n\nvar classNameRegex = /function (.+?)\\s*\\(/\nvar chrome = /^\\s*at (?:((?:\\[object object\\])?(?:[^(]*\\([^)]*\\))*[^()]*(?: \\[as \\S+\\])?) )?\\(?((?:file|http|https|chrome-extension):.*?)?:(\\d+)(?::(\\d+))?\\)?\\s*$/i\nvar gecko = /^\\s*(?:(\\S*|global code)(?:\\(.*?\\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\\d+)(?::(\\d+))?\\s*$/i\nvar chrome_eval = /^\\s*at .+ \\(eval at \\S+ \\((?:(?:file|http|https):[^)]+)?\\)(?:, [^:]*:\\d+:\\d+)?\\)$/i\nvar ie_eval = /^\\s*at Function code \\(Function code:\\d+:\\d+\\)\\s*/i\n\n// export default computeStackTrace\n// module.exports = computeStackTrace\n\nexport function computeStackTrace (ex) {\n var stack = null\n\n try {\n stack = computeStackTraceFromStackProp(ex)\n if (stack) {\n return stack\n }\n } catch (e) {\n if (debug) {\n throw e\n }\n }\n\n try {\n stack = computeStackTraceBySourceAndLine(ex)\n if (stack) {\n return stack\n }\n } catch (e) {\n if (debug) {\n throw e\n }\n }\n\n try {\n stack = computeStackTraceWithMessageOnly(ex)\n if (stack) {\n return stack\n }\n } catch (e) {\n if (debug) {\n throw e\n }\n }\n\n return {\n 'mode': 'failed',\n 'stackString': '',\n 'frames': []\n }\n}\n\n/**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\nfunction computeStackTraceFromStackProp (ex) {\n if (!ex.stack) {\n return null\n }\n\n var errorInfo = reduce(\n ex.stack.split('\\n'),\n parseStackProp,\n {frames: [], stackLines: [], wrapperSeen: false}\n )\n\n if (!errorInfo.frames.length) return null\n\n return {\n 'mode': 'stack',\n 'name': ex.name || getClassName(ex),\n 'message': ex.message,\n 'stackString': formatStackTrace(errorInfo.stackLines),\n 'frames': errorInfo.frames\n }\n}\n\nfunction parseStackProp (info, line) {\n var element = getElement(line)\n\n if (!element) {\n info.stackLines.push(line)\n return info\n }\n\n if (isWrapper(element.func)) info.wrapperSeen = true\n else info.stackLines.push(line)\n\n if (!info.wrapperSeen) info.frames.push(element)\n return info\n}\n\nfunction getElement (line) {\n var parts = line.match(gecko)\n if (!parts) parts = line.match(chrome)\n\n if (parts) {\n return ({\n 'url': parts[2],\n 'func': (parts[1] !== 'Anonymous function' && parts[1] !== 'global code' && parts[1]) || null,\n 'line': +parts[3],\n 'column': parts[4] ? +parts[4] : null\n })\n }\n\n if (line.match(chrome_eval) || line.match(ie_eval) || line === 'anonymous') {\n return { 'func': 'evaluated code' }\n }\n}\n\nfunction computeStackTraceBySourceAndLine (ex) {\n if (!('line' in ex)) return null\n\n var className = ex.name || getClassName(ex)\n\n // Safari does not provide a URL for errors in eval'd code\n if (!ex.sourceURL) {\n return ({\n 'mode': 'sourceline',\n 'name': className,\n 'message': ex.message,\n 'stackString': getClassName(ex) + ': ' + ex.message + '\\n in evaluated code',\n 'frames': [{\n 'func': 'evaluated code'\n }]\n })\n }\n\n var stackString = className + ': ' + ex.message + '\\n at ' + ex.sourceURL\n if (ex.line) {\n stackString += ':' + ex.line\n if (ex.column) {\n stackString += ':' + ex.column\n }\n }\n\n return ({\n 'mode': 'sourceline',\n 'name': className,\n 'message': ex.message,\n 'stackString': stackString,\n 'frames': [{ 'url': ex.sourceURL,\n 'line': ex.line,\n 'column': ex.column\n }]\n })\n}\n\nfunction computeStackTraceWithMessageOnly (ex) {\n var className = ex.name || getClassName(ex)\n if (!className) return null\n\n return ({\n 'mode': 'nameonly',\n 'name': className,\n 'message': ex.message,\n 'stackString': className + ': ' + ex.message,\n 'frames': []\n })\n}\n\nfunction getClassName (obj) {\n var results = classNameRegex.exec(String(obj.constructor))\n return (results && results.length > 1) ? results[1] : 'unknown'\n}\n\nfunction isWrapper (functionName) {\n return (functionName && functionName.indexOf('nrWrapper') >= 0)\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport function stringHashCode (string) {\n var hash = 0\n var charVal\n\n if (!string || !string.length) return hash\n for (var i = 0; i < string.length; i++) {\n charVal = string.charCodeAt(i)\n hash = ((hash << 5) - hash) + charVal\n hash = hash | 0 // Convert to 32bit integer\n }\n return hash\n}\n\n// export default stringHashCode\n// module.exports = stringHashCode\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { canonicalFunctionName } from './canonical-function-name'\nimport { computeStackTrace } from './compute-stack-trace'\nimport { stringHashCode } from './string-hash-code'\nimport { truncateSize } from './format-stack-trace'\n\nimport { registerHandler as register } from '../../../common/event-emitter/register-handler'\nimport { HarvestScheduler } from '../../../common/harvest/harvest-scheduler'\nimport { stringify } from '../../../common/util/stringify'\nimport { handle } from '../../../common/event-emitter/handle'\nimport { mapOwn } from '../../../common/util/map-own'\nimport { getInfo, getConfigurationValue, getRuntime } from '../../../common/config/config'\nimport { now } from '../../../common/timing/now'\nimport { cleanURL } from '../../../common/url/clean-url'\nimport { FeatureBase } from '../../../common/util/feature-base'\n\nexport class Aggregate extends FeatureBase {\n constructor(agentIdentifier, aggregator) {\n super(agentIdentifier, aggregator)\n this.stackReported = {}\n this.pageviewReported = {}\n this.errorCache = {}\n this.currentBody\n\n this.errorOnPage = false\n\n // this will need to change to match whatever ee we use in the instrument\n this.ee.on('interactionSaved', function (interaction) {\n if (!this.errorCache[interaction.id]) return\n\n this.errorCache[interaction.id].forEach(function (item) {\n var customParams = {}\n var globalCustomParams = item[4]\n var localCustomParams = item[5]\n\n mapOwn(globalCustomParams, setCustom)\n mapOwn(interaction.root.attrs.custom, setCustom)\n mapOwn(localCustomParams, setCustom)\n\n var params = item[2]\n params.browserInteractionId = interaction.root.attrs.id\n delete params._interactionId\n\n if (params._interactionNodeId) {\n params.parentNodeId = params._interactionNodeId.toString()\n delete params._interactionNodeId\n }\n\n var hash = item[1] + interaction.root.attrs.id\n var jsAttributesHash = stringHashCode(stringify(customParams))\n var aggregateHash = hash + ':' + jsAttributesHash\n\n this.aggregator.store(item[0], aggregateHash, params, item[3], customParams)\n\n function setCustom(key, val) {\n customParams[key] = (val && typeof val === 'object' ? stringify(val) : val)\n }\n })\n delete this.errorCache[interaction.id]\n })\n\n // this will need to change to match whatever ee we use in the instrument\n this.ee.on('interactionDiscarded', function (interaction) {\n if (!this.errorCache || !this.errorCache[interaction.id]) return\n\n this.errorCache[interaction.id].forEach(function (item) {\n var customParams = {}\n var globalCustomParams = item[4]\n var localCustomParams = item[5]\n\n mapOwn(globalCustomParams, setCustom)\n mapOwn(interaction.root.attrs.custom, setCustom)\n mapOwn(localCustomParams, setCustom)\n\n var params = item[2]\n delete params._interactionId\n delete params._interactionNodeId\n\n var hash = item[1]\n var jsAttributesHash = stringHashCode(stringify(customParams))\n var aggregateHash = hash + ':' + jsAttributesHash\n\n this.aggregator.store(item[0], aggregateHash, item[2], item[3], customParams)\n\n function setCustom(key, val) {\n customParams[key] = (val && typeof val === 'object' ? stringify(val) : val)\n }\n })\n delete this.errorCache[interaction.id]\n })\n register('err', (...args) => this.storeError(...args), undefined, this.ee)\n register('ierr', (...args) => this.storeError(...args), undefined, this.ee)\n\n var harvestTimeSeconds = getConfigurationValue(this.agentIdentifier, 'jserrors.harvestTimeSeconds') || 10\n\n // on('jserrors', this.onHarvestStarted) //harvest.js --> now a class()\n var scheduler = new HarvestScheduler('jserrors', { onFinished: (...args) => this.onHarvestFinished(...args) }, this)\n scheduler.harvest.on('jserrors', (...args) => this.onHarvestStarted(...args))\n scheduler.startTimer(harvestTimeSeconds)\n }\n\n onHarvestStarted(options) {\n var body = this.aggregator.take(['err', 'ierr'])\n\n if (options.retry) {\n this.currentBody = body\n }\n\n var payload = { body: body, qs: {} }\n var releaseIds = stringify(getRuntime(this.agentIdentifier).releaseIds)\n\n if (releaseIds !== '{}') {\n payload.qs.ri = releaseIds\n }\n\n if (body && body.err && body.err.length && !this.errorOnPage) {\n payload.qs.pve = '1'\n this.errorOnPage = true\n }\n return payload\n }\n\n onHarvestFinished(result) {\n if (result.retry && this.currentBody) {\n mapOwn(this.currentBody, function (key, value) {\n for (var i = 0; i < value.length; i++) {\n var bucket = value[i]\n var name = this.getBucketName(bucket.params, bucket.custom)\n this.aggregator.merge(key, name, bucket.metrics, bucket.params, bucket.custom)\n }\n })\n this.currentBody = null\n }\n }\n\n nameHash(params) {\n return stringHashCode(params.exceptionClass) ^ params.stackHash\n }\n\n getBucketName(params, customParams) {\n return this.nameHash(params) + ':' + stringHashCode(stringify(customParams))\n }\n\n canonicalizeURL(url, cleanedOrigin) {\n if (typeof url !== 'string') return ''\n\n var cleanedURL = cleanURL(url)\n if (cleanedURL === cleanedOrigin) {\n return '<inline>'\n } else {\n return cleanedURL\n }\n }\n\n buildCanonicalStackString(stackInfo, cleanedOrigin) {\n var canonicalStack = ''\n\n for (var i = 0; i < stackInfo.frames.length; i++) {\n var frame = stackInfo.frames[i]\n var func = canonicalFunctionName(frame.func)\n\n if (canonicalStack) canonicalStack += '\\n'\n if (func) canonicalStack += func + '@'\n if (typeof frame.url === 'string') canonicalStack += frame.url\n if (frame.line) canonicalStack += ':' + frame.line\n }\n\n return canonicalStack\n }\n\n // Strip query parameters and fragments from the stackString property of the\n // given stackInfo, along with the 'url' properties of each frame in\n // stackInfo.frames.\n //\n // Any URLs that are equivalent to the cleaned version of the origin will also\n // be replaced with the string '<inline>'.\n //\n canonicalizeStackURLs(stackInfo) {\n // Currently, loader.origin might contain a fragment, but we don't want to use it\n // for comparing with frame URLs.\n var cleanedOrigin = cleanURL(getRuntime(this.agentIdentifier).origin)\n\n for (var i = 0; i < stackInfo.frames.length; i++) {\n var frame = stackInfo.frames[i]\n var originalURL = frame.url\n var cleanedURL = this.canonicalizeURL(originalURL, cleanedOrigin)\n if (cleanedURL && cleanedURL !== frame.url) {\n frame.url = cleanedURL\n stackInfo.stackString = stackInfo.stackString.split(originalURL).join(cleanedURL)\n }\n }\n\n return stackInfo\n }\n\n storeError(err, time, internal, customAttributes) {\n // are we in an interaction\n time = time || now()\n if (!internal && getRuntime(this.agentIdentifier).onerror && getRuntime(this.agentIdentifier).onerror(err)) return\n\n var stackInfo = this.canonicalizeStackURLs(computeStackTrace(err))\n var canonicalStack = this.buildCanonicalStackString(stackInfo)\n\n var params = {\n stackHash: stringHashCode(canonicalStack),\n exceptionClass: stackInfo.name,\n request_uri: window.location.pathname\n }\n if (stackInfo.message) {\n params.message = '' + stackInfo.message\n }\n\n if (!this.stackReported[params.stackHash]) {\n this.stackReported[params.stackHash] = true\n params.stack_trace = truncateSize(stackInfo.stackString)\n } else {\n params.browser_stack_hash = stringHashCode(stackInfo.stackString)\n }\n params.releaseIds = stringify(getRuntime(this.agentIdentifier).releaseIds)\n\n // When debugging stack canonicalization/hashing, uncomment these lines for\n // more output in the test logs\n // params.origStack = err.stack\n // params.canonicalStack = canonicalStack\n\n var hash = this.nameHash(params)\n\n if (!this.pageviewReported[hash]) {\n params.pageview = 1\n this.pageviewReported[hash] = true\n }\n\n var type = internal ? 'ierr' : 'err'\n var newMetrics = { time: time }\n\n // stn and spa aggregators listen to this event - stn sends the error in its payload,\n // and spa annotates the error with interaction info\n handle('errorAgg', [type, hash, params, newMetrics], undefined, undefined, this.ee)\n\n if (params._interactionId != null) {\n // hold on to the error until the interaction finishes\n this.errorCache[params._interactionId] = this.errorCache[params._interactionId] || []\n this.errorCache[params._interactionId].push([type, hash, params, newMetrics, att, customAttributes])\n } else {\n // store custom attributes\n var customParams = {}\n var att = getInfo(this.agentIdentifier).jsAttributes\n mapOwn(att, setCustom)\n if (customAttributes) {\n mapOwn(customAttributes, setCustom)\n }\n\n var jsAttributesHash = stringHashCode(stringify(customParams))\n var aggregateHash = hash + ':' + jsAttributesHash\n this.aggregator.store(type, aggregateHash, params, newMetrics, customParams)\n }\n\n function setCustom(key, val) {\n customParams[key] = (val && typeof val === 'object' ? stringify(val) : val)\n }\n }\n}\n\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { handle } from '../../../common/event-emitter/handle'\nimport { getRuntime } from '../../../common/config/config'\nimport { now } from '../../../common/timing/now'\nimport { getOrSet } from '../../../common/util/get-or-set'\nimport { wrapRaf, wrapTimer, wrapEvents, wrapXhr } from '../../../common/wrap'\nimport slice from 'lodash._slice'\nimport './debug'\nimport { FeatureBase } from '../../../common/util/feature-base'\n\nvar origOnerror = window.onerror\nvar handleErrors = false\nvar NR_ERR_PROP = 'nr@seenError'\n\n// skipNext counter to keep track of uncaught\n// errors that will be the same as caught errors.\n// var skipNext = 0\n\nexport class Instrument extends FeatureBase {\n constructor(agentIdentifier) {\n super(agentIdentifier)\n // skipNext counter to keep track of uncaught\n // errors that will be the same as caught errors.\n this.skipNext = 0\n\n const self = this\n\n this.ee.on('fn-start', function (args, obj, methodName) {\n if (handleErrors) {\n this.skipNext = this.skipNext ? this.skipNext + 1 : 1\n }\n })\n\n this.ee.on('fn-err', function (args, obj, err) {\n if (handleErrors && !err[NR_ERR_PROP]) {\n getOrSet(err, NR_ERR_PROP, function getVal() {\n return true\n })\n this.thrown = true\n notice(err, undefined, self.ee)\n }\n })\n\n this.ee.on('fn-end', function () {\n if (!handleErrors) return\n if (!this.thrown && this.skipNext > 0) this.skipNext -= 1\n })\n\n this.ee.on('internal-error', (e) => {\n handle('ierr', [e, now(), true], undefined, undefined, this.ee)\n })\n\n // Declare that we are using err instrumentation\n // require('./debug')\n\n const prevOnError = window.onerror\n window.onerror = (...args) => {\n if (prevOnError) prevOnError(...args)\n this.onerrorHandler(...args)\n return false\n }\n\n try {\n window.addEventListener('unhandledrejection', (e) => {\n this.onerrorHandler(null, null, null, null, new Error(e.reason))\n })\n } catch (err) {\n // do nothing -- addEventListener is not supported\n }\n\n try {\n throw new Error()\n } catch (e) {\n // Only wrap stuff if try/catch gives us useful data. It doesn't in IE < 10.\n if ('stack' in e) {\n wrapTimer(this.ee)\n wrapRaf(this.ee)\n\n if ('addEventListener' in window) {\n wrapEvents(this.ee)\n }\n\n if (getRuntime(this.agentIdentifier).xhrWrappable) {\n wrapXhr(this.ee)\n }\n\n handleErrors = true\n }\n }\n }\n\n // FF and Android browsers do not provide error info to the 'error' event callback,\n // so we must use window.onerror\n onerrorHandler(message, filename, lineno, column, errorObj) {\n try {\n if (this.skipNext) this.skipNext -= 1\n else notice(errorObj || new UncaughtException(message, filename, lineno), true, this.ee)\n } catch (e) {\n try {\n handle('ierr', [e, now(), true], undefined, undefined, this.ee)\n } catch (err) {\n // do nothing\n }\n }\n\n if (typeof origOnerror === 'function') return origOnerror.apply(this, slice(arguments))\n return false\n }\n}\n\nfunction UncaughtException(message, filename, lineno) {\n this.message = message || 'Uncaught error with no additional information'\n this.sourceURL = filename\n this.line = lineno\n}\n\n// emits 'handle > error' event, which the error aggregator listens on\nfunction notice(err, doNotStamp, ee) {\n // by default add timestamp, unless specifically told not to\n // this is to preserve existing behavior\n var time = (!doNotStamp) ? now() : null\n handle('err', [err, time], undefined, undefined, ee)\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { mapOwn } from '../../../common/util/map-own'\nimport { stringify } from '../../../common/util/stringify'\nimport { registerHandler as register } from '../../../common/event-emitter/register-handler'\n// import { on as onHarvest } from '../../../common/harvest/harvest'\nimport { HarvestScheduler } from '../../../common/harvest/harvest-scheduler'\nimport { cleanURL } from '../../../common/url/clean-url'\nimport { getConfigurationValue, getInfo, getRuntime, setInfo } from '../../../common/config/config'\nimport { FeatureBase } from '../../../common/util/feature-base'\n\nexport class Aggregate extends FeatureBase {\n constructor(agentIdentifier, aggregator) {\n super(agentIdentifier, aggregator)\n this.eventsPerMinute = 240\n this.harvestTimeSeconds = getConfigurationValue('ins.harvestTimeSeconds') || 30\n this.eventsPerHarvest = this.eventsPerMinute * this.harvestTimeSeconds / 60\n this.referrerUrl\n this.currentEvents\n\n this.events = []\n this.att = {}\n setInfo(this.agentIdentifier, {jsAttributes: this.att})\n\n if (document.referrer) this.referrerUrl = cleanURL(document.referrer)\n\n register('api-setCustomAttribute', (...args) => this.setCustomAttribute(...args), 'api', this.ee)\n\n this.ee.on('feat-ins', function () {\n register('api-addPageAction', (...args) => this.addPageAction(...args), undefined, this.ee)\n\n var scheduler = new HarvestScheduler('ins', {onFinished: (...args) => this.onHarvestFinished(...args)}, this)\n scheduler.harvest.on('ins', (...args) => this.onHarvestStarted(...args))\n scheduler.startTimer(this.harvestTimeSeconds, 0)\n })\n }\n\n onHarvestStarted (options) {\n const { userAttributes, atts } = getInfo(this.agentIdentifier)\n var payload = ({\n qs: {\n ua: userAttributes,\n at: atts\n },\n body: {\n ins: this.events\n }\n })\n\n if (options.retry) {\n this.currentEvents = this.events\n }\n\n this.events = []\n return payload\n }\n\n onHarvestFinished (result) {\n if (result && result.sent && result.retry && this.currentEvents) {\n this.events = this.events.concat(this.currentEvents)\n this.currentEvents = null\n }\n }\n\n // WARNING: Insights times are in seconds. EXCEPT timestamp, which is in ms.\n addPageAction (t, name, attributes) {\n if (this.events.length >= this.eventsPerHarvest) return\n var width\n var height\n var eventAttributes = {}\n\n if (typeof window !== 'undefined' && window.document && window.document.documentElement) {\n // Doesn't include the nav bar when it disappears in mobile safari\n // https://github.com/jquery/jquery/blob/10399ddcf8a239acc27bdec9231b996b178224d3/src/dimensions.js#L23\n width = window.document.documentElement.clientWidth\n height = window.document.documentElement.clientHeight\n }\n\n var defaults = {\n timestamp: t + getRuntime(this.agentIdentifier).offset,\n timeSinceLoad: t / 1000,\n browserWidth: width,\n browserHeight: height,\n referrerUrl: this.referrerUrl,\n currentUrl: cleanURL('' + location),\n pageUrl: cleanURL(getRuntime(this.agentIdentifier).origin),\n eventType: 'PageAction'\n }\n\n mapOwn(defaults, set)\n mapOwn(this.att, set)\n if (attributes && typeof attributes === 'object') {\n mapOwn(attributes, set)\n }\n eventAttributes.actionName = name || ''\n\n this.events.push(eventAttributes)\n\n function set (key, val) {\n eventAttributes[key] = (val && typeof val === 'object' ? stringify(val) : val)\n }\n }\n\n setCustomAttribute (t, key, value) {\n this.att[key] = value\n }\n}\n\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Turn on feature\nimport { getRuntime } from '../../../common/config/config'\nimport { FeatureBase } from '../../../common/util/feature-base'\n\nexport class Instrument extends FeatureBase {\n constructor(agentIdentifier) {\n super(agentIdentifier)\n\n if (!getRuntime(this.agentIdentifier).disabled) getRuntime(this.agentIdentifier).features.ins = true\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// We don't use JSON.stringify directly on the performance timing data for these reasons:\n// * Chrome has extra data in the performance object that we don't want to send all the time (wasteful)\n// * Firefox fails to stringify the native object due to - http://code.google.com/p/v8/issues/detail?id=1223\n// * The variable names are long and wasteful to transmit\n\n// Add Performance Timing values to the given object.\n// * Values are written relative to an offset to reduce their length (i.e. number of characters).\n// * The offset is sent with the data\n// * 0's are not included unless the value is a 'relative zero'\n//\n\nvar START = 'Start'\nvar END = 'End'\nvar UNLOAD_EVENT = 'unloadEvent'\nvar REDIRECT = 'redirect'\nvar DOMAIN_LOOKUP = 'domainLookup'\nvar ONNECT = 'onnect'\nvar REQUEST = 'request'\nvar RESPONSE = 'response'\nvar LOAD_EVENT = 'loadEvent'\nvar DOM_CONTENT_LOAD_EVENT = 'domContentLoadedEvent'\n\nvar navTimingValues = []\n// module.exports = {\n// addPT: addPT,\n// addPN: addPN,\n// nt: navTimingValues\n// }\n\nexport function addPT (pt, v) {\n var offset = pt['navigation' + START]\n v.of = offset\n addRel(offset, offset, v, 'n')\n addRel(pt[UNLOAD_EVENT + START], offset, v, 'u')\n addRel(pt[REDIRECT + START], offset, v, 'r')\n addRel(pt[UNLOAD_EVENT + END], offset, v, 'ue')\n addRel(pt[REDIRECT + END], offset, v, 're')\n addRel(pt['fetch' + START], offset, v, 'f')\n addRel(pt[DOMAIN_LOOKUP + START], offset, v, 'dn')\n addRel(pt[DOMAIN_LOOKUP + END], offset, v, 'dne')\n addRel(pt['c' + ONNECT + START], offset, v, 'c')\n addRel(pt['secureC' + ONNECT + 'ion' + START], offset, v, 's')\n addRel(pt['c' + ONNECT + END], offset, v, 'ce')\n addRel(pt[REQUEST + START], offset, v, 'rq')\n addRel(pt[RESPONSE + START], offset, v, 'rp')\n addRel(pt[RESPONSE + END], offset, v, 'rpe')\n addRel(pt.domLoading, offset, v, 'dl')\n addRel(pt.domInteractive, offset, v, 'di')\n addRel(pt[DOM_CONTENT_LOAD_EVENT + START], offset, v, 'ds')\n addRel(pt[DOM_CONTENT_LOAD_EVENT + END], offset, v, 'de')\n addRel(pt.domComplete, offset, v, 'dc')\n addRel(pt[LOAD_EVENT + START], offset, v, 'l')\n addRel(pt[LOAD_EVENT + END], offset, v, 'le')\n return v\n}\n\n// Add Performance Navigation values to the given object\nexport function addPN (pn, v) {\n addRel(pn.type, 0, v, 'ty')\n addRel(pn.redirectCount, 0, v, 'rc')\n return v\n}\n\nexport function addRel (value, offset, obj, prop) {\n var relativeValue\n if (typeof (value) === 'number' && (value > 0)) {\n relativeValue = Math.round(value - offset)\n obj[prop] = relativeValue\n }\n navTimingValues.push(relativeValue)\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport var paintMetrics = {}\n\n// module.exports = {\n// addMetric: addMetric,\n// metrics: paintMetrics\n// }\n\nexport function addMetric (name, value) {\n paintMetrics[name] = value\n}\n","import { measure } from '../../../common/timing/stopwatch'\nimport { mapOwn } from '../../../common/util/map-own'\nimport { param, fromArray } from '../../../common/url/encode'\nimport { addPT, addPN } from '../../../common/timing/nav-timing'\nimport { stringify } from '../../../common/util/stringify'\nimport { addMetric as addPaintMetric } from '../../../common/metrics/paint-metrics'\nimport { submitData } from '../../../common/util/submit-data'\nimport { getConfigurationValue, getInfo, getRuntime } from '../../../common/config/config'\nimport { HarvestScheduler } from '../../../common/harvest/harvest-scheduler'\nimport { FeatureBase } from '../../../common/util/feature-base'\n\nconst jsonp = 'NREUM.setToken'\n\nexport class Aggregate extends FeatureBase {\n constructor(agentIdentifier, aggregator) {\n super(agentIdentifier, aggregator)\n this.getScheme = () => getConfigurationValue(this.agentIdentifier, 'ssl') === false ? 'http' : 'https'\n\n const info = getInfo(this.agentIdentifier)\n if (!info.beacon) return\n if (info.queueTime) this.aggregator.store('measures', 'qt', { value: info.queueTime })\n if (info.applicationTime) this.aggregator.store('measures', 'ap', { value: info.applicationTime })\n\n // some time in the past some code will have called stopwatch.mark('starttime', Date.now())\n // calling measure like this will create a metric that measures the time differential between\n // the two marks.\n measure(this.aggregator, 'be', 'starttime', 'firstbyte')\n measure(this.aggregator, 'fe', 'firstbyte', 'onload')\n measure(this.aggregator, 'dc', 'firstbyte', 'domContent')\n\n var measuresMetrics = this.aggregator.get('measures')\n\n var measuresQueryString = mapOwn(measuresMetrics, function (metricName, measure) {\n return '&' + metricName + '=' + measure.params.value\n }).join('')\n\n // if (measuresQueryString) {\n // currently we only have one version of our protocol\n // in the future we may add more\n var protocol = '1'\n\n var scheduler = new HarvestScheduler('page-view-event', {}, this)\n\n var chunksForQueryString = [scheduler.harvest.baseQueryString()]\n\n chunksForQueryString.push(measuresQueryString)\n\n chunksForQueryString.push(param('tt', info.ttGuid))\n chunksForQueryString.push(param('us', info.user))\n chunksForQueryString.push(param('ac', info.account))\n chunksForQueryString.push(param('pr', info.product))\n chunksForQueryString.push(param('af', mapOwn(getRuntime(this.agentIdentifier).features, function (k) { return k }).join(',')))\n\n if (window.performance && typeof (window.performance.timing) !== 'undefined') {\n var navTimingApiData = ({\n timing: addPT(window.performance.timing, {}),\n navigation: addPN(window.performance.navigation, {})\n })\n chunksForQueryString.push(param('perf', stringify(navTimingApiData)))\n }\n\n if (window.performance && window.performance.getEntriesByType) {\n var entries = window.performance.getEntriesByType('paint')\n if (entries && entries.length > 0) {\n entries.forEach(function(entry) {\n if (!entry.startTime || entry.startTime <= 0) return\n\n if (entry.name === 'first-paint') {\n chunksForQueryString.push(param('fp',\n String(Math.floor(entry.startTime))))\n } else if (entry.name === 'first-contentful-paint') {\n chunksForQueryString.push(param('fcp',\n String(Math.floor(entry.startTime))))\n }\n addPaintMetric(entry.name, Math.floor(entry.startTime))\n })\n }\n }\n\n chunksForQueryString.push(param('xx', info.extra))\n chunksForQueryString.push(param('ua', info.userAttributes))\n chunksForQueryString.push(param('at', info.atts))\n\n var customJsAttributes = stringify(info.jsAttributes)\n chunksForQueryString.push(param('ja', customJsAttributes === '{}' ? null : customJsAttributes))\n\n var queryString = fromArray(chunksForQueryString, getRuntime(this.agentIdentifier).maxBytes)\n\n submitData.jsonp(\n this.getScheme() + '://' + info.beacon + '/' + protocol + '/' + info.licenseKey + queryString,\n jsonp\n )\n }\n}\n","import { eventListenerOpts } from '../event-listener/event-listener-opts'\n\nconst win = window\nconst doc = win.document\nconst ADD_EVENT_LISTENER = 'addEventListener'\nconst ATTACH_EVENT = 'attachEvent'\n\nfunction stateChange (cb) {\n if (doc.readyState === 'complete') cb()\n}\n\nexport function onWindowLoad(cb) {\n if (doc[ADD_EVENT_LISTENER]) win[ADD_EVENT_LISTENER]('load', cb, eventListenerOpts(false))\n else win[ATTACH_EVENT]('onload', cb)\n}\n\nexport function onDOMContentLoaded(cb) {\n if (doc[ADD_EVENT_LISTENER]) doc[ADD_EVENT_LISTENER]('DOMContentLoaded', cb, eventListenerOpts(false))\n else doc[ATTACH_EVENT]('onreadystatechange', stateChange)\n}\n\n","\nimport { handle } from '../../../common/event-emitter/handle'\nimport { now, getOffset, getLastTimestamp } from '../../../common/timing/now'\nimport { FeatureBase } from '../../../common/util/feature-base'\nimport { onDOMContentLoaded, onWindowLoad } from '../../../common/window/load'\n\nexport class Instrument extends FeatureBase {\n constructor(agentIdentifier) {\n super(agentIdentifier)\n handle('mark', ['firstbyte', getLastTimestamp()], null, 'api', this.ee)\n\n onWindowLoad(() => this.measureWindowLoaded())\n onDOMContentLoaded(() => this.measureDomContentLoaded())\n }\n\n measureWindowLoaded() {\n var ts = now()\n handle('mark', ['onload', ts + getOffset()], null, 'api', this.ee)\n handle('timing', ['load', ts], undefined, undefined, this.ee)\n }\n\n measureDomContentLoaded() {\n handle('mark', ['domContent', now() + getOffset()], null, 'api', this.ee)\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { nullable, numeric, getAddStringContext, addCustomAttributes } from '../../../common/serialize/bel-serializer'\nimport { now } from '../../../common/timing/now'\nimport { mapOwn } from '../../../common/util/map-own'\nimport { HarvestScheduler } from '../../../common/harvest/harvest-scheduler'\nimport { defaultRegister as register } from '../../../common/event-emitter/register-handler'\nimport { cleanURL } from '../../../common/url/clean-url'\nimport { handle } from '../../../common/event-emitter/handle'\nimport { getInfo } from '../../../common/config/config'\nimport { FeatureBase } from '../../../common/util/feature-base'\nexport class Aggregate extends FeatureBase {\n constructor(agentIdentifier, aggregator) {\n super(agentIdentifier, aggregator)\n this.timings = []\n this.timingsSent = []\n this.lcpRecorded = false\n this.lcp = null\n this.clsSupported = false\n this.cls = 0\n this.clsSession = {value: 0, firstEntryTime: 0, lastEntryTime: 0}\n this.pageHideRecorded = false\n\n this.harvestTimeSeconds = 30\n\n try {\n clsSupported = PerformanceObserver.supportedEntryTypes.includes('layout-shift') // eslint-disable-line no-undef\n } catch (e) {\n // do nothing\n }\n\n if (!this.options) this.options = {}\n var maxLCPTimeSeconds = this.options.maxLCPTimeSeconds || 60\n var initialHarvestSeconds = this.options.initialHarvestSeconds || 10\n this.harvestTimeSeconds = this.options.harvestTimeSeconds || 30\n\n this.scheduler = new HarvestScheduler('events', {\n onFinished: (...args) => this.onHarvestFinished(...args),\n getPayload: (...args) => this.prepareHarvest(...args),\n onUnload: () => this.finalHarvest()\n }, this)\n\n register('timing', (...args) => this.processTiming(...args), undefined, this.ee)\n register('lcp', (...args) => this.updateLatestLcp(...args), undefined, this.ee)\n register('cls', (...args) => this.updateClsScore(...args), undefined, this.ee)\n register('pageHide', (...args) => this.updatePageHide(...args), undefined, this.ee)\n\n // final harvest is initiated from the main agent module, but since harvesting\n // here is not initiated by the harvester, we need to subscribe to the unload event\n // separately\n // subscribeToUnload((...args) => this.finalHarvest(...args))\n\n // After 1 minute has passed, record LCP value if no user interaction has occurred first\n setTimeout(() => {\n this.recordLcp()\n this.lcpRecorded = true\n }, maxLCPTimeSeconds * 1000)\n\n // send initial data sooner, then start regular\n this.scheduler.startTimer(this.harvestTimeSeconds, initialHarvestSeconds)\n }\n\n recordLcp() {\n if (!this.lcpRecorded && this.lcp !== null) {\n var lcpEntry = this.lcp[0]\n var cls = this.lcp[1]\n var networkInfo = this.lcp[2]\n\n var attrs = {\n 'size': lcpEntry.size,\n 'eid': lcpEntry.id\n }\n\n if (networkInfo) {\n if (networkInfo['net-type']) attrs['net-type'] = networkInfo['net-type']\n if (networkInfo['net-etype']) attrs['net-etype'] = networkInfo['net-etype']\n if (networkInfo['net-rtt']) attrs['net-rtt'] = networkInfo['net-rtt']\n if (networkInfo['net-dlink']) attrs['net-dlink'] = networkInfo['net-dlink']\n }\n\n if (lcpEntry.url) {\n attrs['elUrl'] = cleanURL(lcpEntry.url)\n }\n\n if (lcpEntry.element && lcpEntry.element.tagName) {\n attrs['elTag'] = lcpEntry.element.tagName\n }\n\n // collect 0 only when CLS is supported, since 0 is a valid score\n if (cls > 0 || this.clsSupported) {\n attrs['cls'] = cls\n }\n\n this.addTiming('lcp', Math.floor(lcpEntry.startTime), attrs, false)\n this.lcpRecorded = true\n }\n }\n\n updateLatestLcp(lcpEntry, networkInformation) {\n if (this.lcp) {\n var previous = this.lcp[0]\n if (previous.size >= lcpEntry.size) {\n return\n }\n }\n\n this.lcp = [lcpEntry, this.cls, networkInformation]\n }\n\n updateClsScore(clsEntry) {\n // this used to be cumulative for the whole page, now we need to split it to a\n // new CLS measurement after 1s between shifts or 5s total\n if ((clsEntry.startTime - this.clsSession.lastEntryTime) > 1000 ||\n (clsEntry.startTime - this.clsSession.firstEntryTime) > 5000) {\n this.clsSession = {value: 0, firstEntryTime: clsEntry.startTime, lastEntryTime: clsEntry.startTime}\n }\n\n this.clsSession.value += clsEntry.value\n this.clsSession.lastEntryTime = Math.max(this.clsSession.lastEntryTime, clsEntry.startTime)\n\n // only keep the biggest CLS we've observed\n if (this.cls < this.clsSession.value) this.cls = this.clsSession.value\n }\n\n updatePageHide(timestamp) {\n if (!this.pageHideRecorded) {\n this.addTiming('pageHide', timestamp, null, true)\n this.pageHideRecorded = true\n }\n }\n\n recordUnload() {\n this.updatePageHide(now())\n this.addTiming('unload', now(), null, true)\n }\n\n addTiming(name, value, attrs, addCls) {\n attrs = attrs || {}\n // collect 0 only when CLS is supported, since 0 is a valid score\n if ((this.cls > 0 || this.clsSupported) && addCls) {\n attrs['cls'] = this.cls\n }\n\n this.timings.push({\n name: name,\n value: value,\n attrs: attrs\n })\n\n handle('pvtAdded', [name, value, attrs])\n }\n\n processTiming(name, value, attrs) {\n // Upon user interaction, the Browser stops executing LCP logic, so we can send here\n // We're using setTimeout to give the Browser time to finish collecting LCP value\n if (name === 'fi') {\n setTimeout(this.recordLcp, 0)\n }\n\n this.addTiming(name, value, attrs, true)\n }\n\n onHarvestFinished(result) {\n if (result.retry && this.timingsSent.length > 0) {\n for (var i = 0; i < this.timingsSent.length; i++) {\n this.timings.push(this.timingsSent[i])\n }\n this.timingsSent = []\n }\n }\n\n finalHarvest() {\n this.recordLcp()\n this.recordUnload()\n var payload = this.prepareHarvest({ retry: false })\n this.scheduler.harvest.send('events', payload, { unload: true })\n }\n\n appendGlobalCustomAttributes(timing) {\n var timingAttributes = timing.attrs || {}\n var customAttributes = getInfo(this.agentIdentifier).jsAttributes || {}\n\n var reservedAttributes = ['size', 'eid', 'cls', 'type', 'fid', 'elTag', 'elUrl', 'net-type',\n 'net-etype', 'net-rtt', 'net-dlink']\n mapOwn(customAttributes, function (key, val) {\n if (reservedAttributes.indexOf(key) < 0) {\n timingAttributes[key] = val\n }\n })\n }\n\n // serialize and return current timing data, clear and save current data for retry\n prepareHarvest(options) {\n if (this.timings.length === 0) return\n\n var payload = this.getPayload(this.timings)\n if (options.retry) {\n for (var i = 0; i < this.timings.length; i++) {\n this.timingsSent.push(this.timings[i])\n }\n }\n this.timings = []\n return { body: { e: payload } }\n }\n\n // serialize array of timing data\n getPayload(data) {\n var addString = getAddStringContext()\n\n var payload = 'bel.6;'\n\n for (var i = 0; i < data.length; i++) {\n var timing = data[i]\n\n payload += 'e,'\n payload += addString(timing.name) + ','\n payload += nullable(timing.value, numeric, false) + ','\n\n this.appendGlobalCustomAttributes(timing)\n\n var attrParts = addCustomAttributes(timing.attrs, addString)\n if (attrParts && attrParts.length > 0) {\n payload += numeric(attrParts.length) + ';' + attrParts.join(';')\n }\n\n if ((i + 1) < data.length) payload += ';'\n }\n\n return payload\n }\n}\n\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {eventListenerOpts} from '../event-listener/event-listener-opts'\n\nvar hidden, eventName, state\n\nif (typeof document.hidden !== 'undefined') {\n hidden = 'hidden'\n eventName = 'visibilitychange'\n state = 'visibilityState'\n} else if (typeof document.msHidden !== 'undefined') {\n hidden = 'msHidden'\n eventName = 'msvisibilitychange'\n} else if (typeof document.webkitHidden !== 'undefined') {\n hidden = 'webkitHidden'\n eventName = 'webkitvisibilitychange'\n state = 'webkitVisibilityState'\n}\n\nexport function subscribeToVisibilityChange(cb) {\n if ('addEventListener' in document && eventName) {\n document.addEventListener(eventName, handleVisibilityChange, eventListenerOpts(false))\n }\n\n function handleVisibilityChange() {\n if (state && document[state]) {\n cb(document[state])\n } else if (document[hidden]) {\n cb('hidden')\n } else {\n cb('visible')\n }\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { handle } from '../../../common/event-emitter/handle'\nimport { subscribeToVisibilityChange } from '../../../common/window/visibility'\nimport { eventListenerOpts } from '../../../common/event-listener/event-listener-opts'\nimport { gosNREUM } from '../../../common/window/nreum'\nimport { getOffset, now } from '../../../common/timing/now'\nimport { getConfigurationValue } from '../../../common/config/config'\nimport { FeatureBase } from '../../../common/util/feature-base'\n\nexport class Instrument extends FeatureBase {\n constructor(agentIdentifier) {\n super(agentIdentifier)\n this.pageHiddenTime\n this.performanceObserver\n this.lcpPerformanceObserver\n this.clsPerformanceObserver\n this.fiRecorded = false\n\n if (this.isEnabled()) {\n if ('PerformanceObserver' in window && typeof window.PerformanceObserver === 'function') {\n // passing in an unknown entry type to observer could throw an exception\n this.performanceObserver = new PerformanceObserver(perfObserver) // eslint-disable-line no-undef\n try {\n this.performanceObserver.observe({ entryTypes: ['paint'] })\n } catch (e) {\n // do nothing\n }\n\n this.lcpPerformanceObserver = new PerformanceObserver(lcpObserver) // eslint-disable-line no-undef\n try {\n this.lcpPerformanceObserver.observe({ entryTypes: ['largest-contentful-paint'] })\n } catch (e) {\n // do nothing\n }\n\n this.clsPerformanceObserver = new PerformanceObserver(clsObserver) // eslint-disable-line no-undef\n try {\n this.clsPerformanceObserver.observe({ type: 'layout-shift', buffered: true })\n } catch (e) {\n // do nothing\n }\n }\n\n // first interaction and first input delay\n if ('addEventListener' in document) {\n this.fiRecorded = false\n var allowedEventTypes = ['click', 'keydown', 'mousedown', 'pointerdown', 'touchstart']\n allowedEventTypes.forEach((e) => {\n document.addEventListener(e, (...args) => this.captureInteraction(...args), eventListenerOpts(false))\n })\n }\n // page visibility events\n subscribeToVisibilityChange((...args) => this.captureVisibilityChange(...args))\n }\n }\n\n isEnabled() {\n return getConfigurationValue(this.agentIdentifier, 'page_view_timing.enabled') !== false\n }\n\n // paint metrics\n perfObserver(list, observer) {\n var entries = list.getEntries()\n entries.forEach((entry) => {\n if (entry.name === 'first-paint') {\n handle('timing', ['fp', Math.floor(entry.startTime)], undefined, undefined, this.ee)\n } else if (entry.name === 'first-contentful-paint') {\n handle('timing', ['fcp', Math.floor(entry.startTime)], undefined, undefined, this.ee)\n }\n })\n }\n\n // largest contentful paint\n lcpObserver(list, observer) {\n var entries = list.getEntries()\n if (entries.length > 0) {\n var entry = entries[entries.length - 1]\n\n if (this.pageHiddenTime && this.pageHiddenTime < entry.startTime) return\n\n var payload = [entry]\n\n var attributes = this.addConnectionAttributes({})\n if (attributes) payload.push(attributes)\n\n handle('lcp', payload, undefined, undefined, this.ee)\n }\n }\n\n clsObserver(list) {\n list.getEntries().forEach(function (entry) {\n if (!entry.hadRecentInput) {\n handle('cls', [entry], undefined, undefined, this.ee)\n }\n })\n }\n\n // takes an attributes object and appends connection attributes if available\n addConnectionAttributes(attributes) {\n var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection\n if (!connection) return\n\n if (connection.type) attributes['net-type'] = connection.type\n if (connection.effectiveType) attributes['net-etype'] = connection.effectiveType\n if (connection.rtt) attributes['net-rtt'] = connection.rtt\n if (connection.downlink) attributes['net-dlink'] = connection.downlink\n\n return attributes\n }\n\n captureInteraction(evt) {\n // if (evt instanceof origEvent && !fiRecorded) {\n if (evt instanceof gosNREUM().o.EV && !this.fiRecorded) {\n var fi = Math.round(evt.timeStamp)\n var attributes = {\n type: evt.type\n }\n\n this.addConnectionAttributes(attributes)\n\n // The value of Event.timeStamp is epoch time in some old browser, and relative\n // timestamp in newer browsers. We assume that large numbers represent epoch time.\n if (fi <= now()) {\n attributes['fid'] = now() - fi\n } else if (fi > getOffset() && fi <= Date.now()) {\n fi = fi - getOffset()\n attributes['fid'] = now() - fi\n } else {\n fi = now()\n }\n\n this.fiRecorded = true\n handle('timing', ['fi', fi, attributes], undefined, undefined, this.ee)\n }\n }\n\n captureVisibilityChange(state) {\n if (state === 'hidden') {\n this.pageHiddenTime = now()\n handle('pageHide', [this.pageHiddenTime], undefined, undefined, this.ee)\n }\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { registerHandler } from '../../../common/event-emitter/register-handler'\nimport { xhrUsable } from '../../../common/harvest/harvest'\nimport { HarvestScheduler } from '../../../common/harvest/harvest-scheduler'\nimport { mapOwn } from '../../../common/util/map-own'\nimport { reduce } from '../../../common/util/reduce'\nimport { stringify } from '../../../common/util/stringify'\nimport { parseUrl } from '../../../common/url/parse-url'\nimport { supportsPerformanceObserver } from '../../../common/window/supports-performance-observer'\nimport slice from 'lodash._slice'\nimport { getConfigurationValue, getInfo, getRuntime } from '../../../common/config/config'\nimport { findStartTime } from '../../../common/timing/start-time'\nimport { now } from '../../../common/timing/now'\nimport { FeatureBase } from '../../../common/util/feature-base'\n\nexport class Aggregate extends FeatureBase {\n constructor(agentIdentifier, aggregator) {\n super(agentIdentifier, aggregator)\n this.ptid = ''\n this.ignoredEvents = {\n // we find that certain events make the data too noisy to be useful\n global: { mouseup: true, mousedown: true },\n // certain events are present both in the window and in PVT metrics. PVT metrics are prefered so the window events should be ignored\n window: { load: true, pagehide: true }\n }\n this.toAggregate = {\n typing: [1000, 2000],\n scrolling: [100, 1000],\n mousing: [1000, 2000],\n touching: [1000, 2000]\n }\n\n this.rename = {\n typing: {\n keydown: true,\n keyup: true,\n keypress: true\n },\n mousing: {\n mousemove: true,\n mouseenter: true,\n mouseleave: true,\n mouseover: true,\n mouseout: true\n },\n scrolling: {\n scroll: true\n },\n touching: {\n touchstart: true,\n touchmove: true,\n touchend: true,\n touchcancel: true,\n touchenter: true,\n touchleave: true\n }\n }\n\n this.trace = {}\n this.nodeCount = 0\n this.sentTrace = null\n this.harvestTimeSeconds = getConfigurationValue(this.agentIdentifier, 'stn.harvestTimeSeconds') || 10\n this.maxNodesPerHarvest = getConfigurationValue(this.agentIdentifier, 'stn.maxNodesPerHarvest') || 1000\n\n this.laststart = 0\n\n findStartTime()\n\n if (!xhrUsable) return\n // bail if not instrumented\n if (!getRuntime(this.agentIdentifier).features.stn) return\n\n // ee.on('feat-stn', () => {\n this.storeTiming(window.performance.timing)\n\n // onHarvest('resources', prepareHarvest)\n\n var scheduler = new HarvestScheduler('resources', {\n onFinished: (...args) => onHarvestFinished(...args),\n retryDelay: (...args) => this.harvestTimeSeconds(...args)\n // onUnload: () => this.finalHarvest() // no special actions needed before unloading\n })\n scheduler.runHarvest({ needResponse: true })\n scheduler.harvest.on('resources', (...args) => prepareHarvest(...args))\n\n function onHarvestFinished(result) {\n // start timer only if ptid was returned by server\n if (result.sent && result.responseText && !this.ptid) {\n this.ptid = result.responseText\n getRuntime(this.agentIdentifier).ptid = this.ptid\n scheduler.startTimer(this.harvestTimeSeconds)\n }\n\n if (result.sent && result.retry && this.sentTrace) {\n mapOwn(this.sentTrace, function (name, nodes) {\n this.mergeSTNs(name, nodes)\n })\n this.sentTrace = null\n }\n }\n\n function prepareHarvest(options) {\n if ((now()) > (15 * 60 * 1000)) {\n // been collecting for over 15 min, empty trace object and bail\n scheduler.stopTimer()\n this.trace = {}\n return\n }\n\n // only send when there are more than 30 nodes to send\n if (this.ptid && this.nodeCount <= 30) return\n\n return this.takeSTNs(options.retry)\n }\n\n registerHandler('bst', (...args) => this.storeEvent(...args), undefined, this.ee)\n registerHandler('bstTimer', (...args) => this.storeTimer(...args), undefined, this.ee)\n registerHandler('bstResource', (...args) => this.storeResources(...args), undefined, this.ee)\n registerHandler('bstHist', (...args) => this.storeHist(...args), undefined, this.ee)\n registerHandler('bstXhrAgg', (...args) => this.storeXhrAgg(...args), undefined, this.ee)\n registerHandler('bstApi', (...args) => this.storeSTN(...args), undefined, this.ee)\n registerHandler('errorAgg', (...args) => this.storeErrorAgg(...args), undefined, this.ee)\n registerHandler('pvtAdded', (...args) => this.processPVT(...args), undefined, this.ee)\n // })\n }\n\n processPVT(name, value, attrs) {\n var t = {}\n t[name] = value\n this.storeTiming(t, true)\n if (this.hasFID(name, attrs)) this.storeEvent({ type: 'fid', target: 'document' }, 'document', value, value + attrs.fid)\n }\n\n storeTiming(_t, ignoreOffset) {\n var key\n var val\n var timeOffset\n var dateNow = Date.now()\n\n // loop iterates through prototype also (for FF)\n for (key in _t) {\n val = _t[key]\n\n // ignore inherited methods, meaningless 0 values, and bogus timestamps\n // that are in the future (Microsoft Edge seems to sometimes produce these)\n if (!(typeof (val) === 'number' && val > 0 && val < dateNow)) continue\n\n timeOffset = !ignoreOffset ? _t[key] - getRuntime(this.agentIdentifier).offset : _t[key]\n\n this.storeSTN({\n n: key,\n s: timeOffset,\n e: timeOffset,\n o: 'document',\n t: 'timing'\n })\n }\n }\n\n storeTimer(target, start, end, type) {\n var category = 'timer'\n if (type === 'requestAnimationFrame') category = type\n\n var evt = {\n n: type,\n s: start,\n e: end,\n o: 'window',\n t: category\n }\n\n this.storeSTN(evt)\n }\n\n storeEvent(currentEvent, target, start, end) {\n if (this.shouldIgnoreEvent(currentEvent, target)) return false\n\n var evt = {\n n: this.evtName(currentEvent.type),\n s: start,\n e: end,\n t: 'event'\n }\n\n try {\n // webcomponents-lite.js can trigger an exception on currentEvent.target getter because\n // it does not check currentEvent.currentTarget before calling getRootNode() on it\n evt.o = this.evtOrigin(currentEvent.target, target)\n } catch (e) {\n evt.o = this.evtOrigin(null, target)\n }\n\n this.storeSTN(evt)\n }\n\n evtName(type) {\n var name = type\n\n mapOwn(this.rename, function (key, val) {\n if (type in val) name = key\n })\n\n return name\n }\n\n evtOrigin(t, target) {\n var origin = 'unknown'\n\n if (t && t instanceof XMLHttpRequest) {\n var params = this.ee.context(t).params\n origin = params.status + ' ' + params.method + ': ' + params.host + params.pathname\n } else if (t && typeof (t.tagName) === 'string') {\n origin = t.tagName.toLowerCase()\n if (t.id) origin += '#' + t.id\n if (t.className) origin += '.' + slice(t.classList).join('.')\n }\n\n if (origin === 'unknown') {\n if (typeof target === 'string') origin = target\n else if (target === document) origin = 'document'\n else if (target === window) origin = 'window'\n else if (target instanceof FileReader) origin = 'FileReader'\n }\n\n return origin\n }\n\n storeHist(path, old, time) {\n var node = {\n n: 'history.pushState',\n s: time,\n e: time,\n o: path,\n t: old\n }\n\n this.storeSTN(node)\n }\n\n storeResources(resources) {\n if (!resources || resources.length === 0) return\n\n resources.forEach(function (currentResource) {\n var parsed = parseUrl(currentResource.name)\n var res = {\n n: currentResource.initiatorType,\n s: currentResource.fetchStart | 0,\n e: currentResource.responseEnd | 0,\n o: parsed.protocol + '://' + parsed.hostname + ':' + parsed.port + parsed.pathname, // resource.name is actually a URL so it's the source\n t: currentResource.entryType\n }\n\n // don't recollect old resources\n if (res.s <= this.laststart) return\n\n this.storeSTN(res)\n })\n\n this.laststart = resources[resources.length - 1].fetchStart | 0\n }\n\n storeErrorAgg(type, name, params, metrics) {\n if (type !== 'err') return\n var node = {\n n: 'error',\n s: metrics.time,\n e: metrics.time,\n o: params.message,\n t: params.stackHash\n }\n this.storeSTN(node)\n }\n\n storeXhrAgg(type, name, params, metrics) {\n if (type !== 'xhr') return\n var node = {\n n: 'Ajax',\n s: metrics.time,\n e: metrics.time + metrics.duration,\n o: params.status + ' ' + params.method + ': ' + params.host + params.pathname,\n t: 'ajax'\n }\n this.storeSTN(node)\n }\n\n storeSTN(stn) {\n // limit the number of data that is stored\n if (this.nodeCount >= this.maxNodesPerHarvest) return\n\n var traceArr = this.trace[stn.n]\n if (!traceArr) traceArr = this.trace[stn.n] = []\n\n traceArr.push(stn)\n this.nodeCount++\n }\n\n mergeSTNs(key, nodes) {\n // limit the number of data that is stored\n if (this.nodeCount >= this.maxNodesPerHarvest) return\n\n var traceArr = this.trace[key]\n if (!traceArr) traceArr = this.trace[key] = []\n\n this.trace[key] = nodes.concat(traceArr)\n this.nodeCount += nodes.length\n }\n\n takeSTNs(retry) {\n // if the observer is not being used, this checks resourcetiming buffer every harvest\n if (!supportsPerformanceObserver()) {\n this.storeResources(window.performance.getEntriesByType('resource'))\n }\n\n var stns = reduce(mapOwn(this.trace, function (name, nodes) {\n if (!(name in this.toAggregate)) return nodes\n\n return reduce(mapOwn(reduce(nodes.sort(this.byStart), this.smearEvtsByOrigin(name), {}), this.val), this.flatten, [])\n }), this.flatten, [])\n\n if (stns.length === 0) return {}\n\n if (retry) {\n this.sentTrace = this.trace\n }\n this.trace = {}\n this.nodeCount = 0\n\n var stnInfo = {\n qs: { st: '' + getRuntime(this.agentIdentifier).offset },\n body: { res: stns }\n }\n\n if (!this.ptid) {\n const {userAttributes, atts, jsAttributes} = getInfo(this.agentIdentifier)\n stnInfo.qs.ua = userAttributes\n stnInfo.qs.at = atts\n var ja = stringify(jsAttributes)\n stnInfo.qs.ja = ja === '{}' ? null : ja\n }\n return stnInfo\n }\n\n byStart(a, b) {\n return a.s - b.s\n }\n\n smearEvtsByOrigin(name) {\n var maxGap = this.toAggregate[name][0]\n var maxLen = this.toAggregate[name][1]\n var lastO = {}\n\n return function (byOrigin, evt) {\n var lastArr = byOrigin[evt.o]\n\n lastArr || (lastArr = byOrigin[evt.o] = [])\n\n var last = lastO[evt.o]\n\n if (name === 'scrolling' && !this.trivial(evt)) {\n lastO[evt.o] = null\n evt.n = 'scroll'\n lastArr.push(evt)\n } else if (last && (evt.s - last.s) < maxLen && last.e > (evt.s - maxGap)) {\n last.e = evt.e\n } else {\n lastO[evt.o] = evt\n lastArr.push(evt)\n }\n\n return byOrigin\n }\n }\n\n val(key, value) {\n return value\n }\n\n flatten(a, b) {\n return a.concat(b)\n }\n\n hasFID(name, attrs) {\n return name === 'fi' && !!attrs && typeof attrs.fid === 'number'\n }\n\n trivial(node) {\n var limit = 4\n if (node && typeof node.e === 'number' && typeof node.s === 'number' && (node.e - node.s) < limit) return true\n else return false\n }\n\n shouldIgnoreEvent(event, target) {\n var origin = this.evtOrigin(event.target, target)\n if (event.type in this.ignoredEvents.global) return true\n if (!!this.ignoredEvents[origin] && event.type in this.ignoredEvents[origin]) return true\n return false\n }\n}\n","/*\n * Copyright 2020 New Relic Corporation. All rights reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { handle } from '../../../common/event-emitter/handle'\nimport { wrapHistory, wrapEvents, wrapTimer, wrapRaf } from '../../../common/wrap'\nimport { supportsPerformanceObserver } from '../../../common/window/supports-performance-observer'\nimport { eventListenerOpts } from '../../../common/event-listener/event-listener-opts'\nimport { originals, getRuntime } from '../../../common/config/config'\nimport { now } from '../../../common/timing/now'\nimport { FeatureBase } from '../../../common/util/feature-base'\n\nvar learResourceTimings = 'learResourceTimings'\nvar ADD_EVENT_LISTENER = 'addEventListener'\nvar REMOVE_EVENT_LISTENER = 'removeEventListener'\nvar RESOURCE_TIMING_BUFFER_FULL = 'resourcetimingbufferfull'\nvar BST_RESOURCE = 'bstResource'\nvar RESOURCE = 'resource'\nvar START = '-start'\nvar END = '-end'\nvar FN_START = 'fn' + START\nvar FN_END = 'fn' + END\nvar BST_TIMER = 'bstTimer'\nvar PUSH_STATE = 'pushState'\n\nvar origEvent = originals.EV\nexport class Instrument extends FeatureBase {\n constructor(agentIdentifier) {\n super(agentIdentifier)\n getRuntime(this.agentIdentifier).features.stn = true\n\n this.timerEE = wrapTimer(this.ee)\n this.rafEE = wrapRaf(this.ee)\n wrapHistory(this.ee)\n wrapEvents(this.ee)\n\n if (!(window.performance &&\n window.performance.timing &&\n window.performance.getEntriesByType\n )) return\n\n this.ee.on(FN_START, function (args, target) {\n var evt = args[0]\n if (evt instanceof origEvent) {\n this.bstStart = now()\n }\n })\n\n this.ee.on(FN_END, function (args, target) {\n var evt = args[0]\n if (evt instanceof origEvent) {\n handle('bst', [evt, target, this.bstStart, now()])\n }\n })\n\n this.timerEE.on(FN_START, function (args, obj, type) {\n this.bstStart = now()\n this.bstType = type\n })\n\n this.timerEE.on(FN_END, function (args, target) {\n handle(BST_TIMER, [target, this.bstStart, now(), this.bstType])\n })\n\n this.rafEE.on(FN_START, function () {\n this.bstStart = now()\n })\n\n this.rafEE.on(FN_END, function (args, target) {\n handle(BST_TIMER, [target, this.bstStart, now(), 'requestAnimationFrame'])\n })\n\n this.ee.on(PUSH_STATE + START, function (args) {\n this.time = now()\n this.startPath = location.pathname + location.hash\n })\n this.ee.on(PUSH_STATE + END, function (args) {\n handle('bstHist', [location.pathname + location.hash, this.startPath, this.time])\n })\n\n if (supportsPerformanceObserver()) {\n // capture initial resources, in case our observer missed anything\n handle(BST_RESOURCE, [window.performance.getEntriesByType('resource')])\n\n this.observeResourceTimings()\n } else {\n // collect resource timings once when buffer is full\n if (ADD_EVENT_LISTENER in window.performance) {\n if (window.performance['c' + learResourceTimings]) {\n window.performance[ADD_EVENT_LISTENER](RESOURCE_TIMING_BUFFER_FULL, this.onResourceTimingBufferFull, eventListenerOpts(false))\n } else {\n window.performance[ADD_EVENT_LISTENER]('webkit' + RESOURCE_TIMING_BUFFER_FULL, this.onResourceTimingBufferFull, eventListenerOpts(false))\n }\n }\n }\n\n document[ADD_EVENT_LISTENER]('scroll', this.noOp, eventListenerOpts(false))\n document[ADD_EVENT_LISTENER]('keypress', this.noOp, eventListenerOpts(false))\n document[ADD_EVENT_LISTENER]('click', this.noOp, eventListenerOpts(false))\n }\n\n observeResourceTimings() {\n var observer = new PerformanceObserver(function (list, observer) { // eslint-disable-line no-undef\n var entries = list.getEntries()\n\n handle(BST_RESOURCE, [entries])\n })\n\n try {\n observer.observe({ entryTypes: ['resource'] })\n } catch (e) {\n // do nothing\n }\n }\n\n onResourceTimingBufferFull(e) {\n handle(BST_RESOURCE, [window.performance.getEntriesByType(RESOURCE)])\n\n // stop recording once buffer is full\n if (window.performance['c' + learResourceTimings]) {\n try {\n window.performance[REMOVE_EVENT_LISTENER](RESOURCE_TIMING_BUFFER_FULL, this.onResourceTimingBufferFull, false)\n } catch (e) {\n // do nothing\n }\n } else {\n try {\n window.performance[REMOVE_EVENT_LISTENER]('webkit' + RESOURCE_TIMING_BUFFER_FULL, this.onResourceTimingBufferFull, false)\n } catch (e) {\n // do nothing\n }\n }\n }\n\n noOp(e) { /* no-op */ }\n}\n","/**\n * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>\n * Build: `lodash modularize modern exports=\"npm\" -o ./npm/`\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\n\n/**\n * Slices the `collection` from the `start` index up to, but not including,\n * the `end` index.\n *\n * Note: This function is used instead of `Array#slice` to support node lists\n * in IE < 9 and to ensure dense arrays are returned.\n *\n * @private\n * @param {Array|Object|string} collection The collection to slice.\n * @param {number} start The start index.\n * @param {number} end The end index.\n * @returns {Array} Returns the new array.\n */\nfunction slice(array, start, end) {\n start || (start = 0);\n if (typeof end == 'undefined') {\n end = array ? array.length : 0;\n }\n var index = -1,\n length = end - start || 0,\n result = Array(length < 0 ? 0 : length);\n\n while (++index < length) {\n result[index] = array[start + index];\n }\n return result;\n}\n\nmodule.exports = slice;\n","var map = {\n\t\"./ajax/aggregate\": 74,\n\t\"./js-errors/aggregate\": 7326,\n\t\"./page-action/aggregate\": 9098,\n\t\"./page-view-event/aggregate\": 3887,\n\t\"./page-view-timing/aggregate\": 8617,\n\t\"./session-trace/aggregate\": 842\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 3648;","var map = {\n\t\"./ajax/instrument\": 9770,\n\t\"./js-errors/instrument\": 3825,\n\t\"./page-action/instrument\": 2895,\n\t\"./page-view-event/instrument\": 8161,\n\t\"./page-view-timing/instrument\": 8396,\n\t\"./session-trace/instrument\": 5873\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 8346;","import { setRuntime, setConfiguration, getConfiguration, setInfo, getInfo, setLoaderConfig, getLoaderConfig } from '@newrelic/browser-agent-core/common/config/config'\nimport { ieVersion } from '@newrelic/browser-agent-core/common/browser-version/ie-version'\nimport { NrInfo, NrConfig, NrLoaderConfig, NrOptions } from './types'\nimport { Api } from './utils/api/api'\nimport { buildConfigs } from './utils/config/build-configs'\nimport { Features } from './utils/features/features'\nimport { initializeFeatures } from './utils/features/initialize'\nimport { gosNREUMInitializedAgents } from '@newrelic/browser-agent-core/common/window/nreum'\nimport { generateRandomHexString } from '@newrelic/browser-agent-core/common/ids/unique-id'\nimport { Aggregator } from '@newrelic/browser-agent-core/common/aggregate/aggregator'\n\n\nexport class BrowserAgent {\n private _initialized = false\n private _id = generateRandomHexString(16);\n private _api = new Api(this)\n private _aggregator = new Aggregator({ agentIdentifier: this._id })\n\n public get config(): { info: NrInfo, config: NrConfig, loader_config: NrLoaderConfig } {\n return {\n info: getInfo(this._id),\n config: getConfiguration(this._id),\n loader_config: getLoaderConfig(this._id)\n }\n }\n public get initialized() { return this._initialized };\n public get id() { return this._id }\n public features = new Features()\n public start = async (options: NrOptions) => {\n if (this._initialized) return false\n this._initialized = true\n const { info, config, loader_config } = buildConfigs(options)\n if (info) setInfo(this._id, info)\n if (config) setConfiguration(this._id, config)\n if (loader_config) setLoaderConfig(this._id, config)\n setRuntime(this._id, { maxBytes: 30000 })\n\n const initializedFeatures = await initializeFeatures(this._id, this._api, this._aggregator, this.features)\n\n gosNREUMInitializedAgents(this._id, initializedFeatures, 'features')\n\n return true\n\n }\n public noticeError = (err: Error | String, customAttributes?: Object) => this._api.noticeError(err, customAttributes);\n}\n\nexport default BrowserAgent\n","export interface NrInterface {\n config: { info: NrInfo, config: NrConfig, loader_config: NrLoaderConfig };\n features: AppFeatures;\n start: NrInitialize,\n noticeError: NrNoticeError\n}\n\nexport class NrFeature {\n private _enabled: boolean = true\n private _auto: boolean = true\n \n constructor(public name: NrFeatures){}\n\n get enabled (): boolean {\n return this._enabled\n }\n\n set enabled(val: boolean) {\n this._enabled = Boolean(val)\n }\n\n get auto(): boolean {\n return this._auto\n }\n\n set auto(val: boolean) {\n this._auto = val\n }\n}\nexport interface AppFeatures {\n 'errors': NrFeature\n}\n\nexport interface NrOptions extends NrInfo, NrConfig, NrLoaderConfig {}\n\ninterface NrShared {\n applicationID?: string;\n licenseKey?: string;\n}\n\nexport interface NrInfo extends NrShared {\n applicationID: string;\n licenseKey: string;\n beacon: string // sets beacon and errorBeacon\n errorBeacon?: string\n sa?: number\n queueTime?: number; \n applicationTime?: number; \n ttGuid?: string ; \n user?: string; \n account?: string; \n product?: string; \n extra?: string; \n userAttributes?: string; \n atts?: string; \n transactionName?: string; \n tNamePlain?: string; \n}\n\nexport interface NrConfig {\n privacy?: { cookies_enabled?: boolean }\n ajax?: {deny_list?: string[]}\n distributed_tracing?: {\n enabled?: boolean\n exclude_newrelic_header?: boolean\n cors_use_newrelic_header?: boolean\n cors_use_tracecontext_headers?: boolean\n allowed_origins?: string[]\n }\n page_view_timing?: { enabled?: boolean };\n ssl?: boolean;\n obfuscate?: {regex?: string | RegExp, replacement?: string}[]\n}\n\nexport interface NrLoaderConfig extends NrShared {\n accountID?: string\n trustKey?: string\n agentID?: string\n xpid?: string\n licenseKey: string,\n applicationID: string,\n}\n\nexport enum NrFeatures {\n JSERRORS='js-errors',\n // AJAX='AJAX',\n // PAGE_VIEW_EVENT='PAGE_VIEW_EVENT',\n // PAGE_VIEW_TIMING='PAGE_VIEW_TIMING'\n}\n\nexport type NrStoreError = (err: Error | String, time?: Number, internal?: any, customAttributes?: any) => void\nexport type NrInitialize = (opts: NrOptions) => Promise<Boolean>\nexport type NrNoticeError = (err: Error | String, customAttributes: Object) => void;\nexport interface NrFeaturesWithApi { \n [NrFeatures.JSERRORS]: {\n noticeError: NrStoreError\n },\n // [NrFeatures.AJAX]: {},\n // [NrFeatures.PAGE_VIEW_EVENT]: {},\n // [NrFeatures.PAGE_VIEW_TIMING]: {}\n}\n\nexport interface NrImportPaths {\n aggregate: string, instrument: string\n}\n","import { NrFeatures, NrStoreError } from \"../../types\"\nimport { now } from '@newrelic/browser-agent-core/common/timing/now'\n\nexport class Api {\n importedMethods: { storeError: NrStoreError | null } = {\n storeError: null\n }\n private _initialized = false\n private _parent: any\n\n constructor(parent) {\n this._initialized = true\n this._parent = parent\n }\n\n noticeError(err: Error | String, customAttributes?: Object) {\n \n if (this._initialized && !!this.importedMethods.storeError) {\n if (typeof err !== 'string' && !(err instanceof Error)) return invalidCall('noticeError', err, 'Error | String')\n\n err = typeof err === 'string' ? new Error(err) : err\n const time = now()\n const internal = false\n return this.importedMethods.storeError(err, time, internal, customAttributes)\n }\n // if the agent has not been started, the source API method will have not been loaded...\n if (!this._parent.initialized && !this.importedMethods.storeError) return notInitialized(this._parent.id, NrFeatures.JSERRORS)\n // if the error feature module is disabled, this function throws a warning message\n if (this._parent.initialized && !this.importedMethods.storeError) return isDisabled(this._parent.id, NrFeatures.JSERRORS, 'noticeError')\n }\n}\n\nfunction notInitialized(agentIdentifier: string, featureName: NrFeatures) {\n console.warn(`Agent ${agentIdentifier} is calling a ${featureName} Feature API, but the Browser Agent has not been started... Please start the agent using .start({...opts})`)\n}\n\nfunction isDisabled(agentIdentifier: string, featureName: NrFeatures, methodName: string) {\n console.warn(`The ${featureName} Feature of agent ${agentIdentifier} Has Been Disabled. Method \"${methodName}\" will not do anything!`)\n}\n\nfunction invalidCall(methodName: string, argument: any, validType: any) {\n console.warn(`\"${methodName}\" was called with an invalid argument: ${argument}. This method only accepts ${validType} types for that argument.`)\n}","import { NrOptions, NrInfo, NrConfig, NrLoaderConfig } from '../../types'\n\nexport function buildConfigs(options: NrOptions): { info: NrInfo, config: NrConfig, loader_config: NrLoaderConfig } {\n const info: NrInfo = {\n beacon: '',\n errorBeacon: undefined,\n licenseKey: '',\n applicationID: '',\n sa: undefined,\n queueTime: undefined,\n applicationTime: undefined,\n ttGuid: undefined,\n user: undefined,\n account: undefined,\n product: undefined,\n extra: undefined,\n userAttributes: undefined,\n atts: undefined,\n transactionName: undefined,\n tNamePlain: undefined\n }\n\n const config: NrConfig = {\n privacy: { cookies_enabled: undefined },\n ajax: { deny_list: undefined },\n distributed_tracing: {\n enabled: undefined,\n exclude_newrelic_header: undefined,\n cors_use_newrelic_header: undefined,\n cors_use_tracecontext_headers: undefined,\n allowed_origins: undefined\n },\n page_view_timing: { enabled: undefined },\n ssl: undefined,\n obfuscate: undefined\n }\n\n const loader_config: NrLoaderConfig = {\n accountID: undefined,\n trustKey: undefined,\n agentID: undefined,\n licenseKey: '',\n applicationID: '',\n xpid: undefined\n }\n\n Object.keys(options).forEach(key => {\n if (key === 'beacon') {\n info.beacon = options[key]\n info.errorBeacon = options[key]\n }\n if (Object.keys(info).includes(key)) info[key] = options[key]\n if (Object.keys(config).includes(key)) config[key] = options[key]\n if (Object.keys(loader_config).includes(key)) loader_config[key] = options[key]\n })\n\n if (!validateInfo(info) || !validateLoaderConfig(loader_config)) console.warn(\"Missing required config data\")\n return { info, config, loader_config }\n}\n\nfunction validateInfo(info: NrInfo): boolean {\n return !(!info.applicationID || !info.licenseKey || !info.beacon)\n}\n\nfunction validateLoaderConfig(loader_config: NrLoaderConfig): boolean {\n return !(!loader_config.applicationID || !loader_config.licenseKey)\n}","import { NrFeatures, NrFeature } from \"../../types\"\n\nexport class Features { \n errors = new NrFeature(NrFeatures.JSERRORS)\n \n getEnabledFeatures(): NrFeature[] {\n return Object.values(this).filter(feature => feature.enabled)\n }\n}\n","\nimport { NrFeatures } from '../../types'\nimport { Api } from '../api/api'\nimport { Features } from './features'\nimport { Aggregator } from '@newrelic/browser-agent-core/common/aggregate/aggregator'\n\nexport function initializeFeatures(agentIdentifier: string, api: Api, sharedAggregator: Aggregator, features: Features) {\n\n return Promise.all(features.getEnabledFeatures().map(async feature => {\n if (feature.auto) {\n const { Instrument }: { Instrument: any } = await import(`@newrelic/browser-agent-core/features/${feature.name}/instrument`) // dont lazy load this -- put it in main bundle\n const featureInstrumentation = new Instrument(agentIdentifier)\n }\n const { Aggregate }: { Aggregate: any } = await import(`@newrelic/browser-agent-core/features/${feature.name}/aggregate`)\n const featureAggregator = new Aggregate(agentIdentifier, sharedAggregator)\n if (feature.name === NrFeatures.JSERRORS) api.importedMethods.storeError = (...args) => featureAggregator.storeError(...args)\n return feature.name\n }))\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(3607);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(380);\n"],"names":["root","factory","exports","module","define","amd","self","Aggregator","constructor","parent","super","aggregatedData","store","type","name","params","newMetrics","customParams","bucket","this","getBucket","metrics","oldMetrics","count","key","value","updateMetric","merge","oldMetric","newMetric","c","t","createMetricObject","min","Math","max","sos","storeMetric","stats","custom","get","take","types","results","hasData","i","length","obj","getValue","n","metric","ffVersion","match","navigator","userAgent","div","document","createElement","innerHTML","ieVersion","len","getElementsByTagName","Configurable","model","Object","assign","entries","forEach","keys","includes","console","error","beacon","errorBeacon","licenseKey","applicationID","sa","queueTime","applicationTime","ttGuid","user","account","product","extra","jsAttributes","userAttributes","atts","transactionName","tNamePlain","_cache","getInfo","id","Error","setInfo","gosNREUMInitializedAgents","privacy","cookies_enabled","ajax","deny_list","distributed_tracing","enabled","exclude_newrelic_header","cors_use_newrelic_header","cors_use_tracecontext_headers","allowed_origins","page_view_timing","ssl","obfuscate","getConfiguration","setConfiguration","getConfigurationValue","path","val","parts","split","accountID","trustKey","agentID","xpid","getLoaderConfig","setLoaderConfig","originals","gosNREUMOriginals","o","agentName","agentVersion","indexOf","version","detectedParts","requestedParts","XHR","window","XMLHttpRequest","XHR_PROTO","prototype","origin","location","maxBytes","offset","getLastTimestamp","features","customTransaction","onerror","releaseIds","xhrWrappable","addEventListener","test","disabled","ptid","getRuntime","setRuntime","h","agentIdentifier","SharedContext","context","sharedContext","globalInstance","nr","gosNREUM","ee","baseEE","EventContext","old","debugId","handlers","bufferGroupMap","emitters","emitter","on","removeEventListener","fn","listeners","splice","emit","args","contextOrStore","force","bubble","aborted","ctx","handlersArray","apply","bufferGroup","getBuffer","push","buffer","group","eventBuffer","abort","abortIfNotLoaded","isBuffering","backlog","getNewContext","concat","api","feature","handleEE","globalEE","handle","defaultRegister","registerWithSpecificEmitter","globalHandlers","handler","groupHandlers","supportsPassive","opts","defineProperty","e","eventListenerOpts","useCapture","passive","capture","HarvestScheduler","endpoint","started","timeoutHandle","harvest","s","areCookiesEnabled","onUnload","sendFinal","cookie","Number","Date","href","referrer","startTimer","interval","initialDelay","scheduleHarvest","stopTimer","clearTimeout","delay","timer","setTimeout","runHarvest","scheduler","getPayload","submitMethod","getSubmitMethod","retry","method","payload","toString","call","send","onHarvestFinished","sendX","result","onFinished","sent","retryDelay","i8","haveSendBeacon","sendBeacon","xhrUsable","g","Harvest","tooManyRequestsDelay","obfuscator","p","getScheme","_events","sents","unload","or","cbFinished","options","shouldObfuscate","obfuscateAndSend","createPayload","_send","singlePayload","makeBody","createAccumulator","makeQueryString","body","qs","ignoreKeys","traverse","property","hasOwnProperty","shouldIgnore","ignore","obfuscateString","info","url","baseQueryString","useBody","fullUrl","status","needResponse","responseText","init","runtime","ref","transactionNameParam","now","join","listener","resetListeners","m","a","b","accumulator","generateUuid","randomVals","rvIndex","crypto","msCrypto","getRandomValue","random","getRandomValues","Uint8Array","template","generateSpanId","generateRandomHexString","generateTraceId","chars","recordSupportability","hasOwnProp","nullable","comma","numeric","noDefault","floor","getAddStringContext","stringTable","create","stringTableIdx","str","String","replace","escapable","addCustomAttributes","attrs","addString","attrParts","serializedValue","lastTimestamp","getTime","performance","round","setOffset","getOffset","exists","timing","navigationStart","navCookie","findStartTime","starttime","aCookies","startPage","referrerPage","startTime","bReferrerMatch","aSubCookies","substring","j","charAt","substr","docReferrer","marks","mark","markName","markTime","measure","aggregator","metricName","startMark","endMark","start","end","addE","sType","callback","attachEvent","subscribeToUnload","cb","res","called","oneCall","arguments","withHash","withoutHash","cleanURL","keepHash","charMap","charList","k","safeEncoded","RegExp","real","encodeURIComponent","fromArray","bytes","slice","total","dataArray","next","intermediate","param","stringsToParsedUrls","parseUrl","urlEl","ret","port","firstSplit","pop","hostname","pathname","protocol","sameProtocol","sameDomain","domain","sameOrigin","FeatureBase","has","getOrSet","prop","getVal","writable","enumerable","mapOwn","win","isFileProtocol","supportabilityMetricSent","fileProtocolRule","regex","replacement","recordedSupportability","Obfuscator","validateRules","getRules","rules","configRules","invalidReplacementDetected","invalidRegexDetected","warn","string","obfuscated","reduce","arr","sHash","charCodeAt","abs","meta","stringify","err","quote","lastIndex","holder","isFinite","partial","Array","v","submitData","jsonp","element","src","firstScript","parentNode","insertBefore","sync","request","open","withCredentials","setRequestHeader","xhr","Image","defaults","NREUM","newrelic","gosNREUMInfo","externallySupplied","gosNREUMLoaderConfig","loader_config","gosNREUMInit","ST","SI","setImmediate","CT","REQ","Request","EV","Event","PR","Promise","MO","MutationObserver","FETCH","fetch","target","initializedAgents","curr","initializedAt","ms","date","addToNREUM","fnName","NREUMinitialized","initialized","gosCDN","supportsPerformanceObserver","PerformanceObserver","ctxId","Response","flag","inWrapper","createWrapperWithEmitter","always","wrapFn","inPlace","methods","prefix","getContext","prependMethodPrefix","notWrappable","methodName","nrWrapper","from","to","set","report","originalThis","safeEmit","evt","prev","Function","sharedEE","f","ADD_EVENT_LISTENER","findAndWrapNode","object","step","getPrototypeOf","wrapNode","node","uniqueListener","originalListener","wrapped","handleEvent","REMOVE_EVENT_LISTENER","w","wrappedFetch","dtPayload","dt","promise","then","size","headers","rxSize","u","y","history","pushState","replaceState","x","E","SET_TIMEOUT","SET_INTERVAL","START","CLEAR_TIMEOUT","timerDuration","isNaN","S","OrigXHR","READY_STATE_CHANGE","pendingXhrs","wrapXHR","wrapOnreadystatechange","getObject","readyState","resolved","drainPendingXhrs","toggle","dummyNode","data","resolve","createTextNode","observe","characterData","denyList","comparePath","pattern","Aggregate","ajaxEvents","spaAjaxEvents","sentAjaxEvents","harvestTimeSeconds","MAX_PAYLOAD_SIZE","interaction","allAjaxIsEnabled","item","denyListConfig","firstSlash","setDenyList","storeXhr","onEventsHarvestFinished","prepareHarvest","finalHarvest","getStoredEvents","endTime","hash","time","cat","host","undefined","parsed","xhrContext","event","requestSize","txSize","responseSize","callbackDuration","cbTime","spanId","traceId","spanTimestamp","timestamp","spaNode","interactionId","maxPayloadSize","payloadObjs","events","chunks","chunkSize","eventChunks","splitChunks","tooBig","currentChunk","Chunk","fields","insert","unshift","index","dataSize","ArrayBuffer","byteLength","Blob","FormData","JSON","DT","generateTracePayload","parsedOrigin","shouldGenerateTrace","accountId","agentId","isAllowedOrigin","useTraceContextHeadersForCors","traceContextParentHeader","generateTraceContextParentHeader","traceContextStateHeader","generateTraceContextStateHeader","excludeNewrelicHeader","useNewrelicHeaderForCors","newrelicHeader","generateTraceHeader","appId","btoa","d","ty","ac","ap","tr","ti","tk","isDtEnabled","allowed","dtConfig","allowedOrigin","handlersLen","origRequest","origXHR","Instrument","getWrappedFetch","ended","duration","loadCaptureCalled","captureXhrData","addUrl","lastSize","responseType","response","header","getResponseHeader","totalCbs","xhrGuids","loaded","added","onloadCalled","onload","idString","xhrCbStart","URL","clone","Headers","addHeaders","headersObj","fetchArguments","toUpperCase","canonicalFunctionNameRe","canonicalFunctionName","orig","stripNewlinesRegex","classNameRegex","chrome","gecko","chrome_eval","ie_eval","parseStackProp","line","functionName","func","column","wrapperSeen","stackLines","frames","getClassName","exec","stringHashCode","stackReported","pageviewReported","errorCache","currentBody","errorOnPage","globalCustomParams","localCustomParams","setCustom","browserInteractionId","_interactionId","_interactionNodeId","parentNodeId","aggregateHash","storeError","onHarvestStarted","ri","pve","getBucketName","nameHash","exceptionClass","stackHash","canonicalizeURL","cleanedOrigin","cleanedURL","buildCanonicalStackString","stackInfo","canonicalStack","frame","canonicalizeStackURLs","originalURL","stackString","internal","customAttributes","ex","stack","errorInfo","mode","message","truncatedLines","className","sourceURL","request_uri","browser_stack_hash","stack_trace","pageview","att","O","origOnerror","handleErrors","NR_ERR_PROP","skipNext","thrown","notice","prevOnError","onerrorHandler","reason","filename","lineno","errorObj","UncaughtException","doNotStamp","eventsPerMinute","eventsPerHarvest","referrerUrl","currentEvents","setCustomAttribute","addPageAction","ua","at","ins","attributes","width","height","eventAttributes","documentElement","clientWidth","clientHeight","timeSinceLoad","browserWidth","browserHeight","currentUrl","pageUrl","eventType","actionName","navTimingValues","addPN","pn","addRel","redirectCount","relativeValue","paintMetrics","pt","measuresMetrics","measuresQueryString","chunksForQueryString","navTimingApiData","of","unloadEventStart","redirectStart","unloadEventEnd","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","secureConnectionStart","connectEnd","requestStart","responseStart","responseEnd","domLoading","domInteractive","domContentLoadedEventStart","domContentLoadedEventEnd","domComplete","loadEventStart","loadEventEnd","navigation","getEntriesByType","entry","customJsAttributes","queryString","doc","stateChange","measureWindowLoaded","measureDomContentLoaded","ts","timings","timingsSent","lcpRecorded","lcp","clsSupported","cls","clsSession","firstEntryTime","lastEntryTime","pageHideRecorded","supportedEntryTypes","maxLCPTimeSeconds","initialHarvestSeconds","processTiming","updateLatestLcp","updateClsScore","updatePageHide","recordLcp","lcpEntry","networkInfo","eid","elUrl","tagName","elTag","addTiming","networkInformation","clsEntry","recordUnload","addCls","appendGlobalCustomAttributes","timingAttributes","reservedAttributes","eventName","state","hidden","msHidden","webkitHidden","pageHiddenTime","performanceObserver","lcpPerformanceObserver","clsPerformanceObserver","fiRecorded","isEnabled","perfObserver","entryTypes","lcpObserver","clsObserver","buffered","captureInteraction","captureVisibilityChange","list","observer","getEntries","addConnectionAttributes","hadRecentInput","connection","mozConnection","webkitConnection","effectiveType","rtt","downlink","fi","timeStamp","fid","ignoredEvents","global","mouseup","mousedown","load","pagehide","toAggregate","typing","scrolling","mousing","touching","rename","keydown","keyup","keypress","mousemove","mouseenter","mouseleave","mouseover","mouseout","scroll","touchstart","touchmove","touchend","touchcancel","touchenter","touchleave","trace","nodeCount","sentTrace","maxNodesPerHarvest","laststart","stn","storeTiming","nodes","mergeSTNs","takeSTNs","storeEvent","storeTimer","storeResources","storeHist","storeXhrAgg","storeSTN","storeErrorAgg","processPVT","hasFID","_t","ignoreOffset","timeOffset","dateNow","category","currentEvent","shouldIgnoreEvent","evtName","evtOrigin","toLowerCase","l","classList","FileReader","resources","currentResource","initiatorType","entryType","traceArr","stns","sort","byStart","smearEvtsByOrigin","flatten","stnInfo","st","ja","maxGap","maxLen","lastO","byOrigin","lastArr","last","trivial","RESOURCE_TIMING_BUFFER_FULL","BST_RESOURCE","FN_START","FN_END","BST_TIMER","origEvent","timerEE","rafEE","bstStart","bstType","PUSH_STATE","startPath","observeResourceTimings","clearResourceTimings","onResourceTimingBufferFull","noOp","array","map","webpackContext","req","webpackContextResolve","__webpack_require__","code","_initialized","_id","_api","_aggregator","buildConfigs","config","initializeFeatures","initializedFeatures","noticeError","BrowserAgent","_enabled","_auto","Boolean","JSERRORS","importedMethods","_parent","argument","featureName","r","errors","values","filter","sharedAggregator","all","getEnabledFeatures","auto","featureAggregator","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","Symbol","toStringTag","nmd","paths","children"],"sourceRoot":""}