@newrelic/browser-agent 1.235.0 → 1.236.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/README.md +41 -1
  2. package/dist/cjs/common/config/state/init.js +3 -0
  3. package/dist/cjs/common/config/state/runtime.js +4 -4
  4. package/dist/cjs/common/constants/env.cdn.js +2 -2
  5. package/dist/cjs/common/constants/env.npm.js +1 -1
  6. package/dist/cjs/common/constants/runtime.js +52 -0
  7. package/dist/cjs/common/event-listener/event-listener-opts.js +3 -3
  8. package/dist/cjs/common/harvest/harvest-scheduler.js +22 -19
  9. package/dist/cjs/common/harvest/harvest.js +163 -144
  10. package/dist/cjs/common/harvest/types.js +54 -0
  11. package/dist/cjs/common/ids/id.js +2 -2
  12. package/dist/cjs/common/ids/unique-id.js +3 -3
  13. package/dist/cjs/common/session/session-entity.js +2 -2
  14. package/dist/cjs/common/timer/interaction-timer.js +2 -2
  15. package/dist/cjs/common/unload/eol.js +10 -11
  16. package/dist/cjs/common/url/canonicalize-url.js +2 -2
  17. package/dist/cjs/common/url/parse-url.js +3 -3
  18. package/dist/cjs/common/url/protocol.js +2 -2
  19. package/dist/cjs/common/util/submit-data.js +58 -76
  20. package/dist/cjs/common/window/nreum.js +14 -14
  21. package/dist/cjs/common/wrap/wrap-events.js +3 -3
  22. package/dist/cjs/common/wrap/wrap-fetch.js +5 -5
  23. package/dist/cjs/common/wrap/wrap-history.js +2 -2
  24. package/dist/cjs/common/wrap/wrap-jsonp.js +2 -2
  25. package/dist/cjs/common/wrap/wrap-mutation.js +2 -2
  26. package/dist/cjs/common/wrap/wrap-promise.js +2 -2
  27. package/dist/cjs/common/wrap/wrap-raf.js +2 -2
  28. package/dist/cjs/common/wrap/wrap-timer.js +4 -4
  29. package/dist/cjs/common/wrap/wrap-xhr.js +3 -3
  30. package/dist/cjs/features/ajax/aggregate/index.js +1 -1
  31. package/dist/cjs/features/ajax/instrument/distributed-tracing.js +2 -2
  32. package/dist/cjs/features/ajax/instrument/index.js +6 -7
  33. package/dist/cjs/features/jserrors/aggregate/index.js +7 -4
  34. package/dist/cjs/features/jserrors/instrument/index.js +4 -4
  35. package/dist/cjs/features/metrics/aggregate/framework-detection.js +2 -2
  36. package/dist/cjs/features/metrics/aggregate/index.js +3 -3
  37. package/dist/cjs/features/page_action/aggregate/index.js +3 -3
  38. package/dist/cjs/features/page_view_event/aggregate/index.js +10 -11
  39. package/dist/cjs/features/page_view_event/instrument/index.js +2 -2
  40. package/dist/cjs/features/page_view_timing/aggregate/index.js +3 -5
  41. package/dist/cjs/features/page_view_timing/instrument/index.js +2 -2
  42. package/dist/cjs/features/session_replay/replay-mode.js +2 -2
  43. package/dist/cjs/features/session_trace/instrument/index.js +2 -2
  44. package/dist/cjs/features/spa/aggregate/index.js +1 -1
  45. package/dist/cjs/features/spa/instrument/index.js +2 -2
  46. package/dist/cjs/features/utils/instrument-base.js +6 -7
  47. package/dist/cjs/index.js +7 -0
  48. package/dist/cjs/loaders/agent.js +7 -0
  49. package/dist/cjs/loaders/api/api.js +2 -2
  50. package/dist/cjs/loaders/api/apiAsync.js +6 -4
  51. package/dist/cjs/loaders/configure/configure.js +2 -2
  52. package/dist/cjs/loaders/micro-agent.js +29 -38
  53. package/dist/esm/common/config/state/init.js +3 -0
  54. package/dist/esm/common/config/state/runtime.js +1 -1
  55. package/dist/esm/common/constants/env.cdn.js +2 -2
  56. package/dist/esm/common/constants/env.npm.js +1 -1
  57. package/dist/esm/common/constants/runtime.js +38 -0
  58. package/dist/esm/common/event-listener/event-listener-opts.js +1 -1
  59. package/dist/esm/common/harvest/harvest-scheduler.js +21 -20
  60. package/dist/esm/common/harvest/harvest.js +160 -142
  61. package/dist/esm/common/harvest/types.js +47 -0
  62. package/dist/esm/common/ids/id.js +1 -1
  63. package/dist/esm/common/ids/unique-id.js +1 -1
  64. package/dist/esm/common/session/session-entity.js +1 -1
  65. package/dist/esm/common/timer/interaction-timer.js +1 -1
  66. package/dist/esm/common/unload/eol.js +1 -2
  67. package/dist/esm/common/url/canonicalize-url.js +1 -1
  68. package/dist/esm/common/url/parse-url.js +1 -1
  69. package/dist/esm/common/url/protocol.js +1 -1
  70. package/dist/esm/common/util/submit-data.js +55 -73
  71. package/dist/esm/common/window/nreum.js +1 -1
  72. package/dist/esm/common/wrap/wrap-events.js +1 -1
  73. package/dist/esm/common/wrap/wrap-fetch.js +1 -1
  74. package/dist/esm/common/wrap/wrap-history.js +1 -1
  75. package/dist/esm/common/wrap/wrap-jsonp.js +1 -1
  76. package/dist/esm/common/wrap/wrap-mutation.js +1 -1
  77. package/dist/esm/common/wrap/wrap-promise.js +1 -1
  78. package/dist/esm/common/wrap/wrap-raf.js +1 -1
  79. package/dist/esm/common/wrap/wrap-timer.js +1 -1
  80. package/dist/esm/common/wrap/wrap-xhr.js +1 -1
  81. package/dist/esm/features/ajax/aggregate/index.js +1 -1
  82. package/dist/esm/features/ajax/instrument/distributed-tracing.js +1 -1
  83. package/dist/esm/features/ajax/instrument/index.js +1 -2
  84. package/dist/esm/features/jserrors/aggregate/index.js +6 -3
  85. package/dist/esm/features/jserrors/instrument/index.js +1 -1
  86. package/dist/esm/features/metrics/aggregate/framework-detection.js +1 -1
  87. package/dist/esm/features/metrics/aggregate/index.js +1 -1
  88. package/dist/esm/features/page_action/aggregate/index.js +1 -1
  89. package/dist/esm/features/page_view_event/aggregate/index.js +1 -2
  90. package/dist/esm/features/page_view_event/instrument/index.js +1 -1
  91. package/dist/esm/features/page_view_timing/aggregate/index.js +2 -4
  92. package/dist/esm/features/page_view_timing/instrument/index.js +1 -1
  93. package/dist/esm/features/session_replay/replay-mode.js +2 -2
  94. package/dist/esm/features/session_trace/instrument/index.js +1 -1
  95. package/dist/esm/features/spa/aggregate/index.js +1 -1
  96. package/dist/esm/features/spa/instrument/index.js +1 -1
  97. package/dist/esm/features/utils/instrument-base.js +4 -5
  98. package/dist/esm/index.js +1 -4
  99. package/dist/esm/loaders/agent.js +7 -0
  100. package/dist/esm/loaders/api/api.js +1 -1
  101. package/dist/esm/loaders/api/apiAsync.js +3 -3
  102. package/dist/esm/loaders/configure/configure.js +1 -1
  103. package/dist/esm/loaders/micro-agent.js +29 -38
  104. package/dist/types/common/config/state/init.d.ts.map +1 -1
  105. package/dist/types/common/constants/runtime.d.ts +29 -0
  106. package/dist/types/common/constants/runtime.d.ts.map +1 -0
  107. package/dist/types/common/harvest/harvest-scheduler.d.ts +1 -1
  108. package/dist/types/common/harvest/harvest-scheduler.d.ts.map +1 -1
  109. package/dist/types/common/harvest/harvest.d.ts +49 -38
  110. package/dist/types/common/harvest/harvest.d.ts.map +1 -1
  111. package/dist/types/common/harvest/types.d.ts +100 -0
  112. package/dist/types/common/harvest/types.d.ts.map +1 -0
  113. package/dist/types/common/unload/eol.d.ts.map +1 -1
  114. package/dist/types/common/util/submit-data.d.ts +62 -64
  115. package/dist/types/common/util/submit-data.d.ts.map +1 -1
  116. package/dist/types/features/ajax/instrument/index.d.ts.map +1 -1
  117. package/dist/types/features/jserrors/aggregate/index.d.ts +1 -1
  118. package/dist/types/features/jserrors/aggregate/index.d.ts.map +1 -1
  119. package/dist/types/features/jserrors/instrument/index.d.ts +1 -1
  120. package/dist/types/features/jserrors/instrument/index.d.ts.map +1 -1
  121. package/dist/types/features/page_view_event/aggregate/index.d.ts.map +1 -1
  122. package/dist/types/features/page_view_timing/aggregate/index.d.ts.map +1 -1
  123. package/dist/types/index.d.ts +1 -0
  124. package/dist/types/loaders/agent.d.ts +4 -4
  125. package/dist/types/loaders/agent.d.ts.map +1 -1
  126. package/dist/types/loaders/micro-agent.d.ts +3 -4
  127. package/dist/types/loaders/micro-agent.d.ts.map +1 -1
  128. package/package.json +6 -1
  129. package/src/common/config/__mocks__/config.js +11 -0
  130. package/src/common/config/state/init.js +1 -0
  131. package/src/common/config/state/runtime.js +1 -1
  132. package/src/common/constants/__mocks__/env.js +3 -0
  133. package/src/common/constants/__mocks__/runtime.js +8 -0
  134. package/src/common/constants/env.cdn.test.js +7 -0
  135. package/src/common/constants/env.npm.test.js +7 -0
  136. package/src/common/constants/env.test.js +7 -0
  137. package/src/common/constants/runtime.js +71 -0
  138. package/src/common/constants/runtime.test.js +168 -0
  139. package/src/common/context/__mocks__/shared-context.js +8 -0
  140. package/src/common/event-listener/__mocks__/event-listener-opts.js +7 -0
  141. package/src/common/event-listener/event-listener-opts.js +1 -1
  142. package/src/common/harvest/__mocks__/harvest.js +13 -0
  143. package/src/common/harvest/harvest-scheduler.js +21 -20
  144. package/src/common/harvest/harvest-scheduler.test.js +496 -0
  145. package/src/common/harvest/harvest.js +147 -130
  146. package/src/common/harvest/harvest.test.js +818 -0
  147. package/src/common/harvest/types.js +47 -0
  148. package/src/common/ids/id.js +1 -1
  149. package/src/common/ids/unique-id.js +1 -1
  150. package/src/common/session/__mocks__/session-entity.js +25 -0
  151. package/src/common/session/session-entity.component-test.js +1 -1
  152. package/src/common/session/session-entity.js +1 -1
  153. package/src/common/timer/interaction-timer.js +1 -1
  154. package/src/common/timing/__mocks__/now.js +1 -0
  155. package/src/common/unload/__mocks__/eol.js +1 -0
  156. package/src/common/unload/eol.js +1 -2
  157. package/src/common/url/__mocks__/clean-url.js +1 -0
  158. package/src/common/url/__mocks__/encode.js +7 -0
  159. package/src/common/url/__mocks__/location.js +1 -0
  160. package/src/common/url/canonicalize-url.js +1 -1
  161. package/src/common/url/canonicalize-url.test.js +2 -2
  162. package/src/common/url/parse-url.js +1 -1
  163. package/src/common/url/parse-url.test.js +3 -3
  164. package/src/common/url/protocol.js +1 -1
  165. package/src/common/util/__mocks__/obfuscate.js +10 -0
  166. package/src/common/util/__mocks__/stringify.js +1 -0
  167. package/src/common/util/__mocks__/submit-data.js +6 -0
  168. package/src/common/util/__mocks__/traverse.js +1 -0
  169. package/src/common/util/submit-data.js +39 -53
  170. package/src/common/util/submit-data.test.js +81 -68
  171. package/src/common/window/nreum.js +1 -1
  172. package/src/common/wrap/wrap-events.js +1 -1
  173. package/src/common/wrap/wrap-fetch.js +1 -1
  174. package/src/common/wrap/wrap-history.js +1 -1
  175. package/src/common/wrap/wrap-jsonp.js +1 -1
  176. package/src/common/wrap/wrap-mutation.js +1 -1
  177. package/src/common/wrap/wrap-promise.js +1 -1
  178. package/src/common/wrap/wrap-promise.test.js +2 -2
  179. package/src/common/wrap/wrap-raf.js +1 -1
  180. package/src/common/wrap/wrap-timer.js +1 -1
  181. package/src/common/wrap/wrap-xhr.js +1 -1
  182. package/src/features/ajax/aggregate/index.js +1 -1
  183. package/src/features/ajax/instrument/distributed-tracing.js +1 -1
  184. package/src/features/ajax/instrument/index.js +1 -2
  185. package/src/features/jserrors/aggregate/compute-stack-trace.test.js +1 -1
  186. package/src/features/jserrors/aggregate/index.js +7 -3
  187. package/src/features/jserrors/instrument/index.js +1 -1
  188. package/src/features/metrics/aggregate/framework-detection.js +1 -1
  189. package/src/features/metrics/aggregate/framework-detection.test.js +2 -2
  190. package/src/features/metrics/aggregate/index.js +1 -1
  191. package/src/features/page_action/aggregate/index.js +1 -1
  192. package/src/features/page_view_event/aggregate/index.js +1 -2
  193. package/src/features/page_view_event/instrument/index.js +1 -1
  194. package/src/features/page_view_timing/aggregate/index.js +2 -4
  195. package/src/features/page_view_timing/instrument/index.js +1 -1
  196. package/src/features/session_replay/replay-mode.js +2 -2
  197. package/src/features/session_trace/instrument/index.js +1 -1
  198. package/src/features/spa/aggregate/index.js +1 -1
  199. package/src/features/spa/instrument/index.js +1 -1
  200. package/src/features/utils/agent-session.test.js +2 -2
  201. package/src/features/utils/instrument-base.js +5 -5
  202. package/src/features/utils/instrument-base.test.js +22 -3
  203. package/src/index.js +1 -3
  204. package/src/loaders/agent.js +8 -0
  205. package/src/loaders/api/api.js +1 -1
  206. package/src/loaders/api/apiAsync.js +3 -3
  207. package/src/loaders/configure/configure.js +1 -1
  208. package/src/loaders/micro-agent.js +26 -30
  209. package/dist/cjs/common/browser-version/firefox-version.js +0 -17
  210. package/dist/cjs/common/browser-version/ios-version.js +0 -19
  211. package/dist/cjs/common/event-emitter/contextual-ee.test.js +0 -282
  212. package/dist/cjs/common/event-emitter/handle.test.js +0 -58
  213. package/dist/cjs/common/event-emitter/register-handler.test.js +0 -55
  214. package/dist/cjs/common/harvest/harvest-scheduler.component-test.js +0 -39
  215. package/dist/cjs/common/harvest/harvest.component-test.js +0 -224
  216. package/dist/cjs/common/ids/id.test.js +0 -85
  217. package/dist/cjs/common/ids/unique-id.test.js +0 -49
  218. package/dist/cjs/common/session/session-entity.component-test.js +0 -497
  219. package/dist/cjs/common/storage/local-storage.test.js +0 -14
  220. package/dist/cjs/common/timer/interaction-timer.component-test.js +0 -216
  221. package/dist/cjs/common/timer/timer.test.js +0 -105
  222. package/dist/cjs/common/timing/nav-timing.test.js +0 -192
  223. package/dist/cjs/common/url/canonicalize-url.test.js +0 -38
  224. package/dist/cjs/common/url/clean-url.test.js +0 -9
  225. package/dist/cjs/common/url/encode.component-test.js +0 -74
  226. package/dist/cjs/common/url/location.test.js +0 -13
  227. package/dist/cjs/common/url/parse-url.test.js +0 -111
  228. package/dist/cjs/common/url/protocol.component-test.js +0 -15
  229. package/dist/cjs/common/util/console.test.js +0 -30
  230. package/dist/cjs/common/util/data-size.test.js +0 -64
  231. package/dist/cjs/common/util/feature-flags.test.js +0 -84
  232. package/dist/cjs/common/util/get-or-set.test.js +0 -47
  233. package/dist/cjs/common/util/global-scope.js +0 -27
  234. package/dist/cjs/common/util/global-scope.test.js +0 -72
  235. package/dist/cjs/common/util/invoke.test.js +0 -49
  236. package/dist/cjs/common/util/map-own.test.js +0 -49
  237. package/dist/cjs/common/util/obfuscate.component-test.js +0 -129
  238. package/dist/cjs/common/util/stringify.test.js +0 -48
  239. package/dist/cjs/common/util/submit-data.test.js +0 -245
  240. package/dist/cjs/common/util/traverse.test.js +0 -44
  241. package/dist/cjs/common/wrap/wrap-promise.test.js +0 -119
  242. package/dist/cjs/features/jserrors/aggregate/canonical-function-name.test.js +0 -31
  243. package/dist/cjs/features/jserrors/aggregate/compute-stack-trace.test.js +0 -383
  244. package/dist/cjs/features/jserrors/aggregate/format-stack-trace.test.js +0 -40
  245. package/dist/cjs/features/jserrors/aggregate/string-hash-code.test.js +0 -27
  246. package/dist/cjs/features/metrics/aggregate/framework-detection.test.js +0 -137
  247. package/dist/cjs/features/metrics/aggregate/polyfill-detection.es5.test.js +0 -17
  248. package/dist/cjs/features/metrics/aggregate/polyfill-detection.test.js +0 -165
  249. package/dist/cjs/features/session_replay/aggregate/index.component-test.js +0 -457
  250. package/dist/cjs/features/spa/aggregate/interaction-node.test.js +0 -16
  251. package/dist/cjs/features/utils/agent-session.test.js +0 -211
  252. package/dist/cjs/features/utils/aggregate-base.test.js +0 -110
  253. package/dist/cjs/features/utils/feature-base.test.js +0 -42
  254. package/dist/cjs/features/utils/handler-cache.test.js +0 -53
  255. package/dist/cjs/features/utils/instrument-base.test.js +0 -179
  256. package/dist/cjs/features/utils/lazy-feature-loader.test.js +0 -30
  257. package/dist/esm/common/browser-version/firefox-version.js +0 -10
  258. package/dist/esm/common/browser-version/ios-version.js +0 -11
  259. package/dist/esm/common/event-emitter/contextual-ee.test.js +0 -278
  260. package/dist/esm/common/event-emitter/handle.test.js +0 -54
  261. package/dist/esm/common/event-emitter/register-handler.test.js +0 -51
  262. package/dist/esm/common/harvest/harvest-scheduler.component-test.js +0 -37
  263. package/dist/esm/common/harvest/harvest.component-test.js +0 -222
  264. package/dist/esm/common/ids/id.test.js +0 -81
  265. package/dist/esm/common/ids/unique-id.test.js +0 -44
  266. package/dist/esm/common/session/session-entity.component-test.js +0 -495
  267. package/dist/esm/common/storage/local-storage.test.js +0 -12
  268. package/dist/esm/common/timer/interaction-timer.component-test.js +0 -214
  269. package/dist/esm/common/timer/timer.test.js +0 -103
  270. package/dist/esm/common/timing/nav-timing.test.js +0 -190
  271. package/dist/esm/common/url/canonicalize-url.test.js +0 -34
  272. package/dist/esm/common/url/clean-url.test.js +0 -7
  273. package/dist/esm/common/url/encode.component-test.js +0 -70
  274. package/dist/esm/common/url/location.test.js +0 -11
  275. package/dist/esm/common/url/parse-url.test.js +0 -107
  276. package/dist/esm/common/url/protocol.component-test.js +0 -13
  277. package/dist/esm/common/util/console.test.js +0 -28
  278. package/dist/esm/common/util/data-size.test.js +0 -60
  279. package/dist/esm/common/util/feature-flags.test.js +0 -80
  280. package/dist/esm/common/util/get-or-set.test.js +0 -45
  281. package/dist/esm/common/util/global-scope.js +0 -17
  282. package/dist/esm/common/util/global-scope.test.js +0 -70
  283. package/dist/esm/common/util/invoke.test.js +0 -47
  284. package/dist/esm/common/util/map-own.test.js +0 -47
  285. package/dist/esm/common/util/obfuscate.component-test.js +0 -125
  286. package/dist/esm/common/util/stringify.test.js +0 -46
  287. package/dist/esm/common/util/submit-data.test.js +0 -241
  288. package/dist/esm/common/util/traverse.test.js +0 -42
  289. package/dist/esm/common/wrap/wrap-promise.test.js +0 -115
  290. package/dist/esm/features/jserrors/aggregate/canonical-function-name.test.js +0 -29
  291. package/dist/esm/features/jserrors/aggregate/compute-stack-trace.test.js +0 -379
  292. package/dist/esm/features/jserrors/aggregate/format-stack-trace.test.js +0 -38
  293. package/dist/esm/features/jserrors/aggregate/string-hash-code.test.js +0 -25
  294. package/dist/esm/features/metrics/aggregate/framework-detection.test.js +0 -133
  295. package/dist/esm/features/metrics/aggregate/polyfill-detection.es5.test.js +0 -15
  296. package/dist/esm/features/metrics/aggregate/polyfill-detection.test.js +0 -163
  297. package/dist/esm/features/session_replay/aggregate/index.component-test.js +0 -453
  298. package/dist/esm/features/spa/aggregate/interaction-node.test.js +0 -14
  299. package/dist/esm/features/utils/agent-session.test.js +0 -207
  300. package/dist/esm/features/utils/aggregate-base.test.js +0 -108
  301. package/dist/esm/features/utils/feature-base.test.js +0 -40
  302. package/dist/esm/features/utils/handler-cache.test.js +0 -51
  303. package/dist/esm/features/utils/instrument-base.test.js +0 -175
  304. package/dist/esm/features/utils/lazy-feature-loader.test.js +0 -29
  305. package/dist/types/common/browser-version/firefox-version.d.ts +0 -2
  306. package/dist/types/common/browser-version/firefox-version.d.ts.map +0 -1
  307. package/dist/types/common/browser-version/ios-version.d.ts +0 -3
  308. package/dist/types/common/browser-version/ios-version.d.ts.map +0 -1
  309. package/dist/types/common/harvest/harvest-scheduler.component-test.d.ts +0 -2
  310. package/dist/types/common/harvest/harvest-scheduler.component-test.d.ts.map +0 -1
  311. package/dist/types/common/harvest/harvest.component-test.d.ts +0 -2
  312. package/dist/types/common/harvest/harvest.component-test.d.ts.map +0 -1
  313. package/dist/types/common/session/session-entity.component-test.d.ts +0 -2
  314. package/dist/types/common/session/session-entity.component-test.d.ts.map +0 -1
  315. package/dist/types/common/timer/interaction-timer.component-test.d.ts +0 -2
  316. package/dist/types/common/timer/interaction-timer.component-test.d.ts.map +0 -1
  317. package/dist/types/common/url/encode.component-test.d.ts +0 -2
  318. package/dist/types/common/url/encode.component-test.d.ts.map +0 -1
  319. package/dist/types/common/url/protocol.component-test.d.ts +0 -2
  320. package/dist/types/common/url/protocol.component-test.d.ts.map +0 -1
  321. package/dist/types/common/util/global-scope.d.ts +0 -5
  322. package/dist/types/common/util/global-scope.d.ts.map +0 -1
  323. package/dist/types/common/util/obfuscate.component-test.d.ts +0 -2
  324. package/dist/types/common/util/obfuscate.component-test.d.ts.map +0 -1
  325. package/dist/types/features/session_replay/aggregate/index.component-test.d.ts +0 -2
  326. package/dist/types/features/session_replay/aggregate/index.component-test.d.ts.map +0 -1
  327. package/src/common/browser-version/firefox-version.js +0 -10
  328. package/src/common/browser-version/ios-version.js +0 -11
  329. package/src/common/harvest/harvest-scheduler.component-test.js +0 -25
  330. package/src/common/harvest/harvest.component-test.js +0 -169
  331. package/src/common/util/global-scope.js +0 -23
  332. package/src/common/util/global-scope.test.js +0 -87
