wintercg-fetch.js.map 8.4 KB

1
  1. {"version":3,"file":"wintercg-fetch.js","sources":["../../../src/integrations/wintercg-fetch.ts"],"sourcesContent":["import { instrumentFetchRequest } from '@sentry-internal/tracing';\nimport {\n addBreadcrumb,\n convertIntegrationFnToClass,\n defineIntegration,\n getClient,\n isSentryRequestUrl,\n} from '@sentry/core';\nimport type {\n Client,\n FetchBreadcrumbData,\n FetchBreadcrumbHint,\n HandlerDataFetch,\n Integration,\n IntegrationClass,\n IntegrationFn,\n Span,\n} from '@sentry/types';\nimport { LRUMap, addFetchInstrumentationHandler, stringMatchesSomePattern } from '@sentry/utils';\n\nconst INTEGRATION_NAME = 'WinterCGFetch';\n\nconst HAS_CLIENT_MAP = new WeakMap<Client, boolean>();\n\nexport interface Options {\n /**\n * Whether breadcrumbs should be recorded for requests\n * Defaults to true\n */\n breadcrumbs: boolean;\n\n /**\n * Function determining whether or not to create spans to track outgoing requests to the given URL.\n * By default, spans will be created for all outgoing requests.\n */\n shouldCreateSpanForRequest?: (url: string) => boolean;\n}\n\nconst _winterCGFetch = ((options: Partial<Options> = {}) => {\n const breadcrumbs = options.breadcrumbs === undefined ? true : options.breadcrumbs;\n const shouldCreateSpanForRequest = options.shouldCreateSpanForRequest;\n\n const _createSpanUrlMap = new LRUMap<string, boolean>(100);\n const _headersUrlMap = new LRUMap<string, boolean>(100);\n\n const spans: Record<string, Span> = {};\n\n /** Decides whether to attach trace data to the outgoing fetch request */\n function _shouldAttachTraceData(url: string): boolean {\n const client = getClient();\n\n if (!client) {\n return false;\n }\n\n const clientOptions = client.getOptions();\n\n if (clientOptions.tracePropagationTargets === undefined) {\n return true;\n }\n\n const cachedDecision = _headersUrlMap.get(url);\n if (cachedDecision !== undefined) {\n return cachedDecision;\n }\n\n const decision = stringMatchesSomePattern(url, clientOptions.tracePropagationTargets);\n _headersUrlMap.set(url, decision);\n return decision;\n }\n\n /** Helper that wraps shouldCreateSpanForRequest option */\n function _shouldCreateSpan(url: string): boolean {\n if (shouldCreateSpanForRequest === undefined) {\n return true;\n }\n\n const cachedDecision = _createSpanUrlMap.get(url);\n if (cachedDecision !== undefined) {\n return cachedDecision;\n }\n\n const decision = shouldCreateSpanForRequest(url);\n _createSpanUrlMap.set(url, decision);\n return decision;\n }\n\n return {\n name: INTEGRATION_NAME,\n // TODO v8: Remove this again\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setupOnce() {\n addFetchInstrumentationHandler(handlerData => {\n const client = getClient();\n if (!client || !HAS_CLIENT_MAP.get(client)) {\n return;\n }\n\n if (isSentryRequestUrl(handlerData.fetchData.url, client)) {\n return;\n }\n\n instrumentFetchRequest(\n handlerData,\n _shouldCreateSpan,\n _shouldAttachTraceData,\n spans,\n 'auto.http.wintercg_fetch',\n );\n\n if (breadcrumbs) {\n createBreadcrumb(handlerData);\n }\n });\n },\n setup(client) {\n HAS_CLIENT_MAP.set(client, true);\n },\n };\n}) satisfies IntegrationFn;\n\nexport const winterCGFetchIntegration = defineIntegration(_winterCGFetch);\n\n/**\n * Creates spans and attaches tracing headers to fetch requests on WinterCG runtimes.\n *\n * @deprecated Use `winterCGFetchIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const WinterCGFetch = convertIntegrationFnToClass(\n INTEGRATION_NAME,\n winterCGFetchIntegration,\n) as IntegrationClass<Integration & { setupOnce: () => void }> & {\n new (options?: {\n breadcrumbs: boolean;\n shouldCreateSpanForRequest?: (url: string) => boolean;\n }): Integration;\n};\n\n// eslint-disable-next-line deprecation/deprecation\nexport type WinterCGFetch = typeof WinterCGFetch;\n\nfunction createBreadcrumb(handlerData: HandlerDataFetch): void {\n const { startTimestamp, endTimestamp } = handlerData;\n\n // We only capture complete fetch requests\n if (!endTimestamp) {\n return;\n }\n\n if (handlerData.error) {\n const data = handlerData.fetchData;\n const hint: FetchBreadcrumbHint = {\n data: handlerData.error,\n input: handlerData.args,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n level: 'error',\n type: 'http',\n },\n hint,\n );\n } else {\n const data: FetchBreadcrumbData = {\n ...handlerData.fetchData,\n status_code: handlerData.response && handlerData.response.status,\n };\n const hint: FetchBreadcrumbHint = {\n input: handlerData.args,\n response: handlerData.response,\n startTimestamp,\n endTimestamp,\n };\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n type: 'http',\n },\n hint,\n );\n }\n}\n"],"names":[],"mappings":"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"}