@newrelic/browser-agent 1.263.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 +32 -0
- package/README.md +2 -2
- package/dist/cjs/cdn/experimental.js +3 -7
- package/dist/cjs/cdn/pro.js +2 -2
- package/dist/cjs/cdn/spa.js +2 -2
- package/dist/cjs/common/aggregate/aggregator.js +2 -3
- 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} +11 -8
- 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/constants/runtime.js +1 -3
- 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 +12 -18
- 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 +30 -57
- package/dist/cjs/common/serialize/bel-serializer.js +6 -11
- package/dist/cjs/common/session/session-entity.js +10 -13
- 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 +3 -7
- 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 -21
- 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 +5 -7
- 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 +19 -22
- 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 +14 -12
- package/dist/cjs/features/generic_events/aggregate/index.js +128 -0
- package/dist/cjs/features/generic_events/constants.js +10 -0
- package/dist/cjs/features/generic_events/index.js +12 -0
- package/dist/cjs/features/generic_events/instrument/index.js +27 -0
- package/dist/cjs/features/jserrors/aggregate/index.js +25 -44
- package/dist/cjs/features/jserrors/instrument/index.js +4 -4
- package/dist/cjs/features/logging/aggregate/index.js +33 -36
- package/dist/cjs/features/logging/constants.js +2 -3
- package/dist/cjs/features/logging/instrument/index.js +5 -6
- 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 +34 -17
- 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 +12 -4
- package/dist/cjs/features/page_action/instrument/index.js +14 -10
- package/dist/cjs/features/page_view_event/aggregate/index.js +19 -39
- package/dist/cjs/features/page_view_event/aggregate/initialized-features.js +1 -1
- package/dist/cjs/features/page_view_event/instrument/index.js +4 -4
- package/dist/cjs/features/page_view_timing/aggregate/index.js +23 -39
- package/dist/cjs/features/page_view_timing/instrument/index.js +4 -4
- package/dist/cjs/features/session_replay/aggregate/index.js +35 -42
- package/dist/cjs/features/session_replay/constants.js +1 -5
- package/dist/cjs/features/session_replay/instrument/index.js +5 -9
- 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 +2 -2
- package/dist/cjs/features/session_replay/shared/utils.js +5 -4
- package/dist/cjs/features/session_trace/aggregate/index.js +25 -42
- package/dist/cjs/features/session_trace/aggregate/trace/storage.js +5 -3
- package/dist/cjs/features/session_trace/instrument/index.js +8 -7
- package/dist/cjs/features/soft_navigations/aggregate/ajax-node.js +1 -1
- package/dist/cjs/features/soft_navigations/aggregate/index.js +22 -30
- package/dist/cjs/features/soft_navigations/aggregate/initial-page-load-interaction.js +2 -2
- package/dist/cjs/features/soft_navigations/aggregate/interaction.js +4 -5
- package/dist/cjs/features/soft_navigations/instrument/index.js +14 -13
- package/dist/cjs/features/spa/aggregate/index.js +17 -28
- package/dist/cjs/features/spa/aggregate/interaction.js +7 -6
- package/dist/cjs/features/spa/aggregate/serializer.js +4 -5
- package/dist/cjs/features/spa/constants.js +2 -2
- package/dist/cjs/features/spa/instrument/index.js +20 -19
- package/dist/cjs/features/utils/agent-session.js +6 -4
- package/dist/cjs/features/utils/aggregate-base.js +17 -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 +12 -12
- package/dist/cjs/features/utils/nr1-debugger.js +1 -3
- package/dist/cjs/index.js +21 -0
- package/dist/cjs/loaders/agent-base.js +4 -12
- package/dist/cjs/loaders/agent.js +7 -2
- package/dist/cjs/loaders/api/api.js +23 -35
- package/dist/cjs/loaders/api/apiAsync.js +10 -13
- package/dist/cjs/loaders/browser-agent.js +4 -3
- package/dist/cjs/loaders/configure/configure.js +16 -15
- package/dist/cjs/loaders/features/enabled-features.js +2 -2
- package/dist/cjs/loaders/features/features.js +8 -4
- package/dist/cjs/loaders/micro-agent.js +16 -15
- package/dist/esm/cdn/experimental.js +2 -5
- package/dist/esm/cdn/pro.js +2 -2
- package/dist/esm/cdn/spa.js +2 -2
- package/dist/esm/common/aggregate/aggregator.js +2 -3
- 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} +11 -8
- 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/constants/runtime.js +0 -2
- 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 +12 -18
- 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 +24 -51
- package/dist/esm/common/serialize/bel-serializer.js +6 -11
- package/dist/esm/common/session/session-entity.js +10 -13
- 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 +3 -7
- 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 -21
- 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 +5 -7
- 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 +16 -19
- 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 +10 -8
- package/dist/esm/features/generic_events/aggregate/index.js +120 -0
- package/dist/esm/features/generic_events/constants.js +4 -0
- package/dist/esm/features/generic_events/index.js +1 -0
- package/dist/esm/features/generic_events/instrument/index.js +20 -0
- package/dist/esm/features/jserrors/aggregate/index.js +20 -39
- package/dist/esm/features/jserrors/instrument/index.js +3 -3
- package/dist/esm/features/logging/aggregate/index.js +31 -34
- package/dist/esm/features/logging/constants.js +1 -2
- package/dist/esm/features/logging/instrument/index.js +4 -5
- 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 +28 -11
- 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 +12 -4
- package/dist/esm/features/page_action/instrument/index.js +14 -9
- package/dist/esm/features/page_view_event/aggregate/index.js +17 -37
- package/dist/esm/features/page_view_event/aggregate/initialized-features.js +1 -1
- package/dist/esm/features/page_view_event/instrument/index.js +3 -3
- package/dist/esm/features/page_view_timing/aggregate/index.js +20 -36
- package/dist/esm/features/page_view_timing/instrument/index.js +3 -3
- package/dist/esm/features/session_replay/aggregate/index.js +25 -32
- 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 +5 -8
- 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 +2 -2
- package/dist/esm/features/session_replay/shared/utils.js +3 -2
- package/dist/esm/features/session_trace/aggregate/index.js +20 -37
- package/dist/esm/features/session_trace/aggregate/trace/storage.js +5 -3
- package/dist/esm/features/session_trace/instrument/index.js +5 -4
- package/dist/esm/features/soft_navigations/aggregate/ajax-node.js +1 -1
- package/dist/esm/features/soft_navigations/aggregate/index.js +21 -29
- package/dist/esm/features/soft_navigations/aggregate/initial-page-load-interaction.js +1 -1
- package/dist/esm/features/soft_navigations/aggregate/interaction.js +2 -3
- package/dist/esm/features/soft_navigations/instrument/index.js +11 -10
- package/dist/esm/features/spa/aggregate/index.js +11 -22
- package/dist/esm/features/spa/aggregate/interaction.js +6 -5
- package/dist/esm/features/spa/aggregate/serializer.js +2 -3
- package/dist/esm/features/spa/constants.js +2 -2
- package/dist/esm/features/spa/instrument/index.js +12 -11
- package/dist/esm/features/utils/agent-session.js +3 -1
- package/dist/esm/features/utils/aggregate-base.js +16 -9
- 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 +12 -12
- package/dist/esm/features/utils/nr1-debugger.js +1 -3
- package/dist/esm/index.js +3 -0
- package/dist/esm/loaders/agent-base.js +4 -12
- package/dist/esm/loaders/agent.js +7 -2
- package/dist/esm/loaders/api/api.js +18 -30
- package/dist/esm/loaders/api/apiAsync.js +3 -6
- package/dist/esm/loaders/browser-agent.js +3 -2
- package/dist/esm/loaders/configure/configure.js +9 -8
- package/dist/esm/loaders/features/enabled-features.js +1 -1
- package/dist/esm/loaders/features/features.js +8 -4
- package/dist/esm/loaders/micro-agent.js +11 -10
- package/dist/types/common/aggregate/aggregator.d.ts.map +1 -1
- 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/constants/runtime.d.ts +0 -1
- package/dist/types/common/constants/runtime.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/url/encode.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/submit-data.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/{page_action → generic_events}/aggregate/index.d.ts +10 -10
- package/dist/types/features/generic_events/aggregate/index.d.ts.map +1 -0
- package/dist/types/features/generic_events/constants.d.ts +4 -0
- package/dist/types/features/generic_events/constants.d.ts.map +1 -0
- package/dist/types/features/generic_events/index.d.ts +2 -0
- package/dist/types/features/generic_events/index.d.ts.map +1 -0
- package/dist/types/features/generic_events/instrument/index.d.ts +7 -0
- package/dist/types/features/generic_events/instrument/index.d.ts.map +1 -0
- 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 +9 -4
- 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/aggregate/serializer.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/index.d.ts +3 -0
- package/dist/types/loaders/agent-base.d.ts +1 -2
- package/dist/types/loaders/agent-base.d.ts.map +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/browser-agent.d.ts.map +1 -1
- package/dist/types/loaders/configure/configure.d.ts.map +1 -1
- package/dist/types/loaders/features/features.d.ts +1 -0
- package/dist/types/loaders/features/features.d.ts.map +1 -1
- package/dist/types/loaders/micro-agent.d.ts.map +1 -1
- package/package.json +67 -52
- package/src/cdn/experimental.js +2 -4
- package/src/cdn/pro.js +2 -2
- package/src/cdn/spa.js +2 -2
- package/src/common/aggregate/aggregator.js +2 -3
- 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} +7 -6
- 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/constants/runtime.js +0 -2
- package/src/common/drain/drain.js +8 -6
- package/src/common/event-emitter/contextual-ee.js +1 -1
- package/src/common/harvest/harvest.js +10 -24
- package/src/common/serialize/bel-serializer.js +6 -9
- package/src/common/session/session-entity.js +4 -4
- package/src/common/timing/__mocks__/time-keeper.js +6 -2
- package/src/common/timing/time-keeper.js +15 -5
- package/src/common/url/encode.js +2 -3
- 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/submit-data.js +0 -1
- 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 +139 -0
- package/src/features/generic_events/constants.js +5 -0
- package/src/features/generic_events/index.js +1 -0
- package/src/features/generic_events/instrument/index.js +24 -0
- package/src/features/jserrors/aggregate/index.js +18 -9
- 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 +11 -6
- package/src/features/page_view_event/aggregate/index.js +8 -23
- package/src/features/page_view_event/aggregate/initialized-features.js +1 -1
- package/src/features/page_view_event/instrument/index.js +2 -0
- package/src/features/page_view_timing/aggregate/index.js +15 -18
- 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 +12 -20
- package/src/features/spa/aggregate/interaction.js +6 -5
- package/src/features/spa/aggregate/serializer.js +2 -3
- 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 +13 -3
- 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/features/utils/lazy-feature-loader.js +2 -2
- package/src/index.js +3 -0
- package/src/loaders/agent-base.js +2 -6
- package/src/loaders/agent.js +7 -2
- package/src/loaders/api/api.js +3 -2
- package/src/loaders/api/apiAsync.js +2 -2
- package/src/loaders/browser-agent.js +5 -3
- package/src/loaders/configure/configure.js +9 -2
- package/src/loaders/features/enabled-features.js +1 -1
- package/src/loaders/features/features.js +8 -4
- package/src/loaders/micro-agent.js +5 -2
- package/dist/cjs/cdn/polyfills/lite.js +0 -16
- package/dist/cjs/cdn/polyfills/pro.js +0 -21
- package/dist/cjs/cdn/polyfills/spa.js +0 -22
- package/dist/cjs/cdn/polyfills.js +0 -24
- package/dist/cjs/common/config/config.js +0 -76
- package/dist/cjs/common/config/state/originals.js +0 -8
- package/dist/cjs/common/util/map-own.js +0 -31
- package/dist/cjs/common/wrap/index.js +0 -61
- package/dist/cjs/features/page_action/aggregate/index.js +0 -121
- package/dist/esm/cdn/polyfills/lite.js +0 -14
- package/dist/esm/cdn/polyfills/pro.js +0 -19
- package/dist/esm/cdn/polyfills/spa.js +0 -20
- package/dist/esm/cdn/polyfills.js +0 -27
- package/dist/esm/common/config/config.js +0 -11
- package/dist/esm/common/config/state/originals.js +0 -2
- package/dist/esm/common/util/map-own.js +0 -24
- package/dist/esm/common/wrap/index.js +0 -13
- package/dist/esm/features/page_action/aggregate/index.js +0 -114
- package/dist/types/cdn/polyfills/lite.d.ts +0 -2
- package/dist/types/cdn/polyfills/lite.d.ts.map +0 -1
- package/dist/types/cdn/polyfills/pro.d.ts +0 -2
- package/dist/types/cdn/polyfills/pro.d.ts.map +0 -1
- package/dist/types/cdn/polyfills/spa.d.ts +0 -2
- package/dist/types/cdn/polyfills/spa.d.ts.map +0 -1
- package/dist/types/cdn/polyfills.d.ts +0 -2
- package/dist/types/cdn/polyfills.d.ts.map +0 -1
- 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/util/map-own.d.ts +0 -3
- package/dist/types/common/util/map-own.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/dist/types/features/page_action/aggregate/index.d.ts.map +0 -1
- package/src/cdn/polyfills/lite.js +0 -20
- package/src/cdn/polyfills/pro.js +0 -30
- package/src/cdn/polyfills/spa.js +0 -32
- package/src/cdn/polyfills.js +0 -27
- 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/util/map-own.js +0 -22
- package/src/common/wrap/index.js +0 -16
- package/src/features/page_action/aggregate/index.js +0 -114
- /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
|
@@ -15,10 +15,7 @@ var _eventListenerOpts = require("../event-listener/event-listener-opts");
|
|
|
15
15
|
* @param {boolean} [toHiddenOnly=false] - only execute the 'cb' when the vis is changing to the hidden state; no arg is passed to 'cb' if used
|
|
16
16
|
* @returns void
|
|
17
17
|
*/
|
|
18
|
-
function subscribeToVisibilityChange(cb) {
|
|
19
|
-
let toHiddenOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
20
|
-
let capture = arguments.length > 2 ? arguments[2] : undefined;
|
|
21
|
-
let abortSignal = arguments.length > 3 ? arguments[3] : undefined;
|
|
18
|
+
function subscribeToVisibilityChange(cb, toHiddenOnly = false, capture, abortSignal) {
|
|
22
19
|
(0, _eventListenerOpts.documentAddEventListener)('visibilitychange', handleVisibilityChange, capture, abortSignal);
|
|
23
20
|
function handleVisibilityChange() {
|
|
24
21
|
if (toHiddenOnly) {
|
|
@@ -83,14 +83,11 @@ function wrapEvents(sharedEE) {
|
|
|
83
83
|
* @param {Function} cb - the function to run on the ancestral object once found, accepts an object as a arg
|
|
84
84
|
* @param {Array} rest - [optional] any additional arguments to pass to the cb
|
|
85
85
|
*/
|
|
86
|
-
function findEventListenerProtoAndCb(object, cb) {
|
|
86
|
+
function findEventListenerProtoAndCb(object, cb, ...rest) {
|
|
87
87
|
let step = object;
|
|
88
88
|
while (typeof step === 'object' && !Object.prototype.hasOwnProperty.call(step, ADD_EVENT_LISTENER)) {
|
|
89
89
|
step = Object.getPrototypeOf(step);
|
|
90
90
|
}
|
|
91
|
-
for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
92
|
-
rest[_key - 2] = arguments[_key];
|
|
93
|
-
}
|
|
94
91
|
if (step) cb(step, ...rest);
|
|
95
92
|
}
|
|
96
93
|
|
|
@@ -111,13 +111,10 @@ function wrapPromise(sharedEE) {
|
|
|
111
111
|
|
|
112
112
|
// Note that this wrapping affects the same originals.PR (prototype) object.
|
|
113
113
|
const prevPromiseOrigThen = prevPromiseObj.prototype.then;
|
|
114
|
-
prevPromiseObj.prototype.then = function wrappedThen() {
|
|
114
|
+
prevPromiseObj.prototype.then = function wrappedThen(...args) {
|
|
115
115
|
var originalThis = this;
|
|
116
116
|
var ctx = getContext(originalThis);
|
|
117
117
|
ctx.promise = originalThis;
|
|
118
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
119
|
-
args[_key] = arguments[_key];
|
|
120
|
-
}
|
|
121
118
|
args[0] = promiseWrapper(args[0], 'cb-', ctx, null, false);
|
|
122
119
|
args[1] = promiseWrapper(args[1], 'cb-', ctx, null, false);
|
|
123
120
|
const origFnCallWithThis = prevPromiseOrigThen.apply(this, args);
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.WEBSOCKET_TAG = exports.ADD_EVENT_LISTENER_TAG = void 0;
|
|
7
|
+
exports.wrapWebSocket = wrapWebSocket;
|
|
8
|
+
var _runtime = require("../constants/runtime");
|
|
9
|
+
var _now = require("../timing/now");
|
|
10
|
+
var _load = require("../window/load");
|
|
11
|
+
var _uniqueId = require("../ids/unique-id");
|
|
12
|
+
var _nreum = require("../window/nreum");
|
|
13
|
+
const WEBSOCKET_TAG = exports.WEBSOCKET_TAG = 'websocket-';
|
|
14
|
+
const ADD_EVENT_LISTENER_TAG = exports.ADD_EVENT_LISTENER_TAG = 'addEventListener';
|
|
15
|
+
const wrapped = {};
|
|
16
|
+
function wrapWebSocket(sharedEE) {
|
|
17
|
+
if (wrapped[sharedEE.debugId]++) return sharedEE;
|
|
18
|
+
const originals = (0, _nreum.gosNREUMOriginals)().o;
|
|
19
|
+
if (!originals.WS) return sharedEE;
|
|
20
|
+
function reporter(socketId) {
|
|
21
|
+
const createdAt = (0, _now.now)();
|
|
22
|
+
return function (message, ...data) {
|
|
23
|
+
const timestamp = data[0]?.timeStamp || (0, _now.now)();
|
|
24
|
+
const isLoaded = (0, _load.checkState)();
|
|
25
|
+
sharedEE.emit(WEBSOCKET_TAG + message, [timestamp, timestamp - createdAt, isLoaded, socketId, ...data]);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
Object.defineProperty(WrappedWebSocket, 'name', {
|
|
29
|
+
value: 'WebSocket'
|
|
30
|
+
});
|
|
31
|
+
function WrappedWebSocket() {
|
|
32
|
+
const ws = new originals.WS(...arguments);
|
|
33
|
+
const socketId = (0, _uniqueId.generateRandomHexString)(6);
|
|
34
|
+
const report = reporter(socketId);
|
|
35
|
+
report('new');
|
|
36
|
+
const events = ['message', 'error', 'open', 'close'];
|
|
37
|
+
/** add event listeners */
|
|
38
|
+
events.forEach(evt => {
|
|
39
|
+
ws.addEventListener(evt, function (e) {
|
|
40
|
+
report(ADD_EVENT_LISTENER_TAG, {
|
|
41
|
+
eventType: evt,
|
|
42
|
+
event: e
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
/** could also observe the on-events for runtime processing, but not implemented yet */
|
|
48
|
+
|
|
49
|
+
/** observe the static method send, but noteably not close, as that is currently observed with the event listener */;
|
|
50
|
+
['send'].forEach(wrapStaticProperty);
|
|
51
|
+
function wrapStaticProperty(prop) {
|
|
52
|
+
const originalProp = ws[prop];
|
|
53
|
+
if (originalProp) {
|
|
54
|
+
Object.defineProperty(proxiedProp, 'name', {
|
|
55
|
+
value: prop
|
|
56
|
+
});
|
|
57
|
+
function proxiedProp() {
|
|
58
|
+
report(prop, ...arguments);
|
|
59
|
+
try {
|
|
60
|
+
return originalProp.apply(this, arguments);
|
|
61
|
+
} catch (err) {
|
|
62
|
+
report(prop + '-err', ...arguments);
|
|
63
|
+
// rethrow error so we don't effect execution by observing.
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
ws[prop] = proxiedProp;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return ws;
|
|
71
|
+
}
|
|
72
|
+
_runtime.globalScope.WebSocket = WrappedWebSocket;
|
|
73
|
+
return sharedEE;
|
|
74
|
+
}
|
|
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _belSerializer = require("../../../common/serialize/bel-serializer");
|
|
8
|
-
var
|
|
8
|
+
var _info = require("../../../common/config/info");
|
|
9
|
+
var _agentConstants = require("../../../common/constants/agent-constants");
|
|
9
10
|
class Chunk {
|
|
10
11
|
constructor(events, aggregateInstance) {
|
|
11
12
|
this.addString = (0, _belSerializer.getAddStringContext)(aggregateInstance.agentIdentifier); // pass agentIdentifier here
|
|
@@ -28,7 +29,7 @@ class Chunk {
|
|
|
28
29
|
let insert = '2,';
|
|
29
30
|
|
|
30
31
|
// Since configuration objects (like info) are created new each time they are set, we have to grab the current pointer to the attr object here.
|
|
31
|
-
const jsAttributes = (0,
|
|
32
|
+
const jsAttributes = (0, _info.getInfo)(aggregateInstance.agentIdentifier).jsAttributes;
|
|
32
33
|
|
|
33
34
|
// add custom attributes
|
|
34
35
|
// gql decorators are added as custom attributes to alleviate need for new BEL schema
|
|
@@ -44,7 +45,7 @@ class Chunk {
|
|
|
44
45
|
if (i + 1 < events.length) insert += ';';
|
|
45
46
|
this.payload += insert;
|
|
46
47
|
}
|
|
47
|
-
this.tooBig = this.payload.length * 2 >
|
|
48
|
+
this.tooBig = this.payload.length * 2 > _agentConstants.MAX_PAYLOAD_SIZE;
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
exports.default = Chunk;
|
|
@@ -19,11 +19,10 @@ var _typeCheck = require("../../../common/util/type-check");
|
|
|
19
19
|
* @param {string} query Ajax request query param string
|
|
20
20
|
* @returns {GQLMetadata | undefined}
|
|
21
21
|
*/
|
|
22
|
-
function parseGQL(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
22
|
+
function parseGQL({
|
|
23
|
+
body,
|
|
24
|
+
query
|
|
25
|
+
} = {}) {
|
|
27
26
|
if (!body && !query) return;
|
|
28
27
|
try {
|
|
29
28
|
const gqlBody = parseBatchGQL(parseGQLContents(body));
|
|
@@ -7,7 +7,9 @@ exports.Aggregate = void 0;
|
|
|
7
7
|
var _registerHandler = require("../../../common/event-emitter/register-handler");
|
|
8
8
|
var _stringify = require("../../../common/util/stringify");
|
|
9
9
|
var _handle = require("../../../common/event-emitter/handle");
|
|
10
|
-
var
|
|
10
|
+
var _info = require("../../../common/config/info");
|
|
11
|
+
var _init = require("../../../common/config/init");
|
|
12
|
+
var _runtime = require("../../../common/config/runtime");
|
|
11
13
|
var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
|
|
12
14
|
var _denyList = require("../../../common/deny-list/deny-list");
|
|
13
15
|
var _constants = require("../constants");
|
|
@@ -17,6 +19,7 @@ var _aggregateBase = require("../../utils/aggregate-base");
|
|
|
17
19
|
var _gql = require("./gql");
|
|
18
20
|
var _nreum = require("../../../common/window/nreum");
|
|
19
21
|
var _chunk = _interopRequireDefault(require("./chunk"));
|
|
22
|
+
var _eventBuffer = require("../../utils/event-buffer");
|
|
20
23
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
24
|
/*
|
|
22
25
|
* Copyright 2020 New Relic Corporation. All rights reserved.
|
|
@@ -30,29 +33,27 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
30
33
|
#agentInit;
|
|
31
34
|
constructor(agentIdentifier, aggregator) {
|
|
32
35
|
super(agentIdentifier, aggregator, _constants.FEATURE_NAME);
|
|
33
|
-
this.#agentInfo = (0,
|
|
34
|
-
this.#agentRuntime = (0,
|
|
35
|
-
this.#agentInit = (0,
|
|
36
|
+
this.#agentInfo = (0, _info.getInfo)(agentIdentifier);
|
|
37
|
+
this.#agentRuntime = (0, _runtime.getRuntime)(agentIdentifier);
|
|
38
|
+
this.#agentInit = (0, _init.getConfiguration)(agentIdentifier);
|
|
36
39
|
const harvestTimeSeconds = this.#agentInit.ajax.harvestTimeSeconds || 10;
|
|
37
|
-
this.MAX_PAYLOAD_SIZE = this.#agentInit.ajax.maxPayloadSize || 1000000;
|
|
38
40
|
(0, _denyList.setDenyList)(this.#agentRuntime.denyList);
|
|
39
|
-
this.ajaxEvents =
|
|
41
|
+
this.ajaxEvents = new _eventBuffer.EventBuffer();
|
|
40
42
|
this.spaAjaxEvents = {};
|
|
41
|
-
this.sentAjaxEvents = [];
|
|
42
43
|
const classThis = this;
|
|
43
44
|
|
|
44
45
|
// --- v Used by old spa feature
|
|
45
46
|
this.ee.on('interactionDone', (interaction, wasSaved) => {
|
|
46
|
-
if (!this.spaAjaxEvents[interaction.id]) return;
|
|
47
|
+
if (!this.spaAjaxEvents[interaction.id]?.hasData) return;
|
|
47
48
|
if (!wasSaved) {
|
|
48
49
|
// if the ixn was saved, then its ajax reqs are part of the payload whereas if it was discarded, it should still be harvested in the ajax feature itself
|
|
49
|
-
this.spaAjaxEvents[interaction.id]
|
|
50
|
+
this.ajaxEvents.merge(this.spaAjaxEvents[interaction.id]);
|
|
50
51
|
}
|
|
51
52
|
delete this.spaAjaxEvents[interaction.id];
|
|
52
53
|
});
|
|
53
54
|
// --- ^
|
|
54
55
|
// --- v Used by new soft nav
|
|
55
|
-
(0, _registerHandler.registerHandler)('returnAjax', event => this.ajaxEvents.
|
|
56
|
+
(0, _registerHandler.registerHandler)('returnAjax', event => this.ajaxEvents.add(event), this.featureName, this.ee);
|
|
56
57
|
// --- ^
|
|
57
58
|
(0, _registerHandler.registerHandler)('xhr', function () {
|
|
58
59
|
// the EE-drain system not only switches "this" but also passes a new EventContext with info. Should consider platform refactor to another system which passes a mutable context around separately and predictably to avoid problems like this.
|
|
@@ -112,7 +113,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
112
113
|
if (ctx.dt) {
|
|
113
114
|
event.spanId = ctx.dt.spanId;
|
|
114
115
|
event.traceId = ctx.dt.traceId;
|
|
115
|
-
event.spanTimestamp = this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(ctx.dt.timestamp);
|
|
116
|
+
event.spanTimestamp = Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(ctx.dt.timestamp));
|
|
116
117
|
}
|
|
117
118
|
|
|
118
119
|
// parsed from the AJAX body, looking for operationName param & parsing query for operationType
|
|
@@ -128,31 +129,27 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
128
129
|
} else if (ctx.spaNode) {
|
|
129
130
|
// For old spa (when running), if the ajax happened inside an interaction, hold it until the interaction finishes
|
|
130
131
|
const interactionId = ctx.spaNode.interaction.id;
|
|
131
|
-
this.spaAjaxEvents[interactionId]
|
|
132
|
-
this.spaAjaxEvents[interactionId].
|
|
132
|
+
this.spaAjaxEvents[interactionId] ??= new _eventBuffer.EventBuffer();
|
|
133
|
+
this.spaAjaxEvents[interactionId].add(event);
|
|
133
134
|
} else {
|
|
134
|
-
this.ajaxEvents.
|
|
135
|
+
this.ajaxEvents.add(event);
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
138
|
prepareHarvest(options) {
|
|
138
139
|
options = options || {};
|
|
139
|
-
if (this.ajaxEvents.length === 0) return null;
|
|
140
|
-
const payload = this.#getPayload(this.ajaxEvents);
|
|
140
|
+
if (this.ajaxEvents.buffer.length === 0) return null;
|
|
141
|
+
const payload = this.#getPayload(this.ajaxEvents.buffer);
|
|
141
142
|
const payloadObjs = [];
|
|
142
143
|
for (let i = 0; i < payload.length; i++) payloadObjs.push({
|
|
143
144
|
body: {
|
|
144
145
|
e: payload[i]
|
|
145
146
|
}
|
|
146
147
|
});
|
|
147
|
-
if (options.retry) this.
|
|
148
|
-
this.ajaxEvents = [];
|
|
148
|
+
if (options.retry) this.ajaxEvents.hold();else this.ajaxEvents.clear();
|
|
149
149
|
return payloadObjs;
|
|
150
150
|
}
|
|
151
151
|
onEventsHarvestFinished(result) {
|
|
152
|
-
if (result.retry && this.
|
|
153
|
-
this.ajaxEvents.unshift(...this.sentAjaxEvents);
|
|
154
|
-
this.sentAjaxEvents = [];
|
|
155
|
-
}
|
|
152
|
+
if (result.retry && this.ajaxEvents.held.hasData) this.ajaxEvents.unhold();else this.ajaxEvents.held.clear();
|
|
156
153
|
}
|
|
157
154
|
#getPayload(events, numberOfChunks) {
|
|
158
155
|
numberOfChunks = numberOfChunks || 1;
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.FEATURE_NAME = void 0;
|
|
7
7
|
var _features = require("../../loaders/features/features");
|
|
8
|
-
const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.ajax;
|
|
9
|
-
const MAX_PAYLOAD_SIZE = exports.MAX_PAYLOAD_SIZE = 1000000;
|
|
8
|
+
const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.ajax;
|
|
@@ -4,7 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.DT = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _init = require("../../../common/config/init");
|
|
8
|
+
var _loaderConfig = require("../../../common/config/loader-config");
|
|
8
9
|
var _uniqueId = require("../../../common/ids/unique-id");
|
|
9
10
|
var _parseUrl = require("../../../common/url/parse-url");
|
|
10
11
|
var _runtime = require("../../../common/constants/runtime");
|
|
@@ -22,7 +23,7 @@ class DT {
|
|
|
22
23
|
if (!this.shouldGenerateTrace(parsedOrigin)) {
|
|
23
24
|
return null;
|
|
24
25
|
}
|
|
25
|
-
var loaderConfig = (0,
|
|
26
|
+
var loaderConfig = (0, _loaderConfig.getLoaderConfig)(this.agentIdentifier);
|
|
26
27
|
if (!loaderConfig) {
|
|
27
28
|
return null;
|
|
28
29
|
}
|
|
@@ -90,9 +91,9 @@ class DT {
|
|
|
90
91
|
isAllowedOrigin(parsedOrigin) {
|
|
91
92
|
var allowed = false;
|
|
92
93
|
var dtConfig = {};
|
|
93
|
-
var dt = (0,
|
|
94
|
+
var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
|
|
94
95
|
if (dt) {
|
|
95
|
-
dtConfig = (0,
|
|
96
|
+
dtConfig = (0, _init.getConfiguration)(this.agentIdentifier).distributed_tracing;
|
|
96
97
|
}
|
|
97
98
|
if (parsedOrigin.sameOrigin) {
|
|
98
99
|
allowed = true;
|
|
@@ -108,7 +109,7 @@ class DT {
|
|
|
108
109
|
return allowed;
|
|
109
110
|
}
|
|
110
111
|
isDtEnabled() {
|
|
111
|
-
var dt = (0,
|
|
112
|
+
var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
|
|
112
113
|
if (dt) {
|
|
113
114
|
return !!dt.enabled;
|
|
114
115
|
}
|
|
@@ -117,21 +118,21 @@ class DT {
|
|
|
117
118
|
|
|
118
119
|
// exclude the newrelic header for same-origin calls
|
|
119
120
|
excludeNewrelicHeader() {
|
|
120
|
-
var dt = (0,
|
|
121
|
+
var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
|
|
121
122
|
if (dt) {
|
|
122
123
|
return !!dt.exclude_newrelic_header;
|
|
123
124
|
}
|
|
124
125
|
return false;
|
|
125
126
|
}
|
|
126
127
|
useNewrelicHeaderForCors() {
|
|
127
|
-
var dt = (0,
|
|
128
|
+
var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
|
|
128
129
|
if (dt) {
|
|
129
130
|
return dt.cors_use_newrelic_header !== false;
|
|
130
131
|
}
|
|
131
132
|
return false;
|
|
132
133
|
}
|
|
133
134
|
useTraceContextHeadersForCors() {
|
|
134
|
-
var dt = (0,
|
|
135
|
+
var dt = (0, _init.getConfigurationValue)(this.agentIdentifier, 'distributed_tracing');
|
|
135
136
|
if (dt) {
|
|
136
137
|
return !!dt.cors_use_tracecontext_headers;
|
|
137
138
|
}
|
|
@@ -3,14 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.Instrument = void 0;
|
|
7
|
-
var
|
|
6
|
+
exports.Instrument = exports.Ajax = void 0;
|
|
7
|
+
var _nreum = require("../../../common/window/nreum");
|
|
8
|
+
var _loaderConfig = require("../../../common/config/loader-config");
|
|
8
9
|
var _handle = require("../../../common/event-emitter/handle");
|
|
9
10
|
var _id = require("../../../common/ids/id");
|
|
10
11
|
var _runtime = require("../../../common/constants/runtime");
|
|
11
12
|
var _dataSize = require("../../../common/util/data-size");
|
|
12
13
|
var _eventListenerOpts = require("../../../common/event-listener/event-listener-opts");
|
|
13
|
-
var
|
|
14
|
+
var _wrapXhr = require("../../../common/wrap/wrap-xhr");
|
|
15
|
+
var _wrapFetch = require("../../../common/wrap/wrap-fetch");
|
|
14
16
|
var _parseUrl = require("../../../common/url/parse-url");
|
|
15
17
|
var _distributedTracing = require("./distributed-tracing");
|
|
16
18
|
var _responseSize = require("./response-size");
|
|
@@ -27,12 +29,11 @@ var _denyList = require("../../../common/deny-list/deny-list");
|
|
|
27
29
|
|
|
28
30
|
var handlers = ['load', 'error', 'abort', 'timeout'];
|
|
29
31
|
var handlersLen = handlers.length;
|
|
30
|
-
var origRequest =
|
|
31
|
-
var origXHR =
|
|
32
|
+
var origRequest = (0, _nreum.gosNREUMOriginals)().o.REQ;
|
|
33
|
+
var origXHR = (0, _nreum.gosNREUMOriginals)().o.XHR;
|
|
32
34
|
class Instrument extends _instrumentBase.InstrumentBase {
|
|
33
35
|
static featureName = _constants.FEATURE_NAME;
|
|
34
|
-
constructor(agentIdentifier, aggregator) {
|
|
35
|
-
let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
36
|
+
constructor(agentIdentifier, aggregator, auto = true) {
|
|
36
37
|
super(agentIdentifier, aggregator, _constants.FEATURE_NAME, auto);
|
|
37
38
|
this.dt = new _distributedTracing.DT(agentIdentifier);
|
|
38
39
|
this.handler = (type, args, ctx, group) => (0, _handle.handle)(type, args, ctx, group, this.ee);
|
|
@@ -68,8 +69,8 @@ class Instrument extends _instrumentBase.InstrumentBase {
|
|
|
68
69
|
} catch (err) {
|
|
69
70
|
// do nothing
|
|
70
71
|
}
|
|
71
|
-
(0,
|
|
72
|
-
(0,
|
|
72
|
+
(0, _wrapFetch.wrapFetch)(this.ee);
|
|
73
|
+
(0, _wrapXhr.wrapXhr)(this.ee);
|
|
73
74
|
subscribeToEvents(agentIdentifier, this.ee, this.handler, this.dt);
|
|
74
75
|
this.importAggregator();
|
|
75
76
|
}
|
|
@@ -128,7 +129,7 @@ function subscribeToEvents(agentIdentifier, ee, handler, dt) {
|
|
|
128
129
|
this.metrics = {};
|
|
129
130
|
}
|
|
130
131
|
function onOpenXhrEnd(args, xhr) {
|
|
131
|
-
var loaderConfig = (0,
|
|
132
|
+
var loaderConfig = (0, _loaderConfig.getLoaderConfig)(agentIdentifier);
|
|
132
133
|
if (loaderConfig.xpid && this.sameOrigin) {
|
|
133
134
|
xhr.setRequestHeader('X-NewRelic-ID', loaderConfig.xpid);
|
|
134
135
|
}
|
|
@@ -347,7 +348,7 @@ function subscribeToEvents(agentIdentifier, ee, handler, dt) {
|
|
|
347
348
|
if ((0, _denyList.hasUndefinedHostname)(params)) return; // don't bother with XHR of url with no hostname
|
|
348
349
|
|
|
349
350
|
metrics.duration = (0, _now.now)() - this.startTime;
|
|
350
|
-
if (!this.
|
|
351
|
+
if (!this.loadCazptureCalled && xhr.readyState === 4) {
|
|
351
352
|
captureXhrData(this, xhr);
|
|
352
353
|
} else if (params.status == null) {
|
|
353
354
|
params.status = 0;
|
|
@@ -381,4 +382,5 @@ function addUrl(ctx, url) {
|
|
|
381
382
|
params.pathname = parsed.pathname;
|
|
382
383
|
ctx.parsedOrigin = parsed;
|
|
383
384
|
ctx.sameOrigin = parsed.sameOrigin;
|
|
384
|
-
}
|
|
385
|
+
}
|
|
386
|
+
const Ajax = exports.Ajax = Instrument;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Aggregate = void 0;
|
|
7
|
+
var _stringify = require("../../../common/util/stringify");
|
|
8
|
+
var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
|
|
9
|
+
var _cleanUrl = require("../../../common/url/clean-url");
|
|
10
|
+
var _info = require("../../../common/config/info");
|
|
11
|
+
var _init = require("../../../common/config/init");
|
|
12
|
+
var _runtime = require("../../../common/config/runtime");
|
|
13
|
+
var _constants = require("../constants");
|
|
14
|
+
var _runtime2 = require("../../../common/constants/runtime");
|
|
15
|
+
var _aggregateBase = require("../../utils/aggregate-base");
|
|
16
|
+
var _console = require("../../../common/util/console");
|
|
17
|
+
var _now = require("../../../common/timing/now");
|
|
18
|
+
var _registerHandler = require("../../../common/event-emitter/register-handler");
|
|
19
|
+
var _drain = require("../../../common/drain/drain");
|
|
20
|
+
var _constants2 = require("../../metrics/constants");
|
|
21
|
+
var _eventBuffer = require("../../utils/event-buffer");
|
|
22
|
+
var _traverse = require("../../../common/util/traverse");
|
|
23
|
+
var _agentConstants = require("../../../common/constants/agent-constants");
|
|
24
|
+
/*
|
|
25
|
+
* Copyright 2020 New Relic Corporation. All rights reserved.
|
|
26
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
class Aggregate extends _aggregateBase.AggregateBase {
|
|
30
|
+
#agentRuntime;
|
|
31
|
+
static featureName = _constants.FEATURE_NAME;
|
|
32
|
+
constructor(agentIdentifier, aggregator) {
|
|
33
|
+
super(agentIdentifier, aggregator, _constants.FEATURE_NAME);
|
|
34
|
+
this.eventsPerHarvest = 1000;
|
|
35
|
+
this.harvestTimeSeconds = (0, _init.getConfigurationValue)(this.agentIdentifier, 'generic_events.harvestTimeSeconds');
|
|
36
|
+
this.referrerUrl = _runtime2.isBrowserScope && document.referrer ? (0, _cleanUrl.cleanURL)(document.referrer) : undefined;
|
|
37
|
+
this.events = new _eventBuffer.EventBuffer();
|
|
38
|
+
this.#agentRuntime = (0, _runtime.getRuntime)(this.agentIdentifier);
|
|
39
|
+
this.waitForFlags(['ins']).then(([ins]) => {
|
|
40
|
+
if (!ins) {
|
|
41
|
+
this.blocked = true;
|
|
42
|
+
(0, _drain.deregisterDrain)(this.agentIdentifier, this.featureName);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if ((0, _init.getConfigurationValue)(this.agentIdentifier, 'page_action.enabled')) {
|
|
46
|
+
(0, _registerHandler.registerHandler)('api-addPageAction', (timestamp, name, attributes) => {
|
|
47
|
+
this.addEvent({
|
|
48
|
+
...attributes,
|
|
49
|
+
eventType: 'PageAction',
|
|
50
|
+
timestamp: Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(this.#agentRuntime.timeKeeper.convertRelativeTimestamp(timestamp))),
|
|
51
|
+
timeSinceLoad: timestamp / 1000,
|
|
52
|
+
actionName: name,
|
|
53
|
+
referrerUrl: this.referrerUrl,
|
|
54
|
+
currentUrl: (0, _cleanUrl.cleanURL)('' + location),
|
|
55
|
+
...(_runtime2.isBrowserScope && {
|
|
56
|
+
browserWidth: window.document.documentElement?.clientWidth,
|
|
57
|
+
browserHeight: window.document.documentElement?.clientHeight
|
|
58
|
+
})
|
|
59
|
+
});
|
|
60
|
+
}, this.featureName, this.ee);
|
|
61
|
+
}
|
|
62
|
+
this.harvestScheduler = new _harvestScheduler.HarvestScheduler('ins', {
|
|
63
|
+
onFinished: (...args) => this.onHarvestFinished(...args)
|
|
64
|
+
}, this);
|
|
65
|
+
this.harvestScheduler.harvest.on('ins', (...args) => this.onHarvestStarted(...args));
|
|
66
|
+
this.harvestScheduler.startTimer(this.harvestTimeSeconds, 0);
|
|
67
|
+
this.drain();
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// WARNING: Insights times are in seconds. EXCEPT timestamp, which is in ms.
|
|
72
|
+
addEvent(obj = {}) {
|
|
73
|
+
if (!obj || !Object.keys(obj).length) return;
|
|
74
|
+
if (!obj.eventType) {
|
|
75
|
+
(0, _console.warn)(44);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
for (let key in obj) {
|
|
79
|
+
let val = obj[key];
|
|
80
|
+
obj[key] = val && typeof val === 'object' ? (0, _stringify.stringify)(val) : val;
|
|
81
|
+
}
|
|
82
|
+
const defaultEventAttributes = {
|
|
83
|
+
/** should be overridden by the event-specific attributes, but just in case -- set it to now() */
|
|
84
|
+
timestamp: Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(this.#agentRuntime.timeKeeper.convertRelativeTimestamp((0, _now.now)()))),
|
|
85
|
+
/** all generic events require a pageUrl */
|
|
86
|
+
pageUrl: (0, _cleanUrl.cleanURL)((0, _runtime.getRuntime)(this.agentIdentifier).origin)
|
|
87
|
+
};
|
|
88
|
+
const eventAttributes = {
|
|
89
|
+
/** Agent-level custom attributes */
|
|
90
|
+
...((0, _info.getInfo)(this.agentIdentifier).jsAttributes || {}),
|
|
91
|
+
/** Fallbacks for required properties in-case the event did not supply them, should take precedence over agent-level custom attrs */
|
|
92
|
+
...defaultEventAttributes,
|
|
93
|
+
/** Event-specific attributes take precedence over agent-level custom attributes and fallbacks */
|
|
94
|
+
...obj
|
|
95
|
+
};
|
|
96
|
+
this.events.add(eventAttributes);
|
|
97
|
+
this.checkEventLimits();
|
|
98
|
+
}
|
|
99
|
+
onHarvestStarted(options) {
|
|
100
|
+
const {
|
|
101
|
+
userAttributes,
|
|
102
|
+
atts
|
|
103
|
+
} = (0, _info.getInfo)(this.agentIdentifier);
|
|
104
|
+
if (!this.events.hasData) return;
|
|
105
|
+
var payload = {
|
|
106
|
+
qs: {
|
|
107
|
+
ua: userAttributes,
|
|
108
|
+
at: atts
|
|
109
|
+
},
|
|
110
|
+
body: (0, _traverse.applyFnToProps)({
|
|
111
|
+
ins: this.events.buffer
|
|
112
|
+
}, this.obfuscator.obfuscateString.bind(this.obfuscator), 'string')
|
|
113
|
+
};
|
|
114
|
+
if (options.retry) this.events.hold();
|
|
115
|
+
return payload;
|
|
116
|
+
}
|
|
117
|
+
onHarvestFinished(result) {
|
|
118
|
+
if (result && result?.sent && result?.retry && this.events.held.hasData) this.events.unhold();else this.events.held.clear();
|
|
119
|
+
}
|
|
120
|
+
checkEventLimits() {
|
|
121
|
+
// check if we've reached any harvest limits...
|
|
122
|
+
if (this.events.bytes > _agentConstants.IDEAL_PAYLOAD_SIZE) {
|
|
123
|
+
this.ee.emit(_constants2.SUPPORTABILITY_METRIC_CHANNEL, ['GenericEvents/Harvest/Max/Seen']);
|
|
124
|
+
this.harvestScheduler.runHarvest();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.Aggregate = Aggregate;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MAX_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = exports.FEATURE_NAME = void 0;
|
|
7
|
+
var _features = require("../../loaders/features/features");
|
|
8
|
+
const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.genericEvents;
|
|
9
|
+
const IDEAL_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = 64000;
|
|
10
|
+
const MAX_PAYLOAD_SIZE = exports.MAX_PAYLOAD_SIZE = 1000000;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "GenericEvents", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _index.Instrument;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _index = require("./instrument/index");
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Instrument = exports.GenericEvents = void 0;
|
|
7
|
+
var _init = require("../../../common/config/init");
|
|
8
|
+
var _drain = require("../../../common/drain/drain");
|
|
9
|
+
var _instrumentBase = require("../../utils/instrument-base");
|
|
10
|
+
var _constants = require("../constants");
|
|
11
|
+
/* Copyright 2020 New Relic Corporation. All rights reserved.
|
|
12
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
class Instrument extends _instrumentBase.InstrumentBase {
|
|
16
|
+
static featureName = _constants.FEATURE_NAME;
|
|
17
|
+
constructor(agentIdentifier, aggregator, auto = true) {
|
|
18
|
+
super(agentIdentifier, aggregator, _constants.FEATURE_NAME, auto);
|
|
19
|
+
const genericEventSourceConfigs = [(0, _init.getConfigurationValue)(this.agentIdentifier, 'page_action.enabled')
|
|
20
|
+
// other future generic event source configs to go here, like M&Ms, PageResouce, etc.
|
|
21
|
+
];
|
|
22
|
+
/** If any of the sources are active, import the aggregator. otherwise deregister */
|
|
23
|
+
if (genericEventSourceConfigs.some(x => x)) this.importAggregator();else (0, _drain.deregisterDrain)(this.agentIdentifier, this.featureName);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.Instrument = Instrument;
|
|
27
|
+
const GenericEvents = exports.GenericEvents = Instrument;
|