@@ -4,11 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Harvest = void 0;
7
- exports.getSubmitMethod = getSubmitMethod;
8
- var _mapOwn = require("../util/map-own");
9
7
  var _encode = require("../url/encode");
10
8
  var _stringify = require("../util/stringify");
11
- var _submitData = require("../util/submit-data");
9
+ var submitData = _interopRequireWildcard(require("../util/submit-data"));
12
10
  var _location = require("../url/location");
13
11
  var _config = require("../config/config");
14
12
  var _cleanUrl = require("../url/clean-url");
@@ -18,31 +16,22 @@ var _obfuscate = require("../util/obfuscate");
18
16
  var _traverse = require("../util/traverse");
19
17
  var _sharedContext = require("../context/shared-context");
20
18
  var _env = require("../constants/env.npm");
21
- var _globalScope = require("../util/global-scope");
19
+ var _runtime = require("../constants/runtime");
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
22
  /*
23
23
  * Copyright 2020 New Relic Corporation. All rights reserved.
24
24
  * SPDX-License-Identifier: Apache-2.0
25
25
  */
26
26
 
27
27
  /**
28
- * @typedef {object} NetworkSendSpec
29
- * @param {string} endpoint The endpoint to use (jserrors, events, resources etc.)
30
- * @param {object} payload Object representing payload.
31
- * @param {object} payload.qs Map of values that should be sent as part of the request query string.
32
- * @param {string} payload.body String that should be sent as the body of the request.
33
- * @param {string} payload.body.e Special case of body used for browser interactions.
34
- * @param {object} opts Additional options for sending data
35
- * @param {boolean} opts.needResponse Specify whether the caller expects a response data.
36
- * @param {boolean} opts.unload Specify whether the call is a final harvest during page unload.
37
- * @param {boolean} opts.sendEmptyBody Specify whether the call should be made even if the body is empty. Useful for rum calls.
38
- * @param {function} submitMethod The submit method to use {@link ../util/submit-data}
39
- * @param {string} customUrl Override the beacon url the data is sent to; must include protocol if defined
40
- * @param {boolean} gzip Enabled gzip compression on the body of the request before it is sent
41
- * @param {boolean} includeBaseParams Enables the use of base query parameters in the beacon url {@see Harvest.baseQueryString}
28
+ * @typedef {import('./types.js').NetworkSendSpec} NetworkSendSpec
29
+ * @typedef {import('./types.js').HarvestEndpointIdentifier} HarvestEndpointIdentifier
30
+ * @typedef {import('./types.js').HarvestPayload} HarvestPayload
31
+ * @typedef {import('./types.js').FeatureHarvestCallback} FeatureHarvestCallback
32
+ * @typedef {import('./types.js').FeatureHarvestCallbackOptions} FeatureHarvestCallbackOptions
42
33
  */
