UNPKG

@embrace-io/web-sdk

Version:
87 lines (86 loc) 3.76 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const require_utils_getSelector = require("../../../utils/getSelector.cjs"); const require_constants_attributes = require("../../../constants/attributes.cjs"); const require_instrumentations_EmbraceInstrumentationBase_EmbraceInstrumentationBase = require("../../EmbraceInstrumentationBase/EmbraceInstrumentationBase.cjs"); const require_instrumentations_rage_click_RageClickInstrumentation_constants = require("./constants.cjs"); let _opentelemetry_api_logs = require("@opentelemetry/api-logs"); //#region src/instrumentations/rage-click/RageClickInstrumentation/RageClickInstrumentation.ts var RageClickInstrumentation = class extends require_instrumentations_EmbraceInstrumentationBase_EmbraceInstrumentationBase.EmbraceInstrumentationBase { _onClickHandler; _eventWindow = null; constructor({ diag, perf } = {}) { super({ instrumentationName: "RageClickInstrumentation", instrumentationVersion: "1.0.0", diag, perf, config: {} }); this._onClickHandler = (event) => { try { this._handleClick(event); } catch (e) { this._diag.error("failed to process rage-click candidate", e); } }; if (this._config.enabled) this.enable(); } onDisable() { document.removeEventListener("click", this._onClickHandler); this._flush(); } onEnable() { document.addEventListener("click", this._onClickHandler); } _handleClick(event) { if (!(event.target instanceof Element)) return; const target = event.target; const interactionType = event instanceof PointerEvent && event.pointerType === "touch" ? "tap" : "click"; if (this._eventWindow === null) { this._eventWindow = { target, x: event.clientX, y: event.clientY, count: 1, interactionType, timestamp: event.timeStamp, timeoutId: window.setTimeout(() => { try { this._flush(); } catch (e) { this._diag.error("failed to emit rage-click log", e); } }, 500) }; return; } const sameTarget = target === this._eventWindow.target; const dx = Math.abs(event.clientX - this._eventWindow.x); const dy = Math.abs(event.clientY - this._eventWindow.y); if (sameTarget || dx <= 50 && dy <= 50) this._eventWindow.count += 1; } _flush() { if (this._eventWindow === null) return; const eventWindow = this._eventWindow; window.clearTimeout(eventWindow.timeoutId); this._eventWindow = null; if (eventWindow.count < 3) return; this.logger.emit({ timestamp: this.perf.epochMillisFromOrigin(eventWindow.timestamp), eventName: require_instrumentations_rage_click_RageClickInstrumentation_constants.RAGE_CLICK_EVENT_NAME, severityNumber: _opentelemetry_api_logs.SeverityNumber.INFO, attributes: { [require_constants_attributes.KEY_EMB_TYPE]: "emb.otel_log", [require_instrumentations_rage_click_RageClickInstrumentation_constants.ATTR_RAGE_CLICK_ELEMENT_TYPE]: eventWindow.target.tagName.toLowerCase(), [require_instrumentations_rage_click_RageClickInstrumentation_constants.ATTR_RAGE_CLICK_ELEMENT_SELECTOR]: require_utils_getSelector.getSelector(eventWindow.target), [require_instrumentations_rage_click_RageClickInstrumentation_constants.ATTR_RAGE_CLICK_X]: eventWindow.x, [require_instrumentations_rage_click_RageClickInstrumentation_constants.ATTR_RAGE_CLICK_Y]: eventWindow.y, [require_instrumentations_rage_click_RageClickInstrumentation_constants.ATTR_RAGE_CLICK_COUNT]: eventWindow.count, [require_instrumentations_rage_click_RageClickInstrumentation_constants.ATTR_RAGE_CLICK_INTERACTION_TYPE]: eventWindow.interactionType } }); } }; //#endregion exports.RageClickInstrumentation = RageClickInstrumentation; //# sourceMappingURL=RageClickInstrumentation.cjs.map