File: /home/cafsindia/snap.cafsinfotech.in/node_modules/@sentry/utils/cjs/instrument.js.map
{"version":3,"file":"instrument.js","sources":["../../src/instrument.ts"],"sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type {\n HandlerDataFetch,\n HandlerDataXhr,\n SentryWrappedXMLHttpRequest,\n SentryXhrData,\n WrappedFunction,\n} from '@sentry/types';\n\nimport { isString } from './is';\nimport type { ConsoleLevel } from './logger';\nimport { CONSOLE_LEVELS, logger, originalConsoleMethods } from './logger';\nimport { uuid4 } from './misc';\nimport { addNonEnumerableProperty, fill } from './object';\nimport { getFunctionName } from './stacktrace';\nimport { supportsHistory, supportsNativeFetch } from './supports';\nimport { getGlobalObject, GLOBAL_OBJ } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nexport const SENTRY_XHR_DATA_KEY = '__sentry_xhr_v2__';\n\nexport type InstrumentHandlerType =\n | 'console'\n | 'dom'\n | 'fetch'\n | 'history'\n | 'sentry'\n | 'xhr'\n | 'error'\n | 'unhandledrejection';\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n/**\n * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc.\n * - Console API\n * - Fetch API\n * - XHR API\n * - History API\n * - DOM API (click/typing)\n * - Error API\n * - UnhandledRejection API\n */\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Instruments given API */\nfunction instrument(type: InstrumentHandlerType): void {\n if (instrumented[type]) {\n return;\n }\n\n instrumented[type] = true;\n\n switch (type) {\n case 'console':\n instrumentConsole();\n break;\n case 'dom':\n instrumentDOM();\n break;\n case 'xhr':\n instrumentXHR();\n break;\n case 'fetch':\n instrumentFetch();\n break;\n case 'history':\n instrumentHistory();\n break;\n case 'error':\n instrumentError();\n break;\n case 'unhandledrejection':\n instrumentUnhandledRejection();\n break;\n default:\n __DEBUG_BUILD__ && logger.warn('unknown instrumentation type:', type);\n return;\n }\n}\n\n/**\n * Add handler that will be called when given type of instrumentation triggers.\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addInstrumentationHandler(type: InstrumentHandlerType, callback: InstrumentHandlerCallback): void {\n handlers[type] = handlers[type] || [];\n (handlers[type] as InstrumentHandlerCallback[]).push(callback);\n instrument(type);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n Object.keys(handlers).forEach(key => {\n handlers[key as InstrumentHandlerType] = undefined;\n });\n}\n\n/** JSDoc */\nfunction triggerHandlers(type: InstrumentHandlerType, data: any): void {\n if (!type || !handlers[type]) {\n return;\n }\n\n for (const handler of handlers[type] || []) {\n try {\n handler(data);\n } catch (e) {\n __DEBUG_BUILD__ &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\n/** JSDoc */\nfunction instrumentConsole(): void {\n if (!('console' in GLOBAL_OBJ)) {\n return;\n }\n\n CONSOLE_LEVELS.forEach(function (level: ConsoleLevel): void {\n if (!(level in GLOBAL_OBJ.console)) {\n return;\n }\n\n fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod: () => any): Function {\n originalConsoleMethods[level] = originalConsoleMethod;\n\n return function (...args: any[]): void {\n triggerHandlers('console', { args, level });\n\n const log = originalConsoleMethods[level];\n log && log.apply(GLOBAL_OBJ.console, args);\n };\n });\n });\n}\n\n/** JSDoc */\nfunction instrumentFetch(): void {\n if (!supportsNativeFetch()) {\n return;\n }\n\n fill(GLOBAL_OBJ, 'fetch', function (originalFetch: () => void): () => void {\n return function (...args: any[]): void {\n const { method, url } = parseFetchArgs(args);\n\n const handlerData: HandlerDataFetch = {\n args,\n fetchData: {\n method,\n url,\n },\n startTimestamp: Date.now(),\n };\n\n triggerHandlers('fetch', {\n ...handlerData,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return originalFetch.apply(GLOBAL_OBJ, args).then(\n (response: Response) => {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: Date.now(),\n response,\n });\n return response;\n },\n (error: Error) => {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: Date.now(),\n error,\n });\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the sentry.javascript SDK caught an error invoking your application code.\n // This is expected behavior and NOT indicative of a bug with sentry.javascript.\n throw error;\n },\n );\n };\n });\n}\n\nfunction hasProp<T extends string>(obj: unknown, prop: T): obj is Record<string, string> {\n return !!obj && typeof obj === 'object' && !!(obj as Record<string, string>)[prop];\n}\n\ntype FetchResource = string | { toString(): string } | { url: string };\n\nfunction getUrlFromResource(resource: FetchResource): string {\n if (typeof resource === 'string') {\n return resource;\n }\n\n if (!resource) {\n return '';\n }\n\n if (hasProp(resource, 'url')) {\n return resource.url;\n }\n\n if (resource.toString) {\n return resource.toString();\n }\n\n return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request\n */\nexport function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: string } {\n if (fetchArgs.length === 0) {\n return { method: 'GET', url: '' };\n }\n\n if (fetchArgs.length === 2) {\n const [url, options] = fetchArgs as [FetchResource, object];\n\n return {\n url: getUrlFromResource(url),\n method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n };\n }\n\n const arg = fetchArgs[0];\n return {\n url: getUrlFromResource(arg as FetchResource),\n method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n };\n}\n\n/** JSDoc */\nexport function instrumentXHR(): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!(WINDOW as any).XMLHttpRequest) {\n return;\n }\n\n const xhrproto = XMLHttpRequest.prototype;\n\n fill(xhrproto, 'open', function (originalOpen: () => void): () => void {\n return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n const startTimestamp = Date.now();\n\n const url = args[1];\n const xhrInfo: SentryXhrData = (this[SENTRY_XHR_DATA_KEY] = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n method: isString(args[0]) ? args[0].toUpperCase() : args[0],\n url: args[1],\n request_headers: {},\n });\n\n // if Sentry key appears in URL, don't capture it as a request\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (isString(url) && xhrInfo.method === 'POST' && url.match(/sentry_key/)) {\n this.__sentry_own_request__ = true;\n }\n\n const onreadystatechangeHandler: () => void = () => {\n // For whatever reason, this is not the same instance here as from the outer method\n const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n if (!xhrInfo) {\n return;\n }\n\n if (this.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhrInfo.status_code = this.status;\n } catch (e) {\n /* do nothing */\n }\n\n triggerHandlers('xhr', {\n args: args as [string, string],\n endTimestamp: Date.now(),\n startTimestamp,\n xhr: this,\n } as HandlerDataXhr);\n }\n };\n\n if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n fill(this, 'onreadystatechange', function (original: WrappedFunction): Function {\n return function (this: SentryWrappedXMLHttpRequest, ...readyStateArgs: any[]): void {\n onreadystatechangeHandler();\n return original.apply(this, readyStateArgs);\n };\n });\n } else {\n this.addEventListener('readystatechange', onreadystatechangeHandler);\n }\n\n // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n fill(this, 'setRequestHeader', function (original: WrappedFunction): Function {\n return function (this: SentryWrappedXMLHttpRequest, ...setRequestHeaderArgs: unknown[]): void {\n const [header, value] = setRequestHeaderArgs as [string, string];\n\n const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n if (xhrInfo) {\n xhrInfo.request_headers[header.toLowerCase()] = value;\n }\n\n return original.apply(this, setRequestHeaderArgs);\n };\n });\n\n return originalOpen.apply(this, args);\n };\n });\n\n fill(xhrproto, 'send', function (originalSend: () => void): () => void {\n return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n if (sentryXhrData && args[0] !== undefined) {\n sentryXhrData.body = args[0];\n }\n\n triggerHandlers('xhr', {\n args,\n startTimestamp: Date.now(),\n xhr: this,\n });\n\n return originalSend.apply(this, args);\n };\n });\n}\n\nlet lastHref: string;\n\n/** JSDoc */\nfunction instrumentHistory(): void {\n if (!supportsHistory()) {\n return;\n }\n\n const oldOnPopState = WINDOW.onpopstate;\n WINDOW.onpopstate = function (this: WindowEventHandlers, ...args: any[]): any {\n const to = WINDOW.location.href;\n // keep track of the current URL state, as we always receive only the updated state\n const from = lastHref;\n lastHref = to;\n triggerHandlers('history', {\n from,\n to,\n });\n if (oldOnPopState) {\n // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n // https://github.com/getsentry/sentry-javascript/issues/3344\n // https://github.com/bugsnag/bugsnag-js/issues/469\n try {\n return oldOnPopState.apply(this, args);\n } catch (_oO) {\n // no-empty\n }\n }\n };\n\n /** @hidden */\n function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n return function (this: History, ...args: any[]): void {\n const url = args.length > 2 ? args[2] : undefined;\n if (url) {\n // coerce to string (this is what pushState does)\n const from = lastHref;\n const to = String(url);\n // keep track of the current URL state, as we always receive only the updated state\n lastHref = to;\n triggerHandlers('history', {\n from,\n to,\n });\n }\n return originalHistoryFunction.apply(this, args);\n };\n }\n\n fill(WINDOW.history, 'pushState', historyReplacementFunction);\n fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n\nconst DEBOUNCE_DURATION = 1000;\nlet debounceTimerID: number | undefined;\nlet lastCapturedEventType: string | undefined;\nlet lastCapturedEventTargetId: string | undefined;\n\ntype SentryWrappedTarget = HTMLElement & { _sentryId?: string };\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event: Event): boolean {\n // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n if (event.type !== lastCapturedEventType) {\n return false;\n }\n\n try {\n // If both events have the same type, it's still possible that actions were performed on different targets.\n // e.g. 2 clicks on different buttons.\n if (!event.target || (event.target as SentryWrappedTarget)._sentryId !== lastCapturedEventTargetId) {\n return false;\n }\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n\n // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n // to which an event listener was attached), we treat them as the same action, as we want to capture\n // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType: string, target: SentryWrappedTarget | null): boolean {\n // We are only interested in filtering `keypress` events for now.\n if (eventType !== 'keypress') {\n return false;\n }\n\n if (!target || !target.tagName) {\n return true;\n }\n\n // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n // e.g.tabbing through elements, hotkeys, etc.\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return false;\n }\n\n return true;\n}\n\nfunction getEventTarget(event: Event): SentryWrappedTarget | null {\n try {\n return event.target as SentryWrappedTarget | null;\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n return null;\n }\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param handler function that will be triggered\n * @param globalListener indicates whether event was captured by the global event listener\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\nfunction makeDOMEventHandler(handler: Function, globalListener: boolean = false): (event: Event) => void {\n return (event: Event & { _sentryCaptured?: true }): void => {\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors).\n // Ignore if we've already captured that event.\n if (!event || event['_sentryCaptured']) {\n return;\n }\n\n const target = getEventTarget(event);\n\n // We always want to skip _some_ events.\n if (shouldSkipDOMEvent(event.type, target)) {\n return;\n }\n\n // Mark event as \"seen\"\n addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n if (target && !target._sentryId) {\n // Add UUID to event target so we can identify if\n addNonEnumerableProperty(target, '_sentryId', uuid4());\n }\n\n const name = event.type === 'keypress' ? 'input' : event.type;\n\n // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n if (!isSimilarToLastCapturedEvent(event)) {\n handler({\n event: event,\n name,\n global: globalListener,\n });\n lastCapturedEventType = event.type;\n lastCapturedEventTargetId = target ? target._sentryId : undefined;\n }\n\n // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n clearTimeout(debounceTimerID);\n debounceTimerID = WINDOW.setTimeout(() => {\n lastCapturedEventTargetId = undefined;\n lastCapturedEventType = undefined;\n }, DEBOUNCE_DURATION);\n };\n}\n\ntype AddEventListener = (\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n) => void;\ntype RemoveEventListener = (\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n) => void;\n\ntype InstrumentedElement = Element & {\n __sentry_instrumentation_handlers__?: {\n [key in 'click' | 'keypress']?: {\n handler?: Function;\n /** The number of custom listeners attached to this element */\n refCount: number;\n };\n };\n};\n\n/** JSDoc */\nexport function instrumentDOM(): void {\n if (!WINDOW.document) {\n return;\n }\n\n // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n // guaranteed to fire at least once.)\n ['EventTarget', 'Node'].forEach((target: string) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = (WINDOW as any)[target] && (WINDOW as any)[target].prototype;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (originalAddEventListener: AddEventListener): AddEventListener {\n return function (\n this: Element,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): AddEventListener {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this as InstrumentedElement;\n const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n if (!handlerForType.handler) {\n const handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n\n handlerForType.refCount++;\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (originalRemoveEventListener: RemoveEventListener): RemoveEventListener {\n return function (\n this: Element,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this as InstrumentedElement;\n const handlers = el.__sentry_instrumentation_handlers__ || {};\n const handlerForType = handlers[type];\n\n if (handlerForType) {\n handlerForType.refCount--;\n // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n if (handlerForType.refCount <= 0) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n handlerForType.handler = undefined;\n delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n\n // If there are no longer any custom handlers of any type on this element, cleanup everything.\n if (Object.keys(handlers).length === 0) {\n delete el.__sentry_instrumentation_handlers__;\n }\n }\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n },\n );\n });\n}\n\nlet _oldOnErrorHandler: (typeof WINDOW)['onerror'] | null = null;\n/** JSDoc */\nfunction instrumentError(): void {\n _oldOnErrorHandler = WINDOW.onerror;\n\n WINDOW.onerror = function (msg: unknown, url: unknown, line: unknown, column: unknown, error: unknown): boolean {\n triggerHandlers('error', {\n column,\n error,\n line,\n msg,\n url,\n });\n\n if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n\n WINDOW.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nlet _oldOnUnhandledRejectionHandler: (typeof WINDOW)['onunhandledrejection'] | null = null;\n/** JSDoc */\nfunction instrumentUnhandledRejection(): void {\n _oldOnUnhandledRejectionHandler = WINDOW.onunhandledrejection;\n\n WINDOW.onunhandledrejection = function (e: any): boolean {\n triggerHandlers('unhandledrejection', e);\n\n if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n\n WINDOW.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n"],"names":["getGlobalObject","logger","getFunctionName","GLOBAL_OBJ","CONSOLE_LEVELS","fill","originalConsoleMethods","supportsNativeFetch","isString","supportsHistory","addNonEnumerableProperty","uuid4"],"mappings":"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"}