@newrelic/browser-agent 1.264.0 → 1.265.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.
- package/CHANGELOG.md +24 -0
- package/dist/cjs/common/aggregate/aggregator.js +1 -2
- package/dist/cjs/common/config/{state/configurable.js → configurable.js} +1 -1
- package/dist/cjs/common/config/{state/info.js → info.js} +1 -1
- package/dist/cjs/common/config/{state/init.js → init.js} +5 -5
- package/dist/cjs/common/config/{state/loader-config.js → loader-config.js} +1 -1
- package/dist/cjs/common/config/{state/runtime.js → runtime.js} +16 -5
- package/dist/cjs/common/constants/agent-constants.js +8 -0
- package/dist/cjs/common/constants/env.cdn.js +1 -1
- package/dist/cjs/common/constants/env.npm.js +1 -1
- package/dist/cjs/common/context/shared-context.js +1 -2
- package/dist/cjs/common/dispatch/global-event.js +1 -2
- package/dist/cjs/common/drain/drain.js +10 -16
- package/dist/cjs/common/event-emitter/contextual-ee.js +3 -4
- package/dist/cjs/common/event-listener/event-listener-opts.js +2 -6
- package/dist/cjs/common/harvest/harvest-scheduler.js +1 -2
- package/dist/cjs/common/harvest/harvest.js +29 -56
- package/dist/cjs/common/serialize/bel-serializer.js +6 -11
- package/dist/cjs/common/session/session-entity.js +9 -12
- package/dist/cjs/common/timing/nav-timing.js +1 -3
- package/dist/cjs/common/timing/time-keeper.js +16 -6
- package/dist/cjs/common/url/encode.js +2 -4
- package/dist/cjs/common/util/console.js +2 -0
- package/dist/cjs/common/util/invoke.js +6 -16
- package/dist/cjs/common/util/obfuscate.js +97 -53
- package/dist/cjs/common/util/submit-data.js +17 -20
- package/dist/cjs/common/util/text.js +9 -0
- package/dist/cjs/common/util/traverse.js +1 -3
- package/dist/cjs/common/vitals/cumulative-layout-shift.js +5 -6
- package/dist/cjs/common/vitals/first-contentful-paint.js +4 -5
- package/dist/cjs/common/vitals/first-input-delay.js +4 -5
- package/dist/cjs/common/vitals/interaction-to-next-paint.js +5 -6
- package/dist/cjs/common/vitals/largest-contentful-paint.js +4 -5
- package/dist/cjs/common/vitals/time-to-first-byte.js +4 -5
- package/dist/cjs/common/vitals/vital-metric.js +6 -8
- package/dist/cjs/common/window/nreum.js +2 -1
- package/dist/cjs/common/window/page-visibility.js +1 -4
- package/dist/cjs/common/wrap/wrap-events.js +1 -4
- package/dist/cjs/common/wrap/wrap-promise.js +1 -4
- package/dist/cjs/common/wrap/wrap-websocket.js +74 -0
- package/dist/cjs/features/ajax/aggregate/chunk.js +4 -3
- package/dist/cjs/features/ajax/aggregate/gql.js +4 -5
- package/dist/cjs/features/ajax/aggregate/index.js +20 -23
- package/dist/cjs/features/ajax/constants.js +2 -3
- package/dist/cjs/features/ajax/instrument/distributed-tracing.js +9 -8
- package/dist/cjs/features/ajax/instrument/index.js +15 -13
- package/dist/cjs/features/generic_events/aggregate/index.js +49 -58
- package/dist/cjs/features/generic_events/constants.js +4 -2
- package/dist/cjs/features/generic_events/instrument/index.js +7 -7
- package/dist/cjs/features/jserrors/aggregate/index.js +24 -44
- package/dist/cjs/features/jserrors/instrument/index.js +5 -5
- package/dist/cjs/features/logging/aggregate/index.js +34 -37
- package/dist/cjs/features/logging/constants.js +2 -3
- package/dist/cjs/features/logging/instrument/index.js +6 -7
- package/dist/cjs/features/logging/shared/log.js +1 -3
- package/dist/cjs/features/logging/shared/utils.js +2 -4
- package/dist/cjs/features/metrics/aggregate/index.js +35 -18
- package/dist/cjs/features/metrics/aggregate/websocket-detection.js +34 -0
- package/dist/cjs/features/metrics/constants.js +4 -2
- package/dist/cjs/features/metrics/instrument/index.js +13 -5
- package/dist/cjs/features/page_action/instrument/index.js +8 -4
- package/dist/cjs/features/page_view_event/aggregate/index.js +20 -40
- package/dist/cjs/features/page_view_event/instrument/index.js +5 -5
- package/dist/cjs/features/page_view_timing/aggregate/index.js +24 -40
- package/dist/cjs/features/page_view_timing/instrument/index.js +5 -5
- package/dist/cjs/features/session_replay/aggregate/index.js +37 -44
- package/dist/cjs/features/session_replay/constants.js +1 -5
- package/dist/cjs/features/session_replay/instrument/index.js +6 -10
- package/dist/cjs/features/session_replay/shared/recorder-events.js +25 -20
- package/dist/cjs/features/session_replay/shared/recorder.js +17 -13
- package/dist/cjs/features/session_replay/shared/stylesheet-evaluator.js +3 -3
- package/dist/cjs/features/session_replay/shared/utils.js +5 -4
- package/dist/cjs/features/session_trace/aggregate/index.js +26 -43
- package/dist/cjs/features/session_trace/aggregate/trace/storage.js +7 -5
- package/dist/cjs/features/session_trace/instrument/index.js +9 -8
- package/dist/cjs/features/soft_navigations/aggregate/ajax-node.js +1 -1
- package/dist/cjs/features/soft_navigations/aggregate/bel-node.js +1 -1
- package/dist/cjs/features/soft_navigations/aggregate/index.js +23 -31
- package/dist/cjs/features/soft_navigations/aggregate/initial-page-load-interaction.js +2 -2
- package/dist/cjs/features/soft_navigations/aggregate/interaction.js +9 -10
- package/dist/cjs/features/soft_navigations/instrument/index.js +15 -14
- package/dist/cjs/features/spa/aggregate/index.js +17 -27
- package/dist/cjs/features/spa/aggregate/interaction.js +7 -6
- package/dist/cjs/features/spa/aggregate/serializer.js +3 -3
- package/dist/cjs/features/spa/constants.js +2 -2
- package/dist/cjs/features/spa/instrument/index.js +21 -20
- package/dist/cjs/features/utils/agent-session.js +6 -4
- package/dist/cjs/features/utils/aggregate-base.js +15 -10
- package/dist/cjs/features/utils/event-buffer.js +132 -0
- package/dist/cjs/features/utils/feature-gates.js +2 -2
- package/dist/cjs/features/utils/instrument-base.js +7 -8
- package/dist/cjs/features/utils/lazy-feature-loader.js +11 -11
- package/dist/cjs/features/utils/nr1-debugger.js +1 -3
- package/dist/cjs/loaders/agent-base.js +4 -8
- package/dist/cjs/loaders/agent.js +7 -2
- package/dist/cjs/loaders/api/api.js +22 -34
- package/dist/cjs/loaders/api/apiAsync.js +9 -12
- package/dist/cjs/loaders/configure/configure.js +12 -12
- package/dist/cjs/loaders/features/enabled-features.js +2 -2
- package/dist/cjs/loaders/micro-agent.js +15 -14
- package/dist/esm/common/aggregate/aggregator.js +1 -2
- package/dist/esm/common/config/{state/configurable.js → configurable.js} +1 -1
- package/dist/esm/common/config/{state/info.js → info.js} +1 -1
- package/dist/esm/common/config/{state/init.js → init.js} +5 -5
- package/dist/esm/common/config/{state/loader-config.js → loader-config.js} +1 -1
- package/dist/esm/common/config/{state/runtime.js → runtime.js} +17 -5
- package/dist/esm/common/constants/agent-constants.js +2 -0
- package/dist/esm/common/constants/env.cdn.js +1 -1
- package/dist/esm/common/constants/env.npm.js +1 -1
- package/dist/esm/common/context/shared-context.js +1 -2
- package/dist/esm/common/dispatch/global-event.js +1 -2
- package/dist/esm/common/drain/drain.js +10 -16
- package/dist/esm/common/event-emitter/contextual-ee.js +2 -3
- package/dist/esm/common/event-listener/event-listener-opts.js +2 -6
- package/dist/esm/common/harvest/harvest-scheduler.js +1 -2
- package/dist/esm/common/harvest/harvest.js +21 -48
- package/dist/esm/common/serialize/bel-serializer.js +6 -11
- package/dist/esm/common/session/session-entity.js +8 -11
- package/dist/esm/common/timing/nav-timing.js +1 -3
- package/dist/esm/common/timing/time-keeper.js +15 -5
- package/dist/esm/common/url/encode.js +2 -4
- package/dist/esm/common/util/console.js +2 -0
- package/dist/esm/common/util/invoke.js +6 -16
- package/dist/esm/common/util/obfuscate.js +96 -49
- package/dist/esm/common/util/submit-data.js +17 -20
- package/dist/esm/common/util/text.js +3 -0
- package/dist/esm/common/util/traverse.js +1 -3
- package/dist/esm/common/vitals/cumulative-layout-shift.js +5 -6
- package/dist/esm/common/vitals/first-contentful-paint.js +4 -5
- package/dist/esm/common/vitals/first-input-delay.js +4 -5
- package/dist/esm/common/vitals/interaction-to-next-paint.js +5 -6
- package/dist/esm/common/vitals/largest-contentful-paint.js +4 -5
- package/dist/esm/common/vitals/time-to-first-byte.js +4 -5
- package/dist/esm/common/vitals/vital-metric.js +6 -8
- package/dist/esm/common/window/nreum.js +2 -1
- package/dist/esm/common/window/page-visibility.js +1 -4
- package/dist/esm/common/wrap/wrap-events.js +1 -4
- package/dist/esm/common/wrap/wrap-promise.js +1 -4
- package/dist/esm/common/wrap/wrap-websocket.js +67 -0
- package/dist/esm/features/ajax/aggregate/chunk.js +3 -2
- package/dist/esm/features/ajax/aggregate/gql.js +4 -5
- package/dist/esm/features/ajax/aggregate/index.js +17 -20
- package/dist/esm/features/ajax/constants.js +1 -2
- package/dist/esm/features/ajax/instrument/distributed-tracing.js +2 -1
- package/dist/esm/features/ajax/instrument/index.js +11 -9
- package/dist/esm/features/generic_events/aggregate/index.js +41 -50
- package/dist/esm/features/generic_events/constants.js +3 -1
- package/dist/esm/features/generic_events/instrument/index.js +5 -5
- package/dist/esm/features/jserrors/aggregate/index.js +19 -39
- package/dist/esm/features/jserrors/instrument/index.js +4 -4
- package/dist/esm/features/logging/aggregate/index.js +32 -35
- package/dist/esm/features/logging/constants.js +1 -2
- package/dist/esm/features/logging/instrument/index.js +5 -6
- package/dist/esm/features/logging/shared/log.js +1 -3
- package/dist/esm/features/logging/shared/utils.js +2 -4
- package/dist/esm/features/metrics/aggregate/index.js +29 -12
- package/dist/esm/features/metrics/aggregate/websocket-detection.js +29 -0
- package/dist/esm/features/metrics/constants.js +3 -1
- package/dist/esm/features/metrics/instrument/index.js +13 -5
- package/dist/esm/features/page_action/instrument/index.js +7 -3
- package/dist/esm/features/page_view_event/aggregate/index.js +18 -38
- package/dist/esm/features/page_view_event/instrument/index.js +4 -4
- package/dist/esm/features/page_view_timing/aggregate/index.js +21 -37
- package/dist/esm/features/page_view_timing/instrument/index.js +4 -4
- package/dist/esm/features/session_replay/aggregate/index.js +27 -34
- package/dist/esm/features/session_replay/constants.js +0 -4
- package/dist/esm/features/session_replay/index.js +1 -7
- package/dist/esm/features/session_replay/instrument/index.js +6 -9
- package/dist/esm/features/session_replay/shared/recorder-events.js +25 -20
- package/dist/esm/features/session_replay/shared/recorder.js +14 -10
- package/dist/esm/features/session_replay/shared/stylesheet-evaluator.js +3 -3
- package/dist/esm/features/session_replay/shared/utils.js +3 -2
- package/dist/esm/features/session_trace/aggregate/index.js +21 -38
- package/dist/esm/features/session_trace/aggregate/trace/storage.js +7 -5
- package/dist/esm/features/session_trace/instrument/index.js +6 -5
- package/dist/esm/features/soft_navigations/aggregate/ajax-node.js +1 -1
- package/dist/esm/features/soft_navigations/aggregate/bel-node.js +1 -1
- package/dist/esm/features/soft_navigations/aggregate/index.js +22 -30
- package/dist/esm/features/soft_navigations/aggregate/initial-page-load-interaction.js +1 -1
- package/dist/esm/features/soft_navigations/aggregate/interaction.js +7 -8
- package/dist/esm/features/soft_navigations/instrument/index.js +12 -11
- package/dist/esm/features/spa/aggregate/index.js +11 -21
- package/dist/esm/features/spa/aggregate/interaction.js +6 -5
- package/dist/esm/features/spa/aggregate/serializer.js +1 -1
- package/dist/esm/features/spa/constants.js +2 -2
- package/dist/esm/features/spa/instrument/index.js +13 -12
- package/dist/esm/features/utils/agent-session.js +3 -1
- package/dist/esm/features/utils/aggregate-base.js +13 -8
- package/dist/esm/features/utils/event-buffer.js +126 -0
- package/dist/esm/features/utils/feature-gates.js +1 -1
- package/dist/esm/features/utils/instrument-base.js +6 -7
- package/dist/esm/features/utils/lazy-feature-loader.js +11 -11
- package/dist/esm/features/utils/nr1-debugger.js +1 -3
- package/dist/esm/loaders/agent-base.js +4 -8
- package/dist/esm/loaders/agent.js +7 -2
- package/dist/esm/loaders/api/api.js +17 -29
- package/dist/esm/loaders/api/apiAsync.js +2 -5
- package/dist/esm/loaders/configure/configure.js +5 -5
- package/dist/esm/loaders/features/enabled-features.js +1 -1
- package/dist/esm/loaders/micro-agent.js +10 -9
- package/dist/types/common/config/configurable.d.ts.map +1 -0
- package/dist/types/common/config/info.d.ts.map +1 -0
- package/dist/types/common/config/init.d.ts.map +1 -0
- package/dist/types/common/config/loader-config.d.ts.map +1 -0
- package/dist/types/common/config/runtime.d.ts.map +1 -0
- package/dist/types/common/constants/agent-constants.d.ts +3 -0
- package/dist/types/common/constants/agent-constants.d.ts.map +1 -0
- package/dist/types/common/drain/drain.d.ts.map +1 -1
- package/dist/types/common/harvest/harvest.d.ts +1 -7
- package/dist/types/common/harvest/harvest.d.ts.map +1 -1
- package/dist/types/common/serialize/bel-serializer.d.ts.map +1 -1
- package/dist/types/common/timing/time-keeper.d.ts +9 -2
- package/dist/types/common/timing/time-keeper.d.ts.map +1 -1
- package/dist/types/common/util/console.d.ts.map +1 -1
- package/dist/types/common/util/obfuscate.d.ts +78 -6
- package/dist/types/common/util/obfuscate.d.ts.map +1 -1
- package/dist/types/common/util/text.d.ts +2 -0
- package/dist/types/common/util/text.d.ts.map +1 -0
- package/dist/types/common/window/nreum.d.ts.map +1 -1
- package/dist/types/common/wrap/wrap-websocket.d.ts +4 -0
- package/dist/types/common/wrap/wrap-websocket.d.ts.map +1 -0
- package/dist/types/features/ajax/aggregate/chunk.d.ts.map +1 -1
- package/dist/types/features/ajax/aggregate/index.d.ts +2 -3
- package/dist/types/features/ajax/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/ajax/constants.d.ts +0 -1
- package/dist/types/features/ajax/constants.d.ts.map +1 -1
- package/dist/types/features/ajax/instrument/distributed-tracing.d.ts.map +1 -1
- package/dist/types/features/ajax/instrument/index.d.ts +1 -0
- package/dist/types/features/ajax/instrument/index.d.ts.map +1 -1
- package/dist/types/features/generic_events/aggregate/index.d.ts +6 -8
- package/dist/types/features/generic_events/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/generic_events/constants.d.ts +2 -0
- package/dist/types/features/generic_events/constants.d.ts.map +1 -1
- package/dist/types/features/generic_events/instrument/index.d.ts +1 -0
- package/dist/types/features/generic_events/instrument/index.d.ts.map +1 -1
- package/dist/types/features/jserrors/aggregate/index.d.ts +2 -2
- package/dist/types/features/jserrors/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/jserrors/instrument/index.d.ts +1 -0
- package/dist/types/features/jserrors/instrument/index.d.ts.map +1 -1
- package/dist/types/features/logging/aggregate/index.d.ts +4 -7
- package/dist/types/features/logging/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/logging/constants.d.ts +0 -1
- package/dist/types/features/logging/constants.d.ts.map +1 -1
- package/dist/types/features/logging/instrument/index.d.ts +1 -0
- package/dist/types/features/logging/instrument/index.d.ts.map +1 -1
- package/dist/types/features/metrics/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/metrics/aggregate/websocket-detection.d.ts +12 -0
- package/dist/types/features/metrics/aggregate/websocket-detection.d.ts.map +1 -0
- package/dist/types/features/metrics/constants.d.ts +1 -0
- package/dist/types/features/metrics/constants.d.ts.map +1 -1
- package/dist/types/features/metrics/instrument/index.d.ts +1 -0
- package/dist/types/features/metrics/instrument/index.d.ts.map +1 -1
- package/dist/types/features/page_action/instrument/index.d.ts +4 -0
- package/dist/types/features/page_action/instrument/index.d.ts.map +1 -1
- package/dist/types/features/page_view_event/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/page_view_event/instrument/index.d.ts +1 -0
- package/dist/types/features/page_view_event/instrument/index.d.ts.map +1 -1
- package/dist/types/features/page_view_timing/aggregate/index.d.ts +2 -2
- package/dist/types/features/page_view_timing/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/page_view_timing/instrument/index.d.ts +1 -0
- package/dist/types/features/page_view_timing/instrument/index.d.ts.map +1 -1
- package/dist/types/features/session_replay/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/session_replay/constants.d.ts +0 -4
- package/dist/types/features/session_replay/constants.d.ts.map +1 -1
- package/dist/types/features/session_replay/instrument/index.d.ts +1 -0
- package/dist/types/features/session_replay/instrument/index.d.ts.map +1 -1
- package/dist/types/features/session_replay/shared/recorder-events.d.ts +6 -6
- package/dist/types/features/session_replay/shared/recorder-events.d.ts.map +1 -1
- package/dist/types/features/session_replay/shared/recorder.d.ts +2 -2
- package/dist/types/features/session_replay/shared/recorder.d.ts.map +1 -1
- package/dist/types/features/session_replay/shared/utils.d.ts.map +1 -1
- package/dist/types/features/session_trace/aggregate/index.d.ts +2 -2
- package/dist/types/features/session_trace/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/session_trace/aggregate/trace/storage.d.ts +1 -1
- package/dist/types/features/session_trace/aggregate/trace/storage.d.ts.map +1 -1
- package/dist/types/features/session_trace/instrument/index.d.ts +1 -0
- package/dist/types/features/session_trace/instrument/index.d.ts.map +1 -1
- package/dist/types/features/soft_navigations/aggregate/index.d.ts +3 -3
- package/dist/types/features/soft_navigations/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/soft_navigations/instrument/index.d.ts +1 -0
- package/dist/types/features/soft_navigations/instrument/index.d.ts.map +1 -1
- package/dist/types/features/spa/aggregate/index.d.ts +2 -2
- package/dist/types/features/spa/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/spa/aggregate/interaction.d.ts.map +1 -1
- package/dist/types/features/spa/constants.d.ts.map +1 -1
- package/dist/types/features/spa/instrument/index.d.ts +1 -0
- package/dist/types/features/spa/instrument/index.d.ts.map +1 -1
- package/dist/types/features/utils/agent-session.d.ts.map +1 -1
- package/dist/types/features/utils/aggregate-base.d.ts +1 -0
- package/dist/types/features/utils/aggregate-base.d.ts.map +1 -1
- package/dist/types/features/utils/event-buffer.d.ts +72 -0
- package/dist/types/features/utils/event-buffer.d.ts.map +1 -0
- package/dist/types/features/utils/instrument-base.d.ts +1 -0
- package/dist/types/features/utils/instrument-base.d.ts.map +1 -1
- package/dist/types/loaders/agent-base.d.ts +1 -1
- package/dist/types/loaders/agent.d.ts.map +1 -1
- package/dist/types/loaders/api/api.d.ts.map +1 -1
- package/dist/types/loaders/configure/configure.d.ts.map +1 -1
- package/dist/types/loaders/micro-agent.d.ts.map +1 -1
- package/package.json +55 -59
- package/src/common/config/__mocks__/info.js +3 -0
- package/src/common/config/__mocks__/init.js +3 -0
- package/src/common/config/__mocks__/loader-config.js +2 -0
- package/src/common/config/__mocks__/runtime.js +2 -0
- package/src/common/config/{state/configurable.js → configurable.js} +1 -1
- package/src/common/config/{state/info.js → info.js} +1 -1
- package/src/common/config/{state/init.js → init.js} +5 -5
- package/src/common/config/{state/loader-config.js → loader-config.js} +1 -1
- package/src/common/config/{state/runtime.js → runtime.js} +19 -5
- package/src/common/constants/agent-constants.js +2 -0
- package/src/common/drain/drain.js +5 -2
- package/src/common/event-emitter/contextual-ee.js +1 -1
- package/src/common/harvest/harvest.js +7 -21
- package/src/common/serialize/bel-serializer.js +5 -7
- package/src/common/session/session-entity.js +2 -2
- package/src/common/timing/__mocks__/time-keeper.js +6 -2
- package/src/common/timing/time-keeper.js +15 -5
- package/src/common/util/__mocks__/console.js +1 -0
- package/src/common/util/__mocks__/obfuscate.js +5 -8
- package/src/common/util/console.js +2 -0
- package/src/common/util/obfuscate.js +94 -50
- package/src/common/util/text.js +6 -0
- package/src/common/window/__mocks__/nreum.js +1 -1
- package/src/common/window/nreum.js +2 -1
- package/src/common/wrap/wrap-websocket.js +73 -0
- package/src/features/ajax/aggregate/chunk.js +3 -2
- package/src/features/ajax/aggregate/index.js +20 -19
- package/src/features/ajax/constants.js +0 -2
- package/src/features/ajax/instrument/distributed-tracing.js +2 -1
- package/src/features/ajax/instrument/index.js +9 -5
- package/src/features/generic_events/aggregate/index.js +43 -37
- package/src/features/generic_events/constants.js +2 -0
- package/src/features/generic_events/instrument/index.js +3 -1
- package/src/features/jserrors/aggregate/index.js +14 -4
- package/src/features/jserrors/instrument/index.js +2 -0
- package/src/features/logging/aggregate/index.js +39 -31
- package/src/features/logging/constants.js +0 -2
- package/src/features/logging/instrument/index.js +2 -0
- package/src/features/logging/shared/utils.js +1 -1
- package/src/features/metrics/aggregate/index.js +24 -9
- package/src/features/metrics/aggregate/websocket-detection.js +31 -0
- package/src/features/metrics/constants.js +3 -0
- package/src/features/metrics/instrument/index.js +13 -1
- package/src/features/page_action/instrument/index.js +5 -0
- package/src/features/page_view_event/aggregate/index.js +8 -23
- package/src/features/page_view_event/instrument/index.js +2 -0
- package/src/features/page_view_timing/aggregate/index.js +14 -16
- package/src/features/page_view_timing/instrument/index.js +2 -0
- package/src/features/session_replay/aggregate/index.js +13 -9
- package/src/features/session_replay/constants.js +0 -4
- package/src/features/session_replay/index.js +1 -7
- package/src/features/session_replay/instrument/index.js +3 -4
- package/src/features/session_replay/shared/recorder-events.js +27 -20
- package/src/features/session_replay/shared/recorder.js +13 -6
- package/src/features/session_replay/shared/stylesheet-evaluator.js +2 -2
- package/src/features/session_replay/shared/utils.js +3 -2
- package/src/features/session_trace/aggregate/index.js +16 -7
- package/src/features/session_trace/aggregate/trace/storage.js +6 -1
- package/src/features/session_trace/instrument/index.js +4 -1
- package/src/features/soft_navigations/aggregate/ajax-node.js +1 -1
- package/src/features/soft_navigations/aggregate/index.js +13 -15
- package/src/features/soft_navigations/aggregate/initial-page-load-interaction.js +1 -1
- package/src/features/soft_navigations/aggregate/interaction.js +1 -1
- package/src/features/soft_navigations/instrument/index.js +9 -5
- package/src/features/spa/aggregate/index.js +11 -18
- package/src/features/spa/aggregate/interaction.js +5 -3
- package/src/features/spa/aggregate/serializer.js +1 -1
- package/src/features/spa/constants.js +2 -2
- package/src/features/spa/instrument/index.js +9 -3
- package/src/features/utils/agent-session.js +3 -1
- package/src/features/utils/aggregate-base.js +10 -2
- package/src/features/utils/event-buffer.js +126 -0
- package/src/features/utils/feature-gates.js +1 -1
- package/src/features/utils/instrument-base.js +2 -1
- package/src/loaders/agent-base.js +2 -2
- package/src/loaders/agent.js +7 -2
- package/src/loaders/api/api.js +2 -1
- package/src/loaders/api/apiAsync.js +1 -1
- package/src/loaders/configure/configure.js +4 -1
- package/src/loaders/features/enabled-features.js +1 -1
- package/src/loaders/micro-agent.js +4 -1
- package/dist/cjs/common/config/config.js +0 -76
- package/dist/cjs/common/config/state/originals.js +0 -8
- package/dist/cjs/common/wrap/index.js +0 -61
- package/dist/esm/common/config/config.js +0 -11
- package/dist/esm/common/config/state/originals.js +0 -2
- package/dist/esm/common/wrap/index.js +0 -13
- package/dist/types/common/config/config.d.ts +0 -13
- package/dist/types/common/config/config.d.ts.map +0 -1
- package/dist/types/common/config/state/configurable.d.ts.map +0 -1
- package/dist/types/common/config/state/info.d.ts.map +0 -1
- package/dist/types/common/config/state/init.d.ts.map +0 -1
- package/dist/types/common/config/state/loader-config.d.ts.map +0 -1
- package/dist/types/common/config/state/originals.d.ts +0 -2
- package/dist/types/common/config/state/originals.d.ts.map +0 -1
- package/dist/types/common/config/state/runtime.d.ts.map +0 -1
- package/dist/types/common/wrap/index.d.ts +0 -10
- package/dist/types/common/wrap/index.d.ts.map +0 -1
- package/src/common/config/__mocks__/config.js +0 -11
- package/src/common/config/config.js +0 -12
- package/src/common/config/state/originals.js +0 -3
- package/src/common/wrap/index.js +0 -16
- /package/dist/types/common/config/{state/configurable.d.ts → configurable.d.ts} +0 -0
- /package/dist/types/common/config/{state/info.d.ts → info.d.ts} +0 -0
- /package/dist/types/common/config/{state/init.d.ts → init.d.ts} +0 -0
- /package/dist/types/common/config/{state/loader-config.d.ts → loader-config.d.ts} +0 -0
- /package/dist/types/common/config/{state/runtime.d.ts → runtime.d.ts} +0 -0
|
@@ -10,7 +10,8 @@ var _denyList = require("../../../common/deny-list/deny-list");
|
|
|
10
10
|
var _navTiming = require("../../../common/timing/nav-timing");
|
|
11
11
|
var _uniqueId = require("../../../common/ids/unique-id");
|
|
12
12
|
var _interaction = require("./interaction");
|
|
13
|
-
var
|
|
13
|
+
var _init = require("../../../common/config/init");
|
|
14
|
+
var _runtime = require("../../../common/config/runtime");
|
|
14
15
|
var _eventListenerOpts = require("../../../common/event-listener/event-listener-opts");
|
|
15
16
|
var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
|
|
16
17
|
var _serializer = require("./serializer");
|
|
@@ -21,11 +22,12 @@ var _aggregateBase = require("../../utils/aggregate-base");
|
|
|
21
22
|
var _firstContentfulPaint = require("../../../common/vitals/first-contentful-paint");
|
|
22
23
|
var _firstPaint = require("../../../common/vitals/first-paint");
|
|
23
24
|
var _bundleId = require("../../../common/ids/bundle-id");
|
|
24
|
-
var
|
|
25
|
+
var _runtime2 = require("../../../common/constants/runtime");
|
|
25
26
|
var _handle = require("../../../common/event-emitter/handle");
|
|
26
27
|
var _constants2 = require("../../metrics/constants");
|
|
27
28
|
var _drain = require("../../../common/drain/drain");
|
|
28
29
|
var _console = require("../../../common/util/console");
|
|
30
|
+
var _eventBuffer = require("../../utils/event-buffer");
|
|
29
31
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
30
32
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
31
33
|
/*
|
|
@@ -53,10 +55,10 @@ const {
|
|
|
53
55
|
originalSetTimeout
|
|
54
56
|
} = CONSTANTS;
|
|
55
57
|
class Aggregate extends _aggregateBase.AggregateBase {
|
|
56
|
-
static featureName =
|
|
58
|
+
static featureName = FEATURE_NAME;
|
|
57
59
|
constructor(agentIdentifier, aggregator) {
|
|
58
60
|
super(agentIdentifier, aggregator, FEATURE_NAME);
|
|
59
|
-
const agentRuntime = (0,
|
|
61
|
+
const agentRuntime = (0, _runtime.getRuntime)(agentIdentifier);
|
|
60
62
|
this.state = {
|
|
61
63
|
initialPageURL: agentRuntime.origin,
|
|
62
64
|
lastSeenUrl: agentRuntime.origin,
|
|
@@ -70,11 +72,10 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
70
72
|
pageLoaded: false,
|
|
71
73
|
childTime: 0,
|
|
72
74
|
depth: 0,
|
|
73
|
-
harvestTimeSeconds: (0,
|
|
74
|
-
interactionsToHarvest:
|
|
75
|
-
interactionsSent: [],
|
|
75
|
+
harvestTimeSeconds: (0, _init.getConfigurationValue)(agentIdentifier, 'spa.harvestTimeSeconds') || 10,
|
|
76
|
+
interactionsToHarvest: new _eventBuffer.EventBuffer(),
|
|
76
77
|
// The below feature flag is used to disable the SPA ajax fix for specific customers, see https://new-relic.atlassian.net/browse/NR-172169
|
|
77
|
-
disableSpaFix: ((0,
|
|
78
|
+
disableSpaFix: ((0, _init.getConfigurationValue)(agentIdentifier, 'feature_flags') || []).indexOf('disable-spa-fix') > -1
|
|
78
79
|
};
|
|
79
80
|
let scheduler;
|
|
80
81
|
this.serializer = new _serializer.Serializer(this);
|
|
@@ -125,8 +126,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
125
126
|
// | click ending: | 65 | 50 | | | |
|
|
126
127
|
// click fn-end | 70 | 0 | 0 | 70 | 20 |
|
|
127
128
|
|
|
128
|
-
this.waitForFlags(['spa']).then(
|
|
129
|
-
let [spaFlag] = _ref;
|
|
129
|
+
this.waitForFlags(['spa']).then(([spaFlag]) => {
|
|
130
130
|
if (spaFlag) {
|
|
131
131
|
scheduler = new _harvestScheduler.HarvestScheduler('events', {
|
|
132
132
|
onFinished: onHarvestFinished,
|
|
@@ -193,7 +193,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
193
193
|
var ev = args[0];
|
|
194
194
|
var evName = ev.type;
|
|
195
195
|
var eventNode = ev["__nrNode:".concat(_bundleId.bundleId)];
|
|
196
|
-
if (!state.pageLoaded && (evName === 'load' && eventSource === window ||
|
|
196
|
+
if (!state.pageLoaded && (evName === 'load' && eventSource === window || _runtime2.loadedAsDeferredBrowserScript)) {
|
|
197
197
|
state.pageLoaded = true;
|
|
198
198
|
// set to null so prevNode is set correctly
|
|
199
199
|
this.prevNode = state.currentNode = null;
|
|
@@ -628,14 +628,9 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
628
628
|
}
|
|
629
629
|
const classThis = this;
|
|
630
630
|
function onHarvestStarted(options) {
|
|
631
|
-
if (state.interactionsToHarvest.
|
|
632
|
-
var payload = serializer.serializeMultiple(state.interactionsToHarvest, 0, _navTiming.navTimingValues);
|
|
633
|
-
if (options.retry)
|
|
634
|
-
state.interactionsToHarvest.forEach(function (interaction) {
|
|
635
|
-
state.interactionsSent.push(interaction);
|
|
636
|
-
});
|
|
637
|
-
}
|
|
638
|
-
state.interactionsToHarvest = [];
|
|
631
|
+
if (!state.interactionsToHarvest.hasData || classThis.blocked) return {};
|
|
632
|
+
var payload = serializer.serializeMultiple(state.interactionsToHarvest.buffer, 0, _navTiming.navTimingValues);
|
|
633
|
+
if (options.retry) state.interactionsToHarvest.hold();else state.interactionsToHarvest.clear();
|
|
639
634
|
return {
|
|
640
635
|
body: {
|
|
641
636
|
e: payload
|
|
@@ -643,12 +638,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
643
638
|
};
|
|
644
639
|
}
|
|
645
640
|
function onHarvestFinished(result) {
|
|
646
|
-
if (result.sent && result.retry && state.
|
|
647
|
-
state.interactionsSent.forEach(function (interaction) {
|
|
648
|
-
state.interactionsToHarvest.unshift(interaction);
|
|
649
|
-
});
|
|
650
|
-
state.interactionsSent = [];
|
|
651
|
-
}
|
|
641
|
+
if (result.sent && result.retry && state.interactionsToHarvest.held.hasData) state.interactionsToHarvest.unhold();else state.interactionsToHarvest.held.clear();
|
|
652
642
|
}
|
|
653
643
|
baseEE.on('spa-jserror', function (type, name, params, metrics) {
|
|
654
644
|
if (!state.currentNode) return;
|
|
@@ -696,7 +686,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
696
686
|
interaction.root.attrs.firstContentfulPaint = _firstContentfulPaint.firstContentfulPaint.current.value;
|
|
697
687
|
}
|
|
698
688
|
baseEE.emit('interactionDone', [interaction, true]);
|
|
699
|
-
state.interactionsToHarvest.
|
|
689
|
+
state.interactionsToHarvest.add(interaction);
|
|
700
690
|
let smCategory;
|
|
701
691
|
if (interaction.root?.attrs?.trigger === 'initialPageLoad') smCategory = 'InitialPageLoad';else if (interaction.routeChange) smCategory = 'RouteChange';else smCategory = 'Custom';
|
|
702
692
|
(0, _handle.handle)(_constants2.SUPPORTABILITY_METRIC_CHANNEL, ["Spa/Interaction/".concat(smCategory, "/Duration/Ms"), Math.max((interaction.root?.end || 0) - (interaction.root?.start || 0), 0)], undefined, _features.FEATURE_NAMES.metrics, baseEE);
|
|
@@ -704,7 +694,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
704
694
|
if (!scheduler) (0, _console.warn)(19);
|
|
705
695
|
}
|
|
706
696
|
function isEnabled() {
|
|
707
|
-
var enabled = (0,
|
|
697
|
+
var enabled = (0, _init.getConfigurationValue)(agentIdentifier, 'spa.enabled');
|
|
708
698
|
return enabled !== false;
|
|
709
699
|
}
|
|
710
700
|
}
|
|
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Interaction = Interaction;
|
|
7
|
-
var
|
|
7
|
+
var _info = require("../../../common/config/info");
|
|
8
|
+
var _runtime = require("../../../common/config/runtime");
|
|
9
|
+
var _nreum = require("../../../common/window/nreum");
|
|
8
10
|
var _contextualEe = require("../../../common/event-emitter/contextual-ee");
|
|
9
11
|
var _interactionNode = require("./interaction-node");
|
|
10
12
|
/*
|
|
@@ -12,8 +14,8 @@ var _interactionNode = require("./interaction-node");
|
|
|
12
14
|
* SPDX-License-Identifier: Apache-2.0
|
|
13
15
|
*/
|
|
14
16
|
|
|
15
|
-
var originalSetTimeout =
|
|
16
|
-
var originalClearTimeout =
|
|
17
|
+
var originalSetTimeout = (0, _nreum.gosNREUMOriginals)().o.ST;
|
|
18
|
+
var originalClearTimeout = (0, _nreum.gosNREUMOriginals)().o.CT;
|
|
17
19
|
var lastId = {};
|
|
18
20
|
function Interaction(eventName, timestamp, url, routeName, onFinished, agentIdentifier) {
|
|
19
21
|
this.agentIdentifier = agentIdentifier;
|
|
@@ -32,7 +34,7 @@ function Interaction(eventName, timestamp, url, routeName, onFinished, agentIden
|
|
|
32
34
|
var root = this.root = new _interactionNode.InteractionNode(this, null, 'interaction', timestamp);
|
|
33
35
|
var attrs = root.attrs;
|
|
34
36
|
attrs.trigger = eventName;
|
|
35
|
-
attrs.initialPageURL = (0,
|
|
37
|
+
attrs.initialPageURL = (0, _runtime.getRuntime)(agentIdentifier).origin;
|
|
36
38
|
attrs.oldRoute = routeName;
|
|
37
39
|
attrs.newURL = attrs.oldURL = url;
|
|
38
40
|
attrs.custom = {};
|
|
@@ -87,8 +89,7 @@ InteractionPrototype.finish = function finishInteraction() {
|
|
|
87
89
|
if (this.onFinished) {
|
|
88
90
|
this.onFinished(this);
|
|
89
91
|
}
|
|
90
|
-
Object.entries((0,
|
|
91
|
-
let [attr, value] = _ref;
|
|
92
|
+
Object.entries((0, _info.getInfo)(interaction.agentIdentifier).jsAttributes || {}).forEach(([attr, value]) => {
|
|
92
93
|
if (!(attr in customAttrs)) customAttrs[attr] = value;
|
|
93
94
|
});
|
|
94
95
|
root.end = endTimestamp;
|
|
@@ -7,7 +7,7 @@ exports.Serializer = void 0;
|
|
|
7
7
|
var _cleanUrl = require("../../../common/url/clean-url");
|
|
8
8
|
var _belSerializer = require("../../../common/serialize/bel-serializer");
|
|
9
9
|
var _sharedContext = require("../../../common/context/shared-context");
|
|
10
|
-
var
|
|
10
|
+
var _info = require("../../../common/config/info");
|
|
11
11
|
/*
|
|
12
12
|
* Copyright 2020 New Relic Corporation. All rights reserved.
|
|
13
13
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -27,7 +27,7 @@ class Serializer extends _sharedContext.SharedContext {
|
|
|
27
27
|
this.firstTimestamp = undefined;
|
|
28
28
|
}
|
|
29
29
|
serializeMultiple(interactions, offset, navTiming) {
|
|
30
|
-
const info = (0,
|
|
30
|
+
const info = (0, _info.getInfo)(this.sharedContext.agentIdentifier);
|
|
31
31
|
var addString = (0, _belSerializer.getAddStringContext)(this.sharedContext.agentIdentifier);
|
|
32
32
|
var serialized = 'bel.7';
|
|
33
33
|
interactions.forEach(interaction => {
|
|
@@ -37,7 +37,7 @@ class Serializer extends _sharedContext.SharedContext {
|
|
|
37
37
|
return serialized;
|
|
38
38
|
}
|
|
39
39
|
serializeSingle(root, offset, navTiming, isRouteChange) {
|
|
40
|
-
const info = (0,
|
|
40
|
+
const info = (0, _info.getInfo)(this.sharedContext.agentIdentifier);
|
|
41
41
|
var addString = (0, _belSerializer.getAddStringContext)(this.sharedContext.agentIdentifier);
|
|
42
42
|
var serialized = 'bel.7;' + this.serializeInteraction(root, offset, navTiming, isRouteChange, addString, info);
|
|
43
43
|
this.firstTimestamp = undefined;
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.originalSetTimeout = exports.START = exports.SPA_NODE = exports.REMAINING = exports.MAX_TIMER_BUDGET = exports.JS_TIME = exports.JSONP_NODE = exports.JSONP_END = exports.INTERACTION_EVENTS = exports.INTERACTION_API = exports.INTERACTION = exports.FN_START = exports.FN_END = exports.FETCH_START = exports.FETCH_DONE = exports.FETCH_BODY = exports.FETCH = exports.FEATURE_NAME = exports.END = exports.CB_START = exports.CB_END = exports.BODY = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _nreum = require("../../common/window/nreum");
|
|
8
8
|
var _features = require("../../loaders/features/features");
|
|
9
9
|
const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.spa;
|
|
10
10
|
const INTERACTION_EVENTS = exports.INTERACTION_EVENTS = ['click', 'submit', 'keypress', 'keydown', 'keyup', 'change'];
|
|
@@ -21,7 +21,7 @@ const FETCH_START = exports.FETCH_START = 'fetch-start';
|
|
|
21
21
|
const FETCH_DONE = exports.FETCH_DONE = 'fetch-done';
|
|
22
22
|
const FETCH_BODY = exports.FETCH_BODY = 'fetch-body-';
|
|
23
23
|
const JSONP_END = exports.JSONP_END = 'jsonp-end';
|
|
24
|
-
const originalSetTimeout = exports.originalSetTimeout =
|
|
24
|
+
const originalSetTimeout = exports.originalSetTimeout = (0, _nreum.gosNREUMOriginals)().o.ST;
|
|
25
25
|
const START = exports.START = '-start';
|
|
26
26
|
const END = exports.END = '-end';
|
|
27
27
|
const BODY = exports.BODY = '-body';
|
|
@@ -3,14 +3,20 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.Instrument = void 0;
|
|
7
|
-
var _wrap = require("../../../common/wrap");
|
|
6
|
+
exports.Spa = exports.Instrument = void 0;
|
|
8
7
|
var _eventListenerOpts = require("../../../common/event-listener/event-listener-opts");
|
|
9
8
|
var _instrumentBase = require("../../utils/instrument-base");
|
|
10
9
|
var CONSTANTS = _interopRequireWildcard(require("../constants"));
|
|
11
10
|
var _runtime = require("../../../common/constants/runtime");
|
|
12
11
|
var _now = require("../../../common/timing/now");
|
|
13
12
|
var _handle = require("../../../common/event-emitter/handle");
|
|
13
|
+
var _wrapJsonp = require("../../../common/wrap/wrap-jsonp");
|
|
14
|
+
var _wrapPromise = require("../../../common/wrap/wrap-promise");
|
|
15
|
+
var _wrapTimer = require("../../../common/wrap/wrap-timer");
|
|
16
|
+
var _wrapXhr = require("../../../common/wrap/wrap-xhr");
|
|
17
|
+
var _wrapFetch = require("../../../common/wrap/wrap-fetch");
|
|
18
|
+
var _wrapHistory = require("../../../common/wrap/wrap-history");
|
|
19
|
+
var _wrapMutation = require("../../../common/wrap/wrap-mutation");
|
|
14
20
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
21
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
16
22
|
/*
|
|
@@ -31,12 +37,9 @@ const {
|
|
|
31
37
|
FN_END
|
|
32
38
|
} = CONSTANTS;
|
|
33
39
|
class Instrument extends _instrumentBase.InstrumentBase {
|
|
34
|
-
static featureName =
|
|
35
|
-
constructor(agentIdentifier, aggregator) {
|
|
36
|
-
var _this;
|
|
37
|
-
let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
40
|
+
static featureName = FEATURE_NAME;
|
|
41
|
+
constructor(agentIdentifier, aggregator, auto = true) {
|
|
38
42
|
super(agentIdentifier, aggregator, FEATURE_NAME, auto);
|
|
39
|
-
_this = this;
|
|
40
43
|
if (!_runtime.isBrowserScope) return; // SPA not supported outside web env
|
|
41
44
|
|
|
42
45
|
try {
|
|
@@ -45,25 +48,22 @@ class Instrument extends _instrumentBase.InstrumentBase {
|
|
|
45
48
|
let depth = 0;
|
|
46
49
|
let startHash;
|
|
47
50
|
const tracerEE = this.ee.get('tracer');
|
|
48
|
-
const jsonpEE = (0,
|
|
49
|
-
const promiseEE = (0,
|
|
50
|
-
const timerEE = (0,
|
|
51
|
-
const xhrEE = (0,
|
|
51
|
+
const jsonpEE = (0, _wrapJsonp.wrapJsonP)(this.ee);
|
|
52
|
+
const promiseEE = (0, _wrapPromise.wrapPromise)(this.ee);
|
|
53
|
+
const timerEE = (0, _wrapTimer.wrapTimer)(this.ee);
|
|
54
|
+
const xhrEE = (0, _wrapXhr.wrapXhr)(this.ee);
|
|
52
55
|
const eventsEE = this.ee.get('events'); // wrapXhr will call wrapEvents
|
|
53
|
-
const fetchEE = (0,
|
|
54
|
-
const historyEE = (0,
|
|
55
|
-
const mutationEE = (0,
|
|
56
|
+
const fetchEE = (0, _wrapFetch.wrapFetch)(this.ee);
|
|
57
|
+
const historyEE = (0, _wrapHistory.wrapHistory)(this.ee);
|
|
58
|
+
const mutationEE = (0, _wrapMutation.wrapMutation)(this.ee);
|
|
56
59
|
this.ee.on(FN_START, startTimestamp);
|
|
57
60
|
promiseEE.on(CB_START, startTimestamp);
|
|
58
61
|
jsonpEE.on(CB_START, startTimestamp);
|
|
59
62
|
this.ee.on(FN_END, endTimestamp);
|
|
60
63
|
promiseEE.on(CB_END, endTimestamp);
|
|
61
64
|
jsonpEE.on(CB_END, endTimestamp);
|
|
62
|
-
this.ee.on('fn-err',
|
|
63
|
-
|
|
64
|
-
args[_key] = arguments[_key];
|
|
65
|
-
}
|
|
66
|
-
if (!args[2]?.__newrelic?.[agentIdentifier]) (0, _handle.handle)('function-err', [...args], undefined, _this.featureName, _this.ee);
|
|
65
|
+
this.ee.on('fn-err', (...args) => {
|
|
66
|
+
if (!args[2]?.__newrelic?.[agentIdentifier]) (0, _handle.handle)('function-err', [...args], undefined, this.featureName, this.ee);
|
|
67
67
|
});
|
|
68
68
|
this.ee.buffer([FN_START, FN_END, 'xhr-resolved'], this.featureName);
|
|
69
69
|
eventsEE.buffer([FN_START], this.featureName);
|
|
@@ -119,4 +119,5 @@ class Instrument extends _instrumentBase.InstrumentBase {
|
|
|
119
119
|
this.abortHandler = undefined; // weakly allow this abort op to run only once
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
|
-
exports.Instrument = Instrument;
|
|
122
|
+
exports.Instrument = Instrument;
|
|
123
|
+
const Spa = exports.Spa = Instrument;
|
|
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.setupAgentSession = setupAgentSession;
|
|
7
|
-
var
|
|
7
|
+
var _info = require("../../common/config/info");
|
|
8
|
+
var _init = require("../../common/config/init");
|
|
9
|
+
var _runtime = require("../../common/config/runtime");
|
|
8
10
|
var _drain = require("../../common/drain/drain");
|
|
9
11
|
var _contextualEe = require("../../common/event-emitter/contextual-ee");
|
|
10
12
|
var _registerHandler = require("../../common/event-emitter/register-handler");
|
|
@@ -13,9 +15,9 @@ var _localStorage = require("../../common/storage/local-storage.js");
|
|
|
13
15
|
var _constants = require("../../common/session/constants");
|
|
14
16
|
let ranOnce = 0;
|
|
15
17
|
function setupAgentSession(agentIdentifier) {
|
|
16
|
-
const agentRuntime = (0,
|
|
18
|
+
const agentRuntime = (0, _runtime.getRuntime)(agentIdentifier);
|
|
17
19
|
if (ranOnce++) return agentRuntime.session;
|
|
18
|
-
const sessionInit = (0,
|
|
20
|
+
const sessionInit = (0, _init.getConfiguration)(agentIdentifier).session;
|
|
19
21
|
agentRuntime.session = new _sessionEntity.SessionEntity({
|
|
20
22
|
agentIdentifier,
|
|
21
23
|
key: _constants.DEFAULT_KEY,
|
|
@@ -26,7 +28,7 @@ function setupAgentSession(agentIdentifier) {
|
|
|
26
28
|
|
|
27
29
|
// Retrieve & re-add all of the persisted setCustomAttribute|setUserId k-v from previous page load(s), if any was stored.
|
|
28
30
|
const customSessionData = agentRuntime.session.state.custom;
|
|
29
|
-
const agentInfo = (0,
|
|
31
|
+
const agentInfo = (0, _info.getInfo)(agentIdentifier);
|
|
30
32
|
if (customSessionData) {
|
|
31
33
|
agentInfo.jsAttributes = {
|
|
32
34
|
...agentInfo.jsAttributes,
|
|
@@ -5,15 +5,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.AggregateBase = void 0;
|
|
7
7
|
var _featureBase = require("./feature-base");
|
|
8
|
-
var
|
|
8
|
+
var _info = require("../../common/config/info");
|
|
9
|
+
var _runtime = require("../../common/config/runtime");
|
|
9
10
|
var _configure = require("../../loaders/configure/configure");
|
|
10
11
|
var _nreum = require("../../common/window/nreum");
|
|
11
12
|
var _drain = require("../../common/drain/drain");
|
|
12
13
|
var _featureFlags = require("../../common/util/feature-flags");
|
|
14
|
+
var _obfuscate = require("../../common/util/obfuscate");
|
|
13
15
|
class AggregateBase extends _featureBase.FeatureBase {
|
|
14
|
-
constructor() {
|
|
15
|
-
super(...
|
|
16
|
+
constructor(...args) {
|
|
17
|
+
super(...args);
|
|
16
18
|
this.checkConfiguration();
|
|
19
|
+
this.obfuscator = (0, _runtime.getRuntime)(this.agentIdentifier).obfuscator;
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
/**
|
|
@@ -21,14 +24,12 @@ class AggregateBase extends _featureBase.FeatureBase {
|
|
|
21
24
|
* @param {string[]} flagNames
|
|
22
25
|
* @returns {Promise}
|
|
23
26
|
*/
|
|
24
|
-
waitForFlags() {
|
|
25
|
-
let flagNames = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
27
|
+
waitForFlags(flagNames = []) {
|
|
26
28
|
const flagsPromise = new Promise((resolve, reject) => {
|
|
27
29
|
if (_featureFlags.activatedFeatures[this.agentIdentifier]) {
|
|
28
30
|
resolve(buildOutput(_featureFlags.activatedFeatures[this.agentIdentifier]));
|
|
29
31
|
} else {
|
|
30
|
-
this.ee.on('rumresp',
|
|
31
|
-
let resp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
32
|
+
this.ee.on('rumresp', (resp = {}) => {
|
|
32
33
|
resolve(buildOutput(resp));
|
|
33
34
|
});
|
|
34
35
|
}
|
|
@@ -56,7 +57,7 @@ class AggregateBase extends _featureBase.FeatureBase {
|
|
|
56
57
|
*/
|
|
57
58
|
checkConfiguration() {
|
|
58
59
|
// NOTE: This check has to happen at aggregator load time
|
|
59
|
-
if (!(0,
|
|
60
|
+
if (!(0, _info.isValid)(this.agentIdentifier)) {
|
|
60
61
|
const cdn = (0, _nreum.gosCDN)();
|
|
61
62
|
let jsAttributes = {
|
|
62
63
|
...cdn.info?.jsAttributes
|
|
@@ -64,7 +65,7 @@ class AggregateBase extends _featureBase.FeatureBase {
|
|
|
64
65
|
try {
|
|
65
66
|
jsAttributes = {
|
|
66
67
|
...jsAttributes,
|
|
67
|
-
...(0,
|
|
68
|
+
...(0, _info.getInfo)(this.agentIdentifier)?.jsAttributes
|
|
68
69
|
};
|
|
69
70
|
} catch (err) {
|
|
70
71
|
// do nothing
|
|
@@ -77,9 +78,13 @@ class AggregateBase extends _featureBase.FeatureBase {
|
|
|
77
78
|
...cdn.info,
|
|
78
79
|
jsAttributes
|
|
79
80
|
},
|
|
80
|
-
runtime: (0,
|
|
81
|
+
runtime: (0, _runtime.getRuntime)(this.agentIdentifier)
|
|
81
82
|
});
|
|
82
83
|
}
|
|
84
|
+
const runtime = (0, _runtime.getRuntime)(this.agentIdentifier);
|
|
85
|
+
if (!runtime.obfuscator) {
|
|
86
|
+
runtime.obfuscator = new _obfuscate.Obfuscator(this.agentIdentifier);
|
|
87
|
+
}
|
|
83
88
|
}
|
|
84
89
|
}
|
|
85
90
|
exports.AggregateBase = AggregateBase;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.EventBuffer = void 0;
|
|
7
|
+
var _stringify = require("../../common/util/stringify");
|
|
8
|
+
var _agentConstants = require("../../common/constants/agent-constants");
|
|
9
|
+
/**
|
|
10
|
+
* A container that keeps an event buffer and size with helper methods
|
|
11
|
+
* @typedef {Object} EventBuffer
|
|
12
|
+
* @property {number} size
|
|
13
|
+
* @property {*[]} buffer
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* A container that holds, evaluates, and merges event objects for harvesting
|
|
18
|
+
*/
|
|
19
|
+
class EventBuffer {
|
|
20
|
+
/** @type {Object[]} */
|
|
21
|
+
#buffer = [];
|
|
22
|
+
/** @type {number} */
|
|
23
|
+
#bytes = 0;
|
|
24
|
+
/** @type {EventBuffer} */
|
|
25
|
+
#held;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @param {number=} maxPayloadSize
|
|
30
|
+
*/
|
|
31
|
+
constructor(maxPayloadSize = _agentConstants.MAX_PAYLOAD_SIZE) {
|
|
32
|
+
this.maxPayloadSize = maxPayloadSize;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* buffer is read only, use the helper methods to add or clear buffer data
|
|
37
|
+
*/
|
|
38
|
+
get buffer() {
|
|
39
|
+
return this.#buffer;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* bytes is read only, use the helper methods to add or clear buffer data
|
|
44
|
+
*/
|
|
45
|
+
get bytes() {
|
|
46
|
+
return this.#bytes;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* held is another event buffer
|
|
51
|
+
*/
|
|
52
|
+
get held() {
|
|
53
|
+
this.#held ??= new EventBuffer(this.maxPayloadSize);
|
|
54
|
+
return this.#held;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Returns a boolean indicating whether the current size and buffer contain valid data
|
|
59
|
+
* @returns {boolean}
|
|
60
|
+
*/
|
|
61
|
+
get hasData() {
|
|
62
|
+
return this.buffer.length > 0 && this.bytes > 0;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Adds an event object to the buffer while tallying size
|
|
67
|
+
* @param {Object} event the event object to add to the buffer
|
|
68
|
+
* @returns {EventBuffer} returns the event buffer for chaining
|
|
69
|
+
*/
|
|
70
|
+
add(event) {
|
|
71
|
+
const size = (0, _stringify.stringify)(event).length;
|
|
72
|
+
if (!this.canMerge(size)) return this;
|
|
73
|
+
this.#buffer.push(event);
|
|
74
|
+
this.#bytes += size;
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* clear the buffer data
|
|
80
|
+
* @returns {EventBuffer}
|
|
81
|
+
*/
|
|
82
|
+
clear() {
|
|
83
|
+
this.#bytes = 0;
|
|
84
|
+
this.#buffer = [];
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Hold the buffer data in a new (child) EventBuffer (.held) to unblock the main buffer.
|
|
90
|
+
* This action clears the main buffer
|
|
91
|
+
* @returns {EventBuffer}
|
|
92
|
+
*/
|
|
93
|
+
hold() {
|
|
94
|
+
this.held.merge(this);
|
|
95
|
+
this.clear();
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Prepend the held EventBuffer (.held) back into the main buffer
|
|
101
|
+
* This action clears the held buffer
|
|
102
|
+
* @returns {EventBuffer}
|
|
103
|
+
*/
|
|
104
|
+
unhold() {
|
|
105
|
+
this.merge(this.held, true);
|
|
106
|
+
this.held.clear();
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Merges an EventBuffer into this EventBuffer
|
|
112
|
+
* @param {EventBuffer} events an EventBuffer intended to merge with this EventBuffer
|
|
113
|
+
* @param {boolean} prepend if true, the supplied events will be prepended before the events of this class
|
|
114
|
+
* @returns {EventBuffer} returns the event buffer for chaining
|
|
115
|
+
*/
|
|
116
|
+
merge(eventBuffer, prepend = false) {
|
|
117
|
+
if (!this.canMerge(eventBuffer.bytes)) return this;
|
|
118
|
+
this.#buffer = prepend ? [...eventBuffer.buffer, ...this.#buffer] : [...this.#buffer, ...eventBuffer.buffer];
|
|
119
|
+
this.#bytes += eventBuffer.#bytes;
|
|
120
|
+
return this;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Returns a boolean indicating the resulting size of a merge would be valid. Compares against the maxPayloadSize provided at initialization time.
|
|
125
|
+
* @param {number} size
|
|
126
|
+
* @returns {boolean}
|
|
127
|
+
*/
|
|
128
|
+
canMerge(size) {
|
|
129
|
+
return this.bytes + (size || Infinity) < this.maxPayloadSize;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.EventBuffer = EventBuffer;
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.canEnableSessionTracking = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _init = require("../../common/config/init");
|
|
8
8
|
var _runtime = require("../../common/constants/runtime");
|
|
9
9
|
/**
|
|
10
10
|
* Checks if session can be tracked, affects session entity and dependent features
|
|
@@ -12,6 +12,6 @@ var _runtime = require("../../common/constants/runtime");
|
|
|
12
12
|
* @returns {boolean}
|
|
13
13
|
*/
|
|
14
14
|
const canEnableSessionTracking = agentId => {
|
|
15
|
-
return _runtime.isBrowserScope && (0,
|
|
15
|
+
return _runtime.isBrowserScope && (0, _init.getConfigurationValue)(agentId, 'privacy.cookies_enabled') === true;
|
|
16
16
|
};
|
|
17
17
|
exports.canEnableSessionTracking = canEnableSessionTracking;
|
|
@@ -10,7 +10,7 @@ var _load = require("../../common/window/load");
|
|
|
10
10
|
var _runtime = require("../../common/constants/runtime");
|
|
11
11
|
var _console = require("../../common/util/console");
|
|
12
12
|
var _features = require("../../loaders/features/features");
|
|
13
|
-
var
|
|
13
|
+
var _init = require("../../common/config/init");
|
|
14
14
|
var _utils = require("../session_replay/shared/utils");
|
|
15
15
|
var _featureGates = require("./feature-gates");
|
|
16
16
|
var _invoke = require("../../common/util/invoke");
|
|
@@ -34,8 +34,7 @@ class InstrumentBase extends _featureBase.FeatureBase {
|
|
|
34
34
|
* of its pooled instrumentation data handled by the agent's centralized drain functionality, rather than draining
|
|
35
35
|
* immediately. Primarily useful for fine-grained control in tests.
|
|
36
36
|
*/
|
|
37
|
-
constructor(agentIdentifier, aggregator, featureName) {
|
|
38
|
-
let auto = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
37
|
+
constructor(agentIdentifier, aggregator, featureName, auto = true) {
|
|
39
38
|
super(agentIdentifier, aggregator, featureName);
|
|
40
39
|
this.auto = auto;
|
|
41
40
|
|
|
@@ -51,11 +50,12 @@ class InstrumentBase extends _featureBase.FeatureBase {
|
|
|
51
50
|
/**
|
|
52
51
|
* @type {Promise} Assigned immediately after @see importAggregator runs. Serves as a signal for when the inner async fn finishes execution. Useful for features to await
|
|
53
52
|
* one another if there are inter-features dependencies.
|
|
53
|
+
* TODO: This is only used for the SPA feature component tests and should be refactored out.
|
|
54
54
|
*/
|
|
55
55
|
this.onAggregateImported = undefined;
|
|
56
56
|
|
|
57
57
|
/** used in conjunction with newrelic.start() to defer harvesting in features */
|
|
58
|
-
if ((0,
|
|
58
|
+
if ((0, _init.getConfigurationValue)(this.agentIdentifier, "".concat(this.featureName, ".autoStart")) === false) this.auto = false;
|
|
59
59
|
/** if the feature requires opt-in (!auto-start), it will get registered once the api has been called */
|
|
60
60
|
if (this.auto) (0, _drain.registerDrain)(agentIdentifier, featureName);else {
|
|
61
61
|
this.ee.on('manual-start-all', (0, _invoke.single)(() => {
|
|
@@ -74,8 +74,7 @@ class InstrumentBase extends _featureBase.FeatureBase {
|
|
|
74
74
|
* @param {Object} [argsObjFromInstrument] - any values or references to pass down to aggregate
|
|
75
75
|
* @returns void
|
|
76
76
|
*/
|
|
77
|
-
importAggregator() {
|
|
78
|
-
let argsObjFromInstrument = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
77
|
+
importAggregator(argsObjFromInstrument = {}) {
|
|
79
78
|
if (this.featAggregate || !this.auto) return;
|
|
80
79
|
let loadedSuccessfully;
|
|
81
80
|
this.onAggregateImported = new Promise(resolve => {
|
|
@@ -88,7 +87,7 @@ class InstrumentBase extends _featureBase.FeatureBase {
|
|
|
88
87
|
// would require some setup before certain features start
|
|
89
88
|
const {
|
|
90
89
|
setupAgentSession
|
|
91
|
-
} = await Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
90
|
+
} = await Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "session-manager" */'./agent-session')));
|
|
92
91
|
session = setupAgentSession(this.agentIdentifier);
|
|
93
92
|
}
|
|
94
93
|
} catch (e) {
|
|
@@ -109,7 +108,7 @@ class InstrumentBase extends _featureBase.FeatureBase {
|
|
|
109
108
|
}
|
|
110
109
|
const {
|
|
111
110
|
lazyFeatureLoader
|
|
112
|
-
} = await Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
111
|
+
} = await Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "lazy-feature-loader" */'./lazy-feature-loader')));
|
|
113
112
|
const {
|
|
114
113
|
Aggregate
|
|
115
114
|
} = await lazyFeatureLoader(this.featureName, 'aggregate');
|
|
@@ -22,27 +22,27 @@ function lazyFeatureLoader(featureName, featurePart) {
|
|
|
22
22
|
if (featurePart === 'aggregate') {
|
|
23
23
|
switch (featureName) {
|
|
24
24
|
case _features.FEATURE_NAMES.ajax:
|
|
25
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
25
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "ajax-aggregate" */'../ajax/aggregate')));
|
|
26
26
|
case _features.FEATURE_NAMES.jserrors:
|
|
27
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
27
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "jserrors-aggregate" */'../jserrors/aggregate')));
|
|
28
28
|
case _features.FEATURE_NAMES.genericEvents:
|
|
29
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
29
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "generic_events-aggregate" */'../generic_events/aggregate')));
|
|
30
30
|
case _features.FEATURE_NAMES.logging:
|
|
31
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
31
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "logging-aggregate" */'../logging/aggregate')));
|
|
32
32
|
case _features.FEATURE_NAMES.metrics:
|
|
33
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
33
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "metrics-aggregate" */'../metrics/aggregate')));
|
|
34
34
|
case _features.FEATURE_NAMES.pageViewEvent:
|
|
35
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
35
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "page_view_event-aggregate" */'../page_view_event/aggregate')));
|
|
36
36
|
case _features.FEATURE_NAMES.pageViewTiming:
|
|
37
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
37
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "page_view_timing-aggregate" */'../page_view_timing/aggregate')));
|
|
38
38
|
case _features.FEATURE_NAMES.sessionReplay:
|
|
39
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
39
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "session_replay-aggregate" */'../session_replay/aggregate')));
|
|
40
40
|
case _features.FEATURE_NAMES.sessionTrace:
|
|
41
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
41
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "session_trace-aggregate" */'../session_trace/aggregate')));
|
|
42
42
|
case _features.FEATURE_NAMES.spa:
|
|
43
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
43
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "spa-aggregate" */'../spa/aggregate')));
|
|
44
44
|
case _features.FEATURE_NAMES.softNav:
|
|
45
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
45
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require(/* webpackChunkName: "basic-spa-aggregate" */'../soft_navigations/aggregate')));
|
|
46
46
|
default:
|
|
47
47
|
throw new Error("Attempted to load unsupported agent feature: ".concat(featureName, " ").concat(featurePart));
|
|
48
48
|
}
|