@sentry/browser 10.24.0 → 10.26.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 (450) hide show
  1. package/build/npm/cjs/dev/client.js.map +1 -0
  2. package/build/npm/cjs/dev/debug-build.js.map +1 -0
  3. package/build/npm/cjs/dev/diagnose-sdk.js.map +1 -0
  4. package/build/npm/cjs/dev/eventbuilder.js.map +1 -0
  5. package/build/npm/cjs/dev/feedbackAsync.js.map +1 -0
  6. package/build/npm/cjs/dev/feedbackSync.js.map +1 -0
  7. package/build/npm/cjs/dev/helpers.js.map +1 -0
  8. package/build/npm/cjs/dev/integrations/breadcrumbs.js.map +1 -0
  9. package/build/npm/cjs/dev/integrations/browserapierrors.js.map +1 -0
  10. package/build/npm/cjs/dev/integrations/browsersession.js.map +1 -0
  11. package/build/npm/cjs/dev/integrations/contextlines.js.map +1 -0
  12. package/build/npm/cjs/dev/integrations/featureFlags/growthbook/integration.js.map +1 -0
  13. package/build/npm/cjs/dev/integrations/featureFlags/launchdarkly/integration.js.map +1 -0
  14. package/build/npm/cjs/dev/integrations/featureFlags/openfeature/integration.js.map +1 -0
  15. package/build/npm/cjs/dev/integrations/featureFlags/statsig/integration.js.map +1 -0
  16. package/build/npm/cjs/dev/integrations/featureFlags/unleash/integration.js.map +1 -0
  17. package/build/npm/cjs/{integrations → dev/integrations}/globalhandlers.js +1 -1
  18. package/build/npm/cjs/dev/integrations/globalhandlers.js.map +1 -0
  19. package/build/npm/cjs/dev/integrations/graphqlClient.js.map +1 -0
  20. package/build/npm/cjs/dev/integrations/httpclient.js.map +1 -0
  21. package/build/npm/cjs/dev/integrations/httpcontext.js.map +1 -0
  22. package/build/npm/cjs/dev/integrations/linkederrors.js.map +1 -0
  23. package/build/npm/cjs/dev/integrations/reportingobserver.js.map +1 -0
  24. package/build/npm/cjs/dev/integrations/spotlight.js.map +1 -0
  25. package/build/npm/cjs/dev/integrations/webWorker.js.map +1 -0
  26. package/build/npm/cjs/{profiling/lifecycleMode/traceLifecycleProfiler.js → dev/profiling/UIProfiler.js} +73 -75
  27. package/build/npm/cjs/dev/profiling/UIProfiler.js.map +1 -0
  28. package/build/npm/cjs/{profiling → dev/profiling}/integration.js +5 -5
  29. package/build/npm/cjs/dev/profiling/integration.js.map +1 -0
  30. package/build/npm/cjs/dev/profiling/startProfileForSpan.js.map +1 -0
  31. package/build/npm/cjs/dev/profiling/utils.js.map +1 -0
  32. package/build/npm/cjs/dev/report-dialog.js.map +1 -0
  33. package/build/npm/cjs/dev/sdk.js +133 -0
  34. package/build/npm/cjs/dev/sdk.js.map +1 -0
  35. package/build/npm/cjs/dev/stack-parsers.js.map +1 -0
  36. package/build/npm/cjs/dev/tracing/backgroundtab.js.map +1 -0
  37. package/build/npm/cjs/dev/tracing/browserTracingIntegration.js.map +1 -0
  38. package/build/npm/cjs/{tracing → dev/tracing}/linkedTraces.js +1 -0
  39. package/build/npm/cjs/dev/tracing/linkedTraces.js.map +1 -0
  40. package/build/npm/cjs/dev/tracing/reportPageLoaded.js.map +1 -0
  41. package/build/npm/cjs/dev/tracing/request.js.map +1 -0
  42. package/build/npm/cjs/dev/tracing/setActiveSpan.js.map +1 -0
  43. package/build/npm/cjs/dev/tracing/utils.js.map +1 -0
  44. package/build/npm/cjs/dev/transports/fetch.js.map +1 -0
  45. package/build/npm/cjs/dev/transports/offline.js.map +1 -0
  46. package/build/npm/cjs/dev/userfeedback.js.map +1 -0
  47. package/build/npm/cjs/dev/utils/detectBrowserExtension.js.map +1 -0
  48. package/build/npm/cjs/dev/utils/lazyLoadIntegration.js.map +1 -0
  49. package/build/npm/cjs/prod/client.js +125 -0
  50. package/build/npm/cjs/prod/client.js.map +1 -0
  51. package/build/npm/cjs/prod/debug-build.js +11 -0
  52. package/build/npm/cjs/prod/debug-build.js.map +1 -0
  53. package/build/npm/cjs/prod/diagnose-sdk.js +51 -0
  54. package/build/npm/cjs/prod/diagnose-sdk.js.map +1 -0
  55. package/build/npm/cjs/prod/eventbuilder.js +397 -0
  56. package/build/npm/cjs/prod/eventbuilder.js.map +1 -0
  57. package/build/npm/cjs/prod/feedbackAsync.js +15 -0
  58. package/build/npm/cjs/prod/feedbackAsync.js.map +1 -0
  59. package/build/npm/cjs/prod/feedbackSync.js +12 -0
  60. package/build/npm/cjs/prod/feedbackSync.js.map +1 -0
  61. package/build/npm/cjs/prod/helpers.js +185 -0
  62. package/build/npm/cjs/prod/helpers.js.map +1 -0
  63. package/build/npm/cjs/prod/index.js +179 -0
  64. package/build/npm/cjs/prod/index.js.map +1 -0
  65. package/build/npm/cjs/prod/integrations/breadcrumbs.js +341 -0
  66. package/build/npm/cjs/prod/integrations/breadcrumbs.js.map +1 -0
  67. package/build/npm/cjs/prod/integrations/browserapierrors.js +259 -0
  68. package/build/npm/cjs/prod/integrations/browserapierrors.js.map +1 -0
  69. package/build/npm/cjs/prod/integrations/browsersession.js +44 -0
  70. package/build/npm/cjs/prod/integrations/browsersession.js.map +1 -0
  71. package/build/npm/cjs/prod/integrations/contextlines.js +89 -0
  72. package/build/npm/cjs/prod/integrations/contextlines.js.map +1 -0
  73. package/build/npm/cjs/prod/integrations/featureFlags/growthbook/integration.js +29 -0
  74. package/build/npm/cjs/prod/integrations/featureFlags/growthbook/integration.js.map +1 -0
  75. package/build/npm/cjs/prod/integrations/featureFlags/launchdarkly/integration.js +55 -0
  76. package/build/npm/cjs/prod/integrations/featureFlags/launchdarkly/integration.js.map +1 -0
  77. package/build/npm/cjs/prod/integrations/featureFlags/openfeature/integration.js +38 -0
  78. package/build/npm/cjs/prod/integrations/featureFlags/openfeature/integration.js.map +1 -0
  79. package/build/npm/cjs/prod/integrations/featureFlags/statsig/integration.js +48 -0
  80. package/build/npm/cjs/prod/integrations/featureFlags/statsig/integration.js.map +1 -0
  81. package/build/npm/cjs/prod/integrations/featureFlags/unleash/integration.js +74 -0
  82. package/build/npm/cjs/prod/integrations/featureFlags/unleash/integration.js.map +1 -0
  83. package/build/npm/cjs/prod/integrations/globalhandlers.js +210 -0
  84. package/build/npm/cjs/prod/integrations/globalhandlers.js.map +1 -0
  85. package/build/npm/cjs/prod/integrations/graphqlClient.js +180 -0
  86. package/build/npm/cjs/prod/integrations/graphqlClient.js.map +1 -0
  87. package/build/npm/cjs/prod/integrations/httpclient.js +395 -0
  88. package/build/npm/cjs/prod/integrations/httpclient.js.map +1 -0
  89. package/build/npm/cjs/prod/integrations/httpcontext.js +35 -0
  90. package/build/npm/cjs/prod/integrations/httpcontext.js.map +1 -0
  91. package/build/npm/cjs/prod/integrations/linkederrors.js +39 -0
  92. package/build/npm/cjs/prod/integrations/linkederrors.js.map +1 -0
  93. package/build/npm/cjs/prod/integrations/reportingobserver.js +85 -0
  94. package/build/npm/cjs/prod/integrations/reportingobserver.js.map +1 -0
  95. package/build/npm/cjs/prod/integrations/spotlight.js +85 -0
  96. package/build/npm/cjs/prod/integrations/spotlight.js.map +1 -0
  97. package/build/npm/cjs/prod/integrations/webWorker.js +251 -0
  98. package/build/npm/cjs/prod/integrations/webWorker.js.map +1 -0
  99. package/build/npm/cjs/prod/profiling/UIProfiler.js +341 -0
  100. package/build/npm/cjs/prod/profiling/UIProfiler.js.map +1 -0
  101. package/build/npm/cjs/prod/profiling/integration.js +150 -0
  102. package/build/npm/cjs/prod/profiling/integration.js.map +1 -0
  103. package/build/npm/cjs/prod/profiling/startProfileForSpan.js +144 -0
  104. package/build/npm/cjs/prod/profiling/startProfileForSpan.js.map +1 -0
  105. package/build/npm/cjs/prod/profiling/utils.js +786 -0
  106. package/build/npm/cjs/prod/profiling/utils.js.map +1 -0
  107. package/build/npm/cjs/prod/report-dialog.js +68 -0
  108. package/build/npm/cjs/prod/report-dialog.js.map +1 -0
  109. package/build/npm/cjs/{sdk.js → prod/sdk.js} +5 -2
  110. package/build/npm/cjs/prod/sdk.js.map +1 -0
  111. package/build/npm/cjs/prod/stack-parsers.js +202 -0
  112. package/build/npm/cjs/prod/stack-parsers.js.map +1 -0
  113. package/build/npm/cjs/prod/tracing/backgroundtab.js +46 -0
  114. package/build/npm/cjs/prod/tracing/backgroundtab.js.map +1 -0
  115. package/build/npm/cjs/prod/tracing/browserTracingIntegration.js +577 -0
  116. package/build/npm/cjs/prod/tracing/browserTracingIntegration.js.map +1 -0
  117. package/build/npm/cjs/prod/tracing/linkedTraces.js +227 -0
  118. package/build/npm/cjs/prod/tracing/linkedTraces.js.map +1 -0
  119. package/build/npm/cjs/prod/tracing/reportPageLoaded.js +18 -0
  120. package/build/npm/cjs/prod/tracing/reportPageLoaded.js.map +1 -0
  121. package/build/npm/cjs/prod/tracing/request.js +342 -0
  122. package/build/npm/cjs/prod/tracing/request.js.map +1 -0
  123. package/build/npm/cjs/prod/tracing/setActiveSpan.js +68 -0
  124. package/build/npm/cjs/prod/tracing/setActiveSpan.js.map +1 -0
  125. package/build/npm/cjs/prod/tracing/utils.js +54 -0
  126. package/build/npm/cjs/prod/tracing/utils.js.map +1 -0
  127. package/build/npm/cjs/prod/transports/fetch.js +71 -0
  128. package/build/npm/cjs/prod/transports/fetch.js.map +1 -0
  129. package/build/npm/cjs/prod/transports/offline.js +168 -0
  130. package/build/npm/cjs/prod/transports/offline.js.map +1 -0
  131. package/build/npm/cjs/prod/userfeedback.js +42 -0
  132. package/build/npm/cjs/prod/userfeedback.js.map +1 -0
  133. package/build/npm/cjs/prod/utils/detectBrowserExtension.js +59 -0
  134. package/build/npm/cjs/prod/utils/detectBrowserExtension.js.map +1 -0
  135. package/build/npm/cjs/prod/utils/lazyLoadIntegration.js +106 -0
  136. package/build/npm/cjs/prod/utils/lazyLoadIntegration.js.map +1 -0
  137. package/build/npm/esm/dev/client.js.map +1 -0
  138. package/build/npm/esm/dev/debug-build.js.map +1 -0
  139. package/build/npm/esm/dev/diagnose-sdk.js.map +1 -0
  140. package/build/npm/esm/dev/eventbuilder.js.map +1 -0
  141. package/build/npm/esm/dev/feedbackAsync.js.map +1 -0
  142. package/build/npm/esm/dev/feedbackSync.js.map +1 -0
  143. package/build/npm/esm/dev/helpers.js.map +1 -0
  144. package/build/npm/esm/dev/integrations/breadcrumbs.js.map +1 -0
  145. package/build/npm/esm/dev/integrations/browserapierrors.js.map +1 -0
  146. package/build/npm/esm/dev/integrations/browsersession.js.map +1 -0
  147. package/build/npm/esm/dev/integrations/contextlines.js.map +1 -0
  148. package/build/npm/esm/dev/integrations/featureFlags/growthbook/integration.js.map +1 -0
  149. package/build/npm/esm/dev/integrations/featureFlags/launchdarkly/integration.js.map +1 -0
  150. package/build/npm/esm/dev/integrations/featureFlags/openfeature/integration.js.map +1 -0
  151. package/build/npm/esm/dev/integrations/featureFlags/statsig/integration.js.map +1 -0
  152. package/build/npm/esm/dev/integrations/featureFlags/unleash/integration.js.map +1 -0
  153. package/build/npm/esm/{integrations → dev/integrations}/globalhandlers.js +1 -1
  154. package/build/npm/esm/dev/integrations/globalhandlers.js.map +1 -0
  155. package/build/npm/esm/dev/integrations/graphqlClient.js.map +1 -0
  156. package/build/npm/esm/dev/integrations/httpclient.js.map +1 -0
  157. package/build/npm/esm/dev/integrations/httpcontext.js.map +1 -0
  158. package/build/npm/esm/dev/integrations/linkederrors.js.map +1 -0
  159. package/build/npm/esm/dev/integrations/reportingobserver.js.map +1 -0
  160. package/build/npm/esm/dev/integrations/spotlight.js.map +1 -0
  161. package/build/npm/esm/dev/integrations/webWorker.js.map +1 -0
  162. package/build/npm/esm/dev/package.json +1 -0
  163. package/build/npm/esm/{profiling/lifecycleMode/traceLifecycleProfiler.js → dev/profiling/UIProfiler.js} +74 -76
  164. package/build/npm/esm/dev/profiling/UIProfiler.js.map +1 -0
  165. package/build/npm/esm/{profiling → dev/profiling}/integration.js +2 -2
  166. package/build/npm/esm/dev/profiling/integration.js.map +1 -0
  167. package/build/npm/esm/dev/profiling/startProfileForSpan.js.map +1 -0
  168. package/build/npm/esm/dev/profiling/utils.js.map +1 -0
  169. package/build/npm/esm/dev/report-dialog.js.map +1 -0
  170. package/build/npm/esm/dev/sdk.js +128 -0
  171. package/build/npm/esm/dev/sdk.js.map +1 -0
  172. package/build/npm/esm/dev/stack-parsers.js.map +1 -0
  173. package/build/npm/esm/dev/tracing/backgroundtab.js.map +1 -0
  174. package/build/npm/esm/dev/tracing/browserTracingIntegration.js.map +1 -0
  175. package/build/npm/esm/{tracing → dev/tracing}/linkedTraces.js +1 -0
  176. package/build/npm/esm/dev/tracing/linkedTraces.js.map +1 -0
  177. package/build/npm/esm/dev/tracing/reportPageLoaded.js.map +1 -0
  178. package/build/npm/esm/dev/tracing/request.js.map +1 -0
  179. package/build/npm/esm/dev/tracing/setActiveSpan.js.map +1 -0
  180. package/build/npm/esm/dev/tracing/utils.js.map +1 -0
  181. package/build/npm/esm/dev/transports/fetch.js.map +1 -0
  182. package/build/npm/esm/dev/transports/offline.js.map +1 -0
  183. package/build/npm/esm/dev/userfeedback.js.map +1 -0
  184. package/build/npm/esm/dev/utils/detectBrowserExtension.js.map +1 -0
  185. package/build/npm/esm/dev/utils/lazyLoadIntegration.js.map +1 -0
  186. package/build/npm/esm/prod/client.js +122 -0
  187. package/build/npm/esm/prod/client.js.map +1 -0
  188. package/build/npm/esm/prod/debug-build.js +9 -0
  189. package/build/npm/esm/prod/debug-build.js.map +1 -0
  190. package/build/npm/esm/prod/diagnose-sdk.js +49 -0
  191. package/build/npm/esm/prod/diagnose-sdk.js.map +1 -0
  192. package/build/npm/esm/prod/eventbuilder.js +390 -0
  193. package/build/npm/esm/prod/eventbuilder.js.map +1 -0
  194. package/build/npm/esm/prod/feedbackAsync.js +13 -0
  195. package/build/npm/esm/prod/feedbackAsync.js.map +1 -0
  196. package/build/npm/esm/prod/feedbackSync.js +10 -0
  197. package/build/npm/esm/prod/feedbackSync.js.map +1 -0
  198. package/build/npm/esm/prod/helpers.js +179 -0
  199. package/build/npm/esm/prod/helpers.js.map +1 -0
  200. package/build/npm/esm/prod/index.js +40 -0
  201. package/build/npm/esm/prod/index.js.map +1 -0
  202. package/build/npm/esm/prod/integrations/breadcrumbs.js +339 -0
  203. package/build/npm/esm/prod/integrations/breadcrumbs.js.map +1 -0
  204. package/build/npm/esm/prod/integrations/browserapierrors.js +257 -0
  205. package/build/npm/esm/prod/integrations/browserapierrors.js.map +1 -0
  206. package/build/npm/esm/prod/integrations/browsersession.js +42 -0
  207. package/build/npm/esm/prod/integrations/browsersession.js.map +1 -0
  208. package/build/npm/esm/prod/integrations/contextlines.js +86 -0
  209. package/build/npm/esm/prod/integrations/contextlines.js.map +1 -0
  210. package/build/npm/esm/prod/integrations/featureFlags/growthbook/integration.js +27 -0
  211. package/build/npm/esm/prod/integrations/featureFlags/growthbook/integration.js.map +1 -0
  212. package/build/npm/esm/prod/integrations/featureFlags/launchdarkly/integration.js +52 -0
  213. package/build/npm/esm/prod/integrations/featureFlags/launchdarkly/integration.js.map +1 -0
  214. package/build/npm/esm/prod/integrations/featureFlags/openfeature/integration.js +35 -0
  215. package/build/npm/esm/prod/integrations/featureFlags/openfeature/integration.js.map +1 -0
  216. package/build/npm/esm/prod/integrations/featureFlags/statsig/integration.js +46 -0
  217. package/build/npm/esm/prod/integrations/featureFlags/statsig/integration.js.map +1 -0
  218. package/build/npm/esm/prod/integrations/featureFlags/unleash/integration.js +72 -0
  219. package/build/npm/esm/prod/integrations/featureFlags/unleash/integration.js.map +1 -0
  220. package/build/npm/esm/prod/integrations/globalhandlers.js +206 -0
  221. package/build/npm/esm/prod/integrations/globalhandlers.js.map +1 -0
  222. package/build/npm/esm/prod/integrations/graphqlClient.js +175 -0
  223. package/build/npm/esm/prod/integrations/graphqlClient.js.map +1 -0
  224. package/build/npm/esm/prod/integrations/httpclient.js +393 -0
  225. package/build/npm/esm/prod/integrations/httpclient.js.map +1 -0
  226. package/build/npm/esm/prod/integrations/httpcontext.js +33 -0
  227. package/build/npm/esm/prod/integrations/httpcontext.js.map +1 -0
  228. package/build/npm/esm/prod/integrations/linkederrors.js +37 -0
  229. package/build/npm/esm/prod/integrations/linkederrors.js.map +1 -0
  230. package/build/npm/esm/prod/integrations/reportingobserver.js +83 -0
  231. package/build/npm/esm/prod/integrations/reportingobserver.js.map +1 -0
  232. package/build/npm/esm/prod/integrations/spotlight.js +81 -0
  233. package/build/npm/esm/prod/integrations/spotlight.js.map +1 -0
  234. package/build/npm/esm/prod/integrations/webWorker.js +247 -0
  235. package/build/npm/esm/prod/integrations/webWorker.js.map +1 -0
  236. package/build/npm/esm/prod/package.json +1 -0
  237. package/build/npm/esm/prod/profiling/UIProfiler.js +339 -0
  238. package/build/npm/esm/prod/profiling/UIProfiler.js.map +1 -0
  239. package/build/npm/esm/prod/profiling/integration.js +148 -0
  240. package/build/npm/esm/prod/profiling/integration.js.map +1 -0
  241. package/build/npm/esm/prod/profiling/startProfileForSpan.js +142 -0
  242. package/build/npm/esm/prod/profiling/startProfileForSpan.js.map +1 -0
  243. package/build/npm/esm/prod/profiling/utils.js +763 -0
  244. package/build/npm/esm/prod/profiling/utils.js.map +1 -0
  245. package/build/npm/esm/prod/report-dialog.js +66 -0
  246. package/build/npm/esm/prod/report-dialog.js.map +1 -0
  247. package/build/npm/esm/{sdk.js → prod/sdk.js} +5 -2
  248. package/build/npm/esm/prod/sdk.js.map +1 -0
  249. package/build/npm/esm/prod/stack-parsers.js +194 -0
  250. package/build/npm/esm/prod/stack-parsers.js.map +1 -0
  251. package/build/npm/esm/prod/tracing/backgroundtab.js +44 -0
  252. package/build/npm/esm/prod/tracing/backgroundtab.js.map +1 -0
  253. package/build/npm/esm/prod/tracing/browserTracingIntegration.js +571 -0
  254. package/build/npm/esm/prod/tracing/browserTracingIntegration.js.map +1 -0
  255. package/build/npm/esm/prod/tracing/linkedTraces.js +218 -0
  256. package/build/npm/esm/prod/tracing/linkedTraces.js.map +1 -0
  257. package/build/npm/esm/prod/tracing/reportPageLoaded.js +16 -0
  258. package/build/npm/esm/prod/tracing/reportPageLoaded.js.map +1 -0
  259. package/build/npm/esm/prod/tracing/request.js +338 -0
  260. package/build/npm/esm/prod/tracing/request.js.map +1 -0
  261. package/build/npm/esm/prod/tracing/setActiveSpan.js +66 -0
  262. package/build/npm/esm/prod/tracing/setActiveSpan.js.map +1 -0
  263. package/build/npm/esm/prod/tracing/utils.js +49 -0
  264. package/build/npm/esm/prod/tracing/utils.js.map +1 -0
  265. package/build/npm/esm/prod/transports/fetch.js +69 -0
  266. package/build/npm/esm/prod/transports/fetch.js.map +1 -0
  267. package/build/npm/esm/prod/transports/offline.js +162 -0
  268. package/build/npm/esm/prod/transports/offline.js.map +1 -0
  269. package/build/npm/esm/prod/userfeedback.js +40 -0
  270. package/build/npm/esm/prod/userfeedback.js.map +1 -0
  271. package/build/npm/esm/prod/utils/detectBrowserExtension.js +57 -0
  272. package/build/npm/esm/prod/utils/detectBrowserExtension.js.map +1 -0
  273. package/build/npm/esm/prod/utils/lazyLoadIntegration.js +104 -0
  274. package/build/npm/esm/prod/utils/lazyLoadIntegration.js.map +1 -0
  275. package/build/npm/types/client.d.ts +11 -0
  276. package/build/npm/types/client.d.ts.map +1 -1
  277. package/build/npm/types/profiling/{lifecycleMode/traceLifecycleProfiler.d.ts → UIProfiler.d.ts} +6 -2
  278. package/build/npm/types/profiling/UIProfiler.d.ts.map +1 -0
  279. package/build/npm/types/sdk.d.ts.map +1 -1
  280. package/build/npm/types-ts3.8/client.d.ts +11 -0
  281. package/build/npm/types-ts3.8/profiling/{lifecycleMode/traceLifecycleProfiler.d.ts → UIProfiler.d.ts} +6 -2
  282. package/package.json +21 -16
  283. package/build/npm/cjs/client.js.map +0 -1
  284. package/build/npm/cjs/debug-build.js.map +0 -1
  285. package/build/npm/cjs/diagnose-sdk.js.map +0 -1
  286. package/build/npm/cjs/eventbuilder.js.map +0 -1
  287. package/build/npm/cjs/feedbackAsync.js.map +0 -1
  288. package/build/npm/cjs/feedbackSync.js.map +0 -1
  289. package/build/npm/cjs/helpers.js.map +0 -1
  290. package/build/npm/cjs/integrations/breadcrumbs.js.map +0 -1
  291. package/build/npm/cjs/integrations/browserapierrors.js.map +0 -1
  292. package/build/npm/cjs/integrations/browsersession.js.map +0 -1
  293. package/build/npm/cjs/integrations/contextlines.js.map +0 -1
  294. package/build/npm/cjs/integrations/featureFlags/growthbook/integration.js.map +0 -1
  295. package/build/npm/cjs/integrations/featureFlags/launchdarkly/integration.js.map +0 -1
  296. package/build/npm/cjs/integrations/featureFlags/openfeature/integration.js.map +0 -1
  297. package/build/npm/cjs/integrations/featureFlags/statsig/integration.js.map +0 -1
  298. package/build/npm/cjs/integrations/featureFlags/unleash/integration.js.map +0 -1
  299. package/build/npm/cjs/integrations/globalhandlers.js.map +0 -1
  300. package/build/npm/cjs/integrations/graphqlClient.js.map +0 -1
  301. package/build/npm/cjs/integrations/httpclient.js.map +0 -1
  302. package/build/npm/cjs/integrations/httpcontext.js.map +0 -1
  303. package/build/npm/cjs/integrations/linkederrors.js.map +0 -1
  304. package/build/npm/cjs/integrations/reportingobserver.js.map +0 -1
  305. package/build/npm/cjs/integrations/spotlight.js.map +0 -1
  306. package/build/npm/cjs/integrations/webWorker.js.map +0 -1
  307. package/build/npm/cjs/profiling/integration.js.map +0 -1
  308. package/build/npm/cjs/profiling/lifecycleMode/traceLifecycleProfiler.js.map +0 -1
  309. package/build/npm/cjs/profiling/startProfileForSpan.js.map +0 -1
  310. package/build/npm/cjs/profiling/utils.js.map +0 -1
  311. package/build/npm/cjs/report-dialog.js.map +0 -1
  312. package/build/npm/cjs/sdk.js.map +0 -1
  313. package/build/npm/cjs/stack-parsers.js.map +0 -1
  314. package/build/npm/cjs/tracing/backgroundtab.js.map +0 -1
  315. package/build/npm/cjs/tracing/browserTracingIntegration.js.map +0 -1
  316. package/build/npm/cjs/tracing/linkedTraces.js.map +0 -1
  317. package/build/npm/cjs/tracing/reportPageLoaded.js.map +0 -1
  318. package/build/npm/cjs/tracing/request.js.map +0 -1
  319. package/build/npm/cjs/tracing/setActiveSpan.js.map +0 -1
  320. package/build/npm/cjs/tracing/utils.js.map +0 -1
  321. package/build/npm/cjs/transports/fetch.js.map +0 -1
  322. package/build/npm/cjs/transports/offline.js.map +0 -1
  323. package/build/npm/cjs/userfeedback.js.map +0 -1
  324. package/build/npm/cjs/utils/detectBrowserExtension.js.map +0 -1
  325. package/build/npm/cjs/utils/lazyLoadIntegration.js.map +0 -1
  326. package/build/npm/esm/client.js.map +0 -1
  327. package/build/npm/esm/debug-build.js.map +0 -1
  328. package/build/npm/esm/diagnose-sdk.js.map +0 -1
  329. package/build/npm/esm/eventbuilder.js.map +0 -1
  330. package/build/npm/esm/feedbackAsync.js.map +0 -1
  331. package/build/npm/esm/feedbackSync.js.map +0 -1
  332. package/build/npm/esm/helpers.js.map +0 -1
  333. package/build/npm/esm/integrations/breadcrumbs.js.map +0 -1
  334. package/build/npm/esm/integrations/browserapierrors.js.map +0 -1
  335. package/build/npm/esm/integrations/browsersession.js.map +0 -1
  336. package/build/npm/esm/integrations/contextlines.js.map +0 -1
  337. package/build/npm/esm/integrations/featureFlags/growthbook/integration.js.map +0 -1
  338. package/build/npm/esm/integrations/featureFlags/launchdarkly/integration.js.map +0 -1
  339. package/build/npm/esm/integrations/featureFlags/openfeature/integration.js.map +0 -1
  340. package/build/npm/esm/integrations/featureFlags/statsig/integration.js.map +0 -1
  341. package/build/npm/esm/integrations/featureFlags/unleash/integration.js.map +0 -1
  342. package/build/npm/esm/integrations/globalhandlers.js.map +0 -1
  343. package/build/npm/esm/integrations/graphqlClient.js.map +0 -1
  344. package/build/npm/esm/integrations/httpclient.js.map +0 -1
  345. package/build/npm/esm/integrations/httpcontext.js.map +0 -1
  346. package/build/npm/esm/integrations/linkederrors.js.map +0 -1
  347. package/build/npm/esm/integrations/reportingobserver.js.map +0 -1
  348. package/build/npm/esm/integrations/spotlight.js.map +0 -1
  349. package/build/npm/esm/integrations/webWorker.js.map +0 -1
  350. package/build/npm/esm/package.json +0 -1
  351. package/build/npm/esm/profiling/integration.js.map +0 -1
  352. package/build/npm/esm/profiling/lifecycleMode/traceLifecycleProfiler.js.map +0 -1
  353. package/build/npm/esm/profiling/startProfileForSpan.js.map +0 -1
  354. package/build/npm/esm/profiling/utils.js.map +0 -1
  355. package/build/npm/esm/report-dialog.js.map +0 -1
  356. package/build/npm/esm/sdk.js.map +0 -1
  357. package/build/npm/esm/stack-parsers.js.map +0 -1
  358. package/build/npm/esm/tracing/backgroundtab.js.map +0 -1
  359. package/build/npm/esm/tracing/browserTracingIntegration.js.map +0 -1
  360. package/build/npm/esm/tracing/linkedTraces.js.map +0 -1
  361. package/build/npm/esm/tracing/reportPageLoaded.js.map +0 -1
  362. package/build/npm/esm/tracing/request.js.map +0 -1
  363. package/build/npm/esm/tracing/setActiveSpan.js.map +0 -1
  364. package/build/npm/esm/tracing/utils.js.map +0 -1
  365. package/build/npm/esm/transports/fetch.js.map +0 -1
  366. package/build/npm/esm/transports/offline.js.map +0 -1
  367. package/build/npm/esm/userfeedback.js.map +0 -1
  368. package/build/npm/esm/utils/detectBrowserExtension.js.map +0 -1
  369. package/build/npm/esm/utils/lazyLoadIntegration.js.map +0 -1
  370. package/build/npm/types/profiling/lifecycleMode/traceLifecycleProfiler.d.ts.map +0 -1
  371. /package/build/npm/cjs/{client.js → dev/client.js} +0 -0
  372. /package/build/npm/cjs/{debug-build.js → dev/debug-build.js} +0 -0
  373. /package/build/npm/cjs/{diagnose-sdk.js → dev/diagnose-sdk.js} +0 -0
  374. /package/build/npm/cjs/{eventbuilder.js → dev/eventbuilder.js} +0 -0
  375. /package/build/npm/cjs/{feedbackAsync.js → dev/feedbackAsync.js} +0 -0
  376. /package/build/npm/cjs/{feedbackSync.js → dev/feedbackSync.js} +0 -0
  377. /package/build/npm/cjs/{helpers.js → dev/helpers.js} +0 -0
  378. /package/build/npm/cjs/{index.js → dev/index.js} +0 -0
  379. /package/build/npm/cjs/{index.js.map → dev/index.js.map} +0 -0
  380. /package/build/npm/cjs/{integrations → dev/integrations}/breadcrumbs.js +0 -0
  381. /package/build/npm/cjs/{integrations → dev/integrations}/browserapierrors.js +0 -0
  382. /package/build/npm/cjs/{integrations → dev/integrations}/browsersession.js +0 -0
  383. /package/build/npm/cjs/{integrations → dev/integrations}/contextlines.js +0 -0
  384. /package/build/npm/cjs/{integrations → dev/integrations}/featureFlags/growthbook/integration.js +0 -0
  385. /package/build/npm/cjs/{integrations → dev/integrations}/featureFlags/launchdarkly/integration.js +0 -0
  386. /package/build/npm/cjs/{integrations → dev/integrations}/featureFlags/openfeature/integration.js +0 -0
  387. /package/build/npm/cjs/{integrations → dev/integrations}/featureFlags/statsig/integration.js +0 -0
  388. /package/build/npm/cjs/{integrations → dev/integrations}/featureFlags/unleash/integration.js +0 -0
  389. /package/build/npm/cjs/{integrations → dev/integrations}/graphqlClient.js +0 -0
  390. /package/build/npm/cjs/{integrations → dev/integrations}/httpclient.js +0 -0
  391. /package/build/npm/cjs/{integrations → dev/integrations}/httpcontext.js +0 -0
  392. /package/build/npm/cjs/{integrations → dev/integrations}/linkederrors.js +0 -0
  393. /package/build/npm/cjs/{integrations → dev/integrations}/reportingobserver.js +0 -0
  394. /package/build/npm/cjs/{integrations → dev/integrations}/spotlight.js +0 -0
  395. /package/build/npm/cjs/{integrations → dev/integrations}/webWorker.js +0 -0
  396. /package/build/npm/cjs/{profiling → dev/profiling}/startProfileForSpan.js +0 -0
  397. /package/build/npm/cjs/{profiling → dev/profiling}/utils.js +0 -0
  398. /package/build/npm/cjs/{report-dialog.js → dev/report-dialog.js} +0 -0
  399. /package/build/npm/cjs/{stack-parsers.js → dev/stack-parsers.js} +0 -0
  400. /package/build/npm/cjs/{tracing → dev/tracing}/backgroundtab.js +0 -0
  401. /package/build/npm/cjs/{tracing → dev/tracing}/browserTracingIntegration.js +0 -0
  402. /package/build/npm/cjs/{tracing → dev/tracing}/reportPageLoaded.js +0 -0
  403. /package/build/npm/cjs/{tracing → dev/tracing}/request.js +0 -0
  404. /package/build/npm/cjs/{tracing → dev/tracing}/setActiveSpan.js +0 -0
  405. /package/build/npm/cjs/{tracing → dev/tracing}/utils.js +0 -0
  406. /package/build/npm/cjs/{transports → dev/transports}/fetch.js +0 -0
  407. /package/build/npm/cjs/{transports → dev/transports}/offline.js +0 -0
  408. /package/build/npm/cjs/{userfeedback.js → dev/userfeedback.js} +0 -0
  409. /package/build/npm/cjs/{utils → dev/utils}/detectBrowserExtension.js +0 -0
  410. /package/build/npm/cjs/{utils → dev/utils}/lazyLoadIntegration.js +0 -0
  411. /package/build/npm/esm/{client.js → dev/client.js} +0 -0
  412. /package/build/npm/esm/{debug-build.js → dev/debug-build.js} +0 -0
  413. /package/build/npm/esm/{diagnose-sdk.js → dev/diagnose-sdk.js} +0 -0
  414. /package/build/npm/esm/{eventbuilder.js → dev/eventbuilder.js} +0 -0
  415. /package/build/npm/esm/{feedbackAsync.js → dev/feedbackAsync.js} +0 -0
  416. /package/build/npm/esm/{feedbackSync.js → dev/feedbackSync.js} +0 -0
  417. /package/build/npm/esm/{helpers.js → dev/helpers.js} +0 -0
  418. /package/build/npm/esm/{index.js → dev/index.js} +0 -0
  419. /package/build/npm/esm/{index.js.map → dev/index.js.map} +0 -0
  420. /package/build/npm/esm/{integrations → dev/integrations}/breadcrumbs.js +0 -0
  421. /package/build/npm/esm/{integrations → dev/integrations}/browserapierrors.js +0 -0
  422. /package/build/npm/esm/{integrations → dev/integrations}/browsersession.js +0 -0
  423. /package/build/npm/esm/{integrations → dev/integrations}/contextlines.js +0 -0
  424. /package/build/npm/esm/{integrations → dev/integrations}/featureFlags/growthbook/integration.js +0 -0
  425. /package/build/npm/esm/{integrations → dev/integrations}/featureFlags/launchdarkly/integration.js +0 -0
  426. /package/build/npm/esm/{integrations → dev/integrations}/featureFlags/openfeature/integration.js +0 -0
  427. /package/build/npm/esm/{integrations → dev/integrations}/featureFlags/statsig/integration.js +0 -0
  428. /package/build/npm/esm/{integrations → dev/integrations}/featureFlags/unleash/integration.js +0 -0
  429. /package/build/npm/esm/{integrations → dev/integrations}/graphqlClient.js +0 -0
  430. /package/build/npm/esm/{integrations → dev/integrations}/httpclient.js +0 -0
  431. /package/build/npm/esm/{integrations → dev/integrations}/httpcontext.js +0 -0
  432. /package/build/npm/esm/{integrations → dev/integrations}/linkederrors.js +0 -0
  433. /package/build/npm/esm/{integrations → dev/integrations}/reportingobserver.js +0 -0
  434. /package/build/npm/esm/{integrations → dev/integrations}/spotlight.js +0 -0
  435. /package/build/npm/esm/{integrations → dev/integrations}/webWorker.js +0 -0
  436. /package/build/npm/esm/{profiling → dev/profiling}/startProfileForSpan.js +0 -0
  437. /package/build/npm/esm/{profiling → dev/profiling}/utils.js +0 -0
  438. /package/build/npm/esm/{report-dialog.js → dev/report-dialog.js} +0 -0
  439. /package/build/npm/esm/{stack-parsers.js → dev/stack-parsers.js} +0 -0
  440. /package/build/npm/esm/{tracing → dev/tracing}/backgroundtab.js +0 -0
  441. /package/build/npm/esm/{tracing → dev/tracing}/browserTracingIntegration.js +0 -0
  442. /package/build/npm/esm/{tracing → dev/tracing}/reportPageLoaded.js +0 -0
  443. /package/build/npm/esm/{tracing → dev/tracing}/request.js +0 -0
  444. /package/build/npm/esm/{tracing → dev/tracing}/setActiveSpan.js +0 -0
  445. /package/build/npm/esm/{tracing → dev/tracing}/utils.js +0 -0
  446. /package/build/npm/esm/{transports → dev/transports}/fetch.js +0 -0
  447. /package/build/npm/esm/{transports → dev/transports}/offline.js +0 -0
  448. /package/build/npm/esm/{userfeedback.js → dev/userfeedback.js} +0 -0
  449. /package/build/npm/esm/{utils → dev/utils}/detectBrowserExtension.js +0 -0
  450. /package/build/npm/esm/{utils → dev/utils}/lazyLoadIntegration.js +0 -0
