@sentry/browser 8.41.0 → 8.43.0

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.
Files changed (210) hide show
  1. package/build/npm/cjs/client.js +1 -1
  2. package/build/npm/cjs/client.js.map +1 -1
  3. package/build/npm/cjs/eventbuilder.js.map +1 -1
  4. package/build/npm/cjs/helpers.js +25 -21
  5. package/build/npm/cjs/helpers.js.map +1 -1
  6. package/build/npm/cjs/index.js +10 -0
  7. package/build/npm/cjs/index.js.map +1 -1
  8. package/build/npm/cjs/integrations/breadcrumbs.js +3 -0
  9. package/build/npm/cjs/integrations/breadcrumbs.js.map +1 -1
  10. package/build/npm/cjs/integrations/browserapierrors.js +41 -63
  11. package/build/npm/cjs/integrations/browserapierrors.js.map +1 -1
  12. package/build/npm/cjs/integrations/browsersession.js +44 -0
  13. package/build/npm/cjs/integrations/browsersession.js.map +1 -0
  14. package/build/npm/cjs/integrations/contextlines.js.map +1 -1
  15. package/build/npm/cjs/integrations/featureFlags/featureFlagsIntegration.js +46 -0
  16. package/build/npm/cjs/integrations/featureFlags/featureFlagsIntegration.js.map +1 -0
  17. package/build/npm/cjs/integrations/featureFlags/launchdarkly/integration.js +55 -0
  18. package/build/npm/cjs/integrations/featureFlags/launchdarkly/integration.js.map +1 -0
  19. package/build/npm/cjs/integrations/featureFlags/openfeature/integration.js +37 -0
  20. package/build/npm/cjs/integrations/featureFlags/openfeature/integration.js.map +1 -0
  21. package/build/npm/cjs/integrations/globalhandlers.js +8 -4
  22. package/build/npm/cjs/integrations/globalhandlers.js.map +1 -1
  23. package/build/npm/cjs/integrations/httpclient.js.map +1 -1
  24. package/build/npm/cjs/integrations/linkederrors.js.map +1 -1
  25. package/build/npm/cjs/integrations/reportingobserver.js +7 -6
  26. package/build/npm/cjs/integrations/reportingobserver.js.map +1 -1
  27. package/build/npm/cjs/integrations/spotlight.js.map +1 -1
  28. package/build/npm/cjs/metrics.js.map +1 -1
  29. package/build/npm/cjs/profiling/integration.js.map +1 -1
  30. package/build/npm/cjs/profiling/startProfileForSpan.js.map +1 -1
  31. package/build/npm/cjs/profiling/utils.js +0 -3
  32. package/build/npm/cjs/profiling/utils.js.map +1 -1
  33. package/build/npm/cjs/sdk.js +11 -37
  34. package/build/npm/cjs/sdk.js.map +1 -1
  35. package/build/npm/cjs/stack-parsers.js.map +1 -1
  36. package/build/npm/cjs/tracing/backgroundtab.js.map +1 -1
  37. package/build/npm/cjs/tracing/browserTracingIntegration.js +2 -2
  38. package/build/npm/cjs/tracing/browserTracingIntegration.js.map +1 -1
  39. package/build/npm/cjs/tracing/request.js +0 -2
  40. package/build/npm/cjs/tracing/request.js.map +1 -1
  41. package/build/npm/cjs/transports/fetch.js.map +1 -1
  42. package/build/npm/cjs/transports/offline.js.map +1 -1
  43. package/build/npm/cjs/userfeedback.js.map +1 -1
  44. package/build/npm/cjs/utils/featureFlags.js +96 -0
  45. package/build/npm/cjs/utils/featureFlags.js.map +1 -0
  46. package/build/npm/cjs/utils/lazyLoadIntegration.js.map +1 -1
  47. package/build/npm/esm/client.js +1 -1
  48. package/build/npm/esm/client.js.map +1 -1
  49. package/build/npm/esm/eventbuilder.js.map +1 -1
  50. package/build/npm/esm/helpers.js +25 -21
  51. package/build/npm/esm/helpers.js.map +1 -1
  52. package/build/npm/esm/index.js +4 -0
  53. package/build/npm/esm/index.js.map +1 -1
  54. package/build/npm/esm/integrations/breadcrumbs.js +3 -0
  55. package/build/npm/esm/integrations/breadcrumbs.js.map +1 -1
  56. package/build/npm/esm/integrations/browserapierrors.js +41 -63
  57. package/build/npm/esm/integrations/browserapierrors.js.map +1 -1
  58. package/build/npm/esm/integrations/browsersession.js +42 -0
  59. package/build/npm/esm/integrations/browsersession.js.map +1 -0
  60. package/build/npm/esm/integrations/contextlines.js.map +1 -1
  61. package/build/npm/esm/integrations/featureFlags/featureFlagsIntegration.js +44 -0
  62. package/build/npm/esm/integrations/featureFlags/featureFlagsIntegration.js.map +1 -0
  63. package/build/npm/esm/integrations/featureFlags/launchdarkly/integration.js +52 -0
  64. package/build/npm/esm/integrations/featureFlags/launchdarkly/integration.js.map +1 -0
  65. package/build/npm/esm/integrations/featureFlags/openfeature/integration.js +34 -0
  66. package/build/npm/esm/integrations/featureFlags/openfeature/integration.js.map +1 -0
  67. package/build/npm/esm/integrations/globalhandlers.js +8 -4
  68. package/build/npm/esm/integrations/globalhandlers.js.map +1 -1
  69. package/build/npm/esm/integrations/httpclient.js.map +1 -1
  70. package/build/npm/esm/integrations/linkederrors.js.map +1 -1
  71. package/build/npm/esm/integrations/reportingobserver.js +7 -6
  72. package/build/npm/esm/integrations/reportingobserver.js.map +1 -1
  73. package/build/npm/esm/integrations/spotlight.js.map +1 -1
  74. package/build/npm/esm/metrics.js.map +1 -1
  75. package/build/npm/esm/package.json +1 -1
  76. package/build/npm/esm/profiling/integration.js.map +1 -1
  77. package/build/npm/esm/profiling/startProfileForSpan.js.map +1 -1
  78. package/build/npm/esm/profiling/utils.js +0 -3
  79. package/build/npm/esm/profiling/utils.js.map +1 -1
  80. package/build/npm/esm/sdk.js +12 -38
  81. package/build/npm/esm/sdk.js.map +1 -1
  82. package/build/npm/esm/stack-parsers.js.map +1 -1
  83. package/build/npm/esm/tracing/backgroundtab.js.map +1 -1
  84. package/build/npm/esm/tracing/browserTracingIntegration.js +3 -3
  85. package/build/npm/esm/tracing/browserTracingIntegration.js.map +1 -1
  86. package/build/npm/esm/tracing/request.js +0 -2
  87. package/build/npm/esm/tracing/request.js.map +1 -1
  88. package/build/npm/esm/transports/fetch.js.map +1 -1
  89. package/build/npm/esm/transports/offline.js.map +1 -1
  90. package/build/npm/esm/userfeedback.js.map +1 -1
  91. package/build/npm/esm/utils/featureFlags.js +91 -0
  92. package/build/npm/esm/utils/featureFlags.js.map +1 -0
  93. package/build/npm/esm/utils/lazyLoadIntegration.js.map +1 -1
  94. package/build/npm/types/client.d.ts +2 -3
  95. package/build/npm/types/client.d.ts.map +1 -1
  96. package/build/npm/types/eventbuilder.d.ts +1 -1
  97. package/build/npm/types/eventbuilder.d.ts.map +1 -1
  98. package/build/npm/types/exports.d.ts +1 -1
  99. package/build/npm/types/exports.d.ts.map +1 -1
  100. package/build/npm/types/feedbackAsync.d.ts +1 -1
  101. package/build/npm/types/feedbackSync.d.ts +1 -1
  102. package/build/npm/types/helpers.d.ts +8 -12
  103. package/build/npm/types/helpers.d.ts.map +1 -1
  104. package/build/npm/types/index.d.ts +8 -4
  105. package/build/npm/types/index.d.ts.map +1 -1
  106. package/build/npm/types/integrations/breadcrumbs.d.ts +1 -1
  107. package/build/npm/types/integrations/breadcrumbs.d.ts.map +1 -1
  108. package/build/npm/types/integrations/browserapierrors.d.ts +1 -1
  109. package/build/npm/types/integrations/browserapierrors.d.ts.map +1 -1
  110. package/build/npm/types/integrations/browsersession.d.ts +8 -0
  111. package/build/npm/types/integrations/browsersession.d.ts.map +1 -0
  112. package/build/npm/types/integrations/contextlines.d.ts +2 -2
  113. package/build/npm/types/integrations/contextlines.d.ts.map +1 -1
  114. package/build/npm/types/integrations/featureFlags/featureFlagsIntegration.d.ts +31 -0
  115. package/build/npm/types/integrations/featureFlags/featureFlagsIntegration.d.ts.map +1 -0
  116. package/build/npm/types/integrations/featureFlags/index.d.ts +2 -0
  117. package/build/npm/types/integrations/featureFlags/index.d.ts.map +1 -0
  118. package/build/npm/types/integrations/featureFlags/launchdarkly/index.d.ts +2 -0
  119. package/build/npm/types/integrations/featureFlags/launchdarkly/index.d.ts.map +1 -0
  120. package/build/npm/types/integrations/featureFlags/launchdarkly/integration.d.ts +25 -0
  121. package/build/npm/types/integrations/featureFlags/launchdarkly/integration.d.ts.map +1 -0
  122. package/build/npm/types/integrations/featureFlags/launchdarkly/types.d.ts +44 -0
  123. package/build/npm/types/integrations/featureFlags/launchdarkly/types.d.ts.map +1 -0
  124. package/build/npm/types/integrations/featureFlags/openfeature/index.d.ts +2 -0
  125. package/build/npm/types/integrations/featureFlags/openfeature/index.d.ts.map +1 -0
  126. package/build/npm/types/integrations/featureFlags/openfeature/integration.d.ts +16 -0
  127. package/build/npm/types/integrations/featureFlags/openfeature/integration.d.ts.map +1 -0
  128. package/build/npm/types/integrations/featureFlags/openfeature/types.d.ts +86 -0
  129. package/build/npm/types/integrations/featureFlags/openfeature/types.d.ts.map +1 -0
  130. package/build/npm/types/integrations/globalhandlers.d.ts +1 -1
  131. package/build/npm/types/integrations/globalhandlers.d.ts.map +1 -1
  132. package/build/npm/types/integrations/httpclient.d.ts +1 -1
  133. package/build/npm/types/integrations/httpclient.d.ts.map +1 -1
  134. package/build/npm/types/integrations/httpcontext.d.ts +1 -1
  135. package/build/npm/types/integrations/httpcontext.d.ts.map +1 -1
  136. package/build/npm/types/integrations/linkederrors.d.ts +1 -1
  137. package/build/npm/types/integrations/linkederrors.d.ts.map +1 -1
  138. package/build/npm/types/integrations/reportingobserver.d.ts +1 -1
  139. package/build/npm/types/integrations/reportingobserver.d.ts.map +1 -1
  140. package/build/npm/types/integrations/spotlight.d.ts +2 -2
  141. package/build/npm/types/integrations/spotlight.d.ts.map +1 -1
  142. package/build/npm/types/metrics.d.ts +1 -1
  143. package/build/npm/types/metrics.d.ts.map +1 -1
  144. package/build/npm/types/profiling/integration.d.ts +1 -1
  145. package/build/npm/types/profiling/integration.d.ts.map +1 -1
  146. package/build/npm/types/profiling/startProfileForSpan.d.ts +1 -1
  147. package/build/npm/types/profiling/startProfileForSpan.d.ts.map +1 -1
  148. package/build/npm/types/profiling/utils.d.ts +1 -1
  149. package/build/npm/types/profiling/utils.d.ts.map +1 -1
  150. package/build/npm/types/sdk.d.ts +2 -2
  151. package/build/npm/types/sdk.d.ts.map +1 -1
  152. package/build/npm/types/stack-parsers.d.ts +2 -2
  153. package/build/npm/types/stack-parsers.d.ts.map +1 -1
  154. package/build/npm/types/tracing/backgroundtab.d.ts.map +1 -1
  155. package/build/npm/types/tracing/browserTracingIntegration.d.ts +2 -3
  156. package/build/npm/types/tracing/browserTracingIntegration.d.ts.map +1 -1
  157. package/build/npm/types/tracing/request.d.ts +1 -1
  158. package/build/npm/types/tracing/request.d.ts.map +1 -1
  159. package/build/npm/types/transports/fetch.d.ts +1 -1
  160. package/build/npm/types/transports/fetch.d.ts.map +1 -1
  161. package/build/npm/types/transports/offline.d.ts +1 -2
  162. package/build/npm/types/transports/offline.d.ts.map +1 -1
  163. package/build/npm/types/transports/types.d.ts +1 -1
  164. package/build/npm/types/transports/types.d.ts.map +1 -1
  165. package/build/npm/types/userfeedback.d.ts +1 -1
  166. package/build/npm/types/userfeedback.d.ts.map +1 -1
  167. package/build/npm/types/utils/featureFlags.d.ts +34 -0
  168. package/build/npm/types/utils/featureFlags.d.ts.map +1 -0
  169. package/build/npm/types/utils/lazyLoadIntegration.d.ts +1 -1
  170. package/build/npm/types/utils/lazyLoadIntegration.d.ts.map +1 -1
  171. package/build/npm/types-ts3.8/client.d.ts +2 -3
  172. package/build/npm/types-ts3.8/eventbuilder.d.ts +1 -1
  173. package/build/npm/types-ts3.8/exports.d.ts +1 -1
  174. package/build/npm/types-ts3.8/feedbackAsync.d.ts +1 -1
  175. package/build/npm/types-ts3.8/feedbackSync.d.ts +1 -1
  176. package/build/npm/types-ts3.8/helpers.d.ts +8 -12
  177. package/build/npm/types-ts3.8/index.d.ts +8 -4
  178. package/build/npm/types-ts3.8/integrations/breadcrumbs.d.ts +1 -1
  179. package/build/npm/types-ts3.8/integrations/browserapierrors.d.ts +1 -1
  180. package/build/npm/types-ts3.8/integrations/browsersession.d.ts +8 -0
  181. package/build/npm/types-ts3.8/integrations/contextlines.d.ts +2 -2
  182. package/build/npm/types-ts3.8/integrations/featureFlags/featureFlagsIntegration.d.ts +31 -0
  183. package/build/npm/types-ts3.8/integrations/featureFlags/index.d.ts +2 -0
  184. package/build/npm/types-ts3.8/integrations/featureFlags/launchdarkly/index.d.ts +2 -0
  185. package/build/npm/types-ts3.8/integrations/featureFlags/launchdarkly/integration.d.ts +25 -0
  186. package/build/npm/types-ts3.8/integrations/featureFlags/launchdarkly/types.d.ts +44 -0
  187. package/build/npm/types-ts3.8/integrations/featureFlags/openfeature/index.d.ts +2 -0
  188. package/build/npm/types-ts3.8/integrations/featureFlags/openfeature/integration.d.ts +16 -0
  189. package/build/npm/types-ts3.8/integrations/featureFlags/openfeature/types.d.ts +86 -0
  190. package/build/npm/types-ts3.8/integrations/globalhandlers.d.ts +1 -1
  191. package/build/npm/types-ts3.8/integrations/httpclient.d.ts +1 -1
  192. package/build/npm/types-ts3.8/integrations/httpcontext.d.ts +1 -1
  193. package/build/npm/types-ts3.8/integrations/linkederrors.d.ts +1 -1
  194. package/build/npm/types-ts3.8/integrations/reportingobserver.d.ts +1 -1
  195. package/build/npm/types-ts3.8/integrations/spotlight.d.ts +2 -2
  196. package/build/npm/types-ts3.8/metrics.d.ts +1 -1
  197. package/build/npm/types-ts3.8/profiling/integration.d.ts +1 -1
  198. package/build/npm/types-ts3.8/profiling/startProfileForSpan.d.ts +1 -1
  199. package/build/npm/types-ts3.8/profiling/utils.d.ts +1 -1
  200. package/build/npm/types-ts3.8/sdk.d.ts +2 -2
  201. package/build/npm/types-ts3.8/stack-parsers.d.ts +2 -2
  202. package/build/npm/types-ts3.8/tracing/browserTracingIntegration.d.ts +2 -3
  203. package/build/npm/types-ts3.8/tracing/request.d.ts +1 -1
  204. package/build/npm/types-ts3.8/transports/fetch.d.ts +1 -1
  205. package/build/npm/types-ts3.8/transports/offline.d.ts +1 -2
  206. package/build/npm/types-ts3.8/transports/types.d.ts +1 -1
  207. package/build/npm/types-ts3.8/userfeedback.d.ts +1 -1
  208. package/build/npm/types-ts3.8/utils/featureFlags.d.ts +34 -0
  209. package/build/npm/types-ts3.8/utils/lazyLoadIntegration.d.ts +1 -1
  210. package/package.json +7 -8
