@newrelic/browser-agent 0.0.9 → 0.1.230

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 (743) hide show
  1. package/README.md +113 -197
  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 +33 -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 +51 -0
  20. package/dist/cjs/common/constants/environment-variables.js +20 -0
  21. package/dist/cjs/common/context/shared-context.js +26 -0
  22. package/dist/cjs/common/deny-list/deny-list.js +108 -0
  23. package/dist/cjs/common/drain/drain.js +132 -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 +48 -0
  28. package/dist/cjs/common/harvest/harvest-scheduler.js +112 -0
  29. package/dist/cjs/common/harvest/harvest.js +247 -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 +31 -0
  49. package/dist/cjs/common/util/map-own.test.js +49 -0
  50. package/dist/cjs/common/util/obfuscate.js +76 -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 +107 -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 +29 -0
  60. package/dist/cjs/common/window/session-storage.js +87 -0
  61. package/dist/cjs/common/window/supports-performance-observer.js +15 -0
  62. package/dist/cjs/common/wrap/index.js +75 -0
  63. package/dist/cjs/common/wrap/wrap-console.js +54 -0
  64. package/dist/cjs/common/wrap/wrap-events.js +108 -0
  65. package/dist/cjs/common/wrap/wrap-fetch.js +112 -0
  66. package/dist/cjs/common/wrap/wrap-function.js +255 -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 +163 -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 +339 -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 +31 -0
  82. package/dist/cjs/features/jserrors/aggregate/compute-stack-trace.js +215 -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 +40 -0
  86. package/dist/cjs/features/jserrors/aggregate/index.js +288 -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 +27 -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 +155 -0
  93. package/dist/cjs/features/metrics/aggregate/index.js +147 -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 +46 -0
  97. package/dist/cjs/features/metrics/instrument/workers-helper.js +124 -0
  98. package/dist/cjs/features/page_action/aggregate/index.js +120 -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 +22 -0
  102. package/dist/cjs/features/page_view_event/aggregate/index.js +137 -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 +39 -0
  107. package/dist/cjs/features/page_view_timing/aggregate/index.js +284 -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 +37 -0
  112. package/dist/cjs/features/page_view_timing/long-tasks.js +75 -0
  113. package/dist/cjs/features/session_trace/aggregate/index.js +415 -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 +134 -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 +115 -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 +72 -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 +87 -0
  132. package/dist/cjs/loaders/api/api.js +174 -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 +53 -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 +98 -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 +26 -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 +42 -0
  159. package/dist/esm/common/constants/environment-variables.js +11 -0
  160. package/dist/esm/common/context/shared-context.js +19 -0
  161. package/dist/esm/common/deny-list/deny-list.js +101 -0
  162. package/dist/esm/common/drain/drain.js +125 -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 +41 -0
  167. package/dist/esm/common/harvest/harvest-scheduler.js +106 -0
  168. package/dist/esm/common/harvest/harvest.js +239 -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 +24 -0
  188. package/dist/esm/common/util/map-own.test.js +47 -0
  189. package/dist/esm/common/util/obfuscate.js +67 -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 +99 -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 +24 -0
  199. package/dist/esm/common/window/session-storage.js +77 -0
  200. package/dist/esm/common/window/supports-performance-observer.js +9 -0
  201. package/dist/esm/common/wrap/index.js +15 -0
  202. package/dist/esm/common/wrap/wrap-console.js +46 -0
  203. package/dist/esm/common/wrap/wrap-events.js +100 -0
  204. package/dist/esm/common/wrap/wrap-fetch.js +103 -0
  205. package/dist/esm/common/wrap/wrap-function.js +244 -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 +156 -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 +331 -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 +29 -0
  221. package/dist/esm/features/jserrors/aggregate/compute-stack-trace.js +208 -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 +38 -0
  225. package/dist/esm/features/jserrors/aggregate/index.js +281 -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 +25 -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 +147 -0
  232. package/dist/esm/features/metrics/aggregate/index.js +140 -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 +39 -0
  236. package/dist/esm/features/metrics/instrument/workers-helper.js +119 -0
  237. package/dist/esm/features/page_action/aggregate/index.js +113 -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 +15 -0
  241. package/dist/esm/features/page_view_event/aggregate/index.js +128 -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 +30 -0
  246. package/dist/esm/features/page_view_timing/aggregate/index.js +277 -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 +29 -0
  251. package/dist/esm/features/page_view_timing/long-tasks.js +69 -0
  252. package/dist/esm/features/session_trace/aggregate/index.js +406 -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 +124 -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 +105 -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 +70 -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 +78 -0
  271. package/dist/esm/loaders/api/api.js +168 -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 +47 -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 +91 -0
  279. package/dist/esm/loaders/worker-agent.js +18 -0
  280. package/dist/types/cdn/lite.d.ts +2 -0
  281. package/dist/types/cdn/lite.d.ts.map +1 -0
  282. package/dist/types/cdn/polyfills/lite.d.ts +2 -0
  283. package/dist/types/cdn/polyfills/lite.d.ts.map +1 -0
  284. package/dist/types/cdn/polyfills/pro.d.ts +2 -0
  285. package/dist/types/cdn/polyfills/pro.d.ts.map +1 -0
  286. package/dist/types/cdn/polyfills/spa.d.ts +2 -0
  287. package/dist/types/cdn/polyfills/spa.d.ts.map +1 -0
  288. package/dist/types/cdn/polyfills.d.ts +2 -0
  289. package/dist/types/cdn/polyfills.d.ts.map +1 -0
  290. package/dist/types/cdn/pro.d.ts +2 -0
  291. package/dist/types/cdn/pro.d.ts.map +1 -0
  292. package/dist/types/cdn/spa.d.ts +2 -0
  293. package/dist/types/cdn/spa.d.ts.map +1 -0
  294. package/dist/types/cdn/worker.d.ts +2 -0
  295. package/dist/types/cdn/worker.d.ts.map +1 -0
  296. package/dist/types/common/aggregate/aggregator.d.ts +11 -0
  297. package/dist/types/common/aggregate/aggregator.d.ts.map +1 -0
  298. package/dist/types/common/browser-version/firefox-version.d.ts +2 -0
  299. package/dist/types/common/browser-version/firefox-version.d.ts.map +1 -0
  300. package/dist/types/common/browser-version/ios-version.d.ts +3 -0
  301. package/dist/types/common/browser-version/ios-version.d.ts.map +1 -0
  302. package/dist/types/common/config/config.d.ts +13 -0
  303. package/dist/types/common/config/config.d.ts.map +1 -0
  304. package/dist/types/common/config/state/configurable.d.ts +4 -0
  305. package/dist/types/common/config/state/configurable.d.ts.map +1 -0
  306. package/dist/types/common/config/state/info.d.ts +4 -0
  307. package/dist/types/common/config/state/info.d.ts.map +1 -0
  308. package/dist/types/common/config/state/init.d.ts +4 -0
  309. package/dist/types/common/config/state/init.d.ts.map +1 -0
  310. package/dist/types/common/config/state/loader-config.d.ts +3 -0
  311. package/dist/types/common/config/state/loader-config.d.ts.map +1 -0
  312. package/dist/types/common/config/state/originals.d.ts +2 -0
  313. package/dist/types/common/config/state/originals.d.ts.map +1 -0
  314. package/dist/types/common/config/state/runtime.d.ts +3 -0
  315. package/dist/types/common/config/state/runtime.d.ts.map +1 -0
  316. package/dist/types/common/constants/environment-variables.d.ts +4 -0
  317. package/dist/types/common/constants/environment-variables.d.ts.map +1 -0
  318. package/dist/types/common/context/shared-context.d.ts +5 -0
  319. package/dist/types/common/context/shared-context.d.ts.map +1 -0
  320. package/dist/types/common/deny-list/deny-list.d.ts +12 -0
  321. package/dist/types/common/deny-list/deny-list.d.ts.map +1 -0
  322. package/dist/types/common/drain/drain.d.ts +17 -0
  323. package/dist/types/common/drain/drain.d.ts.map +1 -0
  324. package/dist/types/common/event-emitter/contextual-ee.d.ts +4 -0
  325. package/dist/types/common/event-emitter/contextual-ee.d.ts.map +1 -0
  326. package/dist/types/common/event-emitter/handle.d.ts +3 -0
  327. package/dist/types/common/event-emitter/handle.d.ts.map +1 -0
  328. package/dist/types/common/event-emitter/register-handler.d.ts +8 -0
  329. package/dist/types/common/event-emitter/register-handler.d.ts.map +1 -0
  330. package/dist/types/common/event-listener/event-listener-opts.d.ts +10 -0
  331. package/dist/types/common/event-listener/event-listener-opts.d.ts.map +1 -0
  332. package/dist/types/common/harvest/harvest-scheduler.d.ts +21 -0
  333. package/dist/types/common/harvest/harvest-scheduler.d.ts.map +1 -0
  334. package/dist/types/common/harvest/harvest.d.ts +58 -0
  335. package/dist/types/common/harvest/harvest.d.ts.map +1 -0
  336. package/dist/types/common/ids/id.d.ts +2 -0
  337. package/dist/types/common/ids/id.d.ts.map +1 -0
  338. package/dist/types/common/ids/unique-id.d.ts +5 -0
  339. package/dist/types/common/ids/unique-id.d.ts.map +1 -0
  340. package/dist/types/common/metrics/framework-detection.d.ts +2 -0
  341. package/dist/types/common/metrics/framework-detection.d.ts.map +1 -0
  342. package/dist/types/common/metrics/paint-metrics.d.ts +2 -0
  343. package/dist/types/common/metrics/paint-metrics.d.ts.map +1 -0
  344. package/dist/types/common/serialize/bel-serializer.d.ts +5 -0
  345. package/dist/types/common/serialize/bel-serializer.d.ts.map +1 -0
  346. package/dist/types/common/timing/nav-timing.d.ts +5 -0
  347. package/dist/types/common/timing/nav-timing.d.ts.map +1 -0
  348. package/dist/types/common/timing/now.d.ts +2 -0
  349. package/dist/types/common/timing/now.d.ts.map +1 -0
  350. package/dist/types/common/unload/eol.d.ts +8 -0
  351. package/dist/types/common/unload/eol.d.ts.map +1 -0
  352. package/dist/types/common/url/clean-url.d.ts +2 -0
  353. package/dist/types/common/url/clean-url.d.ts.map +1 -0
  354. package/dist/types/common/url/encode.d.ts +5 -0
  355. package/dist/types/common/url/encode.d.ts.map +1 -0
  356. package/dist/types/common/url/location.d.ts +2 -0
  357. package/dist/types/common/url/location.d.ts.map +1 -0
  358. package/dist/types/common/url/parse-url.d.ts +2 -0
  359. package/dist/types/common/url/parse-url.d.ts.map +1 -0
  360. package/dist/types/common/url/protocol.d.ts +7 -0
  361. package/dist/types/common/url/protocol.d.ts.map +1 -0
  362. package/dist/types/common/util/console.d.ts +8 -0
  363. package/dist/types/common/util/console.d.ts.map +1 -0
  364. package/dist/types/common/util/data-size.d.ts +2 -0
  365. package/dist/types/common/util/data-size.d.ts.map +1 -0
  366. package/dist/types/common/util/feature-flags.d.ts +3 -0
  367. package/dist/types/common/util/feature-flags.d.ts.map +1 -0
  368. package/dist/types/common/util/get-or-set.d.ts +2 -0
  369. package/dist/types/common/util/get-or-set.d.ts.map +1 -0
  370. package/dist/types/common/util/global-scope.d.ts +13 -0
  371. package/dist/types/common/util/global-scope.d.ts.map +1 -0
  372. package/dist/types/common/util/map-own.d.ts +3 -0
  373. package/dist/types/common/util/map-own.d.ts.map +1 -0
  374. package/dist/types/common/util/obfuscate.d.ts +8 -0
  375. package/dist/types/common/util/obfuscate.d.ts.map +1 -0
  376. package/dist/types/common/util/s-hash.d.ts +2 -0
  377. package/dist/types/common/util/s-hash.d.ts.map +1 -0
  378. package/dist/types/common/util/single.d.ts +2 -0
  379. package/dist/types/common/util/single.d.ts.map +1 -0
  380. package/dist/types/common/util/stringify.d.ts +8 -0
  381. package/dist/types/common/util/stringify.d.ts.map +1 -0
  382. package/dist/types/common/util/submit-data.d.ts +35 -0
  383. package/dist/types/common/util/submit-data.d.ts.map +1 -0
  384. package/dist/types/common/util/traverse.d.ts +2 -0
  385. package/dist/types/common/util/traverse.d.ts.map +1 -0
  386. package/dist/types/common/util/user-agent.d.ts +5 -0
  387. package/dist/types/common/util/user-agent.d.ts.map +1 -0
  388. package/dist/types/common/window/load.d.ts +3 -0
  389. package/dist/types/common/window/load.d.ts.map +1 -0
  390. package/dist/types/common/window/nreum.d.ts +14 -0
  391. package/dist/types/common/window/nreum.d.ts.map +1 -0
  392. package/dist/types/common/window/page-visibility.d.ts +7 -0
  393. package/dist/types/common/window/page-visibility.d.ts.map +1 -0
  394. package/dist/types/common/window/session-storage.d.ts +18 -0
  395. package/dist/types/common/window/session-storage.d.ts.map +1 -0
  396. package/dist/types/common/window/supports-performance-observer.d.ts +2 -0
  397. package/dist/types/common/window/supports-performance-observer.d.ts.map +1 -0
  398. package/dist/types/common/wrap/index.d.ts +12 -0
  399. package/dist/types/common/wrap/index.d.ts.map +1 -0
  400. package/dist/types/common/wrap/wrap-console.d.ts +16 -0
  401. package/dist/types/common/wrap/wrap-console.d.ts.map +1 -0
  402. package/dist/types/common/wrap/wrap-events.d.ts +17 -0
  403. package/dist/types/common/wrap/wrap-events.d.ts.map +1 -0
  404. package/dist/types/common/wrap/wrap-fetch.d.ts +18 -0
  405. package/dist/types/common/wrap/wrap-fetch.d.ts.map +1 -0
  406. package/dist/types/common/wrap/wrap-function.d.ts +28 -0
  407. package/dist/types/common/wrap/wrap-function.d.ts.map +1 -0
  408. package/dist/types/common/wrap/wrap-history.d.ts +16 -0
  409. package/dist/types/common/wrap/wrap-history.d.ts.map +1 -0
  410. package/dist/types/common/wrap/wrap-jsonp.d.ts +16 -0
  411. package/dist/types/common/wrap/wrap-jsonp.d.ts.map +1 -0
  412. package/dist/types/common/wrap/wrap-mutation.d.ts +16 -0
  413. package/dist/types/common/wrap/wrap-mutation.d.ts.map +1 -0
  414. package/dist/types/common/wrap/wrap-promise.d.ts +17 -0
  415. package/dist/types/common/wrap/wrap-promise.d.ts.map +1 -0
  416. package/dist/types/common/wrap/wrap-raf.d.ts +16 -0
  417. package/dist/types/common/wrap/wrap-raf.d.ts.map +1 -0
  418. package/dist/types/common/wrap/wrap-timer.d.ts +17 -0
  419. package/dist/types/common/wrap/wrap-timer.d.ts.map +1 -0
  420. package/dist/types/common/wrap/wrap-xhr.d.ts +16 -0
  421. package/dist/types/common/wrap/wrap-xhr.d.ts.map +1 -0
  422. package/dist/types/features/ajax/aggregate/index.d.ts +16 -0
  423. package/dist/types/features/ajax/aggregate/index.d.ts.map +1 -0
  424. package/dist/types/features/ajax/constants.d.ts +2 -0
  425. package/dist/types/features/ajax/constants.d.ts.map +1 -0
  426. package/dist/types/features/ajax/index.d.ts +2 -0
  427. package/dist/types/features/ajax/index.d.ts.map +1 -0
  428. package/dist/types/features/ajax/instrument/distributed-tracing.d.ts +19 -0
  429. package/dist/types/features/ajax/instrument/distributed-tracing.d.ts.map +1 -0
  430. package/dist/types/features/ajax/instrument/index.d.ts +9 -0
  431. package/dist/types/features/ajax/instrument/index.d.ts.map +1 -0
  432. package/dist/types/features/ajax/instrument/response-size.d.ts +2 -0
  433. package/dist/types/features/ajax/instrument/response-size.d.ts.map +1 -0
  434. package/dist/types/features/jserrors/aggregate/canonical-function-name.d.ts +2 -0
  435. package/dist/types/features/jserrors/aggregate/canonical-function-name.d.ts.map +1 -0
  436. package/dist/types/features/jserrors/aggregate/compute-stack-trace.d.ts +22 -0
  437. package/dist/types/features/jserrors/aggregate/compute-stack-trace.d.ts.map +1 -0
  438. package/dist/types/features/jserrors/aggregate/format-stack-trace.d.ts +3 -0
  439. package/dist/types/features/jserrors/aggregate/format-stack-trace.d.ts.map +1 -0
  440. package/dist/types/features/jserrors/aggregate/index.d.ts +24 -0
  441. package/dist/types/features/jserrors/aggregate/index.d.ts.map +1 -0
  442. package/dist/types/features/jserrors/aggregate/string-hash-code.d.ts +2 -0
  443. package/dist/types/features/jserrors/aggregate/string-hash-code.d.ts.map +1 -0
  444. package/dist/types/features/jserrors/constants.d.ts +3 -0
  445. package/dist/types/features/jserrors/constants.d.ts.map +1 -0
  446. package/dist/types/features/jserrors/index.d.ts +2 -0
  447. package/dist/types/features/jserrors/index.d.ts.map +1 -0
  448. package/dist/types/features/jserrors/instrument/debug.d.ts +2 -0
  449. package/dist/types/features/jserrors/instrument/debug.d.ts.map +1 -0
  450. package/dist/types/features/jserrors/instrument/index.d.ts +22 -0
  451. package/dist/types/features/jserrors/instrument/index.d.ts.map +1 -0
  452. package/dist/types/features/metrics/aggregate/index.d.ts +12 -0
  453. package/dist/types/features/metrics/aggregate/index.d.ts.map +1 -0
  454. package/dist/types/features/metrics/constants.d.ts +6 -0
  455. package/dist/types/features/metrics/constants.d.ts.map +1 -0
  456. package/dist/types/features/metrics/index.d.ts +2 -0
  457. package/dist/types/features/metrics/index.d.ts.map +1 -0
  458. package/dist/types/features/metrics/instrument/index.d.ts +7 -0
  459. package/dist/types/features/metrics/instrument/index.d.ts.map +1 -0
  460. package/dist/types/features/metrics/instrument/workers-helper.d.ts +7 -0
  461. package/dist/types/features/metrics/instrument/workers-helper.d.ts.map +1 -0
  462. package/dist/types/features/page_action/aggregate/index.d.ts +24 -0
  463. package/dist/types/features/page_action/aggregate/index.d.ts.map +1 -0
  464. package/dist/types/features/page_action/constants.d.ts +2 -0
  465. package/dist/types/features/page_action/constants.d.ts.map +1 -0
  466. package/dist/types/features/page_action/index.d.ts +2 -0
  467. package/dist/types/features/page_action/index.d.ts.map +1 -0
  468. package/dist/types/features/page_action/instrument/index.d.ts +6 -0
  469. package/dist/types/features/page_action/instrument/index.d.ts.map +1 -0
  470. package/dist/types/features/page_view_event/aggregate/index.d.ts +9 -0
  471. package/dist/types/features/page_view_event/aggregate/index.d.ts.map +1 -0
  472. package/dist/types/features/page_view_event/aggregate/initialized-features.d.ts +8 -0
  473. package/dist/types/features/page_view_event/aggregate/initialized-features.d.ts.map +1 -0
  474. package/dist/types/features/page_view_event/constants.d.ts +5 -0
  475. package/dist/types/features/page_view_event/constants.d.ts.map +1 -0
  476. package/dist/types/features/page_view_event/index.d.ts +2 -0
  477. package/dist/types/features/page_view_event/index.d.ts.map +1 -0
  478. package/dist/types/features/page_view_event/instrument/index.d.ts +6 -0
  479. package/dist/types/features/page_view_event/instrument/index.d.ts.map +1 -0
  480. package/dist/types/features/page_view_timing/aggregate/index.d.ts +33 -0
  481. package/dist/types/features/page_view_timing/aggregate/index.d.ts.map +1 -0
  482. package/dist/types/features/page_view_timing/constants.d.ts +2 -0
  483. package/dist/types/features/page_view_timing/constants.d.ts.map +1 -0
  484. package/dist/types/features/page_view_timing/first-paint.d.ts +2 -0
  485. package/dist/types/features/page_view_timing/first-paint.d.ts.map +1 -0
  486. package/dist/types/features/page_view_timing/index.d.ts +2 -0
  487. package/dist/types/features/page_view_timing/index.d.ts.map +1 -0
  488. package/dist/types/features/page_view_timing/instrument/index.d.ts +6 -0
  489. package/dist/types/features/page_view_timing/instrument/index.d.ts.map +1 -0
  490. package/dist/types/features/page_view_timing/long-tasks.d.ts +2 -0
  491. package/dist/types/features/page_view_timing/long-tasks.d.ts.map +1 -0
  492. package/dist/types/features/session_trace/aggregate/index.d.ts +77 -0
  493. package/dist/types/features/session_trace/aggregate/index.d.ts.map +1 -0
  494. package/dist/types/features/session_trace/constants.d.ts +13 -0
  495. package/dist/types/features/session_trace/constants.d.ts.map +1 -0
  496. package/dist/types/features/session_trace/index.d.ts +2 -0
  497. package/dist/types/features/session_trace/index.d.ts.map +1 -0
  498. package/dist/types/features/session_trace/instrument/index.d.ts +11 -0
  499. package/dist/types/features/session_trace/instrument/index.d.ts.map +1 -0
  500. package/dist/types/features/spa/aggregate/index.d.ts +25 -0
  501. package/dist/types/features/spa/aggregate/index.d.ts.map +1 -0
  502. package/dist/types/features/spa/aggregate/interaction-node.d.ts +15 -0
  503. package/dist/types/features/spa/aggregate/interaction-node.d.ts.map +1 -0
  504. package/dist/types/features/spa/aggregate/interaction.d.ts +20 -0
  505. package/dist/types/features/spa/aggregate/interaction.d.ts.map +1 -0
  506. package/dist/types/features/spa/aggregate/serializer.d.ts +15 -0
  507. package/dist/types/features/spa/aggregate/serializer.d.ts.map +1 -0
  508. package/dist/types/features/spa/constants.d.ts +23 -0
  509. package/dist/types/features/spa/constants.d.ts.map +1 -0
  510. package/dist/types/features/spa/index.d.ts +2 -0
  511. package/dist/types/features/spa/index.d.ts.map +1 -0
  512. package/dist/types/features/spa/instrument/index.d.ts +8 -0
  513. package/dist/types/features/spa/instrument/index.d.ts.map +1 -0
  514. package/dist/types/features/utils/aggregate-base.d.ts +4 -0
  515. package/dist/types/features/utils/aggregate-base.d.ts.map +1 -0
  516. package/dist/types/features/utils/feature-base.d.ts +23 -0
  517. package/dist/types/features/utils/feature-base.d.ts.map +1 -0
  518. package/dist/types/features/utils/handler-cache.d.ts +22 -0
  519. package/dist/types/features/utils/handler-cache.d.ts.map +1 -0
  520. package/dist/types/features/utils/instrument-base.d.ts +27 -0
  521. package/dist/types/features/utils/instrument-base.d.ts.map +1 -0
  522. package/dist/types/features/utils/lazy-loader.d.ts +13 -0
  523. package/dist/types/features/utils/lazy-loader.d.ts.map +1 -0
  524. package/dist/types/index.d.ts +12 -0
  525. package/dist/types/index.d.ts.map +1 -0
  526. package/dist/types/loaders/agent.d.ts +20 -0
  527. package/dist/types/loaders/agent.d.ts.map +1 -0
  528. package/dist/types/loaders/api/api.d.ts +17 -0
  529. package/dist/types/loaders/api/api.d.ts.map +1 -0
  530. package/dist/types/loaders/api/apiAsync.d.ts +2 -0
  531. package/dist/types/loaders/api/apiAsync.d.ts.map +1 -0
  532. package/dist/types/loaders/browser-agent.d.ts +9 -0
  533. package/dist/types/loaders/browser-agent.d.ts.map +1 -0
  534. package/dist/types/loaders/configure/configure.d.ts +10 -0
  535. package/dist/types/loaders/configure/configure.d.ts.map +1 -0
  536. package/dist/types/loaders/features/enabled-features.d.ts +2 -0
  537. package/dist/types/loaders/features/enabled-features.d.ts.map +1 -0
  538. package/dist/types/loaders/features/featureDependencies.d.ts +3 -0
  539. package/dist/types/loaders/features/featureDependencies.d.ts.map +1 -0
  540. package/dist/types/loaders/features/features.d.ts +18 -0
  541. package/dist/types/loaders/features/features.d.ts.map +1 -0
  542. package/dist/types/loaders/micro-agent.d.ts +25 -0
  543. package/dist/types/loaders/micro-agent.d.ts.map +1 -0
  544. package/dist/types/loaders/worker-agent.d.ts +8 -0
  545. package/dist/types/loaders/worker-agent.d.ts.map +1 -0
  546. package/package.json +231 -69
  547. package/src/cdn/lite.js +18 -0
  548. package/src/cdn/polyfills/lite.js +7 -0
  549. package/src/cdn/polyfills/pro.js +7 -0
  550. package/src/cdn/polyfills/spa.js +7 -0
  551. package/src/cdn/polyfills.js +17 -0
  552. package/src/cdn/pro.js +27 -0
  553. package/src/cdn/spa.js +28 -0
  554. package/src/cdn/worker.js +21 -0
  555. package/src/common/aggregate/aggregator.js +171 -0
  556. package/src/common/browser-version/firefox-version.js +10 -0
  557. package/src/common/browser-version/ios-version.js +10 -0
  558. package/src/common/config/config.js +12 -0
  559. package/src/common/config/state/configurable.js +26 -0
  560. package/src/common/config/state/info.js +49 -0
  561. package/src/common/config/state/init.js +56 -0
  562. package/src/common/config/state/loader-config.js +25 -0
  563. package/src/common/config/state/originals.js +3 -0
  564. package/src/common/config/state/runtime.js +45 -0
  565. package/src/common/constants/environment-variables.js +11 -0
  566. package/src/common/context/shared-context.js +21 -0
  567. package/src/common/deny-list/deny-list.js +116 -0
  568. package/src/common/drain/drain.js +119 -0
  569. package/src/common/event-emitter/contextual-ee.js +159 -0
  570. package/src/common/event-emitter/handle.js +17 -0
  571. package/src/common/event-emitter/register-handler.js +25 -0
  572. package/src/common/event-listener/event-listener-opts.js +41 -0
  573. package/src/common/harvest/harvest-scheduler.js +112 -0
  574. package/src/common/harvest/harvest.js +248 -0
  575. package/src/common/ids/id.js +23 -0
  576. package/src/common/ids/unique-id.js +81 -0
  577. package/src/common/metrics/framework-detection.js +71 -0
  578. package/src/common/metrics/paint-metrics.js +6 -0
  579. package/src/common/serialize/bel-serializer.js +93 -0
  580. package/src/common/timing/nav-timing.js +70 -0
  581. package/src/common/timing/now.js +9 -0
  582. package/src/common/unload/eol.js +63 -0
  583. package/src/common/url/clean-url.js +10 -0
  584. package/src/common/url/encode.js +75 -0
  585. package/src/common/url/location.js +8 -0
  586. package/src/common/url/parse-url.js +71 -0
  587. package/src/common/url/protocol.js +19 -0
  588. package/src/common/util/console.js +11 -0
  589. package/src/common/util/data-size.js +21 -0
  590. package/src/common/util/feature-flags.js +38 -0
  591. package/src/common/util/get-or-set.js +34 -0
  592. package/src/common/util/global-scope.js +48 -0
  593. package/src/common/util/map-own.js +22 -0
  594. package/src/common/util/map-own.test.js +52 -0
  595. package/src/common/util/obfuscate.js +73 -0
  596. package/src/common/util/s-hash.js +14 -0
  597. package/src/common/util/single.js +18 -0
  598. package/src/common/util/stringify.js +42 -0
  599. package/src/common/util/submit-data.js +101 -0
  600. package/src/common/util/traverse.js +36 -0
  601. package/src/common/util/user-agent.js +56 -0
  602. package/src/common/window/load.js +15 -0
  603. package/src/common/window/nreum.js +110 -0
  604. package/src/common/window/page-visibility.js +24 -0
  605. package/src/common/window/session-storage.js +75 -0
  606. package/src/common/window/supports-performance-observer.js +10 -0
  607. package/src/common/wrap/index.js +18 -0
  608. package/src/common/wrap/wrap-console.js +47 -0
  609. package/src/common/wrap/wrap-events.js +106 -0
  610. package/src/common/wrap/wrap-fetch.js +109 -0
  611. package/src/common/wrap/wrap-function.js +248 -0
  612. package/src/common/wrap/wrap-history.js +48 -0
  613. package/src/common/wrap/wrap-jsonp.js +134 -0
  614. package/src/common/wrap/wrap-mutation.js +55 -0
  615. package/src/common/wrap/wrap-promise.js +165 -0
  616. package/src/common/wrap/wrap-raf.js +50 -0
  617. package/src/common/wrap/wrap-timer.js +67 -0
  618. package/src/common/wrap/wrap-xhr.js +213 -0
  619. package/src/features/ajax/aggregate/index.js +248 -0
  620. package/src/features/ajax/constants.js +3 -0
  621. package/src/features/ajax/index.js +1 -0
  622. package/src/features/ajax/instrument/distributed-tracing.js +166 -0
  623. package/src/features/ajax/instrument/index.js +380 -0
  624. package/src/features/ajax/instrument/response-size.js +18 -0
  625. package/src/features/jserrors/aggregate/canonical-function-name.js +14 -0
  626. package/src/features/jserrors/aggregate/canonical-function-name.test.js +13 -0
  627. package/src/features/jserrors/aggregate/compute-stack-trace.js +231 -0
  628. package/src/features/jserrors/aggregate/compute-stack-trace.test.js +297 -0
  629. package/src/features/jserrors/aggregate/format-stack-trace.js +30 -0
  630. package/src/features/jserrors/aggregate/format-stack-trace.test.js +39 -0
  631. package/src/features/jserrors/aggregate/index.js +310 -0
  632. package/src/features/jserrors/aggregate/string-hash-code.js +17 -0
  633. package/src/features/jserrors/aggregate/string-hash-code.test.js +12 -0
  634. package/src/features/jserrors/constants.js +4 -0
  635. package/src/features/jserrors/index.js +1 -0
  636. package/src/features/jserrors/instrument/debug.js +36 -0
  637. package/src/features/jserrors/instrument/index.js +149 -0
  638. package/src/features/metrics/aggregate/index.js +134 -0
  639. package/src/features/metrics/constants.js +7 -0
  640. package/src/features/metrics/index.js +1 -0
  641. package/src/features/metrics/instrument/index.js +44 -0
  642. package/src/features/metrics/instrument/workers-helper.js +110 -0
  643. package/src/features/page_action/aggregate/index.js +113 -0
  644. package/src/features/page_action/constants.js +3 -0
  645. package/src/features/page_action/index.js +1 -0
  646. package/src/features/page_action/instrument/index.js +15 -0
  647. package/src/features/page_view_event/aggregate/index.js +134 -0
  648. package/src/features/page_view_event/aggregate/initialized-features.js +31 -0
  649. package/src/features/page_view_event/constants.js +6 -0
  650. package/src/features/page_view_event/index.js +1 -0
  651. package/src/features/page_view_event/instrument/index.js +33 -0
  652. package/src/features/page_view_timing/aggregate/index.js +246 -0
  653. package/src/features/page_view_timing/constants.js +3 -0
  654. package/src/features/page_view_timing/first-paint.js +41 -0
  655. package/src/features/page_view_timing/index.js +1 -0
  656. package/src/features/page_view_timing/instrument/index.js +30 -0
  657. package/src/features/page_view_timing/long-tasks.js +60 -0
  658. package/src/features/session_trace/aggregate/index.js +410 -0
  659. package/src/features/session_trace/constants.js +15 -0
  660. package/src/features/session_trace/index.js +1 -0
  661. package/src/features/session_trace/instrument/index.js +126 -0
  662. package/src/features/spa/aggregate/index.js +738 -0
  663. package/src/features/spa/aggregate/interaction-node.js +85 -0
  664. package/src/features/spa/aggregate/interaction-node.test.js +17 -0
  665. package/src/features/spa/aggregate/interaction.js +112 -0
  666. package/src/features/spa/aggregate/serializer.js +198 -0
  667. package/src/features/spa/constants.js +36 -0
  668. package/src/features/spa/index.js +1 -0
  669. package/src/features/spa/instrument/index.js +112 -0
  670. package/src/features/utils/aggregate-base.js +7 -0
  671. package/src/features/utils/feature-base.js +51 -0
  672. package/src/features/utils/handler-cache.js +60 -0
  673. package/src/features/utils/instrument-base.js +68 -0
  674. package/src/features/utils/lazy-loader.js +37 -0
  675. package/src/index.js +15 -0
  676. package/src/loaders/agent.js +80 -0
  677. package/src/loaders/api/api.js +175 -0
  678. package/src/loaders/api/apiAsync.js +92 -0
  679. package/src/loaders/browser-agent.js +33 -0
  680. package/src/loaders/configure/configure.js +39 -0
  681. package/src/loaders/features/enabled-features.js +16 -0
  682. package/src/loaders/features/featureDependencies.js +26 -0
  683. package/src/loaders/features/features.js +25 -0
  684. package/src/loaders/micro-agent.js +84 -0
  685. package/src/loaders/worker-agent.js +24 -0
  686. package/dist/bundled/es5/index.js +0 -2
  687. package/dist/bundled/es5/index.js.map +0 -1
  688. package/dist/bundled/es6/index.js +0 -2
  689. package/dist/bundled/es6/index.js.map +0 -1
  690. package/dist/cjs/index.d.ts +0 -19
  691. package/dist/cjs/index.js.map +0 -1
  692. package/dist/cjs/types.d.ts +0 -94
  693. package/dist/cjs/types.js +0 -28
  694. package/dist/cjs/types.js.map +0 -1
  695. package/dist/cjs/utils/api/api.d.ts +0 -10
  696. package/dist/cjs/utils/api/api.js +0 -40
  697. package/dist/cjs/utils/api/api.js.map +0 -1
  698. package/dist/cjs/utils/config/build-configs.d.ts +0 -6
  699. package/dist/cjs/utils/config/build-configs.js +0 -68
  700. package/dist/cjs/utils/config/build-configs.js.map +0 -1
  701. package/dist/cjs/utils/features/features.d.ts +0 -5
  702. package/dist/cjs/utils/features/features.js +0 -14
  703. package/dist/cjs/utils/features/features.js.map +0 -1
  704. package/dist/cjs/utils/features/initialize.d.ts +0 -5
  705. package/dist/cjs/utils/features/initialize.js +0 -51
  706. package/dist/cjs/utils/features/initialize.js.map +0 -1
  707. package/dist/es/index.d.ts +0 -19
  708. package/dist/es/index.js +0 -55
  709. package/dist/es/index.js.map +0 -1
  710. package/dist/es/types.d.ts +0 -94
  711. package/dist/es/types.js +0 -24
  712. package/dist/es/types.js.map +0 -1
  713. package/dist/es/utils/api/api.d.ts +0 -10
  714. package/dist/es/utils/api/api.js +0 -36
  715. package/dist/es/utils/api/api.js.map +0 -1
  716. package/dist/es/utils/config/build-configs.d.ts +0 -6
  717. package/dist/es/utils/config/build-configs.js +0 -64
  718. package/dist/es/utils/config/build-configs.js.map +0 -1
  719. package/dist/es/utils/features/features.d.ts +0 -5
  720. package/dist/es/utils/features/features.js +0 -10
  721. package/dist/es/utils/features/features.js.map +0 -1
  722. package/dist/es/utils/features/initialize.d.ts +0 -5
  723. package/dist/es/utils/features/initialize.js +0 -24
  724. package/dist/es/utils/features/initialize.js.map +0 -1
  725. package/dist/umd/index.d.ts +0 -19
  726. package/dist/umd/index.js +0 -69
  727. package/dist/umd/index.js.map +0 -1
  728. package/dist/umd/types.d.ts +0 -94
  729. package/dist/umd/types.js +0 -38
  730. package/dist/umd/types.js.map +0 -1
  731. package/dist/umd/utils/api/api.d.ts +0 -10
  732. package/dist/umd/utils/api/api.js +0 -50
  733. package/dist/umd/utils/api/api.js.map +0 -1
  734. package/dist/umd/utils/config/build-configs.d.ts +0 -6
  735. package/dist/umd/utils/config/build-configs.js +0 -78
  736. package/dist/umd/utils/config/build-configs.js.map +0 -1
  737. package/dist/umd/utils/features/features.d.ts +0 -5
  738. package/dist/umd/utils/features/features.js +0 -24
  739. package/dist/umd/utils/features/features.js.map +0 -1
  740. package/dist/umd/utils/features/initialize.d.ts +0 -5
  741. package/dist/umd/utils/features/initialize.js +0 -63
  742. package/dist/umd/utils/features/initialize.js.map +0 -1
  743. package/dist/webpack-analysis.html +0 -38
