@newrelic/browser-agent 1.295.0-rc.4 → 1.295.0-rc.6

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 (44) hide show
  1. package/dist/cjs/common/constants/env.cdn.js +1 -1
  2. package/dist/cjs/common/constants/env.npm.js +1 -1
  3. package/dist/cjs/common/wrap/wrap-events.js +2 -1
  4. package/dist/cjs/features/session_trace/aggregate/index.js +20 -21
  5. package/dist/cjs/features/session_trace/aggregate/trace/storage.js +198 -185
  6. package/dist/cjs/features/session_trace/aggregate/trace/utils.js +41 -0
  7. package/dist/cjs/features/session_trace/constants.js +3 -2
  8. package/dist/cjs/features/utils/aggregate-base.js +1 -2
  9. package/dist/cjs/features/utils/event-buffer.js +34 -3
  10. package/dist/cjs/features/utils/event-store-manager.js +18 -1
  11. package/dist/esm/common/constants/env.cdn.js +1 -1
  12. package/dist/esm/common/constants/env.npm.js +1 -1
  13. package/dist/esm/common/wrap/wrap-events.js +2 -1
  14. package/dist/esm/features/session_trace/aggregate/index.js +21 -21
  15. package/dist/esm/features/session_trace/aggregate/trace/storage.js +199 -186
  16. package/dist/esm/features/session_trace/aggregate/trace/utils.js +34 -0
  17. package/dist/esm/features/session_trace/constants.js +2 -1
  18. package/dist/esm/features/utils/aggregate-base.js +1 -2
  19. package/dist/esm/features/utils/event-buffer.js +34 -3
  20. package/dist/esm/features/utils/event-store-manager.js +18 -1
  21. package/dist/tsconfig.tsbuildinfo +1 -1
  22. package/dist/types/common/wrap/wrap-events.d.ts.map +1 -1
  23. package/dist/types/features/session_trace/aggregate/index.d.ts +5 -10
  24. package/dist/types/features/session_trace/aggregate/index.d.ts.map +1 -1
  25. package/dist/types/features/session_trace/aggregate/trace/storage.d.ts +81 -39
  26. package/dist/types/features/session_trace/aggregate/trace/storage.d.ts.map +1 -1
  27. package/dist/types/features/session_trace/aggregate/trace/utils.d.ts +7 -0
  28. package/dist/types/features/session_trace/aggregate/trace/utils.d.ts.map +1 -0
  29. package/dist/types/features/session_trace/constants.d.ts +1 -0
  30. package/dist/types/features/session_trace/constants.d.ts.map +1 -1
  31. package/dist/types/features/utils/aggregate-base.d.ts.map +1 -1
  32. package/dist/types/features/utils/event-buffer.d.ts +18 -1
  33. package/dist/types/features/utils/event-buffer.d.ts.map +1 -1
  34. package/dist/types/features/utils/event-store-manager.d.ts +12 -0
  35. package/dist/types/features/utils/event-store-manager.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/src/common/wrap/wrap-events.js +2 -1
  38. package/src/features/session_trace/aggregate/index.js +23 -15
  39. package/src/features/session_trace/aggregate/trace/storage.js +186 -189
  40. package/src/features/session_trace/aggregate/trace/utils.js +35 -0
  41. package/src/features/session_trace/constants.js +1 -0
  42. package/src/features/utils/aggregate-base.js +1 -2
  43. package/src/features/utils/event-buffer.js +35 -3
  44. package/src/features/utils/event-store-manager.js +18 -1
