@coralogix/browser 3.19.1 → 3.20.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 CHANGED
@@ -1,3 +1,27 @@
1
+ ## 3.20.0 (2026-07-21)
2
+
3
+ ### 🚀 Features
4
+
5
+ - Add Proofpoint env
6
+
7
+ ## 3.19.4 (2026-07-20)
8
+
9
+ ### 🩹 Fixes
10
+
11
+ - Improve dead-click handling and referrer path resolution
12
+
13
+ ## 3.19.3 (2026-07-14)
14
+
15
+ ### 🩹 Fixes
16
+
17
+ - Improve action-name attribute detection in nested elements
18
+
19
+ ## 3.19.2 (2026-07-13)
20
+
21
+ ### 🩹 Fixes
22
+
23
+ - fingerprint the clickable ancestor, not the raw click target
24
+
1
25
  ## 3.19.1 (2026-07-12)
2
26
 
3
27
  ### 🩹 Fixes
package/index.esm2.js CHANGED
@@ -2198,6 +2198,7 @@ function handleMutations(mutations) {
2198
2198
  }
2199
2199
 
2200
2200
  var PARENT_SEARCH_DEPTH = 5;
2201
+ var ACTION_NAME_SEARCH_DEPTH = 10;
2201
2202
  var POINTER_CURSOR = 'pointer';
2202
2203
  var CLICKABLE_SELECTOR = 'a, button, input, select, textarea, label, summary, option, li, ' +
2203
2204
  '[role="button"], [role="link"], [role="tab"], ' +
@@ -2214,7 +2215,7 @@ function getAttributeFromAncestors(element, attr, depth) {
2214
2215
  return getAttributeFromAncestors(element.parentElement, attr, depth - 1);
2215
2216
  }
2216
2217
  function extractActionName(el) {
2217
- return getAttributeFromAncestors(el, CX_ACTION_NAME_ATTRIBUTE);
2218
+ return getAttributeFromAncestors(el, CX_ACTION_NAME_ATTRIBUTE, ACTION_NAME_SEARCH_DEPTH);
2218
2219
  }