@@ -1 +1 @@
1
- {"version":3,"file":"eventbuilder.js","sources":["../../../src/eventbuilder.ts"],"sourcesContent":["import { getClient } from '@sentry/core';\nimport {\n addExceptionMechanism,\n addExceptionTypeValue,\n extractExceptionKeysForMessage,\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isEvent,\n isParameterizedString,\n isPlainObject,\n normalizeToSize,\n resolvedSyncPromise,\n} from '@sentry/core';\nimport type {\n Event,\n EventHint,\n Exception,\n ParameterizedString,\n SeverityLevel,\n StackFrame,\n StackParser,\n} from '@sentry/types';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception: Exception = {\n type: extractType(ex),\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\nfunction eventFromPlainObject(\n stackParser: StackParser,\n exception: Record<string, unknown>,\n syntheticException?: Error,\n isUnhandledRejection?: boolean,\n): Event {\n const client = getClient();\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n // If we can, we extract an exception from the object properties\n const errorFromProp = getErrorPropertyFromObject(exception);\n\n const extra = {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n };\n\n if (errorFromProp) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, errorFromProp)],\n },\n extra,\n };\n }\n\n const event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n } as Exception,\n ],\n },\n extra,\n } satisfies Event;\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values[0]!.stacktrace = { frames };\n }\n }\n\n return event;\n}\n\nfunction eventFromError(stackParser: StackParser, ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser: StackParser,\n ex: Error & { framesToPop?: number; stacktrace?: string },\n): 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 skipLines = getSkipFirstStackStringLines(ex);\n const framesToPop = getPopFirstTopFrames(ex);\n\n try {\n return stackParser(stacktrace, skipLines, framesToPop);\n } catch (e) {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex: Error): number {\n if (ex && reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n\n return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex: Error & { framesToPop?: unknown }): number {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n return 0;\n}\n\n// https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Exception\n// @ts-expect-error - WebAssembly.Exception is a valid class\nfunction isWebAssemblyException(exception: unknown): exception is WebAssembly.Exception {\n // Check for support\n // @ts-expect-error - WebAssembly.Exception is a valid class\n if (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Exception !== 'undefined') {\n // @ts-expect-error - WebAssembly.Exception is a valid class\n return exception instanceof WebAssembly.Exception;\n } else {\n return false;\n }\n}\n\n/**\n * Extracts from errors what we use as the exception `type` in error events.\n *\n * Usually, this is the `name` property on Error objects but WASM errors need to be treated differently.\n */\nexport function extractType(ex: Error & { message: { error?: Error } }): string | undefined {\n const name = ex && ex.name;\n\n // The name for WebAssembly.Exception Errors needs to be extracted differently.\n // Context: https://github.com/getsentry/sentry-javascript/issues/13787\n if (!name && isWebAssemblyException(ex)) {\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n return hasTypeInMessage ? ex.message[0] : 'WebAssembly.Exception';\n }\n\n return name;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nexport function extractMessage(ex: Error & { message: { error?: Error } }): string {\n const message = ex && ex.message;\n\n if (!message) {\n return 'No error message';\n }\n\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n if (isWebAssemblyException(ex) && Array.isArray(ex.message) && ex.message.length == 2) {\n return ex.message[1];\n }\n\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: ParameterizedString,\n level: SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n stackParser: StackParser,\n exception: unknown,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n isUnhandledRejection?: boolean,\n): Event {\n let event: Event;\n\n if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception as ErrorEvent;\n return eventFromError(stackParser, errorEvent.error as Error);\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception) || isDOMException(exception as DOMException)) {\n const domException = exception as DOMException;\n\n if ('stack' in (exception as Error)) {\n event = eventFromError(stackParser, exception as Error);\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n // eslint-disable-next-line deprecation/deprecation\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception as Record<string, unknown>;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(stackParser, exception as string, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\nfunction eventFromString(\n stackParser: StackParser,\n message: ParameterizedString,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n exception: Record<string, unknown>,\n { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n try {\n const prototype: Prototype | null = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj: Record<string, unknown>): Error | undefined {\n for (const prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n const value = obj[prop];\n if (value instanceof Error) {\n return value;\n }\n }\n }\n\n return undefined;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eventbuilder.js","sources":["../../../src/eventbuilder.ts"],"sourcesContent":["import type {\n Event,\n EventHint,\n Exception,\n ParameterizedString,\n SeverityLevel,\n StackFrame,\n StackParser,\n} from '@sentry/core';\nimport {\n addExceptionMechanism,\n addExceptionTypeValue,\n extractExceptionKeysForMessage,\n getClient,\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isEvent,\n isParameterizedString,\n isPlainObject,\n normalizeToSize,\n resolvedSyncPromise,\n} from '@sentry/core';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception: Exception = {\n type: extractType(ex),\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\nfunction eventFromPlainObject(\n stackParser: StackParser,\n exception: Record<string, unknown>,\n syntheticException?: Error,\n isUnhandledRejection?: boolean,\n): Event {\n const client = getClient();\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n // If we can, we extract an exception from the object properties\n const errorFromProp = getErrorPropertyFromObject(exception);\n\n const extra = {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n };\n\n if (errorFromProp) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, errorFromProp)],\n },\n extra,\n };\n }\n\n const event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n } as Exception,\n ],\n },\n extra,\n } satisfies Event;\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values[0]!.stacktrace = { frames };\n }\n }\n\n return event;\n}\n\nfunction eventFromError(stackParser: StackParser, ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser: StackParser,\n ex: Error & { framesToPop?: number; stacktrace?: string },\n): 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 skipLines = getSkipFirstStackStringLines(ex);\n const framesToPop = getPopFirstTopFrames(ex);\n\n try {\n return stackParser(stacktrace, skipLines, framesToPop);\n } catch (e) {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex: Error): number {\n if (ex && reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n\n return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex: Error & { framesToPop?: unknown }): number {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n return 0;\n}\n\n// https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Exception\n// @ts-expect-error - WebAssembly.Exception is a valid class\nfunction isWebAssemblyException(exception: unknown): exception is WebAssembly.Exception {\n // Check for support\n // @ts-expect-error - WebAssembly.Exception is a valid class\n if (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Exception !== 'undefined') {\n // @ts-expect-error - WebAssembly.Exception is a valid class\n return exception instanceof WebAssembly.Exception;\n } else {\n return false;\n }\n}\n\n/**\n * Extracts from errors what we use as the exception `type` in error events.\n *\n * Usually, this is the `name` property on Error objects but WASM errors need to be treated differently.\n */\nexport function extractType(ex: Error & { message: { error?: Error } }): string | undefined {\n const name = ex && ex.name;\n\n // The name for WebAssembly.Exception Errors needs to be extracted differently.\n // Context: https://github.com/getsentry/sentry-javascript/issues/13787\n if (!name && isWebAssemblyException(ex)) {\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n return hasTypeInMessage ? ex.message[0] : 'WebAssembly.Exception';\n }\n\n return name;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nexport function extractMessage(ex: Error & { message: { error?: Error } }): string {\n const message = ex && ex.message;\n\n if (!message) {\n return 'No error message';\n }\n\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n if (isWebAssemblyException(ex) && Array.isArray(ex.message) && ex.message.length == 2) {\n return ex.message[1];\n }\n\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: ParameterizedString,\n level: SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n stackParser: StackParser,\n exception: unknown,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n isUnhandledRejection?: boolean,\n): Event {\n let event: Event;\n\n if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception as ErrorEvent;\n return eventFromError(stackParser, errorEvent.error as Error);\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception) || isDOMException(exception as DOMException)) {\n const domException = exception as DOMException;\n\n if ('stack' in (exception as Error)) {\n event = eventFromError(stackParser, exception as Error);\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n // eslint-disable-next-line deprecation/deprecation\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception as Record<string, unknown>;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(stackParser, exception as string, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\nfunction eventFromString(\n stackParser: StackParser,\n message: ParameterizedString,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n exception: Record<string, unknown>,\n { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n try {\n const prototype: Prototype | null = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj: Record<string, unknown>): Error | undefined {\n for (const prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n const value = obj[prop];\n if (value instanceof Error) {\n return value;\n }\n }\n }\n\n return undefined;\n}\n"],"names":[],"mappings":"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"}
@@ -22,6 +22,8 @@ function ignoreNextOnError() {
22
22
  });
