@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
|
@@ -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.
|
|
@@ -24,35 +27,33 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
24
27
|
*/
|
|
25
28
|
|
|
26
29
|
class Aggregate extends _aggregateBase.AggregateBase {
|
|
27
|
-
static featureName =
|
|
30
|
+
static featureName = _constants.FEATURE_NAME;
|
|
28
31
|
#agentInfo;
|
|
29
32
|
#agentRuntime;
|
|
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
|
-
static featureName =
|
|
34
|
-
constructor(agentIdentifier, aggregator) {
|
|
35
|
-
let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
35
|
+
static featureName = _constants.FEATURE_NAME;
|
|
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;
|
|
@@ -7,15 +7,20 @@ exports.Aggregate = void 0;
|
|
|
7
7
|
var _stringify = require("../../../common/util/stringify");
|
|
8
8
|
var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
|
|
9
9
|
var _cleanUrl = require("../../../common/url/clean-url");
|
|
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 _constants = require("../constants");
|
|
12
|
-
var
|
|
14
|
+
var _runtime2 = require("../../../common/constants/runtime");
|
|
13
15
|
var _aggregateBase = require("../../utils/aggregate-base");
|
|
14
16
|
var _console = require("../../../common/util/console");
|
|
15
17
|
var _now = require("../../../common/timing/now");
|
|
16
18
|
var _registerHandler = require("../../../common/event-emitter/register-handler");
|
|
17
19
|
var _drain = require("../../../common/drain/drain");
|
|
18
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");
|
|
19
24
|
/*
|
|
20
25
|
* Copyright 2020 New Relic Corporation. All rights reserved.
|
|
21
26
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -23,36 +28,31 @@ var _constants2 = require("../../metrics/constants");
|
|
|
23
28
|
|
|
24
29
|
class Aggregate extends _aggregateBase.AggregateBase {
|
|
25
30
|
#agentRuntime;
|
|
26
|
-
static featureName =
|
|
31
|
+
static featureName = _constants.FEATURE_NAME;
|
|
27
32
|
constructor(agentIdentifier, aggregator) {
|
|
28
|
-
var _this;
|
|
29
33
|
super(agentIdentifier, aggregator, _constants.FEATURE_NAME);
|
|
30
|
-
_this = this;
|
|
31
34
|
this.eventsPerHarvest = 1000;
|
|
32
|
-
this.harvestTimeSeconds = (0,
|
|
33
|
-
this.referrerUrl =
|
|
34
|
-
this.
|
|
35
|
-
this
|
|
36
|
-
this.
|
|
37
|
-
this.#agentRuntime = (0, _config.getRuntime)(this.agentIdentifier);
|
|
38
|
-
this.waitForFlags(['ins']).then(_ref => {
|
|
39
|
-
let [ins] = _ref;
|
|
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
40
|
if (!ins) {
|
|
41
41
|
this.blocked = true;
|
|
42
42
|
(0, _drain.deregisterDrain)(this.agentIdentifier, this.featureName);
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
|
-
if ((0,
|
|
45
|
+
if ((0, _init.getConfigurationValue)(this.agentIdentifier, 'page_action.enabled')) {
|
|
46
46
|
(0, _registerHandler.registerHandler)('api-addPageAction', (timestamp, name, attributes) => {
|
|
47
47
|
this.addEvent({
|
|
48
48
|
...attributes,
|
|
49
49
|
eventType: 'PageAction',
|
|
50
|
-
timestamp: this.#agentRuntime.timeKeeper.convertRelativeTimestamp(timestamp),
|
|
50
|
+
timestamp: Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(this.#agentRuntime.timeKeeper.convertRelativeTimestamp(timestamp))),
|
|
51
51
|
timeSinceLoad: timestamp / 1000,
|
|
52
52
|
actionName: name,
|
|
53
53
|
referrerUrl: this.referrerUrl,
|
|
54
54
|
currentUrl: (0, _cleanUrl.cleanURL)('' + location),
|
|
55
|
-
...(
|
|
55
|
+
...(_runtime2.isBrowserScope && {
|
|
56
56
|
browserWidth: window.document.documentElement?.clientWidth,
|
|
57
57
|
browserHeight: window.document.documentElement?.clientHeight
|
|
58
58
|
})
|
|
@@ -60,47 +60,16 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
60
60
|
}, this.featureName, this.ee);
|
|
61
61
|
}
|
|
62
62
|
this.harvestScheduler = new _harvestScheduler.HarvestScheduler('ins', {
|
|
63
|
-
onFinished:
|
|
64
|
-
return _this.onHarvestFinished(...arguments);
|
|
65
|
-
}
|
|
63
|
+
onFinished: (...args) => this.onHarvestFinished(...args)
|
|
66
64
|
}, this);
|
|
67
|
-
this.harvestScheduler.harvest.on('ins',
|
|
68
|
-
return _this.onHarvestStarted(...arguments);
|
|
69
|
-
});
|
|
65
|
+
this.harvestScheduler.harvest.on('ins', (...args) => this.onHarvestStarted(...args));
|
|
70
66
|
this.harvestScheduler.startTimer(this.harvestTimeSeconds, 0);
|
|
71
67
|
this.drain();
|
|
72
68
|
});
|
|
73
69
|
}
|
|
74
|
-
onHarvestStarted(options) {
|
|
75
|
-
const {
|
|
76
|
-
userAttributes,
|
|
77
|
-
atts
|
|
78
|
-
} = (0, _config.getInfo)(this.agentIdentifier);
|
|
79
|
-
const harvestEvents = this.overflow.length ? this.overflow.splice(0, Infinity) : this.events.splice(0, Infinity);
|
|
80
|
-
var payload = {
|
|
81
|
-
qs: {
|
|
82
|
-
ua: userAttributes,
|
|
83
|
-
at: atts
|
|
84
|
-
},
|
|
85
|
-
body: {
|
|
86
|
-
ins: harvestEvents
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
if (options.retry) {
|
|
90
|
-
this.currentEvents = harvestEvents;
|
|
91
|
-
}
|
|
92
|
-
return payload;
|
|
93
|
-
}
|
|
94
|
-
onHarvestFinished(result) {
|
|
95
|
-
if (result && result.sent && result.retry && this.currentEvents.length) {
|
|
96
|
-
this.events = this.currentEvents.concat(this.events);
|
|
97
|
-
this.currentEvents = [];
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
70
|
|
|
101
71
|
// WARNING: Insights times are in seconds. EXCEPT timestamp, which is in ms.
|
|
102
|
-
addEvent() {
|
|
103
|
-
let obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
72
|
+
addEvent(obj = {}) {
|
|
104
73
|
if (!obj || !Object.keys(obj).length) return;
|
|
105
74
|
if (!obj.eventType) {
|
|
106
75
|
(0, _console.warn)(44);
|
|
@@ -112,24 +81,46 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
112
81
|
}
|
|
113
82
|
const defaultEventAttributes = {
|
|
114
83
|
/** should be overridden by the event-specific attributes, but just in case -- set it to now() */
|
|
115
|
-
timestamp: this.#agentRuntime.timeKeeper.convertRelativeTimestamp((0, _now.now)()),
|
|
84
|
+
timestamp: Math.floor(this.#agentRuntime.timeKeeper.correctAbsoluteTimestamp(this.#agentRuntime.timeKeeper.convertRelativeTimestamp((0, _now.now)()))),
|
|
116
85
|
/** all generic events require a pageUrl */
|
|
117
|
-
pageUrl: (0, _cleanUrl.cleanURL)((0,
|
|
86
|
+
pageUrl: (0, _cleanUrl.cleanURL)((0, _runtime.getRuntime)(this.agentIdentifier).origin)
|
|
118
87
|
};
|
|
119
88
|
const eventAttributes = {
|
|
120
89
|
/** Agent-level custom attributes */
|
|
121
|
-
...((0,
|
|
90
|
+
...((0, _info.getInfo)(this.agentIdentifier).jsAttributes || {}),
|
|
122
91
|
/** Fallbacks for required properties in-case the event did not supply them, should take precedence over agent-level custom attrs */
|
|
123
92
|
...defaultEventAttributes,
|
|
124
93
|
/** Event-specific attributes take precedence over agent-level custom attributes and fallbacks */
|
|
125
94
|
...obj
|
|
126
95
|
};
|
|
127
|
-
this.events.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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) {
|
|
131
123
|
this.ee.emit(_constants2.SUPPORTABILITY_METRIC_CHANNEL, ['GenericEvents/Harvest/Max/Seen']);
|
|
132
|
-
this.overflow = [...this.overflow, ...this.events.splice(0, Infinity)];
|
|
133
124
|
this.harvestScheduler.runHarvest();
|
|
134
125
|
}
|
|
135
126
|
}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.FEATURE_NAME = void 0;
|
|
6
|
+
exports.MAX_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = exports.FEATURE_NAME = void 0;
|
|
7
7
|
var _features = require("../../loaders/features/features");
|
|
8
|
-
const FEATURE_NAME = exports.FEATURE_NAME = _features.FEATURE_NAMES.genericEvents;
|
|
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;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.Instrument = void 0;
|
|
7
|
-
var
|
|
6
|
+
exports.Instrument = exports.GenericEvents = void 0;
|
|
7
|
+
var _init = require("../../../common/config/init");
|
|
8
8
|
var _drain = require("../../../common/drain/drain");
|
|
9
9
|
var _instrumentBase = require("../../utils/instrument-base");
|
|
10
10
|
var _constants = require("../constants");
|
|
@@ -13,15 +13,15 @@ var _constants = require("../constants");
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
class Instrument extends _instrumentBase.InstrumentBase {
|
|
16
|
-
static featureName =
|
|
17
|
-
constructor(agentIdentifier, aggregator) {
|
|
18
|
-
let auto = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
16
|
+
static featureName = _constants.FEATURE_NAME;
|
|
17
|
+
constructor(agentIdentifier, aggregator, auto = true) {
|
|
19
18
|
super(agentIdentifier, aggregator, _constants.FEATURE_NAME, auto);
|
|
20
|
-
const genericEventSourceConfigs = [(0,
|
|
19
|
+
const genericEventSourceConfigs = [(0, _init.getConfigurationValue)(this.agentIdentifier, 'page_action.enabled')
|
|
21
20
|
// other future generic event source configs to go here, like M&Ms, PageResouce, etc.
|
|
22
21
|
];
|
|
23
22
|
/** If any of the sources are active, import the aggregator. otherwise deregister */
|
|
24
23
|
if (genericEventSourceConfigs.some(x => x)) this.importAggregator();else (0, _drain.deregisterDrain)(this.agentIdentifier, this.featureName);
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
|
-
exports.Instrument = Instrument;
|
|
26
|
+
exports.Instrument = Instrument;
|
|
27
|
+
const GenericEvents = exports.GenericEvents = Instrument;
|
|
@@ -12,14 +12,17 @@ var _registerHandler = require("../../../common/event-emitter/register-handler")
|
|
|
12
12
|
var _harvestScheduler = require("../../../common/harvest/harvest-scheduler");
|
|
13
13
|
var _stringify = require("../../../common/util/stringify");
|
|
14
14
|
var _handle = require("../../../common/event-emitter/handle");
|
|
15
|
-
var
|
|
16
|
-
var
|
|
15
|
+
var _info = require("../../../common/config/info");
|
|
16
|
+
var _init = require("../../../common/config/init");
|
|
17
|
+
var _runtime = require("../../../common/config/runtime");
|
|
18
|
+
var _runtime2 = require("../../../common/constants/runtime");
|
|
17
19
|
var _constants = require("../constants");
|
|
18
20
|
var _features = require("../../../loaders/features/features");
|
|
19
21
|
var _aggregateBase = require("../../utils/aggregate-base");
|
|
20
22
|
var _nreum = require("../../../common/window/nreum");
|
|
21
23
|
var _drain = require("../../../common/drain/drain");
|
|
22
24
|
var _now = require("../../../common/timing/now");
|
|
25
|
+
var _traverse = require("../../../common/util/traverse");
|
|
23
26
|
/*
|
|
24
27
|
* Copyright 2020 New Relic Corporation. All rights reserved.
|
|
25
28
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -30,11 +33,9 @@ var _now = require("../../../common/timing/now");
|
|
|
30
33
|
*/
|
|
31
34
|
|
|
32
35
|
class Aggregate extends _aggregateBase.AggregateBase {
|
|
33
|
-
static featureName =
|
|
36
|
+
static featureName = _constants.FEATURE_NAME;
|
|
34
37
|
constructor(agentIdentifier, aggregator) {
|
|
35
|
-
var _this;
|
|
36
38
|
super(agentIdentifier, aggregator, _constants.FEATURE_NAME);
|
|
37
|
-
_this = this;
|
|
38
39
|
this.stackReported = {};
|
|
39
40
|
this.observedAt = {};
|
|
40
41
|
this.pageviewReported = {};
|
|
@@ -44,28 +45,19 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
44
45
|
|
|
45
46
|
// this will need to change to match whatever ee we use in the instrument
|
|
46
47
|
this.ee.on('interactionDone', (interaction, wasSaved) => this.onInteractionDone(interaction, wasSaved));
|
|
47
|
-
(0, _registerHandler.registerHandler)('err',
|
|
48
|
-
|
|
49
|
-
}, this.featureName, this.ee);
|
|
50
|
-
(0, _registerHandler.registerHandler)('ierr', function () {
|
|
51
|
-
return _this.storeError(...arguments);
|
|
52
|
-
}, this.featureName, this.ee);
|
|
48
|
+
(0, _registerHandler.registerHandler)('err', (...args) => this.storeError(...args), this.featureName, this.ee);
|
|
49
|
+
(0, _registerHandler.registerHandler)('ierr', (...args) => this.storeError(...args), this.featureName, this.ee);
|
|
53
50
|
(0, _registerHandler.registerHandler)('softNavFlush', (interactionId, wasFinished, softNavAttrs) => this.onSoftNavNotification(interactionId, wasFinished, softNavAttrs), this.featureName, this.ee); // when an ixn is done or cancelled
|
|
54
51
|
|
|
55
|
-
const harvestTimeSeconds = (0,
|
|
52
|
+
const harvestTimeSeconds = (0, _init.getConfigurationValue)(this.agentIdentifier, 'jserrors.harvestTimeSeconds') || 10;
|
|
56
53
|
|
|
57
54
|
// 0 == off, 1 == on
|
|
58
|
-
this.waitForFlags(['err']).then(
|
|
59
|
-
let [errFlag] = _ref;
|
|
55
|
+
this.waitForFlags(['err']).then(([errFlag]) => {
|
|
60
56
|
if (errFlag) {
|
|
61
57
|
const scheduler = new _harvestScheduler.HarvestScheduler('jserrors', {
|
|
62
|
-
onFinished:
|
|
63
|
-
return _this.onHarvestFinished(...arguments);
|
|
64
|
-
}
|
|
58
|
+
onFinished: (...args) => this.onHarvestFinished(...args)
|
|
65
59
|
}, this);
|
|
66
|
-
scheduler.harvest.on('jserrors',
|
|
67
|
-
return _this.onHarvestStarted(...arguments);
|
|
68
|
-
});
|
|
60
|
+
scheduler.harvest.on('jserrors', (...args) => this.onHarvestStarted(...args));
|
|
69
61
|
scheduler.startTimer(harvestTimeSeconds);
|
|
70
62
|
this.drain();
|
|
71
63
|
} else {
|
|
@@ -76,7 +68,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
76
68
|
}
|
|
77
69
|
onHarvestStarted(options) {
|
|
78
70
|
// this gets rid of dependency in AJAX module
|
|
79
|
-
var body = this.aggregator.take(['err', 'ierr', 'xhr']);
|
|
71
|
+
var body = (0, _traverse.applyFnToProps)(this.aggregator.take(['err', 'ierr', 'xhr']), this.obfuscator.obfuscateString.bind(this.obfuscator), 'string');
|
|
80
72
|
if (options.retry) {
|
|
81
73
|
this.currentBody = body;
|
|
82
74
|
}
|
|
@@ -84,7 +76,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
84
76
|
body,
|
|
85
77
|
qs: {}
|
|
86
78
|
};
|
|
87
|
-
var releaseIds = (0, _stringify.stringify)((0,
|
|
79
|
+
var releaseIds = (0, _stringify.stringify)((0, _runtime.getRuntime)(this.agentIdentifier).releaseIds);
|
|
88
80
|
if (releaseIds !== '{}') {
|
|
89
81
|
payload.qs.ri = releaseIds;
|
|
90
82
|
}
|
|
@@ -99,8 +91,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
99
91
|
}
|
|
100
92
|
onHarvestFinished(result) {
|
|
101
93
|
if (result.retry && this.currentBody) {
|
|
102
|
-
Object.entries(this.currentBody || {}).forEach(
|
|
103
|
-
let [key, value] = _ref2;
|
|
94
|
+
Object.entries(this.currentBody || {}).forEach(([key, value]) => {
|
|
104
95
|
for (var i = 0; i < value.length; i++) {
|
|
105
96
|
var bucket = value[i];
|
|
106
97
|
var name = this.getBucketName(key, bucket.params, bucket.custom);
|
|
@@ -143,7 +134,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
143
134
|
if (!err) return;
|
|
144
135
|
// are we in an interaction
|
|
145
136
|
time = time || (0, _now.now)();
|
|
146
|
-
const agentRuntime = (0,
|
|
137
|
+
const agentRuntime = (0, _runtime.getRuntime)(this.agentIdentifier);
|
|
147
138
|
let filterOutput;
|
|
148
139
|
if (!internal && agentRuntime.onerror) {
|
|
149
140
|
filterOutput = agentRuntime.onerror(err);
|
|
@@ -159,7 +150,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
159
150
|
const params = {
|
|
160
151
|
stackHash: (0, _stringHashCode.stringHashCode)(canonicalStackString),
|
|
161
152
|
exceptionClass: stackInfo.name,
|
|
162
|
-
request_uri:
|
|
153
|
+
request_uri: _runtime2.globalScope?.location.pathname
|
|
163
154
|
};
|
|
164
155
|
if (stackInfo.message) params.message = '' + stackInfo.message;
|
|
165
156
|
// Notice if filterOutput isn't false|undefined OR our specified object, this func would've returned already (so it's unnecessary to req-check group).
|
|
@@ -176,7 +167,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
176
167
|
if (!this.stackReported[bucketHash]) {
|
|
177
168
|
this.stackReported[bucketHash] = true;
|
|
178
169
|
params.stack_trace = (0, _formatStackTrace.truncateSize)(stackInfo.stackString);
|
|
179
|
-
this.observedAt[bucketHash] = agentRuntime.timeKeeper.convertRelativeTimestamp(time);
|
|
170
|
+
this.observedAt[bucketHash] = Math.floor(agentRuntime.timeKeeper.correctAbsoluteTimestamp(agentRuntime.timeKeeper.convertRelativeTimestamp(time)));
|
|
180
171
|
} else {
|
|
181
172
|
params.browser_stack_hash = (0, _stringHashCode.stringHashCode)(stackInfo.stackString);
|
|
182
173
|
}
|
|
@@ -192,7 +183,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
192
183
|
this.pageviewReported[bucketHash] = true;
|
|
193
184
|
}
|
|
194
185
|
params.firstOccurrenceTimestamp = this.observedAt[bucketHash];
|
|
195
|
-
params.timestamp = agentRuntime.timeKeeper.convertRelativeTimestamp(time);
|
|
186
|
+
params.timestamp = Math.floor(agentRuntime.timeKeeper.correctAbsoluteTimestamp(agentRuntime.timeKeeper.convertRelativeTimestamp(time)));
|
|
196
187
|
var type = internal ? 'ierr' : 'err';
|
|
197
188
|
var newMetrics = {
|
|
198
189
|
time
|
|
@@ -225,30 +216,20 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
225
216
|
this.#storeJserrorForHarvest(jsErrorEvent, params.browserInteractionId !== undefined, params._softNavAttributes);
|
|
226
217
|
}
|
|
227
218
|
}
|
|
228
|
-
#storeJserrorForHarvest(errorInfoArr, softNavOccurredFinished) {
|
|
229
|
-
let softNavCustomAttrs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
219
|
+
#storeJserrorForHarvest(errorInfoArr, softNavOccurredFinished, softNavCustomAttrs = {}) {
|
|
230
220
|
let [type, bucketHash, params, newMetrics, localAttrs] = errorInfoArr;
|
|
231
221
|
const allCustomAttrs = {};
|
|
232
222
|
if (softNavOccurredFinished) {
|
|
233
|
-
Object.entries(softNavCustomAttrs).forEach(
|
|
234
|
-
let [k, v] = _ref3;
|
|
235
|
-
return setCustom(k, v);
|
|
236
|
-
}); // when an ixn finishes, it'll include stuff in jsAttributes + attrs specific to the ixn
|
|
223
|
+
Object.entries(softNavCustomAttrs).forEach(([k, v]) => setCustom(k, v)); // when an ixn finishes, it'll include stuff in jsAttributes + attrs specific to the ixn
|
|
237
224
|
bucketHash += params.browserInteractionId;
|
|
238
225
|
delete params._softNavAttributes; // cleanup temp properties from synchronous evaluation; this is harmless when async from soft nav (properties DNE)
|
|
239
226
|
delete params._softNavFinished;
|
|
240
227
|
} else {
|
|
241
228
|
// interaction was cancelled -> error should not be associated OR there was no interaction
|
|
242
|
-
Object.entries((0,
|
|
243
|
-
let [k, v] = _ref4;
|
|
244
|
-
return setCustom(k, v);
|
|
245
|
-
});
|
|
229
|
+
Object.entries((0, _info.getInfo)(this.agentIdentifier).jsAttributes).forEach(([k, v]) => setCustom(k, v));
|
|
246
230
|
delete params.browserInteractionId;
|
|
247
231
|
}
|
|
248
|
-
if (localAttrs) Object.entries(localAttrs).forEach(
|
|
249
|
-
let [k, v] = _ref5;
|
|
250
|
-
return setCustom(k, v);
|
|
251
|
-
}); // local custom attrs are applied in either case with the highest precedence
|
|
232
|
+
if (localAttrs) Object.entries(localAttrs).forEach(([k, v]) => setCustom(k, v)); // local custom attrs are applied in either case with the highest precedence
|
|
252
233
|
|
|
253
234
|
const jsAttributesHash = (0, _stringHashCode.stringHashCode)((0, _stringify.stringify)(allCustomAttrs));
|
|
254
235
|
const aggregateHash = bucketHash + ':' + jsAttributesHash;
|
|
@@ -277,8 +258,7 @@ class Aggregate extends _aggregateBase.AggregateBase {
|
|
|
277
258
|
var jsAttributesHash = (0, _stringHashCode.stringHashCode)((0, _stringify.stringify)(allCustomAttrs));
|
|
278
259
|
var aggregateHash = hash + ':' + jsAttributesHash;
|
|
279
260
|
this.aggregator.store(item[0], aggregateHash, params, item[3], allCustomAttrs);
|
|
280
|
-
function setCustom(
|
|
281
|
-
let [key, val] = _ref6;
|
|
261
|
+
function setCustom([key, val]) {
|
|
282
262
|
allCustomAttrs[key] = val && typeof val === 'object' ? (0, _stringify.stringify)(val) : val;
|
|
283
263
|
}
|
|
284
264
|
});
|