43
34
 
44
- const haveSendBeacon = !!navigator.sendBeacon; // only the web window obj has sendBeacon at this time, so 'false' for other envs
45
-
46
35
  class Harvest extends _sharedContext.SharedContext {
47
36
  constructor(parent) {
48
37
  super(parent); // gets any allowed properties from the parent and stores them in `sharedContext`
@@ -56,20 +45,19 @@ class Harvest extends _sharedContext.SharedContext {
56
45
  /**
57
46
  * Initiate a harvest from multiple sources. An event that corresponds to the endpoint
58
47
  * name is emitted, which gives any listeners the opportunity to provide payload data.
48
+ * Note: Used by page_action
59
49
  * @param {NetworkSendSpec} spec Specification for sending data
60
50
  */
61
- sendX(spec) {
62
- const {
63
- endpoint,
64
- opts
65
- } = spec;
66
- var submitMethod = getSubmitMethod(endpoint, opts);
67
- if (!submitMethod) return false;
68
- var options = {
69
- retry: submitMethod.method === _submitData.submitData.xhr
51
+ sendX() {
52
+ let spec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
53
+ const submitMethod = submitData.getSubmitMethod({
54
+ isFinalHarvest: spec.opts?.unload
55
+ });
56
+ const options = {
57
+ retry: !spec.opts?.unload && submitMethod === submitData.xhr
70
58
  };
71
- const payload = this.createPayload(endpoint, options);
72
- var caller = this.obfuscator.shouldObfuscate() ? this.obfuscateAndSend.bind(this) : this._send.bind(this);
59
+ const payload = this.createPayload(spec.endpoint, options);
60
+ const caller = this.obfuscator.shouldObfuscate() ? this.obfuscateAndSend.bind(this) : this._send.bind(this);
73
61
  return caller({
74
62
  ...spec,
75
63
  payload,
@@ -81,31 +69,19 @@ class Harvest extends _sharedContext.SharedContext {
81
69
  * Initiate a harvest call.
82
70
  * @param {NetworkSendSpec} spec Specification for sending data
83
71
  */
84
- send(spec) {
85
- const {
86
- payload = {}
87
- } = spec;
88
- var makeBody = createAccumulator();
89
- var makeQueryString = createAccumulator();
90
- if (payload.body) (0, _mapOwn.mapOwn)(payload.body, makeBody);
91
- if (payload.qs) (0, _mapOwn.mapOwn)(payload.qs, makeQueryString);
92
- var newPayload = {
93
- body: makeBody(),
94
- qs: makeQueryString()
95
- };
96
- var caller = this.obfuscator.shouldObfuscate() ? this.obfuscateAndSend.bind(this) : this._send.bind(this);
97
- return caller({
98
- ...spec,
99
- payload: newPayload
100
- });
72
+ send() {
73
+ let spec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
74
+ const caller = this.obfuscator.shouldObfuscate() ? this.obfuscateAndSend.bind(this) : this._send.bind(this);
75
+ return caller(spec);
101
76
  }
102
77
 
103
78
  /**
104
79
  * Apply obfuscation rules to the payload and then initial the harvest network call.
105
80
  * @param {NetworkSendSpec} spec Specification for sending data
106
81
  */
107
- obfuscateAndSend(spec) {
82
+ obfuscateAndSend() {
108
83
  var _this = this;
84
+ let spec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
109
85
  const {
110
86
  payload = {}
111
87
  } = spec;
@@ -117,6 +93,14 @@ class Harvest extends _sharedContext.SharedContext {
117
93
  payload
118
94
  });
119
95
  }
96
+
97
+ /**
98
+ * Initiate a harvest call. Typically used by `sendX` and `send` methods or called directly
99
+ * for raw network calls.
100
+ * @param {NetworkSendSpec} param0 Specification for sending data
101
+ * @returns {boolean} True if the network call succeeded. For final harvest calls, the return
102
+ * value should not be relied upon because network calls will be made asynchronously.
103
+ */
120
104
  _send(_ref) {
121
105
  let {
122
106
  endpoint,
@@ -128,10 +112,14 @@ class Harvest extends _sharedContext.SharedContext {
128
112
  raw,
129
113
  includeBaseParams = true
130
114
  } = _ref;
131
- var info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
115
+ const info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
132
116
  if (!info.errorBeacon) return false;
133
- var agentRuntime = (0, _config.getRuntime)(this.sharedContext.agentIdentifier);
134
- if (!payload.body && !opts?.sendEmptyBody) {
117
+ const agentRuntime = (0, _config.getRuntime)(this.sharedContext.agentIdentifier);
118
+ let {
119
+ body,
120
+ qs
121
+ } = this.cleanPayload(payload);
122
+ if (Object.keys(body).length === 0 && !opts?.sendEmptyBody) {
135
123
  // no payload body? nothing to send, just run onfinish stuff and return
136
124
  if (cbFinished) {
137
125
  cbFinished({
@@ -140,27 +128,32 @@ class Harvest extends _sharedContext.SharedContext {
140
128
  }
141
129
  return false;
142
130
  }
143
- let url = '';
144
- if (customUrl) url = customUrl;else if (raw) url = "".concat(this.getScheme(), "://").concat(info.errorBeacon, "/").concat(endpoint);else url = "".concat(this.getScheme(), "://").concat(info.errorBeacon).concat(endpoint !== 'rum' ? "/".concat(endpoint) : '', "/1/").concat(info.licenseKey);
145
- var baseParams = !raw && includeBaseParams ? this.baseQueryString() : '';
146
- var payloadParams = payload.qs ? (0, _encode.obj)(payload.qs, agentRuntime.maxBytes) : '';
131
+ let url = "".concat(this.getScheme(), "://").concat(info.errorBeacon).concat(endpoint !== 'rum' ? "/".concat(endpoint) : '', "/1/").concat(info.licenseKey);
132
+ if (customUrl) url = customUrl;
133
+ if (raw) url = "".concat(this.getScheme(), "://").concat(info.errorBeacon, "/").concat(endpoint);
134
+ const baseParams = !raw && includeBaseParams ? this.baseQueryString() : '';
135
+ let payloadParams = (0, _encode.obj)(qs, agentRuntime.maxBytes);
147
136
  if (!submitMethod) {
148
- submitMethod = getSubmitMethod(endpoint, opts);
137
+ submitMethod = submitData.getSubmitMethod({
138
+ isFinalHarvest: opts.unload
139
+ });
140
+ }
141
+ if (baseParams === '' && payloadParams.startsWith('&')) {
142
+ payloadParams = payloadParams.substring(1);
149
143
  }
150
- var method = submitMethod.method;
151
- var useBody = submitMethod.useBody;
152
- var body;
153
- var fullUrl = "".concat(url, "?").concat(baseParams).concat(payloadParams);
154
- const gzip = payload?.qs?.content_encoding === 'gzip';
144
+ const fullUrl = "".concat(url, "?").concat(baseParams).concat(payloadParams);
145
+ const gzip = qs.content_encoding === 'gzip';
155
146
  if (!gzip) {
156
- if (useBody && endpoint === 'events') {
157
- body = payload.body.e;
158
- } else if (useBody) {
159
- body = (0, _stringify.stringify)(payload.body);
147
+ if (endpoint === 'events') {
148
+ body = body.e;
160
149
  } else {
161
- fullUrl = fullUrl + (0, _encode.obj)(payload.body, agentRuntime.maxBytes);
150
+ body = (0, _stringify.stringify)(body);
162
151
  }
163
- } else body = payload.body;
152
+ }
153
+ if (!body || body.length === 0 || body === '{}' || body === '[]') {
154
+ // If body is null, undefined, or an empty object or array, send an empty string instead
155
+ body = '';
156
+ }
164
157
 
165
158
  // Get bytes harvested per endpoint as a supportability metric. See metrics aggregator (on unload).
166
159
  agentRuntime.bytesSent[endpoint] = (agentRuntime.bytesSent[endpoint] || 0) + body?.length || 0;
@@ -172,122 +165,148 @@ class Harvest extends _sharedContext.SharedContext {
172
165
  value: 'text/plain'
173
166
  });
174
167
 
175
- /* Since workers don't support sendBeacon right now, or Image(), they can only use XHR method.
168
+ /* Since workers don't support sendBeacon right now, they can only use XHR method.
176
169
  Because they still do permit synch XHR, the idea is that at final harvest time (worker is closing),
177
- we just make a BLOCKING request--trivial impact--with the remaining data as a temp fill-in for sendBeacon. */
178
-
179
- var result = method({
170
+ we just make a BLOCKING request--trivial impact--with the remaining data as a temp fill-in for sendBeacon.
171
+ Following the removal of img-element method, IE will also use sync XHR on page dismissal to ensure final analytics are sent. */
172
+ let result = submitMethod({
180
173
  url: fullUrl,
181
174
  body,
182
- sync: opts.unload && _globalScope.isWorkerScope,
175
+ sync: opts.unload && (_runtime.isWorkerScope || _runtime.isIE),
183
176
  headers
184
177
  });
185
- if (cbFinished && method === _submitData.submitData.xhr) {
186
- var xhr = result;
187
- xhr.addEventListener('load', function () {
188
- var result = {
178
+ if (!opts.unload && cbFinished && submitMethod === submitData.xhr) {
179
+ const harvestScope = this;
180
+ result.addEventListener('load', function () {
181
+ // `this` refers to the XHR object in this scope, do not change this to a fat arrow
182
+ const cbResult = {
189
183
  sent: true,
190
184
  status: this.status
191
185
  };
192
186
  if (this.status === 429) {
193
- result.retry = true;
194
- result.delay = this.tooManyRequestsDelay;
187
+ cbResult.retry = true;
188
+ cbResult.delay = harvestScope.tooManyRequestsDelay;
195
189
  } else if (this.status === 408 || this.status === 500 || this.status === 503) {
196
- result.retry = true;
190
+ cbResult.retry = true;
197
191
  }
198
192
  if (opts.needResponse) {
199
- result.responseText = this.responseText;
193
+ cbResult.responseText = this.responseText;
200
194
  }
201
- cbFinished(result);
195
+ cbFinished(cbResult);
202
196
  }, (0, _eventListenerOpts.eventListenerOpts)(false));
203
197
  }
204
198
 
205
199
  // if beacon request failed, retry with an alternative method -- will not happen for workers
206
- if (!result && method === _submitData.submitData.beacon) {
207
- method = _submitData.submitData.img;
208
- result = method({
209
- url: fullUrl + (0, _encode.obj)(payload.body, agentRuntime.maxBytes)
210
- });
200
+ if (!result && submitMethod === submitData.beacon) {
201
+ // browsers that support sendBeacon also support fetch with keepalive - IE will not retry unload calls
202
+ submitMethod = submitData.fetchKeepAlive;
203
+ try {
204
+ submitMethod({
205
+ url: fullUrl,
206
+ body,
207
+ headers
208
+ });
209
+ } catch (e) {
210
+ // Ignore error in final harvest
211
+ } finally {
212
+ result = true;
213
+ }
211
214
  }
212
215
  return result;
213
216
  }
214
217
 
215
218
  // The stuff that gets sent every time.
216
219
  baseQueryString() {
217
- var runtime = (0, _config.getRuntime)(this.sharedContext.agentIdentifier);
218
- var info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
219
- var location = (0, _cleanUrl.cleanURL)((0, _location.getLocation)());
220
- var ref = this.obfuscator.shouldObfuscate() ? this.obfuscator.obfuscateString(location) : location;
220
+ const runtime = (0, _config.getRuntime)(this.sharedContext.agentIdentifier);
221
+ const info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
222
+ const location = (0, _cleanUrl.cleanURL)((0, _location.getLocation)());
223
+ const ref = this.obfuscator.shouldObfuscate() ? this.obfuscator.obfuscateString(location) : location;
221
224
  return ['a=' + info.applicationID, (0, _encode.param)('sa', info.sa ? '' + info.sa : ''), (0, _encode.param)('v', _env.VERSION), transactionNameParam(info), (0, _encode.param)('ct', runtime.customTransaction), '&rst=' + (0, _now.now)(), '&ck=0',
222
225
  // ck param DEPRECATED - still expected by backend
223
226
  '&s=' + (runtime.session?.state.value || '0'),
224
227
  // the 0 id encaps all untrackable and default traffic
225
228
  (0, _encode.param)('ref', ref), (0, _encode.param)('ptid', runtime.ptid ? '' + runtime.ptid : '')].join('');
226
229
  }
227
- createPayload(type, options) {
228
- var makeBody = createAccumulator();
229
- var makeQueryString = createAccumulator();
230
- var listeners = this._events[type] && this._events[type] || [];
231
- for (var i = 0; i < listeners.length; i++) {
232
- var singlePayload = listeners[i](options);
233
- if (!singlePayload) continue;
234
- if (singlePayload.body) (0, _mapOwn.mapOwn)(singlePayload.body, makeBody);
235
- if (singlePayload.qs) (0, _mapOwn.mapOwn)(singlePayload.qs, makeQueryString);
230
+
231
+ /**
232
+ * Calls and accumulates data from registered harvesting functions based on
233
+ * the endpoint being harvested.
234
+ * @param {HarvestEndpointIdentifier} endpoint BAM endpoint identifier.
235
+ * @param {FeatureHarvestCallbackOptions} options Options to be passed to the
236
+ * feature harvest listener callback.
237
+ * @returns {HarvestPayload} Payload object to transmit to the bam endpoint.
238
+ */
239
+ createPayload(endpoint, options) {
240
+ const listeners = this._events[endpoint];
241
+ const payload = {
242
+ body: {},
243
+ qs: {}
244
+ };
245
+ if (Array.isArray(listeners) && listeners.length > 0) {
246
+ for (let i = 0; i < listeners.length; i++) {
247
+ const singlePayload = listeners[i](options);
248
+ if (singlePayload) {
249
+ payload.body = {
250
+ ...payload.body,
251
+ ...(singlePayload.body || {})
252
+ };
253
+ payload.qs = {
254
+ ...payload.qs,
255
+ ...(singlePayload.qs || {})
256
+ };
257
+ }
258
+ }
236
259
  }
260
+ return payload;
261
+ }
262
+
263
+ /**
264
+ * Cleans and returns a payload object containing a body and qs
265
+ * object with key/value pairs. KV pairs where the value is null,
266
+ * undefined, or an empty string are removed to save on transmission
267
+ * size.
268
+ * @param {HarvestPayload} payload Payload to be sent to the endpoint.
269
+ * @returns {HarvestPayload} Cleaned payload payload to be sent to the endpoint.
270
+ */
271
+ cleanPayload() {
272
+ let payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
273
+ const clean = input => {
274
+ if (typeof Uint8Array !== 'undefined' && input instanceof Uint8Array) {
275
+ return input.length > 0 ? input : null;
276
+ }
277
+ return Object.entries(input || {}).reduce((accumulator, _ref2) => {
278
+ let [key, value] = _ref2;
279
+ if (typeof value === 'number' || typeof value === 'string' && value.length > 0 || typeof value === 'object' && Object.keys(value || {}).length > 0) {
280
+ accumulator[key] = value;
281
+ }
282
+ return accumulator;
283
+ }, {});
284
+ };
237
285
  return {
238
- body: makeBody(),
239
- qs: makeQueryString()
286
+ body: clean(payload.body),
287
+ qs: clean(payload.qs)
240
288
  };
241
289
  }
242
- on(type, listener) {
243
- var listeners = this._events[type] || (this._events[type] = []);
244
- listeners.push(listener);
245
- }
246
- resetListeners() {
247
- (0, _mapOwn.mapOwn)(this._events, key => {
248
- this._events[key] = [];
249
- });
250
- }
251
- }
252
- exports.Harvest = Harvest;
253
- function getSubmitMethod(endpoint, opts) {
254
- opts = opts || {};
255
- var method;
256
- var useBody;
257
- if (opts.unload && _globalScope.isBrowserScope) {
258
- // all the features' final harvest; neither methods work outside window context
259
- useBody = haveSendBeacon;
260
- method = haveSendBeacon ? _submitData.submitData.beacon : _submitData.submitData.img; // really only IE doesn't have Beacon API for web browsers
261
- } else {
262
- // `submitData.beacon` was removed, there is an upper limit to the
263
- // number of data allowed before it starts failing, so we save it only for page unloading
264
- useBody = true;
265
- method = _submitData.submitData.xhr;
290
+
291
+ /**
292
+ * Registers a function to be called when harvesting is triggered for a specific
293
+ * endpoint.
294
+ * @param {HarvestEndpointIdentifier} endpoint
295
+ * @param {FeatureHarvestCallback} listener
296
+ */
297
+ on(endpoint, listener) {
298
+ if (!Array.isArray(this._events[endpoint])) {
299
+ this._events[endpoint] = [];
300
+ }
301
+ this._events[endpoint].push(listener);
266
302
  }
267
- return {
268
- method: method,
269
- useBody: useBody
270
- };
271
303
  }
272
304
 
273
305
  // Constructs the transaction name param for the beacon URL.
274
306
  // Prefers the obfuscated transaction name over the plain text.
275
307
  // Falls back to making up a name.
308
+ exports.Harvest = Harvest;
276
309
  function transactionNameParam(info) {
277
310
  if (info.transactionName) return (0, _encode.param)('to', info.transactionName);
278
311
  return (0, _encode.param)('t', info.tNamePlain || 'Unnamed Transaction');
279
- }
280
-
281
- // returns a function that can be called to accumulate values to a single object
282
- // when the function is called without parameters, then the accumulator is returned
283
- function createAccumulator() {
284
- var accumulator = {};
285
- var hasData = false;
286
- return function (key, val) {
287
- if (val !== null && val !== undefined && val.toString()?.length) {
288
- accumulator[key] = val;
289
- hasData = true;
290
- }
291
- if (hasData) return accumulator;
292
- };
293
312
  }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.unused = void 0;
7
+ /**
8
+ * @file Contains types related to harvesting data.
9
+ * @copyright 2023 New Relic Corporation. All rights reserved.
10
+ * @license Apache-2.0
11
+ */
12
+
13
+ /**
14
+ * @typedef {'rum'|'jserrors'|'events'|'ins'|'resources'|'blob'} HarvestEndpointIdentifier
15
+ */
16
+
17
+ /**
18
+ * @typedef {object} HarvestPayload
19
+ * @property {object} qs Map of values that should be sent as part of the request query string.
20
+ * @property {object} body Map of values that should be sent as the body of the request.
21
+ * @property {string} body.e Special case of body used for browser interactions.
22
+ */
23
+
24
+ /**
25
+ * @typedef {object} FeatureHarvestCallbackOptions Options for aggregating data for harvesting.
26
+ * @property {boolean} options.retry Indicates if the feature should store the aggregated
27
+ * data in anticipation of a possible need to retry the transmission.
28
+ */
29
+
30
+ /**
31
+ * @callback FeatureHarvestCallback
32
+ * @param {FeatureHarvestCallbackOptions} options Options for aggregating data for harvesting.
33
+ * @returns {HarvestPayload} Payload of data to transmit to bam endpoint.
34
+ */
35
+
36
+ /**
37
+ * @typedef {object} NetworkSendSpec
38
+ * @property {HarvestEndpointIdentifier} endpoint The endpoint to use (jserrors, events, resources etc.)
39
+ * @property {HarvestPayload} payload Object representing payload.
40
+ * @property {object} opts Additional options for sending data
41
+ * @property {boolean} opts.needResponse Specify whether the caller expects a response data.
42
+ * @property {boolean} opts.unload Specify whether the call is a final harvest during page unload.
43
+ * @property {boolean} opts.sendEmptyBody Specify whether the call should be made even if the body is empty. Useful for rum calls.
44
+ * @property {boolean} opts.retry Indicates if the feature should store the aggregated data in anticipation of a possible need to
45
+ * retry the transmission.
46
+ * @property {import('../util/submit-data.js').NetworkMethods} submitMethod The network method to use {@link ../util/submit-data.js}
47
+ * @property {string} customUrl Override the beacon url the data is sent to; must include protocol if defined
48
+ * @property {boolean} raw If true, disables adding the license key to the url
49
+ * @property {boolean} includeBaseParams Enables the use of base query parameters in the beacon url
50
+ */
51
+
52
+ /* istanbul ignore next */
53
+ const unused = {};
54
+ exports.unused = unused;
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.id = id;
7
7
  var _getOrSet = require("../util/get-or-set");
8
- var _globalScope = require("../util/global-scope");
8
+ var _runtime = require("../constants/runtime");
9
9
  /*
10
10
  * Copyright 2020 New Relic Corporation. All rights reserved.
11
11
  * SPDX-License-Identifier: Apache-2.0
@@ -31,7 +31,7 @@ function id(obj) {
31
31
  // We can only tag objects, functions, and arrays with ids.
32
32
  // For all primitive values we instead return -1.
33
33
  if (!obj || !(type === 'object' || type === 'function')) return -1;
34
- if (obj === _globalScope.globalScope) return 0;
34
+ if (obj === _runtime.globalScope) return 0;
35
35
  return (0, _getOrSet.getOrSet)(obj, prop, function () {
36
36
  return index++;
37
37
  });
@@ -7,7 +7,7 @@ exports.generateRandomHexString = generateRandomHexString;
7
7
  exports.generateSpanId = generateSpanId;
8
8
  exports.generateTraceId = generateTraceId;
9
9
  exports.generateUuid = generateUuid;
10
- var _globalScope = require("../util/global-scope");
10
+ var _runtime = require("../constants/runtime");
11
11
  /*
12
12
  * Copyright 2020 New Relic Corporation. All rights reserved.
13
13
  * SPDX-License-Identifier: Apache-2.0
@@ -46,7 +46,7 @@ function getRandomValue(valueTable, tableIndex) {
46
46
  * @returns {string} uuid version 4 string
47
47
  */
48
48
  function generateUuid() {
49
- const crypto = _globalScope.globalScope?.crypto || _globalScope.globalScope?.msCrypto;
49
+ const crypto = _runtime.globalScope?.crypto || _runtime.globalScope?.msCrypto;
50
50
  let randomValueTable;
51
51
  let randomValueIndex = 0;
52
52
  if (crypto && crypto.getRandomValues) {
@@ -73,7 +73,7 @@ function generateUuid() {
73
73
  * @returns {string} generated hex string
74
74
  */
75
75
  function generateRandomHexString(length) {
76
- const crypto = _globalScope.globalScope?.crypto || _globalScope.globalScope?.msCrypto;
76
+ const crypto = _runtime.globalScope?.crypto || _runtime.globalScope?.msCrypto;
77
77
  let randomValueTable;
78
78
  let randomValueIndex = 0;
79
79
  if (crypto && crypto.getRandomValues) {
@@ -9,7 +9,7 @@ var _console = require("../util/console");
9
9
  var _stringify = require("../util/stringify");
10
10
  var _contextualEe = require("../event-emitter/contextual-ee");
11
11
  var _timer = require("../timer/timer");
12
- var _globalScope = require("../util/global-scope");
12
+ var _runtime = require("../constants/runtime");
13
13
  var _constants = require("./constants");
14
14
  var _interactionTimer = require("../timer/interaction-timer");
15
15
  var _wrap = require("../wrap");
@@ -274,7 +274,7 @@ class SessionEntity {
274
274
  return Date.now() + futureMs;
275
275
  }
276
276
  syncCustomAttribute(key, value) {
277
- if (!_globalScope.isBrowserScope) return;
277
+ if (!_runtime.isBrowserScope) return;
278
278
  if (value === null) {
279
279
  const curr = this.read();
280
280
  if (curr.custom) {
@@ -7,7 +7,7 @@ exports.InteractionTimer = void 0;
7
7
  var _timer = require("./timer");
8
8
  var _pageVisibility = require("../window/page-visibility");
9
9
  var _invoke = require("../util/invoke");
10
- var _globalScope = require("../util/global-scope");
10
+ var _runtime = require("../constants/runtime");
11
11
  class InteractionTimer extends _timer.Timer {
12
12
  constructor(opts, ms) {
13
13
  super(opts, ms);
@@ -25,7 +25,7 @@ class InteractionTimer extends _timer.Timer {
25
25
  } catch (e) {
26
26
  // this try-catch can be removed when IE11 is completely unsupported & gone
27
27
  }
28
- if (_globalScope.isBrowserScope && opts.ee) {
28
+ if (_runtime.isBrowserScope && opts.ee) {
29
29
  if (opts.ee) {
30
30
  const debouncedRefresh = (0, _invoke.debounce)(this.refresh.bind(this), 500, {
31
31
  leading: true
@@ -4,23 +4,22 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.subscribeToEOL = subscribeToEOL;
7
- var _firefoxVersion = require("../browser-version/firefox-version");
8
7
  var _eventListenerOpts = require("../event-listener/event-listener-opts");
9
8
  var _invoke = require("../util/invoke");
10
- var _globalScope = require("../util/global-scope");
9
+ var _runtime = require("../constants/runtime");
11
10
  var _pageVisibility = require("../window/page-visibility");
12
11
  /*
13
12
  * Copyright 2020 New Relic Corporation. All rights reserved.
14
13
  * SPDX-License-Identifier: Apache-2.0
15
14
  */
16
15
 
17
- if (_globalScope.isWorkerScope) {
18
- _globalScope.globalScope.cleanupTasks = []; // create new list on WorkerGlobalScope to track funcs to run before exiting thread
16
+ if (_runtime.isWorkerScope) {
17
+ _runtime.globalScope.cleanupTasks = []; // create new list on WorkerGlobalScope to track funcs to run before exiting thread
19
18
 
20
- const origClose = _globalScope.globalScope.close;
21
- _globalScope.globalScope.close = () => {
19
+ const origClose = _runtime.globalScope.close;
20
+ _runtime.globalScope.close = () => {
22
21
  // on worker's EoL signal, execute all "listeners", e.g. final harvests
23
- for (let task of _globalScope.globalScope.cleanupTasks) {
22
+ for (let task of _runtime.globalScope.cleanupTasks) {
24
23
  task();
25
24
  }
26
25
  origClose();
@@ -34,7 +33,7 @@ if (_globalScope.isWorkerScope) {
34
33
  * @param {boolean} allowBFCache - (temp) feature flag to gate new v1222 BFC support
35
34
  */
36
35
  function subscribeToEOL(cb, allowBFCache) {
37
- if (_globalScope.isBrowserScope) {
36
+ if (_runtime.isBrowserScope) {
38
37
  if (allowBFCache) {
39
38
  (0, _pageVisibility.subscribeToVisibilityChange)(cb, true); // when user switches tab or hides window, esp. mobile scenario
40
39
  (0, _eventListenerOpts.windowAddEventListener)('pagehide', cb); // when user navigates away, and because safari iOS v14.4- doesn't fully support vis change
@@ -55,15 +54,15 @@ function subscribeToEOL(cb, allowBFCache) {
55
54
  // pagehide or unload, whichever comes first, but in Firefox, we need to avoid
56
55
  // attempting to submit from pagehide to ensure that we don't slow down loading
57
56
  // of the next page.
58
- if (!_firefoxVersion.ffVersion || navigator.sendBeacon) {
57
+ if (!_runtime.ffVersion || navigator.sendBeacon) {
59
58
  (0, _eventListenerOpts.windowAddEventListener)('pagehide', oneCall);
60
59
  } else {
61
60
  (0, _eventListenerOpts.windowAddEventListener)('beforeunload', oneCall);
62
61
  }
63
62
  (0, _eventListenerOpts.windowAddEventListener)('unload', oneCall);
64
63
  }
65
- } else if (_globalScope.isWorkerScope) {
66
- _globalScope.globalScope.cleanupTasks.push(cb); // close() should run these tasks before quitting thread
64
+ } else if (_runtime.isWorkerScope) {
65
+ _runtime.globalScope.cleanupTasks.push(cb); // close() should run these tasks before quitting thread
67
66
  }
68
67
  // By default (for other env), this fn has no effect.
69
68
  }
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.canonicalizeUrl = canonicalizeUrl;
7
- var _globalScope = require("../util/global-scope");
7
+ var _runtime = require("../constants/runtime");
8
8
  var _cleanUrl = require("./clean-url");
9
9
  /*
10
10
  * Copyright 2020 New Relic Corporation. All rights reserved.
@@ -21,7 +21,7 @@ var _cleanUrl = require("./clean-url");
21
21
  function canonicalizeUrl(url) {
22
22
  if (typeof url !== 'string') return '';
23
23
  const cleanedUrl = (0, _cleanUrl.cleanURL)(url);
24
- const cleanedGlobalScopeUrl = (0, _cleanUrl.cleanURL)(_globalScope.initialLocation);
24
+ const cleanedGlobalScopeUrl = (0, _cleanUrl.cleanURL)(_runtime.initialLocation);
25
25
 
26
26
  // If the URL matches the origin URL of the loader, we assume it originated within an inline script.
27
27
  if (cleanedUrl === cleanedGlobalScopeUrl) {