2219
2220
  function extractAriaLabel(el) {
2220
2221
  return getAttributeFromAncestors(el, ARIA_LABEL_ATTRIBUTE);
@@ -2223,14 +2224,14 @@ function extractTestId(el) {
2223
2224
  return (el === null || el === void 0 ? void 0 : el.getAttribute(DATA_TEST_ATTRIBUTE)) || '';
2224
2225
  }
2225
2226
  function extractResolvedName(_a) {
2226
- var element = _a.element, clickableElement = _a.clickableElement, config = _a.config, actionName = _a.actionName, ariaLabel = _a.ariaLabel;
2227
+ var element = _a.element, config = _a.config, actionName = _a.actionName, ariaLabel = _a.ariaLabel;
2227
2228
  if (!element)
2228
2229
  return '';
2229
2230
  if (actionName)
2230
2231
  return actionName;
2231
2232
  if (isElementMasked(element, config))
2232
2233
  return MASKED_TEXT;
2233
- return (ariaLabel || getPlaceholder(element) || getInnerText(clickableElement) || '');
2234
+ return (ariaLabel || getPlaceholder(element) || getInnerText(element) || '');
2234
2235
  }
2235
2236
  function getPlaceholder(element) {
2236
2237
  if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {
@@ -2588,13 +2589,12 @@ var CoralogixUserInteractionInstrumentation = (function (_super) {
2588
2589
  }
2589
2590
  if (eventTarget instanceof Element) {
2590
2591
  var clickableElement = findClickableElement(eventTarget);
2591
- var elementText = extractMaskedOrTextContent(clickableElement, config);
2592
+ var elementText = extractMaskedOrTextContent(eventTarget, config);
2592
2593
  var cxActionName = extractActionName(eventTarget);
2593
2594
  var ariaLabel = extractAriaLabel(eventTarget);
2594
2595
  var testId = extractTestId(eventTarget);
2595
2596
  var resolvedName = extractResolvedName({
2596
- element: eventTarget,
2597
- clickableElement: clickableElement,
2597
+ element: clickableElement !== null && clickableElement !== void 0 ? clickableElement : eventTarget,
2598
2598
  config: config,
2599
2599
  actionName: cxActionName,
2600
2600
  ariaLabel: ariaLabel,
@@ -2603,7 +2603,7 @@ var CoralogixUserInteractionInstrumentation = (function (_super) {
2603
2603
  var _b = eventTarget.getBoundingClientRect(), width = _b.width, height = _b.height;
2604
2604
  span.setAttribute(CoralogixAttributes.ELEMENT_WIDTH, width);
2605
2605
  span.setAttribute(CoralogixAttributes.ELEMENT_HEIGHT, height);
2606
- var fingerprint = getElementFingerprint(eventTarget);
2606
+ var fingerprint = getElementFingerprint(clickableElement !== null && clickableElement !== void 0 ? clickableElement : eventTarget);
2607
2607
  if (fingerprint) {
2608
2608
  span.setAttribute(CoralogixAttributes.ELEMENT_FINGERPRINT, fingerprint);
2609
2609
  var isRageClick = clickableElement
@@ -3073,7 +3073,9 @@ var idPatterns = [
3073
3073
  var PATH_ID_PLACEHOLDER = '/{id}';
3074
3074
  var NUMERIC_PATH_SEGMENT_REGEX = /\/(?![vV]\d{1,2}\/)([^/\d?]*\d+[^/?]*)/g;
3075
3075
  function replaceNumericPathSegments(url) {
3076
- var replacePath = function (s) { return s.replace(NUMERIC_PATH_SEGMENT_REGEX, PATH_ID_PLACEHOLDER); };
3076
+ var replacePath = function (s) {
3077
+ return s.replace(NUMERIC_PATH_SEGMENT_REGEX, PATH_ID_PLACEHOLDER);
3078
+ };
3077
3079
  try {
3078
3080
  var origin_1 = new URL(url).origin;
3079
3081
  if (origin_1 === 'null' || !url.startsWith(origin_1))
@@ -3224,6 +3226,7 @@ var CoralogixDomainsApiUrlMap = {
3224
3226
  AP1: 'https://ingress.ap1.rum-ingress-coralogix.com',
3225
3227
  AP2: 'https://ingress.ap2.rum-ingress-coralogix.com',
3226
3228
  AP3: 'https://ingress.ap3.rum-ingress-coralogix.com',
3229
+ PROOFPOINT: 'https://ingress.proofpoint.rum-ingress-coralogix.com',
3227
3230
  STAGING: 'https://ingress.staging.rum-ingress-coralogix.com',
3228
3231
  };
3229
3232
  var PROXY_CX_FORWARD_PARAMETER = 'cxforward';
@@ -3338,7 +3341,8 @@ var getCachedUrlParts = function (cacheKey, url) {
3338
3341
  }
3339
3342
  catch (_c) {
3340
3343
  }
3341
- var parts = getUrlParts(url);
3344
+ var baseParts = getUrlParts(url);
3345
+ var parts = baseParts && __assign(__assign({}, baseParts), { path: getUrlFragments(url) });
3342
3346
  try {
3343
3347
  (_b = CxGlobal.sessionStorage) === null || _b === void 0 ? void 0 : _b.setItem(cacheKey, JSON.stringify({ url: url, parts: parts }));
3344
3348
  }
@@ -3505,6 +3509,7 @@ function resolvePageContext(url) {
3505
3509
  domain: urlParts === null || urlParts === void 0 ? void 0 : urlParts.domain,
3506
3510
  host: urlParts === null || urlParts === void 0 ? void 0 : urlParts.host,
3507
3511
  referrer: document.referrer,
3512
+ referrer_path: referrerParts === null || referrerParts === void 0 ? void 0 : referrerParts.path,
3508
3513
  referrer_schema: referrerParts === null || referrerParts === void 0 ? void 0 : referrerParts.schema,
3509
3514
  referrer_subdomain: referrerParts === null || referrerParts === void 0 ? void 0 : referrerParts.subdomain,
3510
3515
  referrer_domain: referrerParts === null || referrerParts === void 0 ? void 0 : referrerParts.domain,
@@ -5039,7 +5044,7 @@ function resolveUrlBlueprinters(urlBlueprinters) {
5039
5044
  return resolvedUrlBlueprinters;
5040
5045
  }
5041
5046
 
5042
- var SDK_VERSION = '3.19.1';
5047
+ var SDK_VERSION = '3.20.0';
5043
5048
 
5044
5049
  function shouldDropEvent(cxRumEvent, options) {
5045
5050
  if (isDocumentErrorWithoutMessage(cxRumEvent)) {
@@ -5199,9 +5204,9 @@ var CoralogixSpanMapProcessor = (function () {
5199
5204
  return Promise.resolve(undefined);
5200
5205
  };
5201
5206
  CoralogixSpanMapProcessor.prototype._mapToCxSpan = function (span, session, prevSession, sessionHasRecording, sessionHasScreenshot, onlySessionWithErrorMode) {
5202
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
5203
- var _l = session || {}, sessionId = _l.sessionId, sessionCreationDate = _l.sessionCreationDate;
5204
- var _m = prevSession || {}, prevSessionId = _m.sessionId, prevSessionCreationDate = _m.sessionCreationDate, prevSessionHasRecording = _m.hasRecording, prevSessionHasScreenshot = _m.hasScreenshot;
5207
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
5208
+ var _m = session || {}, sessionId = _m.sessionId, sessionCreationDate = _m.sessionCreationDate;
5209
+ var _o = prevSession || {}, prevSessionId = _o.sessionId, prevSessionCreationDate = _o.sessionCreationDate, prevSessionHasRecording = _o.hasRecording, prevSessionHasScreenshot = _o.hasScreenshot;
5205
5210
  var attributes = span.attributes;
5206
5211
  var user_context = JSON.parse(attributes[CoralogixAttributes.USER_CONTEXT]);
5207
5212
  var application_context = JSON.parse(attributes[CoralogixAttributes.APPLICATION_CONTEXT]);
@@ -5232,7 +5237,7 @@ var CoralogixSpanMapProcessor = (function () {
5232
5237
  text: {
5233
5238
  cx_rum: __assign(__assign({ fingerPrint: fingerPrint, platform: 'browser', timestamp: timestamp }, eventTypeContext), { browser_sdk: {
5234
5239
  version: SDK_VERSION,
5235
- }, version_metadata: version_metadata, session_context: __assign(__assign(__assign(__assign({}, user_context), { session_id: sessionId, session_creation_date: sessionCreationDate, prev_session: prevSessionId
5240
+ }, version_metadata: version_metadata, session_context: __assign(__assign(__assign(__assign({}, user_context), { user_id: String((_b = user_context === null || user_context === void 0 ? void 0 : user_context.user_id) !== null && _b !== void 0 ? _b : ''), session_id: sessionId, session_creation_date: sessionCreationDate, prev_session: prevSessionId
5236
5241
  ? {
5237
5242
  session_id: prevSessionId,
5238
5243
  session_creation_date: prevSessionCreationDate,
@@ -5244,13 +5249,13 @@ var CoralogixSpanMapProcessor = (function () {
5244
5249
  source: attributes[CoralogixAttributes.SOURCE],
5245
5250
  severity: severity,
5246
5251
  }, labels: labels, environment: attributes[CoralogixAttributes.ENVIRONMENT] || '', view_number: getSessionManager().viewNumber, layout_context: {
5247
- viewport_width: (_b = window === null || window === void 0 ? void 0 : window.innerWidth) !== null && _b !== void 0 ? _b : 0,
5248
- viewport_height: (_c = window === null || window === void 0 ? void 0 : window.innerHeight) !== null && _c !== void 0 ? _c : 0,
5249
- view_width: (_e = (_d = document === null || document === void 0 ? void 0 : document.documentElement) === null || _d === void 0 ? void 0 : _d.scrollWidth) !== null && _e !== void 0 ? _e : 0,
5250
- view_height: (_g = (_f = document === null || document === void 0 ? void 0 : document.documentElement) === null || _f === void 0 ? void 0 : _f.scrollHeight) !== null && _g !== void 0 ? _g : 0,
5251
- device_pixel_ratio: (_h = window === null || window === void 0 ? void 0 : window.devicePixelRatio) !== null && _h !== void 0 ? _h : 1,
5252
- scroll_x: (_j = window === null || window === void 0 ? void 0 : window.scrollX) !== null && _j !== void 0 ? _j : 0,
5253
- scroll_y: (_k = window === null || window === void 0 ? void 0 : window.scrollY) !== null && _k !== void 0 ? _k : 0,
5252
+ viewport_width: (_c = window === null || window === void 0 ? void 0 : window.innerWidth) !== null && _c !== void 0 ? _c : 0,
5253
+ viewport_height: (_d = window === null || window === void 0 ? void 0 : window.innerHeight) !== null && _d !== void 0 ? _d : 0,
5254
+ view_width: (_f = (_e = document === null || document === void 0 ? void 0 : document.documentElement) === null || _e === void 0 ? void 0 : _e.scrollWidth) !== null && _f !== void 0 ? _f : 0,
5255
+ view_height: (_h = (_g = document === null || document === void 0 ? void 0 : document.documentElement) === null || _g === void 0 ? void 0 : _g.scrollHeight) !== null && _h !== void 0 ? _h : 0,
5256
+ device_pixel_ratio: (_j = window === null || window === void 0 ? void 0 : window.devicePixelRatio) !== null && _j !== void 0 ? _j : 1,
5257
+ scroll_x: (_k = window === null || window === void 0 ? void 0 : window.scrollX) !== null && _k !== void 0 ? _k : 0,
5258
+ scroll_y: (_l = window === null || window === void 0 ? void 0 : window.scrollY) !== null && _l !== void 0 ? _l : 0,
5254
5259
  } }),
5255
5260
  },
5256
5261
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coralogix/browser",
3
- "version": "3.19.1",
3
+ "version": "3.20.0",
4
4
  "description": "Official Coralogix SDK for browsers",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Coralogix",
@@ -74,6 +74,7 @@ export declare const CoralogixDomainsApiUrlMap: {
74
74
  AP1: string;
75
75
  AP2: string;
76
76
  AP3: string;
77
+ PROOFPOINT: string;
77
78
  STAGING: string;
78
79
  };
79
80
  export declare const PROXY_CX_FORWARD_PARAMETER = "cxforward";
@@ -2,9 +2,8 @@ import { CoralogixBrowserSdkConfig } from '../../types';
2
2
  export declare function extractActionName(el: Element | HTMLElement | null): string;
3
3
  export declare function extractAriaLabel(el: Element | HTMLElement | null): string;
4
4
  export declare function extractTestId(el: Element | HTMLElement | null): string;
5
- export declare function extractResolvedName({ element, clickableElement, config, actionName, ariaLabel, }: {
5
+ export declare function extractResolvedName({ element, config, actionName, ariaLabel, }: {
6
6
  element: Element | HTMLElement | null;
7
- clickableElement: Element | HTMLElement | null;
8
7
  config: CoralogixBrowserSdkConfig;
9
8
  actionName: string;
10
9
  ariaLabel: string;
package/src/types.d.ts CHANGED
@@ -354,6 +354,7 @@ export interface PageContext {
354
354
  domain?: string;
355
355
  host?: string;
356
356
  referrer: string;
357
+ referrer_path?: string;
357
358
  referrer_schema?: string;
358
359
  referrer_subdomain?: string;
359
360
  referrer_domain?: string;
@@ -11,6 +11,7 @@ type UrlParts = {
11
11
  subdomain: string;
12
12
  domain: string;
13
13
  host: string;
14
+ path?: string;
14
15
  };
15
16
  export declare const getUrlParts: (url: string) => UrlParts | undefined;
16
17
  export declare const getCachedUrlParts: (cacheKey: string, url: string) => UrlParts | undefined;
package/src/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "3.19.1";
1
+ export declare const SDK_VERSION = "3.20.0";