@@ -0,0 +1,206 @@
1
+ import { defineIntegration, addGlobalErrorInstrumentationHandler, getClient, captureEvent, debug, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, getLocationHref, UNKNOWN_FUNCTION, isString } from '@sentry/core';
2
+ import { DEBUG_BUILD } from '../debug-build.js';
3
+ import { eventFromUnknownInput } from '../eventbuilder.js';
4
+ import { shouldIgnoreOnError } from '../helpers.js';
5
+
6
+ const INTEGRATION_NAME = 'GlobalHandlers';
7
+
8
+ const _globalHandlersIntegration = ((options = {}) => {
9
+ const _options = {
10
+ onerror: true,
11
+ onunhandledrejection: true,
12
+ ...options,
13
+ };
14
+
15
+ return {
16
+ name: INTEGRATION_NAME,
17
+ setupOnce() {
18
+ Error.stackTraceLimit = 50;
19
+ },
20
+ setup(client) {
21
+ if (_options.onerror) {
22
+ _installGlobalOnErrorHandler(client);
23
+ globalHandlerLog('onerror');
24
+ }
25
+ if (_options.onunhandledrejection) {
26
+ _installGlobalOnUnhandledRejectionHandler(client);
27
+ globalHandlerLog('onunhandledrejection');
28
+ }
29
+ },
30
+ };
31
+ }) ;
32
+
33
+ const globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);
34
+
35
+ function _installGlobalOnErrorHandler(client) {
36
+ addGlobalErrorInstrumentationHandler(data => {
37
+ const { stackParser, attachStacktrace } = getOptions();
38
+
39
+ if (getClient() !== client || shouldIgnoreOnError()) {
40
+ return;
41
+ }
42
+
43
+ const { msg, url, line, column, error } = data;
44
+
45
+ const event = _enhanceEventWithInitialFrame(
46
+ eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),
47
+ url,
48
+ line,
49
+ column,
50
+ );
51
+
52
+ event.level = 'error';
53
+
54
+ captureEvent(event, {
55
+ originalException: error,
56
+ mechanism: {
57
+ handled: false,
58
+ type: 'auto.browser.global_handlers.onerror',
59
+ },
60
+ });
61
+ });
62
+ }
63
+
64
+ function _installGlobalOnUnhandledRejectionHandler(client) {
65
+ addGlobalUnhandledRejectionInstrumentationHandler(e => {
66
+ const { stackParser, attachStacktrace } = getOptions();
67
+
68
+ if (getClient() !== client || shouldIgnoreOnError()) {
69
+ return;
70
+ }
71
+
72
+ const error = _getUnhandledRejectionError(e);
73
+
74
+ const event = isPrimitive(error)
75
+ ? _eventFromRejectionWithPrimitive(error)
76
+ : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);
77
+
78
+ event.level = 'error';
79
+
80
+ captureEvent(event, {
81
+ originalException: error,
82
+ mechanism: {
83
+ handled: false,
84
+ type: 'auto.browser.global_handlers.onunhandledrejection',
85
+ },
86
+ });
87
+ });
88
+ }
89
+
90
+ /**
91
+ *
92
+ */
93
+ function _getUnhandledRejectionError(error) {
94
+ if (isPrimitive(error)) {
95
+ return error;
96
+ }
97
+
98
+ // dig the object of the rejection out of known event types
99
+ try {
100
+
101
+ // PromiseRejectionEvents store the object of the rejection under 'reason'
102
+ // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent
103
+ if ('reason' in (error )) {
104
+ return (error ).reason;
105
+ }
106
+
107
+ // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents
108
+ // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into
109
+ // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec
110
+ // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and
111
+ // https://github.com/getsentry/sentry-javascript/issues/2380
112
+ if ('detail' in (error ) && 'reason' in (error ).detail) {
113
+ return (error ).detail.reason;
114
+ }
115
+ } catch {} // eslint-disable-line no-empty
116
+
117
+ return error;
118
+ }
119
+
120
+ /**
121
+ * Create an event from a promise rejection where the `reason` is a primitive.
122
+ *
123
+ * @param reason: The `reason` property of the promise rejection
124
+ * @returns An Event object with an appropriate `exception` value
125
+ */
126
+ function _eventFromRejectionWithPrimitive(reason) {
127
+ return {
128
+ exception: {
129
+ values: [
130
+ {
131
+ type: 'UnhandledRejection',
132
+ // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)
133
+ value: `Non-Error promise rejection captured with value: ${String(reason)}`,
134
+ },
135
+ ],
136
+ },
137
+ };
138
+ }
139
+
140
+ function _enhanceEventWithInitialFrame(
141
+ event,
142
+ url,
143
+ line,
144
+ column,
145
+ ) {
146
+ // event.exception
147
+ const e = (event.exception = event.exception || {});
148
+ // event.exception.values
149
+ const ev = (e.values = e.values || []);
150
+ // event.exception.values[0]
151
+ const ev0 = (ev[0] = ev[0] || {});
152
+ // event.exception.values[0].stacktrace
153
+ const ev0s = (ev0.stacktrace = ev0.stacktrace || {});
154
+ // event.exception.values[0].stacktrace.frames
155
+ const ev0sf = (ev0s.frames = ev0s.frames || []);
156
+
157
+ const colno = column;
158
+ const lineno = line;
159
+ const filename = getFilenameFromUrl(url) ?? getLocationHref();
160
+
161
+ // event.exception.values[0].stacktrace.frames
162
+ if (ev0sf.length === 0) {
163
+ ev0sf.push({
164
+ colno,
165
+ filename,
166
+ function: UNKNOWN_FUNCTION,
167
+ in_app: true,
168
+ lineno,
169
+ });
170
+ }
171
+
172
+ return event;
173
+ }
174
+
175
+ function globalHandlerLog(type) {
176
+ DEBUG_BUILD && debug.log(`Global Handler attached: ${type}`);
177
+ }
178
+
179
+ function getOptions() {
180
+ const client = getClient();
181
+ const options = client?.getOptions() || {
182
+ stackParser: () => [],
183
+ attachStacktrace: false,
184
+ };
185
+ return options;
186
+ }
187
+
188
+ function getFilenameFromUrl(url) {
189
+ if (!isString(url) || url.length === 0) {
190
+ return undefined;
191
+ }
192
+
193
+ // stack frame urls can be data urls, for example when initializing a Worker with a base64 encoded script
194
+ // in this case we just show the data prefix and mime type to avoid too long raw data urls
195
+ if (url.startsWith('data:')) {
196
+ const match = url.match(/^data:([^;]+)/);
197
+ const mimeType = match ? match[1] : 'text/javascript';
198
+ const isBase64 = url.includes('base64,');
199
+ return `<data:${mimeType}${isBase64 ? ',base64' : ''}>`;
200
+ }
201
+
202
+ return url; // it's fine to not truncate it as it's not put in a regex (https://codeql.github.com/codeql-query-help/javascript/js-polynomial-redos)
203
+ }
204
+
205
+ export { _eventFromRejectionWithPrimitive, _getUnhandledRejectionError, globalHandlersIntegration };
206
+ //# sourceMappingURL=globalhandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalhandlers.js","sources":["../../../../../src/integrations/globalhandlers.ts"],"sourcesContent":["import type { Client, Event, IntegrationFn, Primitive, StackParser } from '@sentry/core';\nimport {\n addGlobalErrorInstrumentationHandler,\n addGlobalUnhandledRejectionInstrumentationHandler,\n captureEvent,\n debug,\n defineIntegration,\n getClient,\n getLocationHref,\n isPrimitive,\n isString,\n UNKNOWN_FUNCTION,\n} from '@sentry/core';\nimport type { BrowserClient } from '../client';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { eventFromUnknownInput } from '../eventbuilder';\nimport { shouldIgnoreOnError } from '../helpers';\n\ntype GlobalHandlersIntegrationsOptionKeys = 'onerror' | 'onunhandledrejection';\n\ntype GlobalHandlersIntegrations = Record<GlobalHandlersIntegrationsOptionKeys, boolean>;\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options: Partial<GlobalHandlersIntegrations> = {}) => {\n const _options = {\n onerror: true,\n onunhandledrejection: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n Error.stackTraceLimit = 50;\n },\n setup(client) {\n if (_options.onerror) {\n _installGlobalOnErrorHandler(client);\n globalHandlerLog('onerror');\n }\n if (_options.onunhandledrejection) {\n _installGlobalOnUnhandledRejectionHandler(client);\n globalHandlerLog('onunhandledrejection');\n }\n },\n };\n}) satisfies IntegrationFn;\n\nexport const globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\nfunction _installGlobalOnErrorHandler(client: Client): void {\n addGlobalErrorInstrumentationHandler(data => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const { msg, url, line, column, error } = data;\n\n const event = _enhanceEventWithInitialFrame(\n eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n url,\n line,\n column,\n );\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'auto.browser.global_handlers.onerror',\n },\n });\n });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client: Client): void {\n addGlobalUnhandledRejectionInstrumentationHandler(e => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const error = _getUnhandledRejectionError(e);\n\n const event = isPrimitive(error)\n ? _eventFromRejectionWithPrimitive(error)\n : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'auto.browser.global_handlers.onunhandledrejection',\n },\n });\n });\n}\n\n/**\n *\n */\nexport function _getUnhandledRejectionError(error: unknown): unknown {\n if (isPrimitive(error)) {\n return error;\n }\n\n // dig the object of the rejection out of known event types\n try {\n type ErrorWithReason = { reason: unknown };\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in (error as ErrorWithReason)) {\n return (error as ErrorWithReason).reason;\n }\n\n type CustomEventWithDetail = { detail: { reason: unknown } };\n // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n if ('detail' in (error as CustomEventWithDetail) && 'reason' in (error as CustomEventWithDetail).detail) {\n return (error as CustomEventWithDetail).detail.reason;\n }\n } catch {} // eslint-disable-line no-empty\n\n return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nexport function _eventFromRejectionWithPrimitive(reason: Primitive): Event {\n return {\n exception: {\n values: [\n {\n type: 'UnhandledRejection',\n // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n },\n ],\n },\n };\n}\n\nfunction _enhanceEventWithInitialFrame(\n event: Event,\n url: string | undefined,\n line: number | undefined,\n column: number | undefined,\n): Event {\n // event.exception\n const e = (event.exception = event.exception || {});\n // event.exception.values\n const ev = (e.values = e.values || []);\n // event.exception.values[0]\n const ev0 = (ev[0] = ev[0] || {});\n // event.exception.values[0].stacktrace\n const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n // event.exception.values[0].stacktrace.frames\n const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n const colno = column;\n const lineno = line;\n const filename = getFilenameFromUrl(url) ?? getLocationHref();\n\n // event.exception.values[0].stacktrace.frames\n if (ev0sf.length === 0) {\n ev0sf.push({\n colno,\n filename,\n function: UNKNOWN_FUNCTION,\n in_app: true,\n lineno,\n });\n }\n\n return event;\n}\n\nfunction globalHandlerLog(type: string): void {\n DEBUG_BUILD && debug.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions(): { stackParser: StackParser; attachStacktrace?: boolean } {\n const client = getClient<BrowserClient>();\n const options = client?.getOptions() || {\n stackParser: () => [],\n attachStacktrace: false,\n };\n return options;\n}\n\nfunction getFilenameFromUrl(url: string | undefined): string | undefined {\n if (!isString(url) || url.length === 0) {\n return undefined;\n }\n\n // stack frame urls can be data urls, for example when initializing a Worker with a base64 encoded script\n // in this case we just show the data prefix and mime type to avoid too long raw data urls\n if (url.startsWith('data:')) {\n const match = url.match(/^data:([^;]+)/);\n const mimeType = match ? match[1] : 'text/javascript';\n const isBase64 = url.includes('base64,');\n return `<data:${mimeType}${isBase64 ? ',base64' : ''}>`;\n }\n\n return url; // it's fine to not truncate it as it's not put in a regex (https://codeql.github.com/codeql-query-help/javascript/js-polynomial-redos)\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ import { defineIntegration, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_URL_FULL, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, isString, stringMatchesSomePattern } from '@sentry/core';
2
+ import { SENTRY_XHR_DATA_KEY, getBodyString, getFetchRequestArgBody } from '@sentry-internal/browser-utils';
3
+
4
+ const INTEGRATION_NAME = 'GraphQLClient';
5
+
6
+ const _graphqlClientIntegration = ((options) => {
7
+ return {
8
+ name: INTEGRATION_NAME,
9
+ setup(client) {
10
+ _updateSpanWithGraphQLData(client, options);
11
+ _updateBreadcrumbWithGraphQLData(client, options);
12
+ },
13
+ };
14
+ }) ;
15
+
16
+ function _updateSpanWithGraphQLData(client, options) {
17
+ client.on('beforeOutgoingRequestSpan', (span, hint) => {
18
+ const spanJSON = spanToJSON(span);
19
+
20
+ const spanAttributes = spanJSON.data || {};
21
+ const spanOp = spanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_OP];
22
+
23
+ const isHttpClientSpan = spanOp === 'http.client';
24
+
25
+ if (!isHttpClientSpan) {
26
+ return;
27
+ }
28
+
29
+ const httpUrl = spanAttributes[SEMANTIC_ATTRIBUTE_URL_FULL] || spanAttributes['http.url'];
30
+ const httpMethod = spanAttributes[SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD] || spanAttributes['http.method'];
31
+
32
+ if (!isString(httpUrl) || !isString(httpMethod)) {
33
+ return;
34
+ }
35
+
36
+ const { endpoints } = options;
37
+ const isTracedGraphqlEndpoint = stringMatchesSomePattern(httpUrl, endpoints);
38
+ const payload = getRequestPayloadXhrOrFetch(hint );
39
+
40
+ if (isTracedGraphqlEndpoint && payload) {
41
+ const graphqlBody = getGraphQLRequestPayload(payload);
42
+
43
+ if (graphqlBody) {
44
+ const operationInfo = _getGraphQLOperation(graphqlBody);
45
+ span.updateName(`${httpMethod} ${httpUrl} (${operationInfo})`);
46
+ span.setAttribute('graphql.document', payload);
47
+ }
48
+ }
49
+ });
50
+ }
51
+
52
+ function _updateBreadcrumbWithGraphQLData(client, options) {
53
+ client.on('beforeOutgoingRequestBreadcrumb', (breadcrumb, handlerData) => {
54
+ const { category, type, data } = breadcrumb;
55
+
56
+ const isFetch = category === 'fetch';
57
+ const isXhr = category === 'xhr';
58
+ const isHttpBreadcrumb = type === 'http';
59
+
60
+ if (isHttpBreadcrumb && (isFetch || isXhr)) {
61
+ const httpUrl = data?.url;
62
+ const { endpoints } = options;
63
+
64
+ const isTracedGraphqlEndpoint = stringMatchesSomePattern(httpUrl, endpoints);
65
+ const payload = getRequestPayloadXhrOrFetch(handlerData );
66
+
67
+ if (isTracedGraphqlEndpoint && data && payload) {
68
+ const graphqlBody = getGraphQLRequestPayload(payload);
69
+
70
+ if (!data.graphql && graphqlBody) {
71
+ const operationInfo = _getGraphQLOperation(graphqlBody);
72
+ data['graphql.document'] = graphqlBody.query;
73
+ data['graphql.operation'] = operationInfo;
74
+ }
75
+ }
76
+ }
77
+ });
78
+ }
79
+
80
+ /**
81
+ * @param requestBody - GraphQL request
82
+ * @returns A formatted version of the request: 'TYPE NAME' or 'TYPE'
83
+ */
84
+ function _getGraphQLOperation(requestBody) {
85
+ const { query: graphqlQuery, operationName: graphqlOperationName } = requestBody;
86
+
87
+ const { operationName = graphqlOperationName, operationType } = parseGraphQLQuery(graphqlQuery);
88
+ const operationInfo = operationName ? `${operationType} ${operationName}` : `${operationType}`;
89
+
90
+ return operationInfo;
91
+ }
92
+
93
+ /**
94
+ * Get the request body/payload based on the shape of the hint.
95
+ *
96
+ * Exported for tests only.
97
+ */
98
+ function getRequestPayloadXhrOrFetch(hint) {
99
+ const isXhr = 'xhr' in hint;
100
+
101
+ let body;
102
+
103
+ if (isXhr) {
104
+ const sentryXhrData = hint.xhr[SENTRY_XHR_DATA_KEY];
105
+ body = sentryXhrData && getBodyString(sentryXhrData.body)[0];
106
+ } else {
107
+ const sentryFetchData = getFetchRequestArgBody(hint.input);
108
+ body = getBodyString(sentryFetchData)[0];
109
+ }
110
+
111
+ return body;
112
+ }
113
+
114
+ /**
115
+ * Extract the name and type of the operation from the GraphQL query.
116
+ *
117
+ * Exported for tests only.
118
+ */
119
+ function parseGraphQLQuery(query) {
120
+ const namedQueryRe = /^(?:\s*)(query|mutation|subscription)(?:\s*)(\w+)(?:\s*)[{(]/;
121
+ const unnamedQueryRe = /^(?:\s*)(query|mutation|subscription)(?:\s*)[{(]/;
122
+
123
+ const namedMatch = query.match(namedQueryRe);
124
+ if (namedMatch) {
125
+ return {
126
+ operationType: namedMatch[1],
127
+ operationName: namedMatch[2],
128
+ };
129
+ }
130
+
131
+ const unnamedMatch = query.match(unnamedQueryRe);
132
+ if (unnamedMatch) {
133
+ return {
134
+ operationType: unnamedMatch[1],
135
+ operationName: undefined,
136
+ };
137
+ }
138
+ return {
139
+ operationType: undefined,
140
+ operationName: undefined,
141
+ };
142
+ }
143
+
144
+ /**
145
+ * Extract the payload of a request if it's GraphQL.
146
+ * Exported for tests only.
147
+ * @param payload - A valid JSON string
148
+ * @returns A POJO or undefined
149
+ */
150
+ function getGraphQLRequestPayload(payload) {
151
+ let graphqlBody = undefined;
152
+ try {
153
+ const requestBody = JSON.parse(payload) ;
154
+
155
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
156
+ const isGraphQLRequest = !!requestBody['query'];
157
+ if (isGraphQLRequest) {
158
+ graphqlBody = requestBody;
159
+ }
160
+ } finally {
161
+ // Fallback to undefined if payload is an invalid JSON (SyntaxError)
162
+
163
+ /* eslint-disable no-unsafe-finally */
164
+ return graphqlBody;
165
+ }
166
+ }
167
+
168
+ /**
169
+ * This integration ensures that GraphQL requests made in the browser
170
+ * have their GraphQL-specific data captured and attached to spans and breadcrumbs.
171
+ */
172
+ const graphqlClientIntegration = defineIntegration(_graphqlClientIntegration);
173
+
174
+ export { getGraphQLRequestPayload, getRequestPayloadXhrOrFetch, graphqlClientIntegration, parseGraphQLQuery };
175
+ //# sourceMappingURL=graphqlClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphqlClient.js","sources":["../../../../../src/integrations/graphqlClient.ts"],"sourcesContent":["import type { Client, IntegrationFn } from '@sentry/core';\nimport {\n defineIntegration,\n isString,\n SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_URL_FULL,\n spanToJSON,\n stringMatchesSomePattern,\n} from '@sentry/core';\nimport type { FetchHint, XhrHint } from '@sentry-internal/browser-utils';\nimport { getBodyString, getFetchRequestArgBody, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\n\ninterface GraphQLClientOptions {\n endpoints: Array<string | RegExp>;\n}\n\n/** Standard graphql request shape: https://graphql.org/learn/serving-over-http/#post-request-and-body */\ninterface GraphQLRequestPayload {\n query: string;\n operationName?: string;\n variables?: Record<string, unknown>;\n extensions?: Record<string, unknown>;\n}\n\ninterface GraphQLOperation {\n operationType?: string;\n operationName?: string;\n}\n\nconst INTEGRATION_NAME = 'GraphQLClient';\n\nconst _graphqlClientIntegration = ((options: GraphQLClientOptions) => {\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n _updateSpanWithGraphQLData(client, options);\n _updateBreadcrumbWithGraphQLData(client, options);\n },\n };\n}) satisfies IntegrationFn;\n\nfunction _updateSpanWithGraphQLData(client: Client, options: GraphQLClientOptions): void {\n client.on('beforeOutgoingRequestSpan', (span, hint) => {\n const spanJSON = spanToJSON(span);\n\n const spanAttributes = spanJSON.data || {};\n const spanOp = spanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_OP];\n\n const isHttpClientSpan = spanOp === 'http.client';\n\n if (!isHttpClientSpan) {\n return;\n }\n\n const httpUrl = spanAttributes[SEMANTIC_ATTRIBUTE_URL_FULL] || spanAttributes['http.url'];\n const httpMethod = spanAttributes[SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD] || spanAttributes['http.method'];\n\n if (!isString(httpUrl) || !isString(httpMethod)) {\n return;\n }\n\n const { endpoints } = options;\n const isTracedGraphqlEndpoint = stringMatchesSomePattern(httpUrl, endpoints);\n const payload = getRequestPayloadXhrOrFetch(hint as XhrHint | FetchHint);\n\n if (isTracedGraphqlEndpoint && payload) {\n const graphqlBody = getGraphQLRequestPayload(payload);\n\n if (graphqlBody) {\n const operationInfo = _getGraphQLOperation(graphqlBody);\n span.updateName(`${httpMethod} ${httpUrl} (${operationInfo})`);\n span.setAttribute('graphql.document', payload);\n }\n }\n });\n}\n\nfunction _updateBreadcrumbWithGraphQLData(client: Client, options: GraphQLClientOptions): void {\n client.on('beforeOutgoingRequestBreadcrumb', (breadcrumb, handlerData) => {\n const { category, type, data } = breadcrumb;\n\n const isFetch = category === 'fetch';\n const isXhr = category === 'xhr';\n const isHttpBreadcrumb = type === 'http';\n\n if (isHttpBreadcrumb && (isFetch || isXhr)) {\n const httpUrl = data?.url;\n const { endpoints } = options;\n\n const isTracedGraphqlEndpoint = stringMatchesSomePattern(httpUrl, endpoints);\n const payload = getRequestPayloadXhrOrFetch(handlerData as XhrHint | FetchHint);\n\n if (isTracedGraphqlEndpoint && data && payload) {\n const graphqlBody = getGraphQLRequestPayload(payload);\n\n if (!data.graphql && graphqlBody) {\n const operationInfo = _getGraphQLOperation(graphqlBody);\n data['graphql.document'] = graphqlBody.query;\n data['graphql.operation'] = operationInfo;\n }\n }\n }\n });\n}\n\n/**\n * @param requestBody - GraphQL request\n * @returns A formatted version of the request: 'TYPE NAME' or 'TYPE'\n */\nfunction _getGraphQLOperation(requestBody: GraphQLRequestPayload): string {\n const { query: graphqlQuery, operationName: graphqlOperationName } = requestBody;\n\n const { operationName = graphqlOperationName, operationType } = parseGraphQLQuery(graphqlQuery);\n const operationInfo = operationName ? `${operationType} ${operationName}` : `${operationType}`;\n\n return operationInfo;\n}\n\n/**\n * Get the request body/payload based on the shape of the hint.\n *\n * Exported for tests only.\n */\nexport function getRequestPayloadXhrOrFetch(hint: XhrHint | FetchHint): string | undefined {\n const isXhr = 'xhr' in hint;\n\n let body: string | undefined;\n\n if (isXhr) {\n const sentryXhrData = hint.xhr[SENTRY_XHR_DATA_KEY];\n body = sentryXhrData && getBodyString(sentryXhrData.body)[0];\n } else {\n const sentryFetchData = getFetchRequestArgBody(hint.input);\n body = getBodyString(sentryFetchData)[0];\n }\n\n return body;\n}\n\n/**\n * Extract the name and type of the operation from the GraphQL query.\n *\n * Exported for tests only.\n */\nexport function parseGraphQLQuery(query: string): GraphQLOperation {\n const namedQueryRe = /^(?:\\s*)(query|mutation|subscription)(?:\\s*)(\\w+)(?:\\s*)[{(]/;\n const unnamedQueryRe = /^(?:\\s*)(query|mutation|subscription)(?:\\s*)[{(]/;\n\n const namedMatch = query.match(namedQueryRe);\n if (namedMatch) {\n return {\n operationType: namedMatch[1],\n operationName: namedMatch[2],\n };\n }\n\n const unnamedMatch = query.match(unnamedQueryRe);\n if (unnamedMatch) {\n return {\n operationType: unnamedMatch[1],\n operationName: undefined,\n };\n }\n return {\n operationType: undefined,\n operationName: undefined,\n };\n}\n\n/**\n * Extract the payload of a request if it's GraphQL.\n * Exported for tests only.\n * @param payload - A valid JSON string\n * @returns A POJO or undefined\n */\nexport function getGraphQLRequestPayload(payload: string): GraphQLRequestPayload | undefined {\n let graphqlBody = undefined;\n try {\n const requestBody = JSON.parse(payload) satisfies GraphQLRequestPayload;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const isGraphQLRequest = !!requestBody['query'];\n if (isGraphQLRequest) {\n graphqlBody = requestBody;\n }\n } finally {\n // Fallback to undefined if payload is an invalid JSON (SyntaxError)\n\n /* eslint-disable no-unsafe-finally */\n return graphqlBody;\n }\n}\n\n/**\n * This integration ensures that GraphQL requests made in the browser\n * have their GraphQL-specific data captured and attached to spans and breadcrumbs.\n */\nexport const graphqlClientIntegration = defineIntegration(_graphqlClientIntegration);\n"],"names":[],"mappings":"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"}