23
23
  }
24
24
 
25
+ // eslint-disable-next-line @typescript-eslint/ban-types
26
+
25
27
  /**
26
28
  * Instruments the given function and sends an event to Sentry every time the
27
29
  * function throws an exception.
@@ -36,8 +38,6 @@ function wrap(
36
38
  options
37
39
 
38
40
  = {},
39
- before,
40
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
41
  ) {
42
42
  // for future readers what this does is wrap a function and then create
43
43
  // a bi-directional wrapping between them.
@@ -46,14 +46,18 @@ function wrap(
46
46
  // original.__sentry_wrapped__ -> wrapped
47
47
  // wrapped.__sentry_original__ -> original
48
48
 
49
- if (typeof fn !== 'function') {
49
+ function isFunction(fn) {
50
+ return typeof fn === 'function';
51
+ }
52
+
53
+ if (!isFunction(fn)) {
50
54
  return fn;
51
55
  }
52
56
 
53
57
  try {
54
58
  // if we're dealing with a function that was previously wrapped, return
55
59
  // the original wrapper.
56
- const wrapper = fn.__sentry_wrapped__;
60
+ const wrapper = (fn ).__sentry_wrapped__;
57
61
  if (wrapper) {
58
62
  if (typeof wrapper === 'function') {
59
63
  return wrapper;
@@ -75,16 +79,12 @@ function wrap(
75
79
  return fn;
76
80
  }
77
81
 
78
- /* eslint-disable prefer-rest-params */
82
+ // Wrap the function itself
79
83
  // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`
