@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
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.InstrumentBase = void 0;
7
+ var _drain = require("../../common/drain/drain");
8
+ var _featureBase = require("./feature-base");
9
+ var _load = require("../../common/window/load");
10
+ var _globalScope = require("../../common/util/global-scope");
11
+ var _console = require("../../common/util/console");
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
+ /**
15
+ * Base class for instrumenting a feature.
16
+ * @extends FeatureBase
17
+ */
18
+ class InstrumentBase extends _featureBase.FeatureBase {
19
+ /**
20
+ * Instantiate InstrumentBase.
21
+ * @param {string} agentIdentifier - The unique ID of the instantiated agent (relative to global scope).
22
+ * @param {Aggregator} aggregator - The shared Aggregator that will handle batching and reporting of data.
23
+ * @param {string} featureName - The name of the feature module (used to construct file path).
24
+ * @param {boolean} [auto=true] - Determines whether the feature should automatically register to have the draining
25
+ * of its pooled instrumentation data handled by the agent's centralized drain functionality, rather than draining
26
+ * immediately. Primarily useful for fine-grained control in tests.
27
+ */
28
+ constructor(agentIdentifier, aggregator, featureName, auto = true) {
29
+ super(agentIdentifier, aggregator, featureName);
30
+ this.hasAggregator = false;
31
+ this.auto = auto;
32
+
33
+ /** @type {Function | undefined} This should be set by any derived Instrument class if it has things to do when feature fails or is killed. */
34
+ this.abortHandler;
35
+ if (auto) (0, _drain.registerDrain)(agentIdentifier, featureName);
36
+ }
37
+
38
+ /**
39
+ * Lazy-load the latter part of the feature: its aggregator. This method is called by the first part of the feature
40
+ * (the instrumentation) when instrumentation is complete.
41
+ */
42
+ importAggregator() {
43
+ if (this.hasAggregator || !this.auto) return;
44
+ this.hasAggregator = true;
45
+ const importLater = async () => {
46
+ /**
47
+ * Note this try-catch differs from the one in Agent.start() in that it's placed later in a page's lifecycle and
48
+ * it's only responsible for aborting its one specific feature, rather than all.
49
+ */
50
+ try {
51
+ const {
52
+ lazyLoader
53
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "lazy-loader" */'./lazy-loader')));
54
+ const {
55
+ Aggregate
56
+ } = await lazyLoader(this.featureName, 'aggregate');
57
+ new Aggregate(this.agentIdentifier, this.aggregator);
58
+ } catch (e) {
59
+ (0, _console.warn)(`Downloading ${this.featureName} failed...`);
60
+ this.abortHandler?.(); // undo any important alterations made to the page
61
+
62
+ // not supported yet but nice to do: "abort" this agent's EE for this feature specifically
63
+ }
64
+ };
65
+
66
+ // For regular web pages, we want to wait and lazy-load the aggregator only after all page resources are loaded.
67
+ // Non-browser scopes (i.e. workers) have no `window.load` event, so the aggregator can be lazy-loaded immediately.
68
+ if (_globalScope.isWorkerScope) importLater();else (0, _load.onWindowLoad)(() => importLater(), true);
69
+ }
70
+ }
71
+ exports.InstrumentBase = InstrumentBase;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.lazyLoader = lazyLoader;
7
+ var _features = require("../../loaders/features/features");
8
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
9
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10
+ /**
11
+ * Centralizes the lazy loading of agent feature aggregate and instrument sources.
12
+ *
13
+ * This function uses two defined switch cases to allow us to easily name our chunks and re-use these
14
+ * chunks for different agent types. We do not use template strings or string concatenation here because
15
+ * doing so makes it much more difficult to name the chunks and forces Webpack to "guess" what the chunks
16
+ * should be.
17
+ * @param featureName Name of the feature to import such as ajax or session_trace
18
+ * @param featurePart Name of the feature part to load; should be either instrument or aggregate
19
+ * @returns {Promise<InstrumentBase|AggregateBase|null>}
20
+ */
21
+ function lazyLoader(featureName, featurePart) {
22
+ if (featurePart === 'aggregate') {
23
+ switch (featureName) {
24
+ case _features.FEATURE_NAMES.ajax:
25
+ return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "ajax-aggregate" */'../ajax/aggregate')));
26
+ case _features.FEATURE_NAMES.jserrors:
27
+ return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "jserrors-aggregate" */'../jserrors/aggregate')));
28
+ case _features.FEATURE_NAMES.metrics:
29
+ return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "metrics-aggregate" */'../metrics/aggregate')));
30
+ case _features.FEATURE_NAMES.pageAction:
31
+ return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "page_action-aggregate" */'../page_action/aggregate')));
32
+ case _features.FEATURE_NAMES.pageViewEvent:
33
+ return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "page_view_event-aggregate" */'../page_view_event/aggregate')));
34
+ case _features.FEATURE_NAMES.pageViewTiming:
35
+ return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "page_view_timing-aggregate" */'../page_view_timing/aggregate')));
36
+ case _features.FEATURE_NAMES.sessionTrace:
37
+ return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "session_trace-aggregate" */'../session_trace/aggregate')));
38
+ case _features.FEATURE_NAMES.spa:
39
+ return Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "spa-aggregate" */'../spa/aggregate')));
40
+ default:
41
+ throw new Error(`Attempted to load unsupported agent feature: ${featureName} ${featurePart}`);
42
+ }
43
+ }
44
+ }
package/dist/cjs/index.js CHANGED
@@ -1,59 +1,82 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.BrowserAgent = void 0;
13
- const config_1 = require("@newrelic/browser-agent-core/common/config/config");
14
- const api_1 = require("./utils/api/api");
15
- const build_configs_1 = require("./utils/config/build-configs");
16
- const features_1 = require("./utils/features/features");
17
- const initialize_1 = require("./utils/features/initialize");
18
- const nreum_1 = require("@newrelic/browser-agent-core/common/window/nreum");
19
- const unique_id_1 = require("@newrelic/browser-agent-core/common/ids/unique-id");
20
- const aggregator_1 = require("@newrelic/browser-agent-core/common/aggregate/aggregator");
21
- class BrowserAgent {
22
- constructor() {
23
- this._initialized = false;
24
- this._id = (0, unique_id_1.generateRandomHexString)(16);
25
- this._api = new api_1.Api(this);
26
- this._aggregator = new aggregator_1.Aggregator({ agentIdentifier: this._id });
27
- this.features = new features_1.Features();
28
- this.start = (options) => __awaiter(this, void 0, void 0, function* () {
29
- if (this._initialized)
30
- return false;
31
- this._initialized = true;
32
- const { info, config, loader_config } = (0, build_configs_1.buildConfigs)(options);
33
- if (info)
34
- (0, config_1.setInfo)(this._id, info);
35
- if (config)
36
- (0, config_1.setConfiguration)(this._id, config);
37
- if (loader_config)
38
- (0, config_1.setLoaderConfig)(this._id, config);
39
- (0, config_1.setRuntime)(this._id, { maxBytes: 30000 });
40
- const initializedFeatures = yield (0, initialize_1.initializeFeatures)(this._id, this._api, this._aggregator, this.features);
41
- (0, nreum_1.gosNREUMInitializedAgents)(this._id, initializedFeatures, 'features');
42
- return true;
43
- });
44
- this.noticeError = (err, customAttributes) => this._api.noticeError(err, customAttributes);
45
- }
46
- get config() {
47
- return {
48
- info: (0, config_1.getInfo)(this._id),
49
- config: (0, config_1.getConfiguration)(this._id),
50
- loader_config: (0, config_1.getLoaderConfig)(this._id)
51
- };
52
- }
53
- get initialized() { return this._initialized; }
54
- ;
55
- get id() { return this._id; }
56
- }
57
- exports.BrowserAgent = BrowserAgent;
58
- exports.default = BrowserAgent;
59
- //# sourceMappingURL=index.js.map
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Ajax", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _ajax.Ajax;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "BrowserAgent", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _browserAgent.BrowserAgent;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "CustomAgent", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _customAgent.CustomAgent;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "JSErrors", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _jserrors.JSErrors;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "Metrics", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _metrics.Metrics;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "PageAction", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _page_action.PageAction;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "PageViewEvent", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _page_view_event.PageViewEvent;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "PageViewTiming", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _page_view_timing.PageViewTiming;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "SessionTrace", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _session_trace.SessionTrace;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "Spa", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _spa.Spa;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "WorkerAgent", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _workerAgent.WorkerAgent;
70
+ }
71
+ });
72
+ var _customAgent = require("./custom-agent");
73
+ var _browserAgent = require("./browser-agent");
74
+ var _workerAgent = require("./worker-agent");
75
+ var _ajax = require("./features/ajax");
76
+ var _jserrors = require("./features/jserrors");
77
+ var _metrics = require("./features/metrics");
78
+ var _page_action = require("./features/page_action");
79
+ var _page_view_event = require("./features/page_view_event");
80
+ var _page_view_timing = require("./features/page_view_timing");
81
+ var _session_trace = require("./features/session_trace");
82
+ var _spa = require("./features/spa");
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Agent = void 0;
7
+ var _enabledFeatures = require("./features/enabled-features");
8
+ var _configure = require("./configure/configure");
9
+ var _featureDependencies = require("./features/featureDependencies");
10
+ var _features = require("./features/features");
11
+ var _instrument = require("../features/page_view_event/instrument");
12
+ var _aggregator = require("../common/aggregate/aggregator");
13
+ var _nreum = require("../common/window/nreum");
14
+ var _uniqueId = require("../common/ids/unique-id");
15
+ var _config = require("../common/config/config");
16
+ var _console = require("../common/util/console");
17
+ var _stringify = require("../common/util/stringify");
18
+ // loader files
19
+
20
+ // required features
21
+
22
+ // common files
23
+
24
+ /**
25
+ * A flexible class that may be used to compose an agent from a select subset of feature modules. In applications
26
+ * sensitive to network load, this may result in smaller builds with slightly lower performance impact.
27
+ */
28
+ class Agent {
29
+ constructor(options, agentIdentifier = (0, _uniqueId.generateRandomHexString)(16)) {
30
+ this.agentIdentifier = agentIdentifier;
31
+ this.sharedAggregator = new _aggregator.Aggregator({
32
+ agentIdentifier: this.agentIdentifier
33
+ });
34
+ this.features = {};
35
+ this.desiredFeatures = new Set(options.features || []); // expected to be a list of static Instrument/InstrumentBase classes, see "spa.js" for example
36
+
37
+ // For Now... ALL agents must make the rum call whether the page_view_event feature was enabled or not.
38
+ // NR1 creates an index on the rum call, and if not seen for a few days, will remove the browser app!
39
+ // Future work is being planned to evaluate removing this behavior from the backend, but for now we must ensure this call is made
40
+ this.desiredFeatures.add(_instrument.Instrument);
41
+ Object.assign(this, (0, _configure.configure)(this.agentIdentifier, options, options.loaderType || 'agent'));
42
+ this.start();
43
+ }
44
+ get config() {
45
+ return {
46
+ info: (0, _config.getInfo)(this.agentIdentifier),
47
+ init: (0, _config.getConfiguration)(this.agentIdentifier),
48
+ loader_config: (0, _config.getLoaderConfig)(this.agentIdentifier),
49
+ runtime: (0, _config.getRuntime)(this.agentIdentifier)
50
+ };
51
+ }
52
+ start() {
53
+ const NR_FEATURES_REF_NAME = 'features';
54
+ // Attempt to initialize all the requested features (sequentially in prio order & synchronously), with any failure aborting the whole process.
55
+ try {
56
+ const enabledFeatures = (0, _enabledFeatures.getEnabledFeatures)(this.agentIdentifier);
57
+ const featuresToStart = Array.from(this.desiredFeatures);
58
+ featuresToStart.sort((a, b) => _features.featurePriority[a.featureName] - _features.featurePriority[b.featureName]);
59
+ featuresToStart.forEach(f => {
60
+ // pageViewEvent must be enabled because RUM calls are not optional. See comment in constructor and PR 428.
61
+ if (enabledFeatures[f.featureName] || f.featureName === _features.FEATURE_NAMES.pageViewEvent) {
62
+ const dependencies = (0, _featureDependencies.getFeatureDependencyNames)(f.featureName);
63
+ const hasAllDeps = dependencies.every(x => enabledFeatures[x]);
64
+ if (!hasAllDeps) (0, _console.warn)(`${f.featureName} is enabled but one or more dependent features has been disabled (${(0, _stringify.stringify)(dependencies)}). This may cause unintended consequences or missing data...`);
65
+ this.features[f.featureName] = new f(this.agentIdentifier, this.sharedAggregator);
66
+ }
67
+ });
68
+ (0, _nreum.gosNREUMInitializedAgents)(this.agentIdentifier, this.features, NR_FEATURES_REF_NAME);
69
+ } catch (err) {
70
+ (0, _console.warn)('Failed to initialize all enabled instrument classes (agent aborted) -', err);
71
+ for (const featName in this.features) {
72
+ // this.features hold only features that have been instantiated
73
+ this.features[featName].abortHandler?.();
74
+ }
75
+ const newrelic = (0, _nreum.gosNREUM)();
76
+ delete newrelic.initializedAgents[this.agentIdentifier]?.['api']; // prevent further calls to agent-specific APIs (see "configure.js")
77
+ delete newrelic.initializedAgents[this.agentIdentifier]?.[NR_FEATURES_REF_NAME]; // GC mem used internally by features
78
+ delete this.sharedAggregator;
79
+ // Keep the initialized agent object with its configs for troubleshooting purposes.
80
+ newrelic.ee?.abort(); // set flag and clear global backlog
81
+ delete newrelic.ee?.get(this.agentIdentifier); // clear this agent's own backlog too
82
+ return false;
83
+ }
84
+ }
85
+ }
86
+ exports.Agent = Agent;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setAPI = setAPI;
7
+ var _lodash = _interopRequireDefault(require("lodash._slice"));
8
+ var _features = require("../features/features");
9
+ var _config = require("../../common/config/config");
10
+ var _handle = require("../../common/event-emitter/handle");
11
+ var _mapOwn = require("../../common/util/map-own");
12
+ var _contextualEe = require("../../common/event-emitter/contextual-ee");
13
+ var _now = require("../../common/timing/now");
14
+ var _drain = require("../../common/drain/drain");
15
+ var _load = require("../../common/window/load");
16
+ var _globalScope = require("../../common/util/global-scope");
17
+ var _console = require("../../common/util/console");
18
+ var _constants = require("../../features/metrics/constants");
19
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
22
+ function setAPI(agentIdentifier, forceDrain) {
23
+ if (!forceDrain) (0, _drain.registerDrain)(agentIdentifier, 'api');
24
+ const apiInterface = {};
25
+ var instanceEE = _contextualEe.ee.get(agentIdentifier);
26
+ var tracerEE = instanceEE.get('tracer');
27
+ var asyncApiFns = ['setErrorHandler', 'finished', 'addToTrace', 'inlineHit', 'addRelease'];
28
+ var prefix = 'api-';
29
+ var spaPrefix = prefix + 'ixn-';
30
+
31
+ // Setup stub functions that queue calls for later processing.
32
+ (0, _mapOwn.mapOwn)(asyncApiFns, function (num, fnName) {
33
+ apiInterface[fnName] = apiCall(prefix, fnName, true, 'api');
34
+ });
35
+ apiInterface.addPageAction = apiCall(prefix, 'addPageAction', true, _features.FEATURE_NAMES.pageAction);
36
+ apiInterface.setCurrentRouteName = apiCall(prefix, 'routeName', true, _features.FEATURE_NAMES.spa);
37
+ apiInterface.setPageViewName = function (name, host) {
38
+ if (typeof name !== 'string') return;
39
+ if (name.charAt(0) !== '/') name = '/' + name;
40
+ (0, _config.getRuntime)(agentIdentifier).customTransaction = (host || 'http://custom.transaction') + name;
41
+ return apiCall(prefix, 'setPageViewName', true, 'api')();
42
+ };
43
+ apiInterface.setCustomAttribute = function (name, value) {
44
+ const currentInfo = (0, _config.getInfo)(agentIdentifier);
45
+ (0, _config.setInfo)(agentIdentifier, {
46
+ ...currentInfo,
47
+ jsAttributes: {
48
+ ...currentInfo.jsAttributes,
49
+ [name]: value
50
+ }
51
+ });
52
+ return apiCall(prefix, 'setCustomAttribute', true, 'api')();
53
+ };
54
+ apiInterface.interaction = function () {
55
+ return new InteractionHandle().get();
56
+ };
57
+ function InteractionHandle() {}
58
+ var InteractionApiProto = InteractionHandle.prototype = {
59
+ createTracer: function (name, cb) {
60
+ var contextStore = {};
61
+ var ixn = this;
62
+ var hasCb = typeof cb === 'function';
63
+ (0, _handle.handle)(spaPrefix + 'tracer', [(0, _now.now)(), name, contextStore], ixn, _features.FEATURE_NAMES.spa, instanceEE);
64
+ return function () {
65
+ tracerEE.emit((hasCb ? '' : 'no-') + 'fn-start', [(0, _now.now)(), ixn, hasCb], contextStore);
66
+ if (hasCb) {
67
+ try {
68
+ return cb.apply(this, arguments);
69
+ } catch (err) {
70
+ tracerEE.emit('fn-err', [arguments, this, typeof err == 'string' ? new Error(err) : err], contextStore);
71
+ // the error came from outside the agent, so don't swallow
72
+ throw err;
73
+ } finally {
74
+ tracerEE.emit('fn-end', [(0, _now.now)()], contextStore);
75
+ }
76
+ }
77
+ };
78
+ }
79
+ };
80
+ (0, _mapOwn.mapOwn)('actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get'.split(','), function addApi(n, name) {
81
+ InteractionApiProto[name] = apiCall(spaPrefix, name, undefined, _features.FEATURE_NAMES.spa);
82
+ });
83
+ function apiCall(prefix, name, notSpa, bufferGroup) {
84
+ return function () {
85
+ (0, _handle.handle)(_constants.SUPPORTABILITY_METRIC_CHANNEL, ['API/' + name + '/called'], undefined, _features.FEATURE_NAMES.metrics, instanceEE);
86
+ (0, _handle.handle)(prefix + name, [(0, _now.now)()].concat((0, _lodash.default)(arguments)), notSpa ? null : this, bufferGroup, instanceEE);
87
+ return notSpa ? void 0 : this;
88
+ };
89
+ }
90
+ apiInterface.noticeError = function (err, customAttributes) {
91
+ if (typeof err === 'string') err = new Error(err);
92
+ (0, _handle.handle)(_constants.SUPPORTABILITY_METRIC_CHANNEL, ['API/noticeError/called'], undefined, _features.FEATURE_NAMES.metrics, instanceEE);
93
+ (0, _handle.handle)('err', [err, (0, _now.now)(), false, customAttributes], undefined, _features.FEATURE_NAMES.jserrors, instanceEE);
94
+ };
95
+
96
+ // theres no window.load event on non-browser scopes, lazy load immediately
97
+ if (_globalScope.isWorkerScope) lazyLoad();
98
+ // try to stay out of the way of the window.load event, lazy load once that has finished.
99
+ else (0, _load.onWindowLoad)(() => lazyLoad(), true);
100
+ function lazyLoad() {
101
+ Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "async-api" */'./apiAsync'))).then(({
102
+ setAPI
103
+ }) => {
104
+ setAPI(agentIdentifier);
105
+ (0, _drain.drain)(agentIdentifier, 'api');
106
+ }).catch(() => (0, _console.warn)('Downloading runtime APIs failed...'));
107
+ }
108
+ return apiInterface;
109
+ }
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setAPI = setAPI;
7
+ var _features = require("../features/features");
8
+ var _config = require("../../common/config/config");
9
+ var _contextualEe = require("../../common/event-emitter/contextual-ee");
10
+ var _handle = require("../../common/event-emitter/handle");
11
+ var _registerHandler = require("../../common/event-emitter/register-handler");
12
+ var _mapOwn = require("../../common/util/map-own");
13
+ var _single = require("../../common/util/single");
14
+ var _submitData = require("../../common/util/submit-data");
15
+ var _globalScope = require("../../common/util/global-scope");
16
+ var _constants = require("../../features/metrics/constants");
17
+ function setAPI(agentIdentifier) {
18
+ var instanceEE = _contextualEe.ee.get(agentIdentifier);
19
+ var cycle = 0;
20
+ var scheme = (0, _config.getConfigurationValue)(agentIdentifier, 'ssl') === false ? 'http' : 'https';
21
+ var api = {
22
+ finished: (0, _single.single)(finished),
23
+ setErrorHandler: setErrorHandler,
24
+ addToTrace: addToTrace,
25
+ inlineHit: inlineHit,
26
+ addRelease: addRelease
27
+ };
28
+
29
+ // Hook all of the api functions up to the queues/stubs created in loader/api.js
30
+ (0, _mapOwn.mapOwn)(api, function (fnName, fn) {
31
+ (0, _registerHandler.registerHandler)('api-' + fnName, fn, 'api', instanceEE);
32
+ });
33
+
34
+ // All API functions get passed the time they were called as their
35
+ // first parameter. These functions can be called asynchronously.
36
+
37
+ function finished(t, providedTime) {
38
+ var time = providedTime ? providedTime - (0, _config.getRuntime)(agentIdentifier).offset : t;
39
+ (0, _handle.handle)(_constants.CUSTOM_METRIC_CHANNEL, ['finished', {
40
+ time
41
+ }], undefined, _features.FEATURE_NAMES.metrics, instanceEE);
42
+ addToTrace(t, {
43
+ name: 'finished',
44
+ start: time + (0, _config.getRuntime)(agentIdentifier).offset,
45
+ origin: 'nr'
46
+ });
47
+ (0, _handle.handle)('api-addPageAction', [time, 'finished'], undefined, _features.FEATURE_NAMES.pageAction, instanceEE);
48
+ }
49
+ function addToTrace(t, evt) {
50
+ if (!(evt && typeof evt === 'object' && evt.name && evt.start)) return;
51
+ var report = {
52
+ n: evt.name,
53
+ s: evt.start - (0, _config.getRuntime)(agentIdentifier).offset,
54
+ e: (evt.end || evt.start) - (0, _config.getRuntime)(agentIdentifier).offset,
55
+ o: evt.origin || '',
56
+ t: 'api'
57
+ };
58
+ (0, _handle.handle)('bstApi', [report], undefined, _features.FEATURE_NAMES.sessionTrace, instanceEE);
59
+ }
60
+
61
+ // NREUM.inlineHit(request_name, queue_time, app_time, total_be_time, dom_time, fe_time)
62
+ //
63
+ // request_name - the 'web page' name or service name
64
+ // queue_time - the amount of time spent in the app tier queue
65
+ // app_time - the amount of time spent in the application code
66
+ // total_be_time - the total roundtrip time of the remote service call
67
+ // dom_time - the time spent processing the result of the service call (or user defined)
68
+ // fe_time - the time spent rendering the result of the service call (or user defined)
69
+ function inlineHit(t, request_name, queue_time, app_time, total_be_time, dom_time, fe_time) {
70
+ if (!_globalScope.isBrowserScope) return;
71
+ request_name = window.encodeURIComponent(request_name);
72
+ cycle += 1;
73
+ const agentInfo = (0, _config.getInfo)(agentIdentifier);
74
+ if (!agentInfo.beacon) return;
75
+ var url = scheme + '://' + agentInfo.beacon + '/1/' + agentInfo.licenseKey;
76
+ url += '?a=' + agentInfo.applicationID + '&';
77
+ url += 't=' + request_name + '&';
78
+ url += 'qt=' + ~~queue_time + '&';
79
+ url += 'ap=' + ~~app_time + '&';
80
+ url += 'be=' + ~~total_be_time + '&';
81
+ url += 'dc=' + ~~dom_time + '&';
82
+ url += 'fe=' + ~~fe_time + '&';
83
+ url += 'c=' + cycle;
84
+ _submitData.submitData.img(url);
85
+ }
86
+ function setErrorHandler(t, handler) {
87
+ (0, _config.getRuntime)(agentIdentifier).onerror = handler;
88
+ }
89
+ var releaseCount = 0;
90
+ function addRelease(t, name, id) {
91
+ if (++releaseCount > 10) return;
92
+ (0, _config.getRuntime)(agentIdentifier).releaseIds[name.slice(-200)] = ('' + id).slice(-200);
93
+ }
94
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BrowserAgent = void 0;
7
+ var _agent = require("./agent");
8
+ var _instrument = require("../features/page_view_event/instrument");
9
+ var _instrument2 = require("../features/page_view_timing/instrument");
10
+ var _instrument3 = require("../features/metrics/instrument");
11
+ var _instrument4 = require("../features/jserrors/instrument");
12
+ var _instrument5 = require("../features/ajax/instrument");
13
+ var _instrument6 = require("../features/session_trace/instrument");
14
+ var _instrument7 = require("../features/spa/instrument");
15
+ var _instrument8 = require("../features/page_action/instrument");
16
+ /**
17
+ * An agent class with all feature modules available. Features may be disabled and enabled via runtime configuration.
18
+ * The BrowserAgent class is the most convenient and reliable option for most use cases.
19
+ */
20
+ class BrowserAgent extends _agent.Agent {
21
+ constructor(args) {
22
+ super({
23
+ ...args,
24
+ features: [_instrument5.Instrument, _instrument.Instrument, _instrument2.Instrument, _instrument6.Instrument, _instrument3.Instrument, _instrument8.Instrument, _instrument4.Instrument, _instrument7.Instrument],
25
+ loaderType: 'browser-agent'
26
+ });
27
+ }
28
+ }
29
+ exports.BrowserAgent = BrowserAgent;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.configure = configure;
7
+ var _api = require("../api/api");
8
+ var _nreum = require("../../common/window/nreum");
9
+ var _config = require("../../common/config/config");
10
+ var _featureFlags = require("../../common/util/feature-flags");
11
+ var _globalScope = require("../../common/util/global-scope");
12
+ var _topLevelCallers = require("../../common/window/top-level-callers");
13
+ function configure(agentIdentifier, opts = {}, loaderType, forceDrain) {
14
+ let {
15
+ init,
16
+ info,
17
+ loader_config,
18
+ runtime = {
19
+ loaderType
20
+ },
21
+ exposed = true
22
+ } = opts;
23
+ const nr = (0, _nreum.gosCDN)();
24
+ if (!info) {
25
+ init = nr.init;
26
+ info = nr.info;
27
+ loader_config = nr.loader_config;
28
+ }
29
+ if (_globalScope.isWorkerScope) {
30
+ // add a default attr to all worker payloads
31
+ info.jsAttributes = {
32
+ ...info.jsAttributes,
33
+ isWorker: true
34
+ };
35
+ }
36
+ (0, _config.setInfo)(agentIdentifier, info);
37
+ (0, _config.setConfiguration)(agentIdentifier, init || {});
38
+ (0, _config.setLoaderConfig)(agentIdentifier, loader_config || {});
39
+ (0, _config.setRuntime)(agentIdentifier, runtime);
40
+ (0, _topLevelCallers.setTopLevelCallers)();
41
+ const api = (0, _api.setAPI)(agentIdentifier, forceDrain);
42
+ (0, _nreum.gosNREUMInitializedAgents)(agentIdentifier, api, 'api');
43
+ (0, _nreum.gosNREUMInitializedAgents)(agentIdentifier, exposed, 'exposed');
44
+ (0, _nreum.addToNREUM)('activatedFeatures', _featureFlags.activatedFeatures);
45
+ (0, _nreum.addToNREUM)('setToken', flags => (0, _featureFlags.activateFeatures)(flags, agentIdentifier));
46
+ return api;
47
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getEnabledFeatures = getEnabledFeatures;
7
+ var _features = require("./features");
8
+ var _config = require("../../common/config/config");
9
+ const featureNames = Object.values(_features.FEATURE_NAMES);
10
+ function isEnabled(name, agentIdentifier) {
11
+ return (0, _config.getConfigurationValue)(agentIdentifier, `${name}.enabled`) !== false;
12
+ }
13
+ function getEnabledFeatures(agentIdentifier) {
14
+ const enabledFeatures = {};
15
+ featureNames.forEach(featureName => {
16
+ enabledFeatures[featureName] = isEnabled(featureName, agentIdentifier);
17
+ });
18
+ return enabledFeatures;
19
+ }