@newrelic/browser-agent 1.263.0 → 1.265.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +2 -2
- package/dist/cjs/cdn/experimental.js +3 -7
- package/dist/cjs/cdn/pro.js +2 -2
- package/dist/cjs/cdn/spa.js +2 -2
- package/dist/cjs/common/aggregate/aggregator.js +2 -3
- package/dist/cjs/common/config/{state/configurable.js → configurable.js} +1 -1
- package/dist/cjs/common/config/{state/info.js → info.js} +1 -1
- package/dist/cjs/common/config/{state/init.js → init.js} +11 -8
- package/dist/cjs/common/config/{state/loader-config.js → loader-config.js} +1 -1
- package/dist/cjs/common/config/{state/runtime.js → runtime.js} +16 -5
- package/dist/cjs/common/constants/agent-constants.js +8 -0
- package/dist/cjs/common/constants/env.cdn.js +1 -1
- package/dist/cjs/common/constants/env.npm.js +1 -1
- package/dist/cjs/common/constants/runtime.js +1 -3
- package/dist/cjs/common/context/shared-context.js +1 -2
- package/dist/cjs/common/dispatch/global-event.js +1 -2
- package/dist/cjs/common/drain/drain.js +12 -18
- package/dist/cjs/common/event-emitter/contextual-ee.js +3 -4
- package/dist/cjs/common/event-listener/event-listener-opts.js +2 -6
- package/dist/cjs/common/harvest/harvest-scheduler.js +1 -2
- package/dist/cjs/common/harvest/harvest.js +30 -57
- package/dist/cjs/common/serialize/bel-serializer.js +6 -11
- package/dist/cjs/common/session/session-entity.js +10 -13
- package/dist/cjs/common/timing/nav-timing.js +1 -3
- package/dist/cjs/common/timing/time-keeper.js +16 -6
- package/dist/cjs/common/url/encode.js +3 -7
- package/dist/cjs/common/util/console.js +2 -0
- package/dist/cjs/common/util/invoke.js +6 -16
- package/dist/cjs/common/util/obfuscate.js +97 -53
- package/dist/cjs/common/util/submit-data.js +17 -21
- package/dist/cjs/common/util/text.js +9 -0
- package/dist/cjs/common/util/traverse.js +1 -3
- package/dist/cjs/common/vitals/cumulative-layout-shift.js +5 -6
- package/dist/cjs/common/vitals/first-contentful-paint.js +4 -5
- package/dist/cjs/common/vitals/first-input-delay.js +4 -5
- package/dist/cjs/common/vitals/interaction-to-next-paint.js +5 -6
- package/dist/cjs/common/vitals/largest-contentful-paint.js +4 -5
- package/dist/cjs/common/vitals/time-to-first-byte.js +4 -5
- package/dist/cjs/common/vitals/vital-metric.js +5 -7
- package/dist/cjs/common/window/nreum.js +2 -1
- package/dist/cjs/common/window/page-visibility.js +1 -4
- package/dist/cjs/common/wrap/wrap-events.js +1 -4
- package/dist/cjs/common/wrap/wrap-promise.js +1 -4
- package/dist/cjs/common/wrap/wrap-websocket.js +74 -0
- package/dist/cjs/features/ajax/aggregate/chunk.js +4 -3
- package/dist/cjs/features/ajax/aggregate/gql.js +4 -5
- package/dist/cjs/features/ajax/aggregate/index.js +19 -22
- package/dist/cjs/features/ajax/constants.js +2 -3
- package/dist/cjs/features/ajax/instrument/distributed-tracing.js +9 -8
- package/dist/cjs/features/ajax/instrument/index.js +14 -12
- package/dist/cjs/features/generic_events/aggregate/index.js +128 -0
- package/dist/cjs/features/generic_events/constants.js +10 -0
- package/dist/cjs/features/generic_events/index.js +12 -0
- package/dist/cjs/features/generic_events/instrument/index.js +27 -0
- package/dist/cjs/features/jserrors/aggregate/index.js +25 -44
- package/dist/cjs/features/jserrors/instrument/index.js +4 -4
- package/dist/cjs/features/logging/aggregate/index.js +33 -36
- package/dist/cjs/features/logging/constants.js +2 -3
- package/dist/cjs/features/logging/instrument/index.js +5 -6
- package/dist/cjs/features/logging/shared/log.js +1 -3
- package/dist/cjs/features/logging/shared/utils.js +2 -4
- package/dist/cjs/features/metrics/aggregate/index.js +34 -17
- package/dist/cjs/features/metrics/aggregate/websocket-detection.js +34 -0
- package/dist/cjs/features/metrics/constants.js +4 -2
- package/dist/cjs/features/metrics/instrument/index.js +12 -4
- package/dist/cjs/features/page_action/instrument/index.js +14 -10
- package/dist/cjs/features/page_view_event/aggregate/index.js +19 -39
- package/dist/cjs/features/page_view_event/aggregate/initialized-features.js +1 -1
- package/dist/cjs/features/page_view_event/instrument/index.js +4 -4
- package/dist/cjs/features/page_view_timing/aggregate/index.js +23 -39
- package/dist/cjs/features/page_view_timing/instrument/index.js +4 -4
- package/dist/cjs/features/session_replay/aggregate/index.js +35 -42
- package/dist/cjs/features/session_replay/constants.js +1 -5
- package/dist/cjs/features/session_replay/instrument/index.js +5 -9
- package/dist/cjs/features/session_replay/shared/recorder-events.js +25 -20
- package/dist/cjs/features/session_replay/shared/recorder.js +17 -13
- package/dist/cjs/features/session_replay/shared/stylesheet-evaluator.js +2 -2
- package/dist/cjs/features/session_replay/shared/utils.js +5 -4
- package/dist/cjs/features/session_trace/aggregate/index.js +25 -42
- package/dist/cjs/features/session_trace/aggregate/trace/storage.js +5 -3
- package/dist/cjs/features/session_trace/instrument/index.js +8 -7
- package/dist/cjs/features/soft_navigations/aggregate/ajax-node.js +1 -1
- package/dist/cjs/features/soft_navigations/aggregate/index.js +22 -30
- package/dist/cjs/features/soft_navigations/aggregate/initial-page-load-interaction.js +2 -2
- package/dist/cjs/features/soft_navigations/aggregate/interaction.js +4 -5
- package/dist/cjs/features/soft_navigations/instrument/index.js +14 -13
- package/dist/cjs/features/spa/aggregate/index.js +17 -28
- package/dist/cjs/features/spa/aggregate/interaction.js +7 -6
- package/dist/cjs/features/spa/aggregate/serializer.js +4 -5
- package/dist/cjs/features/spa/constants.js +2 -2
- package/dist/cjs/features/spa/instrument/index.js +20 -19
- package/dist/cjs/features/utils/agent-session.js +6 -4
- package/dist/cjs/features/utils/aggregate-base.js +17 -10
- package/dist/cjs/features/utils/event-buffer.js +132 -0
- package/dist/cjs/features/utils/feature-gates.js +2 -2
- package/dist/cjs/features/utils/instrument-base.js +7 -8
- package/dist/cjs/features/utils/lazy-feature-loader.js +12 -12
- package/dist/cjs/features/utils/nr1-debugger.js +1 -3
- package/dist/cjs/index.js +21 -0
- package/dist/cjs/loaders/agent-base.js +4 -12
- package/dist/cjs/loaders/agent.js +7 -2
- package/dist/cjs/loaders/api/api.js +23 -35
- package/dist/cjs/loaders/api/apiAsync.js +10 -13
- package/dist/cjs/loaders/browser-agent.js +4 -3
- package/dist/cjs/loaders/configure/configure.js +16 -15
- package/dist/cjs/loaders/features/enabled-features.js +2 -2
- package/dist/cjs/loaders/features/features.js +8 -4
- package/dist/cjs/loaders/micro-agent.js +16 -15
- package/dist/esm/cdn/experimental.js +2 -5
- package/dist/esm/cdn/pro.js +2 -2
- package/dist/esm/cdn/spa.js +2 -2
- package/dist/esm/common/aggregate/aggregator.js +2 -3
- package/dist/esm/common/config/{state/configurable.js → configurable.js} +1 -1
- package/dist/esm/common/config/{state/info.js → info.js} +1 -1
- package/dist/esm/common/config/{state/init.js → init.js} +11 -8
- package/dist/esm/common/config/{state/loader-config.js → loader-config.js} +1 -1
- package/dist/esm/common/config/{state/runtime.js → runtime.js} +17 -5
- package/dist/esm/common/constants/agent-constants.js +2 -0
- package/dist/esm/common/constants/env.cdn.js +1 -1
- package/dist/esm/common/constants/env.npm.js +1 -1
- package/dist/esm/common/constants/runtime.js +0 -2
- package/dist/esm/common/context/shared-context.js +1 -2
- package/dist/esm/common/dispatch/global-event.js +1 -2
- package/dist/esm/common/drain/drain.js +12 -18
- package/dist/esm/common/event-emitter/contextual-ee.js +2 -3
- package/dist/esm/common/event-listener/event-listener-opts.js +2 -6
- package/dist/esm/common/harvest/harvest-scheduler.js +1 -2
- package/dist/esm/common/harvest/harvest.js +24 -51
- package/dist/esm/common/serialize/bel-serializer.js +6 -11
- package/dist/esm/common/session/session-entity.js +10 -13
- package/dist/esm/common/timing/nav-timing.js +1 -3
- package/dist/esm/common/timing/time-keeper.js +15 -5
- package/dist/esm/common/url/encode.js +3 -7
- package/dist/esm/common/util/console.js +2 -0
- package/dist/esm/common/util/invoke.js +6 -16
- package/dist/esm/common/util/obfuscate.js +96 -49
- package/dist/esm/common/util/submit-data.js +17 -21
- package/dist/esm/common/util/text.js +3 -0
- package/dist/esm/common/util/traverse.js +1 -3
- package/dist/esm/common/vitals/cumulative-layout-shift.js +5 -6
- package/dist/esm/common/vitals/first-contentful-paint.js +4 -5
- package/dist/esm/common/vitals/first-input-delay.js +4 -5
- package/dist/esm/common/vitals/interaction-to-next-paint.js +5 -6
- package/dist/esm/common/vitals/largest-contentful-paint.js +4 -5
- package/dist/esm/common/vitals/time-to-first-byte.js +4 -5
- package/dist/esm/common/vitals/vital-metric.js +5 -7
- package/dist/esm/common/window/nreum.js +2 -1
- package/dist/esm/common/window/page-visibility.js +1 -4
- package/dist/esm/common/wrap/wrap-events.js +1 -4
- package/dist/esm/common/wrap/wrap-promise.js +1 -4
- package/dist/esm/common/wrap/wrap-websocket.js +67 -0
- package/dist/esm/features/ajax/aggregate/chunk.js +3 -2
- package/dist/esm/features/ajax/aggregate/gql.js +4 -5
- package/dist/esm/features/ajax/aggregate/index.js +16 -19
- package/dist/esm/features/ajax/constants.js +1 -2
- package/dist/esm/features/ajax/instrument/distributed-tracing.js +2 -1
- package/dist/esm/features/ajax/instrument/index.js +10 -8
- package/dist/esm/features/generic_events/aggregate/index.js +120 -0
- package/dist/esm/features/generic_events/constants.js +4 -0
- package/dist/esm/features/generic_events/index.js +1 -0
- package/dist/esm/features/generic_events/instrument/index.js +20 -0
- package/dist/esm/features/jserrors/aggregate/index.js +20 -39
- package/dist/esm/features/jserrors/instrument/index.js +3 -3
- package/dist/esm/features/logging/aggregate/index.js +31 -34
- package/dist/esm/features/logging/constants.js +1 -2
- package/dist/esm/features/logging/instrument/index.js +4 -5
- package/dist/esm/features/logging/shared/log.js +1 -3
- package/dist/esm/features/logging/shared/utils.js +2 -4
- package/dist/esm/features/metrics/aggregate/index.js +28 -11
- package/dist/esm/features/metrics/aggregate/websocket-detection.js +29 -0
- package/dist/esm/features/metrics/constants.js +3 -1
- package/dist/esm/features/metrics/instrument/index.js +12 -4
- package/dist/esm/features/page_action/instrument/index.js +14 -9
- package/dist/esm/features/page_view_event/aggregate/index.js +17 -37
- package/dist/esm/features/page_view_event/aggregate/initialized-features.js +1 -1
- package/dist/esm/features/page_view_event/instrument/index.js +3 -3
- package/dist/esm/features/page_view_timing/aggregate/index.js +20 -36
- package/dist/esm/features/page_view_timing/instrument/index.js +3 -3
- package/dist/esm/features/session_replay/aggregate/index.js +25 -32
- package/dist/esm/features/session_replay/constants.js +0 -4
- package/dist/esm/features/session_replay/index.js +1 -7
- package/dist/esm/features/session_replay/instrument/index.js +5 -8
- package/dist/esm/features/session_replay/shared/recorder-events.js +25 -20
- package/dist/esm/features/session_replay/shared/recorder.js +14 -10
- package/dist/esm/features/session_replay/shared/stylesheet-evaluator.js +2 -2
- package/dist/esm/features/session_replay/shared/utils.js +3 -2
- package/dist/esm/features/session_trace/aggregate/index.js +20 -37
- package/dist/esm/features/session_trace/aggregate/trace/storage.js +5 -3
- package/dist/esm/features/session_trace/instrument/index.js +5 -4
- package/dist/esm/features/soft_navigations/aggregate/ajax-node.js +1 -1
- package/dist/esm/features/soft_navigations/aggregate/index.js +21 -29
- package/dist/esm/features/soft_navigations/aggregate/initial-page-load-interaction.js +1 -1
- package/dist/esm/features/soft_navigations/aggregate/interaction.js +2 -3
- package/dist/esm/features/soft_navigations/instrument/index.js +11 -10
- package/dist/esm/features/spa/aggregate/index.js +11 -22
- package/dist/esm/features/spa/aggregate/interaction.js +6 -5
- package/dist/esm/features/spa/aggregate/serializer.js +2 -3
- package/dist/esm/features/spa/constants.js +2 -2
- package/dist/esm/features/spa/instrument/index.js +12 -11
- package/dist/esm/features/utils/agent-session.js +3 -1
- package/dist/esm/features/utils/aggregate-base.js +16 -9
- package/dist/esm/features/utils/event-buffer.js +126 -0
- package/dist/esm/features/utils/feature-gates.js +1 -1
- package/dist/esm/features/utils/instrument-base.js +6 -7
- package/dist/esm/features/utils/lazy-feature-loader.js +12 -12
- package/dist/esm/features/utils/nr1-debugger.js +1 -3
- package/dist/esm/index.js +3 -0
- package/dist/esm/loaders/agent-base.js +4 -12
- package/dist/esm/loaders/agent.js +7 -2
- package/dist/esm/loaders/api/api.js +18 -30
- package/dist/esm/loaders/api/apiAsync.js +3 -6
- package/dist/esm/loaders/browser-agent.js +3 -2
- package/dist/esm/loaders/configure/configure.js +9 -8
- package/dist/esm/loaders/features/enabled-features.js +1 -1
- package/dist/esm/loaders/features/features.js +8 -4
- package/dist/esm/loaders/micro-agent.js +11 -10
- package/dist/types/common/aggregate/aggregator.d.ts.map +1 -1
- package/dist/types/common/config/configurable.d.ts.map +1 -0
- package/dist/types/common/config/info.d.ts.map +1 -0
- package/dist/types/common/config/init.d.ts.map +1 -0
- package/dist/types/common/config/loader-config.d.ts.map +1 -0
- package/dist/types/common/config/runtime.d.ts.map +1 -0
- package/dist/types/common/constants/agent-constants.d.ts +3 -0
- package/dist/types/common/constants/agent-constants.d.ts.map +1 -0
- package/dist/types/common/constants/runtime.d.ts +0 -1
- package/dist/types/common/constants/runtime.d.ts.map +1 -1
- package/dist/types/common/harvest/harvest.d.ts +1 -7
- package/dist/types/common/harvest/harvest.d.ts.map +1 -1
- package/dist/types/common/serialize/bel-serializer.d.ts.map +1 -1
- package/dist/types/common/timing/time-keeper.d.ts +9 -2
- package/dist/types/common/timing/time-keeper.d.ts.map +1 -1
- package/dist/types/common/url/encode.d.ts.map +1 -1
- package/dist/types/common/util/console.d.ts.map +1 -1
- package/dist/types/common/util/obfuscate.d.ts +78 -6
- package/dist/types/common/util/obfuscate.d.ts.map +1 -1
- package/dist/types/common/util/submit-data.d.ts.map +1 -1
- package/dist/types/common/util/text.d.ts +2 -0
- package/dist/types/common/util/text.d.ts.map +1 -0
- package/dist/types/common/window/nreum.d.ts.map +1 -1
- package/dist/types/common/wrap/wrap-websocket.d.ts +4 -0
- package/dist/types/common/wrap/wrap-websocket.d.ts.map +1 -0
- package/dist/types/features/ajax/aggregate/chunk.d.ts.map +1 -1
- package/dist/types/features/ajax/aggregate/index.d.ts +2 -3
- package/dist/types/features/ajax/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/ajax/constants.d.ts +0 -1
- package/dist/types/features/ajax/constants.d.ts.map +1 -1
- package/dist/types/features/ajax/instrument/distributed-tracing.d.ts.map +1 -1
- package/dist/types/features/ajax/instrument/index.d.ts +1 -0
- package/dist/types/features/ajax/instrument/index.d.ts.map +1 -1
- package/dist/types/features/{page_action → generic_events}/aggregate/index.d.ts +10 -10
- package/dist/types/features/generic_events/aggregate/index.d.ts.map +1 -0
- package/dist/types/features/generic_events/constants.d.ts +4 -0
- package/dist/types/features/generic_events/constants.d.ts.map +1 -0
- package/dist/types/features/generic_events/index.d.ts +2 -0
- package/dist/types/features/generic_events/index.d.ts.map +1 -0
- package/dist/types/features/generic_events/instrument/index.d.ts +7 -0
- package/dist/types/features/generic_events/instrument/index.d.ts.map +1 -0
- package/dist/types/features/jserrors/aggregate/index.d.ts +2 -2
- package/dist/types/features/jserrors/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/jserrors/instrument/index.d.ts +1 -0
- package/dist/types/features/jserrors/instrument/index.d.ts.map +1 -1
- package/dist/types/features/logging/aggregate/index.d.ts +4 -7
- package/dist/types/features/logging/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/logging/constants.d.ts +0 -1
- package/dist/types/features/logging/constants.d.ts.map +1 -1
- package/dist/types/features/logging/instrument/index.d.ts +1 -0
- package/dist/types/features/logging/instrument/index.d.ts.map +1 -1
- package/dist/types/features/metrics/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/metrics/aggregate/websocket-detection.d.ts +12 -0
- package/dist/types/features/metrics/aggregate/websocket-detection.d.ts.map +1 -0
- package/dist/types/features/metrics/constants.d.ts +1 -0
- package/dist/types/features/metrics/constants.d.ts.map +1 -1
- package/dist/types/features/metrics/instrument/index.d.ts +1 -0
- package/dist/types/features/metrics/instrument/index.d.ts.map +1 -1
- package/dist/types/features/page_action/instrument/index.d.ts +9 -4
- package/dist/types/features/page_action/instrument/index.d.ts.map +1 -1
- package/dist/types/features/page_view_event/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/page_view_event/instrument/index.d.ts +1 -0
- package/dist/types/features/page_view_event/instrument/index.d.ts.map +1 -1
- package/dist/types/features/page_view_timing/aggregate/index.d.ts +2 -2
- package/dist/types/features/page_view_timing/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/page_view_timing/instrument/index.d.ts +1 -0
- package/dist/types/features/page_view_timing/instrument/index.d.ts.map +1 -1
- package/dist/types/features/session_replay/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/session_replay/constants.d.ts +0 -4
- package/dist/types/features/session_replay/constants.d.ts.map +1 -1
- package/dist/types/features/session_replay/instrument/index.d.ts +1 -0
- package/dist/types/features/session_replay/instrument/index.d.ts.map +1 -1
- package/dist/types/features/session_replay/shared/recorder-events.d.ts +6 -6
- package/dist/types/features/session_replay/shared/recorder-events.d.ts.map +1 -1
- package/dist/types/features/session_replay/shared/recorder.d.ts +2 -2
- package/dist/types/features/session_replay/shared/recorder.d.ts.map +1 -1
- package/dist/types/features/session_replay/shared/utils.d.ts.map +1 -1
- package/dist/types/features/session_trace/aggregate/index.d.ts +2 -2
- package/dist/types/features/session_trace/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/session_trace/aggregate/trace/storage.d.ts +1 -1
- package/dist/types/features/session_trace/aggregate/trace/storage.d.ts.map +1 -1
- package/dist/types/features/session_trace/instrument/index.d.ts +1 -0
- package/dist/types/features/session_trace/instrument/index.d.ts.map +1 -1
- package/dist/types/features/soft_navigations/aggregate/index.d.ts +3 -3
- package/dist/types/features/soft_navigations/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/soft_navigations/instrument/index.d.ts +1 -0
- package/dist/types/features/soft_navigations/instrument/index.d.ts.map +1 -1
- package/dist/types/features/spa/aggregate/index.d.ts +2 -2
- package/dist/types/features/spa/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/spa/aggregate/interaction.d.ts.map +1 -1
- package/dist/types/features/spa/aggregate/serializer.d.ts.map +1 -1
- package/dist/types/features/spa/constants.d.ts.map +1 -1
- package/dist/types/features/spa/instrument/index.d.ts +1 -0
- package/dist/types/features/spa/instrument/index.d.ts.map +1 -1
- package/dist/types/features/utils/agent-session.d.ts.map +1 -1
- package/dist/types/features/utils/aggregate-base.d.ts +1 -0
- package/dist/types/features/utils/aggregate-base.d.ts.map +1 -1
- package/dist/types/features/utils/event-buffer.d.ts +72 -0
- package/dist/types/features/utils/event-buffer.d.ts.map +1 -0
- package/dist/types/features/utils/instrument-base.d.ts +1 -0
- package/dist/types/features/utils/instrument-base.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/loaders/agent-base.d.ts +1 -2
- package/dist/types/loaders/agent-base.d.ts.map +1 -1
- package/dist/types/loaders/agent.d.ts.map +1 -1
- package/dist/types/loaders/api/api.d.ts.map +1 -1
- package/dist/types/loaders/browser-agent.d.ts.map +1 -1
- package/dist/types/loaders/configure/configure.d.ts.map +1 -1
- package/dist/types/loaders/features/features.d.ts +1 -0
- package/dist/types/loaders/features/features.d.ts.map +1 -1
- package/dist/types/loaders/micro-agent.d.ts.map +1 -1
- package/package.json +67 -52
- package/src/cdn/experimental.js +2 -4
- package/src/cdn/pro.js +2 -2
- package/src/cdn/spa.js +2 -2
- package/src/common/aggregate/aggregator.js +2 -3
- package/src/common/config/__mocks__/info.js +3 -0
- package/src/common/config/__mocks__/init.js +3 -0
- package/src/common/config/__mocks__/loader-config.js +2 -0
- package/src/common/config/__mocks__/runtime.js +2 -0
- package/src/common/config/{state/configurable.js → configurable.js} +1 -1
- package/src/common/config/{state/info.js → info.js} +1 -1
- package/src/common/config/{state/init.js → init.js} +7 -6
- package/src/common/config/{state/loader-config.js → loader-config.js} +1 -1
- package/src/common/config/{state/runtime.js → runtime.js} +19 -5
- package/src/common/constants/agent-constants.js +2 -0
- package/src/common/constants/runtime.js +0 -2
- package/src/common/drain/drain.js +8 -6
- package/src/common/event-emitter/contextual-ee.js +1 -1
- package/src/common/harvest/harvest.js +10 -24
- package/src/common/serialize/bel-serializer.js +6 -9
- package/src/common/session/session-entity.js +4 -4
- package/src/common/timing/__mocks__/time-keeper.js +6 -2
- package/src/common/timing/time-keeper.js +15 -5
- package/src/common/url/encode.js +2 -3
- package/src/common/util/__mocks__/console.js +1 -0
- package/src/common/util/__mocks__/obfuscate.js +5 -8
- package/src/common/util/console.js +2 -0
- package/src/common/util/obfuscate.js +94 -50
- package/src/common/util/submit-data.js +0 -1
- package/src/common/util/text.js +6 -0
- package/src/common/window/__mocks__/nreum.js +1 -1
- package/src/common/window/nreum.js +2 -1
- package/src/common/wrap/wrap-websocket.js +73 -0
- package/src/features/ajax/aggregate/chunk.js +3 -2
- package/src/features/ajax/aggregate/index.js +20 -19
- package/src/features/ajax/constants.js +0 -2
- package/src/features/ajax/instrument/distributed-tracing.js +2 -1
- package/src/features/ajax/instrument/index.js +9 -5
- package/src/features/generic_events/aggregate/index.js +139 -0
- package/src/features/generic_events/constants.js +5 -0
- package/src/features/generic_events/index.js +1 -0
- package/src/features/generic_events/instrument/index.js +24 -0
- package/src/features/jserrors/aggregate/index.js +18 -9
- package/src/features/jserrors/instrument/index.js +2 -0
- package/src/features/logging/aggregate/index.js +39 -31
- package/src/features/logging/constants.js +0 -2
- package/src/features/logging/instrument/index.js +2 -0
- package/src/features/logging/shared/utils.js +1 -1
- package/src/features/metrics/aggregate/index.js +24 -9
- package/src/features/metrics/aggregate/websocket-detection.js +31 -0
- package/src/features/metrics/constants.js +3 -0
- package/src/features/metrics/instrument/index.js +13 -1
- package/src/features/page_action/instrument/index.js +11 -6
- package/src/features/page_view_event/aggregate/index.js +8 -23
- package/src/features/page_view_event/aggregate/initialized-features.js +1 -1
- package/src/features/page_view_event/instrument/index.js +2 -0
- package/src/features/page_view_timing/aggregate/index.js +15 -18
- package/src/features/page_view_timing/instrument/index.js +2 -0
- package/src/features/session_replay/aggregate/index.js +13 -9
- package/src/features/session_replay/constants.js +0 -4
- package/src/features/session_replay/index.js +1 -7
- package/src/features/session_replay/instrument/index.js +3 -4
- package/src/features/session_replay/shared/recorder-events.js +27 -20
- package/src/features/session_replay/shared/recorder.js +13 -6
- package/src/features/session_replay/shared/stylesheet-evaluator.js +2 -2
- package/src/features/session_replay/shared/utils.js +3 -2
- package/src/features/session_trace/aggregate/index.js +16 -7
- package/src/features/session_trace/aggregate/trace/storage.js +6 -1
- package/src/features/session_trace/instrument/index.js +4 -1
- package/src/features/soft_navigations/aggregate/ajax-node.js +1 -1
- package/src/features/soft_navigations/aggregate/index.js +13 -15
- package/src/features/soft_navigations/aggregate/initial-page-load-interaction.js +1 -1
- package/src/features/soft_navigations/aggregate/interaction.js +1 -1
- package/src/features/soft_navigations/instrument/index.js +9 -5
- package/src/features/spa/aggregate/index.js +12 -20
- package/src/features/spa/aggregate/interaction.js +6 -5
- package/src/features/spa/aggregate/serializer.js +2 -3
- package/src/features/spa/constants.js +2 -2
- package/src/features/spa/instrument/index.js +9 -3
- package/src/features/utils/agent-session.js +3 -1
- package/src/features/utils/aggregate-base.js +13 -3
- package/src/features/utils/event-buffer.js +126 -0
- package/src/features/utils/feature-gates.js +1 -1
- package/src/features/utils/instrument-base.js +2 -1
- package/src/features/utils/lazy-feature-loader.js +2 -2
- package/src/index.js +3 -0
- package/src/loaders/agent-base.js +2 -6
- package/src/loaders/agent.js +7 -2
- package/src/loaders/api/api.js +3 -2
- package/src/loaders/api/apiAsync.js +2 -2
- package/src/loaders/browser-agent.js +5 -3
- package/src/loaders/configure/configure.js +9 -2
- package/src/loaders/features/enabled-features.js +1 -1
- package/src/loaders/features/features.js +8 -4
- package/src/loaders/micro-agent.js +5 -2
- package/dist/cjs/cdn/polyfills/lite.js +0 -16
- package/dist/cjs/cdn/polyfills/pro.js +0 -21
- package/dist/cjs/cdn/polyfills/spa.js +0 -22
- package/dist/cjs/cdn/polyfills.js +0 -24
- package/dist/cjs/common/config/config.js +0 -76
- package/dist/cjs/common/config/state/originals.js +0 -8
- package/dist/cjs/common/util/map-own.js +0 -31
- package/dist/cjs/common/wrap/index.js +0 -61
- package/dist/cjs/features/page_action/aggregate/index.js +0 -121
- package/dist/esm/cdn/polyfills/lite.js +0 -14
- package/dist/esm/cdn/polyfills/pro.js +0 -19
- package/dist/esm/cdn/polyfills/spa.js +0 -20
- package/dist/esm/cdn/polyfills.js +0 -27
- package/dist/esm/common/config/config.js +0 -11
- package/dist/esm/common/config/state/originals.js +0 -2
- package/dist/esm/common/util/map-own.js +0 -24
- package/dist/esm/common/wrap/index.js +0 -13
- package/dist/esm/features/page_action/aggregate/index.js +0 -114
- package/dist/types/cdn/polyfills/lite.d.ts +0 -2
- package/dist/types/cdn/polyfills/lite.d.ts.map +0 -1
- package/dist/types/cdn/polyfills/pro.d.ts +0 -2
- package/dist/types/cdn/polyfills/pro.d.ts.map +0 -1
- package/dist/types/cdn/polyfills/spa.d.ts +0 -2
- package/dist/types/cdn/polyfills/spa.d.ts.map +0 -1
- package/dist/types/cdn/polyfills.d.ts +0 -2
- package/dist/types/cdn/polyfills.d.ts.map +0 -1
- package/dist/types/common/config/config.d.ts +0 -13
- package/dist/types/common/config/config.d.ts.map +0 -1
- package/dist/types/common/config/state/configurable.d.ts.map +0 -1
- package/dist/types/common/config/state/info.d.ts.map +0 -1
- package/dist/types/common/config/state/init.d.ts.map +0 -1
- package/dist/types/common/config/state/loader-config.d.ts.map +0 -1
- package/dist/types/common/config/state/originals.d.ts +0 -2
- package/dist/types/common/config/state/originals.d.ts.map +0 -1
- package/dist/types/common/config/state/runtime.d.ts.map +0 -1
- package/dist/types/common/util/map-own.d.ts +0 -3
- package/dist/types/common/util/map-own.d.ts.map +0 -1
- package/dist/types/common/wrap/index.d.ts +0 -10
- package/dist/types/common/wrap/index.d.ts.map +0 -1
- package/dist/types/features/page_action/aggregate/index.d.ts.map +0 -1
- package/src/cdn/polyfills/lite.js +0 -20
- package/src/cdn/polyfills/pro.js +0 -30
- package/src/cdn/polyfills/spa.js +0 -32
- package/src/cdn/polyfills.js +0 -27
- package/src/common/config/__mocks__/config.js +0 -11
- package/src/common/config/config.js +0 -12
- package/src/common/config/state/originals.js +0 -3
- package/src/common/util/map-own.js +0 -22
- package/src/common/wrap/index.js +0 -16
- package/src/features/page_action/aggregate/index.js +0 -114
- /package/dist/types/common/config/{state/configurable.d.ts → configurable.d.ts} +0 -0
- /package/dist/types/common/config/{state/info.d.ts → info.d.ts} +0 -0
- /package/dist/types/common/config/{state/init.d.ts → init.d.ts} +0 -0
- /package/dist/types/common/config/{state/loader-config.d.ts → loader-config.d.ts} +0 -0
- /package/dist/types/common/config/{state/runtime.d.ts → runtime.d.ts} +0 -0
|
@@ -7,9 +7,8 @@ exports.addCustomAttributes = addCustomAttributes;
|
|
|
7
7
|
exports.getAddStringContext = getAddStringContext;
|
|
8
8
|
exports.nullable = nullable;
|
|
9
9
|
exports.numeric = numeric;
|
|
10
|
-
var _mapOwn = require("../util/map-own");
|
|
11
10
|
var _stringify = require("../util/stringify");
|
|
12
|
-
var
|
|
11
|
+
var _runtime = require("../config/runtime");
|
|
13
12
|
/*
|
|
14
13
|
* Copyright 2020 New Relic Corporation. All rights reserved.
|
|
15
14
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -27,17 +26,13 @@ function numeric(n, noDefault) {
|
|
|
27
26
|
return n === undefined || n === 0 ? '' : Math.floor(n).toString(36);
|
|
28
27
|
}
|
|
29
28
|
function getAddStringContext(agentIdentifier) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
let stringTableIdx = 0;
|
|
30
|
+
const stringTable = Object.prototype.hasOwnProperty.call(Object, 'create') ? Object.create(null) : {};
|
|
31
|
+
const obfuscator = (0, _runtime.getRuntime)(agentIdentifier).obfuscator;
|
|
33
32
|
return addString;
|
|
34
33
|
function addString(str) {
|
|
35
34
|
if (typeof str === 'undefined' || str === '') return '';
|
|
36
|
-
|
|
37
|
-
agentIdentifier
|
|
38
|
-
});
|
|
39
|
-
str = String(str);
|
|
40
|
-
if (obfuscator.shouldObfuscate()) str = obfuscator.obfuscateString(str);
|
|
35
|
+
str = obfuscator.obfuscateString(String(str));
|
|
41
36
|
if (hasOwnProp.call(stringTable, str)) {
|
|
42
37
|
return numeric(stringTable[str], true);
|
|
43
38
|
} else {
|
|
@@ -48,7 +43,7 @@ function getAddStringContext(agentIdentifier) {
|
|
|
48
43
|
}
|
|
49
44
|
function addCustomAttributes(attrs, addString) {
|
|
50
45
|
var attrParts = [];
|
|
51
|
-
|
|
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
|
/**
|
|
@@ -64,7 +64,7 @@ class SessionEntity {
|
|
|
64
64
|
* if the event was spawned on the current page or an adjacent page, and the behavior tied
|
|
65
65
|
* to storage events is critical to apply only to cross-tab behavior
|
|
66
66
|
* */
|
|
67
|
-
if (_runtime.isBrowserScope
|
|
67
|
+
if (_runtime.isBrowserScope) {
|
|
68
68
|
(0, _eventListenerOpts.windowAddEventListener)('storage', event => {
|
|
69
69
|
if (event.key === this.lookupKey) {
|
|
70
70
|
const obj = typeof event.newValue === 'string' ? JSON.parse(event.newValue) : event.newValue;
|
|
@@ -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 */
|
|
@@ -7,7 +7,6 @@ exports.fromArray = fromArray;
|
|
|
7
7
|
exports.obj = obj;
|
|
8
8
|
exports.param = param;
|
|
9
9
|
exports.qs = qs;
|
|
10
|
-
var _mapOwn = require("../util/map-own");
|
|
11
10
|
var _stringify = require("../util/stringify");
|
|
12
11
|
/*
|
|
13
12
|
* Copyright 2020 New Relic Corporation. All rights reserved.
|
|
@@ -23,9 +22,7 @@ var charMap = {
|
|
|
23
22
|
'%24': '$',
|
|
24
23
|
'%3B': ';'
|
|
25
24
|
};
|
|
26
|
-
var charList =
|
|
27
|
-
return k;
|
|
28
|
-
});
|
|
25
|
+
var charList = Object.keys(charMap);
|
|
29
26
|
var safeEncoded = new RegExp(charList.join('|'), 'g');
|
|
30
27
|
function real(c) {
|
|
31
28
|
return charMap[c];
|
|
@@ -48,7 +45,7 @@ function fromArray(qs, maxBytes) {
|
|
|
48
45
|
function obj(payload, maxBytes) {
|
|
49
46
|
var total = 0;
|
|
50
47
|
var result = '';
|
|
51
|
-
|
|
48
|
+
Object.entries(payload || {}).forEach(([feature, dataArray]) => {
|
|
52
49
|
var intermediate = [];
|
|
53
50
|
var next;
|
|
54
51
|
var i;
|
|
@@ -71,8 +68,7 @@ function obj(payload, maxBytes) {
|
|
|
71
68
|
}
|
|
72
69
|
|
|
73
70
|
// Constructs an HTTP parameter to add to the BAM router URL
|
|
74
|
-
function param(name, value) {
|
|
75
|
-
let base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
71
|
+
function param(name, value, base = {}) {
|
|
76
72
|
if (Object.keys(base).includes(name)) return ''; // we assume if feature supplied a matching qp to the base, we should honor what the feature sent over the default
|
|
77
73
|
if (value && typeof value === 'string') {
|
|
78
74
|
return '&' + name + '=' + qs(value);
|
|
@@ -4,6 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.warn = warn;
|
|
7
|
+
/* eslint no-console: ["error", { allow: ["debug"] }] */
|
|
8
|
+
|
|
7
9
|
/**
|
|
8
10
|
* A helper method to warn to the console with New Relic: decoration
|
|
9
11
|
* @param {string} message The primary message to warn
|
|
@@ -27,18 +27,12 @@ exports.single = single;
|
|
|
27
27
|
* @returns {function} A wrapping function that will ensure the provided function
|
|
28
28
|
* is invoked only once within the given timeout.
|
|
29
29
|
*/
|
|
30
|
-
function debounce(func) {
|
|
31
|
-
var _this = this;
|
|
32
|
-
let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
|
|
33
|
-
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
30
|
+
function debounce(func, timeout = 500, options = {}) {
|
|
34
31
|
const leading = options?.leading || false;
|
|
35
32
|
let timer;
|
|
36
|
-
return
|
|
37
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
38
|
-
args[_key] = arguments[_key];
|
|
39
|
-
}
|
|
33
|
+
return (...args) => {
|
|
40
34
|
if (leading && timer === undefined) {
|
|
41
|
-
func.apply(
|
|
35
|
+
func.apply(this, args);
|
|
42
36
|
timer = setTimeout(() => {
|
|
43
37
|
timer = clearTimeout(timer);
|
|
44
38
|
}, timeout);
|
|
@@ -46,7 +40,7 @@ function debounce(func) {
|
|
|
46
40
|
if (!leading) {
|
|
47
41
|
clearTimeout(timer);
|
|
48
42
|
timer = setTimeout(() => {
|
|
49
|
-
func.apply(
|
|
43
|
+
func.apply(this, args);
|
|
50
44
|
}, timeout);
|
|
51
45
|
}
|
|
52
46
|
};
|
|
@@ -61,15 +55,11 @@ function debounce(func) {
|
|
|
61
55
|
* is invoked only once.
|
|
62
56
|
*/
|
|
63
57
|
function single(func) {
|
|
64
|
-
var _this2 = this;
|
|
65
58
|
let called = false;
|
|
66
|
-
return
|
|
59
|
+
return (...args) => {
|
|
67
60
|
if (!called) {
|
|
68
61
|
called = true;
|
|
69
|
-
|
|
70
|
-
args[_key2] = arguments[_key2];
|
|
71
|
-
}
|
|
72
|
-
func.apply(_this2, args);
|
|
62
|
+
func.apply(this, args);
|
|
73
63
|
}
|
|
74
64
|
};
|
|
75
65
|
}
|
|
@@ -4,67 +4,111 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Obfuscator = void 0;
|
|
7
|
-
|
|
8
|
-
exports.validateRules = validateRules;
|
|
9
|
-
var _config = require("../config/config");
|
|
10
|
-
var _sharedContext = require("../context/shared-context");
|
|
7
|
+
var _init = require("../config/init");
|
|
11
8
|
var _protocol = require("../url/protocol");
|
|
12
9
|
var _console = require("./console");
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Represents an obfuscation rule that can be applied to harvested payloads
|
|
12
|
+
* @typedef {object} ObfuscationRule
|
|
13
|
+
* @property {string|RegExp} regex The regular expression to match against in the payload
|
|
14
|
+
* @property {string} [replacement] The string to replace the matched regex with
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Represents an obfuscation rule validation state
|
|
19
|
+
* @typedef {object} ObfuscationRuleValidation
|
|
20
|
+
* @property {ObfuscationRule} rule The original rule validated
|
|
21
|
+
* @property {boolean} isValid Whether the rule is valid
|
|
22
|
+
* @property {object} errors Validation errors
|
|
23
|
+
* @property {boolean} errors.regexMissingDetected Whether the regex is missing
|
|
24
|
+
* @property {boolean} errors.invalidRegexDetected Whether the regex is invalid
|
|
25
|
+
* @property {boolean} errors.invalidReplacementDetected Whether the replacement is invalid
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
class Obfuscator {
|
|
29
|
+
/**
|
|
30
|
+
* @type {ObfuscationRuleValidation[]}
|
|
31
|
+
*/
|
|
32
|
+
#ruleValidationCache;
|
|
33
|
+
constructor(agentIdentifier) {
|
|
34
|
+
this.#ruleValidationCache = Obfuscator.getRuleValidationCache(agentIdentifier);
|
|
35
|
+
Obfuscator.logObfuscationRuleErrors(this.#ruleValidationCache);
|
|
36
|
+
}
|
|
37
|
+
get ruleValidationCache() {
|
|
38
|
+
return this.#ruleValidationCache;
|
|
20
39
|
}
|
|
21
40
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Applies all valid obfuscation rules to the provided input string
|
|
43
|
+
* @param {string} input String to obfuscate
|
|
44
|
+
* @returns {string}
|
|
45
|
+
*/
|
|
46
|
+
obfuscateString(input) {
|
|
47
|
+
// if input is not of type string or is an empty string, short-circuit
|
|
48
|
+
if (typeof input !== 'string' || input.trim().length === 0) return input;
|
|
49
|
+
return this.#ruleValidationCache.filter(ruleValidation => ruleValidation.isValid).reduce((input, ruleValidation) => {
|
|
50
|
+
const {
|
|
51
|
+
rule
|
|
52
|
+
} = ruleValidation;
|
|
53
|
+
return input.replace(rule.regex, rule.replacement || '*');
|
|
54
|
+
}, input);
|
|
55
|
+
}
|
|
28
56
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Returns an array of obfuscation rules to be applied to harvested payloads
|
|
59
|
+
* @param {string} agentIdentifier The agent identifier to get rules for
|
|
60
|
+
* @returns {ObfuscationRuleValidation[]} The array of rules or validation states
|
|
61
|
+
*/
|
|
62
|
+
static getRuleValidationCache(agentIdentifier) {
|
|
63
|
+
/**
|
|
64
|
+
* @type {ObfuscationRule[]}
|
|
65
|
+
*/
|
|
66
|
+
let rules = (0, _init.getConfigurationValue)(agentIdentifier, 'obfuscate') || [];
|
|
67
|
+
if ((0, _protocol.isFileProtocol)()) {
|
|
68
|
+
rules.push({
|
|
69
|
+
regex: /^file:\/\/(.*)/,
|
|
70
|
+
replacement: atob('ZmlsZTovL09CRlVTQ0FURUQ=')
|
|
71
|
+
});
|
|
34
72
|
}
|
|
35
|
-
return
|
|
73
|
+
return rules.map(rule => Obfuscator.validateObfuscationRule(rule));
|
|
36
74
|
}
|
|
37
|
-
}
|
|
38
75
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Validates an obfuscation rule and provides errors if any are found.
|
|
78
|
+
* @param {ObfuscationRule} rule The rule to validate
|
|
79
|
+
* @returns {ObfuscationRuleValidation} The validation state of the rule
|
|
80
|
+
*/
|
|
81
|
+
static validateObfuscationRule(rule) {
|
|
82
|
+
const regexMissingDetected = Boolean(rule.regex === undefined);
|
|
83
|
+
const invalidRegexDetected = Boolean(rule.regex !== undefined && typeof rule.regex !== 'string' && !(rule.regex instanceof RegExp));
|
|
84
|
+
const invalidReplacementDetected = Boolean(rule.replacement && typeof rule.replacement !== 'string');
|
|
85
|
+
return {
|
|
86
|
+
rule,
|
|
87
|
+
isValid: !regexMissingDetected && !invalidRegexDetected && !invalidReplacementDetected,
|
|
88
|
+
errors: {
|
|
89
|
+
regexMissingDetected,
|
|
90
|
+
invalidRegexDetected,
|
|
91
|
+
invalidReplacementDetected
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
50
95
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
(0, _console.warn)(14);
|
|
66
|
-
invalidReplacementDetected = true;
|
|
96
|
+
/**
|
|
97
|
+
* Logs any obfuscation rule errors to the console. This is called when an obfuscator
|
|
98
|
+
* instance is created.
|
|
99
|
+
* @param {ObfuscationRuleValidation[]} ruleValidationCache The cache of rule validation states
|
|
100
|
+
*/
|
|
101
|
+
static logObfuscationRuleErrors(ruleValidationCache) {
|
|
102
|
+
for (const ruleValidation of ruleValidationCache) {
|
|
103
|
+
const {
|
|
104
|
+
rule,
|
|
105
|
+
isValid,
|
|
106
|
+
errors
|
|
107
|
+
} = ruleValidation;
|
|
108
|
+
if (isValid) continue;
|
|
109
|
+
if (errors.regexMissingDetected) (0, _console.warn)(12, rule);else if (errors.invalidRegexDetected) (0, _console.warn)(13, rule);
|
|
110
|
+
if (errors.invalidReplacementDetected) (0, _console.warn)(14, rule);
|
|
67
111
|
}
|
|
68
112
|
}
|
|
69
|
-
|
|
70
|
-
|
|
113
|
+
}
|
|
114
|
+
exports.Obfuscator = Obfuscator;
|
|
@@ -23,14 +23,12 @@ var _runtime = require("../constants/runtime");
|
|
|
23
23
|
* @param {boolean} opts.isFinalHarvest Indicates if the data submission is due to
|
|
24
24
|
* a final harvest within the agent.
|
|
25
25
|
*/
|
|
26
|
-
function getSubmitMethod(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
26
|
+
function getSubmitMethod({
|
|
27
|
+
isFinalHarvest = false
|
|
28
|
+
} = {}) {
|
|
30
29
|
return isFinalHarvest && _runtime.isBrowserScope && _runtime.supportsSendBeacon
|
|
31
30
|
// Use sendBeacon for final harvest
|
|
32
31
|
? beacon
|
|
33
|
-
// Only IE does not support sendBeacon for final harvest
|
|
34
32
|
// If not final harvest, or not browserScope, always use xhr post
|
|
35
33
|
: xhr;
|
|
36
34
|
}
|
|
@@ -45,17 +43,16 @@ function getSubmitMethod() {
|
|
|
45
43
|
* @param {{key: string, value: string}[]} [args.headers] - The headers to attach.
|
|
46
44
|
* @returns {XMLHttpRequest}
|
|
47
45
|
*/
|
|
48
|
-
function xhr(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
} = _ref;
|
|
46
|
+
function xhr({
|
|
47
|
+
url,
|
|
48
|
+
body = null,
|
|
49
|
+
sync,
|
|
50
|
+
method = 'POST',
|
|
51
|
+
headers = [{
|
|
52
|
+
key: 'content-type',
|
|
53
|
+
value: 'text/plain'
|
|
54
|
+
}]
|
|
55
|
+
}) {
|
|
59
56
|
const request = new XMLHttpRequest();
|
|
60
57
|
request.open(method, url, !sync);
|
|
61
58
|
try {
|
|
@@ -78,11 +75,10 @@ function xhr(_ref) {
|
|
|
78
75
|
* @param {string=} args.body - The Stringified body
|
|
79
76
|
* @returns {boolean}
|
|
80
77
|
*/
|
|
81
|
-
function beacon(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
} = _ref2;
|
|
78
|
+
function beacon({
|
|
79
|
+
url,
|
|
80
|
+
body
|
|
81
|
+
}) {
|
|
86
82
|
try {
|
|
87
83
|
// Navigator has to be bound to ensure it does not error in some browsers
|
|
88
84
|
// https://xgwang.me/posts/you-may-not-know-beacon/#it-may-throw-error%2C-be-sure-to-catch
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.toTitleCase = toTitleCase;
|
|
7
|
+
function toTitleCase(str, regex = /\w*/g) {
|
|
8
|
+
return str.replace(regex, text => text.charAt(0).toUpperCase() + text.substring(1).toLowerCase());
|
|
9
|
+
}
|
|
@@ -18,9 +18,7 @@ exports.applyFnToProps = applyFnToProps;
|
|
|
18
18
|
* @param {Array<string>} [ignoreKeys=[]] - The keys of properties to ignore and not modify.
|
|
19
19
|
* @returns {Object} - The object with function recursively applied.
|
|
20
20
|
*/
|
|
21
|
-
function applyFnToProps(obj, fn) {
|
|
22
|
-
let type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'string';
|
|
23
|
-
let ignoreKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
21
|
+
function applyFnToProps(obj, fn, type = 'string', ignoreKeys = []) {
|
|
24
22
|
if (!obj || typeof obj !== 'object') return obj;
|
|
25
23
|
Object.keys(obj).forEach(property => {
|
|
26
24
|
if (typeof obj[property] === 'object') {
|
|
@@ -10,12 +10,11 @@ var _vitalMetric = require("./vital-metric");
|
|
|
10
10
|
var _runtime = require("../constants/runtime");
|
|
11
11
|
const cumulativeLayoutShift = exports.cumulativeLayoutShift = new _vitalMetric.VitalMetric(_constants.VITAL_NAMES.CUMULATIVE_LAYOUT_SHIFT, x => x);
|
|
12
12
|
if (_runtime.isBrowserScope) {
|
|
13
|
-
(0, _attribution.onCLS)(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
} = _ref;
|
|
13
|
+
(0, _attribution.onCLS)(({
|
|
14
|
+
value,
|
|
15
|
+
attribution,
|
|
16
|
+
id
|
|
17
|
+
}) => {
|
|
19
18
|
const attrs = {
|
|
20
19
|
metricId: id,
|
|
21
20
|
largestShiftTarget: attribution.largestShiftTarget,
|
|
@@ -32,11 +32,10 @@ if (_runtime.isBrowserScope) {
|
|
|
32
32
|
// ignore
|
|
33
33
|
}
|
|
34
34
|
} else {
|
|
35
|
-
(0, _attribution.onFCP)(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
} = _ref;
|
|
35
|
+
(0, _attribution.onFCP)(({
|
|
36
|
+
value,
|
|
37
|
+
attribution
|
|
38
|
+
}) => {
|
|
40
39
|
if (_runtime.initiallyHidden || firstContentfulPaint.isValid) return;
|
|
41
40
|
const attrs = {
|
|
42
41
|
timeToFirstByte: attribution.timeToFirstByte,
|
|
@@ -10,11 +10,10 @@ var _constants = require("./constants");
|
|
|
10
10
|
var _runtime = require("../constants/runtime");
|
|
11
11
|
const firstInputDelay = exports.firstInputDelay = new _vitalMetric.VitalMetric(_constants.VITAL_NAMES.FIRST_INPUT_DELAY);
|
|
12
12
|
if (_runtime.isBrowserScope) {
|
|
13
|
-
(0, _attribution.onFID)(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} = _ref;
|
|
13
|
+
(0, _attribution.onFID)(({
|
|
14
|
+
value,
|
|
15
|
+
attribution
|
|
16
|
+
}) => {
|
|
18
17
|
if (_runtime.initiallyHidden || firstInputDelay.isValid) return;
|
|
19
18
|
const attrs = {
|
|
20
19
|
type: attribution.eventType,
|
|
@@ -11,12 +11,11 @@ var _runtime = require("../constants/runtime");
|
|
|
11
11
|
const interactionToNextPaint = exports.interactionToNextPaint = new _vitalMetric.VitalMetric(_constants.VITAL_NAMES.INTERACTION_TO_NEXT_PAINT);
|
|
12
12
|
if (_runtime.isBrowserScope) {
|
|
13
13
|
/* Interaction-to-Next-Paint */
|
|
14
|
-
(0, _attribution.onINP)(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} = _ref;
|
|
14
|
+
(0, _attribution.onINP)(({
|
|
15
|
+
value,
|
|
16
|
+
attribution,
|
|
17
|
+
id
|
|
18
|
+
}) => {
|
|
20
19
|
const attrs = {
|
|
21
20
|
metricId: id,
|
|
22
21
|
eventTarget: attribution.eventTarget,
|
|
@@ -11,11 +11,10 @@ var _runtime = require("../constants/runtime");
|
|
|
11
11
|
var _cleanUrl = require("../url/clean-url");
|
|
12
12
|
const largestContentfulPaint = exports.largestContentfulPaint = new _vitalMetric.VitalMetric(_constants.VITAL_NAMES.LARGEST_CONTENTFUL_PAINT);
|
|
13
13
|
if (_runtime.isBrowserScope) {
|
|
14
|
-
(0, _attribution.onLCP)(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
} = _ref;
|
|
14
|
+
(0, _attribution.onLCP)(({
|
|
15
|
+
value,
|
|
16
|
+
attribution
|
|
17
|
+
}) => {
|
|
19
18
|
/* Largest Contentful Paint - As of WV v3, it still imperfectly tries to detect document vis state asap and isn't supposed to report if page starts hidden. */
|
|
20
19
|
if (_runtime.initiallyHidden || largestContentfulPaint.isValid) return;
|
|
21
20
|
let attrs;
|
|
@@ -18,11 +18,10 @@ const timeToFirstByte = exports.timeToFirstByte = new _vitalMetric.VitalMetric(_
|
|
|
18
18
|
* - cross-origin iframes specifically in firefox and safari
|
|
19
19
|
*/
|
|
20
20
|
if (_runtime.isBrowserScope && typeof PerformanceNavigationTiming !== 'undefined' && !_runtime.isiOS && window === window.parent) {
|
|
21
|
-
(0, _attribution.onTTFB)(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
} = _ref;
|
|
21
|
+
(0, _attribution.onTTFB)(({
|
|
22
|
+
value,
|
|
23
|
+
attribution
|
|
24
|
+
}) => {
|
|
26
25
|
if (timeToFirstByte.isValid) return;
|
|
27
26
|
timeToFirstByte.update({
|
|
28
27
|
value,
|
|
@@ -12,11 +12,10 @@ class VitalMetric {
|
|
|
12
12
|
this.attrs = {};
|
|
13
13
|
this.roundingMethod = typeof roundingMethod === 'function' ? roundingMethod : Math.floor;
|
|
14
14
|
}
|
|
15
|
-
update(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} = _ref;
|
|
15
|
+
update({
|
|
16
|
+
value,
|
|
17
|
+
attrs = {}
|
|
18
|
+
}) {
|
|
20
19
|
if (value === undefined || value === null || value < 0) return;
|
|
21
20
|
const state = {
|
|
22
21
|
value: this.roundingMethod(value),
|
|
@@ -42,8 +41,7 @@ class VitalMetric {
|
|
|
42
41
|
get isValid() {
|
|
43
42
|
return this.current.value >= 0;
|
|
44
43
|
}
|
|
45
|
-
subscribe(callback) {
|
|
46
|
-
let buffered = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
44
|
+
subscribe(callback, buffered = true) {
|
|
47
45
|
if (typeof callback !== 'function') return;
|
|
48
46
|
this.#subscribers.add(callback);
|
|
49
47
|
// emit full history on subscription ("buffered" behavior)
|
|
@@ -66,7 +66,8 @@ function gosNREUMOriginals() {
|
|
|
66
66
|
PR: _runtime.globalScope.Promise,
|
|
67
67
|
MO: _runtime.globalScope.MutationObserver,
|
|
68
68
|
// this'll be undefined if not in a web window
|
|
69
|
-
FETCH: _runtime.globalScope.fetch
|
|
69
|
+
FETCH: _runtime.globalScope.fetch,
|
|
70
|
+
WS: _runtime.globalScope.WebSocket
|
|
70
71
|
};
|
|
71
72
|
}
|
|
72
73
|
return nr;
|