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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../../src/entrypoints/recorder.ts"],"names":[],"mappings":"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","sourcesContent":["import { version } from 'rrweb/package.json'\n\n// Same as loader-globals.ts except includes rrweb2 scripts.\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport rrwebRecord from 'rrweb/es/rrweb/packages/rrweb/src/record'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { getRecordConsolePlugin } from 'rrweb/es/rrweb/packages/rrweb/src/plugins/console/record'\n\n// rrweb/network@1 code starts\n// most of what is below here will be removed when rrweb release their code for this\n// see https://github.com/rrweb-io/rrweb/pull/1105\n/// <reference lib=\"dom\" />\n// NB adopted from https://github.com/rrweb-io/rrweb/pull/1105 which looks like it will be accepted into rrweb\n// however, in the PR, it throws when the performance observer data is not available\n// and assumes it is running in a browser with the Request API (i.e. not IE11)\n// copying here so that we can use it before rrweb adopt it\nimport type { IWindow, listenerHandler, RecordPlugin } from '@rrweb/types'\nimport { CapturedNetworkRequest, Headers, InitiatorType, NetworkRecordOptions } from '../types'\nimport { isArray, isBoolean, isDocument, isFormData, isNull, isNullish, isObject, isString } from '../utils/type-utils'\nimport { logger } from '../utils/logger'\nimport { window } from '../utils/globals'\nimport { defaultNetworkOptions } from '../extensions/replay/config'\nimport { formDataToQuery } from '../utils/request-utils'\nimport { patch } from '../extensions/replay/rrweb-plugins/patch'\nimport { isHostOnDenyList } from '../extensions/replay/external/denylist'\n\nexport type NetworkData = {\n requests: CapturedNetworkRequest[]\n isInitial?: boolean\n}\n\ntype networkCallback = (data: NetworkData) => void\n\nconst isNavigationTiming = (entry: PerformanceEntry): entry is PerformanceNavigationTiming =>\n entry.entryType === 'navigation'\nconst isResourceTiming = (entry: PerformanceEntry): entry is PerformanceResourceTiming => entry.entryType === 'resource'\n\ntype ObservedPerformanceEntry = (PerformanceNavigationTiming | PerformanceResourceTiming) & {\n responseStatus?: number\n}\n\nexport function findLast<T>(array: Array<T>, predicate: (value: T) => boolean): T | undefined {\n const length = array.length\n for (let i = length - 1; i >= 0; i -= 1) {\n if (predicate(array[i])) {\n return array[i]\n }\n }\n return undefined\n}\n\nfunction initPerformanceObserver(cb: networkCallback, win: IWindow, options: Required<NetworkRecordOptions>) {\n // if we are only observing timings then we could have a single observer for all types, with buffer true,\n // but we are going to filter by initiatorType _if we are wrapping fetch and xhr as the wrapped functions\n // will deal with those.\n // so we have a block which captures requests from before fetch/xhr is wrapped\n // these are marked `isInitial` so playback can display them differently if needed\n // they will never have method/status/headers/body because they are pre-wrapping that provides that\n if (options.recordInitialRequests) {\n const initialPerformanceEntries = win.performance\n .getEntries()\n .filter(\n (entry): entry is ObservedPerformanceEntry =>\n isNavigationTiming(entry) ||\n (isResourceTiming(entry) && options.initiatorTypes.includes(entry.initiatorType as InitiatorType))\n )\n cb({\n requests: initialPerformanceEntries.flatMap((entry) =>\n prepareRequest(entry, undefined, undefined, {}, true)\n ),\n isInitial: true,\n })\n }\n const observer = new win.PerformanceObserver((entries) => {\n // if recordBody or recordHeaders is true then we don't want to record fetch or xhr here\n // as the wrapped functions will do that. Otherwise, this filter becomes a noop\n // because we do want to record them here\n const wrappedInitiatorFilter = (entry: ObservedPerformanceEntry) =>\n options.recordBody || options.recordHeaders\n ? entry.initiatorType !== 'xmlhttprequest' && entry.initiatorType !== 'fetch'\n : true\n\n const performanceEntries = entries.getEntries().filter(\n (entry): entry is ObservedPerformanceEntry =>\n isNavigationTiming(entry) ||\n (isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType as InitiatorType) &&\n // TODO if we are _only_ capturing timing we don't want to filter initiator here\n wrappedInitiatorFilter(entry))\n )\n\n cb({\n requests: performanceEntries.flatMap((entry) => prepareRequest(entry, undefined, undefined, {})),\n })\n })\n // compat checked earlier\n // eslint-disable-next-line compat/compat\n const entryTypes = PerformanceObserver.supportedEntryTypes.filter((x) =>\n options.performanceEntryTypeToObserve.includes(x)\n )\n // initial records are gathered above, so we don't need to observe and buffer each type separately\n observer.observe({ entryTypes })\n return () => {\n observer.disconnect()\n }\n}\n\nfunction shouldRecordHeaders(type: 'request' | 'response', recordHeaders: NetworkRecordOptions['recordHeaders']) {\n return !!recordHeaders && (isBoolean(recordHeaders) || recordHeaders[type])\n}\n\nfunction shouldRecordBody({\n type,\n recordBody,\n headers,\n}: {\n type: 'request' | 'response'\n recordBody: NetworkRecordOptions['recordBody']\n headers: Headers\n url: string | URL | RequestInfo\n}) {\n function matchesContentType(contentTypes: string[]) {\n const contentTypeHeader = Object.keys(headers).find((key) => key.toLowerCase() === 'content-type')\n const contentType = contentTypeHeader && headers[contentTypeHeader]\n return contentTypes.some((ct) => contentType?.includes(ct))\n }\n\n if (!recordBody) return false\n if (isBoolean(recordBody)) return true\n if (isArray(recordBody)) return matchesContentType(recordBody)\n const recordBodyType = recordBody[type]\n if (isBoolean(recordBodyType)) return recordBodyType\n return matchesContentType(recordBodyType)\n}\n\nasync function getRequestPerformanceEntry(\n win: IWindow,\n initiatorType: string,\n url: string,\n after?: number,\n before?: number,\n attempt = 0\n): Promise<PerformanceResourceTiming | null> {\n if (attempt > 10) {\n logger.warn('Failed to get performance entry for request', { url, initiatorType })\n return null\n }\n const urlPerformanceEntries = win.performance.getEntriesByName(url) as PerformanceResourceTiming[]\n const performanceEntry = findLast(\n urlPerformanceEntries,\n (entry) =>\n isResourceTiming(entry) &&\n entry.initiatorType === initiatorType &&\n (!after || entry.startTime >= after) &&\n (!before || entry.startTime <= before)\n )\n if (!performanceEntry) {\n await new Promise((resolve) => setTimeout(resolve, 50 * attempt))\n return getRequestPerformanceEntry(win, initiatorType, url, after, before, attempt + 1)\n }\n return performanceEntry\n}\n\n/**\n * According to MDN https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/response\n * xhr response is typed as any but can be an ArrayBuffer, a Blob, a Document, a JavaScript object,\n * or a string, depending on the value of XMLHttpRequest.responseType, that contains the response entity body.\n *\n * XHR request body is Document | XMLHttpRequestBodyInit | null | undefined\n */\nfunction _tryReadXHRBody({\n body,\n options,\n url,\n}: {\n body: Document | XMLHttpRequestBodyInit | any | null | undefined\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): string | null {\n if (isNullish(body)) {\n return null\n }\n\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return hostname + ' is in deny list'\n }\n\n if (isString(body)) {\n return body\n }\n\n if (isDocument(body)) {\n return body.textContent\n }\n\n if (isFormData(body)) {\n return formDataToQuery(body)\n }\n\n if (isObject(body)) {\n try {\n return JSON.stringify(body)\n } catch (e) {\n return '[SessionReplay] Failed to stringify response object'\n }\n }\n\n return '[SessionReplay] Cannot read body of type ' + toString.call(body)\n}\n\nfunction initXhrObserver(cb: networkCallback, win: IWindow, options: Required<NetworkRecordOptions>): listenerHandler {\n if (!options.initiatorTypes.includes('xmlhttprequest')) {\n return () => {\n //\n }\n }\n const recordRequestHeaders = shouldRecordHeaders('request', options.recordHeaders)\n const recordResponseHeaders = shouldRecordHeaders('response', options.recordHeaders)\n\n const restorePatch = patch(\n win.XMLHttpRequest.prototype,\n 'open',\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (originalOpen: typeof XMLHttpRequest.prototype.open) => {\n return function (\n method: string,\n url: string | URL,\n async = true,\n username?: string | null,\n password?: string | null\n ) {\n // because this function is returned in its actual context `this` _is_ an XMLHttpRequest\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const xhr = this as XMLHttpRequest\n\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url)\n const networkRequest: Partial<CapturedNetworkRequest> = {}\n let after: number | undefined\n let before: number | undefined\n\n const requestHeaders: Headers = {}\n const originalSetRequestHeader = xhr.setRequestHeader.bind(xhr)\n xhr.setRequestHeader = (header: string, value: string) => {\n requestHeaders[header] = value\n return originalSetRequestHeader(header, value)\n }\n if (recordRequestHeaders) {\n networkRequest.requestHeaders = requestHeaders\n }\n\n const originalSend = xhr.send.bind(xhr)\n xhr.send = (body) => {\n if (\n shouldRecordBody({\n type: 'request',\n headers: requestHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.requestBody = _tryReadXHRBody({ body, options, url })\n }\n after = win.performance.now()\n return originalSend(body)\n }\n\n xhr.addEventListener('readystatechange', () => {\n if (xhr.readyState !== xhr.DONE) {\n return\n }\n before = win.performance.now()\n const responseHeaders: Headers = {}\n const rawHeaders = xhr.getAllResponseHeaders()\n const headers = rawHeaders.trim().split(/[\\r\\n]+/)\n headers.forEach((line) => {\n const parts = line.split(': ')\n const header = parts.shift()\n const value = parts.join(': ')\n if (header) {\n responseHeaders[header] = value\n }\n })\n if (recordResponseHeaders) {\n networkRequest.responseHeaders = responseHeaders\n }\n if (\n shouldRecordBody({\n type: 'response',\n headers: responseHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.responseBody = _tryReadXHRBody({ body: xhr.response, options, url })\n }\n getRequestPerformanceEntry(win, 'xmlhttprequest', req.url, after, before)\n .then((entry) => {\n if (isNull(entry)) {\n return\n }\n const requests = prepareRequest(entry, req.method, xhr?.status, networkRequest)\n cb({ requests })\n })\n .catch(() => {\n //\n })\n })\n originalOpen.call(xhr, method, url, async, username, password)\n }\n }\n )\n return () => {\n restorePatch()\n }\n}\n\n/**\n * Check if this PerformanceEntry is either a PerformanceResourceTiming or a PerformanceNavigationTiming\n * NB PerformanceNavigationTiming extends PerformanceResourceTiming\n * Here we don't care which interface it implements as both expose `serverTimings`\n */\nconst exposesServerTiming = (event: PerformanceEntry): event is PerformanceResourceTiming =>\n event.entryType === 'navigation' || event.entryType === 'resource'\n\nfunction prepareRequest(\n entry: PerformanceResourceTiming,\n method: string | undefined,\n status: number | undefined,\n networkRequest: Partial<CapturedNetworkRequest>,\n isInitial?: boolean\n): CapturedNetworkRequest[] {\n // kudos to sentry javascript sdk for excellent background on why to use Date.now() here\n // https://github.com/getsentry/sentry-javascript/blob/e856e40b6e71a73252e788cd42b5260f81c9c88e/packages/utils/src/time.ts#L70\n // can't start observer if performance.now() is not available\n // eslint-disable-next-line compat/compat\n const timeOrigin = Math.floor(Date.now() - performance.now())\n // clickhouse can't ingest timestamps that are floats\n // (in this case representing fractions of a millisecond we don't care about anyway)\n const timestamp = Math.floor(timeOrigin + entry.startTime)\n\n const requests: CapturedNetworkRequest[] = [\n {\n ...entry.toJSON(),\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin,\n timestamp,\n method: method,\n initiatorType: entry.initiatorType as InitiatorType,\n status,\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n isInitial,\n },\n ]\n\n if (exposesServerTiming(entry)) {\n for (const timing of entry.serverTiming || []) {\n requests.push({\n timeOrigin,\n timestamp,\n startTime: Math.round(entry.startTime),\n name: timing.name,\n duration: timing.duration,\n // the spec has a closed list of possible types\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/entryType\n // but, we need to know this was a server timing so that we know to\n // match it to the appropriate navigation or resource timing\n // that matching will have to be on timestamp and $current_url\n entryType: 'serverTiming',\n })\n }\n }\n\n return requests\n}\n\nconst contentTypePrefixDenyList = ['video/', 'audio/']\n\nfunction _checkForCannotReadResponseBody({\n r,\n options,\n url,\n}: {\n r: Response\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): string | null {\n if (r.headers.get('Transfer-Encoding') === 'chunked') {\n return 'Chunked Transfer-Encoding is not supported'\n }\n\n // `get` and `has` are case-insensitive\n // but return the header value with the casing that was supplied\n const contentType = r.headers.get('Content-Type')?.toLowerCase()\n const contentTypeIsDenied = contentTypePrefixDenyList.some((prefix) => contentType?.startsWith(prefix))\n if (contentType && contentTypeIsDenied) {\n return `Content-Type ${contentType} is not supported`\n }\n\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return hostname + ' is in deny list'\n }\n\n return null\n}\n\nfunction _tryReadBody(r: Request | Response): Promise<string> {\n // there are now already multiple places where we're using Promise...\n // eslint-disable-next-line compat/compat\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => resolve('[SessionReplay] Timeout while trying to read body'), 500)\n r.clone()\n .text()\n .then(\n (txt) => resolve(txt),\n (reason) => reject(reason)\n )\n .finally(() => clearTimeout(timeout))\n })\n}\n\nasync function _tryReadRequestBody({\n r,\n options,\n url,\n}: {\n r: Request\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): Promise<string> {\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return Promise.resolve(hostname + ' is in deny list')\n }\n\n return _tryReadBody(r)\n}\n\nasync function _tryReadResponseBody({\n r,\n options,\n url,\n}: {\n r: Response\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): Promise<string> {\n const cannotReadBodyReason: string | null = _checkForCannotReadResponseBody({ r, options, url })\n if (!isNull(cannotReadBodyReason)) {\n return Promise.resolve(cannotReadBodyReason)\n }\n\n return _tryReadBody(r)\n}\n\nfunction initFetchObserver(\n cb: networkCallback,\n win: IWindow,\n options: Required<NetworkRecordOptions>\n): listenerHandler {\n if (!options.initiatorTypes.includes('fetch')) {\n return () => {\n //\n }\n }\n const recordRequestHeaders = shouldRecordHeaders('request', options.recordHeaders)\n const recordResponseHeaders = shouldRecordHeaders('response', options.recordHeaders)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const restorePatch = patch(win, 'fetch', (originalFetch: typeof fetch) => {\n return async function (url: URL | RequestInfo, init?: RequestInit | undefined) {\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url, init)\n let res: Response | undefined\n const networkRequest: Partial<CapturedNetworkRequest> = {}\n let after: number | undefined\n let before: number | undefined\n try {\n const requestHeaders: Headers = {}\n req.headers.forEach((value, header) => {\n requestHeaders[header] = value\n })\n if (recordRequestHeaders) {\n networkRequest.requestHeaders = requestHeaders\n }\n if (\n shouldRecordBody({\n type: 'request',\n headers: requestHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.requestBody = await _tryReadRequestBody({ r: req, options, url })\n }\n\n after = win.performance.now()\n res = await originalFetch(req)\n before = win.performance.now()\n\n const responseHeaders: Headers = {}\n res.headers.forEach((value, header) => {\n responseHeaders[header] = value\n })\n if (recordResponseHeaders) {\n networkRequest.responseHeaders = responseHeaders\n }\n if (\n shouldRecordBody({\n type: 'response',\n headers: responseHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.responseBody = await _tryReadResponseBody({ r: res, options, url })\n }\n\n return res\n } finally {\n getRequestPerformanceEntry(win, 'fetch', req.url, after, before)\n .then((entry) => {\n if (isNull(entry)) {\n return\n }\n const requests = prepareRequest(entry, req.method, res?.status, networkRequest)\n cb({ requests })\n })\n .catch(() => {\n //\n })\n }\n }\n })\n return () => {\n restorePatch()\n }\n}\n\nlet initialisedHandler: listenerHandler | null = null\n\nfunction initNetworkObserver(\n callback: networkCallback,\n win: IWindow, // top window or in an iframe\n options: NetworkRecordOptions\n): listenerHandler {\n if (!('performance' in win)) {\n return () => {\n //\n }\n }\n\n if (initialisedHandler) {\n logger.warn('Network observer already initialised, doing nothing')\n return () => {\n // the first caller should already have this handler and will be responsible for teardown\n }\n }\n\n const networkOptions = (\n options ? Object.assign({}, defaultNetworkOptions, options) : defaultNetworkOptions\n ) as Required<NetworkRecordOptions>\n\n const cb: networkCallback = (data) => {\n const requests: CapturedNetworkRequest[] = []\n data.requests.forEach((request) => {\n const maskedRequest = networkOptions.maskRequestFn(request)\n if (maskedRequest) {\n requests.push(maskedRequest)\n }\n })\n\n if (requests.length > 0) {\n callback({ ...data, requests })\n }\n }\n const performanceObserver = initPerformanceObserver(cb, win, networkOptions)\n\n // only wrap fetch and xhr if headers or body are being recorded\n let xhrObserver: listenerHandler = () => {}\n let fetchObserver: listenerHandler = () => {}\n if (networkOptions.recordHeaders || networkOptions.recordBody) {\n xhrObserver = initXhrObserver(cb, win, networkOptions)\n fetchObserver = initFetchObserver(cb, win, networkOptions)\n }\n\n initialisedHandler = () => {\n performanceObserver()\n xhrObserver()\n fetchObserver()\n }\n return initialisedHandler\n}\n\n// use the plugin name so that when this functionality is adopted into rrweb\n// we can remove this plugin and use the core functionality with the same data\nexport const NETWORK_PLUGIN_NAME = 'rrweb/network@1'\n\n// TODO how should this be typed?\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nexport const getRecordNetworkPlugin: (options?: NetworkRecordOptions) => RecordPlugin = (options) => {\n return {\n name: NETWORK_PLUGIN_NAME,\n observer: initNetworkObserver,\n options: options,\n }\n}\n\n// rrweb/networ@1 ends\n\nif (window) {\n ;(window as any).rrweb = { record: rrwebRecord, version: 'v2', rrwebVersion: version }\n ;(window as any).rrwebConsoleRecord = { getRecordConsolePlugin }\n ;(window as any).getRecordNetworkPlugin = getRecordNetworkPlugin\n}\n\nexport default rrwebRecord\n"]}
|
|
1
|
+
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../../src/entrypoints/recorder.ts"],"names":[],"mappings":"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","sourcesContent":["import { version } from 'rrweb/package.json'\n\n// Same as loader-globals.ts except includes rrweb2 scripts.\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport rrwebRecord from 'rrweb/es/rrweb/packages/rrweb/src/record'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { getRecordConsolePlugin } from 'rrweb/es/rrweb/packages/rrweb/src/plugins/console/record'\n\n// rrweb/network@1 code starts\n// most of what is below here will be removed when rrweb release their code for this\n// see https://github.com/rrweb-io/rrweb/pull/1105\n/// <reference lib=\"dom\" />\n// NB adopted from https://github.com/rrweb-io/rrweb/pull/1105 which looks like it will be accepted into rrweb\n// however, in the PR, it throws when the performance observer data is not available\n// and assumes it is running in a browser with the Request API (i.e. not IE11)\n// copying here so that we can use it before rrweb adopt it\nimport type { IWindow, listenerHandler, RecordPlugin } from '@rrweb/types'\nimport { CapturedNetworkRequest, Headers, InitiatorType, NetworkRecordOptions } from '../types'\nimport { isArray, isBoolean, isDocument, isFormData, isNull, isNullish, isObject, isString } from '../utils/type-utils'\nimport { logger } from '../utils/logger'\nimport { window } from '../utils/globals'\nimport { defaultNetworkOptions } from '../extensions/replay/config'\nimport { formDataToQuery } from '../utils/request-utils'\nimport { patch } from '../extensions/replay/rrweb-plugins/patch'\nimport { isHostOnDenyList } from '../extensions/replay/external/denylist'\n\nexport type NetworkData = {\n requests: CapturedNetworkRequest[]\n isInitial?: boolean\n}\n\ntype networkCallback = (data: NetworkData) => void\n\nconst isNavigationTiming = (entry: PerformanceEntry): entry is PerformanceNavigationTiming =>\n entry.entryType === 'navigation'\nconst isResourceTiming = (entry: PerformanceEntry): entry is PerformanceResourceTiming => entry.entryType === 'resource'\n\ntype ObservedPerformanceEntry = (PerformanceNavigationTiming | PerformanceResourceTiming) & {\n responseStatus?: number\n}\n\nexport function findLast<T>(array: Array<T>, predicate: (value: T) => boolean): T | undefined {\n const length = array.length\n for (let i = length - 1; i >= 0; i -= 1) {\n if (predicate(array[i])) {\n return array[i]\n }\n }\n return undefined\n}\n\nfunction initPerformanceObserver(cb: networkCallback, win: IWindow, options: Required<NetworkRecordOptions>) {\n // if we are only observing timings then we could have a single observer for all types, with buffer true,\n // but we are going to filter by initiatorType _if we are wrapping fetch and xhr as the wrapped functions\n // will deal with those.\n // so we have a block which captures requests from before fetch/xhr is wrapped\n // these are marked `isInitial` so playback can display them differently if needed\n // they will never have method/status/headers/body because they are pre-wrapping that provides that\n if (options.recordInitialRequests) {\n const initialPerformanceEntries = win.performance\n .getEntries()\n .filter(\n (entry): entry is ObservedPerformanceEntry =>\n isNavigationTiming(entry) ||\n (isResourceTiming(entry) && options.initiatorTypes.includes(entry.initiatorType as InitiatorType))\n )\n cb({\n requests: initialPerformanceEntries.flatMap((entry) =>\n prepareRequest(entry, undefined, undefined, {}, true)\n ),\n isInitial: true,\n })\n }\n const observer = new win.PerformanceObserver((entries) => {\n // if recordBody or recordHeaders is true then we don't want to record fetch or xhr here\n // as the wrapped functions will do that. Otherwise, this filter becomes a noop\n // because we do want to record them here\n const wrappedInitiatorFilter = (entry: ObservedPerformanceEntry) =>\n options.recordBody || options.recordHeaders\n ? entry.initiatorType !== 'xmlhttprequest' && entry.initiatorType !== 'fetch'\n : true\n\n const performanceEntries = entries.getEntries().filter(\n (entry): entry is ObservedPerformanceEntry =>\n isNavigationTiming(entry) ||\n (isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType as InitiatorType) &&\n // TODO if we are _only_ capturing timing we don't want to filter initiator here\n wrappedInitiatorFilter(entry))\n )\n\n cb({\n requests: performanceEntries.flatMap((entry) => prepareRequest(entry, undefined, undefined, {})),\n })\n })\n // compat checked earlier\n // eslint-disable-next-line compat/compat\n const entryTypes = PerformanceObserver.supportedEntryTypes.filter((x) =>\n options.performanceEntryTypeToObserve.includes(x)\n )\n // initial records are gathered above, so we don't need to observe and buffer each type separately\n observer.observe({ entryTypes })\n return () => {\n observer.disconnect()\n }\n}\n\nfunction shouldRecordHeaders(type: 'request' | 'response', recordHeaders: NetworkRecordOptions['recordHeaders']) {\n return !!recordHeaders && (isBoolean(recordHeaders) || recordHeaders[type])\n}\n\nfunction shouldRecordBody({\n type,\n recordBody,\n headers,\n}: {\n type: 'request' | 'response'\n recordBody: NetworkRecordOptions['recordBody']\n headers: Headers\n url: string | URL | RequestInfo\n}) {\n function matchesContentType(contentTypes: string[]) {\n const contentTypeHeader = Object.keys(headers).find((key) => key.toLowerCase() === 'content-type')\n const contentType = contentTypeHeader && headers[contentTypeHeader]\n return contentTypes.some((ct) => contentType?.includes(ct))\n }\n\n if (!recordBody) return false\n if (isBoolean(recordBody)) return true\n if (isArray(recordBody)) return matchesContentType(recordBody)\n const recordBodyType = recordBody[type]\n if (isBoolean(recordBodyType)) return recordBodyType\n return matchesContentType(recordBodyType)\n}\n\nasync function getRequestPerformanceEntry(\n win: IWindow,\n initiatorType: string,\n url: string,\n after?: number,\n before?: number,\n attempt = 0\n): Promise<PerformanceResourceTiming | null> {\n if (attempt > 10) {\n logger.warn('Failed to get performance entry for request', { url, initiatorType })\n return null\n }\n const urlPerformanceEntries = win.performance.getEntriesByName(url) as PerformanceResourceTiming[]\n const performanceEntry = findLast(\n urlPerformanceEntries,\n (entry) =>\n isResourceTiming(entry) &&\n entry.initiatorType === initiatorType &&\n (!after || entry.startTime >= after) &&\n (!before || entry.startTime <= before)\n )\n if (!performanceEntry) {\n await new Promise((resolve) => setTimeout(resolve, 50 * attempt))\n return getRequestPerformanceEntry(win, initiatorType, url, after, before, attempt + 1)\n }\n return performanceEntry\n}\n\n/**\n * According to MDN https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/response\n * xhr response is typed as any but can be an ArrayBuffer, a Blob, a Document, a JavaScript object,\n * or a string, depending on the value of XMLHttpRequest.responseType, that contains the response entity body.\n *\n * XHR request body is Document | XMLHttpRequestBodyInit | null | undefined\n */\nfunction _tryReadXHRBody({\n body,\n options,\n url,\n}: {\n body: Document | XMLHttpRequestBodyInit | any | null | undefined\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): string | null {\n if (isNullish(body)) {\n return null\n }\n\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return hostname + ' is in deny list'\n }\n\n if (isString(body)) {\n return body\n }\n\n if (isDocument(body)) {\n return body.textContent\n }\n\n if (isFormData(body)) {\n return formDataToQuery(body)\n }\n\n if (isObject(body)) {\n try {\n return JSON.stringify(body)\n } catch {\n return '[SessionReplay] Failed to stringify response object'\n }\n }\n\n return '[SessionReplay] Cannot read body of type ' + toString.call(body)\n}\n\nfunction initXhrObserver(cb: networkCallback, win: IWindow, options: Required<NetworkRecordOptions>): listenerHandler {\n if (!options.initiatorTypes.includes('xmlhttprequest')) {\n return () => {\n //\n }\n }\n const recordRequestHeaders = shouldRecordHeaders('request', options.recordHeaders)\n const recordResponseHeaders = shouldRecordHeaders('response', options.recordHeaders)\n\n const restorePatch = patch(\n win.XMLHttpRequest.prototype,\n 'open',\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (originalOpen: typeof XMLHttpRequest.prototype.open) => {\n return function (\n method: string,\n url: string | URL,\n async = true,\n username?: string | null,\n password?: string | null\n ) {\n // because this function is returned in its actual context `this` _is_ an XMLHttpRequest\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const xhr = this as XMLHttpRequest\n\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url)\n const networkRequest: Partial<CapturedNetworkRequest> = {}\n let after: number | undefined\n let before: number | undefined\n\n const requestHeaders: Headers = {}\n const originalSetRequestHeader = xhr.setRequestHeader.bind(xhr)\n xhr.setRequestHeader = (header: string, value: string) => {\n requestHeaders[header] = value\n return originalSetRequestHeader(header, value)\n }\n if (recordRequestHeaders) {\n networkRequest.requestHeaders = requestHeaders\n }\n\n const originalSend = xhr.send.bind(xhr)\n xhr.send = (body) => {\n if (\n shouldRecordBody({\n type: 'request',\n headers: requestHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.requestBody = _tryReadXHRBody({ body, options, url })\n }\n after = win.performance.now()\n return originalSend(body)\n }\n\n xhr.addEventListener('readystatechange', () => {\n if (xhr.readyState !== xhr.DONE) {\n return\n }\n before = win.performance.now()\n const responseHeaders: Headers = {}\n const rawHeaders = xhr.getAllResponseHeaders()\n const headers = rawHeaders.trim().split(/[\\r\\n]+/)\n headers.forEach((line) => {\n const parts = line.split(': ')\n const header = parts.shift()\n const value = parts.join(': ')\n if (header) {\n responseHeaders[header] = value\n }\n })\n if (recordResponseHeaders) {\n networkRequest.responseHeaders = responseHeaders\n }\n if (\n shouldRecordBody({\n type: 'response',\n headers: responseHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.responseBody = _tryReadXHRBody({ body: xhr.response, options, url })\n }\n getRequestPerformanceEntry(win, 'xmlhttprequest', req.url, after, before)\n .then((entry) => {\n if (isNull(entry)) {\n return\n }\n const requests = prepareRequest(entry, req.method, xhr?.status, networkRequest)\n cb({ requests })\n })\n .catch(() => {\n //\n })\n })\n originalOpen.call(xhr, method, url, async, username, password)\n }\n }\n )\n return () => {\n restorePatch()\n }\n}\n\n/**\n * Check if this PerformanceEntry is either a PerformanceResourceTiming or a PerformanceNavigationTiming\n * NB PerformanceNavigationTiming extends PerformanceResourceTiming\n * Here we don't care which interface it implements as both expose `serverTimings`\n */\nconst exposesServerTiming = (event: PerformanceEntry): event is PerformanceResourceTiming =>\n event.entryType === 'navigation' || event.entryType === 'resource'\n\nfunction prepareRequest(\n entry: PerformanceResourceTiming,\n method: string | undefined,\n status: number | undefined,\n networkRequest: Partial<CapturedNetworkRequest>,\n isInitial?: boolean\n): CapturedNetworkRequest[] {\n // kudos to sentry javascript sdk for excellent background on why to use Date.now() here\n // https://github.com/getsentry/sentry-javascript/blob/e856e40b6e71a73252e788cd42b5260f81c9c88e/packages/utils/src/time.ts#L70\n // can't start observer if performance.now() is not available\n // eslint-disable-next-line compat/compat\n const timeOrigin = Math.floor(Date.now() - performance.now())\n // clickhouse can't ingest timestamps that are floats\n // (in this case representing fractions of a millisecond we don't care about anyway)\n const timestamp = Math.floor(timeOrigin + entry.startTime)\n\n const requests: CapturedNetworkRequest[] = [\n {\n ...entry.toJSON(),\n startTime: Math.round(entry.startTime),\n endTime: Math.round(entry.responseEnd),\n timeOrigin,\n timestamp,\n method: method,\n initiatorType: entry.initiatorType as InitiatorType,\n status,\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n isInitial,\n },\n ]\n\n if (exposesServerTiming(entry)) {\n for (const timing of entry.serverTiming || []) {\n requests.push({\n timeOrigin,\n timestamp,\n startTime: Math.round(entry.startTime),\n name: timing.name,\n duration: timing.duration,\n // the spec has a closed list of possible types\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/entryType\n // but, we need to know this was a server timing so that we know to\n // match it to the appropriate navigation or resource timing\n // that matching will have to be on timestamp and $current_url\n entryType: 'serverTiming',\n })\n }\n }\n\n return requests\n}\n\nconst contentTypePrefixDenyList = ['video/', 'audio/']\n\nfunction _checkForCannotReadResponseBody({\n r,\n options,\n url,\n}: {\n r: Response\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): string | null {\n if (r.headers.get('Transfer-Encoding') === 'chunked') {\n return 'Chunked Transfer-Encoding is not supported'\n }\n\n // `get` and `has` are case-insensitive\n // but return the header value with the casing that was supplied\n const contentType = r.headers.get('Content-Type')?.toLowerCase()\n const contentTypeIsDenied = contentTypePrefixDenyList.some((prefix) => contentType?.startsWith(prefix))\n if (contentType && contentTypeIsDenied) {\n return `Content-Type ${contentType} is not supported`\n }\n\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return hostname + ' is in deny list'\n }\n\n return null\n}\n\nfunction _tryReadBody(r: Request | Response): Promise<string> {\n // there are now already multiple places where we're using Promise...\n // eslint-disable-next-line compat/compat\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => resolve('[SessionReplay] Timeout while trying to read body'), 500)\n r.clone()\n .text()\n .then(\n (txt) => resolve(txt),\n (reason) => reject(reason)\n )\n .finally(() => clearTimeout(timeout))\n })\n}\n\nasync function _tryReadRequestBody({\n r,\n options,\n url,\n}: {\n r: Request\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): Promise<string> {\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return Promise.resolve(hostname + ' is in deny list')\n }\n\n return _tryReadBody(r)\n}\n\nasync function _tryReadResponseBody({\n r,\n options,\n url,\n}: {\n r: Response\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): Promise<string> {\n const cannotReadBodyReason: string | null = _checkForCannotReadResponseBody({ r, options, url })\n if (!isNull(cannotReadBodyReason)) {\n return Promise.resolve(cannotReadBodyReason)\n }\n\n return _tryReadBody(r)\n}\n\nfunction initFetchObserver(\n cb: networkCallback,\n win: IWindow,\n options: Required<NetworkRecordOptions>\n): listenerHandler {\n if (!options.initiatorTypes.includes('fetch')) {\n return () => {\n //\n }\n }\n const recordRequestHeaders = shouldRecordHeaders('request', options.recordHeaders)\n const recordResponseHeaders = shouldRecordHeaders('response', options.recordHeaders)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const restorePatch = patch(win, 'fetch', (originalFetch: typeof fetch) => {\n return async function (url: URL | RequestInfo, init?: RequestInit | undefined) {\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url, init)\n let res: Response | undefined\n const networkRequest: Partial<CapturedNetworkRequest> = {}\n let after: number | undefined\n let before: number | undefined\n try {\n const requestHeaders: Headers = {}\n req.headers.forEach((value, header) => {\n requestHeaders[header] = value\n })\n if (recordRequestHeaders) {\n networkRequest.requestHeaders = requestHeaders\n }\n if (\n shouldRecordBody({\n type: 'request',\n headers: requestHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.requestBody = await _tryReadRequestBody({ r: req, options, url })\n }\n\n after = win.performance.now()\n res = await originalFetch(req)\n before = win.performance.now()\n\n const responseHeaders: Headers = {}\n res.headers.forEach((value, header) => {\n responseHeaders[header] = value\n })\n if (recordResponseHeaders) {\n networkRequest.responseHeaders = responseHeaders\n }\n if (\n shouldRecordBody({\n type: 'response',\n headers: responseHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.responseBody = await _tryReadResponseBody({ r: res, options, url })\n }\n\n return res\n } finally {\n getRequestPerformanceEntry(win, 'fetch', req.url, after, before)\n .then((entry) => {\n if (isNull(entry)) {\n return\n }\n const requests = prepareRequest(entry, req.method, res?.status, networkRequest)\n cb({ requests })\n })\n .catch(() => {\n //\n })\n }\n }\n })\n return () => {\n restorePatch()\n }\n}\n\nlet initialisedHandler: listenerHandler | null = null\n\nfunction initNetworkObserver(\n callback: networkCallback,\n win: IWindow, // top window or in an iframe\n options: NetworkRecordOptions\n): listenerHandler {\n if (!('performance' in win)) {\n return () => {\n //\n }\n }\n\n if (initialisedHandler) {\n logger.warn('Network observer already initialised, doing nothing')\n return () => {\n // the first caller should already have this handler and will be responsible for teardown\n }\n }\n\n const networkOptions = (\n options ? Object.assign({}, defaultNetworkOptions, options) : defaultNetworkOptions\n ) as Required<NetworkRecordOptions>\n\n const cb: networkCallback = (data) => {\n const requests: CapturedNetworkRequest[] = []\n data.requests.forEach((request) => {\n const maskedRequest = networkOptions.maskRequestFn(request)\n if (maskedRequest) {\n requests.push(maskedRequest)\n }\n })\n\n if (requests.length > 0) {\n callback({ ...data, requests })\n }\n }\n const performanceObserver = initPerformanceObserver(cb, win, networkOptions)\n\n // only wrap fetch and xhr if headers or body are being recorded\n let xhrObserver: listenerHandler = () => {}\n let fetchObserver: listenerHandler = () => {}\n if (networkOptions.recordHeaders || networkOptions.recordBody) {\n xhrObserver = initXhrObserver(cb, win, networkOptions)\n fetchObserver = initFetchObserver(cb, win, networkOptions)\n }\n\n initialisedHandler = () => {\n performanceObserver()\n xhrObserver()\n fetchObserver()\n }\n return initialisedHandler\n}\n\n// use the plugin name so that when this functionality is adopted into rrweb\n// we can remove this plugin and use the core functionality with the same data\nexport const NETWORK_PLUGIN_NAME = 'rrweb/network@1'\n\n// TODO how should this be typed?\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nexport const getRecordNetworkPlugin: (options?: NetworkRecordOptions) => RecordPlugin = (options) => {\n return {\n name: NETWORK_PLUGIN_NAME,\n observer: initNetworkObserver,\n options: options,\n }\n}\n\n// rrweb/networ@1 ends\n\nif (window) {\n ;(window as any).rrweb = { record: rrwebRecord, version: 'v2', rrwebVersion: version }\n ;(window as any).rrwebConsoleRecord = { getRecordConsolePlugin }\n ;(window as any).getRecordNetworkPlugin = getRecordNetworkPlugin\n}\n\nexport default rrwebRecord\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surveys.js","sourceRoot":"","sources":["../../../src/entrypoints/surveys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAE3E,IAAI,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"surveys.js","sourceRoot":"","sources":["../../../src/entrypoints/surveys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAE3E,IAAI,MAAM,EAAE,CAAC;IACT,CAAC;IAAC,MAAc,CAAC,qBAAqB,GAAI,MAAc,CAAC,qBAAqB,IAAI,EAAE,CACnF;IAAC,MAAc,CAAC,qBAAqB,CAAC,qBAAqB,GAAG,qBAAqB,CACnF;IAAC,MAAc,CAAC,wBAAwB,GAAG,eAAe,CAAA;AAC/D,CAAC;AAED,eAAe,eAAe,CAAA","sourcesContent":["import { generateSurveys } from '../extensions/surveys'\n\nimport { window } from '../utils/globals'\nimport { canActivateRepeatedly } from '../extensions/surveys/surveys-utils'\n\nif (window) {\n ;(window as any).__PosthogExtensions__ = (window as any).__PosthogExtensions__ || {}\n ;(window as any).__PosthogExtensions__.canActivateRepeatedly = canActivateRepeatedly\n ;(window as any).extendPostHogWithSurveys = generateSurveys\n}\n\nexport default generateSurveys\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing-headers.js","sourceRoot":"","sources":["../../../src/entrypoints/tracing-headers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,KAAK,EAAE,MAAM,0CAA0C,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE3D,IAAM,iBAAiB,GAAG,UAAC,cAAgC,EAAE,GAAY;IAC/D,IAAA,KAA0B,cAAc,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAA1E,SAAS,eAAA,EAAE,QAAQ,cAAuD,CAAA;IAClF,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAA;IAClD,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAA;AACpD,CAAC,CAAA;AAED,IAAM,UAAU,GAAG,UAAC,cAAgC;IAChD,6DAA6D;IAC7D,aAAa;IACb,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,UAAC,aAA2B;QACtD,OAAO,UAAgB,GAAsB,EAAE,IAA8B;;;;oBAGnE,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;oBAElC,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;oBAEtC,sBAAO,aAAa,CAAC,GAAG,CAAC,EAAA;;;SAC5B,CAAA;IACL,CAAC,CAAC,CAAA;AACN,CAAC,CAAA;AAED,IAAM,QAAQ,GAAG,UAAC,cAAgC;IAC9C,OAAO,KAAK;IACR,iEAAiE;IACjE,MAAO,CAAC,cAAc,CAAC,SAAS,EAChC,MAAM;IACN,6DAA6D;IAC7D,aAAa;IACb,UAAC,YAAkD;QAC/C,OAAO,UACH,MAAc,EACd,GAAiB,EACjB,KAAY,EACZ,QAAwB,EACxB,QAAwB;YAFxB,sBAAA,EAAA,YAAY;YAIZ,wFAAwF;YACxF,6DAA6D;YAC7D,aAAa;YACb,IAAM,GAAG,GAAG,IAAsB,CAAA;YAElC,uEAAuE;YACvE,yCAAyC;YACzC,IAAM,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAA;YAE5B,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;YAEtC,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC7E,CAAC,CAAA;IACL,CAAC,CACJ,CAAA;AACL,CAAC,CAAA;AAED,IAAI,gBAAgB,EAAE;
|
|
1
|
+
{"version":3,"file":"tracing-headers.js","sourceRoot":"","sources":["../../../src/entrypoints/tracing-headers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,KAAK,EAAE,MAAM,0CAA0C,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE3D,IAAM,iBAAiB,GAAG,UAAC,cAAgC,EAAE,GAAY;IAC/D,IAAA,KAA0B,cAAc,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAA1E,SAAS,eAAA,EAAE,QAAQ,cAAuD,CAAA;IAClF,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAA;IAClD,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAA;AACpD,CAAC,CAAA;AAED,IAAM,UAAU,GAAG,UAAC,cAAgC;IAChD,6DAA6D;IAC7D,aAAa;IACb,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,UAAC,aAA2B;QACtD,OAAO,UAAgB,GAAsB,EAAE,IAA8B;;;;oBAGnE,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;oBAElC,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;oBAEtC,sBAAO,aAAa,CAAC,GAAG,CAAC,EAAA;;;SAC5B,CAAA;IACL,CAAC,CAAC,CAAA;AACN,CAAC,CAAA;AAED,IAAM,QAAQ,GAAG,UAAC,cAAgC;IAC9C,OAAO,KAAK;IACR,iEAAiE;IACjE,MAAO,CAAC,cAAc,CAAC,SAAS,EAChC,MAAM;IACN,6DAA6D;IAC7D,aAAa;IACb,UAAC,YAAkD;QAC/C,OAAO,UACH,MAAc,EACd,GAAiB,EACjB,KAAY,EACZ,QAAwB,EACxB,QAAwB;YAFxB,sBAAA,EAAA,YAAY;YAIZ,wFAAwF;YACxF,6DAA6D;YAC7D,aAAa;YACb,IAAM,GAAG,GAAG,IAAsB,CAAA;YAElC,uEAAuE;YACvE,yCAAyC;YACzC,IAAM,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAA;YAE5B,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;YAEtC,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC7E,CAAC,CAAA;IACL,CAAC,CACJ,CAAA;AACL,CAAC,CAAA;AAED,IAAI,gBAAgB,EAAE,CAAC;IACnB,gBAAgB,CAAC,6BAA6B,GAAG;QAC7C,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,QAAQ;KACtB,CAAA;AACL,CAAC","sourcesContent":["import { SessionIdManager } from '../sessionid'\nimport { patch } from '../extensions/replay/rrweb-plugins/patch'\nimport { assignableWindow, window } from '../utils/globals'\n\nconst addTracingHeaders = (sessionManager: SessionIdManager, req: Request) => {\n const { sessionId, windowId } = sessionManager.checkAndGetSessionAndWindowId(true)\n req.headers.set('X-POSTHOG-SESSION-ID', sessionId)\n req.headers.set('X-POSTHOG-WINDOW-ID', windowId)\n}\n\nconst patchFetch = (sessionManager: SessionIdManager): (() => void) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return patch(window, 'fetch', (originalFetch: typeof fetch) => {\n return async function (url: URL | RequestInfo, init?: RequestInit | undefined) {\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url, init)\n\n addTracingHeaders(sessionManager, req)\n\n return originalFetch(req)\n }\n })\n}\n\nconst patchXHR = (sessionManager: SessionIdManager): (() => void) => {\n return patch(\n // we can assert this is present because we've checked previously\n window!.XMLHttpRequest.prototype,\n 'open',\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (originalOpen: typeof XMLHttpRequest.prototype.open) => {\n return function (\n method: string,\n url: string | URL,\n async = true,\n username?: string | null,\n password?: string | null\n ) {\n // because this function is returned in its actual context `this` _is_ an XMLHttpRequest\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const xhr = this as XMLHttpRequest\n\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url)\n\n addTracingHeaders(sessionManager, req)\n\n return originalOpen.call(xhr, method, req.url, async, username, password)\n }\n }\n )\n}\n\nif (assignableWindow) {\n assignableWindow.postHogTracingHeadersPatchFns = {\n _patchFetch: patchFetch,\n _patchXHR: patchXHR,\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
declare const postHogWebVitalsCallbacks: {
|
|
2
|
-
onLCP: (onReport: (metric: import("web-vitals").LCPMetric) => void, opts?: import("web-vitals").ReportOpts
|
|
3
|
-
onCLS: (onReport: (metric: import("web-vitals").CLSMetric) => void, opts?: import("web-vitals").ReportOpts
|
|
4
|
-
onFCP: (onReport: (metric: import("web-vitals").FCPMetric) => void, opts?: import("web-vitals").ReportOpts
|
|
5
|
-
onINP: (onReport: (metric: import("web-vitals").INPMetric) => void, opts?: import("web-vitals").ReportOpts
|
|
2
|
+
onLCP: (onReport: (metric: import("web-vitals").LCPMetric) => void, opts?: import("web-vitals").ReportOpts) => void;
|
|
3
|
+
onCLS: (onReport: (metric: import("web-vitals").CLSMetric) => void, opts?: import("web-vitals").ReportOpts) => void;
|
|
4
|
+
onFCP: (onReport: (metric: import("web-vitals").FCPMetric) => void, opts?: import("web-vitals").ReportOpts) => void;
|
|
5
|
+
onINP: (onReport: (metric: import("web-vitals").INPMetric) => void, opts?: import("web-vitals").ReportOpts) => void;
|
|
6
6
|
};
|
|
7
7
|
export default postHogWebVitalsCallbacks;
|
|
@@ -54,7 +54,7 @@ export function parseStackFrames(ex) {
|
|
|
54
54
|
try {
|
|
55
55
|
return defaultStackParser(stacktrace, popSize);
|
|
56
56
|
}
|
|
57
|
-
catch (
|
|
57
|
+
catch (_a) {
|
|
58
58
|
// no-empty
|
|
59
59
|
}
|
|
60
60
|
return [];
|
|
@@ -192,7 +192,7 @@ export function unhandledRejectionToProperties(_a) {
|
|
|
192
192
|
error = ev.detail.reason;
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
|
-
catch (
|
|
195
|
+
catch (_c) {
|
|
196
196
|
// no-empty
|
|
197
197
|
}
|
|
198
198
|
// some properties are not optional but, it's useful to start off without them enforced
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-conversion.js","sourceRoot":"","sources":["../../../../src/extensions/exception-autocapture/error-conversion.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isErrorWithStack,\n isEvent,\n isPlainObject,\n isPrimitive,\n} from './type-checking'\nimport { defaultStackParser, StackFrame } from './stack-trace'\n\nimport { isEmptyString, isNumber, isString, isUndefined } from '../../utils/type-utils'\nimport { ErrorEventArgs, ErrorProperties, SeverityLevel, severityLevels } from '../../types'\n\n/**\n * based on the very wonderful MIT licensed Sentry SDK\n */\n\nconst ERROR_TYPES_PATTERN =\n /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i\n\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i\n\nfunction getPopSize(ex: Error & { framesToPop?: number }): number {\n if (ex) {\n if (isNumber(ex.framesToPop)) {\n return ex.framesToPop\n }\n\n if (reactMinifiedRegexp.test(ex.message)) {\n return 1\n }\n }\n\n return 0\n}\n\nexport function parseStackFrames(ex: Error & { framesToPop?: number; stacktrace?: string }): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || ''\n\n const popSize = getPopSize(ex)\n\n try {\n return defaultStackParser(stacktrace, popSize)\n } catch (e) {\n // no-empty\n }\n\n return []\n}\n\nfunction errorPropertiesFromError(error: Error): ErrorProperties {\n const frames = parseStackFrames(error)\n\n return {\n $exception_type: error.name,\n $exception_message: error.message,\n $exception_stack_trace_raw: JSON.stringify(frames),\n $exception_level: 'error',\n }\n}\n\nfunction errorPropertiesFromString(candidate: string): ErrorProperties {\n return {\n $exception_type: 'Error',\n $exception_message: candidate,\n $exception_level: 'error',\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength = 40): string {\n const keys = Object.keys(exception)\n keys.sort()\n\n if (!keys.length) {\n return '[object has no keys]'\n }\n\n for (let i = keys.length; i > 0; i--) {\n const serialized = keys.slice(0, i).join(', ')\n if (serialized.length > maxLength) {\n continue\n }\n if (i === keys.length) {\n return serialized\n }\n return serialized.length <= maxLength ? serialized : `${serialized.slice(0, maxLength)}...`\n }\n\n return ''\n}\n\nfunction isSeverityLevel(x: unknown): x is SeverityLevel {\n return isString(x) && !isEmptyString(x) && severityLevels.indexOf(x as SeverityLevel) >= 0\n}\n\nfunction errorPropertiesFromObject(candidate: Record<string, unknown>): ErrorProperties {\n return {\n $exception_type: isEvent(candidate) ? candidate.constructor.name : 'Error',\n $exception_message: `Non-Error ${'exception'} captured with keys: ${extractExceptionKeysForMessage(candidate)}`,\n $exception_level: isSeverityLevel(candidate.level) ? candidate.level : 'error',\n }\n}\n\nexport function errorToProperties([event, source, lineno, colno, error]: ErrorEventArgs): ErrorProperties {\n // some properties are not optional but, it's useful to start off without them enforced\n let errorProperties: Omit<ErrorProperties, '$exception_type' | '$exception_message' | '$exception_level'> & {\n $exception_type?: string\n $exception_message?: string\n $exception_level?: string\n } = {}\n\n if (isUndefined(error) && isString(event)) {\n let name = 'Error'\n let message = event\n const groups = event.match(ERROR_TYPES_PATTERN)\n if (groups) {\n name = groups[1]\n message = groups[2]\n }\n errorProperties = {\n $exception_type: name,\n $exception_message: message,\n }\n }\n\n const candidate = error || event\n\n if (isDOMError(candidate) || isDOMException(candidate)) {\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n\n const domException = candidate as unknown as DOMException\n\n if (isErrorWithStack(candidate)) {\n errorProperties = errorPropertiesFromError(candidate as Error)\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException')\n const message = domException.message ? `${name}: ${domException.message}` : name\n errorProperties = errorPropertiesFromString(message)\n errorProperties.$exception_type = isDOMError(domException) ? 'DOMError' : 'DOMException'\n errorProperties.$exception_message = errorProperties.$exception_message || message\n }\n if ('code' in domException) {\n errorProperties['$exception_DOMException_code'] = `${domException.code}`\n }\n } else if (isErrorEvent(candidate as ErrorEvent) && (candidate as ErrorEvent).error) {\n errorProperties = errorPropertiesFromError((candidate as ErrorEvent).error as Error)\n } else if (isError(candidate)) {\n errorProperties = errorPropertiesFromError(candidate)\n } else if (isPlainObject(candidate) || isEvent(candidate)) {\n // group these by using the keys available on the object\n const objectException = candidate as Record<string, unknown>\n errorProperties = errorPropertiesFromObject(objectException)\n errorProperties.$exception_is_synthetic = true\n } else {\n // If none of previous checks were valid, then it must be a string\n errorProperties.$exception_type = errorProperties.$exception_type || 'Error'\n errorProperties.$exception_message = errorProperties.$exception_message || candidate\n errorProperties.$exception_is_synthetic = true\n }\n\n return {\n ...errorProperties,\n // now we make sure the mandatory fields that were made optional are present\n $exception_type: errorProperties.$exception_type || 'UnknownErrorType',\n $exception_message: errorProperties.$exception_message || '',\n $exception_level: isSeverityLevel(errorProperties.$exception_level)\n ? errorProperties.$exception_level\n : 'error',\n ...(source\n ? {\n $exception_source: source, // TODO get this from URL if not present\n }\n : {}),\n ...(lineno ? { $exception_lineno: lineno } : {}),\n ...(colno ? { $exception_colno: colno } : {}),\n }\n}\n\nexport function unhandledRejectionToProperties([ev]: [ev: PromiseRejectionEvent]): ErrorProperties {\n // dig the object of the rejection out of known event types\n let error: unknown = ev\n try {\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in ev) {\n error = ev.reason\n }\n // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n else if ('detail' in ev && 'reason' in (ev as any).detail) {\n error = (ev as any).detail.reason\n }\n } catch (_oO) {\n // no-empty\n }\n\n // some properties are not optional but, it's useful to start off without them enforced\n let errorProperties: Omit<ErrorProperties, '$exception_type' | '$exception_message' | '$exception_level'> & {\n $exception_type?: string\n $exception_message?: string\n $exception_level?: string\n } = {}\n if (isPrimitive(error)) {\n errorProperties = {\n $exception_message: `Non-Error promise rejection captured with value: ${String(error)}`,\n }\n } else {\n errorProperties = errorToProperties([error as string | Event])\n }\n errorProperties.$exception_handled = false\n\n return {\n ...errorProperties,\n // now we make sure the mandatory fields that were made optional are present\n $exception_type: (errorProperties.$exception_type = 'UnhandledRejection'),\n $exception_message: (errorProperties.$exception_message =\n errorProperties.$exception_message || (ev as any).reason || String(error)),\n $exception_level: isSeverityLevel(errorProperties.$exception_level)\n ? errorProperties.$exception_level\n : 'error',\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"error-conversion.js","sourceRoot":"","sources":["../../../../src/extensions/exception-autocapture/error-conversion.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isErrorWithStack,\n isEvent,\n isPlainObject,\n isPrimitive,\n} from './type-checking'\nimport { defaultStackParser, StackFrame } from './stack-trace'\n\nimport { isEmptyString, isNumber, isString, isUndefined } from '../../utils/type-utils'\nimport { ErrorEventArgs, ErrorProperties, SeverityLevel, severityLevels } from '../../types'\n\n/**\n * based on the very wonderful MIT licensed Sentry SDK\n */\n\nconst ERROR_TYPES_PATTERN =\n /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i\n\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i\n\nfunction getPopSize(ex: Error & { framesToPop?: number }): number {\n if (ex) {\n if (isNumber(ex.framesToPop)) {\n return ex.framesToPop\n }\n\n if (reactMinifiedRegexp.test(ex.message)) {\n return 1\n }\n }\n\n return 0\n}\n\nexport function parseStackFrames(ex: Error & { framesToPop?: number; stacktrace?: string }): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || ''\n\n const popSize = getPopSize(ex)\n\n try {\n return defaultStackParser(stacktrace, popSize)\n } catch {\n // no-empty\n }\n\n return []\n}\n\nfunction errorPropertiesFromError(error: Error): ErrorProperties {\n const frames = parseStackFrames(error)\n\n return {\n $exception_type: error.name,\n $exception_message: error.message,\n $exception_stack_trace_raw: JSON.stringify(frames),\n $exception_level: 'error',\n }\n}\n\nfunction errorPropertiesFromString(candidate: string): ErrorProperties {\n return {\n $exception_type: 'Error',\n $exception_message: candidate,\n $exception_level: 'error',\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength = 40): string {\n const keys = Object.keys(exception)\n keys.sort()\n\n if (!keys.length) {\n return '[object has no keys]'\n }\n\n for (let i = keys.length; i > 0; i--) {\n const serialized = keys.slice(0, i).join(', ')\n if (serialized.length > maxLength) {\n continue\n }\n if (i === keys.length) {\n return serialized\n }\n return serialized.length <= maxLength ? serialized : `${serialized.slice(0, maxLength)}...`\n }\n\n return ''\n}\n\nfunction isSeverityLevel(x: unknown): x is SeverityLevel {\n return isString(x) && !isEmptyString(x) && severityLevels.indexOf(x as SeverityLevel) >= 0\n}\n\nfunction errorPropertiesFromObject(candidate: Record<string, unknown>): ErrorProperties {\n return {\n $exception_type: isEvent(candidate) ? candidate.constructor.name : 'Error',\n $exception_message: `Non-Error ${'exception'} captured with keys: ${extractExceptionKeysForMessage(candidate)}`,\n $exception_level: isSeverityLevel(candidate.level) ? candidate.level : 'error',\n }\n}\n\nexport function errorToProperties([event, source, lineno, colno, error]: ErrorEventArgs): ErrorProperties {\n // some properties are not optional but, it's useful to start off without them enforced\n let errorProperties: Omit<ErrorProperties, '$exception_type' | '$exception_message' | '$exception_level'> & {\n $exception_type?: string\n $exception_message?: string\n $exception_level?: string\n } = {}\n\n if (isUndefined(error) && isString(event)) {\n let name = 'Error'\n let message = event\n const groups = event.match(ERROR_TYPES_PATTERN)\n if (groups) {\n name = groups[1]\n message = groups[2]\n }\n errorProperties = {\n $exception_type: name,\n $exception_message: message,\n }\n }\n\n const candidate = error || event\n\n if (isDOMError(candidate) || isDOMException(candidate)) {\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n\n const domException = candidate as unknown as DOMException\n\n if (isErrorWithStack(candidate)) {\n errorProperties = errorPropertiesFromError(candidate as Error)\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException')\n const message = domException.message ? `${name}: ${domException.message}` : name\n errorProperties = errorPropertiesFromString(message)\n errorProperties.$exception_type = isDOMError(domException) ? 'DOMError' : 'DOMException'\n errorProperties.$exception_message = errorProperties.$exception_message || message\n }\n if ('code' in domException) {\n errorProperties['$exception_DOMException_code'] = `${domException.code}`\n }\n } else if (isErrorEvent(candidate as ErrorEvent) && (candidate as ErrorEvent).error) {\n errorProperties = errorPropertiesFromError((candidate as ErrorEvent).error as Error)\n } else if (isError(candidate)) {\n errorProperties = errorPropertiesFromError(candidate)\n } else if (isPlainObject(candidate) || isEvent(candidate)) {\n // group these by using the keys available on the object\n const objectException = candidate as Record<string, unknown>\n errorProperties = errorPropertiesFromObject(objectException)\n errorProperties.$exception_is_synthetic = true\n } else {\n // If none of previous checks were valid, then it must be a string\n errorProperties.$exception_type = errorProperties.$exception_type || 'Error'\n errorProperties.$exception_message = errorProperties.$exception_message || candidate\n errorProperties.$exception_is_synthetic = true\n }\n\n return {\n ...errorProperties,\n // now we make sure the mandatory fields that were made optional are present\n $exception_type: errorProperties.$exception_type || 'UnknownErrorType',\n $exception_message: errorProperties.$exception_message || '',\n $exception_level: isSeverityLevel(errorProperties.$exception_level)\n ? errorProperties.$exception_level\n : 'error',\n ...(source\n ? {\n $exception_source: source, // TODO get this from URL if not present\n }\n : {}),\n ...(lineno ? { $exception_lineno: lineno } : {}),\n ...(colno ? { $exception_colno: colno } : {}),\n }\n}\n\nexport function unhandledRejectionToProperties([ev]: [ev: PromiseRejectionEvent]): ErrorProperties {\n // dig the object of the rejection out of known event types\n let error: unknown = ev\n try {\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in ev) {\n error = ev.reason\n }\n // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n else if ('detail' in ev && 'reason' in (ev as any).detail) {\n error = (ev as any).detail.reason\n }\n } catch {\n // no-empty\n }\n\n // some properties are not optional but, it's useful to start off without them enforced\n let errorProperties: Omit<ErrorProperties, '$exception_type' | '$exception_message' | '$exception_level'> & {\n $exception_type?: string\n $exception_message?: string\n $exception_level?: string\n } = {}\n if (isPrimitive(error)) {\n errorProperties = {\n $exception_message: `Non-Error promise rejection captured with value: ${String(error)}`,\n }\n } else {\n errorProperties = errorToProperties([error as string | Event])\n }\n errorProperties.$exception_handled = false\n\n return {\n ...errorProperties,\n // now we make sure the mandatory fields that were made optional are present\n $exception_type: (errorProperties.$exception_type = 'UnhandledRejection'),\n $exception_message: (errorProperties.$exception_message =\n errorProperties.$exception_message || (ev as any).reason || String(error)),\n $exception_level: isSeverityLevel(errorProperties.$exception_level)\n ? errorProperties.$exception_level\n : 'error',\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/exception-autocapture/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAI5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,qCAAqC,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AACnG,OAAO,MAAM,MAAM,cAAc,CAAA;AAEjC,oCAAoC;AACpC,MAAM,CAAC,IAAM,mBAAmB,GAAG,KAAK,CAAA;AACxC,IAAM,aAAa,GAAG,qBAAqB,CAAA;AAE3C;IAQI,2BAAY,QAAiB;QAA7B,iBAQC;;QAZO,wCAAmC,GAAsD,SAAS,CAAA;QAmDlG,mBAAc,GAAG;;YACrB,IAAI,CAAC,MAAM,IAAI,CAAC,KAAI,CAAC,SAAS,IAAI,KAAI,CAAC,WAAW,KAAI,MAAC,MAAM,CAAC,OAAe,0CAAE,wBAAwB,CAAA,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/exception-autocapture/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { window } from '../../utils/globals'\nimport { PostHog } from '../../posthog-core'\nimport { DecideResponse, Properties } from '../../types'\n\nimport { isObject } from '../../utils/type-utils'\nimport { logger } from '../../utils/logger'\nimport { EXCEPTION_CAPTURE_ENABLED_SERVER_SIDE, EXCEPTION_CAPTURE_ENDPOINT } from '../../constants'\nimport Config from '../../config'\n\n// TODO: move this to /x/ as default\nexport const BASE_ERROR_ENDPOINT = '/e/'\nconst LOGGER_PREFIX = '[Exception Capture]'\n\nexport class ExceptionObserver {\n private _endpoint: string\n instance: PostHog\n remoteEnabled: boolean | undefined\n private originalOnUnhandledRejectionHandler: Window['onunhandledrejection'] | null | undefined = undefined\n private unwrapOnError: (() => void) | undefined\n private unwrapUnhandledRejection: (() => void) | undefined\n\n constructor(instance: PostHog) {\n this.instance = instance\n this.remoteEnabled = !!this.instance.persistence?.props[EXCEPTION_CAPTURE_ENABLED_SERVER_SIDE]\n\n // TODO: once BASE_ERROR_ENDPOINT is no longer /e/ this can be removed\n this._endpoint = this.instance.persistence?.props[EXCEPTION_CAPTURE_ENDPOINT] || BASE_ERROR_ENDPOINT\n\n this.startIfEnabled()\n }\n\n get endpoint() {\n return this._endpoint\n }\n\n get isEnabled() {\n return this.remoteEnabled ?? false\n }\n\n get isCapturing() {\n return !!(window?.onerror as any)?.__POSTHOG_INSTRUMENTED__\n }\n\n get hasHandlers() {\n return this.originalOnUnhandledRejectionHandler || this.unwrapOnError\n }\n\n startIfEnabled(): void {\n if (this.isEnabled && !this.isCapturing) {\n logger.info(LOGGER_PREFIX + ' enabled, starting...')\n this.loadScript(this.startCapturing)\n }\n }\n\n private loadScript(cb: () => void): void {\n if (this.hasHandlers) {\n // already loaded\n cb()\n }\n\n this.instance.requestRouter.loadScript(`/static/exception-autocapture.js?v=${Config.LIB_VERSION}`, (err) => {\n if (err) {\n return logger.error(LOGGER_PREFIX + ' failed to load script', err)\n }\n cb()\n })\n }\n\n private startCapturing = () => {\n if (!window || !this.isEnabled || this.hasHandlers || (window.onerror as any)?.__POSTHOG_INSTRUMENTED__) {\n return\n }\n\n const wrapOnError = (window as any).posthogErrorWrappingFunctions.wrapOnError\n const wrapUnhandledRejection = (window as any).posthogErrorWrappingFunctions.wrapUnhandledRejection\n\n if (!wrapOnError || !wrapUnhandledRejection) {\n logger.error(LOGGER_PREFIX + ' failed to load error wrapping functions - cannot start')\n return\n }\n\n try {\n this.unwrapOnError = wrapOnError(this.captureException.bind(this))\n this.unwrapUnhandledRejection = wrapUnhandledRejection(this.captureException.bind(this))\n } catch (e) {\n logger.error(LOGGER_PREFIX + ' failed to start', e)\n this.stopCapturing()\n }\n }\n\n private stopCapturing() {\n this.unwrapOnError?.()\n this.unwrapUnhandledRejection?.()\n }\n\n afterDecideResponse(response: DecideResponse) {\n const autocaptureExceptionsResponse = response.autocaptureExceptions\n\n // store this in-memory in case persistence is disabled\n this.remoteEnabled = !!autocaptureExceptionsResponse || false\n this._endpoint = isObject(autocaptureExceptionsResponse)\n ? autocaptureExceptionsResponse.endpoint || BASE_ERROR_ENDPOINT\n : BASE_ERROR_ENDPOINT\n\n if (this.instance.persistence) {\n this.instance.persistence.register({\n [EXCEPTION_CAPTURE_ENABLED_SERVER_SIDE]: this.remoteEnabled,\n })\n // when we come to moving the endpoint to not /e/\n // we'll want that to persist between startup and decide response\n // TODO: once BASE_ENDPOINT is no longer /e/ this can be removed\n this.instance.persistence.register({\n [EXCEPTION_CAPTURE_ENDPOINT]: this._endpoint,\n })\n }\n\n this.startIfEnabled()\n }\n\n captureException(errorProperties: Properties) {\n const posthogHost = this.instance.requestRouter.endpointFor('ui')\n\n errorProperties.$exception_personURL = `${posthogHost}/project/${\n this.instance.config.token\n }/person/${this.instance.get_distinct_id()}`\n\n this.sendExceptionEvent(errorProperties)\n }\n\n /**\n * :TRICKY: Make sure we batch these requests\n */\n sendExceptionEvent(properties: { [key: string]: any }) {\n this.instance.capture('$exception', properties, {\n _noTruncate: true,\n _batchKey: 'exceptionEvent',\n _url: this.endpoint,\n })\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-trace.js","sourceRoot":"","sources":["../../../../src/extensions/exception-autocapture/stack-trace.ts"],"names":[],"mappings":"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","sourcesContent":["// copied and adapted from https://github.com/getsentry/sentry-javascript/blob/41fef4b10f3a644179b77985f00f8696c908539f/packages/browser/src/stack-parsers.ts\n// 💖open source\n\n// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re-written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport { isUndefined } from '../../utils/type-utils'\n\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/\nconst STACKTRACE_FRAME_LIMIT = 50\n\nconst UNKNOWN_FUNCTION = '?'\n\nconst OPERA10_PRIORITY = 10\nconst OPERA11_PRIORITY = 20\nconst CHROME_PRIORITY = 30\nconst WINJS_PRIORITY = 40\nconst GECKO_PRIORITY = 50\n\nexport interface StackFrame {\n filename?: string\n function?: string\n module?: string\n platform?: string\n lineno?: number\n colno?: number\n abs_path?: string\n context_line?: string\n pre_context?: string[]\n post_context?: string[]\n in_app?: boolean\n instruction_addr?: string\n addr_mode?: string\n vars?: { [key: string]: any }\n debug_id?: string\n}\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n const frame: StackFrame = {\n filename,\n function: func,\n in_app: true, // All browser frames are considered in_app\n }\n\n if (!isUndefined(lineno)) {\n frame.lineno = lineno\n }\n\n if (!isUndefined(colno)) {\n frame.colno = colno\n }\n\n return frame\n}\n\nexport type StackParser = (stack: string, skipFirst?: number) => StackFrame[]\nexport type StackLineParserFn = (line: string) => StackFrame | undefined\nexport type StackLineParser = [number, StackLineParserFn]\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/\n\nconst chrome: StackLineParserFn = (line) => {\n const parts = chromeRegex.exec(line)\n\n if (parts) {\n const isEval = parts[2] && parts[2].indexOf('eval') === 0 // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2])\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1] // url\n parts[3] = subMatch[2] // line\n parts[4] = subMatch[3] // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2])\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined)\n }\n\n return\n}\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chrome]\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i\n\nconst gecko: StackLineParserFn = (line) => {\n const parts = geckoREgex.exec(line)\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3])\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval'\n parts[3] = subMatch[1]\n parts[4] = subMatch[2]\n parts[5] = '' // no column when eval\n }\n }\n\n let filename = parts[3]\n let func = parts[1] || UNKNOWN_FUNCTION\n ;[func, filename] = extractSafariExtensionDetails(func, filename)\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined)\n }\n\n return\n}\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko]\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i\n\nconst winjs: StackLineParserFn = (line) => {\n const parts = winjsRegex.exec(line)\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined\n}\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs]\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i\n\nconst opera10: StackLineParserFn = (line) => {\n const parts = opera10Regex.exec(line)\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined\n}\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10]\n\nconst opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i\n\nconst opera11: StackLineParserFn = (line) => {\n const parts = opera11Regex.exec(line)\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined\n}\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11]\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser]\n\nexport function reverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n if (!stack.length) {\n return []\n }\n\n const localStack = stack.slice(0, STACKTRACE_FRAME_LIMIT)\n\n localStack.reverse()\n\n return localStack.map((frame) => ({\n ...frame,\n filename: frame.filename || localStack[localStack.length - 1].filename,\n function: frame.function || '?',\n }))\n}\n\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map((p) => p[1])\n\n return (stack: string, skipFirst = 0): StackFrame[] => {\n const frames: StackFrame[] = []\n const lines = stack.split('\\n')\n\n for (let i = skipFirst; i < lines.length; i++) {\n const line = lines[i]\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine)\n\n if (frame) {\n frames.push(frame)\n break\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n break\n }\n }\n\n return reverse(frames)\n }\n}\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers)\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename]\n}\n"]}
|
|
1
|
+
{"version":3,"file":"stack-trace.js","sourceRoot":"","sources":["../../../../src/extensions/exception-autocapture/stack-trace.ts"],"names":[],"mappings":"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","sourcesContent":["// copied and adapted from https://github.com/getsentry/sentry-javascript/blob/41fef4b10f3a644179b77985f00f8696c908539f/packages/browser/src/stack-parsers.ts\n// 💖open source\n\n// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re-written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport { isUndefined } from '../../utils/type-utils'\n\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/\nconst STACKTRACE_FRAME_LIMIT = 50\n\nconst UNKNOWN_FUNCTION = '?'\n\nconst OPERA10_PRIORITY = 10\nconst OPERA11_PRIORITY = 20\nconst CHROME_PRIORITY = 30\nconst WINJS_PRIORITY = 40\nconst GECKO_PRIORITY = 50\n\nexport interface StackFrame {\n filename?: string\n function?: string\n module?: string\n platform?: string\n lineno?: number\n colno?: number\n abs_path?: string\n context_line?: string\n pre_context?: string[]\n post_context?: string[]\n in_app?: boolean\n instruction_addr?: string\n addr_mode?: string\n vars?: { [key: string]: any }\n debug_id?: string\n}\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n const frame: StackFrame = {\n filename,\n function: func,\n in_app: true, // All browser frames are considered in_app\n }\n\n if (!isUndefined(lineno)) {\n frame.lineno = lineno\n }\n\n if (!isUndefined(colno)) {\n frame.colno = colno\n }\n\n return frame\n}\n\nexport type StackParser = (stack: string, skipFirst?: number) => StackFrame[]\nexport type StackLineParserFn = (line: string) => StackFrame | undefined\nexport type StackLineParser = [number, StackLineParserFn]\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/\n\nconst chrome: StackLineParserFn = (line) => {\n const parts = chromeRegex.exec(line)\n\n if (parts) {\n const isEval = parts[2] && parts[2].indexOf('eval') === 0 // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2])\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1] // url\n parts[3] = subMatch[2] // line\n parts[4] = subMatch[3] // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2])\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined)\n }\n\n return\n}\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chrome]\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i\n\nconst gecko: StackLineParserFn = (line) => {\n const parts = geckoREgex.exec(line)\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3])\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval'\n parts[3] = subMatch[1]\n parts[4] = subMatch[2]\n parts[5] = '' // no column when eval\n }\n }\n\n let filename = parts[3]\n let func = parts[1] || UNKNOWN_FUNCTION\n ;[func, filename] = extractSafariExtensionDetails(func, filename)\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined)\n }\n\n return\n}\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko]\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i\n\nconst winjs: StackLineParserFn = (line) => {\n const parts = winjsRegex.exec(line)\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined\n}\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs]\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i\n\nconst opera10: StackLineParserFn = (line) => {\n const parts = opera10Regex.exec(line)\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined\n}\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10]\n\nconst opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i\n\nconst opera11: StackLineParserFn = (line) => {\n const parts = opera11Regex.exec(line)\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined\n}\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11]\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser]\n\nexport function reverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n if (!stack.length) {\n return []\n }\n\n const localStack = stack.slice(0, STACKTRACE_FRAME_LIMIT)\n\n localStack.reverse()\n\n return localStack.map((frame) => ({\n ...frame,\n filename: frame.filename || localStack[localStack.length - 1].filename,\n function: frame.function || '?',\n }))\n}\n\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map((p) => p[1])\n\n return (stack: string, skipFirst = 0): StackFrame[] => {\n const frames: StackFrame[] = []\n const lines = stack.split('\\n')\n\n for (let i = skipFirst; i < lines.length; i++) {\n const line = lines[i]\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine)\n\n if (frame) {\n frames.push(frame)\n break\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n break\n }\n }\n\n return reverse(frames)\n }\n}\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers)\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename]\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-checking.js","sourceRoot":"","sources":["../../../../src/extensions/exception-autocapture/type-checking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAElF,MAAM,UAAU,OAAO,CAAC,SAAkB;IACtC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC5C,OAAO,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,SAAkB,EAAE,IAAS;IACtD,IAAI;
|
|
1
|
+
{"version":3,"file":"type-checking.js","sourceRoot":"","sources":["../../../../src/extensions/exception-autocapture/type-checking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAElF,MAAM,UAAU,OAAO,CAAC,SAAkB;IACtC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC5C,OAAO,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,SAAkB,EAAE,IAAS;IACtD,IAAI,CAAC;QACD,OAAO,SAAS,YAAY,IAAI,CAAA;IACpC,CAAC;IAAC,WAAM,CAAC;QACL,OAAO,KAAK,CAAA;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CACvB,SAAkB;IAElB,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,SAAkB;IACtC,QAAQ,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,KAAK,gBAAgB,CAAC;QACtB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,uBAAuB;YACxB,OAAO,IAAI,CAAA;QACf;YACI,OAAO,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IAC7C,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAA6B;IACtD,OAAO,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAkB;IAC/C,OAAO,OAAO,IAAK,SAAmB,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,SAAkB,EAAE,SAAiB;IAC3D,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,kBAAW,SAAS,MAAG,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAkB;IAC7C,OAAO,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAAkB;IACzC,OAAO,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;AAC3C,CAAC","sourcesContent":["import { isFunction, isNull, isObject, isUndefined } from '../../utils/type-utils'\n\nexport function isEvent(candidate: unknown): candidate is Event {\n return !isUndefined(Event) && isInstanceOf(candidate, Event)\n}\n\nexport function isPlainObject(candidate: unknown): candidate is Record<string, unknown> {\n return isBuiltin(candidate, 'Object')\n}\n\nexport function isInstanceOf(candidate: unknown, base: any): boolean {\n try {\n return candidate instanceof base\n } catch {\n return false\n }\n}\n\nexport function isPrimitive(\n candidate: unknown\n): candidate is number | string | boolean | bigint | symbol | null | undefined {\n return isNull(candidate) || (!isObject(candidate) && !isFunction(candidate))\n}\n\nexport function isError(candidate: unknown): candidate is Error {\n switch (Object.prototype.toString.call(candidate)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true\n default:\n return isInstanceOf(candidate, Error)\n }\n}\n\nexport function isErrorEvent(event: string | Error | Event): event is ErrorEvent {\n return isBuiltin(event, 'ErrorEvent')\n}\n\nexport function isErrorWithStack(candidate: unknown): candidate is Error {\n return 'stack' in (candidate as Error)\n}\n\nexport function isBuiltin(candidate: unknown, className: string): boolean {\n return Object.prototype.toString.call(candidate) === `[object ${className}]`\n}\n\nexport function isDOMException(candidate: unknown): boolean {\n return isBuiltin(candidate, 'DOMException')\n}\n\nexport function isDOMError(candidate: unknown): boolean {\n return isBuiltin(candidate, 'DOMError')\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rageclick.js","sourceRoot":"","sources":["../../../src/extensions/rageclick.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,yFAAyF;AACzF,0BAA0B;AAE1B,IAAM,uBAAuB,GAAG,EAAE,CAAA;AAClC,IAAM,qBAAqB,GAAG,IAAI,CAAA;AAClC,IAAM,sBAAsB,GAAG,CAAC,CAAA;AAEhC;IAGI;QACI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;IACpB,CAAC;IAED,+BAAW,GAAX,UAAY,CAAS,EAAE,CAAS,EAAE,SAAiB;QAC/C,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACrD,IACI,SAAS;YACT,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,uBAAuB;YAC/E,SAAS,GAAG,SAAS,CAAC,SAAS,GAAG,qBAAqB,EACzD;
|
|
1
|
+
{"version":3,"file":"rageclick.js","sourceRoot":"","sources":["../../../src/extensions/rageclick.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,yFAAyF;AACzF,0BAA0B;AAE1B,IAAM,uBAAuB,GAAG,EAAE,CAAA;AAClC,IAAM,qBAAqB,GAAG,IAAI,CAAA;AAClC,IAAM,sBAAsB,GAAG,CAAC,CAAA;AAEhC;IAGI;QACI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;IACpB,CAAC;IAED,+BAAW,GAAX,UAAY,CAAS,EAAE,CAAS,EAAE,SAAiB;QAC/C,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACrD,IACI,SAAS;YACT,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,uBAAuB;YAC/E,SAAS,GAAG,SAAS,CAAC,SAAS,GAAG,qBAAqB,EACzD,CAAC;YACC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAA,EAAE,CAAC,GAAA,EAAE,SAAS,WAAA,EAAE,CAAC,CAAA;YAErC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,sBAAsB,EAAE,CAAC;gBAChD,OAAO,IAAI,CAAA;YACf,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAA,EAAE,CAAC,GAAA,EAAE,SAAS,WAAA,EAAE,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,KAAK,CAAA;IAChB,CAAC;IACL,gBAAC;AAAD,CAAC,AAzBD,IAyBC","sourcesContent":["// Naive rage click implementation: If mouse has not moved than RAGE_CLICK_THRESHOLD_PX\n// over RAGE_CLICK_CLICK_COUNT clicks with max RAGE_CLICK_TIMEOUT_MS between clicks, it's\n// counted as a rage click\n\nconst RAGE_CLICK_THRESHOLD_PX = 30\nconst RAGE_CLICK_TIMEOUT_MS = 1000\nconst RAGE_CLICK_CLICK_COUNT = 3\n\nexport default class RageClick {\n clicks: { x: number; y: number; timestamp: number }[]\n\n constructor() {\n this.clicks = []\n }\n\n isRageClick(x: number, y: number, timestamp: number): boolean {\n const lastClick = this.clicks[this.clicks.length - 1]\n if (\n lastClick &&\n Math.abs(x - lastClick.x) + Math.abs(y - lastClick.y) < RAGE_CLICK_THRESHOLD_PX &&\n timestamp - lastClick.timestamp < RAGE_CLICK_TIMEOUT_MS\n ) {\n this.clicks.push({ x, y, timestamp })\n\n if (this.clicks.length === RAGE_CLICK_CLICK_COUNT) {\n return true\n }\n } else {\n this.clicks = [{ x, y, timestamp }]\n }\n\n return false\n }\n}\n"]}
|
|
@@ -6,4 +6,4 @@ export declare const defaultNetworkOptions: Required<NetworkRecordOptions>;
|
|
|
6
6
|
* we _never_ want to record that header by accident
|
|
7
7
|
* if someone complains then we'll add an opt-in to let them override it
|
|
8
8
|
*/
|
|
9
|
-
export declare const buildNetworkRequestOptions: (instanceConfig: PostHogConfig, remoteNetworkOptions: Pick<NetworkRecordOptions,
|
|
9
|
+
export declare const buildNetworkRequestOptions: (instanceConfig: PostHogConfig, remoteNetworkOptions: Pick<NetworkRecordOptions, "recordHeaders" | "recordBody" | "recordPerformance" | "payloadHostDenyList">) => NetworkRecordOptions;
|