@@ -0,0 +1,38 @@
1
+ /*
2
+ * Copyright 2020 New Relic Corporation. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ import { ee } from '../../../common/event-emitter/contextual-ee';
7
+ import { mapOwn } from '../../../common/util/map-own';
8
+ var flags = {};
9
+ var flagArr;
10
+ try {
11
+ flagArr = localStorage.getItem('__nr_flags').split(',');
12
+ if (console && typeof console.log === 'function') {
13
+ flags.console = true;
14
+ if (flagArr.indexOf('dev') !== -1) flags.dev = true;
15
+ if (flagArr.indexOf('nr_dev') !== -1) flags.nrDev = true;
16
+ }
17
+ } catch (err) {
18
+ // no op
19
+ }
20
+ if (flags.nrDev) ee.on('internal-error', function (err) {
21
+ log(err.stack);
22
+ });
23
+ if (flags.dev) ee.on('fn-err', function (args, origThis, err) {
24
+ log(err.stack);
25
+ });
26
+ if (flags.dev) {
27
+ log('NR AGENT IN DEVELOPMENT MODE');
28
+ log('flags: ' + mapOwn(flags, function (key, val) {
29
+ return key;
30
+ }).join(', '));
31
+ }
32
+ function log(message) {
33
+ try {
34
+ if (flags.console) log(message);
35
+ } catch (err) {
36
+ // no op
37
+ }
38
+ }
@@ -0,0 +1,147 @@
1
+ /*
2
+ * Copyright 2020 New Relic Corporation. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ import { handle } from '../../../common/event-emitter/handle';
7
+ import { now } from '../../../common/timing/now';
8
+ import { getOrSet } from '../../../common/util/get-or-set';
9
+ import { wrapRaf, wrapTimer, wrapEvents, wrapXhr } from '../../../common/wrap';
10
+ import slice from 'lodash._slice';
11
+ import './debug';
12
+ import { InstrumentBase } from '../../utils/instrument-base';
13
+ import { FEATURE_NAME, NR_ERR_PROP } from '../constants';
14
+ import { FEATURE_NAMES } from '../../../loaders/features/features';
15
+ import { globalScope } from '../../../common/util/global-scope';
16
+ import { eventListenerOpts } from '../../../common/event-listener/event-listener-opts';
17
+ import { getRuntime } from '../../../common/config/config';
18
+ import { stringify } from '../../../common/util/stringify';
19
+ export class Instrument extends InstrumentBase {
20
+ static featureName = FEATURE_NAME;
21
+ constructor(agentIdentifier, aggregator) {
22
+ let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
23
+ super(agentIdentifier, aggregator, FEATURE_NAME, auto);
24
+ // skipNext counter to keep track of uncaught
25
+ // errors that will be the same as caught errors.
26
+ this.skipNext = 0;
27
+ try {
28
+ this.removeOnAbort = new AbortController();
29
+ } // this try-catch can be removed when IE11 is completely unsupported & gone
30
+ catch (e) {}
31
+ const thisInstrument = this;
32
+ thisInstrument.ee.on('fn-start', function (args, obj, methodName) {
33
+ if (thisInstrument.abortHandler) thisInstrument.skipNext += 1;
34
+ });
35
+ thisInstrument.ee.on('fn-err', function (args, obj, err) {
36
+ if (thisInstrument.abortHandler && !err[NR_ERR_PROP]) {
37
+ getOrSet(err, NR_ERR_PROP, function getVal() {
38
+ return true;
39
+ });
40
+ this.thrown = true;
41
+ notice(err, undefined, thisInstrument.ee);
42
+ }
43
+ });
44
+ thisInstrument.ee.on('fn-end', function () {
45
+ if (!thisInstrument.abortHandler) return;
46
+ if (!this.thrown && thisInstrument.skipNext > 0) thisInstrument.skipNext -= 1;
47
+ });
48
+ thisInstrument.ee.on('internal-error', function (e) {
49
+ handle('ierr', [e, now(), true], undefined, FEATURE_NAMES.jserrors, thisInstrument.ee);
50
+ });
51
+
52
+ // Replace global error handler with our own.
53
+ this.origOnerror = globalScope.onerror;
54
+ globalScope.onerror = this.onerrorHandler.bind(this);
55
+ globalScope.addEventListener('unhandledrejection', e => {
56
+ /** rejections can contain data of any type -- this is an effort to keep the message human readable */
57
+ const err = castReasonToError(e.reason);
58
+ handle('err', [err, now(), false, {
59
+ unhandledPromiseRejection: 1
60
+ }], undefined, FEATURE_NAMES.jserrors, this.ee);
61
+ }, eventListenerOpts(false, this.removeOnAbort?.signal));
62
+ wrapRaf(this.ee);
63
+ wrapTimer(this.ee);
64
+ wrapEvents(this.ee);
65
+ if (getRuntime(agentIdentifier).xhrWrappable) wrapXhr(this.ee);
66
+ this.abortHandler = this.#abort; // we also use this as a flag to denote that the feature is active or on and handling errors
67
+ this.importAggregator();
68
+ }
69
+
70
+ /** Restoration and resource release tasks to be done if JS error loader is being aborted. Unwind changes to globals. */
71
+ #abort() {
72
+ this.removeOnAbort?.abort();
73
+ this.abortHandler = undefined; // weakly allow this abort op to run only once
74
+ }
75
+
76
+ /**
77
+ * FF and Android browsers do not provide error info to the 'error' event callback,
78
+ * so we must use window.onerror
79
+ * @param {string} message
80
+ * @param {string} filename
81
+ * @param {number} lineno
82
+ * @param {number} column
83
+ * @param {Error | *} errorObj
84
+ * @returns
85
+ */
86
+ onerrorHandler(message, filename, lineno, column, errorObj) {
87
+ if (typeof this.origOnerror === 'function') this.origOnerror(...arguments);
88
+ try {
89
+ if (this.skipNext) this.skipNext -= 1;else notice(errorObj || new UncaughtException(message, filename, lineno), true, this.ee);
90
+ } catch (e) {
91
+ try {
92
+ handle('ierr', [e, now(), true], undefined, FEATURE_NAMES.jserrors, this.ee);
93
+ } catch (err) {
94
+ // do nothing
95
+ }
96
+ }
97
+ return false; // maintain default behavior of the error event of Window
98
+ }
99
+ }
100
+
101
+ /**
102
+ *
103
+ * @param {string} message
104
+ * @param {string} filename
105
+ * @param {number} lineno
106
+ */
107
+ function UncaughtException(message, filename, lineno) {
108
+ this.message = message || 'Uncaught error with no additional information';
109
+ this.sourceURL = filename;
110
+ this.line = lineno;
111
+ }
112
+
113
+ /**
114
+ * Adds a timestamp and emits the 'err' event, which the error aggregator listens for
115
+ * @param {Error} err
116
+ * @param {boolean} doNotStamp
117
+ * @param {ContextualEE} ee
118
+ */
119
+ function notice(err, doNotStamp, ee) {
120
+ // by default add timestamp, unless specifically told not to
121
+ // this is to preserve existing behavior
122
+ var time = !doNotStamp ? now() : null;
123
+ handle('err', [err, time], undefined, FEATURE_NAMES.jserrors, ee);
124
+ }
125
+
126
+ /**
127
+ * Attempts to cast an unhandledPromiseRejection reason (reject(...)) to an Error object
128
+ * @param {*} reason - The reason property from an unhandled promise rejection
129
+ * @returns {Error} - An Error object with the message as the casted reason
130
+ */
131
+ function castReasonToError(reason) {
132
+ let prefix = 'Unhandled Promise Rejection: ';
133
+ if (reason instanceof Error) {
134
+ try {
135
+ reason.message = prefix + reason.message;
136
+ return reason;
137
+ } catch (e) {
138
+ return reason;
139
+ }
140
+ }
141
+ if (typeof reason === 'undefined') return new Error(prefix);
142
+ try {
143
+ return new Error(prefix + stringify(reason));
144
+ } catch (err) {
145
+ return new Error(prefix);
146
+ }
147
+ }
@@ -0,0 +1,140 @@
1
+ import { getRuntime } from '../../../common/config/config';
2
+ import { registerHandler } from '../../../common/event-emitter/register-handler';
3
+ import { HarvestScheduler } from '../../../common/harvest/harvest-scheduler';
4
+ import { AggregateBase } from '../../utils/aggregate-base';
5
+ import { FEATURE_NAME, SUPPORTABILITY_METRIC, CUSTOM_METRIC, SUPPORTABILITY_METRIC_CHANNEL, CUSTOM_METRIC_CHANNEL } from '../constants';
6
+ import { drain } from '../../../common/drain/drain';
7
+ import { getFrameworks } from '../../../common/metrics/framework-detection';
8
+ import { protocol } from '../../../common/url/protocol';
9
+ import { getRules, validateRules } from '../../../common/util/obfuscate';
10
+ import { VERSION } from '../../../common/constants/environment-variables';
11
+ import { onDOMContentLoaded } from '../../../common/window/load';
12
+ import { windowAddEventListener } from '../../../common/event-listener/event-listener-opts';
13
+ import { isBrowserScope } from '../../../common/util/global-scope';
14
+ export class Aggregate extends AggregateBase {
15
+ static featureName = FEATURE_NAME;
16
+ constructor(agentIdentifier, aggregator) {
17
+ super(agentIdentifier, aggregator, FEATURE_NAME);
18
+ let scheduler;
19
+
20
+ // If RUM-call's response determines that customer lacks entitlements for the /jserror ingest endpoint, don't harvest at all.
21
+ registerHandler('block-err', () => {
22
+ this.blocked = true;
23
+ if (scheduler) scheduler.aborted = true; // RUM response may or may not have happened already before scheduler initialization below
24
+ }, this.featureName, this.ee);
25
+
26
+ // Allow features external to the metrics feature to capture SMs and CMs through the event emitter
27
+ registerHandler(SUPPORTABILITY_METRIC_CHANNEL, this.storeSupportabilityMetrics.bind(this), this.featureName, this.ee);
28
+ registerHandler(CUSTOM_METRIC_CHANNEL, this.storeEventMetrics.bind(this), this.featureName, this.ee);
29
+ this.singleChecks(); // checks that are run only one time, at script load
30
+ this.eachSessionChecks(); // the start of every time user engages with page
31
+
32
+ // *cli, Mar 23 - Per NR-94597, this feature should only harvest ONCE at the (potential) EoL time of the page.
33
+ scheduler = new HarvestScheduler('jserrors', {
34
+ onUnload: () => this.unload()
35
+ }, this);
36
+ scheduler.harvest.on('jserrors', () => ({
37
+ body: this.aggregator.take(['cm', 'sm'])
38
+ }));
39
+ drain(this.agentIdentifier, this.featureName); // regardless if this is blocked or not, drain is needed to unblock other features from harvesting (counteract registerDrain)
40
+ }
41
+
42
+ storeSupportabilityMetrics(name, value) {
43
+ if (this.blocked) return;
44
+ const type = SUPPORTABILITY_METRIC;
45
+ const params = {
46
+ name
47
+ };
48
+ this.aggregator.storeMetric(type, name, params, value);
49
+ }
50
+ storeEventMetrics(name, metrics) {
51
+ if (this.blocked) return;
52
+ const type = CUSTOM_METRIC;
53
+ const params = {
54
+ name
55
+ };
56
+ this.aggregator.store(type, name, params, metrics);
57
+ }
58
+ singleChecks() {
59
+ // report generic info about the agent itself
60
+ // note the browser agent version
61
+ this.storeSupportabilityMetrics(`Generic/Version/${VERSION}/Detected`);
62
+ // report loaderType
63
+ const {
64
+ distMethod,
65
+ loaderType
66
+ } = getRuntime(this.agentIdentifier);
67
+ if (loaderType) this.storeSupportabilityMetrics(`Generic/LoaderType/${loaderType}/Detected`);
68
+ if (distMethod) this.storeSupportabilityMetrics(`Generic/DistMethod/${distMethod}/Detected`);
69
+
70
+ // frameworks on page
71
+ if (isBrowserScope) {
72
+ onDOMContentLoaded(() => {
73
+ getFrameworks().forEach(framework => {
74
+ this.storeSupportabilityMetrics('Framework/' + framework + '/Detected');
75
+ });
76
+ });
77
+ }
78
+
79
+ // file protocol detection
80
+ if (protocol.isFileProtocol()) {
81
+ this.storeSupportabilityMetrics('Generic/FileProtocol/Detected');
82
+ protocol.supportabilityMetricSent = true;
83
+ }
84
+
85
+ // obfuscation rules detection
86
+ const rules = getRules(this.agentIdentifier);
87
+ if (rules.length > 0) this.storeSupportabilityMetrics('Generic/Obfuscate/Detected');
88
+ if (rules.length > 0 && !validateRules(rules)) this.storeSupportabilityMetrics('Generic/Obfuscate/Invalid');
89
+ }
90
+ eachSessionChecks() {
91
+ if (!isBrowserScope) return;
92
+
93
+ // [Temporary] Report restores from BFCache to NR1 while feature flag is in place in lieu of sending pageshow events.
94
+ windowAddEventListener('pageshow', evt => {
95
+ if (evt.persisted) {
96
+ this.storeSupportabilityMetrics('Generic/BFCache/PageRestored');
97
+ }
98
+ return;
99
+ });
100
+ }
101
+ unload() {
102
+ // Page Resources detection for estimations with resources feature work
103
+ // TODO - these SMs are to be removed when we implement the actual resources feature
104
+ try {
105
+ if (this.resourcesSent) return;
106
+ const agentRuntime = getRuntime(this.agentIdentifier);
107
+ // make sure this only gets sent once
108
+ this.resourcesSent = true;
109
+ // differentiate between internal+external and ajax+non-ajax
110
+ const ajaxResources = ['beacon', 'fetch', 'xmlhttprequest'];
111
+ const internalUrls = ['nr-data.net', 'newrelic.com', 'nr-local.net', 'localhost'];
112
+ function isInternal(x) {
113
+ return internalUrls.some(y => x.name.indexOf(y) >= 0);
114
+ }
115
+ function isAjax(x) {
116
+ return ajaxResources.includes(x.initiatorType);
117
+ }
118
+ const allResources = performance?.getEntriesByType('resource') || [];
119
+ allResources.forEach(entry => {
120
+ if (isInternal(entry)) {
121
+ if (isAjax(entry)) this.storeSupportabilityMetrics('Generic/Resources/Ajax/Internal');else this.storeSupportabilityMetrics('Generic/Resources/Non-Ajax/Internal');
122
+ } else {
123
+ if (isAjax(entry)) this.storeSupportabilityMetrics('Generic/Resources/Ajax/External');else this.storeSupportabilityMetrics('Generic/Resources/Non-Ajax/External');
124
+ }
125
+ });
126
+
127
+ // Capture per-agent bytes sent for each endpoint (see harvest) and RUM call (see page_view_event aggregator).
128
+ Object.keys(agentRuntime.bytesSent).forEach(endpoint => {
129
+ this.storeSupportabilityMetrics(`PageSession/Endpoint/${endpoint.charAt(0).toUpperCase() + endpoint.slice(1)}/BytesSent`, agentRuntime.bytesSent[endpoint]);
130
+ });
131
+
132
+ // Capture metrics for session trace if active (`ptid` is set when returned by replay ingest).
133
+ if (agentRuntime.ptid) {
134
+ this.storeSupportabilityMetrics('PageSession/Feature/SessionTrace/DurationMs', Math.round(performance.now()));
135
+ }
136
+ } catch (e) {
137
+ // do nothing
138
+ }
139
+ }
140
+ }
@@ -0,0 +1,6 @@
1
+ import { FEATURE_NAMES } from '../../loaders/features/features';
2
+ export const FEATURE_NAME = FEATURE_NAMES.metrics;
3
+ export const SUPPORTABILITY_METRIC = 'sm';
4
+ export const CUSTOM_METRIC = 'cm';
5
+ export const SUPPORTABILITY_METRIC_CHANNEL = 'storeSupportabilityMetrics';
6
+ export const CUSTOM_METRIC_CHANNEL = 'storeEventMetrics';
@@ -0,0 +1 @@
1
+ export { Instrument as Metrics } from './instrument/index';
@@ -0,0 +1,39 @@
1
+ import { InstrumentBase } from '../../utils/instrument-base';
2
+ import { insertSupportMetrics } from './workers-helper';
3
+ import { FEATURE_NAME, SUPPORTABILITY_METRIC_CHANNEL } from '../constants';
4
+ import { handle } from '../../../common/event-emitter/handle';
5
+ import { FEATURE_NAMES } from '../../../loaders/features/features';
6
+ import { wrapConsole } from '../../../common/wrap';
7
+ import { stringify } from '../../../common/util/stringify';
8
+ export class Instrument extends InstrumentBase {
9
+ static featureName = FEATURE_NAME;
10
+ constructor(agentIdentifier, aggregator) {
11
+ let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
12
+ super(agentIdentifier, aggregator, FEATURE_NAME, auto);
13
+ insertSupportMetrics(tag => handle(SUPPORTABILITY_METRIC_CHANNEL, [tag], undefined, FEATURE_NAMES.metrics, this.ee));
14
+ this.addConsoleSupportabilityMetrics();
15
+ this.importAggregator();
16
+ }
17
+ addConsoleSupportabilityMetrics() {
18
+ // For now we are just capturing supportability metrics on `console` usage to assess log forwarding feature.
19
+ const consoleEE = wrapConsole(this.ee);
20
+ for (const method of ['Debug', 'Error', 'Info', 'Log', 'Trace', 'Warn']) {
21
+ consoleEE.on(`${method.toLowerCase()}-console-start`, function (args, target) {
22
+ // Parsing the args individually into a new array ensures that functions and Error objects are represented with
23
+ // useful string values. By default, functions stringify to null and Error objects stringify to empty objects.
24
+ // Note that stack traces printed by the console.trace method are not captured.
25
+ let parsedArgs = [];
26
+ for (const arg of args) {
27
+ if (typeof arg === 'function' || arg && arg.message && arg.stack // Duck typing for Error objects
28
+ ) {
29
+ parsedArgs.push(arg.toString());
30
+ } else {
31
+ parsedArgs.push(arg);
32
+ }
33
+ }
34
+ const parsedArgsJSON = stringify(parsedArgs);
35
+ handle(SUPPORTABILITY_METRIC_CHANNEL, [`Console/${method}/Seen`, parsedArgsJSON.length], undefined, FEATURE_NAMES.metrics, consoleEE);
36
+ });
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,119 @@
1
+ import { globalScope, isWorkerScope } from '../../../common/util/global-scope';
2
+ import { warn } from '../../../common/util/console';
3
+
4
+ /**
5
+ * True for each Worker type supported in browser's execution context. Not all browser versions may support certain Workers or options however.
6
+ * - Warning: service workers are not available on unsecured HTTP sites
7
+ */
8
+ const workersApiIsSupported = {
9
+ dedicated: Boolean(globalScope?.Worker),
10
+ shared: Boolean(globalScope?.SharedWorker),
11
+ service: Boolean(globalScope?.navigator?.serviceWorker)
12
+ };
13
+ let origWorker, origSharedWorker, origServiceWorkerCreate;
14
+ /**
15
+ * Un-instrument support metrics for Workers.
16
+ * @returns void
17
+ */
18
+ function resetSupportability() {
19
+ if (origWorker) globalScope.Worker = origWorker; // Worker was changed by this module
20
+ if (origSharedWorker) globalScope.SharedWorker = origSharedWorker;
21
+ if (origServiceWorkerCreate) globalScope.navigator.serviceWorker.register = origServiceWorkerCreate;
22
+ origWorker = origSharedWorker = origServiceWorkerCreate = undefined;
23
+ }
24
+
25
+ /**
26
+ * Injects code to report Web Workers supportability and usage as metrics, replacing the native API in global scope as a side effect.
27
+ * @param {Function} report - a cb used to report data
28
+ * @returns void
29
+ */
30
+ export function insertSupportMetrics(report) {
31
+ // Of the 3, the normal worker is the most widely supported, so we can be sure metric was already inserted w/o checking other 2.
32
+ if (origWorker) return;
33
+ if (!workersApiIsSupported.dedicated) {
34
+ reportUnavailable('All');
35
+ return; // similarly, if dedicated is n/a, none of them are supported so quit
36
+ } else {
37
+ origWorker = Worker;
38
+ try {
39
+ globalScope.Worker = extendWorkerConstructor(origWorker, 'Dedicated');
40
+ } catch (e) {
41
+ handleInsertionError(e, 'Dedicated');
42
+ }
43
+ }
44
+ if (!workersApiIsSupported.shared) {
45
+ reportUnavailable('Shared');
46
+ } else {
47
+ origSharedWorker = SharedWorker;
48
+ try {
49
+ globalScope.SharedWorker = extendWorkerConstructor(origSharedWorker, 'Shared');
50
+ } catch (e) {
51
+ handleInsertionError(e, 'Shared');
52
+ }
53
+ }
54
+ if (!workersApiIsSupported.service) {
55
+ reportUnavailable('Service');
56
+ } else {
57
+ origServiceWorkerCreate = navigator.serviceWorker.register;
58
+ try {
59
+ globalScope.navigator.serviceWorker.register = extendServiceCreation(origServiceWorkerCreate);
60
+ } catch (e) {
61
+ handleInsertionError(e, 'Service');
62
+ }
63
+ }
64
+ return;
65
+
66
+ // Internal helpers - Core
67
+ /**
68
+ * Report each time a Worker or SharedWorker is created in page execution. Note the current trap is set for only "new" and Reflect.construct operations.
69
+ * @param {func obj} origClass - Worker() or SharedWorker()
70
+ * @param {string} workerType - 'Dedicated' or 'Shared'
71
+ * @returns Proxy worker that intercepts the original constructor
72
+ */
73
+ function extendWorkerConstructor(origClass, workerType) {
74
+ if (typeof Proxy === 'undefined') {
75
+ return origClass;
76
+ }
77
+ const newHandler = {
78
+ construct(oConstructor, args) {
79
+ reportWorkerCreationAttempt(workerType, args[1]?.type);
80
+ return new oConstructor(...args);
81
+ }
82
+ };
83
+ // eslint-disable-next-line
84
+ return new Proxy(origClass, newHandler);
85
+ }
86
+ /**
87
+ * Report each time a ServiceWorkerRegistration is created or updated in page execution.
88
+ * @param {func} origFunc - method responsible for creating a ServiceWorker
89
+ * @returns Refer to ServiceWorkerContainer.register()
90
+ */
91
+ function extendServiceCreation(origFunc) {
92
+ return function () {
93
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
94
+ args[_key] = arguments[_key];
95
+ }
96
+ reportWorkerCreationAttempt('Service', args[1]?.type);
97
+ return origFunc.apply(navigator.serviceWorker, args); // register() has to be rebound to the ServiceWorkerContainer object
98
+ };
99
+ }
100
+
101
+ // Internal helpers - Reporting & logging
102
+ function reportUnavailable(workerType) {
103
+ if (isWorkerScope) return; // assume that the main browser window has already reported unsupported worker APIs (once per page life);
104
+ // on top of that, not all workers are available inside a certain worker per se--e.g. no sharedWorker() inside Worker
105
+ report(`Workers/${workerType}/Unavailable`);
106
+ }
107
+ function reportWorkerCreationAttempt(workerType, optionType) {
108
+ if (optionType === 'module') {
109
+ report(`Workers/${workerType}/Module`);
110
+ } else {
111
+ report(`Workers/${workerType}/Classic`);
112
+ }
113
+ }
114
+ function handleInsertionError(e, workerType) {
115
+ // indicates the browser version doesn't support how code is injected, such as Proxy API
116
+ report(`Workers/${workerType}/SM/Unsupported`); // expected to be niche & for older borderline-ES6 browser versions
117
+ warn(`NR Agent: Unable to capture ${workerType} workers.`, e);
118
+ }
119
+ }
@@ -0,0 +1,113 @@
1
+ /*
2
+ * Copyright 2020 New Relic Corporation. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ import { mapOwn } from '../../../common/util/map-own';
7
+ import { stringify } from '../../../common/util/stringify';
8
+ import { registerHandler as register } from '../../../common/event-emitter/register-handler';
9
+ import { HarvestScheduler } from '../../../common/harvest/harvest-scheduler';
10
+ import { cleanURL } from '../../../common/url/clean-url';
11
+ import { getConfigurationValue, getInfo, getRuntime } from '../../../common/config/config';
12
+ import { AggregateBase } from '../../utils/aggregate-base';
13
+ import { FEATURE_NAME } from '../constants';
14
+ import { drain } from '../../../common/drain/drain';
15
+ import { isBrowserScope } from '../../../common/util/global-scope';
16
+ export class Aggregate extends AggregateBase {
17
+ static featureName = FEATURE_NAME;
18
+ constructor(agentIdentifier, aggregator) {
19
+ var _this;
20
+ super(agentIdentifier, aggregator, FEATURE_NAME);
21
+ _this = this;
22
+ this.eventsPerMinute = 240;
23
+ this.harvestTimeSeconds = getConfigurationValue(this.agentIdentifier, 'page_action.harvestTimeSeconds') || getConfigurationValue(this.agentIdentifier, 'ins.harvestTimeSeconds') || 30;
24
+ this.eventsPerHarvest = this.eventsPerMinute * this.harvestTimeSeconds / 60;
25
+ this.referrerUrl;
26
+ this.currentEvents;
27
+ this.events = [];
28
+ this.att = getInfo(this.agentIdentifier).jsAttributes; // per-agent, aggregators-shared info context
29
+
30
+ if (isBrowserScope && document.referrer) this.referrerUrl = cleanURL(document.referrer);
31
+ register('api-addPageAction', function () {
32
+ return _this.addPageAction(...arguments);
33
+ }, this.featureName, this.ee);
34
+ var scheduler = new HarvestScheduler('ins', {
35
+ onFinished: function () {
36
+ return _this.onHarvestFinished(...arguments);
37
+ }
38
+ }, this);
39
+ scheduler.harvest.on('ins', function () {
40
+ return _this.onHarvestStarted(...arguments);
41
+ });
42
+ this.ee.on(`drain-${this.featureName}`, () => {
43
+ if (!this.blocked) scheduler.startTimer(this.harvestTimeSeconds, 0);
44
+ });
45
+
46
+ // if rum response determines that customer lacks entitlements for ins endpoint, block it
47
+ register('block-ins', () => {
48
+ this.blocked = true;
49
+ scheduler.stopTimer(true);
50
+ }, this.featureName, this.ee);
51
+ drain(this.agentIdentifier, this.featureName);
52
+ }
53
+ onHarvestStarted(options) {
54
+ const {
55
+ userAttributes,
56
+ atts
57
+ } = getInfo(this.agentIdentifier);
58
+ var payload = {
59
+ qs: {
60
+ ua: userAttributes,
61
+ at: atts
62
+ },
63
+ body: {
64
+ ins: this.events
65
+ }
66
+ };
67
+ if (options.retry) {
68
+ this.currentEvents = this.events;
69
+ }
70
+ this.events = [];
71
+ return payload;
72
+ }
73
+ onHarvestFinished(result) {
74
+ if (result && result.sent && result.retry && this.currentEvents) {
75
+ this.events = this.events.concat(this.currentEvents);
76
+ this.currentEvents = null;
77
+ }
78
+ }
79
+
80
+ // WARNING: Insights times are in seconds. EXCEPT timestamp, which is in ms.
81
+ addPageAction(t, name, attributes) {
82
+ if (this.events.length >= this.eventsPerHarvest || this.blocked) return;
83
+ var width;
84
+ var height;
85
+ var eventAttributes = {};
86
+ if (isBrowserScope && window.document.documentElement) {
87
+ // Doesn't include the nav bar when it disappears in mobile safari
88
+ // https://github.com/jquery/jquery/blob/10399ddcf8a239acc27bdec9231b996b178224d3/src/dimensions.js#L23
89
+ width = window.document.documentElement.clientWidth;
90
+ height = window.document.documentElement.clientHeight;
91
+ }
92
+ var defaults = {
93
+ timestamp: t + getRuntime(this.agentIdentifier).offset,
94
+ timeSinceLoad: t / 1000,
95
+ browserWidth: width,
96
+ browserHeight: height,
97
+ referrerUrl: this.referrerUrl,
98
+ currentUrl: cleanURL('' + location),
99
+ pageUrl: cleanURL(getRuntime(this.agentIdentifier).origin),
100
+ eventType: 'PageAction'
101
+ };
102
+ mapOwn(defaults, set);
103
+ mapOwn(getInfo(this.agentIdentifier).jsAttributes, set);
104
+ if (attributes && typeof attributes === 'object') {
105
+ mapOwn(attributes, set);
106
+ }
107
+ eventAttributes.actionName = name || '';
108
+ this.events.push(eventAttributes);
109
+ function set(key, val) {
110
+ eventAttributes[key] = val && typeof val === 'object' ? stringify(val) : val;
111
+ }
112
+ }
113
+ }
@@ -0,0 +1,2 @@
1
+ import { FEATURE_NAMES } from '../../loaders/features/features';
2
+ export const FEATURE_NAME = FEATURE_NAMES.pageAction;
@@ -0,0 +1 @@
1
+ export { Instrument as PageAction } from './instrument/index';
@@ -0,0 +1,15 @@
1
+ /*
2
+ * Copyright 2020 New Relic Corporation. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ import { InstrumentBase } from '../../utils/instrument-base';
7
+ import { FEATURE_NAME } from '../constants';
8
+ export class Instrument extends InstrumentBase {
9
+ static featureName = FEATURE_NAME;
10
+ constructor(agentIdentifier, aggregator) {
11
+ let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
12
+ super(agentIdentifier, aggregator, FEATURE_NAME, auto);
13
+ this.importAggregator();
14
+ }
15
+ }