Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
1 line
6.0 KiB
Plaintext
1 line
6.0 KiB
Plaintext
{"version":3,"file":"nativeNodeFetchIntegration.js","sources":["../../../../src/light/integrations/nativeNodeFetchIntegration.ts"],"sourcesContent":["import type { ChannelListener } from 'node:diagnostics_channel';\nimport { subscribe } from 'node:diagnostics_channel';\nimport type { Integration, IntegrationFn } from '@sentry/core';\nimport { getCurrentScope, LRUMap } from '@sentry/core';\nimport type { UndiciRequest, UndiciResponse } from '../../integrations/node-fetch/types';\nimport {\n addFetchRequestBreadcrumb,\n addTracePropagationHeadersToFetchRequest,\n getAbsoluteUrl,\n} from '../../utils/outgoingFetchRequest';\n\nconst INTEGRATION_NAME = 'NodeFetch';\n\nexport interface NativeNodeFetchIntegrationOptions {\n /**\n * Whether breadcrumbs should be recorded for requests.\n *\n * @default `true`\n */\n breadcrumbs?: boolean;\n\n /**\n * Do not capture breadcrumbs or inject headers for outgoing fetch requests to URLs\n * where the given callback returns `true`.\n *\n * @param url Contains the entire URL, including query string (if any), protocol, host, etc. of the outgoing request.\n */\n ignoreOutgoingRequests?: (url: string) => boolean;\n}\n\nconst _nativeNodeFetchIntegration = ((options: NativeNodeFetchIntegrationOptions = {}) => {\n const _options = {\n breadcrumbs: options.breadcrumbs ?? true,\n ignoreOutgoingRequests: options.ignoreOutgoingRequests,\n };\n\n const propagationDecisionMap = new LRUMap<string, boolean>(100);\n const ignoreOutgoingRequestsMap = new WeakMap<UndiciRequest, boolean>();\n\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n const onRequestCreated = ((_data: unknown) => {\n const data = _data as { request: UndiciRequest };\n onUndiciRequestCreated(data.request, _options, propagationDecisionMap, ignoreOutgoingRequestsMap);\n }) satisfies ChannelListener;\n\n const onResponseHeaders = ((_data: unknown) => {\n const data = _data as { request: UndiciRequest; response: UndiciResponse };\n onUndiciResponseHeaders(data.request, data.response, _options, ignoreOutgoingRequestsMap);\n }) satisfies ChannelListener;\n\n subscribe('undici:request:create', onRequestCreated);\n subscribe('undici:request:headers', onResponseHeaders);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * This integration handles outgoing fetch (undici) requests in light mode (without OpenTelemetry).\n * It propagates trace headers and creates breadcrumbs for responses.\n */\nexport const nativeNodeFetchIntegration = _nativeNodeFetchIntegration as (\n options?: NativeNodeFetchIntegrationOptions,\n) => Integration & {\n name: 'NodeFetch';\n setupOnce: () => void;\n};\n\nfunction onUndiciRequestCreated(\n request: UndiciRequest,\n options: { ignoreOutgoingRequests?: (url: string) => boolean },\n propagationDecisionMap: LRUMap<string, boolean>,\n ignoreOutgoingRequestsMap: WeakMap<UndiciRequest, boolean>,\n): void {\n const shouldIgnore = shouldIgnoreRequest(request, options);\n ignoreOutgoingRequestsMap.set(request, shouldIgnore);\n\n if (shouldIgnore) {\n return;\n }\n\n addTracePropagationHeadersToFetchRequest(request, propagationDecisionMap);\n}\n\nfunction onUndiciResponseHeaders(\n request: UndiciRequest,\n response: UndiciResponse,\n options: { breadcrumbs: boolean },\n ignoreOutgoingRequestsMap: WeakMap<UndiciRequest, boolean>,\n): void {\n if (!options.breadcrumbs) {\n return;\n }\n\n const shouldIgnore = ignoreOutgoingRequestsMap.get(request);\n if (shouldIgnore) {\n return;\n }\n\n addFetchRequestBreadcrumb(request, response);\n}\n\n/** Check if the given outgoing request should be ignored. */\nfunction shouldIgnoreRequest(\n request: UndiciRequest,\n options: { ignoreOutgoingRequests?: (url: string) => boolean },\n): boolean {\n // Check if tracing is suppressed (e.g. for Sentry's own transport requests)\n if (getCurrentScope().getScopeData().sdkProcessingMetadata.__SENTRY_SUPPRESS_TRACING__) {\n return true;\n }\n\n const { ignoreOutgoingRequests } = options;\n\n if (!ignoreOutgoingRequests) {\n return false;\n }\n\n const url = getAbsoluteUrl(request.origin, request.path);\n return ignoreOutgoingRequests(url);\n}\n"],"names":[],"mappings":";;;;AAWA,MAAM,gBAAA,GAAmB,WAAW;;AAmBpC,MAAM,2BAAA,IAA+B,CAAC,OAAO,GAAsC,EAAE,KAAK;AAC1F,EAAE,MAAM,WAAW;AACnB,IAAI,WAAW,EAAE,OAAO,CAAC,WAAA,IAAe,IAAI;AAC5C,IAAI,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;AAC1D,GAAG;;AAEH,EAAE,MAAM,sBAAA,GAAyB,IAAI,MAAM,CAAkB,GAAG,CAAC;AACjE,EAAE,MAAM,yBAAA,GAA4B,IAAI,OAAO,EAA0B;;AAEzE,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,gBAAgB;AAC1B,IAAI,SAAS,GAAG;AAChB,MAAM,MAAM,gBAAA,IAAoB,CAAC,KAAK,KAAc;AACpD,QAAQ,MAAM,IAAA,GAAO,KAAA;AACrB,QAAQ,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,yBAAyB,CAAC;AACzG,MAAM,CAAC,CAAA;;AAEP,MAAM,MAAM,iBAAA,IAAqB,CAAC,KAAK,KAAc;AACrD,QAAQ,MAAM,IAAA,GAAO,KAAA;AACrB,QAAQ,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,yBAAyB,CAAC;AACjG,MAAM,CAAC,CAAA;;AAEP,MAAM,SAAS,CAAC,uBAAuB,EAAE,gBAAgB,CAAC;AAC1D,MAAM,SAAS,CAAC,wBAAwB,EAAE,iBAAiB,CAAC;AAC5D,IAAI,CAAC;AACL,GAAG;AACH,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACO,MAAM,0BAAA,GAA6B;;;;AAO1C,SAAS,sBAAsB;AAC/B,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,sBAAsB;AACxB,EAAE,yBAAyB;AAC3B,EAAQ;AACR,EAAE,MAAM,eAAe,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC5D,EAAE,yBAAyB,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC;;AAEtD,EAAE,IAAI,YAAY,EAAE;AACpB,IAAI;AACJ,EAAE;;AAEF,EAAE,wCAAwC,CAAC,OAAO,EAAE,sBAAsB,CAAC;AAC3E;;AAEA,SAAS,uBAAuB;AAChC,EAAE,OAAO;AACT,EAAE,QAAQ;AACV,EAAE,OAAO;AACT,EAAE,yBAAyB;AAC3B,EAAQ;AACR,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AAC5B,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,eAAe,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7D,EAAE,IAAI,YAAY,EAAE;AACpB,IAAI;AACJ,EAAE;;AAEF,EAAE,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC9C;;AAEA;AACA,SAAS,mBAAmB;AAC5B,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAW;AACX;AACA,EAAE,IAAI,eAAe,EAAE,CAAC,YAAY,EAAE,CAAC,qBAAqB,CAAC,2BAA2B,EAAE;AAC1F,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF,EAAE,MAAM,EAAE,sBAAA,EAAuB,GAAI,OAAO;;AAE5C,EAAE,IAAI,CAAC,sBAAsB,EAAE;AAC/B,IAAI,OAAO,KAAK;AAChB,EAAE;;AAEF,EAAE,MAAM,GAAA,GAAM,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;AAC1D,EAAE,OAAO,sBAAsB,CAAC,GAAG,CAAC;AACpC;;;;"} |