UNPKG

@grafana/faro-web-sdk

Version:

Faro instrumentations, metas, transports for web.

46 lines 2.53 kB
import { BaseInstrumentation, faro, Observable, VERSION } from '@grafana/faro-core'; import { ActivityWindowTracker, isRequestEndMessage, isRequestStartMessage } from '../_internal/activityWindowTracker'; import { monitorDomMutations } from '../_internal/monitors/domMutationMonitor'; import { monitorHttpRequests } from '../_internal/monitors/httpRequestMonitor'; import { monitorInteractions } from '../_internal/monitors/interactionMonitor'; import { monitorUrlChanges } from '../_internal/monitors/urlChangeMonitor'; export class NavigationInstrumentation extends BaseInstrumentation { constructor() { super(...arguments); this.name = '@grafana/faro-web-sdk:instrumentation-navigation'; this.version = VERSION; } initialize() { const httpMonitor = monitorHttpRequests(); const domMutationsMonitor = monitorDomMutations(); const urlMonitor = monitorUrlChanges(); const interactionMonitor = monitorInteractions(['pointerdown', 'keydown']); const activityWindowTracker = new ActivityWindowTracker(new Observable().merge(httpMonitor, domMutationsMonitor, urlMonitor), { inactivityMs: 100, drainTimeoutMs: 10 * 1000, isOperationStart: (msg) => (isRequestStartMessage(msg) ? msg.request.requestId : undefined), isOperationEnd: (msg) => (isRequestEndMessage(msg) ? msg.request.requestId : undefined), }); activityWindowTracker .filter((msg) => { return msg.message === 'tracking-ended'; }) .subscribe((msg) => { var _a, _b, _c; if (((_a = msg.events) === null || _a === void 0 ? void 0 : _a.some((e) => e.type === 'url-change')) && ((_b = msg.events) === null || _b === void 0 ? void 0 : _b.some((e) => e.type === 'dom-mutation'))) { const urlChange = (_c = msg.events) === null || _c === void 0 ? void 0 : _c.find((e) => e.type === 'url-change'); faro.api.pushEvent('faro.navigation', { fromUrl: urlChange === null || urlChange === void 0 ? void 0 : urlChange.from, toUrl: urlChange === null || urlChange === void 0 ? void 0 : urlChange.to, sameDocument: String(true), duration: msg.duration, }); } }); interactionMonitor.subscribe(() => { activityWindowTracker.startTracking(); }); } } //# sourceMappingURL=instrumentation.js.map