80
- const sentryWrapped = function () {
81
- const args = Array.prototype.slice.call(arguments);
82
-
84
+ const sentryWrapped = function ( ...args) {
83
85
  try {
84
- if (before && typeof before === 'function') ;
85
-
86
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
87
- const wrappedArguments = args.map((arg) => wrap(arg, options));
86
+ // Also wrap arguments that are themselves functions
87
+ const wrappedArguments = args.map(arg => wrap(arg, options));
88
88
 
89
89
  // Attempt to invoke user-land function
90
90
  // NOTE: If you are a Sentry user, and you are seeing this stack frame, it
@@ -114,18 +114,19 @@ function wrap(
114
114
 
115
115
  throw ex;
116
116
  }
117
- };
118
- /* eslint-enable prefer-rest-params */
117
+ } ;
119
118
 
120
- // Accessing some objects may throw
121
- // ref: https://github.com/getsentry/sentry-javascript/issues/1168
119
+ // Wrap the wrapped function in a proxy, to ensure any other properties of the original function remain available
122
120
  try {
123
121
  for (const property in fn) {
124
122
  if (Object.prototype.hasOwnProperty.call(fn, property)) {
125
- sentryWrapped[property] = fn[property];
123
+ sentryWrapped[property ] = fn[property ];
126
124
  }
127
125
  }
128
- } catch (_oO) {} // eslint-disable-line no-empty
126
+ } catch (e2) {
127
+ // Accessing some objects may throw
128
+ // ref: https://github.com/getsentry/sentry-javascript/issues/1168
129
+ }
129
130
 