@@ -1 +1 @@
1
- {"root":["../src/index.js","../src/cdn/experimental.js","../src/cdn/lite.js","../src/cdn/pro.js","../src/cdn/spa.js","../src/common/aggregate/aggregator.js","../src/common/aggregate/event-aggregator.js","../src/common/config/configurable.js","../src/common/config/info.js","../src/common/config/init-types.js","../src/common/config/init.js","../src/common/config/loader-config.js","../src/common/config/runtime.js","../src/common/constants/agent-constants.js","../src/common/constants/env.cdn.js","../src/common/constants/env.js","../src/common/constants/env.npm.js","../src/common/constants/runtime.js","../src/common/constants/shared-channel.js","../src/common/deny-list/deny-list.js","../src/common/dispatch/global-event.js","../src/common/dom/iframe.js","../src/common/dom/query-selector.js","../src/common/dom/selector-path.js","../src/common/drain/drain.js","../src/common/event-emitter/contextual-ee.js","../src/common/event-emitter/event-context.js","../src/common/event-emitter/handle.js","../src/common/event-emitter/register-handler.js","../src/common/event-listener/event-listener-opts.js","../src/common/harvest/harvester.js","../src/common/harvest/types.js","../src/common/ids/bundle-id.js","../src/common/ids/id.js","../src/common/ids/unique-id.js","../src/common/serialize/bel-serializer.js","../src/common/session/constants.js","../src/common/session/session-entity.js","../src/common/storage/local-storage.js","../src/common/timer/interaction-timer.js","../src/common/timer/timer.js","../src/common/timing/nav-timing.js","../src/common/timing/now.js","../src/common/timing/time-keeper.js","../src/common/unload/eol.js","../src/common/url/canonicalize-url.js","../src/common/url/clean-url.js","../src/common/url/encode.js","../src/common/url/location.js","../src/common/url/parse-url.js","../src/common/url/protocol.js","../src/common/util/attribute-size.js","../src/common/util/console.js","../src/common/util/data-size.js","../src/common/util/event-origin.js","../src/common/util/feature-flags.js","../src/common/util/get-or-set.js","../src/common/util/invoke.js","../src/common/util/monkey-patched.js","../src/common/util/obfuscate.js","../src/common/util/stringify.js","../src/common/util/submit-data.js","../src/common/util/target.js","../src/common/util/text.js","../src/common/util/traverse.js","../src/common/util/type-check.js","../src/common/vitals/constants.js","../src/common/vitals/cumulative-layout-shift.js","../src/common/vitals/first-contentful-paint.js","../src/common/vitals/first-paint.js","../src/common/vitals/interaction-to-next-paint.js","../src/common/vitals/largest-contentful-paint.js","../src/common/vitals/time-to-first-byte.js","../src/common/vitals/vital-metric.js","../src/common/window/load.js","../src/common/window/nreum.js","../src/common/window/page-visibility.js","../src/common/wrap/wrap-events.js","../src/common/wrap/wrap-fetch.js","../src/common/wrap/wrap-function.js","../src/common/wrap/wrap-history.js","../src/common/wrap/wrap-jsonp.js","../src/common/wrap/wrap-logger.js","../src/common/wrap/wrap-mutation.js","../src/common/wrap/wrap-promise.js","../src/common/wrap/wrap-timer.js","../src/common/wrap/wrap-websocket.js","../src/common/wrap/wrap-xhr.js","../src/features/ajax/constants.js","../src/features/ajax/index.js","../src/features/ajax/aggregate/gql.js","../src/features/ajax/aggregate/index.js","../src/features/ajax/instrument/distributed-tracing.js","../src/features/ajax/instrument/index.js","../src/features/ajax/instrument/response-size.js","../src/features/generic_events/constants.js","../src/features/generic_events/index.js","../src/features/generic_events/aggregate/index.js","../src/features/generic_events/aggregate/user-actions/aggregated-user-action.js","../src/features/generic_events/aggregate/user-actions/user-actions-aggregator.js","../src/features/generic_events/instrument/index.js","../src/features/jserrors/constants.js","../src/features/jserrors/index.js","../src/features/jserrors/aggregate/canonical-function-name.js","../src/features/jserrors/aggregate/cause-string.js","../src/features/jserrors/aggregate/compute-stack-trace.js","../src/features/jserrors/aggregate/format-stack-trace.js","../src/features/jserrors/aggregate/index.js","../src/features/jserrors/aggregate/internal-errors.js","../src/features/jserrors/aggregate/string-hash-code.js","../src/features/jserrors/instrument/index.js","../src/features/jserrors/shared/cast-error.js","../src/features/jserrors/shared/uncaught-error.js","../src/features/logging/constants.js","../src/features/logging/index.js","../src/features/logging/aggregate/index.js","../src/features/logging/instrument/index.js","../src/features/logging/shared/log.js","../src/features/logging/shared/utils.js","../src/features/metrics/constants.js","../src/features/metrics/index.js","../src/features/metrics/aggregate/framework-detection.js","../src/features/metrics/aggregate/index.js","../src/features/metrics/aggregate/websocket-detection.js","../src/features/metrics/instrument/index.js","../src/features/page_action/constants.js","../src/features/page_action/index.js","../src/features/page_action/instrument/index.js","../src/features/page_view_event/constants.js","../src/features/page_view_event/index.js","../src/features/page_view_event/aggregate/index.js","../src/features/page_view_event/aggregate/initialized-features.js","../src/features/page_view_event/instrument/index.js","../src/features/page_view_timing/constants.js","../src/features/page_view_timing/index.js","../src/features/page_view_timing/aggregate/index.js","../src/features/page_view_timing/instrument/index.js","../src/features/session_replay/constants.js","../src/features/session_replay/index.js","../src/features/session_replay/aggregate/index.js","../src/features/session_replay/instrument/index.js","../src/features/session_replay/shared/recorder-events.js","../src/features/session_replay/shared/recorder.js","../src/features/session_replay/shared/stylesheet-evaluator.js","../src/features/session_replay/shared/utils.js","../src/features/session_trace/constants.js","../src/features/session_trace/index.js","../src/features/session_trace/aggregate/index.js","../src/features/session_trace/aggregate/trace/node.js","../src/features/session_trace/aggregate/trace/storage.js","../src/features/session_trace/instrument/index.js","../src/features/soft_navigations/constants.js","../src/features/soft_navigations/index.js","../src/features/soft_navigations/aggregate/ajax-node.js","../src/features/soft_navigations/aggregate/bel-node.js","../src/features/soft_navigations/aggregate/index.js","../src/features/soft_navigations/aggregate/initial-page-load-interaction.js","../src/features/soft_navigations/aggregate/interaction.js","../src/features/soft_navigations/instrument/index.js","../src/features/spa/constants.js","../src/features/spa/index.js","../src/features/spa/aggregate/index.js","../src/features/spa/aggregate/interaction-node.js","../src/features/spa/aggregate/interaction.js","../src/features/spa/aggregate/serializer.js","../src/features/spa/instrument/index.js","../src/features/utils/agent-session.js","../src/features/utils/aggregate-base.js","../src/features/utils/entity-manager.js","../src/features/utils/event-buffer.js","../src/features/utils/event-store-manager.js","../src/features/utils/feature-base.js","../src/features/utils/feature-gates.js","../src/features/utils/instrument-base.js","../src/features/utils/nr1-debugger.js","../src/interfaces/registered-entity.js","../src/loaders/agent-base.js","../src/loaders/agent.js","../src/loaders/api-base.js","../src/loaders/browser-agent.js","../src/loaders/micro-agent-base.js","../src/loaders/micro-agent.js","../src/loaders/api/addPageAction.js","../src/loaders/api/addRelease.js","../src/loaders/api/addToTrace.js","../src/loaders/api/constants.js","../src/loaders/api/finished.js","../src/loaders/api/interaction-types.js","../src/loaders/api/interaction.js","../src/loaders/api/log.js","../src/loaders/api/measure.js","../src/loaders/api/noticeError.js","../src/loaders/api/pauseReplay.js","../src/loaders/api/recordCustomEvent.js","../src/loaders/api/recordReplay.js","../src/loaders/api/register-api-types.js","../src/loaders/api/register-api.js","../src/loaders/api/register.js","../src/loaders/api/setApplicationVersion.js","../src/loaders/api/setCustomAttribute.js","../src/loaders/api/setErrorHandler.js","../src/loaders/api/setPageViewName.js","../src/loaders/api/setUserId.js","../src/loaders/api/sharedHandlers.js","../src/loaders/api/start.js","../src/loaders/api/topLevelCallers.js","../src/loaders/api/wrapLogger.js","../src/loaders/configure/configure.js","../src/loaders/configure/nonce.js","../src/loaders/configure/public-path.js","../src/loaders/features/enabled-features.js","../src/loaders/features/featureDependencies.js","../src/loaders/features/features.js"],"version":"5.7.3"}
1
+ {"root":["../src/index.js","../src/cdn/experimental.js","../src/cdn/lite.js","../src/cdn/pro.js","../src/cdn/spa.js","../src/common/aggregate/aggregator.js","../src/common/aggregate/event-aggregator.js","../src/common/config/configurable.js","../src/common/config/info.js","../src/common/config/init-types.js","../src/common/config/init.js","../src/common/config/loader-config.js","../src/common/config/runtime.js","../src/common/constants/agent-constants.js","../src/common/constants/env.cdn.js","../src/common/constants/env.js","../src/common/constants/env.npm.js","../src/common/constants/runtime.js","../src/common/constants/shared-channel.js","../src/common/deny-list/deny-list.js","../src/common/dispatch/global-event.js","../src/common/dom/iframe.js","../src/common/dom/query-selector.js","../src/common/dom/selector-path.js","../src/common/drain/drain.js","../src/common/event-emitter/contextual-ee.js","../src/common/event-emitter/event-context.js","../src/common/event-emitter/handle.js","../src/common/event-emitter/register-handler.js","../src/common/event-listener/event-listener-opts.js","../src/common/harvest/harvester.js","../src/common/harvest/types.js","../src/common/ids/bundle-id.js","../src/common/ids/id.js","../src/common/ids/unique-id.js","../src/common/serialize/bel-serializer.js","../src/common/session/constants.js","../src/common/session/session-entity.js","../src/common/storage/local-storage.js","../src/common/timer/interaction-timer.js","../src/common/timer/timer.js","../src/common/timing/nav-timing.js","../src/common/timing/now.js","../src/common/timing/time-keeper.js","../src/common/unload/eol.js","../src/common/url/canonicalize-url.js","../src/common/url/clean-url.js","../src/common/url/encode.js","../src/common/url/location.js","../src/common/url/parse-url.js","../src/common/url/protocol.js","../src/common/util/attribute-size.js","../src/common/util/console.js","../src/common/util/data-size.js","../src/common/util/event-origin.js","../src/common/util/feature-flags.js","../src/common/util/get-or-set.js","../src/common/util/invoke.js","../src/common/util/monkey-patched.js","../src/common/util/obfuscate.js","../src/common/util/stringify.js","../src/common/util/submit-data.js","../src/common/util/target.js","../src/common/util/text.js","../src/common/util/traverse.js","../src/common/util/type-check.js","../src/common/vitals/constants.js","../src/common/vitals/cumulative-layout-shift.js","../src/common/vitals/first-contentful-paint.js","../src/common/vitals/first-paint.js","../src/common/vitals/interaction-to-next-paint.js","../src/common/vitals/largest-contentful-paint.js","../src/common/vitals/time-to-first-byte.js","../src/common/vitals/vital-metric.js","../src/common/window/load.js","../src/common/window/nreum.js","../src/common/window/page-visibility.js","../src/common/wrap/wrap-events.js","../src/common/wrap/wrap-fetch.js","../src/common/wrap/wrap-function.js","../src/common/wrap/wrap-history.js","../src/common/wrap/wrap-jsonp.js","../src/common/wrap/wrap-logger.js","../src/common/wrap/wrap-mutation.js","../src/common/wrap/wrap-promise.js","../src/common/wrap/wrap-timer.js","../src/common/wrap/wrap-websocket.js","../src/common/wrap/wrap-xhr.js","../src/features/ajax/constants.js","../src/features/ajax/index.js","../src/features/ajax/aggregate/gql.js","../src/features/ajax/aggregate/index.js","../src/features/ajax/instrument/distributed-tracing.js","../src/features/ajax/instrument/index.js","../src/features/ajax/instrument/response-size.js","../src/features/generic_events/constants.js","../src/features/generic_events/index.js","../src/features/generic_events/aggregate/index.js","../src/features/generic_events/aggregate/user-actions/aggregated-user-action.js","../src/features/generic_events/aggregate/user-actions/user-actions-aggregator.js","../src/features/generic_events/instrument/index.js","../src/features/jserrors/constants.js","../src/features/jserrors/index.js","../src/features/jserrors/aggregate/canonical-function-name.js","../src/features/jserrors/aggregate/cause-string.js","../src/features/jserrors/aggregate/compute-stack-trace.js","../src/features/jserrors/aggregate/format-stack-trace.js","../src/features/jserrors/aggregate/index.js","../src/features/jserrors/aggregate/internal-errors.js","../src/features/jserrors/aggregate/string-hash-code.js","../src/features/jserrors/instrument/index.js","../src/features/jserrors/shared/cast-error.js","../src/features/jserrors/shared/uncaught-error.js","../src/features/logging/constants.js","../src/features/logging/index.js","../src/features/logging/aggregate/index.js","../src/features/logging/instrument/index.js","../src/features/logging/shared/log.js","../src/features/logging/shared/utils.js","../src/features/metrics/constants.js","../src/features/metrics/index.js","../src/features/metrics/aggregate/framework-detection.js","../src/features/metrics/aggregate/index.js","../src/features/metrics/aggregate/websocket-detection.js","../src/features/metrics/instrument/index.js","../src/features/page_action/constants.js","../src/features/page_action/index.js","../src/features/page_action/instrument/index.js","../src/features/page_view_event/constants.js","../src/features/page_view_event/index.js","../src/features/page_view_event/aggregate/index.js","../src/features/page_view_event/aggregate/initialized-features.js","../src/features/page_view_event/instrument/index.js","../src/features/page_view_timing/constants.js","../src/features/page_view_timing/index.js","../src/features/page_view_timing/aggregate/index.js","../src/features/page_view_timing/instrument/index.js","../src/features/session_replay/constants.js","../src/features/session_replay/index.js","../src/features/session_replay/aggregate/index.js","../src/features/session_replay/instrument/index.js","../src/features/session_replay/shared/recorder-events.js","../src/features/session_replay/shared/recorder.js","../src/features/session_replay/shared/stylesheet-evaluator.js","../src/features/session_replay/shared/utils.js","../src/features/session_trace/constants.js","../src/features/session_trace/index.js","../src/features/session_trace/aggregate/index.js","../src/features/session_trace/aggregate/trace/node.js","../src/features/session_trace/aggregate/trace/storage.js","../src/features/session_trace/aggregate/trace/utils.js","../src/features/session_trace/instrument/index.js","../src/features/soft_navigations/constants.js","../src/features/soft_navigations/index.js","../src/features/soft_navigations/aggregate/ajax-node.js","../src/features/soft_navigations/aggregate/bel-node.js","../src/features/soft_navigations/aggregate/index.js","../src/features/soft_navigations/aggregate/initial-page-load-interaction.js","../src/features/soft_navigations/aggregate/interaction.js","../src/features/soft_navigations/instrument/index.js","../src/features/spa/constants.js","../src/features/spa/index.js","../src/features/spa/aggregate/index.js","../src/features/spa/aggregate/interaction-node.js","../src/features/spa/aggregate/interaction.js","../src/features/spa/aggregate/serializer.js","../src/features/spa/instrument/index.js","../src/features/utils/agent-session.js","../src/features/utils/aggregate-base.js","../src/features/utils/entity-manager.js","../src/features/utils/event-buffer.js","../src/features/utils/event-store-manager.js","../src/features/utils/feature-base.js","../src/features/utils/feature-gates.js","../src/features/utils/instrument-base.js","../src/features/utils/nr1-debugger.js","../src/interfaces/registered-entity.js","../src/loaders/agent-base.js","../src/loaders/agent.js","../src/loaders/api-base.js","../src/loaders/browser-agent.js","../src/loaders/micro-agent-base.js","../src/loaders/micro-agent.js","../src/loaders/api/addPageAction.js","../src/loaders/api/addRelease.js","../src/loaders/api/addToTrace.js","../src/loaders/api/constants.js","../src/loaders/api/finished.js","../src/loaders/api/interaction-types.js","../src/loaders/api/interaction.js","../src/loaders/api/log.js","../src/loaders/api/measure.js","../src/loaders/api/noticeError.js","../src/loaders/api/pauseReplay.js","../src/loaders/api/recordCustomEvent.js","../src/loaders/api/recordReplay.js","../src/loaders/api/register-api-types.js","../src/loaders/api/register-api.js","../src/loaders/api/register.js","../src/loaders/api/setApplicationVersion.js","../src/loaders/api/setCustomAttribute.js","../src/loaders/api/setErrorHandler.js","../src/loaders/api/setPageViewName.js","../src/loaders/api/setUserId.js","../src/loaders/api/sharedHandlers.js","../src/loaders/api/start.js","../src/loaders/api/topLevelCallers.js","../src/loaders/api/wrapLogger.js","../src/loaders/configure/configure.js","../src/loaders/configure/nonce.js","../src/loaders/configure/public-path.js","../src/loaders/features/enabled-features.js","../src/loaders/features/featureDependencies.js","../src/loaders/features/features.js"],"version":"5.7.3"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-events.d.ts","sourceRoot":"","sources":["../../../../src/common/wrap/wrap-events.js"],"names":[],"mappings":"AAqBA;;;;;;GAMG;AACH,qCAJW,MAAM,GAEJ,MAAM,CAyDlB;AAeD;;;;;;GAMG;AACH,mCAJW,MAAM,GAEJ,MAAM,CAIlB"}
1
+ {"version":3,"file":"wrap-events.d.ts","sourceRoot":"","sources":["../../../../src/common/wrap/wrap-events.js"],"names":[],"mappings":"AAqBA;;;;;;GAMG;AACH,qCAJW,MAAM,GAEJ,MAAM,CA0DlB;AAeD;;;;;;GAMG;AACH,mCAJW,MAAM,GAEJ,MAAM,CAIlB"}
@@ -7,8 +7,8 @@ export class Aggregate extends AggregateBase {
7
7
  everHarvested: boolean;
8
8
  /** If the harvest module is harvesting */
9
9
  harvesting: boolean;
10
- /** TraceStorage is the mechanism that holds, normalizes and aggregates ST nodes. It will be accessed and purged when harvests occur */
11
- events: TraceStorage;
10
+ /** TraceStorage is a middleware that decides how to format data before passing events to `this.events` */
11
+ traceStorage: TraceStorage;
12
12
  /** Sets up event listeners, and initializes this module to run in the correct "mode". Can be triggered from a few places, but makes an effort to only set up listeners once */
13
13
  initialize(stMode: any, stEntitled: any, ignoreSession: any): void;
14
14
  initialized: boolean | undefined;
@@ -17,14 +17,8 @@ export class Aggregate extends AggregateBase {
17
17
  sessionId: any;
18
18
  mode: any;
19
19
  preHarvestChecks(): true | undefined;
20
- serializer({ stns }: {
21
- stns: any;
22
- }): Object | undefined;
23
- queryStringsBuilder({ stns, earliestTimeStamp, latestTimeStamp }: {
24
- stns: any;
25
- earliestTimeStamp: any;
26
- latestTimeStamp: any;
27
- }): {
20
+ serializer(stns: any): Object | undefined;
21
+ queryStringsBuilder(stns: any): {
28
22
  browser_monitoring_key: any;
29
23
  type: string;
30
24
  app_id: any;
@@ -36,6 +30,7 @@ export class Aggregate extends AggregateBase {
36
30
  switchToFull(): void;
37
31
  /** Stop running for the remainder of the page lifecycle */
38
32
  abort(code: any): void;
33
+ postHarvestCleanup(result: any): void;
39
34
  }
40
35
  import { AggregateBase } from '../../utils/aggregate-base';
41
36
  import { TraceStorage } from './trace/storage';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/session_trace/aggregate/index.js"],"names":[],"mappings":"AAkBA;IACE,2BAAiC;IAEjC,2BAgBC;IAZC,0GAA0G;IAC1G,cAAyB;IACzB,mIAAmI;IACnI,uBAA0B;IAC1B,0CAA0C;IAC1C,oBAAuB;IACvB,wIAAwI;IACxI,qBAAoC;IAOtC,gLAAgL;IAChL,mEA8DC;IAxDG,iCAAuB;IACvB,yJAAyJ;IACzJ,UAAsC;IACtC,eAA2D;IAyBD,UAAgE;IA8B9H,qCAUC;IAED;;2BAIC;IAED;;;;;;;;;;;MA6CC;IAED,8DAA8D;IAC9D,qBAUC;IAED,2DAA2D;IAC3D,uBAMC;CACF;8BAxL6B,4BAA4B;6BAC7B,iBAAiB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/session_trace/aggregate/index.js"],"names":[],"mappings":"AAiBA;IACE,2BAAiC;IAEjC,2BAgBC;IAZC,0GAA0G;IAC1G,cAAyB;IACzB,mIAAmI;IACnI,uBAA0B;IAC1B,0CAA0C;IAC1C,oBAAuB;IACvB,0GAA0G;IAC1G,2BAA0C;IAO5C,gLAAgL;IAChL,mEA8DC;IAxDG,iCAAuB;IACvB,yJAAyJ;IACzJ,UAAsC;IACtC,eAA2D;IAyBD,UAAgE;IA8B9H,qCAWC;IAED,0CAIC;IAED;;;;;;;MAgDC;IAED,8DAA8D;IAC9D,qBAUC;IAED,2DAA2D;IAC3D,uBAMC;IAED,sCAGC;CACF;8BAhM6B,4BAA4B;6BAC7B,iBAAiB"}
@@ -1,48 +1,90 @@
1
- /** The purpose of this class is to manage, normalize, and retrieve ST nodes as needed without polluting the main ST modules */
1
+ /** The purpose of this class is to manage, normalize, and drop various ST nodes as needed without polluting the main ST modules */
2
2
  export class TraceStorage {
3
3
  constructor(parent: any);
4
- nodeCount: number;
5
- trace: {};
6
- earliestTimeStamp: number;
7
- latestTimeStamp: number;
4
+ /** prevents duplication of event nodes by keeping a reference of each one seen per harvest cycle */
8
5
  prevStoredEvents: Set<any>;
9
6
  parent: any;
10
7
  /**
11
- * Trim the collection of nodes awaiting harvest such that those seen outside a certain span of time are discarded.
12
- * @param {number} lookbackDuration Past length of time until now for which we care about nodes, in milliseconds
13
- * @returns {number} However many nodes were discarded after trimming.
14
- */
15
- trimSTNs(lookbackDuration: number): number;
16
- /** Used by session trace's harvester to create the payload body. */
17
- takeSTNs(): {
18
- stns: any[];
19
- earliestTimeStamp: number;
20
- latestTimeStamp: number;
21
- };
22
- smearEvtsByOrigin(name: any): (byOrigin: any, evtNode: any) => any;
23
- storeNode(node: any): void;
24
- processPVT(name: any, value: any, attrs: any): void;
25
- storeTiming(timingEntry: any, isAbsoluteTimestamp?: boolean): void;
26
- storeEvent(currentEvent: any, target: any, start: any, end: any): void;
27
- shouldIgnoreEvent(event: any, target: any): boolean;
28
- evtName(type: any): any;
29
- storeHist(path: any, old: any, time: any): void;
30
- storeResources(resources: any): void;
31
- storeErrorAgg(type: any, name: any, params: any, metrics: any): void;
32
- storeXhrAgg(type: any, name: any, params: any, metrics: any): void;
33
- isEmpty(): boolean;
34
- save(): void;
35
- get(): {
36
- targetApp: any;
37
- data: {
38
- stns: any[];
39
- earliestTimeStamp: number;
40
- latestTimeStamp: number;
41
- };
42
- }[];
8
+ * Stores a new trace node in the event buffer.
9
+ * @param {TraceNode} node
10
+ * @returns {boolean} true if the node was successfully stored, false otherwise
11
+ */
12
+ storeNode(node: TraceNode): boolean;
13
+ /**
14
+ * Processes a PVT (Page Visibility Timing) entry.
15
+ * @param {*} name
16
+ * @param {*} value
17
+ * @param {*} attrs
18
+ * @returns {boolean} true if the node was successfully stored, false otherwise
19
+ */
20
+ processPVT(name: any, value: any, attrs: any): boolean;
21
+ /**
22
+ * Stores a timing entry in the event buffer.
23
+ * @param {*} timingEntry
24
+ * @param {*} isAbsoluteTimestamp
25
+ * @returns {boolean} true if ALL possible nodes were successfully stored, false otherwise
26
+ */
27
+ storeTiming(timingEntry: any, isAbsoluteTimestamp?: any): boolean;
28
+ /**
29
+ * Tracks the events and their listener's duration on objects wrapped by wrap-events.
30
+ * @param {*} currentEvent - the event to be stored
31
+ * @param {*} target - the target of the event
32
+ * @param {*} start - the start time of the event
33
+ * @param {*} end - the end time of the event
34
+ * @returns {boolean} true if the event was successfully stored, false otherwise
35
+ */
36
+ storeEvent(currentEvent: any, target: any, start: any, end: any): boolean;
37
+ /**
38
+ * Tracks when the window history API specified by wrap-history is used.
39
+ * @param {*} path
40
+ * @param {*} old
41
+ * @param {*} time
42
+ * @returns {boolean} true if the history node was successfully stored, false otherwise
43
+ */
44
+ storeHist(path: any, old: any, time: any): boolean;
45
+ /**
46
+ * Processes all the PerformanceResourceTiming entries captured (by observer).
47
+ * @param {*[]} resources
48
+ * @returns {boolean} true if all resource nodes were successfully stored, false otherwise
49
+ */
50
+ storeResources(resources: any[]): boolean;
51
+ /**
52
+ * JavascriptError (FEATURE) events pipes into ST here.
53
+ * @param {*} type
54
+ * @param {*} name
55
+ * @param {*} params
56
+ * @param {*} metrics
57
+ * @returns {boolean} true if the error node was successfully stored, false otherwise
58
+ */
59
+ storeErrorAgg(type: any, name: any, params: any, metrics: any): boolean;
60
+ /**
61
+ * Ajax (FEATURE) events--XML & fetches--pipes into ST here.
62
+ * @param {*} type
63
+ * @param {*} name
64
+ * @param {*} params
65
+ * @param {*} metrics
66
+ * @returns {boolean} true if the Ajax node was successfully stored, false otherwise
67
+ */
68
+ storeXhrAgg(type: any, name: any, params: any, metrics: any): boolean;
69
+ /**
70
+ * Trims stored trace nodes in the event buffer by start time.
71
+ * @param {number} lookbackDuration
72
+ * @returns {void}
73
+ */
74
+ trimSTNsByTime(lookbackDuration?: number): void;
75
+ /**
76
+ * Trims stored trace nodes in the event buffer before a given index value.
77
+ * @param {number} index
78
+ * @returns {void}
79
+ */
80
+ trimSTNsByIndex(index?: number): void;
81
+ /**
82
+ * clears the stored events in the event buffer.
83
+ * This is used to release references to past events for garbage collection.
84
+ * @returns {void}
85
+ */
43
86
  clear(): void;
44
- reloadSave(): void;
45
- clearSave(): void;
46
87
  #private;
47
88
  }
89
+ import { TraceNode } from './node';
48
90
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../../../src/features/session_trace/aggregate/trace/storage.js"],"names":[],"mappings":"AA8BA,+HAA+H;AAC/H;IAQE,yBAEC;IATD,kBAAa;IACb,UAAU;IACV,0BAA4B;IAC5B,wBAAmB;IACnB,2BAA4B;IAI1B,YAAoB;IAuBtB;;;;OAIG;IACH,2BAHW,MAAM,GACJ,MAAM,CAsBlB;IAED,oEAAoE;IACpE;;;;MAgBC;IAED,mEA6BC;IAED,2BAGC;IAED,oDAEC;IAED,mEAwBC;IAGD,uEAgBC;IAED,oDAKC;IAED,wBAwBC;IAGD,gDAGC;IAID,qCAgBC;IAGD,qEAIC;IAGD,mEAIC;IAID,mBAEC;IAED,aAEC;IAED;;;;;;;QAEC;IAED,cAMC;IAED,mBAOC;IAED,kBAEC;;CACF"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../../../src/features/session_trace/aggregate/trace/storage.js"],"names":[],"mappings":"AA2CA,mIAAmI;AACnI;IAIE,yBAEC;IALD,oGAAoG;IACpG,2BAA4B;IAG1B,YAAoB;IA8EtB;;;;OAIG;IACH,gBAHW,SAAS,GACP,OAAO,CAInB;IAED;;;;;;OAMG;IACH,iBALW,GAAC,SACD,GAAC,SACD,GAAC,GACC,OAAO,CAInB;IAED;;;;;OAKG;IACH,yBAJW,GAAC,wBACD,GAAC,GACC,OAAO,CA2BnB;IAED;;;;;;;OAOG;IACH,yBANW,GAAC,UACD,GAAC,SACD,GAAC,OACD,GAAC,GACC,OAAO,CAmBnB;IAED;;;;;;OAMG;IACH,gBALW,GAAC,OACD,GAAC,QACD,GAAC,GACC,OAAO,CAInB;IAED;;;;OAIG;IACH,0BAHW,GAAC,EAAE,GACD,OAAO,CAkBnB;IAED;;;;;;;OAOG;IACH,oBANW,GAAC,QACD,GAAC,UACD,GAAC,WACD,GAAC,GACC,OAAO,CAKnB;IAED;;;;;;;OAOG;IACH,kBANW,GAAC,QACD,GAAC,UACD,GAAC,WACD,GAAC,GACC,OAAO,CAKnB;IAED;;;;OAIG;IACH,kCAHW,MAAM,GACJ,IAAI,CAOhB;IAED;;;;OAIG;IACH,wBAHW,MAAM,GACJ,IAAI,CAMhB;IAED;;;;OAIG;IACH,SAFa,IAAI,CAIhB;;CACF;0BAjSyB,QAAQ"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright 2020-2025 New Relic, Inc. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ export function evtName(type: any): any;
6
+ export function isTrivial(node: any): boolean;
7
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../src/features/session_trace/aggregate/trace/utils.js"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wCAyBC;AAED,8CAGC"}
@@ -7,4 +7,5 @@ export const FN_START: string;
7
7
  export const FN_END: string;
8
8
  export const PUSH_STATE: "pushState";
9
9
  export const MAX_NODES_PER_HARVEST: 1000;
10
+ export const ERROR_MODE_SECONDS_WINDOW: number;
10
11
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/features/session_trace/constants.js"],"names":[],"mappings":"AAMA,kCAAsD;AACtD,2BAA4B,aAAa,CAAA;AACzC,uBAAwB,UAAU,CAAA;AAClC,oBAAqB,QAAQ,CAAA;AAC7B,kBAAmB,MAAM,CAAA;AACzB,8BAAoC;AACpC,4BAAgC;AAChC,yBAA0B,WAAW,CAAA;AACrC,oCAAqC,IAAI,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/features/session_trace/constants.js"],"names":[],"mappings":"AAMA,kCAAsD;AACtD,2BAA4B,aAAa,CAAA;AACzC,uBAAwB,UAAU,CAAA;AAClC,oBAAqB,QAAQ,CAAA;AAC7B,kBAAmB,MAAM,CAAA;AACzB,8BAAoC;AACpC,4BAAgC;AAChC,yBAA0B,WAAW,CAAA;AACrC,oCAAqC,IAAI,CAAA;AACzC,+CAAkD"}
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate-base.d.ts","sourceRoot":"","sources":["../../../../src/features/utils/aggregate-base.js"],"names":[],"mappings":"AAsBA;IACE;;;;OAIG;IACH,sBAHW,MAAM,eACN,MAAM,EAyBhB;IArBC,iBAAwB;IAIxB,uOAAuO;IACvO,qCAAwC;IACxC,gLAAgL;IAChL,yBAA2B;IAE3B,gBAAqB;IA6BjB,YAAwJ;IAW9J;;;;OAIG;IACH,2BAOC;IAED;;;;OAIG;IACH,yBAHW,MAAM,EAAE,gBAwBlB;IAED;;OAEG;IACH,cAGC;IADC,6BAAmB;IAGrB,qCAEC;IAED;;;;;;OAMG;IACH,uDAJW,MAAM,GAAC,SAAS,SAyB1B;IAED;;;;;;;OAOG;IACH,4BALG;QAAwB,SAAS,GAAzB,MAAM,YAAC;KACf,QAQF;IAED;;;OAGG;IACH,6CAsBC;IAED;;;OAGG;IACH,2CAOC;IALC,gBAA6C;IAO/C;;;;OAIG;IACH,uCAHW,GAAC,UACD,GAAC,QAIX;;CACF;4BA9N2B,gBAAgB"}
1
+ {"version":3,"file":"aggregate-base.d.ts","sourceRoot":"","sources":["../../../../src/features/utils/aggregate-base.js"],"names":[],"mappings":"AAsBA;IACE;;;;OAIG;IACH,sBAHW,MAAM,eACN,MAAM,EAyBhB;IArBC,iBAAwB;IAIxB,uOAAuO;IACvO,qCAAwC;IACxC,gLAAgL;IAChL,yBAA2B;IAE3B,gBAAqB;IA4BjB,YAAwJ;IAW9J;;;;OAIG;IACH,2BAOC;IAED;;;;OAIG;IACH,yBAHW,MAAM,EAAE,gBAwBlB;IAED;;OAEG;IACH,cAGC;IADC,6BAAmB;IAGrB,qCAEC;IAED;;;;;;OAMG;IACH,uDAJW,MAAM,GAAC,SAAS,SAyB1B;IAED;;;;;;;OAOG;IACH,4BALG;QAAwB,SAAS,GAAzB,MAAM,YAAC;KACf,QAQF;IAED;;;OAGG;IACH,6CAsBC;IAED;;;OAGG;IACH,2CAOC;IALC,gBAA6C;IAO/C;;;;OAIG;IACH,uCAHW,GAAC,UACD,GAAC,QAIX;;CACF;4BA7N2B,gBAAgB"}
@@ -7,6 +7,7 @@ export class EventBuffer {
7
7
  constructor(maxPayloadSize?: number, featureAgg?: Object);
8
8
  maxPayloadSize: number;
9
9
  featureAgg: Object | undefined;
10
+ get length(): number;
10
11
  isEmpty(): boolean;
11
12
  get(): any[];
12
13
  byteSize(): number;
@@ -17,10 +18,26 @@ export class EventBuffer {
17
18
  * @returns {Boolean} true if successfully added; false otherwise
18
19
  */
19
20
  add(event: any): boolean;
21
+ /**
22
+ * Merges events in the buffer that match the given criteria.
23
+ * @param {Function} matcher - A function that takes an event and returns true if it should be merged.
24
+ * @param {Object} data - The data to merge into the matching events.
25
+ * @returns {boolean} true if a match was found and merged; false otherwise.
26
+ */
27
+ merge(matcher: Function, data: Object): boolean;
20
28
  /**
21
29
  * Wipes the main buffer
30
+ * @param {Object} [opts] - options for clearing the buffer
31
+ * @param {Number} [opts.clearBeforeTime] - timestamp before which all events should be cleared
32
+ * @param {String} [opts.timestampKey] - the key in the event object that contains the timestamp to compare against `clearBefore`
33
+ * @param {Number} [opts.clearBeforeIndex] - index before which all events should be cleared
34
+ * @returns {void}
22
35
  */
23
- clear(): void;
36
+ clear(opts?: {
37
+ clearBeforeTime?: number | undefined;
38
+ timestampKey?: string | undefined;
39
+ clearBeforeIndex?: number | undefined;
40
+ }): void;
24
41
  /**
25
42
  * Backup the buffered data and clear the main buffer
26
43
  */
@@ -1 +1 @@
1
- {"version":3,"file":"event-buffer.d.ts","sourceRoot":"","sources":["../../../../src/features/utils/event-buffer.js"],"names":[],"mappings":"AAOA;IAME;;;;OAIG;IACH,kDAFW,MAAM,EAKhB;IAFC,uBAAoC;IACpC,+BAA4B;IAG9B,mBAEC;IAED,aAEC;IAED,mBAEC;IAED,+CAEC;IAED;;;;OAIG;IACH,WAHW,GAAG,WAeb;IAED;;OAEG;IACH,cAGC;IAED;;OAEG;IACH,aAGC;IAED;;OAEG;IACH,kBAGC;IAED;;OAEG;IACH,mBAKC;;CACF"}
1
+ {"version":3,"file":"event-buffer.d.ts","sourceRoot":"","sources":["../../../../src/features/utils/event-buffer.js"],"names":[],"mappings":"AAOA;IAME;;;;OAIG;IACH,kDAFW,MAAM,EAKhB;IAFC,uBAAoC;IACpC,+BAA4B;IAG9B,qBAEC;IAED,mBAEC;IAED,aAEC;IAED,mBAEC;IAED,+CAEC;IAED;;;;OAIG;IACH,WAHW,GAAG,WAeb;IAED;;;;;KAKC;IACD,+BAHS,MAAM,GACJ,OAAO,CAWjB;IAED;;;;;;;OAOG;IACH,aALG;QAAsB,eAAe;QACf,YAAY;QACZ,gBAAgB;KACtC,GAAU,IAAI,CAWhB;IAED;;OAEG;IACH,aAGC;IAED;;OAEG;IACH,kBAGC;IAED;;OAEG;IACH,mBAKC;;CACF"}
@@ -16,6 +16,18 @@ export class EventStoreManager {
16
16
  appStorageMap: Map<string, any>;
17
17
  featureAgg: Object;
18
18
  setEventStore(targetEntityGuid: any): void;
19
+ /** IMPORTANT
20
+ * This class must contain an union of all methods from all supported storage classes and conceptualize away the target app argument.
21
+ */
22
+ get length(): any;
23
+ /**
24
+ * Calls the merge method on the underlying storage class.
25
+ * @param {*} matcher
26
+ * @param {*} data
27
+ * @param {*} targetEntityGuid
28
+ * @returns {boolean} True if the merge was successful
29
+ */
30
+ merge(matcher: any, data: any, targetEntityGuid: any): boolean;
19
31
  /**
20
32
  * Calls the isEmpty method on the underlying storage class. If target is provided, runs just for the target, otherwise runs for all apps.
21
33
  * @param {object} optsIfPresent - exists if called during harvest interval, @see AggregateBase.makeHarvestPayload
@@ -1 +1 @@
1
- {"version":3,"file":"event-store-manager.d.ts","sourceRoot":"","sources":["../../../../src/features/utils/event-store-manager.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH;IACE;;;;;OAKG;IACH,sBALW,MAAM,gBACN,WAAW,GAAC,eAAe,sBAC3B,MAAM,cACN,MAAM,EAShB;IANC,iBAAwB;IACxB,mBAAmD;IACnD,kBAAgC;IAChC,gCAAkG;IAClG,mBAA4B;IAc9B,2CAQC;IAID;;;;;OAKG;IACH,uBAJW,MAAM,0BAEJ,OAAO,CASnB;IAED;;;;;OAKG;IACH,WAJW,MAAM,oBACN,MAAM,GACJ,OAAO,CAInB;IAED,0GAA0G;IAC1G,8DAEC;IAED;;;;;OAKG;IACH,WAJW,MAAM,YAAC,gCAgBjB;IAED;;;;OAIG;IACH,2BAHW,GAAC,OAKX;IAED;;;;;OAKG;IACH,iCAJW,GAAC,oBACD,GAAC,OAKX;IAED;;;;;OAKG;IACH,oBAJW,GAAC,oBACD,GAAC,OAMX;IAED;;;;;OAKG;IACH,qBAJW,GAAC,oBACD,GAAC,OAMX;IAGD,2DAEC;IAED,0DAEC;;CACF"}
1
+ {"version":3,"file":"event-store-manager.d.ts","sourceRoot":"","sources":["../../../../src/features/utils/event-store-manager.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH;IACE;;;;;OAKG;IACH,sBALW,MAAM,gBACN,WAAW,GAAC,eAAe,sBAC3B,MAAM,cACN,MAAM,EAShB;IANC,iBAAwB;IACxB,mBAAmD;IACnD,kBAAgC;IAChC,gCAAkG;IAClG,mBAA4B;IAc9B,2CAQC;IAED;;OAEG;IAEH,kBAEC;IAED;;;;;;OAMG;IACH,eALW,GAAC,QACD,GAAC,oBACD,GAAC,GACC,OAAO,CAInB;IAED;;;;;OAKG;IACH,uBAJW,MAAM,0BAEJ,OAAO,CASnB;IAED;;;;;OAKG;IACH,WAJW,MAAM,oBACN,MAAM,GACJ,OAAO,CAInB;IAED,0GAA0G;IAC1G,8DAEC;IAED;;;;;OAKG;IACH,WAJW,MAAM,YAAC,gCAgBjB;IAED;;;;OAIG;IACH,2BAHW,GAAC,OAKX;IAED;;;;;OAKG;IACH,iCAJW,GAAC,oBACD,GAAC,OAKX;IAED;;;;;OAKG;IACH,oBAJW,GAAC,oBACD,GAAC,OAMX;IAED;;;;;OAKG;IACH,qBAJW,GAAC,oBACD,GAAC,OAMX;IAGD,2DAEC;IAED,0DAEC;;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newrelic/browser-agent",
3
- "version": "1.295.0-rc.4",
3
+ "version": "1.295.0-rc.6",
4
4
  "private": false,
5
5
  "author": "New Relic Browser Agent Team <browser-agent@newrelic.com>",
6
6
  "description": "New Relic Browser Agent",
@@ -45,7 +45,8 @@ export function wrapEvents (sharedEE) {
45
45
  ee.on(ADD_EVENT_LISTENER + '-start', function (args, target) {
46
46
  var originalListener = args[1]
47
47
  if (originalListener === null ||
48
- (typeof originalListener !== 'function' && typeof originalListener !== 'object')
48
+ (typeof originalListener !== 'function' && typeof originalListener !== 'object') ||
49
+ (args[0] === 'newrelic') // ignore our own window events
49
50
  ) {
50
51
  return
51
52
  }
@@ -13,7 +13,6 @@ import { applyFnToProps } from '../../../common/util/traverse'
13
13
  import { cleanURL } from '../../../common/url/clean-url'
14
14
  import { warn } from '../../../common/util/console'
15
15
 
16
- const ERROR_MODE_SECONDS_WINDOW = 30 * 1000 // sliding window of nodes to track when simply monitoring (but not harvesting) in error mode
17
16
  /** Reserved room for query param attrs */
18
17
  const QUERY_PARAM_PADDING = 5000
19
18
  export class Aggregate extends AggregateBase {
@@ -29,8 +28,8 @@ export class Aggregate extends AggregateBase {
29
28
  this.everHarvested = false
30
29
  /** If the harvest module is harvesting */
31
30
  this.harvesting = false
32
- /** TraceStorage is the mechanism that holds, normalizes and aggregates ST nodes. It will be accessed and purged when harvests occur */
33
- this.events = new TraceStorage(this)
31
+ /** TraceStorage is a middleware that decides how to format data before passing events to `this.events` */
32
+ this.traceStorage = new TraceStorage(this)
34
33
 
35
34
  /* This agg needs information about sampling (sts) and entitlements (st) to make the appropriate decisions on running */
36
35
  this.waitForFlags(['sts', 'st'])
@@ -64,9 +63,9 @@ export class Aggregate extends AggregateBase {
64
63
  })
65
64
 
66
65
  if (typeof PerformanceNavigationTiming !== 'undefined') {
67
- this.events.storeTiming(globalScope.performance?.getEntriesByType?.('navigation')[0])
66
+ this.traceStorage.storeTiming(globalScope.performance?.getEntriesByType?.('navigation')[0])
68
67
  } else {
69
- this.events.storeTiming(globalScope.performance?.timing, true)
68
+ this.traceStorage.storeTiming(globalScope.performance?.timing, true)
70
69
  }
71
70
  }
72
71
 
@@ -82,13 +81,13 @@ export class Aggregate extends AggregateBase {
82
81
  this.timeKeeper ??= this.agentRef.runtime.timeKeeper
83
82
 
84
83
  /** The handlers set up by the Inst file */
85
- registerHandler('bst', (...args) => this.events.storeEvent(...args), this.featureName, this.ee)
86
- registerHandler('bstResource', (...args) => this.events.storeResources(...args), this.featureName, this.ee)
87
- registerHandler('bstHist', (...args) => this.events.storeHist(...args), this.featureName, this.ee)
88
- registerHandler('bstXhrAgg', (...args) => this.events.storeXhrAgg(...args), this.featureName, this.ee)
89
- registerHandler('bstApi', (...args) => this.events.storeNode(...args), this.featureName, this.ee)
90
- registerHandler('trace-jserror', (...args) => this.events.storeErrorAgg(...args), this.featureName, this.ee)
91
- registerHandler('pvtAdded', (...args) => this.events.processPVT(...args), this.featureName, this.ee)
84
+ registerHandler('bst', (...args) => this.traceStorage.storeEvent(...args), this.featureName, this.ee)
85
+ registerHandler('bstResource', (...args) => this.traceStorage.storeResources(...args), this.featureName, this.ee)
86
+ registerHandler('bstHist', (...args) => this.traceStorage.storeHist(...args), this.featureName, this.ee)
87
+ registerHandler('bstXhrAgg', (...args) => this.traceStorage.storeXhrAgg(...args), this.featureName, this.ee)
88
+ registerHandler('bstApi', (...args) => this.traceStorage.storeNode(...args), this.featureName, this.ee)
89
+ registerHandler('trace-jserror', (...args) => this.traceStorage.storeErrorAgg(...args), this.featureName, this.ee)
90
+ registerHandler('pvtAdded', (...args) => this.traceStorage.processPVT(...args), this.featureName, this.ee)
92
91
 
93
92
  if (this.mode !== MODE.FULL) {
94
93
  /** A separate handler for noticing errors, and switching to "full" mode if running in "error" mode */
@@ -111,22 +110,26 @@ export class Aggregate extends AggregateBase {
111
110
  this.abort(3)
112
111
  return
113
112
  }
113
+
114
114
  return true
115
115
  }
116
116
 
117
- serializer ({ stns }) {
117
+ serializer (stns) {
118
118
  if (!stns.length) return // there are no processed nodes
119
119
  this.everHarvested = true
120
120
  return applyFnToProps(stns, this.obfuscator.obfuscateString.bind(this.obfuscator), 'string')
121
121
  }
122
122
 
123
- queryStringsBuilder ({ stns, earliestTimeStamp, latestTimeStamp }) {
123
+ queryStringsBuilder (stns) {
124
124
  const firstSessionHarvest = !this.agentRef.runtime.session.state.traceHarvestStarted
125
125
  if (firstSessionHarvest) this.agentRef.runtime.session.write({ traceHarvestStarted: true })
126
126
  const hasReplay = this.agentRef.runtime.session.state.sessionReplayMode === 1
127
127
  const endUserId = this.agentRef.info.jsAttributes['enduser.id']
128
128
  const entityGuid = this.agentRef.runtime.appMetadata.agents?.[0]?.entityGuid
129
129
 
130
+ const earliestTimeStamp = stns.reduce((earliest, stn) => Math.min(earliest, stn.s), Infinity)
131
+ const latestTimeStamp = stns.reduce((latest, stn) => Math.max(latest, stn.s), -Infinity)
132
+
130
133
  /* The blob consumer expects the following and will reject if not supplied:
131
134
  * browser_monitoring_key
132
135
  * type
@@ -175,7 +178,7 @@ export class Aggregate extends AggregateBase {
175
178
  this.agentRef.runtime.session.write({ sessionTraceMode: this.mode })
176
179
  if (prevMode === MODE.OFF || !this.initialized) return this.initialize(this.mode, this.entitled)
177
180
  if (this.initialized) {
178
- this.events.trimSTNs(ERROR_MODE_SECONDS_WINDOW) // up until now, Trace would've been just buffering nodes up to max, which needs to be trimmed to last X seconds
181
+ this.traceStorage.trimSTNsByTime() // up until now, Trace would've been just buffering nodes up to max, which needs to be trimmed to last X seconds
179
182
  this.agentRef.runtime.harvester.triggerHarvestFor(this)
180
183
  }
181
184
  }
@@ -188,4 +191,9 @@ export class Aggregate extends AggregateBase {
188
191
  this.agentRef.runtime.session.write({ sessionTraceMode: this.mode })
189
192
  this.events.clear()
190
193
  }
194
+
195
+ postHarvestCleanup (result) {
196
+ this.traceStorage.clear() // clear the trace storage state
197
+ super.postHarvestCleanup(result)
198
+ }
191
199
  }