@newrelic/browser-agent 1.264.0 → 1.265.1
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 +31 -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 +37 -18
- package/dist/cjs/features/metrics/aggregate/websocket-detection.js +34 -0
- package/dist/cjs/features/metrics/constants.js +5 -1
- package/dist/cjs/features/metrics/instrument/index.js +16 -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 +31 -12
- package/dist/esm/features/metrics/aggregate/websocket-detection.js +29 -0
- package/dist/esm/features/metrics/constants.js +4 -1
- package/dist/esm/features/metrics/instrument/index.js +15 -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.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
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,37 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.265.1](https://github.com/newrelic/newrelic-browser-agent/compare/v1.265.0...v1.265.1) (2024-09-06)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* Disable websocket wrapping ([#1176](https://github.com/newrelic/newrelic-browser-agent/issues/1176)) ([5f8a0c4](https://github.com/newrelic/newrelic-browser-agent/commit/5f8a0c42fbade8f6f81471439ecc8999b1556290))
|
|
12
|
+
|
|
13
|
+
## [1.265.0](https://github.com/newrelic/newrelic-browser-agent/compare/v1.264.0...v1.265.0) (2024-08-30)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* add payload size evaluation to generic events feature ([#1152](https://github.com/newrelic/newrelic-browser-agent/issues/1152)) ([65d9d11](https://github.com/newrelic/newrelic-browser-agent/commit/65d9d11172df4a3abe750c3d110b53ad65ae4319))
|
|
19
|
+
* Add WebSocket wrapper and supportability metrics ([#1159](https://github.com/newrelic/newrelic-browser-agent/issues/1159)) ([7b4ab87](https://github.com/newrelic/newrelic-browser-agent/commit/7b4ab87ae28450cc97f6a84f3176e0c9f8698d76))
|
|
20
|
+
* Configure Session Replay to wait for DOMContentLoaded ([#1164](https://github.com/newrelic/newrelic-browser-agent/issues/1164)) ([84bd299](https://github.com/newrelic/newrelic-browser-agent/commit/84bd29981675660d8f47a0f49235005e7be11947))
|
|
21
|
+
* removing internal barrel exports ([#1158](https://github.com/newrelic/newrelic-browser-agent/issues/1158)) ([2e29a6e](https://github.com/newrelic/newrelic-browser-agent/commit/2e29a6e3c9d7a6a099b73aff59682a1e38008072))
|
|
22
|
+
* Standardize Feature Buffering Behavior ([#1155](https://github.com/newrelic/newrelic-browser-agent/issues/1155)) ([d070a43](https://github.com/newrelic/newrelic-browser-agent/commit/d070a4315df35ace82e20b8b2c69044bf8504c92))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* Ensure drain target is a valid event emitter before subscribing ([#1167](https://github.com/newrelic/newrelic-browser-agent/issues/1167)) ([187d31f](https://github.com/newrelic/newrelic-browser-agent/commit/187d31fe0fd95e75907742a7c49779683a6b040c))
|
|
28
|
+
* fix duplicative log payloads on unload ([#1166](https://github.com/newrelic/newrelic-browser-agent/issues/1166)) ([52bb088](https://github.com/newrelic/newrelic-browser-agent/commit/52bb08880215c40abf080a2bf1c80a29c7ad3324))
|
|
29
|
+
* relative timestamps in session trace ([#1142](https://github.com/newrelic/newrelic-browser-agent/issues/1142)) ([378b1fb](https://github.com/newrelic/newrelic-browser-agent/commit/378b1fb49ca5732e0c1b704920143b966102cfb6))
|
|
30
|
+
* Updated Logging API function ([#1147](https://github.com/newrelic/newrelic-browser-agent/issues/1147)) ([bf2e980](https://github.com/newrelic/newrelic-browser-agent/commit/bf2e98056c2ad214421918fb4938a08b6213590e))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Security Fixes
|
|
34
|
+
|
|
35
|
+
* apply obfuscation rules to session trace ([#1149](https://github.com/newrelic/newrelic-browser-agent/issues/1149)) ([fbc6f9d](https://github.com/newrelic/newrelic-browser-agent/commit/fbc6f9d31a33515e05d70e190c9c8da198fa4415))
|
|
36
|
+
|
|
6
37
|
## [1.264.0](https://github.com/newrelic/newrelic-browser-agent/compare/v1.263.0...v1.264.0) (2024-08-06)
|
|
7
38
|
|
|
8
39
|
|
|
@@ -95,8 +95,7 @@ function aggregateMetrics(newMetrics, oldMetrics) {
|
|
|
95
95
|
count: 0
|
|
96
96
|
};
|
|
97
97
|
oldMetrics.count += 1;
|
|
98
|
-
Object.entries(newMetrics || {}).forEach(
|
|
99
|
-
let [key, value] = _ref;
|
|
98
|
+
Object.entries(newMetrics || {}).forEach(([key, value]) => {
|
|
100
99
|
oldMetrics[key] = updateMetric(value, oldMetrics[key]);
|
|
101
100
|
});
|
|
102
101
|
return oldMetrics;
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getModeledObject = getModeledObject;
|
|
7
|
-
var _console = require("
|
|
7
|
+
var _console = require("../util/console");
|
|
8
8
|
function getModeledObject(obj, model) {
|
|
9
9
|
try {
|
|
10
10
|
if (!obj || typeof obj !== 'object') return (0, _console.warn)(3);
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.getInfo = getInfo;
|
|
7
7
|
exports.isValid = isValid;
|
|
8
8
|
exports.setInfo = setInfo;
|
|
9
|
-
var _nreum = require("
|
|
9
|
+
var _nreum = require("../window/nreum");
|
|
10
10
|
var _configurable = require("./configurable");
|
|
11
11
|
const model = {
|
|
12
12
|
// preset defaults
|
|
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.getConfiguration = getConfiguration;
|
|
7
7
|
exports.getConfigurationValue = getConfigurationValue;
|
|
8
8
|
exports.setConfiguration = setConfiguration;
|
|
9
|
-
var _constants = require("
|
|
10
|
-
var _querySelector = require("
|
|
11
|
-
var _constants2 = require("
|
|
12
|
-
var _console = require("
|
|
13
|
-
var _nreum = require("
|
|
9
|
+
var _constants = require("../../features/logging/constants");
|
|
10
|
+
var _querySelector = require("../dom/query-selector");
|
|
11
|
+
var _constants2 = require("../session/constants");
|
|
12
|
+
var _console = require("../util/console");
|
|
13
|
+
var _nreum = require("../window/nreum");
|
|
14
14
|
var _configurable = require("./configurable");
|
|
15
15
|
const nrMask = '[data-nr-mask]';
|
|
16
16
|
const model = () => {
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getLoaderConfig = getLoaderConfig;
|
|
7
7
|
exports.setLoaderConfig = setLoaderConfig;
|
|
8
|
-
var _nreum = require("
|
|
8
|
+
var _nreum = require("../window/nreum");
|
|
9
9
|
var _configurable = require("./configurable");
|
|
10
10
|
const model = {
|
|
11
11
|
accountID: undefined,
|
|
@@ -6,9 +6,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.getRuntime = getRuntime;
|
|
7
7
|
exports.setRuntime = setRuntime;
|
|
8
8
|
var _configurable = require("./configurable");
|
|
9
|
-
var _nreum = require("
|
|
10
|
-
var _runtime = require("
|
|
11
|
-
var _env = require("
|
|
9
|
+
var _nreum = require("../window/nreum");
|
|
10
|
+
var _runtime = require("../constants/runtime");
|
|
11
|
+
var _env = require("../constants/env.npm");
|
|
12
|
+
/**
|
|
13
|
+
* Module level count of harvests. This property will auto-increment each time it is accessed.
|
|
14
|
+
* @type {number}
|
|
15
|
+
*/
|
|
16
|
+
let harvestCount = 0;
|
|
12
17
|
const readonly = {
|
|
13
18
|
buildEnv: _env.BUILD_ENV,
|
|
14
19
|
distMethod: _env.DIST_METHOD,
|
|
@@ -29,8 +34,8 @@ const model = {
|
|
|
29
34
|
appMetadata: {},
|
|
30
35
|
session: undefined,
|
|
31
36
|
denyList: undefined,
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
timeKeeper: undefined,
|
|
38
|
+
obfuscator: undefined
|
|
34
39
|
};
|
|
35
40
|
const _cache = {};
|
|
36
41
|
function getRuntime(id) {
|
|
@@ -44,6 +49,12 @@ function setRuntime(id, obj) {
|
|
|
44
49
|
...(0, _configurable.getModeledObject)(obj, model),
|
|
45
50
|
...readonly
|
|
46
51
|
};
|
|
52
|
+
if (!Object.hasOwnProperty.call(_cache[id], 'harvestCount')) {
|
|
53
|
+
// Harvest count needs to be added as a getter so the variable is updated each time it is accessed
|
|
54
|
+
Object.defineProperty(_cache[id], 'harvestCount', {
|
|
55
|
+
get: () => ++harvestCount
|
|
56
|
+
});
|
|
57
|
+
}
|
|
47
58
|
const agentInst = (0, _nreum.getNREUMInitializedAgent)(id);
|
|
48
59
|
if (agentInst) agentInst.runtime = _cache[id];
|
|
49
60
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MAX_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = void 0;
|
|
7
|
+
const IDEAL_PAYLOAD_SIZE = exports.IDEAL_PAYLOAD_SIZE = 64000;
|
|
8
|
+
const MAX_PAYLOAD_SIZE = exports.MAX_PAYLOAD_SIZE = 1000000;
|
|
@@ -12,7 +12,7 @@ exports.VERSION = exports.RRWEB_VERSION = exports.DIST_METHOD = exports.BUILD_EN
|
|
|
12
12
|
/**
|
|
13
13
|
* Exposes the version of the agent
|
|
14
14
|
*/
|
|
15
|
-
const VERSION = exports.VERSION = "1.
|
|
15
|
+
const VERSION = exports.VERSION = "1.265.1";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Exposes the build type of the agent
|
|
@@ -12,7 +12,7 @@ exports.VERSION = exports.RRWEB_VERSION = exports.DIST_METHOD = exports.BUILD_EN
|
|
|
12
12
|
/**
|
|
13
13
|
* Exposes the version of the agent
|
|
14
14
|
*/
|
|
15
|
-
const VERSION = exports.VERSION = "1.
|
|
15
|
+
const VERSION = exports.VERSION = "1.265.1";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Exposes the build type of the agent
|
|
@@ -15,8 +15,7 @@ class SharedContext {
|
|
|
15
15
|
if (typeof context !== 'object') return (0, _console.warn)(8);
|
|
16
16
|
this.sharedContext = {};
|
|
17
17
|
Object.assign(this.sharedContext, model);
|
|
18
|
-
Object.entries(context).forEach(
|
|
19
|
-
let [key, value] = _ref;
|
|
18
|
+
Object.entries(context).forEach(([key, value]) => {
|
|
20
19
|
if (Object.keys(model).includes(key)) this.sharedContext[key] = value;
|
|
21
20
|
});
|
|
22
21
|
} catch (err) {
|
|
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.dispatchGlobalEvent = dispatchGlobalEvent;
|
|
7
7
|
var _runtime = require("../constants/runtime");
|
|
8
8
|
const GLOBAL_EVENT_NAMESPACE = 'newrelic';
|
|
9
|
-
function dispatchGlobalEvent() {
|
|
10
|
-
let detail = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
9
|
+
function dispatchGlobalEvent(detail = {}) {
|
|
11
10
|
try {
|
|
12
11
|
_runtime.globalScope.dispatchEvent(new CustomEvent(GLOBAL_EVENT_NAMESPACE, {
|
|
13
12
|
detail
|
|
@@ -9,6 +9,7 @@ exports.registerDrain = registerDrain;
|
|
|
9
9
|
var _contextualEe = require("../event-emitter/contextual-ee");
|
|
10
10
|
var _registerHandler = require("../event-emitter/register-handler");
|
|
11
11
|
var _features = require("../../loaders/features/features");
|
|
12
|
+
var _eventContext = require("../event-emitter/event-context");
|
|
12
13
|
/*
|
|
13
14
|
* Copyright 2020 New Relic Corporation. All rights reserved.
|
|
14
15
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -64,10 +65,7 @@ function curateRegistry(agentIdentifier) {
|
|
|
64
65
|
* @param {string} featureName - A named group into which the feature's buffered events are bucketed.
|
|
65
66
|
* @param {boolean} force - Whether to force the drain to occur immediately, bypassing the registry and staging logic.
|
|
66
67
|
*/
|
|
67
|
-
function drain() {
|
|
68
|
-
let agentIdentifier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
69
|
-
let featureName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'feature';
|
|
70
|
-
let force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
68
|
+
function drain(agentIdentifier = '', featureName = 'feature', force = false) {
|
|
71
69
|
curateRegistry(agentIdentifier);
|
|
72
70
|
// If the feature for the specified agent is not in the registry, that means the instrument file was bypassed.
|
|
73
71
|
// This could happen in tests, or loaders that directly import the aggregator. In these cases it is safe to
|
|
@@ -84,13 +82,9 @@ function checkCanDrainAll(agentIdentifier) {
|
|
|
84
82
|
// Only when the event-groups for all features are ready to drain (staged) do we execute the drain. This has the effect
|
|
85
83
|
// that the last feature to call drain triggers drain for all features.
|
|
86
84
|
const items = Array.from(registry[agentIdentifier]);
|
|
87
|
-
if (items.every(
|
|
88
|
-
let [key, values] = _ref;
|
|
89
|
-
return values.staged;
|
|
90
|
-
})) {
|
|
85
|
+
if (items.every(([key, values]) => values.staged)) {
|
|
91
86
|
items.sort((a, b) => a[1].priority - b[1].priority);
|
|
92
|
-
items.forEach(
|
|
93
|
-
let [group] = _ref2;
|
|
87
|
+
items.forEach(([group]) => {
|
|
94
88
|
registry[agentIdentifier].delete(group);
|
|
95
89
|
drainGroup(agentIdentifier, group);
|
|
96
90
|
});
|
|
@@ -102,8 +96,7 @@ function checkCanDrainAll(agentIdentifier) {
|
|
|
102
96
|
* the subscribed handlers for the group.
|
|
103
97
|
* @param {*} group - The name of a particular feature's event "bucket".
|
|
104
98
|
*/
|
|
105
|
-
function drainGroup(agentIdentifier, group) {
|
|
106
|
-
let activateGroup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
99
|
+
function drainGroup(agentIdentifier, group, activateGroup = true) {
|
|
107
100
|
const baseEE = agentIdentifier ? _contextualEe.ee.get(agentIdentifier) : _contextualEe.ee;
|
|
108
101
|
const handlers = _registerHandler.registerHandler.handlers; // other storage in registerHandler
|
|
109
102
|
if (baseEE.aborted || !baseEE.backlog || !handlers) return;
|
|
@@ -118,11 +111,12 @@ function drainGroup(agentIdentifier, group) {
|
|
|
118
111
|
// eslint-disable-line no-unmodified-loop-condition
|
|
119
112
|
emitEvent(bufferedEventsInGroup[i], groupHandlers);
|
|
120
113
|
}
|
|
121
|
-
Object.entries(groupHandlers).forEach(
|
|
122
|
-
let [eventType, handlerRegistrationList] = _ref3;
|
|
114
|
+
Object.entries(groupHandlers).forEach(([eventType, handlerRegistrationList]) => {
|
|
123
115
|
Object.values(handlerRegistrationList || {}).forEach(registration => {
|
|
124
|
-
// registration
|
|
125
|
-
|
|
116
|
+
// registration *should* be an array of: [targetEE, eventHandler]
|
|
117
|
+
// certain browser polyfills of .values and .entries pass the prototype methods into the callback,
|
|
118
|
+
// which breaks this assumption and throws errors. So we make sure here that we only call .on() if its an actual NR EE
|
|
119
|
+
if (registration[0]?.on && registration[0]?.context() instanceof _eventContext.EventContext) registration[0].on(eventType, registration[1]);
|
|
126
120
|
});
|
|
127
121
|
});
|
|
128
122
|
}
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.ee = exports.contextId = void 0;
|
|
7
7
|
var _nreum = require("../window/nreum");
|
|
8
8
|
var _getOrSet = require("../util/get-or-set");
|
|
9
|
-
var
|
|
9
|
+
var _runtime = require("../config/runtime");
|
|
10
10
|
var _eventContext = require("./event-context");
|
|
11
11
|
var _bundleId = require("../ids/bundle-id");
|
|
12
12
|
/*
|
|
@@ -36,7 +36,7 @@ function ee(old, debugId) {
|
|
|
36
36
|
// We only want to check the runtime configuration for `isolatedBacklog` if the event emitter belongs to a feature.
|
|
37
37
|
// For feature event emitters, the debugId will be an agentIdentifier with a length of 16. In contrast, some of our
|
|
38
38
|
// tests do not namespace the event emitter with an agentID and just use the parent (which has no ID).
|
|
39
|
-
isolatedBacklog = debugId.length !== 16 ? false : (0,
|
|
39
|
+
isolatedBacklog = debugId.length !== 16 ? false : (0, _runtime.getRuntime)(debugId).isolatedBacklog;
|
|
40
40
|
} catch (err) {
|
|
41
41
|
// Do nothing for now.
|
|
42
42
|
}
|
|
@@ -129,8 +129,7 @@ function ee(old, debugId) {
|
|
|
129
129
|
|
|
130
130
|
// do not buffer events if agent has been aborted
|
|
131
131
|
if (emitter.aborted) return;
|
|
132
|
-
Object.entries(types || {}).forEach(
|
|
133
|
-
let [_, type] = _ref;
|
|
132
|
+
Object.entries(types || {}).forEach(([_, type]) => {
|
|
134
133
|
bufferGroupMap[type] = group;
|
|
135
134
|
if (!(group in eventBuffer)) {
|
|
136
135
|
eventBuffer[group] = [];
|
|
@@ -37,14 +37,10 @@ function eventListenerOpts(useCapture, abortSignal) {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/** Do not use this within the worker context. */
|
|
40
|
-
function windowAddEventListener(event, listener) {
|
|
41
|
-
let capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
42
|
-
let abortSignal = arguments.length > 3 ? arguments[3] : undefined;
|
|
40
|
+
function windowAddEventListener(event, listener, capture = false, abortSignal) {
|
|
43
41
|
window.addEventListener(event, listener, eventListenerOpts(capture, abortSignal));
|
|
44
42
|
}
|
|
45
43
|
/** Do not use this within the worker context. */
|
|
46
|
-
function documentAddEventListener(event, listener) {
|
|
47
|
-
let capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
48
|
-
let abortSignal = arguments.length > 3 ? arguments[3] : undefined;
|
|
44
|
+
function documentAddEventListener(event, listener, capture = false, abortSignal) {
|
|
49
45
|
document.addEventListener(event, listener, eventListenerOpts(capture, abortSignal));
|
|
50
46
|
}
|
|
@@ -69,8 +69,7 @@ class HarvestScheduler extends _sharedContext.SharedContext {
|
|
|
69
69
|
this.started = true;
|
|
70
70
|
this.scheduleHarvest(initialDelay != null ? initialDelay : this.interval);
|
|
71
71
|
}
|
|
72
|
-
stopTimer() {
|
|
73
|
-
let permanently = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
72
|
+
stopTimer(permanently = false) {
|
|
74
73
|
this.aborted = permanently; // stopping permanently is same as aborting, but this function also cleans up the setTimeout loop
|
|
75
74
|
this.started = false;
|
|
76
75
|
if (this.timeoutHandle) {
|
|
@@ -8,14 +8,14 @@ var _encode = require("../url/encode");
|
|
|
8
8
|
var _stringify = require("../util/stringify");
|
|
9
9
|
var submitData = _interopRequireWildcard(require("../util/submit-data"));
|
|
10
10
|
var _location = require("../url/location");
|
|
11
|
-
var
|
|
11
|
+
var _info = require("../config/info");
|
|
12
|
+
var _init = require("../config/init");
|
|
13
|
+
var _runtime = require("../config/runtime");
|
|
12
14
|
var _cleanUrl = require("../url/clean-url");
|
|
13
15
|
var _eventListenerOpts = require("../event-listener/event-listener-opts");
|
|
14
|
-
var _obfuscate = require("../util/obfuscate");
|
|
15
|
-
var _traverse = require("../util/traverse");
|
|
16
16
|
var _sharedContext = require("../context/shared-context");
|
|
17
17
|
var _env = require("../constants/env.npm");
|
|
18
|
-
var
|
|
18
|
+
var _runtime2 = require("../constants/runtime");
|
|
19
19
|
var _console = require("../util/console");
|
|
20
20
|
var _now = require("../timing/now");
|
|
21
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
@@ -38,8 +38,8 @@ class Harvest extends _sharedContext.SharedContext {
|
|
|
38
38
|
constructor(parent) {
|
|
39
39
|
super(parent); // gets any allowed properties from the parent and stores them in `sharedContext`
|
|
40
40
|
|
|
41
|
-
this.tooManyRequestsDelay = (0,
|
|
42
|
-
this.obfuscator =
|
|
41
|
+
this.tooManyRequestsDelay = (0, _init.getConfigurationValue)(this.sharedContext.agentIdentifier, 'harvest.tooManyRequestsDelay') || 60;
|
|
42
|
+
this.obfuscator = (0, _runtime.getRuntime)(this.sharedContext.agentIdentifier).obfuscator;
|
|
43
43
|
this._events = {};
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -49,8 +49,7 @@ class Harvest extends _sharedContext.SharedContext {
|
|
|
49
49
|
* Note: Used by page_action
|
|
50
50
|
* @param {NetworkSendSpec} spec Specification for sending data
|
|
51
51
|
*/
|
|
52
|
-
sendX() {
|
|
53
|
-
let spec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
52
|
+
sendX(spec = {}) {
|
|
54
53
|
const submitMethod = submitData.getSubmitMethod({
|
|
55
54
|
isFinalHarvest: spec.opts?.unload
|
|
56
55
|
});
|
|
@@ -59,7 +58,7 @@ class Harvest extends _sharedContext.SharedContext {
|
|
|
59
58
|
isFinalHarvest: spec.opts?.unload === true
|
|
60
59
|
};
|
|
61
60
|
const payload = this.createPayload(spec.endpoint, options);
|
|
62
|
-
const caller = this.
|
|
61
|
+
const caller = this._send.bind(this);
|
|
63
62
|
return caller({
|
|
64
63
|
...spec,
|
|
65
64
|
payload,
|
|
@@ -71,31 +70,11 @@ class Harvest extends _sharedContext.SharedContext {
|
|
|
71
70
|
* Initiate a harvest call.
|
|
72
71
|
* @param {NetworkSendSpec} spec Specification for sending data
|
|
73
72
|
*/
|
|
74
|
-
send() {
|
|
75
|
-
|
|
76
|
-
const caller = this.obfuscator.shouldObfuscate() ? this.obfuscateAndSend.bind(this) : this._send.bind(this);
|
|
73
|
+
send(spec = {}) {
|
|
74
|
+
const caller = this._send.bind(this);
|
|
77
75
|
return caller(spec);
|
|
78
76
|
}
|
|
79
77
|
|
|
80
|
-
/**
|
|
81
|
-
* Apply obfuscation rules to the payload and then initial the harvest network call.
|
|
82
|
-
* @param {NetworkSendSpec} spec Specification for sending data
|
|
83
|
-
*/
|
|
84
|
-
obfuscateAndSend() {
|
|
85
|
-
var _this = this;
|
|
86
|
-
let spec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
87
|
-
const {
|
|
88
|
-
payload = {}
|
|
89
|
-
} = spec;
|
|
90
|
-
(0, _traverse.applyFnToProps)(payload, function () {
|
|
91
|
-
return _this.obfuscator.obfuscateString(...arguments);
|
|
92
|
-
}, 'string', ['e']);
|
|
93
|
-
return this._send({
|
|
94
|
-
...spec,
|
|
95
|
-
payload
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
78
|
/**
|
|
100
79
|
* Initiate a harvest call. Typically used by `sendX` and `send` methods or called directly
|
|
101
80
|
* for raw network calls.
|
|
@@ -103,20 +82,19 @@ class Harvest extends _sharedContext.SharedContext {
|
|
|
103
82
|
* @returns {boolean} True if the network call succeeded. For final harvest calls, the return
|
|
104
83
|
* value should not be relied upon because network calls will be made asynchronously.
|
|
105
84
|
*/
|
|
106
|
-
_send(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const info = (0, _config.getInfo)(this.sharedContext.agentIdentifier);
|
|
85
|
+
_send({
|
|
86
|
+
endpoint,
|
|
87
|
+
payload = {},
|
|
88
|
+
opts = {},
|
|
89
|
+
submitMethod,
|
|
90
|
+
cbFinished,
|
|
91
|
+
customUrl,
|
|
92
|
+
raw,
|
|
93
|
+
includeBaseParams = true
|
|
94
|
+
}) {
|
|
95
|
+
const info = (0, _info.getInfo)(this.sharedContext.agentIdentifier);
|
|
118
96
|
if (!info.errorBeacon) return false;
|
|
119
|
-
const agentRuntime = (0,
|
|
97
|
+
const agentRuntime = (0, _runtime.getRuntime)(this.sharedContext.agentIdentifier);
|
|
120
98
|
let {
|
|
121
99
|
body,
|
|
122
100
|
qs
|
|
@@ -130,7 +108,7 @@ class Harvest extends _sharedContext.SharedContext {
|
|
|
130
108
|
}
|
|
131
109
|
return false;
|
|
132
110
|
}
|
|
133
|
-
const init = (0,
|
|
111
|
+
const init = (0, _init.getConfiguration)(this.sharedContext.agentIdentifier);
|
|
134
112
|
const protocol = init.ssl === false ? 'http' : 'https';
|
|
135
113
|
const perceviedBeacon = init.proxy.beacon || info.errorBeacon;
|
|
136
114
|
const endpointURLPart = endpoint !== 'rum' ? "/".concat(endpoint) : '';
|
|
@@ -175,7 +153,7 @@ class Harvest extends _sharedContext.SharedContext {
|
|
|
175
153
|
let result = submitMethod({
|
|
176
154
|
url: fullUrl,
|
|
177
155
|
body,
|
|
178
|
-
sync: opts.unload &&
|
|
156
|
+
sync: opts.unload && _runtime2.isWorkerScope,
|
|
179
157
|
headers
|
|
180
158
|
});
|
|
181
159
|
if (!opts.unload && cbFinished && submitMethod === submitData.xhr) {
|
|
@@ -201,17 +179,14 @@ class Harvest extends _sharedContext.SharedContext {
|
|
|
201
179
|
cbFinished(cbResult);
|
|
202
180
|
}, (0, _eventListenerOpts.eventListenerOpts)(false));
|
|
203
181
|
}
|
|
204
|
-
const runtime = (0, _config.getRuntime)(this.sharedContext.agentIdentifier);
|
|
205
|
-
runtime.harvestCount++;
|
|
206
182
|
return result;
|
|
207
183
|
}
|
|
208
184
|
|
|
209
185
|
// The stuff that gets sent every time.
|
|
210
186
|
baseQueryString(qs, endpoint) {
|
|
211
|
-
const runtime = (0,
|
|
212
|
-
const info = (0,
|
|
213
|
-
const
|
|
214
|
-
const ref = this.obfuscator.shouldObfuscate() ? this.obfuscator.obfuscateString(location) : location;
|
|
187
|
+
const runtime = (0, _runtime.getRuntime)(this.sharedContext.agentIdentifier);
|
|
188
|
+
const info = (0, _info.getInfo)(this.sharedContext.agentIdentifier);
|
|
189
|
+
const ref = this.obfuscator.obfuscateString((0, _cleanUrl.cleanURL)((0, _location.getLocation)()));
|
|
215
190
|
const hr = runtime?.session?.state.sessionReplayMode === 1 && endpoint !== 'jserrors';
|
|
216
191
|
const qps = ['a=' + info.applicationID, (0, _encode.param)('sa', info.sa ? '' + info.sa : ''), (0, _encode.param)('v', _env.VERSION), transactionNameParam(info), (0, _encode.param)('ct', runtime.customTransaction), '&rst=' + (0, _now.now)(), '&ck=0',
|
|
217
192
|
// ck param DEPRECATED - still expected by backend
|
|
@@ -262,13 +237,11 @@ class Harvest extends _sharedContext.SharedContext {
|
|
|
262
237
|
* @param {HarvestPayload} payload Payload to be sent to the endpoint.
|
|
263
238
|
* @returns {HarvestPayload} Cleaned payload payload to be sent to the endpoint.
|
|
264
239
|
*/
|
|
265
|
-
cleanPayload() {
|
|
266
|
-
let payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
240
|
+
cleanPayload(payload = {}) {
|
|
267
241
|
const clean = input => {
|
|
268
242
|
if (typeof Uint8Array !== 'undefined' && input instanceof Uint8Array || Array.isArray(input)) return input;
|
|
269
243
|
if (typeof input === 'string') return input.length > 0 ? input : null;
|
|
270
|
-
return Object.entries(input || {}).reduce((accumulator,
|
|
271
|
-
let [key, value] = _ref2;
|
|
244
|
+
return Object.entries(input || {}).reduce((accumulator, [key, value]) => {
|
|
272
245
|
if (typeof value === 'number' || typeof value === 'string' && value.length > 0 || typeof value === 'object' && Object.keys(value || {}).length > 0) {
|
|
273
246
|
accumulator[key] = value;
|
|
274
247
|
}
|
|
@@ -8,7 +8,7 @@ exports.getAddStringContext = getAddStringContext;
|
|
|
8
8
|
exports.nullable = nullable;
|
|
9
9
|
exports.numeric = numeric;
|
|
10
10
|
var _stringify = require("../util/stringify");
|
|
11
|
-
var
|
|
11
|
+
var _runtime = require("../config/runtime");
|
|
12
12
|
/*
|
|
13
13
|
* Copyright 2020 New Relic Corporation. All rights reserved.
|
|
14
14
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -26,17 +26,13 @@ function numeric(n, noDefault) {
|
|
|
26
26
|
return n === undefined || n === 0 ? '' : Math.floor(n).toString(36);
|
|
27
27
|
}
|
|
28
28
|
function getAddStringContext(agentIdentifier) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
let stringTableIdx = 0;
|
|
30
|
+
const stringTable = Object.prototype.hasOwnProperty.call(Object, 'create') ? Object.create(null) : {};
|
|
31
|
+
const obfuscator = (0, _runtime.getRuntime)(agentIdentifier).obfuscator;
|
|
32
32
|
return addString;
|
|
33
33
|
function addString(str) {
|
|
34
34
|
if (typeof str === 'undefined' || str === '') return '';
|
|
35
|
-
|
|
36
|
-
agentIdentifier
|
|
37
|
-
});
|
|
38
|
-
str = String(str);
|
|
39
|
-
if (obfuscator.shouldObfuscate()) str = obfuscator.obfuscateString(str);
|
|
35
|
+
str = obfuscator.obfuscateString(String(str));
|
|
40
36
|
if (hasOwnProp.call(stringTable, str)) {
|
|
41
37
|
return numeric(stringTable[str], true);
|
|
42
38
|
} else {
|
|
@@ -47,8 +43,7 @@ function getAddStringContext(agentIdentifier) {
|
|
|
47
43
|
}
|
|
48
44
|
function addCustomAttributes(attrs, addString) {
|
|
49
45
|
var attrParts = [];
|
|
50
|
-
Object.entries(attrs || {}).forEach(
|
|
51
|
-
let [key, val] = _ref;
|
|
46
|
+
Object.entries(attrs || {}).forEach(([key, val]) => {
|
|
52
47
|
if (attrParts.length >= MAX_ATTRIBUTES) return;
|
|
53
48
|
var type = 5;
|
|
54
49
|
var serializedValue;
|
|
@@ -12,8 +12,8 @@ var _timer = require("../timer/timer");
|
|
|
12
12
|
var _runtime = require("../constants/runtime");
|
|
13
13
|
var _constants = require("./constants");
|
|
14
14
|
var _interactionTimer = require("../timer/interaction-timer");
|
|
15
|
-
var
|
|
16
|
-
var _configurable = require("../config/
|
|
15
|
+
var _wrapEvents = require("../wrap/wrap-events");
|
|
16
|
+
var _configurable = require("../config/configurable");
|
|
17
17
|
var _handle = require("../event-emitter/handle");
|
|
18
18
|
var _constants2 = require("../../features/metrics/constants");
|
|
19
19
|
var _features = require("../../loaders/features/features");
|
|
@@ -56,7 +56,7 @@ class SessionEntity {
|
|
|
56
56
|
// key is intended to act as the k=v pair
|
|
57
57
|
this.key = key;
|
|
58
58
|
this.ee = _contextualEe.ee.get(agentIdentifier);
|
|
59
|
-
(0,
|
|
59
|
+
(0, _wrapEvents.wrapEvents)(this.ee);
|
|
60
60
|
this.setup(opts);
|
|
61
61
|
|
|
62
62
|
/**
|
|
@@ -74,12 +74,11 @@ class SessionEntity {
|
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
setup(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
} = _ref;
|
|
77
|
+
setup({
|
|
78
|
+
value = (0, _uniqueId.generateRandomHexString)(16),
|
|
79
|
+
expiresMs = _constants.DEFAULT_EXPIRES_MS,
|
|
80
|
+
inactiveMs = _constants.DEFAULT_INACTIVE_MS
|
|
81
|
+
}) {
|
|
83
82
|
/** Ensure that certain properties are preserved across a reset if already set */
|
|
84
83
|
const persistentAttributes = {
|
|
85
84
|
serverTimeDiff: this.state.serverTimeDiff || model.serverTimeDiff
|
|
@@ -287,9 +286,7 @@ class SessionEntity {
|
|
|
287
286
|
if (type === 'inactive') tag = 'Session/Inactive/Seen';
|
|
288
287
|
if (tag) (0, _handle.handle)(_constants2.SUPPORTABILITY_METRIC_CHANNEL, [tag, value], undefined, _features.FEATURE_NAMES.metrics, this.ee);
|
|
289
288
|
}
|
|
290
|
-
getDuration() {
|
|
291
|
-
let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;
|
|
292
|
-
let useUpdatedAt = arguments.length > 1 ? arguments[1] : undefined;
|
|
289
|
+
getDuration(data = this.state, useUpdatedAt) {
|
|
293
290
|
const startingTimestamp = data.expiresAt - this.expiresMs;
|
|
294
291
|
const endingTimestamp = !useUpdatedAt ? data.updatedAt : Date.now();
|
|
295
292
|
return endingTimestamp - startingTimestamp;
|
|
@@ -43,9 +43,7 @@ function getPntType(type) {
|
|
|
43
43
|
};
|
|
44
44
|
return types[type];
|
|
45
45
|
}
|
|
46
|
-
function addPT(offset, pt) {
|
|
47
|
-
let v = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
48
|
-
let isL1Api = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
46
|
+
function addPT(offset, pt, v = {}, isL1Api = false) {
|
|
49
47
|
if (!pt) return;
|
|
50
48
|
v.of = offset;
|
|
51
49
|
handleValue(v.of, v, 'n', true);
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.TimeKeeper = void 0;
|
|
7
7
|
var _runtime = require("../constants/runtime");
|
|
8
|
-
var
|
|
8
|
+
var _runtime2 = require("../config/runtime");
|
|
9
9
|
const rfc2616Regex = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), ([0-3][0-9]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ([0-9]{4}) ([01][0-9]|2[0-3])(:[0-5][0-9]){2} GMT$/;
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -40,7 +40,7 @@ class TimeKeeper {
|
|
|
40
40
|
*/
|
|
41
41
|
#ready = false;
|
|
42
42
|
constructor(agentIdentifier) {
|
|
43
|
-
this.#session = (0,
|
|
43
|
+
this.#session = (0, _runtime2.getRuntime)(agentIdentifier)?.session;
|
|
44
44
|
this.processStoredDiff();
|
|
45
45
|
}
|
|
46
46
|
get ready() {
|
|
@@ -87,21 +87,31 @@ class TimeKeeper {
|
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* Converts a page origin relative time to an absolute timestamp
|
|
90
|
-
*
|
|
90
|
+
* using the user's local clock.
|
|
91
91
|
* @param relativeTime {number} The relative time of the event in milliseconds
|
|
92
92
|
* @returns {number} Corrected unix/epoch timestamp
|
|
93
93
|
*/
|
|
94
94
|
convertRelativeTimestamp(relativeTime) {
|
|
95
|
-
return
|
|
95
|
+
return _runtime.originTime + relativeTime;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
99
|
+
* Converts an absolute timestamp to a relative timestamp using the
|
|
100
|
+
* user's local clock.
|
|
101
|
+
* @param timestamp
|
|
102
|
+
* @returns {number}
|
|
103
|
+
*/
|
|
104
|
+
convertAbsoluteTimestamp(timestamp) {
|
|
105
|
+
return timestamp - _runtime.originTime;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Corrects an absolute timestamp to NR server time.
|
|
100
110
|
* @param timestamp {number} The unix/epoch timestamp of the event with milliseconds
|
|
101
111
|
* @return {number} Corrected unix/epoch timestamp
|
|
102
112
|
*/
|
|
103
113
|
correctAbsoluteTimestamp(timestamp) {
|
|
104
|
-
return
|
|
114
|
+
return timestamp - this.#localTimeDiff;
|
|
105
115
|
}
|
|
106
116
|
|
|
107
117
|
/** Process the session entity and use the info to set the main time calculations if present */
|