posthog-js 1.158.0 → 1.158.2
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/dist/array.full.js +2 -2
- package/dist/array.full.js.map +1 -1
- package/dist/array.js +1 -1
- package/dist/array.js.map +1 -1
- package/dist/exception-autocapture.js.map +1 -1
- package/dist/lib/src/entrypoints/web-vitals.d.ts +4 -4
- package/dist/lib/src/extensions/replay/config.d.ts +1 -1
- package/dist/lib/src/extensions/replay/sessionrecording.d.ts +4 -0
- package/dist/lib/src/extensions/surveys.d.ts +2 -2
- package/dist/lib/src/utils/globals.d.ts +6 -6
- package/dist/lib/src/utils/logger.d.ts +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/module.d.ts +4 -0
- package/dist/module.js +1 -1
- package/dist/module.js.map +1 -1
- package/dist/recorder-v2.js.map +1 -1
- package/dist/recorder.js.map +1 -1
- package/lib/package.json +14 -9
- package/lib/src/autocapture-utils.js.map +1 -1
- package/lib/src/autocapture.js.map +1 -1
- package/lib/src/consent.js +1 -1
- package/lib/src/consent.js.map +1 -1
- package/lib/src/decide.js.map +1 -1
- package/lib/src/entrypoints/exception-autocapture.js.map +1 -1
- package/lib/src/entrypoints/recorder.js +12 -12
- package/lib/src/entrypoints/recorder.js.map +1 -1
- package/lib/src/entrypoints/surveys.js.map +1 -1
- package/lib/src/entrypoints/tracing-headers.js.map +1 -1
- package/lib/src/entrypoints/web-vitals.d.ts +4 -4
- package/lib/src/extensions/exception-autocapture/error-conversion.js +2 -2
- package/lib/src/extensions/exception-autocapture/error-conversion.js.map +1 -1
- package/lib/src/extensions/exception-autocapture/index.js.map +1 -1
- package/lib/src/extensions/exception-autocapture/stack-trace.js.map +1 -1
- package/lib/src/extensions/exception-autocapture/type-checking.js +1 -1
- package/lib/src/extensions/exception-autocapture/type-checking.js.map +1 -1
- package/lib/src/extensions/rageclick.js.map +1 -1
- package/lib/src/extensions/replay/config.d.ts +1 -1
- package/lib/src/extensions/replay/config.js.map +1 -1
- package/lib/src/extensions/replay/external/denylist.js.map +1 -1
- package/lib/src/extensions/replay/mutation-rate-limiter.js.map +1 -1
- package/lib/src/extensions/replay/rrweb-plugins/patch.js.map +1 -1
- package/lib/src/extensions/replay/sessionrecording-utils.js.map +1 -1
- package/lib/src/extensions/replay/sessionrecording.d.ts +4 -0
- package/lib/src/extensions/replay/sessionrecording.js +22 -13
- package/lib/src/extensions/replay/sessionrecording.js.map +1 -1
- package/lib/src/extensions/segment-integration.js.map +1 -1
- package/lib/src/extensions/sentry-integration.js.map +1 -1
- package/lib/src/extensions/surveys/action-matcher.js.map +1 -1
- package/lib/src/extensions/surveys/components/BottomSection.jsx.map +1 -1
- package/lib/src/extensions/surveys/components/ConfirmationMessage.jsx.map +1 -1
- package/lib/src/extensions/surveys/components/QuestionTypes.jsx.map +1 -1
- package/lib/src/extensions/surveys/hooks/useContrastingTextColor.js.map +1 -1
- package/lib/src/extensions/surveys/surveys-utils.jsx.map +1 -1
- package/lib/src/extensions/surveys.d.ts +2 -2
- package/lib/src/extensions/surveys.jsx.map +1 -1
- package/lib/src/extensions/toolbar.js +2 -2
- package/lib/src/extensions/toolbar.js.map +1 -1
- package/lib/src/extensions/tracing-headers.js.map +1 -1
- package/lib/src/extensions/web-vitals/index.js.map +1 -1
- package/lib/src/heatmaps.js.map +1 -1
- package/lib/src/page-view.js.map +1 -1
- package/lib/src/posthog-core.js +5 -5
- package/lib/src/posthog-core.js.map +1 -1
- package/lib/src/posthog-featureflags.js.map +1 -1
- package/lib/src/posthog-persistence.js.map +1 -1
- package/lib/src/posthog-surveys.js.map +1 -1
- package/lib/src/rate-limiter.js.map +1 -1
- package/lib/src/request-queue.js.map +1 -1
- package/lib/src/request.js +2 -2
- package/lib/src/request.js.map +1 -1
- package/lib/src/retry-queue.js.map +1 -1
- package/lib/src/scroll-manager.js.map +1 -1
- package/lib/src/session-props.js.map +1 -1
- package/lib/src/sessionid.js.map +1 -1
- package/lib/src/storage.js +10 -10
- package/lib/src/storage.js.map +1 -1
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/blocked-uas.js.map +1 -1
- package/lib/src/utils/event-utils.js +13 -13
- package/lib/src/utils/event-utils.js.map +1 -1
- package/lib/src/utils/globals.d.ts +6 -6
- package/lib/src/utils/index.js +3 -3
- package/lib/src/utils/index.js.map +1 -1
- package/lib/src/utils/logger.d.ts +1 -1
- package/lib/src/utils/logger.js.map +1 -1
- package/lib/src/utils/request-router.js +11 -2
- package/lib/src/utils/request-router.js.map +1 -1
- package/lib/src/utils/request-utils.js +1 -1
- package/lib/src/utils/request-utils.js.map +1 -1
- package/lib/src/utils/simple-event-emitter.js.map +1 -1
- package/lib/src/utils/survey-event-receiver.js.map +1 -1
- package/lib/src/utils/type-utils.js.map +1 -1
- package/lib/src/utils/user-agent-utils.js.map +1 -1
- package/lib/src/uuidv7.js.map +1 -1
- package/package.json +14 -9
package/lib/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "posthog-js",
|
|
3
|
-
"version": "1.158.
|
|
3
|
+
"version": "1.158.2",
|
|
4
4
|
"description": "Posthog-js allows you to automatically capture usage and send events to PostHog.",
|
|
5
5
|
"repository": "https://github.com/PostHog/posthog-js",
|
|
6
6
|
"author": "hey@posthog.com",
|
|
@@ -23,7 +23,9 @@
|
|
|
23
23
|
"typecheck": "tsc --noEmit --project tsconfig.json",
|
|
24
24
|
"cypress": "cypress open",
|
|
25
25
|
"prepare": "husky install",
|
|
26
|
-
"deprecate-old-versions": "node scripts/deprecate-old-versions.mjs"
|
|
26
|
+
"deprecate-old-versions": "node scripts/deprecate-old-versions.mjs",
|
|
27
|
+
"check-testcafe-results": "ts-node testcafe/check-testcafe-results.js",
|
|
28
|
+
"run-testcafe-localhost": "node scripts/run-testcafe-localhost.mjs"
|
|
27
29
|
},
|
|
28
30
|
"main": "dist/main.js",
|
|
29
31
|
"module": "dist/module.js",
|
|
@@ -59,29 +61,31 @@
|
|
|
59
61
|
"@testing-library/preact": "^3.2.4",
|
|
60
62
|
"@types/eslint": "^8.44.6",
|
|
61
63
|
"@types/jest": "^29.5.1",
|
|
64
|
+
"@types/node": "^22.5.0",
|
|
62
65
|
"@types/react-dom": "^18.0.10",
|
|
63
66
|
"@types/sinon": "^17.0.1",
|
|
64
67
|
"@types/uuid": "^9.0.1",
|
|
65
68
|
"@types/web": "^0.0.154",
|
|
66
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
67
|
-
"@typescript-eslint/parser": "^
|
|
69
|
+
"@typescript-eslint/eslint-plugin": "^8.2.0",
|
|
70
|
+
"@typescript-eslint/parser": "^8.2.0",
|
|
68
71
|
"babel-eslint": "10.1.0",
|
|
69
72
|
"babel-jest": "^26.6.3",
|
|
70
73
|
"compare-versions": "^6.1.0",
|
|
71
74
|
"cypress": "13.6.3",
|
|
72
75
|
"cypress-localstorage-commands": "^2.2.6",
|
|
73
76
|
"date-fns": "^3.6.0",
|
|
74
|
-
"eslint": "8.
|
|
77
|
+
"eslint": "8.57.0",
|
|
75
78
|
"eslint-config-posthog-js": "link:eslint-rules",
|
|
76
79
|
"eslint-config-prettier": "^8.5.0",
|
|
77
80
|
"eslint-plugin-compat": "^4.1.4",
|
|
78
|
-
"eslint-plugin-jest": "^
|
|
81
|
+
"eslint-plugin-jest": "^28.8.0",
|
|
79
82
|
"eslint-plugin-no-only-tests": "^3.1.0",
|
|
80
83
|
"eslint-plugin-posthog-js": "link:eslint-rules",
|
|
81
84
|
"eslint-plugin-prettier": "^4.2.1",
|
|
82
85
|
"eslint-plugin-react": "^7.30.1",
|
|
83
86
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
84
|
-
"
|
|
87
|
+
"expect": "^29.7.0",
|
|
88
|
+
"express": "^4.19.2",
|
|
85
89
|
"fast-check": "^2.17.0",
|
|
86
90
|
"husky": "^8.0.1",
|
|
87
91
|
"jest": "^27.5.1",
|
|
@@ -89,7 +93,7 @@
|
|
|
89
93
|
"jsdom-global": "3.0.2",
|
|
90
94
|
"lint-staged": "^10.2.11",
|
|
91
95
|
"localStorage": "1.0.4",
|
|
92
|
-
"msw": "^1.
|
|
96
|
+
"msw": "^1.3.3",
|
|
93
97
|
"node-fetch": "^2.6.11",
|
|
94
98
|
"posthog-js": "link:",
|
|
95
99
|
"preact-render-to-string": "^6.3.1",
|
|
@@ -103,7 +107,8 @@
|
|
|
103
107
|
"testcafe": "1.19.0",
|
|
104
108
|
"testcafe-browser-provider-browserstack": "1.14.0",
|
|
105
109
|
"tslib": "^2.5.0",
|
|
106
|
-
"
|
|
110
|
+
"ts-node": "^10.9.2",
|
|
111
|
+
"typescript": "^5.5.4",
|
|
107
112
|
"yargs": "^17.7.2"
|
|
108
113
|
},
|
|
109
114
|
"lint-staged": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocapture-utils.js","sourceRoot":"","sources":["../../src/autocapture-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { AutocaptureConfig, Properties } from './types'\nimport { each, entries, includes, trim } from './utils'\n\nimport { isArray, isNullish, isString, isUndefined } from './utils/type-utils'\nimport { logger } from './utils/logger'\nimport { window } from './utils/globals'\n\nexport function splitClassString(s: string): string[] {\n return s ? trim(s).split(/\\s+/) : []\n}\n\nfunction checkForURLMatches(urlsList: (string | RegExp)[]): boolean {\n const url = window?.location.href\n return !!(url && urlsList && urlsList.some((regex) => url.match(regex)))\n}\n\n/*\n * Get the className of an element, accounting for edge cases where element.className is an object\n *\n * Because this is a string it can contain unexpected characters\n * So, this method safely splits the className and returns that array.\n */\nexport function getClassNames(el: Element): string[] {\n let className = ''\n switch (typeof el.className) {\n case 'string':\n className = el.className\n break\n // TODO: when is this ever used?\n case 'object': // handle cases where className might be SVGAnimatedString or some other type\n className =\n (el.className && 'baseVal' in el.className ? (el.className as any).baseVal : null) ||\n el.getAttribute('class') ||\n ''\n break\n default:\n className = ''\n }\n\n return splitClassString(className)\n}\n\nexport function makeSafeText(s: string | null | undefined): string | null {\n if (isNullish(s)) {\n return null\n }\n\n return (\n trim(s)\n // scrub potentially sensitive values\n .split(/(\\s+)/)\n .filter((s) => shouldCaptureValue(s))\n .join('')\n // normalize whitespace\n .replace(/[\\r\\n]/g, ' ')\n .replace(/[ ]+/g, ' ')\n // truncate\n .substring(0, 255)\n )\n}\n\n/*\n * Get the direct text content of an element, protecting against sensitive data collection.\n * Concats textContent of each of the element's text node children; this avoids potential\n * collection of sensitive data that could happen if we used element.textContent and the\n * element had sensitive child elements, since element.textContent includes child content.\n * Scrubs values that look like they could be sensitive (i.e. cc or ssn number).\n * @param {Element} el - element to get the text of\n * @returns {string} the element's direct text content\n */\nexport function getSafeText(el: Element): string {\n let elText = ''\n\n if (shouldCaptureElement(el) && !isSensitiveElement(el) && el.childNodes && el.childNodes.length) {\n each(el.childNodes, function (child) {\n if (isTextNode(child) && child.textContent) {\n elText += makeSafeText(child.textContent) ?? ''\n }\n })\n }\n\n return trim(elText)\n}\n\n/*\n * Check whether an element has nodeType Node.ELEMENT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isElementNode(el: Node | Element | undefined | null): el is Element {\n return !!el && el.nodeType === 1 // Node.ELEMENT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element is of a given tag type.\n * Due to potential reference discrepancies (such as the webcomponents.js polyfill),\n * we want to match tagNames instead of specific references because something like\n * element === document.body won't always work because element might not be a native\n * element.\n * @param {Element} el - element to check\n * @param {string} tag - tag name (e.g., \"div\")\n * @returns {boolean} whether el is of the given tag type\n */\nexport function isTag(el: Element | undefined | null, tag: string): el is HTMLElement {\n return !!el && !!el.tagName && el.tagName.toLowerCase() === tag.toLowerCase()\n}\n\n/*\n * Check whether an element has nodeType Node.TEXT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isTextNode(el: Element | undefined | null): el is HTMLElement {\n return !!el && el.nodeType === 3 // Node.TEXT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element has nodeType Node.DOCUMENT_FRAGMENT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isDocumentFragment(el: Element | ParentNode | undefined | null): el is DocumentFragment {\n return !!el && el.nodeType === 11 // Node.DOCUMENT_FRAGMENT_NODE - use integer constant for browser portability\n}\n\nexport const autocaptureCompatibleElements = ['a', 'button', 'form', 'input', 'select', 'textarea', 'label']\n\n/*\n if there is no config, then all elements are allowed\n if there is a config, and there is an allow list, then only elements in the allow list are allowed\n assumes that some other code is checking this element's parents\n */\nfunction checkIfElementTreePassesElementAllowList(\n elements: Element[],\n autocaptureConfig: AutocaptureConfig | undefined\n): boolean {\n const allowlist = autocaptureConfig?.element_allowlist\n if (isUndefined(allowlist)) {\n // everything is allowed, when there is no allow list\n return true\n }\n\n // check each element in the tree\n // if any of the elements are in the allow list, then the tree is allowed\n for (const el of elements) {\n if (allowlist.some((elementType) => el.tagName.toLowerCase() === elementType)) {\n return true\n }\n }\n\n // otherwise there is an allow list and this element tree didn't match it\n return false\n}\n\n/*\n if there is no config, then all elements are allowed\n if there is a config, and there is an allow list, then\n only elements that match the css selector in the allow list are allowed\n assumes that some other code is checking this element's parents\n */\nfunction checkIfElementTreePassesCSSSelectorAllowList(\n elements: Element[],\n autocaptureConfig: AutocaptureConfig | undefined\n): boolean {\n const allowlist = autocaptureConfig?.css_selector_allowlist\n if (isUndefined(allowlist)) {\n // everything is allowed, when there is no allow list\n return true\n }\n\n // check each element in the tree\n // if any of the elements are in the allow list, then the tree is allowed\n for (const el of elements) {\n if (allowlist.some((selector) => el.matches(selector))) {\n return true\n }\n }\n\n // otherwise there is an allow list and this element tree didn't match it\n return false\n}\n\nexport function getParentElement(curEl: Element): Element | false {\n const parentNode = curEl.parentNode\n if (!parentNode || !isElementNode(parentNode)) return false\n return parentNode\n}\n\n/*\n * Check whether a DOM event should be \"captured\" or if it may contain sentitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Event} event - event to check\n * @param {Object} autocaptureConfig - autocapture config\n * @param {boolean} captureOnAnyElement - whether to capture on any element, clipboard autocapture doesn't restrict to \"clickable\" elements\n * @param {string[]} allowedEventTypes - event types to capture, normally just 'click', but some autocapture types react to different events, some elements have fixed events (e.g., form has \"submit\")\n * @returns {boolean} whether the event should be captured\n */\nexport function shouldCaptureDomEvent(\n el: Element,\n event: Event,\n autocaptureConfig: AutocaptureConfig | undefined = undefined,\n captureOnAnyElement?: boolean,\n allowedEventTypes?: string[]\n): boolean {\n if (!window || !el || isTag(el, 'html') || !isElementNode(el)) {\n return false\n }\n\n if (autocaptureConfig?.url_allowlist) {\n // if the current URL is not in the allow list, don't capture\n if (!checkForURLMatches(autocaptureConfig.url_allowlist)) {\n return false\n }\n }\n\n if (autocaptureConfig?.url_ignorelist) {\n // if the current URL is in the ignore list, don't capture\n if (checkForURLMatches(autocaptureConfig.url_ignorelist)) {\n return false\n }\n }\n\n if (autocaptureConfig?.dom_event_allowlist) {\n const allowlist = autocaptureConfig.dom_event_allowlist\n if (allowlist && !allowlist.some((eventType) => event.type === eventType)) {\n return false\n }\n }\n\n let parentIsUsefulElement = false\n const targetElementList: Element[] = [el]\n let parentNode: Element | boolean = true\n let curEl: Element = el\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n // If element is a shadow root, we skip it\n if (isDocumentFragment(curEl.parentNode)) {\n targetElementList.push((curEl.parentNode as any).host)\n curEl = (curEl.parentNode as any).host\n continue\n }\n parentNode = getParentElement(curEl)\n if (!parentNode) break\n if (captureOnAnyElement || autocaptureCompatibleElements.indexOf(parentNode.tagName.toLowerCase()) > -1) {\n parentIsUsefulElement = true\n } else {\n const compStyles = window.getComputedStyle(parentNode)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer') {\n parentIsUsefulElement = true\n }\n }\n\n targetElementList.push(parentNode)\n curEl = parentNode\n }\n\n if (!checkIfElementTreePassesElementAllowList(targetElementList, autocaptureConfig)) {\n return false\n }\n\n if (!checkIfElementTreePassesCSSSelectorAllowList(targetElementList, autocaptureConfig)) {\n return false\n }\n\n const compStyles = window.getComputedStyle(el)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer' && event.type === 'click') {\n return true\n }\n\n const tag = el.tagName.toLowerCase()\n switch (tag) {\n case 'html':\n return false\n case 'form':\n return (allowedEventTypes || ['submit']).indexOf(event.type) >= 0\n case 'input':\n case 'select':\n case 'textarea':\n return (allowedEventTypes || ['change', 'click']).indexOf(event.type) >= 0\n default:\n if (parentIsUsefulElement) return (allowedEventTypes || ['click']).indexOf(event.type) >= 0\n return (\n (allowedEventTypes || ['click']).indexOf(event.type) >= 0 &&\n (autocaptureCompatibleElements.indexOf(tag) > -1 || el.getAttribute('contenteditable') === 'true')\n )\n }\n}\n\n/*\n * Check whether a DOM element should be \"captured\" or if it may contain sentitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureElement(el: Element): boolean {\n for (let curEl = el; curEl.parentNode && !isTag(curEl, 'body'); curEl = curEl.parentNode as Element) {\n const classes = getClassNames(curEl)\n if (includes(classes, 'ph-sensitive') || includes(classes, 'ph-no-capture')) {\n return false\n }\n }\n\n if (includes(getClassNames(el), 'ph-include')) {\n return true\n }\n\n // don't include hidden or password fields\n const type = (el as HTMLInputElement).type || ''\n if (isString(type)) {\n // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch (type.toLowerCase()) {\n case 'hidden':\n return false\n case 'password':\n return false\n }\n }\n\n // filter out data from fields that look like sensitive fields\n const name = (el as HTMLInputElement).name || el.id || ''\n // See https://github.com/posthog/posthog-js/issues/165\n // Under specific circumstances a bug caused .replace to be called on a DOM element\n // instead of a string, removing the element from the page. Ensure this issue is mitigated.\n if (isString(name)) {\n // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n const sensitiveNameRegex =\n /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether a DOM element is 'sensitive' and we should only capture limited data\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function isSensitiveElement(el: Element): boolean {\n // don't send data from inputs or similar elements since there will always be\n // a risk of clientside javascript placing sensitive data in attributes\n const allowedInputTypes = ['button', 'checkbox', 'submit', 'reset']\n if (\n (isTag(el, 'input') && !allowedInputTypes.includes((el as HTMLInputElement).type)) ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return true\n }\n return false\n}\n\n// Define the core pattern for matching credit card numbers\nconst coreCCPattern = `(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredCCRegex = new RegExp(`^(?:${coreCCPattern})$`)\n// The Unanchored version is essentially the core pattern, usable as is for partial matches\nconst unanchoredCCRegex = new RegExp(coreCCPattern)\n\n// Define the core pattern for matching SSNs with optional dashes\nconst coreSSNPattern = `\\\\d{3}-?\\\\d{2}-?\\\\d{4}`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredSSNRegex = new RegExp(`^(${coreSSNPattern})$`)\n// The Unanchored version is essentially the core pattern itself, usable for partial matches\nconst unanchoredSSNRegex = new RegExp(`(${coreSSNPattern})`)\n\n/*\n * Check whether a string value should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {string} value - string value to check\n * @param {boolean} anchorRegexes - whether to anchor the regexes to the start and end of the string\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureValue(value: string, anchorRegexes = true): boolean {\n if (isNullish(value)) {\n return false\n }\n\n if (isString(value)) {\n value = trim(value)\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n const ccRegex = anchorRegexes ? anchoredCCRegex : unanchoredCCRegex\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false\n }\n\n // check to see if input value looks like a social security number\n const ssnRegex = anchorRegexes ? anchoredSSNRegex : unanchoredSSNRegex\n if (ssnRegex.test(value)) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether an attribute name is an Angular style attr (either _ngcontent or _nghost)\n * These update on each build and lead to noise in the element chain\n * More details on the attributes here: https://angular.io/guide/view-encapsulation\n * @param {string} attributeName - string value to check\n * @returns {boolean} whether the element is an angular tag\n */\nexport function isAngularStyleAttr(attributeName: string): boolean {\n if (isString(attributeName)) {\n return attributeName.substring(0, 10) === '_ngcontent' || attributeName.substring(0, 7) === '_nghost'\n }\n return false\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces,\n * along with the direct text content of the target element\n * @param {Element} target - element to check\n * @returns {string} text content of the target element and its child span tags\n */\nexport function getDirectAndNestedSpanText(target: Element): string {\n let text = getSafeText(target)\n text = `${text} ${getNestedSpanText(target)}`.trim()\n return shouldCaptureValue(text) ? text : ''\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces\n * @param {Element} target - element to check\n * @returns {string} text content of span tags\n */\nexport function getNestedSpanText(target: Element): string {\n let text = ''\n if (target && target.childNodes && target.childNodes.length) {\n each(target.childNodes, function (child) {\n if (child && child.tagName?.toLowerCase() === 'span') {\n try {\n const spanText = getSafeText(child)\n text = `${text} ${spanText}`.trim()\n\n if (child.childNodes && child.childNodes.length) {\n text = `${text} ${getNestedSpanText(child)}`.trim()\n }\n } catch (e) {\n logger.error(e)\n }\n }\n })\n }\n return text\n}\n\n/*\nBack in the day storing events in Postgres we use Elements for autocapture events.\nNow we're using elements_chain. We used to do this parsing/processing during ingestion.\nThis code is just copied over from ingestion, but we should optimize it\nto create elements_chain string directly.\n*/\nexport function getElementsChainString(elements: Properties[]): string {\n return elementsToString(extractElements(elements))\n}\n\n// This interface is called 'Element' in plugin-scaffold https://github.com/PostHog/plugin-scaffold/blob/b07d3b879796ecc7e22deb71bf627694ba05386b/src/types.ts#L200\n// However 'Element' is a DOM Element when run in the browser, so we have to rename it\ninterface PHElement {\n text?: string\n tag_name?: string\n href?: string\n attr_id?: string\n attr_class?: string[]\n nth_child?: number\n nth_of_type?: number\n attributes?: Record<string, any>\n event_id?: number\n order?: number\n group_id?: number\n}\n\nfunction escapeQuotes(input: string): string {\n return input.replace(/\"|\\\\\"/g, '\\\\\"')\n}\n\nfunction elementsToString(elements: PHElement[]): string {\n const ret = elements.map((element) => {\n let el_string = ''\n if (element.tag_name) {\n el_string += element.tag_name\n }\n if (element.attr_class) {\n element.attr_class.sort()\n for (const single_class of element.attr_class) {\n el_string += `.${single_class.replace(/\"/g, '')}`\n }\n }\n const attributes: Record<string, any> = {\n ...(element.text ? { text: element.text } : {}),\n 'nth-child': element.nth_child ?? 0,\n 'nth-of-type': element.nth_of_type ?? 0,\n ...(element.href ? { href: element.href } : {}),\n ...(element.attr_id ? { attr_id: element.attr_id } : {}),\n ...element.attributes,\n }\n const sortedAttributes: Record<string, any> = {}\n entries(attributes)\n .sort(([a], [b]) => a.localeCompare(b))\n .forEach(\n ([key, value]) => (sortedAttributes[escapeQuotes(key.toString())] = escapeQuotes(value.toString()))\n )\n el_string += ':'\n el_string += entries(attributes)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join('')\n return el_string\n })\n return ret.join(';')\n}\n\nfunction extractElements(elements: Properties[]): PHElement[] {\n return elements.map((el) => {\n const response = {\n text: el['$el_text']?.slice(0, 400),\n tag_name: el['tag_name'],\n href: el['attr__href']?.slice(0, 2048),\n attr_class: extractAttrClass(el),\n attr_id: el['attr__id'],\n nth_child: el['nth_child'],\n nth_of_type: el['nth_of_type'],\n attributes: {} as { [id: string]: any },\n }\n\n entries(el)\n .filter(([key]) => key.indexOf('attr__') === 0)\n .forEach(([key, value]) => (response.attributes[key] = value))\n return response\n })\n}\n\nfunction extractAttrClass(el: Properties): PHElement['attr_class'] {\n const attr_class = el['attr__class']\n if (!attr_class) {\n return undefined\n } else if (isArray(attr_class)) {\n return attr_class\n } else {\n return splitClassString(attr_class)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"autocapture-utils.js","sourceRoot":"","sources":["../../src/autocapture-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { AutocaptureConfig, Properties } from './types'\nimport { each, entries, includes, trim } from './utils'\n\nimport { isArray, isNullish, isString, isUndefined } from './utils/type-utils'\nimport { logger } from './utils/logger'\nimport { window } from './utils/globals'\n\nexport function splitClassString(s: string): string[] {\n return s ? trim(s).split(/\\s+/) : []\n}\n\nfunction checkForURLMatches(urlsList: (string | RegExp)[]): boolean {\n const url = window?.location.href\n return !!(url && urlsList && urlsList.some((regex) => url.match(regex)))\n}\n\n/*\n * Get the className of an element, accounting for edge cases where element.className is an object\n *\n * Because this is a string it can contain unexpected characters\n * So, this method safely splits the className and returns that array.\n */\nexport function getClassNames(el: Element): string[] {\n let className = ''\n switch (typeof el.className) {\n case 'string':\n className = el.className\n break\n // TODO: when is this ever used?\n case 'object': // handle cases where className might be SVGAnimatedString or some other type\n className =\n (el.className && 'baseVal' in el.className ? (el.className as any).baseVal : null) ||\n el.getAttribute('class') ||\n ''\n break\n default:\n className = ''\n }\n\n return splitClassString(className)\n}\n\nexport function makeSafeText(s: string | null | undefined): string | null {\n if (isNullish(s)) {\n return null\n }\n\n return (\n trim(s)\n // scrub potentially sensitive values\n .split(/(\\s+)/)\n .filter((s) => shouldCaptureValue(s))\n .join('')\n // normalize whitespace\n .replace(/[\\r\\n]/g, ' ')\n .replace(/[ ]+/g, ' ')\n // truncate\n .substring(0, 255)\n )\n}\n\n/*\n * Get the direct text content of an element, protecting against sensitive data collection.\n * Concats textContent of each of the element's text node children; this avoids potential\n * collection of sensitive data that could happen if we used element.textContent and the\n * element had sensitive child elements, since element.textContent includes child content.\n * Scrubs values that look like they could be sensitive (i.e. cc or ssn number).\n * @param {Element} el - element to get the text of\n * @returns {string} the element's direct text content\n */\nexport function getSafeText(el: Element): string {\n let elText = ''\n\n if (shouldCaptureElement(el) && !isSensitiveElement(el) && el.childNodes && el.childNodes.length) {\n each(el.childNodes, function (child) {\n if (isTextNode(child) && child.textContent) {\n elText += makeSafeText(child.textContent) ?? ''\n }\n })\n }\n\n return trim(elText)\n}\n\n/*\n * Check whether an element has nodeType Node.ELEMENT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isElementNode(el: Node | Element | undefined | null): el is Element {\n return !!el && el.nodeType === 1 // Node.ELEMENT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element is of a given tag type.\n * Due to potential reference discrepancies (such as the webcomponents.js polyfill),\n * we want to match tagNames instead of specific references because something like\n * element === document.body won't always work because element might not be a native\n * element.\n * @param {Element} el - element to check\n * @param {string} tag - tag name (e.g., \"div\")\n * @returns {boolean} whether el is of the given tag type\n */\nexport function isTag(el: Element | undefined | null, tag: string): el is HTMLElement {\n return !!el && !!el.tagName && el.tagName.toLowerCase() === tag.toLowerCase()\n}\n\n/*\n * Check whether an element has nodeType Node.TEXT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isTextNode(el: Element | undefined | null): el is HTMLElement {\n return !!el && el.nodeType === 3 // Node.TEXT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element has nodeType Node.DOCUMENT_FRAGMENT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isDocumentFragment(el: Element | ParentNode | undefined | null): el is DocumentFragment {\n return !!el && el.nodeType === 11 // Node.DOCUMENT_FRAGMENT_NODE - use integer constant for browser portability\n}\n\nexport const autocaptureCompatibleElements = ['a', 'button', 'form', 'input', 'select', 'textarea', 'label']\n\n/*\n if there is no config, then all elements are allowed\n if there is a config, and there is an allow list, then only elements in the allow list are allowed\n assumes that some other code is checking this element's parents\n */\nfunction checkIfElementTreePassesElementAllowList(\n elements: Element[],\n autocaptureConfig: AutocaptureConfig | undefined\n): boolean {\n const allowlist = autocaptureConfig?.element_allowlist\n if (isUndefined(allowlist)) {\n // everything is allowed, when there is no allow list\n return true\n }\n\n // check each element in the tree\n // if any of the elements are in the allow list, then the tree is allowed\n for (const el of elements) {\n if (allowlist.some((elementType) => el.tagName.toLowerCase() === elementType)) {\n return true\n }\n }\n\n // otherwise there is an allow list and this element tree didn't match it\n return false\n}\n\n/*\n if there is no config, then all elements are allowed\n if there is a config, and there is an allow list, then\n only elements that match the css selector in the allow list are allowed\n assumes that some other code is checking this element's parents\n */\nfunction checkIfElementTreePassesCSSSelectorAllowList(\n elements: Element[],\n autocaptureConfig: AutocaptureConfig | undefined\n): boolean {\n const allowlist = autocaptureConfig?.css_selector_allowlist\n if (isUndefined(allowlist)) {\n // everything is allowed, when there is no allow list\n return true\n }\n\n // check each element in the tree\n // if any of the elements are in the allow list, then the tree is allowed\n for (const el of elements) {\n if (allowlist.some((selector) => el.matches(selector))) {\n return true\n }\n }\n\n // otherwise there is an allow list and this element tree didn't match it\n return false\n}\n\nexport function getParentElement(curEl: Element): Element | false {\n const parentNode = curEl.parentNode\n if (!parentNode || !isElementNode(parentNode)) return false\n return parentNode\n}\n\n/*\n * Check whether a DOM event should be \"captured\" or if it may contain sentitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Event} event - event to check\n * @param {Object} autocaptureConfig - autocapture config\n * @param {boolean} captureOnAnyElement - whether to capture on any element, clipboard autocapture doesn't restrict to \"clickable\" elements\n * @param {string[]} allowedEventTypes - event types to capture, normally just 'click', but some autocapture types react to different events, some elements have fixed events (e.g., form has \"submit\")\n * @returns {boolean} whether the event should be captured\n */\nexport function shouldCaptureDomEvent(\n el: Element,\n event: Event,\n autocaptureConfig: AutocaptureConfig | undefined = undefined,\n captureOnAnyElement?: boolean,\n allowedEventTypes?: string[]\n): boolean {\n if (!window || !el || isTag(el, 'html') || !isElementNode(el)) {\n return false\n }\n\n if (autocaptureConfig?.url_allowlist) {\n // if the current URL is not in the allow list, don't capture\n if (!checkForURLMatches(autocaptureConfig.url_allowlist)) {\n return false\n }\n }\n\n if (autocaptureConfig?.url_ignorelist) {\n // if the current URL is in the ignore list, don't capture\n if (checkForURLMatches(autocaptureConfig.url_ignorelist)) {\n return false\n }\n }\n\n if (autocaptureConfig?.dom_event_allowlist) {\n const allowlist = autocaptureConfig.dom_event_allowlist\n if (allowlist && !allowlist.some((eventType) => event.type === eventType)) {\n return false\n }\n }\n\n let parentIsUsefulElement = false\n const targetElementList: Element[] = [el]\n let parentNode: Element | boolean = true\n let curEl: Element = el\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n // If element is a shadow root, we skip it\n if (isDocumentFragment(curEl.parentNode)) {\n targetElementList.push((curEl.parentNode as any).host)\n curEl = (curEl.parentNode as any).host\n continue\n }\n parentNode = getParentElement(curEl)\n if (!parentNode) break\n if (captureOnAnyElement || autocaptureCompatibleElements.indexOf(parentNode.tagName.toLowerCase()) > -1) {\n parentIsUsefulElement = true\n } else {\n const compStyles = window.getComputedStyle(parentNode)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer') {\n parentIsUsefulElement = true\n }\n }\n\n targetElementList.push(parentNode)\n curEl = parentNode\n }\n\n if (!checkIfElementTreePassesElementAllowList(targetElementList, autocaptureConfig)) {\n return false\n }\n\n if (!checkIfElementTreePassesCSSSelectorAllowList(targetElementList, autocaptureConfig)) {\n return false\n }\n\n const compStyles = window.getComputedStyle(el)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer' && event.type === 'click') {\n return true\n }\n\n const tag = el.tagName.toLowerCase()\n switch (tag) {\n case 'html':\n return false\n case 'form':\n return (allowedEventTypes || ['submit']).indexOf(event.type) >= 0\n case 'input':\n case 'select':\n case 'textarea':\n return (allowedEventTypes || ['change', 'click']).indexOf(event.type) >= 0\n default:\n if (parentIsUsefulElement) return (allowedEventTypes || ['click']).indexOf(event.type) >= 0\n return (\n (allowedEventTypes || ['click']).indexOf(event.type) >= 0 &&\n (autocaptureCompatibleElements.indexOf(tag) > -1 || el.getAttribute('contenteditable') === 'true')\n )\n }\n}\n\n/*\n * Check whether a DOM element should be \"captured\" or if it may contain sentitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureElement(el: Element): boolean {\n for (let curEl = el; curEl.parentNode && !isTag(curEl, 'body'); curEl = curEl.parentNode as Element) {\n const classes = getClassNames(curEl)\n if (includes(classes, 'ph-sensitive') || includes(classes, 'ph-no-capture')) {\n return false\n }\n }\n\n if (includes(getClassNames(el), 'ph-include')) {\n return true\n }\n\n // don't include hidden or password fields\n const type = (el as HTMLInputElement).type || ''\n if (isString(type)) {\n // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch (type.toLowerCase()) {\n case 'hidden':\n return false\n case 'password':\n return false\n }\n }\n\n // filter out data from fields that look like sensitive fields\n const name = (el as HTMLInputElement).name || el.id || ''\n // See https://github.com/posthog/posthog-js/issues/165\n // Under specific circumstances a bug caused .replace to be called on a DOM element\n // instead of a string, removing the element from the page. Ensure this issue is mitigated.\n if (isString(name)) {\n // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n const sensitiveNameRegex =\n /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether a DOM element is 'sensitive' and we should only capture limited data\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function isSensitiveElement(el: Element): boolean {\n // don't send data from inputs or similar elements since there will always be\n // a risk of clientside javascript placing sensitive data in attributes\n const allowedInputTypes = ['button', 'checkbox', 'submit', 'reset']\n if (\n (isTag(el, 'input') && !allowedInputTypes.includes((el as HTMLInputElement).type)) ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return true\n }\n return false\n}\n\n// Define the core pattern for matching credit card numbers\nconst coreCCPattern = `(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredCCRegex = new RegExp(`^(?:${coreCCPattern})$`)\n// The Unanchored version is essentially the core pattern, usable as is for partial matches\nconst unanchoredCCRegex = new RegExp(coreCCPattern)\n\n// Define the core pattern for matching SSNs with optional dashes\nconst coreSSNPattern = `\\\\d{3}-?\\\\d{2}-?\\\\d{4}`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredSSNRegex = new RegExp(`^(${coreSSNPattern})$`)\n// The Unanchored version is essentially the core pattern itself, usable for partial matches\nconst unanchoredSSNRegex = new RegExp(`(${coreSSNPattern})`)\n\n/*\n * Check whether a string value should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {string} value - string value to check\n * @param {boolean} anchorRegexes - whether to anchor the regexes to the start and end of the string\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureValue(value: string, anchorRegexes = true): boolean {\n if (isNullish(value)) {\n return false\n }\n\n if (isString(value)) {\n value = trim(value)\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n const ccRegex = anchorRegexes ? anchoredCCRegex : unanchoredCCRegex\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false\n }\n\n // check to see if input value looks like a social security number\n const ssnRegex = anchorRegexes ? anchoredSSNRegex : unanchoredSSNRegex\n if (ssnRegex.test(value)) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether an attribute name is an Angular style attr (either _ngcontent or _nghost)\n * These update on each build and lead to noise in the element chain\n * More details on the attributes here: https://angular.io/guide/view-encapsulation\n * @param {string} attributeName - string value to check\n * @returns {boolean} whether the element is an angular tag\n */\nexport function isAngularStyleAttr(attributeName: string): boolean {\n if (isString(attributeName)) {\n return attributeName.substring(0, 10) === '_ngcontent' || attributeName.substring(0, 7) === '_nghost'\n }\n return false\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces,\n * along with the direct text content of the target element\n * @param {Element} target - element to check\n * @returns {string} text content of the target element and its child span tags\n */\nexport function getDirectAndNestedSpanText(target: Element): string {\n let text = getSafeText(target)\n text = `${text} ${getNestedSpanText(target)}`.trim()\n return shouldCaptureValue(text) ? text : ''\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces\n * @param {Element} target - element to check\n * @returns {string} text content of span tags\n */\nexport function getNestedSpanText(target: Element): string {\n let text = ''\n if (target && target.childNodes && target.childNodes.length) {\n each(target.childNodes, function (child) {\n if (child && child.tagName?.toLowerCase() === 'span') {\n try {\n const spanText = getSafeText(child)\n text = `${text} ${spanText}`.trim()\n\n if (child.childNodes && child.childNodes.length) {\n text = `${text} ${getNestedSpanText(child)}`.trim()\n }\n } catch (e) {\n logger.error(e)\n }\n }\n })\n }\n return text\n}\n\n/*\nBack in the day storing events in Postgres we use Elements for autocapture events.\nNow we're using elements_chain. We used to do this parsing/processing during ingestion.\nThis code is just copied over from ingestion, but we should optimize it\nto create elements_chain string directly.\n*/\nexport function getElementsChainString(elements: Properties[]): string {\n return elementsToString(extractElements(elements))\n}\n\n// This interface is called 'Element' in plugin-scaffold https://github.com/PostHog/plugin-scaffold/blob/b07d3b879796ecc7e22deb71bf627694ba05386b/src/types.ts#L200\n// However 'Element' is a DOM Element when run in the browser, so we have to rename it\ninterface PHElement {\n text?: string\n tag_name?: string\n href?: string\n attr_id?: string\n attr_class?: string[]\n nth_child?: number\n nth_of_type?: number\n attributes?: Record<string, any>\n event_id?: number\n order?: number\n group_id?: number\n}\n\nfunction escapeQuotes(input: string): string {\n return input.replace(/\"|\\\\\"/g, '\\\\\"')\n}\n\nfunction elementsToString(elements: PHElement[]): string {\n const ret = elements.map((element) => {\n let el_string = ''\n if (element.tag_name) {\n el_string += element.tag_name\n }\n if (element.attr_class) {\n element.attr_class.sort()\n for (const single_class of element.attr_class) {\n el_string += `.${single_class.replace(/\"/g, '')}`\n }\n }\n const attributes: Record<string, any> = {\n ...(element.text ? { text: element.text } : {}),\n 'nth-child': element.nth_child ?? 0,\n 'nth-of-type': element.nth_of_type ?? 0,\n ...(element.href ? { href: element.href } : {}),\n ...(element.attr_id ? { attr_id: element.attr_id } : {}),\n ...element.attributes,\n }\n const sortedAttributes: Record<string, any> = {}\n entries(attributes)\n .sort(([a], [b]) => a.localeCompare(b))\n .forEach(\n ([key, value]) => (sortedAttributes[escapeQuotes(key.toString())] = escapeQuotes(value.toString()))\n )\n el_string += ':'\n el_string += entries(attributes)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join('')\n return el_string\n })\n return ret.join(';')\n}\n\nfunction extractElements(elements: Properties[]): PHElement[] {\n return elements.map((el) => {\n const response = {\n text: el['$el_text']?.slice(0, 400),\n tag_name: el['tag_name'],\n href: el['attr__href']?.slice(0, 2048),\n attr_class: extractAttrClass(el),\n attr_id: el['attr__id'],\n nth_child: el['nth_child'],\n nth_of_type: el['nth_of_type'],\n attributes: {} as { [id: string]: any },\n }\n\n entries(el)\n .filter(([key]) => key.indexOf('attr__') === 0)\n .forEach(([key, value]) => (response.attributes[key] = value))\n return response\n })\n}\n\nfunction extractAttrClass(el: Properties): PHElement['attr_class'] {\n const attr_class = el['attr__class']\n if (!attr_class) {\n return undefined\n } else if (isArray(attr_class)) {\n return attr_class\n } else {\n return splitClassString(attr_class)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocapture.js","sourceRoot":"","sources":["../../src/autocapture.ts"],"names":[],"mappings":"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","sourcesContent":["import { each, extend, includes, registerEvent } from './utils'\nimport {\n autocaptureCompatibleElements,\n getClassNames,\n getDirectAndNestedSpanText,\n getElementsChainString,\n getSafeText,\n isAngularStyleAttr,\n isDocumentFragment,\n isElementNode,\n isSensitiveElement,\n isTag,\n isTextNode,\n makeSafeText,\n shouldCaptureDomEvent,\n shouldCaptureElement,\n shouldCaptureValue,\n splitClassString,\n} from './autocapture-utils'\nimport RageClick from './extensions/rageclick'\nimport { AutocaptureConfig, DecideResponse, Properties } from './types'\nimport { PostHog } from './posthog-core'\nimport { AUTOCAPTURE_DISABLED_SERVER_SIDE } from './constants'\n\nimport { isBoolean, isFunction, isNull, isObject, isUndefined } from './utils/type-utils'\nimport { logger } from './utils/logger'\nimport { document, window } from './utils/globals'\nimport { convertToURL } from './utils/request-utils'\n\nconst COPY_AUTOCAPTURE_EVENT = '$copy_autocapture'\n\nfunction limitText(length: number, text: string): string {\n if (text.length > length) {\n return text.slice(0, length) + '...'\n }\n return text\n}\n\nexport class Autocapture {\n instance: PostHog\n _initialized: boolean = false\n _isDisabledServerSide: boolean | null = null\n _elementSelectors: Set<string> | null\n rageclicks = new RageClick()\n _elementsChainAsString = false\n\n constructor(instance: PostHog) {\n this.instance = instance\n this._elementSelectors = null\n }\n\n private get config(): AutocaptureConfig {\n const config = isObject(this.instance.config.autocapture) ? this.instance.config.autocapture : {}\n // precompile the regex\n config.url_allowlist = config.url_allowlist?.map((url) => new RegExp(url))\n config.url_ignorelist = config.url_ignorelist?.map((url) => new RegExp(url))\n return config\n }\n\n _addDomEventHandlers(): void {\n if (!this.isBrowserSupported()) {\n logger.info('Disabling Automatic Event Collection because this browser is not supported')\n return\n }\n\n if (!window || !document) {\n return\n }\n const handler = (e: Event) => {\n e = e || window?.event\n try {\n this._captureEvent(e)\n } catch (error) {\n logger.error('Failed to capture event', error)\n }\n }\n\n const copiedTextHandler = (e: Event) => {\n e = e || window?.event\n this._captureEvent(e, COPY_AUTOCAPTURE_EVENT)\n }\n\n registerEvent(document, 'submit', handler, false, true)\n registerEvent(document, 'change', handler, false, true)\n registerEvent(document, 'click', handler, false, true)\n\n if (this.config.capture_copied_text) {\n registerEvent(document, 'copy', copiedTextHandler, false, true)\n registerEvent(document, 'cut', copiedTextHandler, false, true)\n }\n }\n\n public startIfEnabled() {\n if (this.isEnabled && !this._initialized) {\n this._addDomEventHandlers()\n this._initialized = true\n }\n }\n\n public afterDecideResponse(response: DecideResponse) {\n if (response.elementsChainAsString) {\n this._elementsChainAsString = response.elementsChainAsString\n }\n\n if (this.instance.persistence) {\n this.instance.persistence.register({\n [AUTOCAPTURE_DISABLED_SERVER_SIDE]: !!response['autocapture_opt_out'],\n })\n }\n // store this in-memory in case persistence is disabled\n this._isDisabledServerSide = !!response['autocapture_opt_out']\n this.startIfEnabled()\n }\n\n public setElementSelectors(selectors: Set<string>): void {\n this._elementSelectors = selectors\n }\n\n public getElementSelectors(element: Element | null): string[] | null {\n const elementSelectors: string[] = []\n\n this._elementSelectors?.forEach((selector) => {\n const matchedElements = document?.querySelectorAll(selector)\n matchedElements?.forEach((matchedElement: Element) => {\n if (element === matchedElement) {\n elementSelectors.push(selector)\n }\n })\n })\n\n return elementSelectors\n }\n\n public get isEnabled(): boolean {\n const persistedServerDisabled = this.instance.persistence?.props[AUTOCAPTURE_DISABLED_SERVER_SIDE]\n const memoryDisabled = this._isDisabledServerSide\n\n if (\n isNull(memoryDisabled) &&\n !isBoolean(persistedServerDisabled) &&\n !this.instance.config.advanced_disable_decide\n ) {\n // We only enable if we know that the server has not disabled it (unless decide is disabled)\n return false\n }\n\n const disabledServer = this._isDisabledServerSide ?? !!persistedServerDisabled\n const disabledClient = !this.instance.config.autocapture\n return !disabledClient && !disabledServer\n }\n\n private _previousElementSibling(el: Element): Element | null {\n if (el.previousElementSibling) {\n return el.previousElementSibling\n }\n let _el: Element | null = el\n do {\n _el = _el.previousSibling as Element | null // resolves to ChildNode->Node, which is Element's parent class\n } while (_el && !isElementNode(_el))\n return _el\n }\n\n private _getAugmentPropertiesFromElement(elem: Element): Properties {\n const shouldCaptureEl = shouldCaptureElement(elem)\n if (!shouldCaptureEl) {\n return {}\n }\n\n const props: Properties = {}\n\n each(elem.attributes, function (attr: Attr) {\n if (attr.name && attr.name.indexOf('data-ph-capture-attribute') === 0) {\n const propertyKey = attr.name.replace('data-ph-capture-attribute-', '')\n const propertyValue = attr.value\n if (propertyKey && propertyValue && shouldCaptureValue(propertyValue)) {\n props[propertyKey] = propertyValue\n }\n }\n })\n\n return props\n }\n\n private _getPropertiesFromElement(elem: Element, maskInputs: boolean, maskText: boolean): Properties {\n const tag_name = elem.tagName.toLowerCase()\n const props: Properties = {\n tag_name: tag_name,\n }\n if (autocaptureCompatibleElements.indexOf(tag_name) > -1 && !maskText) {\n if (tag_name.toLowerCase() === 'a' || tag_name.toLowerCase() === 'button') {\n props['$el_text'] = limitText(1024, getDirectAndNestedSpanText(elem))\n } else {\n props['$el_text'] = limitText(1024, getSafeText(elem))\n }\n }\n\n const classes = getClassNames(elem)\n if (classes.length > 0)\n props['classes'] = classes.filter(function (c) {\n return c !== ''\n })\n\n // capture the deny list here because this not-a-class class makes it tricky to use this.config in the function below\n const elementAttributeIgnorelist = this.config?.element_attribute_ignorelist\n each(elem.attributes, function (attr: Attr) {\n // Only capture attributes we know are safe\n if (isSensitiveElement(elem) && ['name', 'id', 'class', 'aria-label'].indexOf(attr.name) === -1) return\n\n if (elementAttributeIgnorelist?.includes(attr.name)) return\n\n if (!maskInputs && shouldCaptureValue(attr.value) && !isAngularStyleAttr(attr.name)) {\n let value = attr.value\n if (attr.name === 'class') {\n // html attributes can _technically_ contain linebreaks,\n // but we're very intolerant of them in the class string,\n // so we strip them.\n value = splitClassString(value).join(' ')\n }\n props['attr__' + attr.name] = limitText(1024, value)\n }\n })\n\n let nthChild = 1\n let nthOfType = 1\n let currentElem: Element | null = elem\n while ((currentElem = this._previousElementSibling(currentElem))) {\n // eslint-disable-line no-cond-assign\n nthChild++\n if (currentElem.tagName === elem.tagName) {\n nthOfType++\n }\n }\n props['nth_child'] = nthChild\n props['nth_of_type'] = nthOfType\n\n return props\n }\n\n private _getDefaultProperties(eventType: string): Properties {\n return {\n $event_type: eventType,\n $ce_version: 1,\n }\n }\n\n private _getEventTarget(e: Event): Element | null {\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/target#Compatibility_notes\n if (isUndefined(e.target)) {\n return (e.srcElement as Element) || null\n } else {\n if ((e.target as HTMLElement)?.shadowRoot) {\n return (e.composedPath()[0] as Element) || null\n }\n return (e.target as Element) || null\n }\n }\n\n private _captureEvent(e: Event, eventName = '$autocapture'): boolean | void {\n if (!this.isEnabled) {\n return\n }\n\n /*** Don't mess with this code without running IE8 tests on it ***/\n let target = this._getEventTarget(e)\n if (isTextNode(target)) {\n // defeat Safari bug (see: http://www.quirksmode.org/js/events_properties.html)\n target = (target.parentNode || null) as Element | null\n }\n\n if (eventName === '$autocapture' && e.type === 'click' && e instanceof MouseEvent) {\n if (\n this.instance.config.rageclick &&\n this.rageclicks?.isRageClick(e.clientX, e.clientY, new Date().getTime())\n ) {\n this._captureEvent(e, '$rageclick')\n }\n }\n\n const isCopyAutocapture = eventName === COPY_AUTOCAPTURE_EVENT\n if (\n target &&\n shouldCaptureDomEvent(\n target,\n e,\n this.config,\n // mostly this method cares about the target element, but in the case of copy events,\n // we want some of the work this check does without insisting on the target element's type\n isCopyAutocapture,\n // we also don't want to restrict copy checks to clicks,\n // so we pass that knowledge in here, rather than add the logic inside the check\n isCopyAutocapture ? ['copy', 'cut'] : undefined\n )\n ) {\n const targetElementList = [target]\n let curEl = target\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n if (isDocumentFragment(curEl.parentNode)) {\n targetElementList.push((curEl.parentNode as any).host)\n curEl = (curEl.parentNode as any).host\n continue\n }\n targetElementList.push(curEl.parentNode as Element)\n curEl = curEl.parentNode as Element\n }\n\n const elementsJson: Properties[] = []\n const autocaptureAugmentProperties: Properties = {}\n let href,\n explicitNoCapture = false\n\n each(targetElementList, (el) => {\n const shouldCaptureEl = shouldCaptureElement(el)\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (el.tagName.toLowerCase() === 'a') {\n href = el.getAttribute('href')\n href = shouldCaptureEl && shouldCaptureValue(href) && href\n }\n\n // allow users to programmatically prevent capturing of elements by adding class 'ph-no-capture'\n const classes = getClassNames(el)\n if (includes(classes, 'ph-no-capture')) {\n explicitNoCapture = true\n }\n\n elementsJson.push(\n this._getPropertiesFromElement(\n el,\n this.instance.config.mask_all_element_attributes,\n this.instance.config.mask_all_text\n )\n )\n\n const augmentProperties = this._getAugmentPropertiesFromElement(el)\n extend(autocaptureAugmentProperties, augmentProperties)\n })\n\n if (!this.instance.config.mask_all_text) {\n // if the element is a button or anchor tag get the span text from any\n // children and include it as/with the text property on the parent element\n if (target.tagName.toLowerCase() === 'a' || target.tagName.toLowerCase() === 'button') {\n elementsJson[0]['$el_text'] = getDirectAndNestedSpanText(target)\n } else {\n elementsJson[0]['$el_text'] = getSafeText(target)\n }\n }\n\n let externalHref: string | undefined\n if (href) {\n elementsJson[0]['attr__href'] = href\n const hrefHost = convertToURL(href)?.host\n const locationHost = window?.location?.host\n if (hrefHost && locationHost && hrefHost !== locationHost) {\n externalHref = href\n }\n }\n\n if (explicitNoCapture) {\n return false\n }\n\n const props = extend(\n this._getDefaultProperties(e.type),\n this._elementsChainAsString\n ? {\n $elements_chain: getElementsChainString(elementsJson),\n }\n : {\n $elements: elementsJson,\n },\n elementsJson[0]?.['$el_text'] ? { $el_text: elementsJson[0]?.['$el_text'] } : {},\n externalHref && e.type === 'click' ? { $external_click_url: externalHref } : {},\n autocaptureAugmentProperties\n )\n\n const elementSelectors = this.getElementSelectors(target)\n if (elementSelectors && elementSelectors.length > 0) {\n props['$element_selectors'] = elementSelectors\n }\n\n if (eventName === COPY_AUTOCAPTURE_EVENT) {\n // you can't read the data from the clipboard event,\n // but you can guess that you can read it from the window's current selection\n const selectedContent = makeSafeText(window?.getSelection()?.toString())\n const clipType = (e as ClipboardEvent).type || 'clipboard'\n if (!selectedContent) {\n return false\n }\n props['$selected_content'] = selectedContent\n props['$copy_type'] = clipType\n }\n\n this.instance.capture(eventName, props)\n return true\n }\n }\n\n isBrowserSupported(): boolean {\n return isFunction(document?.querySelectorAll)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"autocapture.js","sourceRoot":"","sources":["../../src/autocapture.ts"],"names":[],"mappings":"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","sourcesContent":["import { each, extend, includes, registerEvent } from './utils'\nimport {\n autocaptureCompatibleElements,\n getClassNames,\n getDirectAndNestedSpanText,\n getElementsChainString,\n getSafeText,\n isAngularStyleAttr,\n isDocumentFragment,\n isElementNode,\n isSensitiveElement,\n isTag,\n isTextNode,\n makeSafeText,\n shouldCaptureDomEvent,\n shouldCaptureElement,\n shouldCaptureValue,\n splitClassString,\n} from './autocapture-utils'\nimport RageClick from './extensions/rageclick'\nimport { AutocaptureConfig, DecideResponse, Properties } from './types'\nimport { PostHog } from './posthog-core'\nimport { AUTOCAPTURE_DISABLED_SERVER_SIDE } from './constants'\n\nimport { isBoolean, isFunction, isNull, isObject, isUndefined } from './utils/type-utils'\nimport { logger } from './utils/logger'\nimport { document, window } from './utils/globals'\nimport { convertToURL } from './utils/request-utils'\n\nconst COPY_AUTOCAPTURE_EVENT = '$copy_autocapture'\n\nfunction limitText(length: number, text: string): string {\n if (text.length > length) {\n return text.slice(0, length) + '...'\n }\n return text\n}\n\nexport class Autocapture {\n instance: PostHog\n _initialized: boolean = false\n _isDisabledServerSide: boolean | null = null\n _elementSelectors: Set<string> | null\n rageclicks = new RageClick()\n _elementsChainAsString = false\n\n constructor(instance: PostHog) {\n this.instance = instance\n this._elementSelectors = null\n }\n\n private get config(): AutocaptureConfig {\n const config = isObject(this.instance.config.autocapture) ? this.instance.config.autocapture : {}\n // precompile the regex\n config.url_allowlist = config.url_allowlist?.map((url) => new RegExp(url))\n config.url_ignorelist = config.url_ignorelist?.map((url) => new RegExp(url))\n return config\n }\n\n _addDomEventHandlers(): void {\n if (!this.isBrowserSupported()) {\n logger.info('Disabling Automatic Event Collection because this browser is not supported')\n return\n }\n\n if (!window || !document) {\n return\n }\n const handler = (e: Event) => {\n e = e || window?.event\n try {\n this._captureEvent(e)\n } catch (error) {\n logger.error('Failed to capture event', error)\n }\n }\n\n const copiedTextHandler = (e: Event) => {\n e = e || window?.event\n this._captureEvent(e, COPY_AUTOCAPTURE_EVENT)\n }\n\n registerEvent(document, 'submit', handler, false, true)\n registerEvent(document, 'change', handler, false, true)\n registerEvent(document, 'click', handler, false, true)\n\n if (this.config.capture_copied_text) {\n registerEvent(document, 'copy', copiedTextHandler, false, true)\n registerEvent(document, 'cut', copiedTextHandler, false, true)\n }\n }\n\n public startIfEnabled() {\n if (this.isEnabled && !this._initialized) {\n this._addDomEventHandlers()\n this._initialized = true\n }\n }\n\n public afterDecideResponse(response: DecideResponse) {\n if (response.elementsChainAsString) {\n this._elementsChainAsString = response.elementsChainAsString\n }\n\n if (this.instance.persistence) {\n this.instance.persistence.register({\n [AUTOCAPTURE_DISABLED_SERVER_SIDE]: !!response['autocapture_opt_out'],\n })\n }\n // store this in-memory in case persistence is disabled\n this._isDisabledServerSide = !!response['autocapture_opt_out']\n this.startIfEnabled()\n }\n\n public setElementSelectors(selectors: Set<string>): void {\n this._elementSelectors = selectors\n }\n\n public getElementSelectors(element: Element | null): string[] | null {\n const elementSelectors: string[] = []\n\n this._elementSelectors?.forEach((selector) => {\n const matchedElements = document?.querySelectorAll(selector)\n matchedElements?.forEach((matchedElement: Element) => {\n if (element === matchedElement) {\n elementSelectors.push(selector)\n }\n })\n })\n\n return elementSelectors\n }\n\n public get isEnabled(): boolean {\n const persistedServerDisabled = this.instance.persistence?.props[AUTOCAPTURE_DISABLED_SERVER_SIDE]\n const memoryDisabled = this._isDisabledServerSide\n\n if (\n isNull(memoryDisabled) &&\n !isBoolean(persistedServerDisabled) &&\n !this.instance.config.advanced_disable_decide\n ) {\n // We only enable if we know that the server has not disabled it (unless decide is disabled)\n return false\n }\n\n const disabledServer = this._isDisabledServerSide ?? !!persistedServerDisabled\n const disabledClient = !this.instance.config.autocapture\n return !disabledClient && !disabledServer\n }\n\n private _previousElementSibling(el: Element): Element | null {\n if (el.previousElementSibling) {\n return el.previousElementSibling\n }\n let _el: Element | null = el\n do {\n _el = _el.previousSibling as Element | null // resolves to ChildNode->Node, which is Element's parent class\n } while (_el && !isElementNode(_el))\n return _el\n }\n\n private _getAugmentPropertiesFromElement(elem: Element): Properties {\n const shouldCaptureEl = shouldCaptureElement(elem)\n if (!shouldCaptureEl) {\n return {}\n }\n\n const props: Properties = {}\n\n each(elem.attributes, function (attr: Attr) {\n if (attr.name && attr.name.indexOf('data-ph-capture-attribute') === 0) {\n const propertyKey = attr.name.replace('data-ph-capture-attribute-', '')\n const propertyValue = attr.value\n if (propertyKey && propertyValue && shouldCaptureValue(propertyValue)) {\n props[propertyKey] = propertyValue\n }\n }\n })\n\n return props\n }\n\n private _getPropertiesFromElement(elem: Element, maskInputs: boolean, maskText: boolean): Properties {\n const tag_name = elem.tagName.toLowerCase()\n const props: Properties = {\n tag_name: tag_name,\n }\n if (autocaptureCompatibleElements.indexOf(tag_name) > -1 && !maskText) {\n if (tag_name.toLowerCase() === 'a' || tag_name.toLowerCase() === 'button') {\n props['$el_text'] = limitText(1024, getDirectAndNestedSpanText(elem))\n } else {\n props['$el_text'] = limitText(1024, getSafeText(elem))\n }\n }\n\n const classes = getClassNames(elem)\n if (classes.length > 0)\n props['classes'] = classes.filter(function (c) {\n return c !== ''\n })\n\n // capture the deny list here because this not-a-class class makes it tricky to use this.config in the function below\n const elementAttributeIgnorelist = this.config?.element_attribute_ignorelist\n each(elem.attributes, function (attr: Attr) {\n // Only capture attributes we know are safe\n if (isSensitiveElement(elem) && ['name', 'id', 'class', 'aria-label'].indexOf(attr.name) === -1) return\n\n if (elementAttributeIgnorelist?.includes(attr.name)) return\n\n if (!maskInputs && shouldCaptureValue(attr.value) && !isAngularStyleAttr(attr.name)) {\n let value = attr.value\n if (attr.name === 'class') {\n // html attributes can _technically_ contain linebreaks,\n // but we're very intolerant of them in the class string,\n // so we strip them.\n value = splitClassString(value).join(' ')\n }\n props['attr__' + attr.name] = limitText(1024, value)\n }\n })\n\n let nthChild = 1\n let nthOfType = 1\n let currentElem: Element | null = elem\n while ((currentElem = this._previousElementSibling(currentElem))) {\n // eslint-disable-line no-cond-assign\n nthChild++\n if (currentElem.tagName === elem.tagName) {\n nthOfType++\n }\n }\n props['nth_child'] = nthChild\n props['nth_of_type'] = nthOfType\n\n return props\n }\n\n private _getDefaultProperties(eventType: string): Properties {\n return {\n $event_type: eventType,\n $ce_version: 1,\n }\n }\n\n private _getEventTarget(e: Event): Element | null {\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/target#Compatibility_notes\n if (isUndefined(e.target)) {\n return (e.srcElement as Element) || null\n } else {\n if ((e.target as HTMLElement)?.shadowRoot) {\n return (e.composedPath()[0] as Element) || null\n }\n return (e.target as Element) || null\n }\n }\n\n private _captureEvent(e: Event, eventName = '$autocapture'): boolean | void {\n if (!this.isEnabled) {\n return\n }\n\n /*** Don't mess with this code without running IE8 tests on it ***/\n let target = this._getEventTarget(e)\n if (isTextNode(target)) {\n // defeat Safari bug (see: http://www.quirksmode.org/js/events_properties.html)\n target = (target.parentNode || null) as Element | null\n }\n\n if (eventName === '$autocapture' && e.type === 'click' && e instanceof MouseEvent) {\n if (\n this.instance.config.rageclick &&\n this.rageclicks?.isRageClick(e.clientX, e.clientY, new Date().getTime())\n ) {\n this._captureEvent(e, '$rageclick')\n }\n }\n\n const isCopyAutocapture = eventName === COPY_AUTOCAPTURE_EVENT\n if (\n target &&\n shouldCaptureDomEvent(\n target,\n e,\n this.config,\n // mostly this method cares about the target element, but in the case of copy events,\n // we want some of the work this check does without insisting on the target element's type\n isCopyAutocapture,\n // we also don't want to restrict copy checks to clicks,\n // so we pass that knowledge in here, rather than add the logic inside the check\n isCopyAutocapture ? ['copy', 'cut'] : undefined\n )\n ) {\n const targetElementList = [target]\n let curEl = target\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n if (isDocumentFragment(curEl.parentNode)) {\n targetElementList.push((curEl.parentNode as any).host)\n curEl = (curEl.parentNode as any).host\n continue\n }\n targetElementList.push(curEl.parentNode as Element)\n curEl = curEl.parentNode as Element\n }\n\n const elementsJson: Properties[] = []\n const autocaptureAugmentProperties: Properties = {}\n let href,\n explicitNoCapture = false\n\n each(targetElementList, (el) => {\n const shouldCaptureEl = shouldCaptureElement(el)\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (el.tagName.toLowerCase() === 'a') {\n href = el.getAttribute('href')\n href = shouldCaptureEl && shouldCaptureValue(href) && href\n }\n\n // allow users to programmatically prevent capturing of elements by adding class 'ph-no-capture'\n const classes = getClassNames(el)\n if (includes(classes, 'ph-no-capture')) {\n explicitNoCapture = true\n }\n\n elementsJson.push(\n this._getPropertiesFromElement(\n el,\n this.instance.config.mask_all_element_attributes,\n this.instance.config.mask_all_text\n )\n )\n\n const augmentProperties = this._getAugmentPropertiesFromElement(el)\n extend(autocaptureAugmentProperties, augmentProperties)\n })\n\n if (!this.instance.config.mask_all_text) {\n // if the element is a button or anchor tag get the span text from any\n // children and include it as/with the text property on the parent element\n if (target.tagName.toLowerCase() === 'a' || target.tagName.toLowerCase() === 'button') {\n elementsJson[0]['$el_text'] = getDirectAndNestedSpanText(target)\n } else {\n elementsJson[0]['$el_text'] = getSafeText(target)\n }\n }\n\n let externalHref: string | undefined\n if (href) {\n elementsJson[0]['attr__href'] = href\n const hrefHost = convertToURL(href)?.host\n const locationHost = window?.location?.host\n if (hrefHost && locationHost && hrefHost !== locationHost) {\n externalHref = href\n }\n }\n\n if (explicitNoCapture) {\n return false\n }\n\n const props = extend(\n this._getDefaultProperties(e.type),\n this._elementsChainAsString\n ? {\n $elements_chain: getElementsChainString(elementsJson),\n }\n : {\n $elements: elementsJson,\n },\n elementsJson[0]?.['$el_text'] ? { $el_text: elementsJson[0]?.['$el_text'] } : {},\n externalHref && e.type === 'click' ? { $external_click_url: externalHref } : {},\n autocaptureAugmentProperties\n )\n\n const elementSelectors = this.getElementSelectors(target)\n if (elementSelectors && elementSelectors.length > 0) {\n props['$element_selectors'] = elementSelectors\n }\n\n if (eventName === COPY_AUTOCAPTURE_EVENT) {\n // you can't read the data from the clipboard event,\n // but you can guess that you can read it from the window's current selection\n const selectedContent = makeSafeText(window?.getSelection()?.toString())\n const clipType = (e as ClipboardEvent).type || 'clipboard'\n if (!selectedContent) {\n return false\n }\n props['$selected_content'] = selectedContent\n props['$copy_type'] = clipType\n }\n\n this.instance.capture(eventName, props)\n return true\n }\n }\n\n isBrowserSupported(): boolean {\n return isFunction(document?.querySelectorAll)\n }\n}\n"]}
|
package/lib/src/consent.js
CHANGED
|
@@ -85,7 +85,7 @@ var ConsentManager = /** @class */ (function () {
|
|
|
85
85
|
return false;
|
|
86
86
|
}
|
|
87
87
|
return !!find([
|
|
88
|
-
navigator === null || navigator === void 0 ? void 0 : navigator.doNotTrack,
|
|
88
|
+
navigator === null || navigator === void 0 ? void 0 : navigator.doNotTrack, // standard
|
|
89
89
|
navigator === null || navigator === void 0 ? void 0 : navigator['msDoNotTrack'],
|
|
90
90
|
assignableWindow['doNotTrack'],
|
|
91
91
|
], function (dntValue) {
|
package/lib/src/consent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/consent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAGnD,IAAM,cAAc,GAAG,kBAAkB,CAAA;AAEzC,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,wDAAY,CAAA;IACZ,qDAAU,CAAA;IACV,uDAAW,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED;;GAEG;AACH;IAGI,wBAAoB,QAAiB;QAAjB,aAAQ,GAAR,QAAQ,CAAS;IAAG,CAAC;IAEzC,sBAAY,kCAAM;aAAlB;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA;QAC/B,CAAC;;;OAAA;IAED,sBAAW,mCAAO;aAAlB;YACI,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/consent.ts"],"names":[],"mappings":"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","sourcesContent":["import { PostHog } from './posthog-core'\nimport { find, includes } from './utils'\nimport { assignableWindow, navigator } from './utils/globals'\nimport { cookieStore, localStore } from './storage'\nimport { PersistentStore } from './types'\n\nconst OPT_OUT_PREFIX = '__ph_opt_in_out_'\n\nexport enum ConsentStatus {\n PENDING = -1,\n DENIED = 0,\n GRANTED = 1,\n}\n\n/**\n * ConsentManager provides tools for managing user consent as configured by the application.\n */\nexport class ConsentManager {\n private _storage?: PersistentStore\n\n constructor(private instance: PostHog) {}\n\n private get config() {\n return this.instance.config\n }\n\n public get consent(): ConsentStatus {\n if (this.getDnt()) {\n return ConsentStatus.DENIED\n }\n\n return this.storedConsent\n }\n\n public isOptedOut() {\n return (\n this.consent === ConsentStatus.DENIED ||\n (this.consent === ConsentStatus.PENDING && this.config.opt_out_capturing_by_default)\n )\n }\n\n public isOptedIn() {\n return !this.isOptedOut()\n }\n\n public optInOut(isOptedIn: boolean) {\n this.storage.set(\n this.storageKey,\n isOptedIn ? 1 : 0,\n this.config.cookie_expiration,\n this.config.cross_subdomain_cookie,\n this.config.secure_cookie\n )\n }\n\n public reset() {\n this.storage.remove(this.storageKey, this.config.cross_subdomain_cookie)\n }\n\n private get storageKey() {\n const { token, opt_out_capturing_cookie_prefix } = this.instance.config\n return (opt_out_capturing_cookie_prefix || OPT_OUT_PREFIX) + token\n }\n\n private get storedConsent(): ConsentStatus {\n const value = this.storage.get(this.storageKey)\n return value === '1' ? ConsentStatus.GRANTED : value === '0' ? ConsentStatus.DENIED : ConsentStatus.PENDING\n }\n\n private get storage() {\n if (!this._storage) {\n const persistenceType = this.config.opt_out_capturing_persistence_type\n this._storage = persistenceType === 'localStorage' ? localStore : cookieStore\n const otherStorage = persistenceType === 'localStorage' ? cookieStore : localStore\n\n if (otherStorage.get(this.storageKey)) {\n if (!this._storage.get(this.storageKey)) {\n // This indicates we have moved to a new storage format so we migrate the value over\n this.optInOut(otherStorage.get(this.storageKey) === '1')\n }\n\n otherStorage.remove(this.storageKey, this.config.cross_subdomain_cookie)\n }\n }\n\n return this._storage\n }\n\n private getDnt(): boolean {\n if (!this.config.respect_dnt) {\n return false\n }\n return !!find(\n [\n navigator?.doNotTrack, // standard\n (navigator as any)?.['msDoNotTrack'],\n assignableWindow['doNotTrack'],\n ],\n (dntValue): boolean => {\n return includes([true, 1, '1', 'yes'], dntValue)\n }\n )\n }\n}\n"]}
|
package/lib/src/decide.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../../src/decide.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,EAAE,WAAW,EAAkB,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA;AAEvF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAE5D;IACI,gBAA6B,QAAiB;QAAjB,aAAQ,GAAR,QAAQ,CAAS;QAC1C,qFAAqF;QACrF,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,4BAA4B,EAAE,CAAA;IACrF,CAAC;IAED,qBAAI,GAAJ;QAAA,iBAwBC;QAvBG;;UAEE;QACF,IAAM,IAAI,GAAG;YACT,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;YACjC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAC5C,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YACjC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,4BAA4B,CAAC;YAC3E,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,2BAA2B,CAAC;YACzE,aAAa,EACT,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B;gBACnD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,4CAA4C;gBACjE,SAAS;SAChB,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxB,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC;YACnE,IAAI,MAAA;YACJ,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM;YACtF,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,+BAA+B;YAC7D,QAAQ,EAAE,UAAC,QAAQ,IAAK,OAAA,KAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAkC,CAAC,EAArE,CAAqE;SAChG,CAAC,CAAA;IACN,CAAC;IAED,oCAAmB,GAAnB,UAAoB,QAAyB;;QAA7C,iBA6CC;QA5CG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;QACpD,qDAAqD;QACrD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAA;QAE9C,IAAM,aAAa,GAAG,CAAC,QAAQ,CAAA;QAE/B,IACI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,4CAA4C;YAClE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,EACtD;
|
|
1
|
+
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../../src/decide.ts"],"names":[],"mappings":"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","sourcesContent":["import { PostHog } from './posthog-core'\nimport { Compression, DecideResponse } from './types'\nimport { STORED_GROUP_PROPERTIES_KEY, STORED_PERSON_PROPERTIES_KEY } from './constants'\n\nimport { logger } from './utils/logger'\nimport { document, assignableWindow } from './utils/globals'\n\nexport class Decide {\n constructor(private readonly instance: PostHog) {\n // don't need to wait for `decide` to return if flags were provided on initialisation\n this.instance.decideEndpointWasHit = this.instance._hasBootstrappedFeatureFlags()\n }\n\n call(): void {\n /*\n Calls /decide endpoint to fetch options for autocapture, session recording, feature flags & compression.\n */\n const data = {\n token: this.instance.config.token,\n distinct_id: this.instance.get_distinct_id(),\n groups: this.instance.getGroups(),\n person_properties: this.instance.get_property(STORED_PERSON_PROPERTIES_KEY),\n group_properties: this.instance.get_property(STORED_GROUP_PROPERTIES_KEY),\n disable_flags:\n this.instance.config.advanced_disable_feature_flags ||\n this.instance.config.advanced_disable_feature_flags_on_first_load ||\n undefined,\n }\n\n this.instance._send_request({\n method: 'POST',\n url: this.instance.requestRouter.endpointFor('api', '/decide/?v=3'),\n data,\n compression: this.instance.config.disable_compression ? undefined : Compression.Base64,\n timeout: this.instance.config.feature_flag_request_timeout_ms,\n callback: (response) => this.parseDecideResponse(response.json as DecideResponse | undefined),\n })\n }\n\n parseDecideResponse(response?: DecideResponse): void {\n this.instance.featureFlags.setReloadingPaused(false)\n // :TRICKY: Reload - start another request if queued!\n this.instance.featureFlags._startReloadTimer()\n\n const errorsLoading = !response\n\n if (\n !this.instance.config.advanced_disable_feature_flags_on_first_load &&\n !this.instance.config.advanced_disable_feature_flags\n ) {\n this.instance.featureFlags.receivedFeatureFlags(response ?? {}, errorsLoading)\n }\n\n if (errorsLoading) {\n logger.error('Failed to fetch feature flags from PostHog.')\n return\n }\n if (!(document && document.body)) {\n logger.info('document not ready yet, trying again in 500 milliseconds...')\n setTimeout(() => {\n this.parseDecideResponse(response)\n }, 500)\n return\n }\n\n this.instance._afterDecideResponse(response)\n\n if (response['siteApps']) {\n if (this.instance.config.opt_in_site_apps) {\n for (const { id, url } of response['siteApps']) {\n const scriptUrl = this.instance.requestRouter.endpointFor('api', url)\n\n assignableWindow[`__$$ph_site_app_${id}`] = this.instance\n\n this.instance.requestRouter.loadScript(scriptUrl, (err) => {\n if (err) {\n return logger.error(`Error while initializing PostHog app with config id ${id}`, err)\n }\n })\n }\n } else if (response['siteApps'].length > 0) {\n logger.error('PostHog site apps are disabled. Enable the \"opt_in_site_apps\" config to proceed.')\n }\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exception-autocapture.js","sourceRoot":"","sources":["../../../src/entrypoints/exception-autocapture.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,MAAM,sDAAsD,CAAA;AACxH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC,IAAM,WAAW,GAAG,UAAC,SAAsC;IACvD,IAAM,GAAG,GAAG,MAAa,CAAA;IACzB,IAAI,CAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"exception-autocapture.js","sourceRoot":"","sources":["../../../src/entrypoints/exception-autocapture.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,MAAM,sDAAsD,CAAA;AACxH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC,IAAM,WAAW,GAAG,UAAC,SAAsC;IACvD,IAAM,GAAG,GAAG,MAAa,CAAA;IACzB,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IAC5D,CAAC;IACD,IAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAA;IAEnC,GAAG,CAAC,OAAO,GAAG;;QAAU,cAAuB;aAAvB,UAAuB,EAAvB,qBAAuB,EAAvB,IAAuB;YAAvB,yBAAuB;;QAC3C,IAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAC/C,SAAS,CAAC,eAAe,CAAC,CAAA;QAC1B,OAAO,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,wCAAM,IAAI,UAAC,mCAAI,KAAK,CAAA;IAC9C,CAAC,CAAA;IACD,GAAG,CAAC,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAA;IAE3C,OAAO;;QACI,MAAA,GAAG,CAAC,OAAO,+CAAE,wBAAwB,CAAA;QAC5C,GAAG,CAAC,OAAO,GAAG,eAAe,CAAA;IACjC,CAAC,CAAA;AACL,CAAC,CAAA;AAED,IAAM,sBAAsB,GAAG,UAAC,SAAsC;IAClE,IAAM,GAAG,GAAG,MAAa,CAAA;IACzB,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;IACzE,CAAC;IAED,IAAM,4BAA4B,GAAG,GAAG,CAAC,oBAAoB,CAAA;IAE7D,GAAG,CAAC,oBAAoB,GAAG;;QAAU,cAAoC;aAApC,UAAoC,EAApC,qBAAoC,EAApC,IAAoC;YAApC,yBAAoC;;QACrE,IAAM,eAAe,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAA;QAC5D,SAAS,CAAC,eAAe,CAAC,CAAA;QAC1B,OAAO,MAAA,4BAA4B,aAA5B,4BAA4B,uBAA5B,4BAA4B,CAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,mCAAI,KAAK,CAAA;IAClE,CAAC,CAAA;IACD,GAAG,CAAC,oBAAoB,CAAC,wBAAwB,GAAG,IAAI,CAAA;IAExD,OAAO;;QACI,MAAA,GAAG,CAAC,oBAAoB,+CAAE,wBAAwB,CAAA;QACzD,GAAG,CAAC,oBAAoB,GAAG,4BAA4B,CAAA;IAC3D,CAAC,CAAA;AACL,CAAC,CAAA;AAED,IAAM,6BAA6B,GAAG;IAClC,WAAW,aAAA;IACX,sBAAsB,wBAAA;CACzB,CAAA;AAED,IAAI,MAAM,EAAE,CAAC;IACT,CAAC;IAAC,MAAc,CAAC,6BAA6B,GAAG,6BAA6B,CAAA;AAClF,CAAC;AAED,eAAe,6BAA6B,CAAA","sourcesContent":["import { errorToProperties, unhandledRejectionToProperties } from '../extensions/exception-autocapture/error-conversion'\nimport { window } from '../utils/globals'\nimport { ErrorEventArgs, Properties } from '../types'\nimport { logger } from '../utils/logger'\n\nconst wrapOnError = (captureFn: (props: Properties) => void) => {\n const win = window as any\n if (!win) {\n logger.info('window not available, cannot wrap onerror')\n }\n const originalOnError = win.onerror\n\n win.onerror = function (...args: ErrorEventArgs): boolean {\n const errorProperties = errorToProperties(args)\n captureFn(errorProperties)\n return originalOnError?.(...args) ?? false\n }\n win.onerror.__POSTHOG_INSTRUMENTED__ = true\n\n return () => {\n delete win.onerror?.__POSTHOG_INSTRUMENTED__\n win.onerror = originalOnError\n }\n}\n\nconst wrapUnhandledRejection = (captureFn: (props: Properties) => void) => {\n const win = window as any\n if (!win) {\n logger.info('window not available, cannot wrap onUnhandledRejection')\n }\n\n const originalOnUnhandledRejection = win.onunhandledrejection\n\n win.onunhandledrejection = function (...args: [ev: PromiseRejectionEvent]): boolean {\n const errorProperties = unhandledRejectionToProperties(args)\n captureFn(errorProperties)\n return originalOnUnhandledRejection?.apply(win, args) ?? false\n }\n win.onunhandledrejection.__POSTHOG_INSTRUMENTED__ = true\n\n return () => {\n delete win.onunhandledrejection?.__POSTHOG_INSTRUMENTED__\n win.onunhandledrejection = originalOnUnhandledRejection\n }\n}\n\nconst posthogErrorWrappingFunctions = {\n wrapOnError,\n wrapUnhandledRejection,\n}\n\nif (window) {\n ;(window as any).posthogErrorWrappingFunctions = posthogErrorWrappingFunctions\n}\n\nexport default posthogErrorWrappingFunctions\n"]}
|
|
@@ -157,10 +157,10 @@ function shouldRecordBody(_a) {
|
|
|
157
157
|
return recordBodyType;
|
|
158
158
|
return matchesContentType(recordBodyType);
|
|
159
159
|
}
|
|
160
|
-
function getRequestPerformanceEntry(
|
|
161
|
-
|
|
162
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
160
|
+
function getRequestPerformanceEntry(win_1, initiatorType_1, url_1, after_1, before_1) {
|
|
161
|
+
return __awaiter(this, arguments, void 0, function (win, initiatorType, url, after, before, attempt) {
|
|
163
162
|
var urlPerformanceEntries, performanceEntry;
|
|
163
|
+
if (attempt === void 0) { attempt = 0; }
|
|
164
164
|
return __generator(this, function (_a) {
|
|
165
165
|
switch (_a.label) {
|
|
166
166
|
case 0:
|
|
@@ -214,7 +214,7 @@ function _tryReadXHRBody(_a) {
|
|
|
214
214
|
try {
|
|
215
215
|
return JSON.stringify(body);
|
|
216
216
|
}
|
|
217
|
-
catch (
|
|
217
|
+
catch (_c) {
|
|
218
218
|
return '[SessionReplay] Failed to stringify response object';
|
|
219
219
|
}
|
|
220
220
|
}
|
|
@@ -394,11 +394,11 @@ function _tryReadBody(r) {
|
|
|
394
394
|
});
|
|
395
395
|
}
|
|
396
396
|
function _tryReadRequestBody(_a) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
var _b,
|
|
400
|
-
return __generator(this, function (
|
|
401
|
-
|
|
397
|
+
return __awaiter(this, arguments, void 0, function (_b) {
|
|
398
|
+
var _c, hostname, isHostDenied;
|
|
399
|
+
var r = _b.r, options = _b.options, url = _b.url;
|
|
400
|
+
return __generator(this, function (_d) {
|
|
401
|
+
_c = isHostOnDenyList(url, options), hostname = _c.hostname, isHostDenied = _c.isHostDenied;
|
|
402
402
|
if (isHostDenied) {
|
|
403
403
|
return [2 /*return*/, Promise.resolve(hostname + ' is in deny list')];
|
|
404
404
|
}
|
|
@@ -407,10 +407,10 @@ function _tryReadRequestBody(_a) {
|
|
|
407
407
|
});
|
|
408
408
|
}
|
|
409
409
|
function _tryReadResponseBody(_a) {
|
|
410
|
-
|
|
411
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
410
|
+
return __awaiter(this, arguments, void 0, function (_b) {
|
|
412
411
|
var cannotReadBodyReason;
|
|
413
|
-
|
|
412
|
+
var r = _b.r, options = _b.options, url = _b.url;
|
|
413
|
+
return __generator(this, function (_c) {
|
|
414
414
|
cannotReadBodyReason = _checkForCannotReadResponseBody({ r: r, options: options, url: url });
|
|
415
415
|
if (!isNull(cannotReadBodyReason)) {
|
|
416
416
|
return [2 /*return*/, Promise.resolve(cannotReadBodyReason)];
|