130
131
  // Signal that this function has been wrapped/filled already
131
132
  // for both debugging and to prevent it to being wrapped/filled twice
@@ -135,7 +136,8 @@ function wrap(
135
136
 
136
137
  // Restore original function name (not all browsers allow that)
137
138
  try {
138
- const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') ;
139
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
140
+ const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name');
139
141
  if (descriptor.configurable) {
140
142
  Object.defineProperty(sentryWrapped, 'name', {
141
143
  get() {
@@ -143,8 +145,10 @@ function wrap(
143
145
  },
144
146
  });
145
147
  }
146
- // eslint-disable-next-line no-empty
147
- } catch (_oO) {}
148
+ } catch (e3) {
149
+ // This may throw if e.g. the descriptor does not exist, or a browser does not allow redefining `name`.
150
+ // to save some bytes we simply try-catch this
151
+ }
148
152
 
149
153
  return sentryWrapped;
150
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/helpers.ts"],"sourcesContent":["import { captureException, withScope } from '@sentry/core';\nimport {\n GLOBAL_OBJ,\n addExceptionMechanism,\n addExceptionTypeValue,\n addNonEnumerableProperty,\n getOriginalFunction,\n markFunctionWrapped,\n} from '@sentry/core';\nimport type { Mechanism, WrappedFunction } from '@sentry/types';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\n // onerror should trigger before setTimeout\n ignoreOnError++;\n setTimeout(() => {\n ignoreOnError--;\n });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap(\n fn: WrappedFunction,\n options: {\n mechanism?: Mechanism;\n } = {},\n before?: WrappedFunction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n // for future readers what this does is wrap a function and then create\n // a bi-directional wrapping between them.\n //\n // example: wrapped = wrap(original);\n // original.__sentry_wrapped__ -> wrapped\n // wrapped.__sentry_original__ -> original\n\n if (typeof fn !== 'function') {\n return fn;\n }\n\n try {\n // if we're dealing with a function that was previously wrapped, return\n // the original wrapper.\n const wrapper = fn.__sentry_wrapped__;\n if (wrapper) {\n if (typeof wrapper === 'function') {\n return wrapper;\n } else {\n // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n // that something messed with it. In that case we want to return the originally passed function.\n return fn;\n }\n }\n\n // We don't wanna wrap it twice\n if (getOriginalFunction(fn)) {\n return fn;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n\n /* eslint-disable prefer-rest-params */\n // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n const sentryWrapped: WrappedFunction = function (this: unknown): void {\n const args = Array.prototype.slice.call(arguments);\n\n try {\n if (before && typeof before === 'function') {\n before.apply(this, arguments);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const wrappedArguments = args.map((arg: any) => wrap(arg, options));\n\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n\n withScope(scope => {\n scope.addEventProcessor(event => {\n if (options.mechanism) {\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, options.mechanism);\n }\n\n event.extra = {\n ...event.extra,\n arguments: args,\n };\n\n return event;\n });\n\n captureException(ex);\n });\n\n throw ex;\n }\n };\n /* eslint-enable prefer-rest-params */\n\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n try {\n for (const property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property] = fn[property];\n }\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n markFunctionWrapped(sentryWrapped, fn);\n\n addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n // Restore original function name (not all browsers allow that)\n try {\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') as PropertyDescriptor;\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get(): string {\n return fn.name;\n },\n });\n }\n // eslint-disable-next-line no-empty\n } catch (_oO) {}\n\n return sentryWrapped;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/helpers.ts"],"sourcesContent":["import type { Mechanism, WrappedFunction } from '@sentry/core';\nimport {\n GLOBAL_OBJ,\n addExceptionMechanism,\n addExceptionTypeValue,\n addNonEnumerableProperty,\n captureException,\n getOriginalFunction,\n markFunctionWrapped,\n withScope,\n} from '@sentry/core';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\n // onerror should trigger before setTimeout\n ignoreOnError++;\n setTimeout(() => {\n ignoreOnError--;\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\ntype WrappableFunction = Function;\n\nexport function wrap<T extends WrappableFunction>(\n fn: T,\n options?: {\n mechanism?: Mechanism;\n },\n): WrappedFunction<T>;\nexport function wrap<NonFunction>(\n fn: NonFunction,\n options?: {\n mechanism?: Mechanism;\n },\n): NonFunction;\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap<T extends WrappableFunction, NonFunction>(\n fn: T | NonFunction,\n options: {\n mechanism?: Mechanism;\n } = {},\n): NonFunction | WrappedFunction<T> {\n // for future readers what this does is wrap a function and then create\n // a bi-directional wrapping between them.\n //\n // example: wrapped = wrap(original);\n // original.__sentry_wrapped__ -> wrapped\n // wrapped.__sentry_original__ -> original\n\n function isFunction(fn: T | NonFunction): fn is T {\n return typeof fn === 'function';\n }\n\n if (!isFunction(fn)) {\n return fn;\n }\n\n try {\n // if we're dealing with a function that was previously wrapped, return\n // the original wrapper.\n const wrapper = (fn as WrappedFunction<T>).__sentry_wrapped__;\n if (wrapper) {\n if (typeof wrapper === 'function') {\n return wrapper;\n } else {\n // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n // that something messed with it. In that case we want to return the originally passed function.\n return fn;\n }\n }\n\n // We don't wanna wrap it twice\n if (getOriginalFunction(fn)) {\n return fn;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n\n // Wrap the function itself\n // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n const sentryWrapped = function (this: unknown, ...args: unknown[]): unknown {\n try {\n // Also wrap arguments that are themselves functions\n const wrappedArguments = args.map(arg => wrap(arg, options));\n\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n\n withScope(scope => {\n scope.addEventProcessor(event => {\n if (options.mechanism) {\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, options.mechanism);\n }\n\n event.extra = {\n ...event.extra,\n arguments: args,\n };\n\n return event;\n });\n\n captureException(ex);\n });\n\n throw ex;\n }\n } as unknown as WrappedFunction<T>;\n\n // Wrap the wrapped function in a proxy, to ensure any other properties of the original function remain available\n try {\n for (const property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property as keyof T] = fn[property as keyof T];\n }\n }\n } catch {\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n }\n\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n markFunctionWrapped(sentryWrapped, fn);\n\n addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n // Restore original function name (not all browsers allow that)\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name')!;\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get(): string {\n return fn.name;\n },\n });\n }\n } catch {\n // This may throw if e.g. the descriptor does not exist, or a browser does not allow redefining `name`.\n // to save some bytes we simply try-catch this\n }\n\n return sentryWrapped;\n}\n"],"names":[],"mappings":"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"}
@@ -26,4 +26,8 @@ export { browserTracingIntegration, startBrowserTracingNavigationSpan, startBrow
26
26
  export { makeBrowserOfflineTransport } from './transports/offline.js';
27
27
  export { browserProfilingIntegration } from './profiling/integration.js';
28
28
  export { spotlightBrowserIntegration } from './integrations/spotlight.js';
29
+ export { browserSessionIntegration } from './integrations/browsersession.js';
30
+ export { featureFlagsIntegration } from './integrations/featureFlags/featureFlagsIntegration.js';
31
+ export { buildLaunchDarklyFlagUsedHandler, launchDarklyIntegration } from './integrations/featureFlags/launchdarkly/integration.js';
32
+ export { OpenFeatureIntegrationHook, openFeatureIntegration } from './integrations/featureFlags/openfeature/integration.js';
29
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -3,6 +3,9 @@ import { defineIntegration, addConsoleInstrumentationHandler, addFetchInstrument
3
3
  import { DEBUG_BUILD } from '../debug-build.js';
4
4
  import { WINDOW } from '../helpers.js';
5
5
 
6
+ /* eslint-disable max-lines */
7
+
8
+
6
9
  /** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */
7
10
  const MAX_ALLOWED_STRING_LENGTH = 1024;
8
11
 
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumbs.js","sources":["../../../../src/integrations/breadcrumbs.ts"],"sourcesContent":["import {\n SENTRY_XHR_DATA_KEY,\n addClickKeypressInstrumentationHandler,\n addHistoryInstrumentationHandler,\n addXhrInstrumentationHandler,\n} from '@sentry-internal/browser-utils';\nimport { addBreadcrumb, defineIntegration, getClient } from '@sentry/core';\nimport {\n addConsoleInstrumentationHandler,\n addFetchInstrumentationHandler,\n getBreadcrumbLogLevelFromHttpStatusCode,\n getComponentName,\n getEventDescription,\n htmlTreeAsString,\n logger,\n parseUrl,\n safeJoin,\n severityLevelFromString,\n} from '@sentry/core';\nimport type {\n Breadcrumb,\n Client,\n Event as SentryEvent,\n FetchBreadcrumbData,\n FetchBreadcrumbHint,\n HandlerDataConsole,\n HandlerDataDom,\n HandlerDataFetch,\n HandlerDataHistory,\n HandlerDataXhr,\n IntegrationFn,\n XhrBreadcrumbData,\n XhrBreadcrumbHint,\n} from '@sentry/types';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\ninterface BreadcrumbsOptions {\n console: boolean;\n dom:\n | boolean\n | {\n serializeAttribute?: string | string[];\n maxStringLength?: number;\n };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n}\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options: Partial<BreadcrumbsOptions> = {}) => {\n const _options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n if (_options.console) {\n addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n }\n if (_options.dom) {\n addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n }\n if (_options.xhr) {\n addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n }\n if (_options.fetch) {\n addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n }\n if (_options.history) {\n addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n }\n if (_options.sentry) {\n client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n }\n },\n };\n}) satisfies IntegrationFn;\n\nexport const breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client: Client): (event: SentryEvent) => void {\n return function addSentryBreadcrumb(event: SentryEvent): void {\n if (getClient() !== client) {\n return;\n }\n\n addBreadcrumb(\n {\n category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event),\n },\n {\n event,\n },\n );\n };\n}\n\n/**\n * A HOC that creates a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n client: Client,\n dom: BreadcrumbsOptions['dom'],\n): (handlerData: HandlerDataDom) => void {\n return function _innerDomBreadcrumb(handlerData: HandlerDataDom): void {\n if (getClient() !== client) {\n return;\n }\n\n let target;\n let componentName;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n let maxStringLength =\n typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n );\n maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n }\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n const event = handlerData.event as Event | Node;\n const element = _isEvent(event) ? event.target : event;\n\n target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n componentName = getComponentName(element);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n const breadcrumb: Breadcrumb = {\n category: `ui.${handlerData.name}`,\n message: target,\n };\n\n if (componentName) {\n breadcrumb.data = { 'ui.component_name': componentName };\n }\n\n addBreadcrumb(breadcrumb, {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client: Client): (handlerData: HandlerDataConsole) => void {\n return function _consoleBreadcrumb(handlerData: HandlerDataConsole): void {\n if (getClient() !== client) {\n return;\n }\n\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityLevelFromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client: Client): (handlerData: HandlerDataXhr) => void {\n return function _xhrBreadcrumb(handlerData: HandlerDataXhr): void {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n // We only capture complete, non-sentry requests\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return;\n }\n\n const { method, url, status_code, body } = sentryXhrData;\n\n const data: XhrBreadcrumbData = {\n method,\n url,\n status_code,\n };\n\n const hint: XhrBreadcrumbHint = {\n xhr: handlerData.xhr,\n input: body,\n startTimestamp,\n endTimestamp,\n };\n\n const level = getBreadcrumbLogLevelFromHttpStatusCode(status_code);\n\n addBreadcrumb(\n {\n category: 'xhr',\n data,\n type: 'http',\n level,\n },\n hint,\n );\n };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client: Client): (handlerData: HandlerDataFetch) => void {\n return function _fetchBreadcrumb(handlerData: HandlerDataFetch): void {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n // We only capture complete fetch requests\n if (!endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n const data: FetchBreadcrumbData = 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 response = handlerData.response as Response | undefined;\n const data: FetchBreadcrumbData = {\n ...handlerData.fetchData,\n status_code: response && response.status,\n };\n const hint: FetchBreadcrumbHint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n const level = getBreadcrumbLogLevelFromHttpStatusCode(data.status_code);\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n type: 'http',\n level,\n },\n hint,\n );\n }\n };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client: Client): (handlerData: HandlerDataHistory) => void {\n return function _historyBreadcrumb(handlerData: HandlerDataHistory): void {\n if (getClient() !== client) {\n return;\n }\n\n let from: string | undefined = handlerData.from;\n let to: string | undefined = handlerData.to;\n const parsedLoc = parseUrl(WINDOW.location.href);\n let parsedFrom = from ? parseUrl(from) : undefined;\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom || !parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n };\n}\n\nfunction _isEvent(event: unknown): event is Event {\n return !!event && !!(event as Record<string, unknown>).target;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"breadcrumbs.js","sources":["../../../../src/integrations/breadcrumbs.ts"],"sourcesContent":["/* eslint-disable max-lines */\n\nimport {\n SENTRY_XHR_DATA_KEY,\n addClickKeypressInstrumentationHandler,\n addHistoryInstrumentationHandler,\n addXhrInstrumentationHandler,\n} from '@sentry-internal/browser-utils';\nimport type {\n Breadcrumb,\n Client,\n Event as SentryEvent,\n FetchBreadcrumbData,\n FetchBreadcrumbHint,\n HandlerDataConsole,\n HandlerDataDom,\n HandlerDataFetch,\n HandlerDataHistory,\n HandlerDataXhr,\n IntegrationFn,\n XhrBreadcrumbData,\n XhrBreadcrumbHint,\n} from '@sentry/core';\nimport {\n addBreadcrumb,\n addConsoleInstrumentationHandler,\n addFetchInstrumentationHandler,\n defineIntegration,\n getBreadcrumbLogLevelFromHttpStatusCode,\n getClient,\n getComponentName,\n getEventDescription,\n htmlTreeAsString,\n logger,\n parseUrl,\n safeJoin,\n severityLevelFromString,\n} from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\ninterface BreadcrumbsOptions {\n console: boolean;\n dom:\n | boolean\n | {\n serializeAttribute?: string | string[];\n maxStringLength?: number;\n };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n}\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options: Partial<BreadcrumbsOptions> = {}) => {\n const _options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n if (_options.console) {\n addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n }\n if (_options.dom) {\n addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n }\n if (_options.xhr) {\n addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n }\n if (_options.fetch) {\n addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n }\n if (_options.history) {\n addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n }\n if (_options.sentry) {\n client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n }\n },\n };\n}) satisfies IntegrationFn;\n\nexport const breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client: Client): (event: SentryEvent) => void {\n return function addSentryBreadcrumb(event: SentryEvent): void {\n if (getClient() !== client) {\n return;\n }\n\n addBreadcrumb(\n {\n category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event),\n },\n {\n event,\n },\n );\n };\n}\n\n/**\n * A HOC that creates a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n client: Client,\n dom: BreadcrumbsOptions['dom'],\n): (handlerData: HandlerDataDom) => void {\n return function _innerDomBreadcrumb(handlerData: HandlerDataDom): void {\n if (getClient() !== client) {\n return;\n }\n\n let target;\n let componentName;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n let maxStringLength =\n typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n );\n maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n }\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n const event = handlerData.event as Event | Node;\n const element = _isEvent(event) ? event.target : event;\n\n target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n componentName = getComponentName(element);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n const breadcrumb: Breadcrumb = {\n category: `ui.${handlerData.name}`,\n message: target,\n };\n\n if (componentName) {\n breadcrumb.data = { 'ui.component_name': componentName };\n }\n\n addBreadcrumb(breadcrumb, {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client: Client): (handlerData: HandlerDataConsole) => void {\n return function _consoleBreadcrumb(handlerData: HandlerDataConsole): void {\n if (getClient() !== client) {\n return;\n }\n\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityLevelFromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client: Client): (handlerData: HandlerDataXhr) => void {\n return function _xhrBreadcrumb(handlerData: HandlerDataXhr): void {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n // We only capture complete, non-sentry requests\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return;\n }\n\n const { method, url, status_code, body } = sentryXhrData;\n\n const data: XhrBreadcrumbData = {\n method,\n url,\n status_code,\n };\n\n const hint: XhrBreadcrumbHint = {\n xhr: handlerData.xhr,\n input: body,\n startTimestamp,\n endTimestamp,\n };\n\n const level = getBreadcrumbLogLevelFromHttpStatusCode(status_code);\n\n addBreadcrumb(\n {\n category: 'xhr',\n data,\n type: 'http',\n level,\n },\n hint,\n );\n };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client: Client): (handlerData: HandlerDataFetch) => void {\n return function _fetchBreadcrumb(handlerData: HandlerDataFetch): void {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n // We only capture complete fetch requests\n if (!endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n const data: FetchBreadcrumbData = 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 response = handlerData.response as Response | undefined;\n const data: FetchBreadcrumbData = {\n ...handlerData.fetchData,\n status_code: response && response.status,\n };\n const hint: FetchBreadcrumbHint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n const level = getBreadcrumbLogLevelFromHttpStatusCode(data.status_code);\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n type: 'http',\n level,\n },\n hint,\n );\n }\n };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client: Client): (handlerData: HandlerDataHistory) => void {\n return function _historyBreadcrumb(handlerData: HandlerDataHistory): void {\n if (getClient() !== client) {\n return;\n }\n\n let from: string | undefined = handlerData.from;\n let to: string | undefined = handlerData.to;\n const parsedLoc = parseUrl(WINDOW.location.href);\n let parsedFrom = from ? parseUrl(from) : undefined;\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom || !parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n };\n}\n\nfunction _isEvent(event: unknown): event is Event {\n return !!event && !!(event as Record<string, unknown>).target;\n}\n"],"names":[],"mappings":"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"}
@@ -83,7 +83,6 @@ const _browserApiErrorsIntegration = ((options = {}) => {
83
83
  const browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);
84
84
 
85
85
  function _wrapTimeFunction(original) {
86
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
86
  return function ( ...args) {
88
87
  const originalCallback = args[0];
89
88
  args[0] = wrap(originalCallback, {
@@ -97,11 +96,8 @@ function _wrapTimeFunction(original) {
97
96
  };
98
97
  }
99
98
 
100
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
101
99
  function _wrapRAF(original) {
102
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
103
100
  return function ( callback) {
104
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
105
101
  return original.apply(this, [
106
102
  wrap(callback, {
107
103
  mechanism: {
@@ -118,7 +114,6 @@ function _wrapRAF(original) {
118
114
  }
119
115
 
120
116
  function _wrapXHR(originalSend) {
121
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
122
117
  return function ( ...args) {
123
118
  // eslint-disable-next-line @typescript-eslint/no-this-alias
124
119
  const xhr = this;
@@ -126,7 +121,6 @@ function _wrapXHR(originalSend) {
126
121
 
127
122
  xmlHttpRequestProps.forEach(prop => {
128
123
  if (prop in xhr && typeof xhr[prop] === 'function') {
129
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
130
124
  fill(xhr, prop, function (original) {
131
125
  const wrapOptions = {
132
126
  mechanism: {
@@ -156,12 +150,11 @@ function _wrapXHR(originalSend) {
156
150
  }
157
151
 
158
152
  function _wrapEventTarget(target) {
159
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
160
153
  const globalObject = WINDOW ;
161
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
162
- const proto = globalObject[target] && globalObject[target].prototype;
154
+ const targetObj = globalObject[target];
155
+ const proto = targetObj && targetObj.prototype;
163
156
 
164
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins
157
+ // eslint-disable-next-line no-prototype-builtins
165
158
  if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {
166
159
  return;
167
160
  }
@@ -169,15 +162,9 @@ function _wrapEventTarget(target) {
169
162
  fill(proto, 'addEventListener', function (original,)
170
163
 
171
164
  {
172
- return function (
173
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
174
-
175
- eventName,
176
- fn,
177
- options,
178
- ) {
165
+ return function ( eventName, fn, options) {
179
166
  try {
180
- if (typeof fn.handleEvent === 'function') {
167
+ if (isEventListenerObject(fn)) {
181
168
  // ESlint disable explanation:
182
169
  // First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would
183
170
  // introduce a bug here, because bind returns a new function that doesn't have our
@@ -196,14 +183,13 @@ function _wrapEventTarget(target) {
196
183
  },
197
184
  });
198
185
  }
199
- } catch (err) {
186
+ } catch (e2) {
200
187
  // can sometimes get 'Permission denied to access property "handle Event'
201
188
  }
202
189
 
203
190
  return original.apply(this, [
204
191
  eventName,
205
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
206
- wrap(fn , {
192
+ wrap(fn, {
207
193
  mechanism: {
208
194
  data: {
209
195
  function: 'addEventListener',
@@ -219,50 +205,42 @@ function _wrapEventTarget(target) {
219
205
  };
220
206
  });
221
207
 
222
- fill(
223
- proto,
224
- 'removeEventListener',
225
- function (
226
- originalRemoveEventListener,
227
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
228
- ) {
229
- return function (
230
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
208
+ fill(proto, 'removeEventListener', function (originalRemoveEventListener,)
231
209
 
232
- eventName,
233
- fn,
234
- options,
235
- ) {
236
- /**
237
- * There are 2 possible scenarios here:
238
- *
239
- * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified
240
- * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function
241
- * as a pass-through, and call original `removeEventListener` with it.
242
- *
243
- * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using
244
- * our wrapped version of `addEventListener`, which internally calls `wrap` helper.
245
- * This helper "wraps" whole callback inside a try/catch statement, and attached appropriate metadata to it,
246
- * in order for us to make a distinction between wrapped/non-wrapped functions possible.
247
- * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.
248
- *
249
- * When someone adds a handler prior to initialization, and then do it again, but after,
250
- * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible
251
- * to get rid of the initial handler and it'd stick there forever.
252
- */
253
- const wrappedEventHandler = fn ;
254
- try {
255
- const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;
256
- if (originalEventHandler) {
257
- originalRemoveEventListener.call(this, eventName, originalEventHandler, options);
258
- }
259
- } catch (e) {
260
- // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments
210
+ {
211
+ return function ( eventName, fn, options) {
212
+ /**
213
+ * There are 2 possible scenarios here:
214
+ *
215
+ * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified
216
+ * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function
217
+ * as a pass-through, and call original `removeEventListener` with it.
218
+ *
219
+ * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using
220
+ * our wrapped version of `addEventListener`, which internally calls `wrap` helper.
221
+ * This helper "wraps" whole callback inside a try/catch statement, and attached appropriate metadata to it,
222
+ * in order for us to make a distinction between wrapped/non-wrapped functions possible.
223
+ * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.
224
+ *
225
+ * When someone adds a handler prior to initialization, and then do it again, but after,
226
+ * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible
227
+ * to get rid of the initial handler and it'd stick there forever.
228
+ */
229
+ try {
230
+ const originalEventHandler = (fn ).__sentry_wrapped__;
231
+ if (originalEventHandler) {
232
+ originalRemoveEventListener.call(this, eventName, originalEventHandler, options);
261
233
  }
262
- return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);
263
- };
264
- },
265
- );
234
+ } catch (e) {
235
+ // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments
236
+ }
237
+ return originalRemoveEventListener.call(this, eventName, fn, options);
238
+ };
239
+ });
240
+ }
241
+
242
+ function isEventListenerObject(obj) {
243
+ return typeof (obj ).handleEvent === 'function';
266
244
  }
267
245
 
268
246
  export { browserApiErrorsIntegration };